]> granicus.if.org Git - shadow/commitdiff
[svn-upgrade] Integrating new upstream version, shadow (4.0.1)
authornekral-guest <nekral-guest@5a98b0ae-9ef6-0310-add3-de5d479b70d7>
Sun, 7 Oct 2007 11:44:59 +0000 (11:44 +0000)
committernekral-guest <nekral-guest@5a98b0ae-9ef6-0310-add3-de5d479b70d7>
Sun, 7 Oct 2007 11:44:59 +0000 (11:44 +0000)
194 files changed:
ABOUT-NLS
ChangeLog
NEWS
TODO
aclocal.m4
config.h.in
configure
configure.in
debian/Makefile.am
debian/Makefile.in
debian/tar.c [deleted file]
etc/Makefile.am
etc/Makefile.in
etc/useradd [new file with mode: 0644]
intl/ChangeLog
intl/Makefile.in
intl/VERSION
intl/bindtextdom.c
intl/config.charset
intl/dcgettext.c
intl/dcigettext.c
intl/dcngettext.c
intl/dgettext.c
intl/dngettext.c
intl/explodename.c
intl/finddomain.c
intl/gettext.c
intl/gettext.h
intl/gettextP.h
intl/hash-string.h
intl/intl-compat.c
intl/l10nflist.c
intl/libgettext.h
intl/libgnuintl.h
intl/loadinfo.h
intl/loadmsgcat.c
intl/localcharset.c
intl/locale.alias
intl/localealias.c
intl/ngettext.c
intl/plural.c
intl/plural.y
intl/textdomain.c
lib/.indent.pro
lib/commonio.c
lib/defines.h
lib/getdef.c
lib/getdef.h
lib/getpass.c
libmisc/Makefile.am
libmisc/Makefile.in
libmisc/age.c
libmisc/chkname.c
libmisc/isexpired.c
libmisc/nscd.c [new file with mode: 0644]
libmisc/setupenv.c
libmisc/utmp.c
man/Makefile.am
man/Makefile.in
man/chpasswd.8
man/dpasswd.8
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/newgrp.1 [new file with mode: 0644]
man/hu/passwd.1 [new file with mode: 0644]
man/hu/sg.1 [new file with mode: 0644]
man/ja/Makefile.am
man/ja/Makefile.in
man/ja/adduser.8 [new file with mode: 0644]
man/ja/chage.1
man/ja/chfn.1
man/ja/chpasswd.8
man/ja/chsh.1
man/ja/dpasswd.8
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 [new file with mode: 0644]
man/ja/grpck.8
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
man/ja/limits.5 [new file with mode: 0644]
man/ja/login.1
man/ja/login.access.5
man/ja/login.defs.5
man/ja/logoutd.8
man/ja/mkpasswd.8
man/ja/newgrp.1
man/ja/newusers.8 [new file with mode: 0644]
man/ja/passwd.1
man/ja/passwd.5
man/ja/porttime.5
man/ja/pw_auth.3
man/ja/pwauth.8
man/ja/pwck.8
man/ja/pwconv.8
man/ja/pwunconv.8 [new file with mode: 0644]
man/ja/sg.1 [new file with mode: 0644]
man/ja/shadow.3
man/ja/shadow.5
man/ja/shadowconfig.8 [new file with mode: 0644]
man/ja/su.1
man/ja/suauth.5
man/ja/sulogin.8
man/ja/useradd.8 [new file with mode: 0644]
man/ja/userdel.8
man/ja/usermod.8
man/ja/vigr.8 [new file with mode: 0644]
man/ja/vipw.8 [new file with mode: 0644]
man/newgrp.1
man/newusers.8
man/passwd.1
man/pl/Makefile.am
man/pl/Makefile.in
man/pl/chfn.1
man/pl/chsh.1
man/pl/expiry.1 [new file with mode: 0644]
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/sg.1 [new file with mode: 0644]
man/pl/su.1
man/pl/useradd.8
man/pl/userdel.8
man/pl/usermod.8
man/pl/vigr.8 [new file with mode: 0644]
man/pl/vipw.8
man/sg.1 [new file with mode: 0644]
man/useradd.8
man/vigr.8 [new file with mode: 0644]
po/ChangeLog
po/cs.gmo
po/cs.po
po/el.gmo
po/el.po
po/fr.gmo
po/fr.po
po/ja.gmo [new file with mode: 0644]
po/ja.po [new file with mode: 0644]
po/ko.gmo [new file with mode: 0644]
po/ko.po [new file with mode: 0644]
po/pl.gmo
po/pl.po
po/shadow.pot
po/sv.gmo
po/sv.po
po/uk.gmo
po/uk.po
src/Makefile.am
src/Makefile.in
src/chage.c
src/chfn.c
src/chpasswd.c
src/chsh.c
src/dpasswd.c
src/expiry.c
src/faillog.c
src/gpasswd.c
src/groupadd.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/mkpasswd.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

index 7e6b380934937451fc5631b168b228fb9130c074..5fde45a0b5ab94b62947a0058e7fccee8423d7c1 100644 (file)
--- a/ABOUT-NLS
+++ b/ABOUT-NLS
@@ -164,102 +164,128 @@ Available Packages
 ==================
 
    Languages are not equally supported in all packages.  The following
-matrix shows the current state of internationalization, as of May 2001.
-The matrix shows, in regard of each package, for which languages PO
-files have been submitted to translation coordination, with a
+matrix shows the current state of internationalization, as of September
+2001.  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    bg cs da de el en eo es et fi fr gl hr id it
-                     +----------------------------------------------+
-     a2ps            |          []             []                   |
-     bash            |          []       [] []       []             |
-     bison           |          []          [] []    []             |
-     clisp           |          []    []    []       []             |
-     cpio            |       [] []          []       []             |
-     diffutils       |       [] []       [] []       [] []    []    |
-     enscript        |          []                   []             |
-     error           |                               []             |
-     fileutils       |    [] [] [] []       []       [] []          |
-     findutils       |       [] []          [] []    [] []    [] [] |
-     flex            |       []             []       []             |
-     gawk            |                                              |
-     gcal            |                                              |
-     gcc             |       []                                     |
-     gettext         |    [] [] [] []       []       [] []    [] [] |
-     gnupg           |          []       []    []    []          [] |
-     grep            |                   []    []                [] |
-     hello           |       [] []       [] [] [] [] []       [] [] |
-     id-utils        |       []                      []             |
-     indent          |       [] []             []    [] []          |
-     libc            |    [] [] [] []       []       [] []       [] |
-     lilypond        |                                              |
-     lynx            |    [] [] []                                  |
-     m4              |    [] [] [] []                [] []    []    |
-     make            |          []          []       [] []          |
-     parted          |          []                      []          |
-     ptx             |       [] []          [] []    [] []    []    |
-     python          |                                              |
-     recode          |       [] [] []    [] []       [] []       [] |
-     sed             |    []    [] []    []    []    [] []    [] [] |
-     sh-utils        |    [] [] [] []       [] []    [] []       [] |
-     sharutils       |    [] [] [] []       []       [] []          |
-     soundtracker    |                                              |
-     sp              |                                              |
-     tar             |    [] [] []          [] []    []       [] [] |
-     texinfo         |    []    []       []          []             |
-     textutils       |    [] [] [] []       []       [] []          |
-     util-linux      |    []                                        |
-     wdiff           |    [] []             [] []    [] []    []    |
-     wget            |    [] [] [] []       [] []    [] []       [] |
-                     +----------------------------------------------+
-                       bg cs da de el en eo es et fi fr gl hr id it
-                        0 14 21 27 10  1  8 20 13  1 28 17  0  9 11
+     Ready PO files    bg cs da de el en eo es et fi fr gl he hr id it ja
+                     +----------------------------------------------------+
+     a2ps            |          []             []    []                   |
+     bash            |          []       [] []       []                   |
+     bfd             |                                                    |
+     binutils        |                               []                   |
+     bison           |          []          [] []    []                [] |
+     clisp           |          []    []    []       []                   |
+     cpio            |       [] []          []       [] []                |
+     diffutils       |       [] []       [] []       [] []       []       |
+     enscript        |          []                   []                   |
+     error           |                      []       []                   |
+     fetchmail       |                                                    |
+     fileutils       |    [] [] [] []       []       [] []             [] |
+     findutils       |       [] []          [] []    [] []       [] []    |
+     flex            |       []             []       []                   |
+     freetype        |                                                    |
+     gas             |                                                    |
+     gawk            |                               []    []             |
+     gcal            |                                                    |
+     gcc             |                                                    |
+     gettext         |    [] [] [] []       []       [] []       [] [] [] |
+     gnupg           |          []       []    []    [] []          [] [] |
+     gprof           |                                                    |
+     grep            |    []    []       [] [] []    [] []          []    |
+     hello           |       [] [] []    [] [] [] [] [] []          [] [] |
+     id-utils        |       [] []                   []                   |
+     indent          |       [] []             []    [] []                |
+     jpilot          |                               []                   |
+     kbd             |                                                    |
+     ld              |                               []                   |
+     libc            |    [] [] [] []       []       [] []             [] |
+     lilypond        |                                                 [] |
+     lynx            |    [] [] []                                     [] |
+     m4              |    [] [] [] []                [] []       []    [] |
+     make            |       [] []          []       [] []             [] |
+     mysecretdiary   |          []                                        |
+     nano            |                      []          []       []       |
+     opcodes         |                                                    |
+     parted          |          []                      []             [] |
+     ptx             |       [] []          [] []    [] []       []       |
+     python          |                                                    |
+     recode          |       [] [] []    [] []       [] [] []       []    |
+     sed             |    [] [] [] []    []    []    [] [] []    [] [] [] |
+     sh-utils        |    [] [] [] []       [] []    [] []          [] [] |
+     sharutils       |    [] [] [] []       []       [] []             [] |
+     sketch          |                                                    |
+     soundtracker    |          []          []          []                |
+     sp              |                                                    |
+     tar             |    [] [] []          [] []    []             [] [] |
+     texinfo         |    [] [] []       []          []                [] |
+     textutils       |    [] [] [] []       []       [] []             [] |
+     util-linux      |    [] []                                           |
+     wdiff           |       [] []             []                         |
+     wget            |    [] [] [] []       [] []    [] [] []          [] |
+                     +----------------------------------------------------+
+                       bg cs da de el en eo es et fi fr gl he hr id it ja
+                        0 14 24 32 11  1  8 23 13  1 33 22  4  0  7  9 18
      
-                       ja ko lv nl no pl pt pt_BR ru sk sl sv tr zh
-                     +----------------------------------------------+
-     a2ps            |          []                []    []          |  5
-     bash            |                                              |  4
-     bison           | []       []                []                |  7
-     clisp           |          []                                  |  5
-     cpio            |    []    []    []     []   []                |  9
-     diffutils       |                []          []       []       | 10
-     enscript        |          []           []   []                |  5
-     error           |                                              |  1
-     fileutils       | [] []    []    []     []   [] [] [] []       | 16
-     findutils       |    []    []    []     []   []       []       | 14
-     flex            |    []                      []       []       |  6
-     gawk            |                                              |  0
-     gcal            |                                              |  0
-     gcc             | []                                           |  2
-     gettext         | [] []    []    []     []   []    [] [] [] [] | 19
-     gnupg           | []             []                   []       |  8
-     grep            |                                              |  3
-     hello           | [] []    []    []     []   [] []    []       | 17
-     id-utils        |          []                []       []       |  5
-     indent          |    []    []    []          [] []    [] []    | 12
-     libc            | [] []       [] []     []      []    []       | 15
-     lilypond        |          []                                  |  1
-     lynx            | []       []           []   []       []       |  8
-     m4              | []       []    []          []       []       | 12
-     make            | []       []    []     []   []                |  9
-     parted          | []       []                []                |  5
-     ptx             |          [] [] [] []       []       []       | 13
-     python          |                                              |  0
-     recode          |                            []    [] []       | 11
-     sed             | []       []           []   [] [] [] []       | 16
-     sh-utils        | []       [] [] []     []   [] [] [] []    [] | 19
-     sharutils       | []       []                []       []       | 11
-     soundtracker    |                                              |  0
-     sp              |                                              |  0
-     tar             | []       [] [] []     []   []    [] []       | 16
-     texinfo         | []                         []                |  6
-     textutils       | []       [] [] []     []   [] [] []          | 15
-     util-linux      |                       []                     |  2
-     wdiff           |          []    []          [] []    []       | 12
-     wget            | []          []        []   [] [] [] []    [] | 17
-                     +----------------------------------------------+
-       29 teams        ja ko lv nl no pl pt pt_BR ru sk sl sv tr zh
-       40 domains      18  8  0 23  6 16  1  15   26  9  9 20  2  3  336
+                       ko lv nb nl nn no pl pt pt_BR ru sk sl sv tr uk zh
+                     +----------------------------------------------------+
+     a2ps            |          []                   []    []             |  6
+     bash            |                                                    |  4
+     bfd             |                                                    |  0
+     binutils        |                                                    |  1
+     bison           |                               []                   |  6
+     clisp           |          []                                        |  5
+     cpio            | []       []       []     []   []                   | 10
+     diffutils       |                   []          []       [] []       | 11
+     enscript        |          []              []   []                   |  5
+     error           |                                  []       []       |  4
+     fetchmail       |                                                    |  0
+     fileutils       | []       []       []     []   [] [] [] [] []       | 17
+     findutils       | []       []       []     []   []    [] [] []       | 16
+     flex            | []                            []       []          |  6
+     freetype        |                                                    |  0
+     gas             |                                                    |  0
+     gawk            |                                           []       |  3
+     gcal            |                                                    |  0
+     gcc             |                                                    |  0
+     gettext         | []                []     []   []    [] [] []    [] | 18
+     gnupg           |                   []                   [] []       | 10
+     gprof           |                                                    |  0
+     grep            |                   []                [] [] []       | 12
+     hello           | [] [] [] []    [] []          [] []    [] [] []    | 22
+     id-utils        |          []                   []       []          |  6
+     indent          | []       []       []          [] []    [] []       | 12
+     jpilot          |                                                    |  1
+     kbd             |                                           []       |  1
+     ld              |                                                    |  1
+     libc            | []    []       [] []     []      []    [] []       | 16
+     lilypond        |          []                            []          |  3
+     lynx            |          []              []   []       []          |  8
+     m4              |          []       []          []       []          | 12
+     make            | []       []       []     []   []          []       | 12
+     mysecretdiary   |                                                    |  1
+     nano            |                                        []          |  4
+     opcodes         |                                           []       |  1
+     parted          |          []                   []                   |  5
+     ptx             |       [] []    [] [] []       []       [] []       | 15
+     python          |                                                    |  0
+     recode          |                   []          []    [] []          | 13
+     sed             |          []              []   [] [] [] [] []       | 19
+     sh-utils        |       [] []    [] []     []   [] [] [] [] []    [] | 21
+     sharutils       |          []                   []       []          | 11
+     sketch          |                                                    |  0
+     soundtracker    |                                                    |  3
+     sp              |                                                    |  0
+     tar             |       []       [] []     []         [] [] []       | 15
+     texinfo         |                               []                   |  7
+     textutils       |       [] []    [] []     []   [] [] []             | 16
+     util-linux      |                          []               []       |  4
+     wdiff           |                               [] []    [] []       |  7
+     wget            |          []                   [] [] [] [] [] []    | 17
+                     +----------------------------------------------------+
+       33 teams        ko lv nb nl nn no pl pt pt_BR ru sk sl sv tr uk zh
+       53 domains       9  1  6 20  0  6 17  1  13   25 10 11 23 21  2  2  387
 
    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
@@ -272,9 +298,9 @@ 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 May 2001 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
+   If September 2001 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'.
 
 Using `gettext' in new packages
@@ -282,13 +308,15 @@ 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 the GNU Public License applies to your sources from
-then if you include `gettext' directly in your distribution on but
-since you are writing free software anyway this is no restriction.
-
-   Once the sources are change appropriately and the setup can handle to
-use of `gettext' the only thing missing are the translations.  The Free
-Translation Project is also available for packages which are not
+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
+to 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
index d3dbdf4b3dde281173a4ae6235a3777e85acb523..d7a55dbca0bbca1e042fe563213e2bd54664509a 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,229 @@
+2002-01-06  Tomasz K³oczko  <kloczek@pld.org.pl>
+
+       * configure.in: It is good time to release 4.0.1.
+
+       * 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/chage.c, src/chfn.c, src/chpasswd.c, src/chsh.c, src/dpasswd.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/mkpasswd.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/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/chpasswd.8, man/dpasswd.8, man/newgrp.1, man/newusers.8, man/passwd.1:
+       cleanups.
+
+       * src/dpasswd.c, src/expiry.c, src/grpck.c, src/id.c, src/mkpasswd.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/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/Makefile.am, man/ja/adduser.8, 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 ussage 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/passwd.5, man/ja/porttime.5, man/ja/pw_auth.3, man/ja/pwauth.8, 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/Makefile.am, man/ja/chage.1, man/ja/chfn.1, man/ja/chpasswd.8, man/ja/chsh.1, man/ja/dpasswd.8, 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/mkpasswd.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/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/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/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/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/Makefile.am, libmisc/nscd.c, 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/tar.c, debian/Makefile.am: 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/sg.1, man/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):
 
 1999-03-07  Marek Micha³kiewicz  <marekm@pld.org.pl>
 
-       * po/pl.po, po/el.po, doc/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/dpasswd.c, src/chfn.c, src/chage.c, man/usermod.8, man/useradd.8, man/limits.5, man/chage.1, libmisc/valid.c, libmisc/sub.c, libmisc/strtoday.c, libmisc/setupenv.c, libmisc/obscure.c, libmisc/limits.c, libmisc/env.c, lib/snprintf.h, lib/getdef.c, lib/encrypt.c, lib/defines.h, etc/login.defs.linux, doc/WISHLIST, doc/README.nls, doc/README.pam, doc/README.platforms, doc/README.mirrors, doc/README.linux, doc/Makefile.am, doc/Attic/CHANGES, debian/tar.c, debian/rules, debian/Attic/logoutd, debian/control, debian/changelog, configure.in:
+       * po/pl.po, po/el.po, doc/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/dpasswd.c, src/chfn.c, src/chage.c, man/usermod.8, man/useradd.8, man/limits.5, man/chage.1, libmisc/valid.c, libmisc/sub.c, libmisc/strtoday.c, libmisc/setupenv.c, libmisc/obscure.c, libmisc/limits.c, libmisc/env.c, lib/snprintf.h, lib/getdef.c, lib/encrypt.c, lib/defines.h, etc/login.defs.linux, doc/WISHLIST, doc/README.nls, doc/README.pam, doc/README.platforms, doc/README.mirrors, doc/README.linux, doc/Makefile.am, doc/Attic/CHANGES, debian/Attic/tar.c, debian/rules, debian/Attic/logoutd, debian/control, debian/changelog, configure.in:
        *** empty log message ***
 
 1998-12-28  Marek Micha³kiewicz  <marekm@pld.org.pl>
 
 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/chage.c, src/dpasswd.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/limits.c, libmisc/log.c, libmisc/login_desrpc.c, libmisc/loginprompt.c, libmisc/obscure.c, libmisc/strtoday.c, libmisc/chkname.c, libmisc/chowndir.c, libmisc/copydir.c, libmisc/failure.c, lib/defines.h, lib/dialchk.c, lib/pwauth.c, lib/pwpack.c, doc/Attic/CHANGES, doc/README.linux, doc/WISHLIST, doc/cracklib26.diff, lib/commonio.c, acconfig.h, configure.in, debian/tar.c:
+       * 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/chage.c, src/dpasswd.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/limits.c, libmisc/log.c, libmisc/login_desrpc.c, libmisc/loginprompt.c, libmisc/obscure.c, libmisc/strtoday.c, libmisc/chkname.c, libmisc/chowndir.c, libmisc/copydir.c, libmisc/failure.c, lib/defines.h, lib/dialchk.c, lib/pwauth.c, lib/pwpack.c, doc/Attic/CHANGES, doc/README.linux, doc/WISHLIST, doc/cracklib26.diff, lib/commonio.c, acconfig.h, configure.in, debian/Attic/tar.c:
        *** empty log message ***
 
 1998-04-02  Marek Micha³kiewicz  <marekm@pld.org.pl>
diff --git a/NEWS b/NEWS
index ccab76f64b43559e0452e85d08f102e4fd914239..67fdb9b4b694bcbcbc4771c3d9b748eee3fc128b 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,5 +1,44 @@
-$Id: NEWS,v 1.12 2001/09/07 15:35:54 kloczek Exp $
-
+$Id: NEWS,v 1.24 2002/01/06 15:00:05 kloczek Exp $
+
+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 accout 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
 
 - fix bug discovered and fixed by Marcel Ritter
@@ -7,8 +46,7 @@ shadow-20001016 => shadow-4.0.0
   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 with using useradd
-  with script:
+  Ths bug can be exposed by trashing /etc/groups file using useradd with script:
        #!/bin/sh
        typeset -i NUM
        NUM=0
diff --git a/TODO b/TODO
index c0d62483ec59d1f4af479b00ab12ad93f5e66394..e612f1209579deb8fd0e3af5b2295e48f7dad814 100644 (file)
--- a/TODO
+++ b/TODO
@@ -31,8 +31,8 @@ Documentation:
   look at http://refentry2man.pld.org.pl/ for fast refentry xml/docbook to
   roff converter,
 
-- document {pw,grp}ck -s option in pt_BR, ja man pages,
-
 - documment in pt_BR, ja man pages -s {pw,grp}ck option,
 
+- document -o option in ja man page,
+
 - pl man page for login(1) - documment -f -h -p -r options.
index f4444f1f7d6585b8408e7b064cc6b1257b95852d..60e410600421213d622b359db386631966538e8a 100644 (file)
@@ -4183,11 +4183,15 @@ esac
 # Ulrich Drepper <drepper@cygnus.com>, 1995.
 #
 # This file can be copied and used freely without restrictions.  It can
-# be used in projects which are not available under the GNU Public License
-# but which still want to provide support for the GNU gettext functionality.
-# Please note that the actual code is *not* freely available.
+# be used in projects which are not available under the GNU General Public
+# License or the GNU Library General Public License but which still want
+# to provide support for the GNU gettext functionality.
+# Please note that the actual code of the GNU gettext library is covered
+# by the GNU Library General Public License, and the rest of the GNU
+# gettext package package is covered by the GNU General Public License.
+# They are *not* in the public domain.
 
-# serial 9
+# serial 10
 
 dnl Usage: AM_WITH_NLS([TOOLSYMBOL], [NEEDSYMBOL], [LIBDIR]).
 dnl If TOOLSYMBOL is specified and is 'use-libtool', then a libtool library
@@ -4298,14 +4302,14 @@ return (int) gettext ("")]ifelse([$2], need-ngettext, [ + (int) ngettext ("", ""
             AC_CHECK_FUNCS(dcgettext)
             LIBS="$gt_save_LIBS"
 
+            dnl Search for GNU msgfmt in the PATH.
             AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
-              [test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], no)dnl
-            if test "$MSGFMT" != "no"; then
-              AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
-            fi
+              [$ac_dir/$ac_word --statistics /dev/null >/dev/null 2>&1], :)
+            AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
 
+            dnl Search for GNU xgettext in the PATH.
             AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
-              [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :)
+              [$ac_dir/$ac_word --omit-header /dev/null >/dev/null 2>&1], :)
 
             CATOBJEXT=.gmo
           fi
@@ -4322,10 +4326,10 @@ return (int) gettext ("")]ifelse([$2], need-ngettext, [ + (int) ngettext ("", ""
         dnl Mark actions used to generate GNU NLS library.
         INTLOBJS="\$(GETTOBJS)"
         AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
-         [test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], msgfmt)
+         [$ac_dir/$ac_word --statistics /dev/null >/dev/null 2>&1], :)
         AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
         AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
-         [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :)
+         [$ac_dir/$ac_word --omit-header /dev/null >/dev/null 2>&1], :)
         AC_SUBST(MSGFMT)
        BUILD_INCLUDED_LIBINTL=yes
        USE_INCLUDED_LIBINTL=yes
@@ -4334,11 +4338,26 @@ return (int) gettext ("")]ifelse([$2], need-ngettext, [ + (int) ngettext ("", ""
        LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'`
       fi
 
+      dnl This could go away some day; the PATH_PROG_WITH_TEST already does it.
+      dnl Test whether we really found GNU msgfmt.
+      if test "$GMSGFMT" != ":"; then
+       dnl If it is no GNU msgfmt we define it as : so that the
+       dnl Makefiles still can work.
+       if $GMSGFMT --statistics /dev/null >/dev/null 2>&1; then
+         : ;
+       else
+         AC_MSG_RESULT(
+           [found msgfmt program is not GNU msgfmt; ignore it])
+         GMSGFMT=":"
+       fi
+      fi
+
+      dnl This could go away some day; the PATH_PROG_WITH_TEST already does it.
       dnl Test whether we really found GNU xgettext.
       if test "$XGETTEXT" != ":"; then
        dnl If it is no GNU xgettext we define it as : so that the
        dnl Makefiles still can work.
-       if $XGETTEXT --omit-header /dev/null 2> /dev/null; then
+       if $XGETTEXT --omit-header /dev/null >/dev/null 2>&1; then
          : ;
        else
          AC_MSG_RESULT(
@@ -4362,16 +4381,19 @@ return (int) gettext ("")]ifelse([$2], need-ngettext, [ + (int) ngettext ("", ""
           ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
           ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`"
           ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
-          case "$srcdir" in
+          # 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="$srcdir" ;;
-            *)  top_srcdir="$ac_dots$srcdir" ;;
+            /*) top_srcdir="$ac_given_srcdir" ;;
+            *)  top_srcdir="$ac_dots$ac_given_srcdir" ;;
           esac
-          if test -f "$srcdir/$ac_dir/POTFILES.in"; then
+          if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then
             rm -f "$ac_dir/POTFILES"
-            echo creating "$ac_dir/POTFILES"
-            sed -e "/^#/d" -e "/^[     ]*\$/d" -e "s,.*,     $top_srcdir/& \\\\," -e "\$s/\(.*\) \\\\/\1/" < "$srcdir/$ac_dir/POTFILES.in" > "$ac_dir/POTFILES"
-            echo creating "$ac_dir/Makefile"
+            test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES"
+            sed -e "/^#/d" -e "/^[     ]*\$/d" -e "s,.*,     $top_srcdir/& \\\\," -e "\$s/\(.*\) \\\\/\1/" < "$ac_given_srcdir/$ac_dir/POTFILES.in" > "$ac_dir/POTFILES"
+            test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile"
             sed -e "/POTFILES =/r $ac_dir/POTFILES" "$ac_dir/Makefile.in" > "$ac_dir/Makefile"
           fi
           ;;
@@ -4402,7 +4424,7 @@ return (int) gettext ("")]ifelse([$2], need-ngettext, [ + (int) ngettext ("", ""
       dnl Found it, now check the version.
       AC_MSG_CHECKING([version of bison])
 changequote(<<,>>)dnl
-      ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison .* \([0-9]*\.[0-9.]*\).*$/\1/p'`
+      ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'`
       case $ac_prog_version in
         '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
         1.2[6-9]* | 1.[3-9][0-9]* | [2-9].*)
@@ -4532,11 +4554,15 @@ strdup strtoul tsearch __argz_count __argz_stringify __argz_next])
 # Ulrich Drepper <drepper@cygnus.com>, 1996.
 #
 # This file can be copied and used freely without restrictions.  It can
-# be used in projects which are not available under the GNU Public License
-# but which still want to provide support for the GNU gettext functionality.
-# Please note that the actual code is *not* freely available.
+# be used in projects which are not available under the GNU General Public
+# License or the GNU Library General Public License but which still want
+# to provide support for the GNU gettext functionality.
+# Please note that the actual code of the GNU gettext library is covered
+# by the GNU Library General Public License, and the rest of the GNU
+# gettext package package is covered by the GNU General Public License.
+# They are *not* in the public domain.
 
-# serial 1
+# serial 2
 
 dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR,
 dnl   TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]])
@@ -4568,7 +4594,7 @@ ifelse([$4], , , [  test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4"
   ;;
 esac])dnl
 $1="$ac_cv_path_$1"
-if test -n "[$]$1"; then
+if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then
   AC_MSG_RESULT([$]$1)
 else
   AC_MSG_RESULT(no)
@@ -4695,9 +4721,13 @@ AC_DEFUN([AM_LANGINFO_CODESET],
 # Ulrich Drepper <drepper@cygnus.com>, 1995.
 #
 # This file can be copied and used freely without restrictions.  It can
-# be used in projects which are not available under the GNU Public License
-# but which still want to provide support for the GNU gettext functionality.
-# Please note that the actual code is *not* freely available.
+# be used in projects which are not available under the GNU General Public
+# License or the GNU Library General Public License but which still want
+# to provide support for the GNU gettext functionality.
+# Please note that the actual code of the GNU gettext library is covered
+# by the GNU Library General Public License, and the rest of the GNU
+# gettext package package is covered by the GNU General Public License.
+# They are *not* in the public domain.
 
 # serial 2
 
index feccf639731a69eeaa2bd403a3f817b9e9b35b77..1a831ac54608d19a7dcfd601d7ac9af644669847 100644 (file)
 /* Define if you have the <dlfcn.h> header file. */
 #undef HAVE_DLFCN_H
 
+/* Define if you have the <errno.h> header file. */
+#undef HAVE_ERRNO_H
+
 /* Define if you have the `fchmod' function. */
 #undef HAVE_FCHMOD
 
 /* Define if you have the `updwtmpx' function. */
 #undef HAVE_UPDWTMPX
 
-/* Define if you have the <usersec.h> header file. */
-#undef HAVE_USERSEC_H
-
 /* Define if you have the <utime.h> header file. */
 #undef HAVE_UTIME_H
 
index 204389ca3a861932617968b9a55f4354ac5affed..4fb6590a7db81b46198f86cf5d6f6a69d0f466c6 100755 (executable)
--- a/configure
+++ b/configure
@@ -1421,7 +1421,7 @@ fi
 
 # Define the identity of the package.
 PACKAGE=shadow
-VERSION=4.0.0
+VERSION=4.0.1
 
 cat >>confdefs.h <<EOF
 #define PACKAGE "$PACKAGE"
@@ -7304,8 +7304,8 @@ EOF
 
 fi
 
-for ac_header in 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 usersec.h \
+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 shadow.h lastlog.h \
        rpc/key_prot.h
 do
@@ -9183,10 +9183,6 @@ cat >>confdefs.h <<\EOF
 #define USG 1
 EOF
 
-cat >>confdefs.h <<\EOF
-#define AGING 1
-EOF
-
 cat >>confdefs.h <<\EOF
 #define USE_SYSLOG 1
 EOF
@@ -9250,13 +9246,13 @@ if test "${with_libtcfs+set}" = set; then
 
 fi;
 
-echo "$as_me:9253: checking for inet_ntoa" >&5
+echo "$as_me:9249: checking for inet_ntoa" >&5
 echo $ECHO_N "checking for inet_ntoa... $ECHO_C" >&6
 if test "${ac_cv_func_inet_ntoa+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
-#line 9259 "configure"
+#line 9255 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char inet_ntoa (); below.  */
@@ -9287,16 +9283,16 @@ f = inet_ntoa;
 }
 _ACEOF
 rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:9290: \"$ac_link\"") >&5
+if { (eval echo "$as_me:9286: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:9293: \$? = $ac_status" >&5
+  echo "$as_me:9289: \$? = $ac_status" >&5
   (exit $ac_status); } &&
          { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:9296: \"$ac_try\"") >&5
+  { (eval echo "$as_me:9292: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:9299: \$? = $ac_status" >&5
+  echo "$as_me:9295: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   ac_cv_func_inet_ntoa=yes
 else
@@ -9306,13 +9302,13 @@ ac_cv_func_inet_ntoa=no
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
 fi
-echo "$as_me:9309: result: $ac_cv_func_inet_ntoa" >&5
+echo "$as_me:9305: result: $ac_cv_func_inet_ntoa" >&5
 echo "${ECHO_T}$ac_cv_func_inet_ntoa" >&6
 if test $ac_cv_func_inet_ntoa = yes; then
   :
 else
 
-echo "$as_me:9315: checking for inet_ntoa in -linet" >&5
+echo "$as_me:9311: checking for inet_ntoa in -linet" >&5
 echo $ECHO_N "checking for inet_ntoa in -linet... $ECHO_C" >&6
 if test "${ac_cv_lib_inet_inet_ntoa+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -9320,7 +9316,7 @@ else
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-linet  $LIBS"
 cat >conftest.$ac_ext <<_ACEOF
-#line 9323 "configure"
+#line 9319 "configure"
 #include "confdefs.h"
 
 /* Override any gcc2 internal prototype to avoid an error.  */
@@ -9339,16 +9335,16 @@ inet_ntoa ();
 }
 _ACEOF
 rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:9342: \"$ac_link\"") >&5
+if { (eval echo "$as_me:9338: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:9345: \$? = $ac_status" >&5
+  echo "$as_me:9341: \$? = $ac_status" >&5
   (exit $ac_status); } &&
          { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:9348: \"$ac_try\"") >&5
+  { (eval echo "$as_me:9344: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:9351: \$? = $ac_status" >&5
+  echo "$as_me:9347: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   ac_cv_lib_inet_inet_ntoa=yes
 else
@@ -9359,7 +9355,7 @@ fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-echo "$as_me:9362: result: $ac_cv_lib_inet_inet_ntoa" >&5
+echo "$as_me:9358: result: $ac_cv_lib_inet_inet_ntoa" >&5
 echo "${ECHO_T}$ac_cv_lib_inet_inet_ntoa" >&6
 if test $ac_cv_lib_inet_inet_ntoa = yes; then
   cat >>confdefs.h <<EOF
@@ -9372,13 +9368,13 @@ fi
 
 fi
 
-echo "$as_me:9375: checking for socket" >&5
+echo "$as_me:9371: checking for socket" >&5
 echo $ECHO_N "checking for socket... $ECHO_C" >&6
 if test "${ac_cv_func_socket+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
-#line 9381 "configure"
+#line 9377 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char socket (); below.  */
@@ -9409,16 +9405,16 @@ f = socket;
 }
 _ACEOF
 rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:9412: \"$ac_link\"") >&5
+if { (eval echo "$as_me:9408: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:9415: \$? = $ac_status" >&5
+  echo "$as_me:9411: \$? = $ac_status" >&5
   (exit $ac_status); } &&
          { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:9418: \"$ac_try\"") >&5
+  { (eval echo "$as_me:9414: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:9421: \$? = $ac_status" >&5
+  echo "$as_me:9417: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   ac_cv_func_socket=yes
 else
@@ -9428,13 +9424,13 @@ ac_cv_func_socket=no
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
 fi
-echo "$as_me:9431: result: $ac_cv_func_socket" >&5
+echo "$as_me:9427: result: $ac_cv_func_socket" >&5
 echo "${ECHO_T}$ac_cv_func_socket" >&6
 if test $ac_cv_func_socket = yes; then
   :
 else
 
-echo "$as_me:9437: checking for socket in -lsocket" >&5
+echo "$as_me:9433: checking for socket in -lsocket" >&5
 echo $ECHO_N "checking for socket in -lsocket... $ECHO_C" >&6
 if test "${ac_cv_lib_socket_socket+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -9442,7 +9438,7 @@ else
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lsocket  $LIBS"
 cat >conftest.$ac_ext <<_ACEOF
-#line 9445 "configure"
+#line 9441 "configure"
 #include "confdefs.h"
 
 /* Override any gcc2 internal prototype to avoid an error.  */
@@ -9461,16 +9457,16 @@ socket ();
 }
 _ACEOF
 rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:9464: \"$ac_link\"") >&5
+if { (eval echo "$as_me:9460: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:9467: \$? = $ac_status" >&5
+  echo "$as_me:9463: \$? = $ac_status" >&5
   (exit $ac_status); } &&
          { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:9470: \"$ac_try\"") >&5
+  { (eval echo "$as_me:9466: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:9473: \$? = $ac_status" >&5
+  echo "$as_me:9469: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   ac_cv_lib_socket_socket=yes
 else
@@ -9481,7 +9477,7 @@ fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-echo "$as_me:9484: result: $ac_cv_lib_socket_socket" >&5
+echo "$as_me:9480: result: $ac_cv_lib_socket_socket" >&5
 echo "${ECHO_T}$ac_cv_lib_socket_socket" >&6
 if test $ac_cv_lib_socket_socket = yes; then
   cat >>confdefs.h <<EOF
@@ -9494,13 +9490,13 @@ fi
 
 fi
 
-echo "$as_me:9497: checking for gethostbyname" >&5
+echo "$as_me:9493: checking for gethostbyname" >&5
 echo $ECHO_N "checking for gethostbyname... $ECHO_C" >&6
 if test "${ac_cv_func_gethostbyname+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
-#line 9503 "configure"
+#line 9499 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char gethostbyname (); below.  */
@@ -9531,16 +9527,16 @@ f = gethostbyname;
 }
 _ACEOF
 rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:9534: \"$ac_link\"") >&5
+if { (eval echo "$as_me:9530: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:9537: \$? = $ac_status" >&5
+  echo "$as_me:9533: \$? = $ac_status" >&5
   (exit $ac_status); } &&
          { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:9540: \"$ac_try\"") >&5
+  { (eval echo "$as_me:9536: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:9543: \$? = $ac_status" >&5
+  echo "$as_me:9539: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   ac_cv_func_gethostbyname=yes
 else
@@ -9550,13 +9546,13 @@ ac_cv_func_gethostbyname=no
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
 fi
-echo "$as_me:9553: result: $ac_cv_func_gethostbyname" >&5
+echo "$as_me:9549: result: $ac_cv_func_gethostbyname" >&5
 echo "${ECHO_T}$ac_cv_func_gethostbyname" >&6
 if test $ac_cv_func_gethostbyname = yes; then
   :
 else
 
-echo "$as_me:9559: checking for gethostbyname in -lnsl" >&5
+echo "$as_me:9555: checking for gethostbyname in -lnsl" >&5
 echo $ECHO_N "checking for gethostbyname in -lnsl... $ECHO_C" >&6
 if test "${ac_cv_lib_nsl_gethostbyname+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -9564,7 +9560,7 @@ else
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lnsl  $LIBS"
 cat >conftest.$ac_ext <<_ACEOF
-#line 9567 "configure"
+#line 9563 "configure"
 #include "confdefs.h"
 
 /* Override any gcc2 internal prototype to avoid an error.  */
@@ -9583,16 +9579,16 @@ gethostbyname ();
 }
 _ACEOF
 rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:9586: \"$ac_link\"") >&5
+if { (eval echo "$as_me:9582: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:9589: \$? = $ac_status" >&5
+  echo "$as_me:9585: \$? = $ac_status" >&5
   (exit $ac_status); } &&
          { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:9592: \"$ac_try\"") >&5
+  { (eval echo "$as_me:9588: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:9595: \$? = $ac_status" >&5
+  echo "$as_me:9591: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   ac_cv_lib_nsl_gethostbyname=yes
 else
@@ -9603,7 +9599,7 @@ fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-echo "$as_me:9606: result: $ac_cv_lib_nsl_gethostbyname" >&5
+echo "$as_me:9602: result: $ac_cv_lib_nsl_gethostbyname" >&5
 echo "${ECHO_T}$ac_cv_lib_nsl_gethostbyname" >&6
 if test $ac_cv_lib_nsl_gethostbyname = yes; then
   cat >>confdefs.h <<EOF
@@ -9617,13 +9613,13 @@ fi
 fi
 
 if test "$enable_desrpc" != "no" -a "$ac_cv_header_rpc_key_prot_h" = "yes" ; then
-       echo "$as_me:9620: checking for getsecretkey" >&5
+       echo "$as_me:9616: checking for getsecretkey" >&5
 echo $ECHO_N "checking for getsecretkey... $ECHO_C" >&6
 if test "${ac_cv_func_getsecretkey+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
-#line 9626 "configure"
+#line 9622 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char getsecretkey (); below.  */
@@ -9654,16 +9650,16 @@ f = getsecretkey;
 }
 _ACEOF
 rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:9657: \"$ac_link\"") >&5
+if { (eval echo "$as_me:9653: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:9660: \$? = $ac_status" >&5
+  echo "$as_me:9656: \$? = $ac_status" >&5
   (exit $ac_status); } &&
          { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:9663: \"$ac_try\"") >&5
+  { (eval echo "$as_me:9659: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:9666: \$? = $ac_status" >&5
+  echo "$as_me:9662: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   ac_cv_func_getsecretkey=yes
 else
@@ -9673,7 +9669,7 @@ ac_cv_func_getsecretkey=no
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
 fi
-echo "$as_me:9676: result: $ac_cv_func_getsecretkey" >&5
+echo "$as_me:9672: result: $ac_cv_func_getsecretkey" >&5
 echo "${ECHO_T}$ac_cv_func_getsecretkey" >&6
 if test $ac_cv_func_getsecretkey = yes; then
   cat >>confdefs.h <<\EOF
@@ -9681,7 +9677,7 @@ if test $ac_cv_func_getsecretkey = yes; then
 EOF
 
 else
-  echo "$as_me:9684: checking for getsecretkey in -lrpcsvc" >&5
+  echo "$as_me:9680: checking for getsecretkey in -lrpcsvc" >&5
 echo $ECHO_N "checking for getsecretkey in -lrpcsvc... $ECHO_C" >&6
 if test "${ac_cv_lib_rpcsvc_getsecretkey+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -9689,7 +9685,7 @@ else
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lrpcsvc  $LIBS"
 cat >conftest.$ac_ext <<_ACEOF
-#line 9692 "configure"
+#line 9688 "configure"
 #include "confdefs.h"
 
 /* Override any gcc2 internal prototype to avoid an error.  */
@@ -9708,16 +9704,16 @@ getsecretkey ();
 }
 _ACEOF
 rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:9711: \"$ac_link\"") >&5
+if { (eval echo "$as_me:9707: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:9714: \$? = $ac_status" >&5
+  echo "$as_me:9710: \$? = $ac_status" >&5
   (exit $ac_status); } &&
          { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:9717: \"$ac_try\"") >&5
+  { (eval echo "$as_me:9713: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:9720: \$? = $ac_status" >&5
+  echo "$as_me:9716: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   ac_cv_lib_rpcsvc_getsecretkey=yes
 else
@@ -9728,7 +9724,7 @@ fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-echo "$as_me:9731: result: $ac_cv_lib_rpcsvc_getsecretkey" >&5
+echo "$as_me:9727: result: $ac_cv_lib_rpcsvc_getsecretkey" >&5
 echo "${ECHO_T}$ac_cv_lib_rpcsvc_getsecretkey" >&6
 if test $ac_cv_lib_rpcsvc_getsecretkey = yes; then
   cat >>confdefs.h <<\EOF
@@ -9749,7 +9745,7 @@ EOF
 fi
 
 if test "$with_libcrypt" != "no"; then
-       echo "$as_me:9752: checking for crypt in -lcrypt" >&5
+       echo "$as_me:9748: checking for crypt in -lcrypt" >&5
 echo $ECHO_N "checking for crypt in -lcrypt... $ECHO_C" >&6
 if test "${ac_cv_lib_crypt_crypt+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -9757,7 +9753,7 @@ else
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lcrypt  $LIBS"
 cat >conftest.$ac_ext <<_ACEOF
-#line 9760 "configure"
+#line 9756 "configure"
 #include "confdefs.h"
 
 /* Override any gcc2 internal prototype to avoid an error.  */
@@ -9776,16 +9772,16 @@ crypt ();
 }
 _ACEOF
 rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:9779: \"$ac_link\"") >&5
+if { (eval echo "$as_me:9775: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:9782: \$? = $ac_status" >&5
+  echo "$as_me:9778: \$? = $ac_status" >&5
   (exit $ac_status); } &&
          { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:9785: \"$ac_try\"") >&5
+  { (eval echo "$as_me:9781: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:9788: \$? = $ac_status" >&5
+  echo "$as_me:9784: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   ac_cv_lib_crypt_crypt=yes
 else
@@ -9796,7 +9792,7 @@ fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-echo "$as_me:9799: result: $ac_cv_lib_crypt_crypt" >&5
+echo "$as_me:9795: result: $ac_cv_lib_crypt_crypt" >&5
 echo "${ECHO_T}$ac_cv_lib_crypt_crypt" >&6
 if test $ac_cv_lib_crypt_crypt = yes; then
   cat >>confdefs.h <<\EOF
@@ -9809,7 +9805,7 @@ fi
 
 if test "$with_libcrack" != "no"; then
        echo "checking cracklib flavour, don't be surprised by the results"
-       echo "$as_me:9812: checking for FascistCheck in -lcrack" >&5
+       echo "$as_me:9808: checking for FascistCheck in -lcrack" >&5
 echo $ECHO_N "checking for FascistCheck in -lcrack... $ECHO_C" >&6
 if test "${ac_cv_lib_crack_FascistCheck+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -9817,7 +9813,7 @@ else
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lcrack  $LIBS"
 cat >conftest.$ac_ext <<_ACEOF
-#line 9820 "configure"
+#line 9816 "configure"
 #include "confdefs.h"
 
 /* Override any gcc2 internal prototype to avoid an error.  */
@@ -9836,16 +9832,16 @@ FascistCheck ();
 }
 _ACEOF
 rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:9839: \"$ac_link\"") >&5
+if { (eval echo "$as_me:9835: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:9842: \$? = $ac_status" >&5
+  echo "$as_me:9838: \$? = $ac_status" >&5
   (exit $ac_status); } &&
          { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:9845: \"$ac_try\"") >&5
+  { (eval echo "$as_me:9841: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:9848: \$? = $ac_status" >&5
+  echo "$as_me:9844: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   ac_cv_lib_crack_FascistCheck=yes
 else
@@ -9856,7 +9852,7 @@ fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-echo "$as_me:9859: result: $ac_cv_lib_crack_FascistCheck" >&5
+echo "$as_me:9855: result: $ac_cv_lib_crack_FascistCheck" >&5
 echo "${ECHO_T}$ac_cv_lib_crack_FascistCheck" >&6
 if test $ac_cv_lib_crack_FascistCheck = yes; then
   cat >>confdefs.h <<\EOF
@@ -9865,7 +9861,7 @@ EOF
  LIBCRACK=-lcrack
 fi
 
-       echo "$as_me:9868: checking for FascistHistory in -lcrack" >&5
+       echo "$as_me:9864: checking for FascistHistory in -lcrack" >&5
 echo $ECHO_N "checking for FascistHistory in -lcrack... $ECHO_C" >&6
 if test "${ac_cv_lib_crack_FascistHistory+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -9873,7 +9869,7 @@ else
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lcrack  $LIBS"
 cat >conftest.$ac_ext <<_ACEOF
-#line 9876 "configure"
+#line 9872 "configure"
 #include "confdefs.h"
 
 /* Override any gcc2 internal prototype to avoid an error.  */
@@ -9892,16 +9888,16 @@ FascistHistory ();
 }
 _ACEOF
 rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:9895: \"$ac_link\"") >&5
+if { (eval echo "$as_me:9891: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:9898: \$? = $ac_status" >&5
+  echo "$as_me:9894: \$? = $ac_status" >&5
   (exit $ac_status); } &&
          { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:9901: \"$ac_try\"") >&5
+  { (eval echo "$as_me:9897: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:9904: \$? = $ac_status" >&5
+  echo "$as_me:9900: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   ac_cv_lib_crack_FascistHistory=yes
 else
@@ -9912,7 +9908,7 @@ fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-echo "$as_me:9915: result: $ac_cv_lib_crack_FascistHistory" >&5
+echo "$as_me:9911: result: $ac_cv_lib_crack_FascistHistory" >&5
 echo "${ECHO_T}$ac_cv_lib_crack_FascistHistory" >&6
 if test $ac_cv_lib_crack_FascistHistory = yes; then
   cat >>confdefs.h <<\EOF
@@ -9921,7 +9917,7 @@ EOF
 
 fi
 
-       echo "$as_me:9924: checking for FascistHistoryPw in -lcrack" >&5
+       echo "$as_me:9920: checking for FascistHistoryPw in -lcrack" >&5
 echo $ECHO_N "checking for FascistHistoryPw in -lcrack... $ECHO_C" >&6
 if test "${ac_cv_lib_crack_FascistHistoryPw+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -9929,7 +9925,7 @@ else
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lcrack  $LIBS"
 cat >conftest.$ac_ext <<_ACEOF
-#line 9932 "configure"
+#line 9928 "configure"
 #include "confdefs.h"
 
 /* Override any gcc2 internal prototype to avoid an error.  */
@@ -9948,16 +9944,16 @@ FascistHistoryPw ();
 }
 _ACEOF
 rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:9951: \"$ac_link\"") >&5
+if { (eval echo "$as_me:9947: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:9954: \$? = $ac_status" >&5
+  echo "$as_me:9950: \$? = $ac_status" >&5
   (exit $ac_status); } &&
          { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:9957: \"$ac_try\"") >&5
+  { (eval echo "$as_me:9953: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:9960: \$? = $ac_status" >&5
+  echo "$as_me:9956: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   ac_cv_lib_crack_FascistHistoryPw=yes
 else
@@ -9968,7 +9964,7 @@ fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-echo "$as_me:9971: result: $ac_cv_lib_crack_FascistHistoryPw" >&5
+echo "$as_me:9967: result: $ac_cv_lib_crack_FascistHistoryPw" >&5
 echo "${ECHO_T}$ac_cv_lib_crack_FascistHistoryPw" >&6
 if test $ac_cv_lib_crack_FascistHistoryPw = yes; then
   cat >>confdefs.h <<\EOF
@@ -9980,7 +9976,7 @@ fi
 fi
 
 if test "$with_libskey" = "yes"; then
-       echo "$as_me:9983: checking for MD5Init in -lmd" >&5
+       echo "$as_me:9979: checking for MD5Init in -lmd" >&5
 echo $ECHO_N "checking for MD5Init in -lmd... $ECHO_C" >&6
 if test "${ac_cv_lib_md_MD5Init+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -9988,7 +9984,7 @@ else
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lmd  $LIBS"
 cat >conftest.$ac_ext <<_ACEOF
-#line 9991 "configure"
+#line 9987 "configure"
 #include "confdefs.h"
 
 /* Override any gcc2 internal prototype to avoid an error.  */
@@ -10007,16 +10003,16 @@ MD5Init ();
 }
 _ACEOF
 rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:10010: \"$ac_link\"") >&5
+if { (eval echo "$as_me:10006: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:10013: \$? = $ac_status" >&5
+  echo "$as_me:10009: \$? = $ac_status" >&5
   (exit $ac_status); } &&
          { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:10016: \"$ac_try\"") >&5
+  { (eval echo "$as_me:10012: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:10019: \$? = $ac_status" >&5
+  echo "$as_me:10015: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   ac_cv_lib_md_MD5Init=yes
 else
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-echo "$as_me:10030: result: $ac_cv_lib_md_MD5Init" >&5
+echo "$as_me:10026: result: $ac_cv_lib_md_MD5Init" >&5
 echo "${ECHO_T}$ac_cv_lib_md_MD5Init" >&6
 if test $ac_cv_lib_md_MD5Init = yes; then
   LIBMD=-lmd
 fi
 
-       echo "$as_me:10036: checking for skeychallenge in -lskey" >&5
+       echo "$as_me:10032: checking for skeychallenge in -lskey" >&5
 echo $ECHO_N "checking for skeychallenge in -lskey... $ECHO_C" >&6
 if test "${ac_cv_lib_skey_skeychallenge+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -10041,7 +10037,7 @@ else
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lskey $LIBMD $LIBCRYPT $LIBS"
 cat >conftest.$ac_ext <<_ACEOF
-#line 10044 "configure"
+#line 10040 "configure"
 #include "confdefs.h"
 
 /* Override any gcc2 internal prototype to avoid an error.  */
@@ -10060,16 +10056,16 @@ skeychallenge ();
 }
 _ACEOF
 rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:10063: \"$ac_link\"") >&5
+if { (eval echo "$as_me:10059: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:10066: \$? = $ac_status" >&5
+  echo "$as_me:10062: \$? = $ac_status" >&5
   (exit $ac_status); } &&
          { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:10069: \"$ac_try\"") >&5
+  { (eval echo "$as_me:10065: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:10072: \$? = $ac_status" >&5
+  echo "$as_me:10068: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   ac_cv_lib_skey_skeychallenge=yes
 else
@@ -10080,7 +10076,7 @@ fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-echo "$as_me:10083: result: $ac_cv_lib_skey_skeychallenge" >&5
+echo "$as_me:10079: result: $ac_cv_lib_skey_skeychallenge" >&5
 echo "${ECHO_T}$ac_cv_lib_skey_skeychallenge" >&6
 if test $ac_cv_lib_skey_skeychallenge = yes; then
   cat >>confdefs.h <<\EOF
@@ -10090,7 +10086,7 @@ EOF
 fi
 
 elif test "$with_libopie" = "yes"; then
-       echo "$as_me:10093: checking for opiechallenge in -lopie" >&5
+       echo "$as_me:10089: checking for opiechallenge in -lopie" >&5
 echo $ECHO_N "checking for opiechallenge in -lopie... $ECHO_C" >&6
 if test "${ac_cv_lib_opie_opiechallenge+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -10098,7 +10094,7 @@ else
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lopie $LIBCRYPT $LIBS"
 cat >conftest.$ac_ext <<_ACEOF
-#line 10101 "configure"
+#line 10097 "configure"
 #include "confdefs.h"
 
 /* Override any gcc2 internal prototype to avoid an error.  */
@@ -10117,16 +10113,16 @@ opiechallenge ();
 }
 _ACEOF
 rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:10120: \"$ac_link\"") >&5
+if { (eval echo "$as_me:10116: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:10123: \$? = $ac_status" >&5
+  echo "$as_me:10119: \$? = $ac_status" >&5
   (exit $ac_status); } &&
          { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:10126: \"$ac_try\"") >&5
+  { (eval echo "$as_me:10122: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:10129: \$? = $ac_status" >&5
+  echo "$as_me:10125: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   ac_cv_lib_opie_opiechallenge=yes
 else
@@ -10137,7 +10133,7 @@ fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-echo "$as_me:10140: result: $ac_cv_lib_opie_opiechallenge" >&5
+echo "$as_me:10136: result: $ac_cv_lib_opie_opiechallenge" >&5
 echo "${ECHO_T}$ac_cv_lib_opie_opiechallenge" >&6
 if test $ac_cv_lib_opie_opiechallenge = yes; then
   cat >>confdefs.h <<\EOF
@@ -10149,7 +10145,7 @@ fi
 fi
 
 if test "$with_libtcfs" = "yes"; then
-       echo "$as_me:10152: checking for tcfs_encrypt_key in -ltcfs" >&5
+       echo "$as_me:10148: checking for tcfs_encrypt_key in -ltcfs" >&5
 echo $ECHO_N "checking for tcfs_encrypt_key in -ltcfs... $ECHO_C" >&6
 if test "${ac_cv_lib_tcfs_tcfs_encrypt_key+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -10157,7 +10153,7 @@ else
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-ltcfs -lgdbm $LIBS"
 cat >conftest.$ac_ext <<_ACEOF
-#line 10160 "configure"
+#line 10156 "configure"
 #include "confdefs.h"
 
 /* Override any gcc2 internal prototype to avoid an error.  */
@@ -10176,16 +10172,16 @@ tcfs_encrypt_key ();
 }
 _ACEOF
 rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:10179: \"$ac_link\"") >&5
+if { (eval echo "$as_me:10175: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:10182: \$? = $ac_status" >&5
+  echo "$as_me:10178: \$? = $ac_status" >&5
   (exit $ac_status); } &&
          { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:10185: \"$ac_try\"") >&5
+  { (eval echo "$as_me:10181: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:10188: \$? = $ac_status" >&5
+  echo "$as_me:10184: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   ac_cv_lib_tcfs_tcfs_encrypt_key=yes
 else
@@ -10196,7 +10192,7 @@ fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-echo "$as_me:10199: result: $ac_cv_lib_tcfs_tcfs_encrypt_key" >&5
+echo "$as_me:10195: result: $ac_cv_lib_tcfs_tcfs_encrypt_key" >&5
 echo "${ECHO_T}$ac_cv_lib_tcfs_tcfs_encrypt_key" >&6
 if test $ac_cv_lib_tcfs_tcfs_encrypt_key = yes; then
   cat >>confdefs.h <<\EOF
@@ -10211,7 +10207,7 @@ fi
 fi
 
 if test "$with_libpam" = "yes"; then
-       echo "$as_me:10214: checking for pam_start in -lpam" >&5
+       echo "$as_me:10210: checking for pam_start in -lpam" >&5
 echo $ECHO_N "checking for pam_start in -lpam... $ECHO_C" >&6
 if test "${ac_cv_lib_pam_pam_start+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -10219,7 +10215,7 @@ else
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lpam  $LIBS"
 cat >conftest.$ac_ext <<_ACEOF
-#line 10222 "configure"
+#line 10218 "configure"
 #include "confdefs.h"
 
 /* Override any gcc2 internal prototype to avoid an error.  */
@@ -10238,16 +10234,16 @@ pam_start ();
 }
 _ACEOF
 rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:10241: \"$ac_link\"") >&5
+if { (eval echo "$as_me:10237: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:10244: \$? = $ac_status" >&5
+  echo "$as_me:10240: \$? = $ac_status" >&5
   (exit $ac_status); } &&
          { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:10247: \"$ac_try\"") >&5
+  { (eval echo "$as_me:10243: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:10250: \$? = $ac_status" >&5
+  echo "$as_me:10246: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   ac_cv_lib_pam_pam_start=yes
 else
@@ -10258,7 +10254,7 @@ fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-echo "$as_me:10261: result: $ac_cv_lib_pam_pam_start" >&5
+echo "$as_me:10257: result: $ac_cv_lib_pam_pam_start" >&5
 echo "${ECHO_T}$ac_cv_lib_pam_pam_start" >&6
 if test $ac_cv_lib_pam_pam_start = yes; then
   cat >>confdefs.h <<\EOF
@@ -10266,18 +10262,18 @@ if test $ac_cv_lib_pam_pam_start = yes; then
 EOF
 
                LIBPAM="-lpam"
-               echo "$as_me:10269: checking for main in -lpam_misc" >&5
+               echo "$as_me:10265: checking for main in -lpam_misc" >&5
 echo $ECHO_N "checking for main in -lpam_misc... $ECHO_C" >&6
 if test "${ac_cv_lib_pam_misc_main+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   ac_check_lib_save_LIBS=$LIBS
-LIBS="-lpam_misc { { echo "$as_me:10275: error: libpam_misc is missing" >&5
+LIBS="-lpam_misc { { echo "$as_me:10271: error: libpam_misc is missing" >&5
 echo "$as_me: error: libpam_misc is missing" >&2;}
    { (exit 1); exit 1; }; }
                 $LIBS"
 cat >conftest.$ac_ext <<_ACEOF
-#line 10280 "configure"
+#line 10276 "configure"
 #include "confdefs.h"
 
 int
@@ -10289,16 +10285,16 @@ main ();
 }
 _ACEOF
 rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:10292: \"$ac_link\"") >&5
+if { (eval echo "$as_me:10288: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:10295: \$? = $ac_status" >&5
+  echo "$as_me:10291: \$? = $ac_status" >&5
   (exit $ac_status); } &&
          { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:10298: \"$ac_try\"") >&5
+  { (eval echo "$as_me:10294: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:10301: \$? = $ac_status" >&5
+  echo "$as_me:10297: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   ac_cv_lib_pam_misc_main=yes
 else
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-echo "$as_me:10312: result: $ac_cv_lib_pam_misc_main" >&5
+echo "$as_me:10308: result: $ac_cv_lib_pam_misc_main" >&5
 echo "${ECHO_T}$ac_cv_lib_pam_misc_main" >&6
 if test $ac_cv_lib_pam_misc_main = yes; then
   LIBPAM="$LIBPAM -lpam_misc"
 fi
 
-               echo "$as_me:10318: checking use login access checking if PAM not used" >&5
+               echo "$as_me:10314: checking use login access checking if PAM not used" >&5
 echo $ECHO_N "checking use login access checking if PAM not used... $ECHO_C" >&6
                cat >>confdefs.h <<\EOF
 #define LOGIN_ACCESS 1
 EOF
 
-               echo "$as_me:10324: result: yes" >&5
+               echo "$as_me:10320: result: yes" >&5
 echo "${ECHO_T}yes" >&6
 
 fi
 
-       echo "$as_me:10329: checking use login and su access checking if PAM not used" >&5
+       echo "$as_me:10325: checking use login and su access checking if PAM not used" >&5
 echo $ECHO_N "checking use login and su access checking if PAM not used... $ECHO_C" >&6
-       echo "$as_me:10331: result: no" >&5
+       echo "$as_me:10327: result: no" >&5
 echo "${ECHO_T}no" >&6
 else
-       echo "$as_me:10334: checking use login and su access checking if PAM not used" >&5
+       echo "$as_me:10330: checking use login and su access checking if PAM not used" >&5
 echo $ECHO_N "checking use login and su access checking if PAM not used... $ECHO_C" >&6
        cat >>confdefs.h <<\EOF
 #define LOGIN_ACCESS 1
@@ -10341,15 +10337,15 @@ EOF
 #define SU_ACCESS 1
 EOF
 
-       echo "$as_me:10344: result: yes" >&5
+       echo "$as_me:10340: result: yes" >&5
 echo "${ECHO_T}yes" >&6
 fi
 
-ALL_LINGUAS="cs el fr pl sv uk"
+ALL_LINGUAS="cs el fr ja ko pl sv uk"
 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
-echo "$as_me:10352: checking for $ac_word" >&5
+echo "$as_me:10348: checking for $ac_word" >&5
 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
 if test "${ac_cv_prog_RANLIB+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -10364,7 +10360,7 @@ for ac_dir in $ac_dummy; do
   test -z "$ac_dir" && ac_dir=.
   $as_executable_p "$ac_dir/$ac_word" || continue
 ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
-echo "$as_me:10367: found $ac_dir/$ac_word" >&5
+echo "$as_me:10363: found $ac_dir/$ac_word" >&5
 break
 done
 
 fi
 RANLIB=$ac_cv_prog_RANLIB
 if test -n "$RANLIB"; then
-  echo "$as_me:10375: result: $RANLIB" >&5
+  echo "$as_me:10371: result: $RANLIB" >&5
 echo "${ECHO_T}$RANLIB" >&6
 else
-  echo "$as_me:10378: result: no" >&5
+  echo "$as_me:10374: result: no" >&5
 echo "${ECHO_T}no" >&6
 fi
 
@@ -10384,7 +10380,7 @@ 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
-echo "$as_me:10387: checking for $ac_word" >&5
+echo "$as_me:10383: checking for $ac_word" >&5
 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
 if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -10399,7 +10395,7 @@ for ac_dir in $ac_dummy; do
   test -z "$ac_dir" && ac_dir=.
   $as_executable_p "$ac_dir/$ac_word" || continue
 ac_cv_prog_ac_ct_RANLIB="ranlib"
-echo "$as_me:10402: found $ac_dir/$ac_word" >&5
+echo "$as_me:10398: found $ac_dir/$ac_word" >&5
 break
 done
 
 fi
 ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
 if test -n "$ac_ct_RANLIB"; then
-  echo "$as_me:10411: result: $ac_ct_RANLIB" >&5
+  echo "$as_me:10407: result: $ac_ct_RANLIB" >&5
 echo "${ECHO_T}$ac_ct_RANLIB" >&6
 else
-  echo "$as_me:10414: result: no" >&5
+  echo "$as_me:10410: result: no" >&5
 echo "${ECHO_T}no" >&6
 fi
 
@@ -10420,7 +10416,7 @@ else
   RANLIB="$ac_cv_prog_RANLIB"
 fi
 
-echo "$as_me:10423: checking for inline" >&5
+echo "$as_me:10419: checking for inline" >&5
 echo $ECHO_N "checking for inline... $ECHO_C" >&6
 if test "${ac_cv_c_inline+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -10428,7 +10424,7 @@ else
   ac_cv_c_inline=no
 for ac_kw in inline __inline__ __inline; do
   cat >conftest.$ac_ext <<_ACEOF
-#line 10431 "configure"
+#line 10427 "configure"
 #include "confdefs.h"
 #ifndef __cplusplus
 static $ac_kw int static_foo () {return 0; }
@@ -10437,16 +10433,16 @@ $ac_kw int foo () {return 0; }
 
 _ACEOF
 rm -f conftest.$ac_objext
-if { (eval echo "$as_me:10440: \"$ac_compile\"") >&5
+if { (eval echo "$as_me:10436: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:10443: \$? = $ac_status" >&5
+  echo "$as_me:10439: \$? = $ac_status" >&5
   (exit $ac_status); } &&
          { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:10446: \"$ac_try\"") >&5
+  { (eval echo "$as_me:10442: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:10449: \$? = $ac_status" >&5
+  echo "$as_me:10445: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   ac_cv_c_inline=$ac_kw; break
 else
@@ -10457,7 +10453,7 @@ rm -f conftest.$ac_objext conftest.$ac_ext
 done
 
 fi
-echo "$as_me:10460: result: $ac_cv_c_inline" >&5
+echo "$as_me:10456: result: $ac_cv_c_inline" >&5
 echo "${ECHO_T}$ac_cv_c_inline" >&6
 case $ac_cv_c_inline in
   inline | yes) ;;
@@ -10472,13 +10468,13 @@ EOF
  ;;
 esac
 
-echo "$as_me:10475: checking for size_t" >&5
+echo "$as_me:10471: checking for size_t" >&5
 echo $ECHO_N "checking for size_t... $ECHO_C" >&6
 if test "${ac_cv_type_size_t+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
-#line 10481 "configure"
+#line 10477 "configure"
 #include "confdefs.h"
 $ac_includes_default
 int
@@ -10493,16 +10489,16 @@ if (sizeof (size_t))
 }
 _ACEOF
 rm -f conftest.$ac_objext
-if { (eval echo "$as_me:10496: \"$ac_compile\"") >&5
+if { (eval echo "$as_me:10492: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:10499: \$? = $ac_status" >&5
+  echo "$as_me:10495: \$? = $ac_status" >&5
   (exit $ac_status); } &&
          { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:10502: \"$ac_try\"") >&5
+  { (eval echo "$as_me:10498: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:10505: \$? = $ac_status" >&5
+  echo "$as_me:10501: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   ac_cv_type_size_t=yes
 else
@@ -10512,7 +10508,7 @@ ac_cv_type_size_t=no
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
 fi
-echo "$as_me:10515: result: $ac_cv_type_size_t" >&5
+echo "$as_me:10511: result: $ac_cv_type_size_t" >&5
 echo "${ECHO_T}$ac_cv_type_size_t" >&6
 if test $ac_cv_type_size_t = yes; then
   :
 
 # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
 # for constant arguments.  Useless!
-echo "$as_me:10529: checking for working alloca.h" >&5
+echo "$as_me:10525: checking for working alloca.h" >&5
 echo $ECHO_N "checking for working alloca.h... $ECHO_C" >&6
 if test "${ac_cv_working_alloca_h+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
-#line 10535 "configure"
+#line 10531 "configure"
 #include "confdefs.h"
 #include <alloca.h>
 int
@@ -10544,16 +10540,16 @@ char *p = (char *) alloca (2 * sizeof (int));
 }
 _ACEOF
 rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:10547: \"$ac_link\"") >&5
+if { (eval echo "$as_me:10543: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:10550: \$? = $ac_status" >&5
+  echo "$as_me:10546: \$? = $ac_status" >&5
   (exit $ac_status); } &&
          { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:10553: \"$ac_try\"") >&5
+  { (eval echo "$as_me:10549: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:10556: \$? = $ac_status" >&5
+  echo "$as_me:10552: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   ac_cv_working_alloca_h=yes
 else
@@ -10563,7 +10559,7 @@ ac_cv_working_alloca_h=no
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
 fi
-echo "$as_me:10566: result: $ac_cv_working_alloca_h" >&5
+echo "$as_me:10562: result: $ac_cv_working_alloca_h" >&5
 echo "${ECHO_T}$ac_cv_working_alloca_h" >&6
 if test $ac_cv_working_alloca_h = yes; then
 
@@ -10573,13 +10569,13 @@ EOF
 
 fi
 
-echo "$as_me:10576: checking for alloca" >&5
+echo "$as_me:10572: checking for alloca" >&5
 echo $ECHO_N "checking for alloca... $ECHO_C" >&6
 if test "${ac_cv_func_alloca_works+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
-#line 10582 "configure"
+#line 10578 "configure"
 #include "confdefs.h"
 #ifdef __GNUC__
 # define alloca __builtin_alloca
@@ -10611,16 +10607,16 @@ char *p = (char *) alloca (1);
 }
 _ACEOF
 rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:10614: \"$ac_link\"") >&5
+if { (eval echo "$as_me:10610: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:10617: \$? = $ac_status" >&5
+  echo "$as_me:10613: \$? = $ac_status" >&5
   (exit $ac_status); } &&
          { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:10620: \"$ac_try\"") >&5
+  { (eval echo "$as_me:10616: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:10623: \$? = $ac_status" >&5
+  echo "$as_me:10619: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   ac_cv_func_alloca_works=yes
 else
@@ -10630,7 +10626,7 @@ ac_cv_func_alloca_works=no
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
 fi
-echo "$as_me:10633: result: $ac_cv_func_alloca_works" >&5
+echo "$as_me:10629: result: $ac_cv_func_alloca_works" >&5
 echo "${ECHO_T}$ac_cv_func_alloca_works" >&6
 
 if test $ac_cv_func_alloca_works = yes; then
@@ -10651,13 +10647,13 @@ cat >>confdefs.h <<\EOF
 #define C_ALLOCA 1
 EOF
 
-echo "$as_me:10654: checking whether \`alloca.c' needs Cray hooks" >&5
+echo "$as_me:10650: checking whether \`alloca.c' needs Cray hooks" >&5
 echo $ECHO_N "checking whether \`alloca.c' needs Cray hooks... $ECHO_C" >&6
 if test "${ac_cv_os_cray+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
-#line 10660 "configure"
+#line 10656 "configure"
 #include "confdefs.h"
 #if defined(CRAY) && ! defined(CRAY2)
 webecray
 rm -f conftest*
 
 fi
-echo "$as_me:10678: result: $ac_cv_os_cray" >&5
+echo "$as_me:10674: result: $ac_cv_os_cray" >&5
 echo "${ECHO_T}$ac_cv_os_cray" >&6
 if test $ac_cv_os_cray = yes; then
   for ac_func in _getb67 GETB67 getb67; do
     as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:10683: checking for $ac_func" >&5
+echo "$as_me:10679: checking for $ac_func" >&5
 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
 if eval "test \"\${$as_ac_var+set}\" = set"; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
-#line 10689 "configure"
+#line 10685 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func (); below.  */
@@ -10717,16 +10713,16 @@ f = $ac_func;
 }
 _ACEOF
 rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:10720: \"$ac_link\"") >&5
+if { (eval echo "$as_me:10716: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:10723: \$? = $ac_status" >&5
+  echo "$as_me:10719: \$? = $ac_status" >&5
   (exit $ac_status); } &&
          { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:10726: \"$ac_try\"") >&5
+  { (eval echo "$as_me:10722: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:10729: \$? = $ac_status" >&5
+  echo "$as_me:10725: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   eval "$as_ac_var=yes"
 else
@@ -10736,7 +10732,7 @@ eval "$as_ac_var=no"
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
 fi
-echo "$as_me:10739: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "$as_me:10735: result: `eval echo '${'$as_ac_var'}'`" >&5
 echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
 if test `eval echo '${'$as_ac_var'}'` = yes; then
 
@@ -10750,7 +10746,7 @@ fi
   done
 fi
 
-echo "$as_me:10753: checking stack direction for C alloca" >&5
+echo "$as_me:10749: checking stack direction for C alloca" >&5
 echo $ECHO_N "checking stack direction for C alloca... $ECHO_C" >&6
 if test "${ac_cv_c_stack_direction+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -10759,7 +10755,7 @@ else
   ac_cv_c_stack_direction=0
 else
   cat >conftest.$ac_ext <<_ACEOF
-#line 10762 "configure"
+#line 10758 "configure"
 #include "confdefs.h"
 int
 find_stack_direction ()
@@ -10782,15 +10778,15 @@ main ()
 }
 _ACEOF
 rm -f conftest$ac_exeext
-if { (eval echo "$as_me:10785: \"$ac_link\"") >&5
+if { (eval echo "$as_me:10781: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:10788: \$? = $ac_status" >&5
+  echo "$as_me:10784: \$? = $ac_status" >&5
   (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-  { (eval echo "$as_me:10790: \"$ac_try\"") >&5
+  { (eval echo "$as_me:10786: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:10793: \$? = $ac_status" >&5
+  echo "$as_me:10789: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   ac_cv_c_stack_direction=1
 else
@@ -10802,7 +10798,7 @@ fi
 rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 fi
-echo "$as_me:10805: result: $ac_cv_c_stack_direction" >&5
+echo "$as_me:10801: result: $ac_cv_c_stack_direction" >&5
 echo "${ECHO_T}$ac_cv_c_stack_direction" >&6
 
 cat >>confdefs.h <<EOF
 for ac_header in stdlib.h unistd.h
 do
 as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-echo "$as_me:10817: checking for $ac_header" >&5
+echo "$as_me:10813: checking for $ac_header" >&5
 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
 if eval "test \"\${$as_ac_Header+set}\" = set"; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
-#line 10823 "configure"
+#line 10819 "configure"
 #include "confdefs.h"
 #include <$ac_header>
 _ACEOF
-if { (eval echo "$as_me:10827: \"$ac_cpp conftest.$ac_ext\"") >&5
+if { (eval echo "$as_me:10823: \"$ac_cpp conftest.$ac_ext\"") >&5
   (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
   ac_status=$?
   egrep -v '^ *\+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:10833: \$? = $ac_status" >&5
+  echo "$as_me:10829: \$? = $ac_status" >&5
   (exit $ac_status); } >/dev/null; then
   if test -s conftest.err; then
     ac_cpp_err=$ac_c_preproc_warn_flag
@@ -10849,7 +10845,7 @@ else
 fi
 rm -f conftest.err conftest.$ac_ext
 fi
-echo "$as_me:10852: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "$as_me:10848: result: `eval echo '${'$as_ac_Header'}'`" >&5
 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
 if test `eval echo '${'$as_ac_Header'}'` = yes; then
   cat >>confdefs.h <<EOF
@@ -10862,13 +10858,13 @@ done
 for ac_func in getpagesize
 do
 as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:10865: checking for $ac_func" >&5
+echo "$as_me:10861: checking for $ac_func" >&5
 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
 if eval "test \"\${$as_ac_var+set}\" = set"; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
-#line 10871 "configure"
+#line 10867 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func (); below.  */
@@ -10899,16 +10895,16 @@ f = $ac_func;
 }
 _ACEOF
 rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:10902: \"$ac_link\"") >&5
+if { (eval echo "$as_me:10898: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:10905: \$? = $ac_status" >&5
+  echo "$as_me:10901: \$? = $ac_status" >&5
   (exit $ac_status); } &&
          { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:10908: \"$ac_try\"") >&5
+  { (eval echo "$as_me:10904: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:10911: \$? = $ac_status" >&5
+  echo "$as_me:10907: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   eval "$as_ac_var=yes"
 else
@@ -10918,7 +10914,7 @@ eval "$as_ac_var=no"
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
 fi
-echo "$as_me:10921: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "$as_me:10917: result: `eval echo '${'$as_ac_var'}'`" >&5
 echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
 if test `eval echo '${'$as_ac_var'}'` = yes; then
   cat >>confdefs.h <<EOF
@@ -10928,7 +10924,7 @@ EOF
 fi
 done
 
-echo "$as_me:10931: checking for working mmap" >&5
+echo "$as_me:10927: checking for working mmap" >&5
 echo $ECHO_N "checking for working mmap... $ECHO_C" >&6
 if test "${ac_cv_func_mmap_fixed_mapped+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -10937,7 +10933,7 @@ else
   ac_cv_func_mmap_fixed_mapped=no
 else
   cat >conftest.$ac_ext <<_ACEOF
-#line 10940 "configure"
+#line 10936 "configure"
 #include "confdefs.h"
 $ac_includes_default
 /* Thanks to Mike Haertel and Jim Avera for this test.
@@ -11064,15 +11060,15 @@ main ()
 }
 _ACEOF
 rm -f conftest$ac_exeext
-if { (eval echo "$as_me:11067: \"$ac_link\"") >&5
+if { (eval echo "$as_me:11063: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:11070: \$? = $ac_status" >&5
+  echo "$as_me:11066: \$? = $ac_status" >&5
   (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-  { (eval echo "$as_me:11072: \"$ac_try\"") >&5
+  { (eval echo "$as_me:11068: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:11075: \$? = $ac_status" >&5
+  echo "$as_me:11071: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   ac_cv_func_mmap_fixed_mapped=yes
 else
@@ -11084,7 +11080,7 @@ fi
 rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 fi
-echo "$as_me:11087: result: $ac_cv_func_mmap_fixed_mapped" >&5
+echo "$as_me:11083: result: $ac_cv_func_mmap_fixed_mapped" >&5
 echo "${ECHO_T}$ac_cv_func_mmap_fixed_mapped" >&6
 if test $ac_cv_func_mmap_fixed_mapped = yes; then
 
@@ -11095,13 +11091,13 @@ EOF
 fi
 rm -f conftest.mmap
 
-    echo "$as_me:11098: checking whether we are using the GNU C Library 2.1 or newer" >&5
+    echo "$as_me:11094: checking whether we are using the GNU C Library 2.1 or newer" >&5
 echo $ECHO_N "checking whether we are using the GNU C Library 2.1 or newer... $ECHO_C" >&6
 if test "${ac_cv_gnu_library_2_1+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
-#line 11104 "configure"
+#line 11100 "configure"
 #include "confdefs.h"
 
 #include <features.h>
@@ -11121,7 +11117,7 @@ fi
 rm -f conftest*
 
 fi
-echo "$as_me:11124: result: $ac_cv_gnu_library_2_1" >&5
+echo "$as_me:11120: result: $ac_cv_gnu_library_2_1" >&5
 echo "${ECHO_T}$ac_cv_gnu_library_2_1" >&6
 
     GLIBC21="$ac_cv_gnu_library_2_1"
@@ -11130,23 +11126,23 @@ for ac_header in argz.h limits.h locale.h nl_types.h malloc.h stddef.h \
 stdlib.h string.h unistd.h sys/param.h
 do
 as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-echo "$as_me:11133: checking for $ac_header" >&5
+echo "$as_me:11129: checking for $ac_header" >&5
 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
 if eval "test \"\${$as_ac_Header+set}\" = set"; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
-#line 11139 "configure"
+#line 11135 "configure"
 #include "confdefs.h"
 #include <$ac_header>
 _ACEOF
-if { (eval echo "$as_me:11143: \"$ac_cpp conftest.$ac_ext\"") >&5
+if { (eval echo "$as_me:11139: \"$ac_cpp conftest.$ac_ext\"") >&5
   (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
   ac_status=$?
   egrep -v '^ *\+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:11149: \$? = $ac_status" >&5
+  echo "$as_me:11145: \$? = $ac_status" >&5
   (exit $ac_status); } >/dev/null; then
   if test -s conftest.err; then
     ac_cpp_err=$ac_c_preproc_warn_flag
@@ -11165,7 +11161,7 @@ else
 fi
 rm -f conftest.err conftest.$ac_ext
 fi
-echo "$as_me:11168: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "$as_me:11164: result: `eval echo '${'$as_ac_Header'}'`" >&5
 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
 if test `eval echo '${'$as_ac_Header'}'` = yes; then
   cat >>confdefs.h <<EOF
@@ -11180,13 +11176,13 @@ getgid getuid mempcpy munmap putenv setenv setlocale stpcpy strchr strcasecmp \
 strdup strtoul tsearch __argz_count __argz_stringify __argz_next
 do
 as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:11183: checking for $ac_func" >&5
+echo "$as_me:11179: checking for $ac_func" >&5
 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
 if eval "test \"\${$as_ac_var+set}\" = set"; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
-#line 11189 "configure"
+#line 11185 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func (); below.  */
@@ -11217,16 +11213,16 @@ f = $ac_func;
 }
 _ACEOF
 rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:11220: \"$ac_link\"") >&5
+if { (eval echo "$as_me:11216: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:11223: \$? = $ac_status" >&5
+  echo "$as_me:11219: \$? = $ac_status" >&5
   (exit $ac_status); } &&
          { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:11226: \"$ac_try\"") >&5
+  { (eval echo "$as_me:11222: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:11229: \$? = $ac_status" >&5
+  echo "$as_me:11225: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   eval "$as_ac_var=yes"
 else
@@ -11236,7 +11232,7 @@ eval "$as_ac_var=no"
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
 fi
-echo "$as_me:11239: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "$as_me:11235: result: `eval echo '${'$as_ac_var'}'`" >&5
 echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
 if test `eval echo '${'$as_ac_var'}'` = yes; then
   cat >>confdefs.h <<EOF
@@ -11257,7 +11253,7 @@ if test "${with_libiconv_prefix+set}" = set; then
 
 fi;
 
-  echo "$as_me:11260: checking for iconv" >&5
+  echo "$as_me:11256: checking for iconv" >&5
 echo $ECHO_N "checking for iconv... $ECHO_C" >&6
 if test "${am_cv_func_iconv+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -11266,7 +11262,7 @@ else
     am_cv_func_iconv="no, consider installing GNU libiconv"
     am_cv_lib_iconv=no
     cat >conftest.$ac_ext <<_ACEOF
-#line 11269 "configure"
+#line 11265 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 #include <iconv.h>
@@ -11281,16 +11277,16 @@ iconv_t cd = iconv_open("","");
 }
 _ACEOF
 rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:11284: \"$ac_link\"") >&5
+if { (eval echo "$as_me:11280: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:11287: \$? = $ac_status" >&5
+  echo "$as_me:11283: \$? = $ac_status" >&5
   (exit $ac_status); } &&
          { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:11290: \"$ac_try\"") >&5
+  { (eval echo "$as_me:11286: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:11293: \$? = $ac_status" >&5
+  echo "$as_me:11289: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   am_cv_func_iconv=yes
 else
@@ -11302,7 +11298,7 @@ rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
       am_save_LIBS="$LIBS"
       LIBS="$LIBS -liconv"
       cat >conftest.$ac_ext <<_ACEOF
-#line 11305 "configure"
+#line 11301 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 #include <iconv.h>
@@ -11317,16 +11313,16 @@ iconv_t cd = iconv_open("","");
 }
 _ACEOF
 rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:11320: \"$ac_link\"") >&5
+if { (eval echo "$as_me:11316: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:11323: \$? = $ac_status" >&5
+  echo "$as_me:11319: \$? = $ac_status" >&5
   (exit $ac_status); } &&
          { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:11326: \"$ac_try\"") >&5
+  { (eval echo "$as_me:11322: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:11329: \$? = $ac_status" >&5
+  echo "$as_me:11325: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   am_cv_lib_iconv=yes
         am_cv_func_iconv=yes
@@ -11339,7 +11335,7 @@ rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
     fi
 
 fi
-echo "$as_me:11342: result: $am_cv_func_iconv" >&5
+echo "$as_me:11338: result: $am_cv_func_iconv" >&5
 echo "${ECHO_T}$am_cv_func_iconv" >&6
   if test "$am_cv_func_iconv" = yes; then
 
@@ -11347,14 +11343,14 @@ cat >>confdefs.h <<\EOF
 #define HAVE_ICONV 1
 EOF
 
-    echo "$as_me:11350: checking for iconv declaration" >&5
+    echo "$as_me:11346: checking for iconv declaration" >&5
 echo $ECHO_N "checking for iconv declaration... $ECHO_C" >&6
     if test "${am_cv_proto_iconv+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
 
       cat >conftest.$ac_ext <<_ACEOF
-#line 11357 "configure"
+#line 11353 "configure"
 #include "confdefs.h"
 
 #include <stdlib.h>
@@ -11378,16 +11374,16 @@ main ()
 }
 _ACEOF
 rm -f conftest.$ac_objext
-if { (eval echo "$as_me:11381: \"$ac_compile\"") >&5
+if { (eval echo "$as_me:11377: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:11384: \$? = $ac_status" >&5
+  echo "$as_me:11380: \$? = $ac_status" >&5
   (exit $ac_status); } &&
          { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:11387: \"$ac_try\"") >&5
+  { (eval echo "$as_me:11383: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:11390: \$? = $ac_status" >&5
+  echo "$as_me:11386: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   am_cv_proto_iconv_arg1=""
 else
@@ -11400,7 +11396,7 @@ rm -f conftest.$ac_objext conftest.$ac_ext
 fi
 
     am_cv_proto_iconv=`echo "$am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'`
-    echo "$as_me:11403: result: ${ac_t:-
+    echo "$as_me:11399: result: ${ac_t:-
          }$am_cv_proto_iconv" >&5
 echo "${ECHO_T}${ac_t:-
          }$am_cv_proto_iconv" >&6
@@ -11415,13 +11411,13 @@ EOF
     LIBICONV="-liconv"
   fi
 
-  echo "$as_me:11418: checking for nl_langinfo and CODESET" >&5
+  echo "$as_me:11414: checking for nl_langinfo and CODESET" >&5
 echo $ECHO_N "checking for nl_langinfo and CODESET... $ECHO_C" >&6
 if test "${am_cv_langinfo_codeset+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
-#line 11424 "configure"
+#line 11420 "configure"
 #include "confdefs.h"
 #include <langinfo.h>
 int
@@ -11433,16 +11429,16 @@ char* cs = nl_langinfo(CODESET);
 }
 _ACEOF
 rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:11436: \"$ac_link\"") >&5
+if { (eval echo "$as_me:11432: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:11439: \$? = $ac_status" >&5
+  echo "$as_me:11435: \$? = $ac_status" >&5
   (exit $ac_status); } &&
          { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:11442: \"$ac_try\"") >&5
+  { (eval echo "$as_me:11438: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:11445: \$? = $ac_status" >&5
+  echo "$as_me:11441: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   am_cv_langinfo_codeset=yes
 else
@@ -11453,7 +11449,7 @@ fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
 
 fi
-echo "$as_me:11456: result: $am_cv_langinfo_codeset" >&5
+echo "$as_me:11452: result: $am_cv_langinfo_codeset" >&5
 echo "${ECHO_T}$am_cv_langinfo_codeset" >&6
   if test $am_cv_langinfo_codeset = yes; then
 
@@ -11464,13 +11460,13 @@ EOF
   fi
 
    if test $ac_cv_header_locale_h = yes; then
-    echo "$as_me:11467: checking for LC_MESSAGES" >&5
+    echo "$as_me:11463: checking for LC_MESSAGES" >&5
 echo $ECHO_N "checking for LC_MESSAGES... $ECHO_C" >&6
 if test "${am_cv_val_LC_MESSAGES+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
-#line 11473 "configure"
+#line 11469 "configure"
 #include "confdefs.h"
 #include <locale.h>
 int
@@ -11482,16 +11478,16 @@ return LC_MESSAGES
 }
 _ACEOF
 rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:11485: \"$ac_link\"") >&5
+if { (eval echo "$as_me:11481: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:11488: \$? = $ac_status" >&5
+  echo "$as_me:11484: \$? = $ac_status" >&5
   (exit $ac_status); } &&
          { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:11491: \"$ac_try\"") >&5
+  { (eval echo "$as_me:11487: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:11494: \$? = $ac_status" >&5
+  echo "$as_me:11490: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   am_cv_val_LC_MESSAGES=yes
 else
@@ -11501,7 +11497,7 @@ am_cv_val_LC_MESSAGES=no
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
 fi
-echo "$as_me:11504: result: $am_cv_val_LC_MESSAGES" >&5
+echo "$as_me:11500: result: $am_cv_val_LC_MESSAGES" >&5
 echo "${ECHO_T}$am_cv_val_LC_MESSAGES" >&6
     if test $am_cv_val_LC_MESSAGES = yes; then
 
@@ -11511,7 +11507,7 @@ EOF
 
     fi
   fi
-   echo "$as_me:11514: checking whether NLS is requested" >&5
+   echo "$as_me:11510: checking whether NLS is requested" >&5
 echo $ECHO_N "checking whether NLS is requested... $ECHO_C" >&6
         # Check whether --enable-nls or --disable-nls was given.
 if test "${enable_nls+set}" = set; then
@@ -11520,7 +11516,7 @@ if test "${enable_nls+set}" = set; then
 else
   USE_NLS=yes
 fi;
-    echo "$as_me:11523: result: $USE_NLS" >&5
+    echo "$as_me:11519: result: $USE_NLS" >&5
 echo "${ECHO_T}$USE_NLS" >&6
 
     BUILD_INCLUDED_LIBINTL=no
@@ -11533,7 +11529,7 @@ cat >>confdefs.h <<\EOF
 #define ENABLE_NLS 1
 EOF
 
-      echo "$as_me:11536: checking whether included gettext is requested" >&5
+      echo "$as_me:11532: checking whether included gettext is requested" >&5
 echo $ECHO_N "checking whether included gettext is requested... $ECHO_C" >&6
 
 # Check whether --with-included-gettext or --without-included-gettext was given.
@@ -11543,30 +11539,30 @@ if test "${with_included_gettext+set}" = set; then
 else
   nls_cv_force_use_gnu_gettext=no
 fi;
-      echo "$as_me:11546: result: $nls_cv_force_use_gnu_gettext" >&5
+      echo "$as_me:11542: result: $nls_cv_force_use_gnu_gettext" >&5
 echo "${ECHO_T}$nls_cv_force_use_gnu_gettext" >&6
 
       nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext"
       if test "$nls_cv_force_use_gnu_gettext" != "yes"; then
                                CATOBJEXT=NONE
 
-       echo "$as_me:11553: checking for libintl.h" >&5
+       echo "$as_me:11549: checking for libintl.h" >&5
 echo $ECHO_N "checking for libintl.h... $ECHO_C" >&6
 if test "${ac_cv_header_libintl_h+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
-#line 11559 "configure"
+#line 11555 "configure"
 #include "confdefs.h"
 #include <libintl.h>
 _ACEOF
-if { (eval echo "$as_me:11563: \"$ac_cpp conftest.$ac_ext\"") >&5
+if { (eval echo "$as_me:11559: \"$ac_cpp conftest.$ac_ext\"") >&5
   (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
   ac_status=$?
   egrep -v '^ *\+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:11569: \$? = $ac_status" >&5
+  echo "$as_me:11565: \$? = $ac_status" >&5
   (exit $ac_status); } >/dev/null; then
   if test -s conftest.err; then
     ac_cpp_err=$ac_c_preproc_warn_flag
@@ -11585,16 +11581,16 @@ else
 fi
 rm -f conftest.err conftest.$ac_ext
 fi
-echo "$as_me:11588: result: $ac_cv_header_libintl_h" >&5
+echo "$as_me:11584: result: $ac_cv_header_libintl_h" >&5
 echo "${ECHO_T}$ac_cv_header_libintl_h" >&6
 if test $ac_cv_header_libintl_h = yes; then
-  echo "$as_me:11591: checking for GNU gettext in libc" >&5
+  echo "$as_me:11587: checking for GNU gettext in libc" >&5
 echo $ECHO_N "checking for GNU gettext in libc... $ECHO_C" >&6
 if test "${gt_cv_func_gnugettext1_libc+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
-#line 11597 "configure"
+#line 11593 "configure"
 #include "confdefs.h"
 #include <libintl.h>
 extern int _nl_msg_cat_cntr;
@@ -11608,16 +11604,16 @@ return (int) gettext ("") + _nl_msg_cat_cntr
 }
 _ACEOF
 rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:11611: \"$ac_link\"") >&5
+if { (eval echo "$as_me:11607: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:11614: \$? = $ac_status" >&5
+  echo "$as_me:11610: \$? = $ac_status" >&5
   (exit $ac_status); } &&
          { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:11617: \"$ac_try\"") >&5
+  { (eval echo "$as_me:11613: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:11620: \$? = $ac_status" >&5
+  echo "$as_me:11616: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   gt_cv_func_gnugettext1_libc=yes
 else
@@ -11627,11 +11623,11 @@ gt_cv_func_gnugettext1_libc=no
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
 fi
-echo "$as_me:11630: result: $gt_cv_func_gnugettext1_libc" >&5
+echo "$as_me:11626: result: $gt_cv_func_gnugettext1_libc" >&5
 echo "${ECHO_T}$gt_cv_func_gnugettext1_libc" >&6
 
           if test "$gt_cv_func_gnugettext1_libc" != "yes"; then
-            echo "$as_me:11634: checking for GNU gettext in libintl" >&5
+            echo "$as_me:11630: checking for GNU gettext in libintl" >&5
 echo $ECHO_N "checking for GNU gettext in libintl... $ECHO_C" >&6
 if test "${gt_cv_func_gnugettext1_libintl+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -11639,7 +11635,7 @@ else
   gt_save_LIBS="$LIBS"
                LIBS="$LIBS -lintl $LIBICONV"
                cat >conftest.$ac_ext <<_ACEOF
-#line 11642 "configure"
+#line 11638 "configure"
 #include "confdefs.h"
 #include <libintl.h>
 extern int _nl_msg_cat_cntr;
@@ -11653,16 +11649,16 @@ return (int) gettext ("") + _nl_msg_cat_cntr
 }
 _ACEOF
 rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:11656: \"$ac_link\"") >&5
+if { (eval echo "$as_me:11652: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:11659: \$? = $ac_status" >&5
+  echo "$as_me:11655: \$? = $ac_status" >&5
   (exit $ac_status); } &&
          { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:11662: \"$ac_try\"") >&5
+  { (eval echo "$as_me:11658: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:11665: \$? = $ac_status" >&5
+  echo "$as_me:11661: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   gt_cv_func_gnugettext1_libintl=yes
 else
@@ -11673,7 +11669,7 @@ fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
                LIBS="$gt_save_LIBS"
 fi
-echo "$as_me:11676: result: $gt_cv_func_gnugettext1_libintl" >&5
+echo "$as_me:11672: result: $gt_cv_func_gnugettext1_libintl" >&5
 echo "${ECHO_T}$gt_cv_func_gnugettext1_libintl" >&6
           fi
 
@@ -11695,13 +11691,13 @@ EOF
 for ac_func in dcgettext
 do
 as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:11698: checking for $ac_func" >&5
+echo "$as_me:11694: checking for $ac_func" >&5
 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
 if eval "test \"\${$as_ac_var+set}\" = set"; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
-#line 11704 "configure"
+#line 11700 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func (); below.  */
@@ -11732,16 +11728,16 @@ f = $ac_func;
 }
 _ACEOF
 rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:11735: \"$ac_link\"") >&5
+if { (eval echo "$as_me:11731: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:11738: \$? = $ac_status" >&5
+  echo "$as_me:11734: \$? = $ac_status" >&5
   (exit $ac_status); } &&
          { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:11741: \"$ac_try\"") >&5
+  { (eval echo "$as_me:11737: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:11744: \$? = $ac_status" >&5
+  echo "$as_me:11740: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   eval "$as_ac_var=yes"
 else
@@ -11751,7 +11747,7 @@ eval "$as_ac_var=no"
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
 fi
-echo "$as_me:11754: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "$as_me:11750: result: `eval echo '${'$as_ac_var'}'`" >&5
 echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
 if test `eval echo '${'$as_ac_var'}'` = yes; then
   cat >>confdefs.h <<EOF
@@ -11763,9 +11759,9 @@ done
 
             LIBS="$gt_save_LIBS"
 
-            # Extract the first word of "msgfmt", so it can be a program name with args.
+                    # Extract the first word of "msgfmt", so it can be a program name with args.
 set dummy msgfmt; ac_word=$2
-echo "$as_me:11768: checking for $ac_word" >&5
+echo "$as_me:11764: checking for $ac_word" >&5
 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
 if test "${ac_cv_path_MSGFMT+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -11779,29 +11775,29 @@ else
   for ac_dir in $PATH; do
     test -z "$ac_dir" && ac_dir=.
     if test -f $ac_dir/$ac_word; then
-      if test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"; then
+      if $ac_dir/$ac_word --statistics /dev/null >/dev/null 2>&1; then
        ac_cv_path_MSGFMT="$ac_dir/$ac_word"
        break
       fi
     fi
   done
   IFS="$ac_save_ifs"
-  test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT="no"
+  test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT=":"
   ;;
 esac
 fi
 MSGFMT="$ac_cv_path_MSGFMT"
-if test -n "$MSGFMT"; then
-  echo "$as_me:11795: result: $MSGFMT" >&5
+if test "$MSGFMT" != ":"; then
+  echo "$as_me:11791: result: $MSGFMT" >&5
 echo "${ECHO_T}$MSGFMT" >&6
 else
-  echo "$as_me:11798: result: no" >&5
+  echo "$as_me:11794: result: no" >&5
 echo "${ECHO_T}no" >&6
 fi
-            if test "$MSGFMT" != "no"; then
-              # Extract the first word of "gmsgfmt", so it can be a program name with args.
+
+            # Extract the first word of "gmsgfmt", so it can be a program name with args.
 set dummy gmsgfmt; ac_word=$2
-echo "$as_me:11804: checking for $ac_word" >&5
+echo "$as_me:11800: checking for $ac_word" >&5
 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
 if test "${ac_cv_path_GMSGFMT+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -11818,7 +11814,7 @@ for ac_dir in $ac_dummy; do
   test -z "$ac_dir" && ac_dir=.
   if $as_executable_p "$ac_dir/$ac_word"; then
    ac_cv_path_GMSGFMT="$ac_dir/$ac_word"
-   echo "$as_me:11821: found $ac_dir/$ac_word" >&5
+   echo "$as_me:11817: found $ac_dir/$ac_word" >&5
    break
 fi
 done
 GMSGFMT=$ac_cv_path_GMSGFMT
 
 if test -n "$GMSGFMT"; then
-  echo "$as_me:11833: result: $GMSGFMT" >&5
+  echo "$as_me:11829: result: $GMSGFMT" >&5
 echo "${ECHO_T}$GMSGFMT" >&6
 else
-  echo "$as_me:11836: result: no" >&5
+  echo "$as_me:11832: result: no" >&5
 echo "${ECHO_T}no" >&6
 fi
 
-            fi
-
-            # Extract the first word of "xgettext", so it can be a program name with args.
+                    # Extract the first word of "xgettext", so it can be a program name with args.
 set dummy xgettext; ac_word=$2
-echo "$as_me:11844: checking for $ac_word" >&5
+echo "$as_me:11838: checking for $ac_word" >&5
 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
 if test "${ac_cv_path_XGETTEXT+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -11855,7 +11849,7 @@ else
   for ac_dir in $PATH; do
     test -z "$ac_dir" && ac_dir=.
     if test -f $ac_dir/$ac_word; then
-      if test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"; then
+      if $ac_dir/$ac_word --omit-header /dev/null >/dev/null 2>&1; then
        ac_cv_path_XGETTEXT="$ac_dir/$ac_word"
        break
       fi
@@ -11867,11 +11861,11 @@ else
 esac
 fi
 XGETTEXT="$ac_cv_path_XGETTEXT"
-if test -n "$XGETTEXT"; then
-  echo "$as_me:11871: result: $XGETTEXT" >&5
+if test "$XGETTEXT" != ":"; then
+  echo "$as_me:11865: result: $XGETTEXT" >&5
 echo "${ECHO_T}$XGETTEXT" >&6
 else
-  echo "$as_me:11874: result: no" >&5
+  echo "$as_me:11868: result: no" >&5
 echo "${ECHO_T}no" >&6
 fi
 
@@ -11889,7 +11883,7 @@ fi
                 INTLOBJS="\$(GETTOBJS)"
         # Extract the first word of "msgfmt", so it can be a program name with args.
 set dummy msgfmt; ac_word=$2
-echo "$as_me:11892: checking for $ac_word" >&5
+echo "$as_me:11886: checking for $ac_word" >&5
 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
 if test "${ac_cv_path_MSGFMT+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -11903,29 +11897,29 @@ else
   for ac_dir in $PATH; do
     test -z "$ac_dir" && ac_dir=.
     if test -f $ac_dir/$ac_word; then
-      if test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"; then
+      if $ac_dir/$ac_word --statistics /dev/null >/dev/null 2>&1; then
        ac_cv_path_MSGFMT="$ac_dir/$ac_word"
        break
       fi
     fi
   done
   IFS="$ac_save_ifs"
-  test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT="msgfmt"
+  test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT=":"
   ;;
 esac
 fi
 MSGFMT="$ac_cv_path_MSGFMT"
-if test -n "$MSGFMT"; then
-  echo "$as_me:11919: result: $MSGFMT" >&5
+if test "$MSGFMT" != ":"; then
+  echo "$as_me:11913: result: $MSGFMT" >&5
 echo "${ECHO_T}$MSGFMT" >&6
 else
-  echo "$as_me:11922: result: no" >&5
+  echo "$as_me:11916: result: no" >&5
 echo "${ECHO_T}no" >&6
 fi
 
         # Extract the first word of "gmsgfmt", so it can be a program name with args.
 set dummy gmsgfmt; ac_word=$2
-echo "$as_me:11928: checking for $ac_word" >&5
+echo "$as_me:11922: checking for $ac_word" >&5
 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
 if test "${ac_cv_path_GMSGFMT+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -11942,7 +11936,7 @@ for ac_dir in $ac_dummy; do
   test -z "$ac_dir" && ac_dir=.
   if $as_executable_p "$ac_dir/$ac_word"; then
    ac_cv_path_GMSGFMT="$ac_dir/$ac_word"
-   echo "$as_me:11945: found $ac_dir/$ac_word" >&5
+   echo "$as_me:11939: found $ac_dir/$ac_word" >&5
    break
 fi
 done
 GMSGFMT=$ac_cv_path_GMSGFMT
 
 if test -n "$GMSGFMT"; then
-  echo "$as_me:11957: result: $GMSGFMT" >&5
+  echo "$as_me:11951: result: $GMSGFMT" >&5
 echo "${ECHO_T}$GMSGFMT" >&6
 else
-  echo "$as_me:11960: result: no" >&5
+  echo "$as_me:11954: result: no" >&5
 echo "${ECHO_T}no" >&6
 fi
 
         # Extract the first word of "xgettext", so it can be a program name with args.
 set dummy xgettext; ac_word=$2
-echo "$as_me:11966: checking for $ac_word" >&5
+echo "$as_me:11960: checking for $ac_word" >&5
 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
 if test "${ac_cv_path_XGETTEXT+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -11977,7 +11971,7 @@ else
   for ac_dir in $PATH; do
     test -z "$ac_dir" && ac_dir=.
     if test -f $ac_dir/$ac_word; then
-      if test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"; then
+      if $ac_dir/$ac_word --omit-header /dev/null >/dev/null 2>&1; then
        ac_cv_path_XGETTEXT="$ac_dir/$ac_word"
        break
       fi
@@ -11989,11 +11983,11 @@ else
 esac
 fi
 XGETTEXT="$ac_cv_path_XGETTEXT"
-if test -n "$XGETTEXT"; then
-  echo "$as_me:11993: result: $XGETTEXT" >&5
+if test "$XGETTEXT" != ":"; then
+  echo "$as_me:11987: result: $XGETTEXT" >&5
 echo "${ECHO_T}$XGETTEXT" >&6
 else
-  echo "$as_me:11996: result: no" >&5
+  echo "$as_me:11990: result: no" >&5
 echo "${ECHO_T}no" >&6
 fi
 
        LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'`
       fi
 
-            if test "$XGETTEXT" != ":"; then
-                       if $XGETTEXT --omit-header /dev/null 2> /dev/null; then
+                  if test "$GMSGFMT" != ":"; then
+                       if $GMSGFMT --statistics /dev/null >/dev/null 2>&1; then
+         : ;
+       else
+         echo "$as_me:12005: result: found msgfmt program is not GNU msgfmt; ignore it" >&5
+echo "${ECHO_T}found msgfmt program is not GNU msgfmt; ignore it" >&6
+         GMSGFMT=":"
+       fi
+      fi
+
+                  if test "$XGETTEXT" != ":"; then
+                       if $XGETTEXT --omit-header /dev/null >/dev/null 2>&1; then
          : ;
        else
-         echo "$as_me:12011: result: found xgettext program is not GNU xgettext; ignore it" >&5
+         echo "$as_me:12015: result: found xgettext program is not GNU xgettext; ignore it" >&5
 echo "${ECHO_T}found xgettext program is not GNU xgettext; ignore it" >&6
          XGETTEXT=":"
        fi
@@ -12026,7 +12030,7 @@ echo "${ECHO_T}found xgettext program is not GNU xgettext; ignore it" >&6
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
-echo "$as_me:12029: checking for $ac_word" >&5
+echo "$as_me:12033: checking for $ac_word" >&5
 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
 if test "${ac_cv_prog_INTLBISON+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -12041,7 +12045,7 @@ for ac_dir in $ac_dummy; do
   test -z "$ac_dir" && ac_dir=.
   $as_executable_p "$ac_dir/$ac_word" || continue
 ac_cv_prog_INTLBISON="$ac_prog"
-echo "$as_me:12044: found $ac_dir/$ac_word" >&5
+echo "$as_me:12048: found $ac_dir/$ac_word" >&5
 break
 done
 
 fi
 INTLBISON=$ac_cv_prog_INTLBISON
 if test -n "$INTLBISON"; then
-  echo "$as_me:12052: result: $INTLBISON" >&5
+  echo "$as_me:12056: result: $INTLBISON" >&5
 echo "${ECHO_T}$INTLBISON" >&6
 else
-  echo "$as_me:12055: result: no" >&5
+  echo "$as_me:12059: result: no" >&5
 echo "${ECHO_T}no" >&6
 fi
 
@@ -12062,16 +12066,16 @@ done
     if test -z "$INTLBISON"; then
       ac_verc_fail=yes
     else
-            echo "$as_me:12065: checking version of bison" >&5
+            echo "$as_me:12069: checking version of bison" >&5
 echo $ECHO_N "checking version of bison... $ECHO_C" >&6
-      ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison .* \([0-9]*\.[0-9.]*\).*$/\1/p'`
+      ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'`
       case $ac_prog_version in
         '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
         1.2[6-9]* | 1.[3-9][0-9]* | [2-9].*)
            ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
         *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
       esac
-      echo "$as_me:12074: result: $ac_prog_version" >&5
+      echo "$as_me:12078: result: $ac_prog_version" >&5
 echo "${ECHO_T}$ac_prog_version" >&6
     fi
     if test $ac_verc_fail = yes; then
@@ -12096,7 +12100,7 @@ echo "${ECHO_T}$ac_prog_version" >&6
      if test "x$ALL_LINGUAS" = "x"; then
        LINGUAS=
      else
-       echo "$as_me:12099: checking for catalogs to be installed" >&5
+       echo "$as_me:12103: checking for catalogs to be installed" >&5
 echo $ECHO_N "checking for catalogs to be installed... $ECHO_C" >&6
        NEW_LINGUAS=
        for presentlang in $ALL_LINGUAS; do
@@ -12116,7 +12120,7 @@ echo $ECHO_N "checking for catalogs to be installed... $ECHO_C" >&6
          fi
        done
        LINGUAS=$NEW_LINGUAS
-       echo "$as_me:12119: result: $LINGUAS" >&5
+       echo "$as_me:12123: result: $LINGUAS" >&5
 echo "${ECHO_T}$LINGUAS" >&6
      fi
 
@@ -12135,7 +12139,7 @@ echo "${ECHO_T}$LINGUAS" >&6
 
       INTL_LIBTOOL_SUFFIX_PREFIX=
 
-ac_config_files="$ac_config_files Makefile intl/Makefile po/Makefile.in doc/Makefile man/Makefile man/ja/Makefile man/pl/Makefile man/pt_BR/Makefile libmisc/Makefile lib/Makefile src/Makefile contrib/Makefile debian/Makefile etc/Makefile etc/pam.d/Makefile shadow-utils.spec"
+ac_config_files="$ac_config_files Makefile intl/Makefile po/Makefile.in doc/Makefile man/Makefile man/hu/Makefile man/ja/Makefile man/pl/Makefile man/pt_BR/Makefile libmisc/Makefile lib/Makefile src/Makefile contrib/Makefile debian/Makefile etc/Makefile etc/pam.d/Makefile shadow-utils.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
@@ -12215,7 +12219,7 @@ DEFS=-DHAVE_CONFIG_H
 : ${CONFIG_STATUS=./config.status}
 ac_clean_files_save=$ac_clean_files
 ac_clean_files="$ac_clean_files $CONFIG_STATUS"
-{ echo "$as_me:12218: creating $CONFIG_STATUS" >&5
+{ echo "$as_me:12222: creating $CONFIG_STATUS" >&5
 echo "$as_me: creating $CONFIG_STATUS" >&6;}
 cat >$CONFIG_STATUS <<_ACEOF
 #! $SHELL
@@ -12391,7 +12395,7 @@ cat >>$CONFIG_STATUS <<\EOF
     echo "$ac_cs_version"; exit 0 ;;
   --he | --h)
     # Conflict between --help and --header
-    { { echo "$as_me:12394: error: ambiguous option: $1
+    { { echo "$as_me:12398: error: ambiguous option: $1
 Try \`$0 --help' for more information." >&5
 echo "$as_me: error: ambiguous option: $1
 Try \`$0 --help' for more information." >&2;}
@@ -12410,7 +12414,7 @@ Try \`$0 --help' for more information." >&2;}
     ac_need_defaults=false;;
 
   # This is an error.
-  -*) { { echo "$as_me:12413: error: unrecognized option: $1
+  -*) { { echo "$as_me:12417: error: unrecognized option: $1
 Try \`$0 --help' for more information." >&5
 echo "$as_me: error: unrecognized option: $1
 Try \`$0 --help' for more information." >&2;}
@@ -12460,6 +12464,7 @@ do
   "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/hu/Makefile" ) CONFIG_FILES="$CONFIG_FILES man/hu/Makefile" ;;
   "man/ja/Makefile" ) CONFIG_FILES="$CONFIG_FILES man/ja/Makefile" ;;
   "man/pl/Makefile" ) CONFIG_FILES="$CONFIG_FILES man/pl/Makefile" ;;
   "man/pt_BR/Makefile" ) CONFIG_FILES="$CONFIG_FILES man/pt_BR/Makefile" ;;
@@ -12474,7 +12479,7 @@ do
   "default-1" ) CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;;
   "default-2" ) CONFIG_COMMANDS="$CONFIG_COMMANDS default-2" ;;
   "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
-  *) { { echo "$as_me:12477: error: invalid argument: $ac_config_target" >&5
+  *) { { echo "$as_me:12482: error: invalid argument: $ac_config_target" >&5
 echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
    { (exit 1); exit 1; }; };;
   esac
@@ -12747,7 +12752,7 @@ done; }
   esac
 
   if test x"$ac_file" != x-; then
-    { echo "$as_me:12750: creating $ac_file" >&5
+    { echo "$as_me:12755: creating $ac_file" >&5
 echo "$as_me: creating $ac_file" >&6;}
     rm -f "$ac_file"
   fi
@@ -12765,7 +12770,7 @@ echo "$as_me: creating $ac_file" >&6;}
       -) echo $tmp/stdin ;;
       [\\/$]*)
          # Absolute (can't be DOS-style, as IFS=:)
-         test -f "$f" || { { echo "$as_me:12768: error: cannot find input file: $f" >&5
+         test -f "$f" || { { echo "$as_me:12773: error: cannot find input file: $f" >&5
 echo "$as_me: error: cannot find input file: $f" >&2;}
    { (exit 1); exit 1; }; }
          echo $f;;
@@ -12778,7 +12783,7 @@ echo "$as_me: error: cannot find input file: $f" >&2;}
            echo $srcdir/$f
          else
            # /dev/null tree
-           { { echo "$as_me:12781: error: cannot find input file: $f" >&5
+           { { echo "$as_me:12786: error: cannot find input file: $f" >&5
 echo "$as_me: error: cannot find input file: $f" >&2;}
    { (exit 1); exit 1; }; }
          fi;;
@@ -12839,7 +12844,7 @@ for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue
   * )   ac_file_in=$ac_file.in ;;
   esac
 
-  test x"$ac_file" != x- && { echo "$as_me:12842: creating $ac_file" >&5
+  test x"$ac_file" != x- && { echo "$as_me:12847: creating $ac_file" >&5
 echo "$as_me: creating $ac_file" >&6;}
 
   # First look for the input files in the build tree, otherwise in the
@@ -12850,7 +12855,7 @@ echo "$as_me: creating $ac_file" >&6;}
       -) echo $tmp/stdin ;;
       [\\/$]*)
          # Absolute (can't be DOS-style, as IFS=:)
-         test -f "$f" || { { echo "$as_me:12853: error: cannot find input file: $f" >&5
+         test -f "$f" || { { echo "$as_me:12858: error: cannot find input file: $f" >&5
 echo "$as_me: error: cannot find input file: $f" >&2;}
    { (exit 1); exit 1; }; }
          echo $f;;
@@ -12863,7 +12868,7 @@ echo "$as_me: error: cannot find input file: $f" >&2;}
            echo $srcdir/$f
          else
            # /dev/null tree
-           { { echo "$as_me:12866: error: cannot find input file: $f" >&5
+           { { echo "$as_me:12871: error: cannot find input file: $f" >&5
 echo "$as_me: error: cannot find input file: $f" >&2;}
    { (exit 1); exit 1; }; }
          fi;;
@@ -12980,7 +12985,7 @@ cat >>$CONFIG_STATUS <<\EOF
   rm -f $tmp/in
   if test x"$ac_file" != x-; then
     if cmp -s $ac_file $tmp/config.h 2>/dev/null; then
-      { echo "$as_me:12983: $ac_file is unchanged" >&5
+      { echo "$as_me:12988: $ac_file is unchanged" >&5
 echo "$as_me: $ac_file is unchanged" >&6;}
     else
       ac_dir=`$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
@@ -13087,16 +13092,19 @@ done
           ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
           ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`"
           ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
-          case "$srcdir" in
+          # 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="$srcdir" ;;
-            *)  top_srcdir="$ac_dots$srcdir" ;;
+            /*) top_srcdir="$ac_given_srcdir" ;;
+            *)  top_srcdir="$ac_dots$ac_given_srcdir" ;;
           esac
-          if test -f "$srcdir/$ac_dir/POTFILES.in"; then
+          if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then
             rm -f "$ac_dir/POTFILES"
-            echo creating "$ac_dir/POTFILES"
-            sed -e "/^#/d" -e "/^[     ]*\$/d" -e "s,.*,     $top_srcdir/& \\\\," -e "\$s/\(.*\) \\\\/\1/" < "$srcdir/$ac_dir/POTFILES.in" > "$ac_dir/POTFILES"
-            echo creating "$ac_dir/Makefile"
+            test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES"
+            sed -e "/^#/d" -e "/^[     ]*\$/d" -e "s,.*,     $top_srcdir/& \\\\," -e "\$s/\(.*\) \\\\/\1/" < "$ac_given_srcdir/$ac_dir/POTFILES.in" > "$ac_dir/POTFILES"
+            test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile"
             sed -e "/POTFILES =/r $ac_dir/POTFILES" "$ac_dir/Makefile.in" > "$ac_dir/Makefile"
           fi
           ;;
index 0ea298261964fd43e697cd872e8cefbcd9e5bfe5..eab9f2698f99190bd1f57b64da82c5908f4320d1 100644 (file)
@@ -1,6 +1,6 @@
 dnl Process this file with autoconf to produce a configure script.
 AC_INIT(lib/dialchk.c)
-AM_INIT_AUTOMAKE(shadow, 4.0.0)
+AM_INIT_AUTOMAKE(shadow, 4.0.1)
 AM_CONFIG_HEADER(config.h)
 
 dnl Some hacks...
@@ -27,8 +27,8 @@ AC_HEADER_DIRENT
 AC_HEADER_STDC
 AC_HEADER_SYS_WAIT
 
-AC_CHECK_HEADERS(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 usersec.h \
+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 shadow.h lastlog.h \
        rpc/key_prot.h)
 
@@ -193,7 +193,6 @@ AC_MSG_RESULT($passwd_dir)
 dnl XXX - quick hack, should disappear before anyone notices :).
 AC_DEFINE(SHADOWPWD)
 AC_DEFINE(USG)
-AC_DEFINE(AGING)
 AC_DEFINE(USE_SYSLOG)
 AC_DEFINE(RLOGIN)
 AC_DEFINE(RUSEROK, 0)
@@ -283,7 +282,7 @@ else
        AC_MSG_RESULT(yes)
 fi
 
-ALL_LINGUAS="cs el fr pl sv uk"
+ALL_LINGUAS="cs el fr ja ko pl sv uk"
 AM_GNU_GETTEXT
 
 AC_OUTPUT([
@@ -292,6 +291,7 @@ AC_OUTPUT([
        po/Makefile.in
        doc/Makefile
        man/Makefile
+       man/hu/Makefile
        man/ja/Makefile
        man/pl/Makefile
        man/pt_BR/Makefile
index 4450bc6e19a937a0e484f8ce896cc83b1bbdfddf..bc78ef14ab018545771a5affd7704ac7bda0ad55 100644 (file)
@@ -6,4 +6,4 @@ EXTRA_DIST = changelog checksums control control.gnu control.linux \
        login.prerm logoutd.init passwd.conffiles passwd.copyright \
        passwd.cron passwd.init passwd.postinst passwd.postrm porttime rules \
        secure-su.README secure-su.conffiles secure-su.copyright secure-su.postrm \
-       secure-su.preinst securetty shadowconfig.sh tar.c
+       secure-su.preinst securetty shadowconfig.sh
index 90b78fad085f38a1759e0530737f1e7fb327334e..95b6fbb504237c3ef3b1ce709e0e079780ae1a58 100644 (file)
@@ -115,7 +115,7 @@ EXTRA_DIST = changelog checksums control control.gnu control.linux \
        login.prerm logoutd.init passwd.conffiles passwd.copyright \
        passwd.cron passwd.init passwd.postinst passwd.postrm porttime rules \
        secure-su.README secure-su.conffiles secure-su.copyright secure-su.postrm \
-       secure-su.preinst securetty shadowconfig.sh tar.c
+       secure-su.preinst securetty shadowconfig.sh
 
 subdir = debian
 mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
diff --git a/debian/tar.c b/debian/tar.c
deleted file mode 100644 (file)
index 1f45eaa..0000000
+++ /dev/null
@@ -1,409 +0,0 @@
-/*
- * $Id: tar.c,v 1.2 1999/03/07 19:14:24 marekm Exp $
- *
- * This is a wrapper for tar to ensure that all files within the
- * newly created tar archive have the owner and group set to
- * root:root.  This makes it possible to build Debian packages
- * without root privileges (normally needed to chown files).
- * 
- * Assumptions:
- * - the directory containing this program is listed in $PATH
- * before the directory containing the real tar program (/bin)
- * - the options passed to tar cause it to output the archive
- * (not compressed) on standard output
- *
- * Written by Marek Michalkiewicz <marekm@linux.org.pl>,
- * public domain, no warranty, etc.
- */
-
-#include <sys/types.h>
-#include <sys/wait.h>
-#include <signal.h>
-#include <unistd.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <pwd.h>
-#include <grp.h>
-#include <fnmatch.h>
-#include <tar.h>
-
-#ifndef REAL_TAR
-#define REAL_TAR "/bin/tar"
-#endif
-
-#define RECORD_SIZE 512
-
-union record {
-       char data[RECORD_SIZE];
-       struct header {
-               char name[100];         /* NUL-terminated if NUL fits */
-               char mode[8];   /* 0+ spaces, 1-6 octal digits, space, NUL */
-               char uid[8];    /* format same as mode */
-               char gid[8];    /* format same as mode */
-               char size[12];  /* 0+ spaces, 1-11 octal digits, space */
-                               /* if '1' <= typeflag <= '6', ignore size */
-               char mtime[12]; /* format same as size */
-               char chksum[8]; /* 0+ spaces, 1-6 octal digits, NUL, space */
-               char typeflag;
-               char linkname[100];     /* NUL-terminated if NUL fits */
-/* XXX - for GNU tar, magic is "ustar " (no NUL) and version is " \0" */
-               char magic[6];          /* must be TMAGIC (NUL term.) */
-               char version[2];        /* must be TVERSION */
-               char uname[32];         /* NUL-terminated */
-               char gname[32];         /* NUL-terminated */
-               char devmajor[8];
-               char devminor[8];
-#ifdef GNU_TAR_FORMAT
-               char atime[12];
-               char ctime[12];
-               char offset[12];
-               char longnames[4];
-               char pad;
-               struct sparse {
-                       char offset[12];
-                       char numbytes[12];
-               } sp[4];
-               char isextended;
-               char realsize[12];
-#else
-/* if prefix[0] != NUL then filename = prefix/name else filename = name */
-               char prefix[155];       /* NUL-terminated if NUL fits */
-#endif
-       } h;
-#ifdef GNU_TAR_FORMAT
-       struct exthdr {
-               struct sparse sp[21];
-               char isextended;
-       } xh;
-#endif
-};
-
-static union record tarbuf;
-static int infd = -1, outfd = -1;
-
-int main(int, char **);
-static ssize_t xread(int, char *, size_t);
-static ssize_t xwrite(int, const char *, size_t);
-static int block_is_eof(void);
-static void block_read(void);
-static void block_write(void);
-static void verify_magic(void);
-static void verify_checksum(void);
-static void update_checksum(void);
-static void set_owner(const char *);
-static void set_group(const char *);
-static void process_archive(void);
-
-
-int
-main(int argc, char **argv)
-{
-       int pipefd[2];
-       pid_t pid;
-       const char *real_tar;
-       int status;
-
-       real_tar = getenv("REAL_TAR");
-       if (!real_tar)
-               real_tar = REAL_TAR;
-       if (pipe(pipefd)) {
-               perror("pipe");
-               exit(1);
-       }
-       pid = fork();
-       if (pid == 0) {  /* child */
-               /* redirect stdout to the pipe */
-               if (dup2(pipefd[1], STDOUT_FILENO) != 1) {
-                       perror("dup2");
-                       _exit(126);
-               }
-               close(pipefd[0]);
-               close(pipefd[1]);
-               /* run the real tar program */
-               execv(real_tar, argv);
-               if (errno == ENOENT) {
-                       perror("execve");
-                       _exit(127);
-               } else {
-                       perror("execve");
-                       _exit(126);
-               }
-       } else if (pid < 0) {  /* error */
-               perror("fork");
-               exit(1);
-       }
-       /* parent */
-       close(pipefd[1]);
-       /* read from pipefd[0], modify tar headers, write to stdout ... */
-       infd = pipefd[0];
-       outfd = STDOUT_FILENO;
-       process_archive();
-       /* wait for the tar subprocess to finish, and return its exit status */
-       status = 1;
-       if (waitpid(pid, &status, 0) == -1) {
-               perror("waitpid");
-               exit(1);
-       }
-       if (WIFSIGNALED(status)) {
-               kill(getpid(), WTERMSIG(status));
-               exit(1);
-       }
-       exit(WEXITSTATUS(status));
-}
-
-/* EINTR-safe versions of read() and write() - they don't really help much
-   as GNU tar itself (version 1.11.8 at least) is not EINTR-safe, but it
-   doesn't hurt...  Also, these functions never return errors - instead,
-   they print an error message to stderr, and exit(1).  End of file is
-   indicated by returning the number of bytes actually read.  */
-
-static ssize_t
-xread(int fd, char *buf, size_t count)
-{
-       ssize_t n;
-       size_t left;
-
-       left = count;
-       do {
-               n = read(fd, buf, left);
-               if ((n < 0) && (errno == EINTR))
-                       continue;
-               if (n <= 0)
-                       break;
-               left -= n;
-               buf += n;
-       } while (left > 0);
-       if (count > left)
-               return count - left;
-       if (n < 0) {
-               perror("read");
-               exit(1);
-       }
-       return 0;
-}
-
-
-static ssize_t
-xwrite(int fd, const char *buf, size_t count)
-{
-       ssize_t n;
-       size_t left;
-
-       left = count;
-       do {
-               n = write(fd, buf, left);
-               if (n < 0) {
-                       if (errno == EINTR)
-                               continue;
-                       /* any other write errors are fatal */
-                       perror("write");
-                       exit(1);
-               }
-               left -= n;
-               buf += n;
-       } while (left > 0);
-       return count;
-}
-
-
-static int
-block_is_eof(void)
-{
-       unsigned int i;
-
-       for (i = 0; i < sizeof(tarbuf.data); i++) {
-               if (tarbuf.data[i])
-                       return 0;
-       }
-       return 1;
-}
-
-
-static void
-block_read(void)
-{
-       ssize_t nread;
-
-       nread = xread(infd, tarbuf.data, RECORD_SIZE);
-       if (nread != RECORD_SIZE) {
-               fprintf(stderr, "unexpected end of file\n");
-               exit(1);
-       }
-}
-
-
-static void
-block_write(void)
-{
-       xwrite(outfd, tarbuf.data, RECORD_SIZE);
-}
-
-
-static void
-verify_magic(void)
-{
-       /* only check that magic starts with "ustar" - works for
-          standard UNIX tar as well as GNU tar formats.  */
-       if (strncmp(tarbuf.h.magic, "ustar", 5) != 0) {
-               fprintf(stderr, "bad tar header magic\n");
-               exit(1);
-       }
-}
-
-
-static void
-verify_checksum(void)
-{
-       unsigned int i;
-       int csum;
-
-       if (sscanf(tarbuf.h.chksum, "%o", &csum) != 1) {
-               fprintf(stderr, "bad tar checksum format\n");
-               exit(1);
-       }
-       memset(tarbuf.h.chksum, ' ', sizeof(tarbuf.h.chksum));
-       for (i = 0; i < sizeof(tarbuf.data); i++)
-               csum -= (unsigned char) tarbuf.data[i];
-       if (csum) {
-               fprintf(stderr, "bad tar checksum value\n");
-               exit(1);
-       }
-}
-
-
-static void
-update_checksum(void)
-{
-       unsigned int i;
-       int csum;
-
-       memset(tarbuf.h.chksum, ' ', sizeof(tarbuf.h.chksum));
-       csum = 0;
-       for (i = 0; i < sizeof(tarbuf.data); i++)
-               csum += (unsigned char) tarbuf.data[i];
-       snprintf(tarbuf.h.chksum, sizeof(tarbuf.h.chksum), "%6o", csum);
-}
-
-
-static void
-set_owner(const char *username)
-{
-       const struct passwd *pw;
-
-       pw = getpwnam(username);
-       memset(tarbuf.h.uname, 0, sizeof(tarbuf.h.uname));
-       snprintf(tarbuf.h.uname, sizeof(tarbuf.h.uname), "%s", username);
-       snprintf(tarbuf.h.uid, sizeof(tarbuf.h.uid), "%6o ", (int) (pw ? pw->pw_uid : 0));
-}
-
-
-static void
-set_group(const char *groupname)
-{
-       const struct group *gr;
-
-       gr = getgrnam(groupname);
-       memset(tarbuf.h.gname, 0, sizeof(tarbuf.h.gname));
-       snprintf(tarbuf.h.gname, sizeof(tarbuf.h.gname), "%s", groupname);
-       snprintf(tarbuf.h.gid, sizeof(tarbuf.h.gid), "%6o ", (int) (gr ? gr->gr_gid : 0));
-}
-
-
-static void
-process_archive(void)
-{
-       ssize_t nread;
-       long size;
-
-       size = 0;
-       for (;;) {
-               /* read the header or data block */
-               block_read();
-               /* copy data blocks, if any */
-               if (size > 0) {
-                       block_write();
-                       size -= RECORD_SIZE;
-                       continue;
-               }
-               if (block_is_eof()) {
-                       /* eof marker */
-                       block_write();
-                       break;
-               }
-
-               verify_magic();
-               verify_checksum();
-
-               /* process the header */
-               switch (tarbuf.h.typeflag) {
-               case LNKTYPE:
-               case SYMTYPE:
-               case CHRTYPE:
-               case BLKTYPE:
-               case DIRTYPE:
-               case FIFOTYPE:
-                       /* no data blocks - ignore size */
-                       break;
-               case REGTYPE:
-               case AREGTYPE:
-               case CONTTYPE:
-               default:
-                       if (sscanf(tarbuf.h.size, "%lo", &size) != 1) {
-                               fprintf(stderr, "bad size format\n");
-                               exit(1);
-                       }
-                       break;
-               }
-
-               /* XXX - for now, just chown all files to root:root.  */
-               set_owner("root");
-               set_group("root");
-
-               update_checksum();
-               /* write the modified header */
-               block_write();
-       }
-       /* eof marker detected, copy anything beyond it */
-       for (;;) {
-               nread = xread(infd, tarbuf.data, RECORD_SIZE);
-               if (nread == 0)
-                       break;  /* end of file */
-               xwrite(outfd, tarbuf.data, (size_t) nread);
-       }
-}
-
-#if 0
-/* permission specification file format, fixperms-1.00 compatible: 
- type filename owner group mode [linkname | major minor] [# comment]
-
- type:
-  - = regular file
-  l = link
-  d = directory
-  c = char dev
-  b = block dev
-  p = fifo
-  s = socket
-
- filename - absolute pathname, wildcards ok [not for fixperms]
- linkname - only for type l
- major, minor - only for type c or b
- owner group - numeric, or names [not for fixperms]
-
- XXX not yet implemented
-*/
-
-struct permspec {
-       char *name;
-       uid_t uid;
-       gid_t gid;
-       mode_t mode;
-       char *uname;
-       char *gname;
-       char *linkname;
-       dev_t dev;
-       struct permspec *next;
-};
-#endif
index ebc91c990aa8707ebf9b1e0c1a367337e020d26b..2191f65f1e4728f3420acd2f26b1b62bb8d424ab 100644 (file)
@@ -6,7 +6,7 @@ EXTRA_DIST = \
        login.access \
        login.defs \
        login.defs.hurd \
-       login.defs.linux
+       login.defs.linux \
        useradd
 
 SUBDIRS = pam.d
index 3b41b4580fe995daa3b4804abd404d50ec91d1d9..76e1009885de0c915eeb9950ff91c0d4825be273 100644 (file)
@@ -115,7 +115,8 @@ EXTRA_DIST = \
        login.access \
        login.defs \
        login.defs.hurd \
-       login.defs.linux
+       login.defs.linux \
+       useradd
 
 
 SUBDIRS = pam.d
@@ -361,7 +362,6 @@ uninstall-info: uninstall-info-recursive
        tags tags-recursive uninstall uninstall-am uninstall-info-am \
        uninstall-info-recursive uninstall-recursive
 
-       useradd
 # 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/useradd b/etc/useradd
new file mode 100644 (file)
index 0000000..0a28b4e
--- /dev/null
@@ -0,0 +1,7 @@
+# useradd defaults file
+GROUP=1000
+HOME=/home/users
+INACTIVE=-1
+EXPIRE=
+SHELL=/bin/bash
+SKEL=/etc/skel
index df904de3736bf40000be3d35cf76fd7f641d5e92..84e2b37ec53158766081b27eb9b6731976c6a67f 100644 (file)
@@ -1,4 +1,4 @@
-2001-05-23  GNU  <bug-gnu-utils@gnu.org>
+2001-09-13  GNU  <bug-gnu-utils@gnu.org>
 
-       * Version 0.10.38 released.
+       * Version 0.10.40 released.
 
index 889ba23923c09a3b0c056b2593cb92d168db5b67..19ed4a7e0f544610f1db0a000bfa0b30e8fa050e 100644 (file)
@@ -1,19 +1,20 @@
 # Makefile for directory with message catalog handling in GNU NLS Utilities.
 # Copyright (C) 1995-1998, 2000, 2001 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)
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Library 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.
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Library 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# You should have received a copy of the GNU Library General Public
+# License along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+# USA.
 
 PACKAGE = @PACKAGE@
 VERSION = @VERSION@
@@ -74,7 +75,7 @@ DISTFILES.common = Makefile.in \
 config.charset locale.alias ref-add.sin ref-del.sin $(HEADERS) $(SOURCES)
 DISTFILES.generated = plural.c
 DISTFILES.normal = VERSION
-DISTFILES.gettext = libintl.glibc
+DISTFILES.gettext = COPYING.LIB-2 COPYING.LIB-2.1 libintl.glibc
 DISTFILES.obsolete = xopen-msg.sed linux-msg.sed po2tbl.sed.in cat-compat.c
 
 # Libtool's library version information for libintl.
@@ -184,7 +185,7 @@ install-data: all
          $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \
          $(INSTALL_DATA) VERSION $(DESTDIR)$(gettextsrcdir)/VERSION; \
          $(INSTALL_DATA) ChangeLog.inst $(DESTDIR)$(gettextsrcdir)/ChangeLog; \
-         dists="$(DISTFILES.common)"; \
+         dists="COPYING.LIB-2 COPYING.LIB-2.1 $(DISTFILES.common)"; \
          for file in $$dists; do \
            $(INSTALL_DATA) $(srcdir)/$$file \
                            $(DESTDIR)$(gettextsrcdir)/$$file; \
@@ -243,7 +244,7 @@ uninstall:
          : ; \
        fi
        if test "$(PACKAGE)" = "gettext"; then \
-         for file in VERSION ChangeLog $(DISTFILES.common) $(DISTFILES.generated); do \
+         for file in VERSION ChangeLog COPYING.LIB-2 COPYING.LIB-2.1 $(DISTFILES.common) $(DISTFILES.generated); do \
            rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
          done; \
        else \
index 268da64a59e9ff82cd4866808e0b100545c2b694..cb8a01a78115bcb8969c79fc7aee7f412bcdbc5e 100644 (file)
@@ -1 +1 @@
-GNU gettext library from gettext-0.10.38
+GNU gettext library from gettext-0.10.40
index 7e5a74a43bf2ae94182246249274291269a30f0e..c6a9bd1643e7e0ac2a620c63277f94c8f3da9f97 100644 (file)
@@ -1,19 +1,20 @@
 /* Implementation of the bindtextdomain(3) function
    Copyright (C) 1995-1998, 2000, 2001 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)
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library 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.
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
 
 #ifdef HAVE_CONFIG_H
 # include <config.h>
index d6f369558d1d4ff9033e664ef31f242f0d3aee92..f4f2611c5ecbd837f86df20638b117e577e3a969 100644 (file)
 #   EUC-KR                    glibc aix hpux irix osf solaris freebsd   yes
 #   EUC-TW                    glibc aix hpux irix osf solaris
 #   BIG5                      glibc aix hpux osf solaris freebsd        yes
-#   BIG5HKSCS                 glibc
+#   BIG5-HKSCS                glibc
 #   GBK                       aix osf win32 dos
 #   GB18030                   glibc
-#   SJIS                      hpux osf solaris freebsd
+#   SHIFT_JIS                 hpux osf solaris freebsd                  yes
 #   JOHAB                     glibc win32
 #   TIS-620                   glibc aix hpux osf solaris
 #   VISCII                    glibc                                     yes
@@ -174,7 +174,7 @@ case "$os" in
        echo "eucTW EUC-TW"
        echo "hp15CN GB2312"
        #echo "ccdc ?" # what is this?
-       echo "SJIS SJIS"
+       echo "SJIS SHIFT_JIS"
        echo "utf8 UTF-8"
        ;;
     irix*)
@@ -209,7 +209,7 @@ case "$os" in
        echo "GBK GBK"
        echo "KSC5601 CP949"
        echo "sdeckanji EUC-JP"
-       echo "SJIS SJIS"
+       echo "SJIS SHIFT_JIS"
        echo "TACTIS TIS-620"
        echo "UTF-8 UTF-8"
        ;;
@@ -230,7 +230,7 @@ case "$os" in
        echo "cns11643 EUC-TW"
        echo "5601 EUC-KR"
        echo "eucJP EUC-JP"
-       echo "PCK SJIS"
+       echo "PCK SHIFT_JIS"
        echo "TIS620.2533 TIS-620"
        #echo "sun_eu_greek ?" # what is this?
        echo "UTF-8 UTF-8"
@@ -266,8 +266,8 @@ case "$os" in
        echo "zh_TW.Big5 BIG5"
        echo "zh_CN.EUC GB2312"
        echo "ja_JP.EUC EUC-JP"
-       echo "ja_JP.SJIS SJIS"
-       echo "ja_JP.Shift_JIS SJIS"
+       echo "ja_JP.SJIS SHIFT_JIS"
+       echo "ja_JP.Shift_JIS SHIFT_JIS"
        echo "ko_KR.EUC EUC-KR"
        ;;
     beos*)
index 469e78de7ad1d3aec5e25e991358f25226658b19..b7c96523dd881e368b1406c064279d14ed26b8bc 100644 (file)
@@ -1,19 +1,20 @@
 /* Implementation of the dcgettext(3) function.
    Copyright (C) 1995-1999, 2000, 2001 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)
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library 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.
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
 
 #ifdef HAVE_CONFIG_H
 # include <config.h>
index 8456550d03bb243928713b655342222370b82979..6acde195ff6adfeba7c21f599360d0abe6346367 100644 (file)
@@ -1,19 +1,20 @@
 /* Implementation of the internal dcigettext function.
    Copyright (C) 1995-1999, 2000, 2001 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)
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library 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.
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
 
 /* Tell glibc's <string.h> to provide a prototype for mempcpy().
    This must come before <config.h> because <config.h> may include
@@ -517,6 +518,7 @@ DCIGETTEXT (domainname, msgid1, msgid2, plural, n, category)
          /* We cannot get the current working directory.  Don't signal an
             error but simply return the default string.  */
          FREE_BLOCKS (block_list);
+         __libc_rwlock_unlock (_nl_state_lock);
          __set_errno (saved_errno);
          return (plural == 0
                  ? (char *) msgid1
index e5da257754e71825817c0267e725bea1728733de..c16af21269c1be57bcf0563981ab0610274f8251 100644 (file)
@@ -1,19 +1,20 @@
 /* Implementation of the dcngettext(3) function.
    Copyright (C) 1995-1999, 2000, 2001 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)
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library 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.
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
 
 #ifdef HAVE_CONFIG_H
 # include <config.h>
index c5130411dca4f01d6010925a5cde6678f6e95257..3651207a0f680f3dcad617ffc91986aaaf21724c 100644 (file)
@@ -1,19 +1,20 @@
 /* Implementation of the dgettext(3) function.
    Copyright (C) 1995-1997, 2000, 2001 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)
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library 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.
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
 
 #ifdef HAVE_CONFIG_H
 # include <config.h>
index 79aaa9ae6387392b33b76b64d88243a84f0c297b..f214e95b471f22d3a635c58232177cf9fa3002ae 100644 (file)
@@ -1,19 +1,20 @@
 /* Implementation of the dngettext(3) function.
    Copyright (C) 1995-1997, 2000, 2001 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)
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library 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.
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
 
 #ifdef HAVE_CONFIG_H
 # include <config.h>
index c4ddcc41a20c4d2ca42d87b69c88484adadf5234..2985064c924952a07d171e26f27ad159da6d4867 100644 (file)
@@ -1,19 +1,20 @@
 /* Copyright (C) 1995-1998, 2000, 2001 Free Software Foundation, Inc.
    Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
 
-   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)
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library 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.
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
 
 #ifdef HAVE_CONFIG_H
 # include <config.h>
index 4882554fc911f6bfe355f0147f2a56334678be4a..2f103d5563659d399ecd330403a794eb7a9826de 100644 (file)
@@ -2,19 +2,20 @@
    Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
    Written by Ulrich Drepper <drepper@gnu.org>, 1995.
 
-   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)
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library 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.
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
 
 #ifdef HAVE_CONFIG_H
 # include <config.h>
index a64020553ad8fd0e7578c623ac7ff4b41c450bbd..22a6c24536ec3bef8b37aa613f84854e0afa6447 100644 (file)
@@ -1,19 +1,20 @@
 /* Implementation of gettext(3) function.
    Copyright (C) 1995, 1997, 2000, 2001 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)
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library 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.
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
 
 #ifdef HAVE_CONFIG_H
 # include <config.h>
index eb5889074a460c9a6b7724136b9e7d6208830729..6f5d76055c5de13da5683c1f6285edce5d3f8115 100644 (file)
@@ -1,19 +1,20 @@
 /* Description of GNU message catalog format: general file layout.
    Copyright (C) 1995, 1997, 2000, 2001 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)
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library 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.
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
 
 #ifndef _GETTEXT_H
 #define _GETTEXT_H 1
index ee8ca48e95a2a61956a34c87cdb0913ab434af10..43de1cd47d15187b8517e260e0252d8e334a14e2 100644 (file)
@@ -2,19 +2,20 @@
    Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
    Written by Ulrich Drepper <drepper@cygnus.com>, 1995.
 
-   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)
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library 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.
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
 
 #ifndef _GETTEXTP_H
 #define _GETTEXTP_H
index 37d4ce1a2c3d2c05d1e9d6a90d64e055613c74ad..ccb7acca65895a915d775d682edaa1dc8aaaedb7 100644 (file)
@@ -1,19 +1,20 @@
 /* Description of GNU message catalog format: string hashing function.
    Copyright (C) 1995, 1997, 1998, 2000, 2001 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)
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library 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.
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
 
 /* @@ end of prolog @@ */
 
index b8edaa17af2bedf6fcdcabae9600de9a62f5e961..0a06ce947bd7234174883ac4d48ae13af0b2c412 100644 (file)
@@ -2,19 +2,20 @@
    Library.
    Copyright (C) 1995, 2000, 2001 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
 
 #ifdef HAVE_CONFIG_H
 # include <config.h>
index 557253eb985164c1b022a9c0c2cb447e368c2ecf..533e94be889cd25dcfb3dcd11a9ddbde751b5128 100644 (file)
@@ -1,19 +1,20 @@
 /* Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
    Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
 
-   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)
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library 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.
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
 
 /* Tell glibc's <string.h> to provide a prototype for stpcpy().
    This must come before <config.h> because <config.h> may include
index 553382ca04502343e79b0cba10ad2c33892a1951..c5be54a80af5eb239a5f67622d32135392ea8271 100644 (file)
@@ -1,19 +1,20 @@
 /* Convenience header for conditional use of GNU <libintl.h>.
    Copyright (C) 1995-1998, 2000, 2001 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)
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library 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.
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
 
 #ifndef _LIBGETTEXT_H
 #define _LIBGETTEXT_H 1
index 577001a458058fae7d0731e66615e0237c6dcf0b..f891deb9636692416434e3affe55ad0bd1abfa02 100644 (file)
@@ -1,19 +1,20 @@
 /* Message catalogs for internationalization.
    Copyright (C) 1995-1997, 2000, 2001 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)
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library 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.
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
 
 #ifndef _LIBINTL_H
 #define _LIBINTL_H     1
index 5171a8f63b7f0f7dc93ec8908ed1fab3c51859ba..b8612607b62537fe15b30d4f408296ec173dda23 100644 (file)
@@ -2,19 +2,20 @@
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 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)
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library 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.
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
 
 #ifndef _LOADINFO_H
 #define _LOADINFO_H    1
index d589243b20ecd34da8fab8edbb5c4504ab65b1ae..f99ebee3adbbeae32e76f2f4dee693268110cf21 100644 (file)
@@ -1,19 +1,20 @@
 /* Load needed message catalogs.
    Copyright (C) 1995-1999, 2000, 2001 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)
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library 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.
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
 
 /* Tell glibc's <string.h> to provide a prototype for mempcpy().
    This must come before <config.h> because <config.h> may include
index 22e09e410a9682ad919c66044d8c0ca25d738993..61f8f3e8529ed4b5de04fad2f0f84642c14cf0af 100644 (file)
 /* Pointer to the contents of the charset.alias file, if it has already been
    read, else NULL.  Its format is:
    ALIAS_1 '\0' CANONICAL_1 '\0' ... ALIAS_n '\0' CANONICAL_n '\0' '\0'  */
-static char * volatile charset_aliases;
+static const char * volatile charset_aliases;
 
 /* Return a pointer to the contents of the charset.alias file.  */
 static const char *
 get_charset_aliases ()
 {
-  char *cp;
+  const char *cp;
 
   cp = charset_aliases;
   if (cp == NULL)
index 48940f7459934314db0f93f6d2b979afdfb0bd2f..bd7b9b31eb31edc971d28f1abc295ced77ad7210 100644 (file)
@@ -1,19 +1,20 @@
 # Locale name alias data base.
 # Copyright (C) 1996,1997,1998,1999,2000,2001 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)
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Library 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.
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Library 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# You should have received a copy of the GNU Library General Public
+# License along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+# USA.
 
 # The format of this file is the same as for the corresponding file of
 # the X Window System, which normally can be found in
@@ -46,7 +47,7 @@ galego                gl_ES.ISO-8859-1
 galician       gl_ES.ISO-8859-1
 german         de_DE.ISO-8859-1
 greek           el_GR.ISO-8859-7
-hebrew          iw_IL.ISO-8859-8
+hebrew          he_IL.ISO-8859-8
 hrvatski       hr_HR.ISO-8859-2
 hungarian       hu_HU.ISO-8859-2
 icelandic       is_IS.ISO-8859-1
index 76f19a9aae08be1e7346d4f65b28f7ee2558446f..91e7acc9c7013e2ea19a778d16729485625fdd6e 100644 (file)
@@ -1,19 +1,20 @@
 /* Handle aliases for locale names.
    Copyright (C) 1995-1999, 2000, 2001 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)
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library 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.
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
 
 /* Tell glibc's <string.h> to provide a prototype for mempcpy().
    This must come before <config.h> because <config.h> may include
index 8b1fa02f8015898bf2f615700aaf1d9a3bb48641..fb3ec5a91ea076ca0fa3bbd17eead61739be37ce 100644 (file)
@@ -1,19 +1,20 @@
 /* Implementation of ngettext(3) function.
    Copyright (C) 1995, 1997, 2000, 2001 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)
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library 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.
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
 
 #ifdef HAVE_CONFIG_H
 # include <config.h>
index 81913356c30a3fc008292bea2cd9f6ad36b95776..640d43cc56176190ce583ce96149e852074055d7 100644 (file)
    Copyright (C) 2000, 2001 Free Software Foundation, Inc.
    Written by Ulrich Drepper <drepper@cygnus.com>, 2000.
 
-   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)
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library 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.
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
 
 /* The bison generated parser uses alloca.  AIX 3 forces us to put this
    declaration at the beginning of the file.  The declaration in bison's
 #define YYLEX_PARAM    &((struct parse_args *) arg)->cp
 #define YYPARSE_PARAM  arg
 
-#line 52 "plural.y"
+#line 53 "plural.y"
 typedef union {
   unsigned long int num;
   enum operator op;
   struct expression *exp;
 } YYSTYPE;
-#line 58 "plural.y"
+#line 59 "plural.y"
 
 /* Prototypes for local functions.  */
 static struct expression *new_exp PARAMS ((int nargs, enum operator op,
@@ -234,8 +235,8 @@ static const short yyrhs[] = {    17,
 
 #if YYDEBUG != 0
 static const short yyrline[] = { 0,
-   177,   185,   189,   193,   197,   201,   205,   209,   213,   217,
-   221,   226
+   178,   186,   190,   194,   198,   202,   206,   210,   214,   218,
+   222,   227
 };
 #endif
 
@@ -845,7 +846,7 @@ yyreduce:
   switch (yyn) {
 
 case 1:
-#line 178 "plural.y"
+#line 179 "plural.y"
 {
            if (yyvsp[0].exp == NULL)
              YYABORT;
@@ -853,68 +854,68 @@ case 1:
          ;
     break;}
 case 2:
-#line 186 "plural.y"
+#line 187 "plural.y"
 {
            yyval.exp = new_exp_3 (qmop, yyvsp[-4].exp, yyvsp[-2].exp, yyvsp[0].exp);
          ;
     break;}
 case 3:
-#line 190 "plural.y"
+#line 191 "plural.y"
 {
            yyval.exp = new_exp_2 (lor, yyvsp[-2].exp, yyvsp[0].exp);
          ;
     break;}
 case 4:
-#line 194 "plural.y"
+#line 195 "plural.y"
 {
            yyval.exp = new_exp_2 (land, yyvsp[-2].exp, yyvsp[0].exp);
          ;
     break;}
 case 5:
-#line 198 "plural.y"
+#line 199 "plural.y"
 {
            yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp);
          ;
     break;}
 case 6:
-#line 202 "plural.y"
+#line 203 "plural.y"
 {
            yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp);
          ;
     break;}
 case 7:
-#line 206 "plural.y"
+#line 207 "plural.y"
 {
            yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp);
          ;
     break;}
 case 8:
-#line 210 "plural.y"
+#line 211 "plural.y"
 {
            yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp);
          ;
     break;}
 case 9:
-#line 214 "plural.y"
+#line 215 "plural.y"
 {
            yyval.exp = new_exp_1 (lnot, yyvsp[0].exp);
          ;
     break;}
 case 10:
-#line 218 "plural.y"
+#line 219 "plural.y"
 {
            yyval.exp = new_exp_0 (var);
          ;
     break;}
 case 11:
-#line 222 "plural.y"
+#line 223 "plural.y"
 {
            if ((yyval.exp = new_exp_0 (num)) != NULL)
              yyval.exp->val.num = yyvsp[0].num;
          ;
     break;}
 case 12:
-#line 227 "plural.y"
+#line 228 "plural.y"
 {
            yyval.exp = yyvsp[-1].exp;
          ;
@@ -1141,7 +1142,7 @@ yyerrhandle:
     }
   return 1;
 }
-#line 232 "plural.y"
+#line 233 "plural.y"
 
 
 void
index 42ffa0eb281d340179b6f48286cad7fcad3376d8..be049a6d4ec99aad67810bdd965106b5c2e7bea7 100644 (file)
@@ -3,19 +3,20 @@
    Copyright (C) 2000, 2001 Free Software Foundation, Inc.
    Written by Ulrich Drepper <drepper@cygnus.com>, 2000.
 
-   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)
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library 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.
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
 
 /* The bison generated parser uses alloca.  AIX 3 forces us to put this
    declaration at the beginning of the file.  The declaration in bison's
index 05c2fd76b3c7655fccca0d5e73a895424d6dd4f4..2e420ad7729c407a3ec055e8f3713c9d978097de 100644 (file)
@@ -1,19 +1,20 @@
 /* Implementation of the textdomain(3) function.
    Copyright (C) 1995-1998, 2000, 2001 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)
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library 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.
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
 
 #ifdef HAVE_CONFIG_H
 # include <config.h>
index 73c40225b1c3a968006347d13004c005f9639a9d..149066b8af57c0ca8ff98eaf798a22b772470662 100644 (file)
@@ -1,3 +1,4 @@
 -kr
 -i8
 -bad
+-pcs
index 961ff481fb98557915044c7494117b61529be91b..66618a7db489dabe4b7b7350beaa27f7b06ea2c1 100644 (file)
@@ -2,7 +2,7 @@
 #include <config.h>
 
 #include "rcsid.h"
-RCSID("$Id: commonio.c,v 1.20 2001/09/07 15:35:57 kloczek Exp $")
+RCSID("$Id: commonio.c,v 1.22 2001/11/17 13:15:52 malekith Exp $")
 
 #include "defines.h"
 #include <sys/stat.h>
@@ -292,35 +292,6 @@ commonio_lock(struct commonio_db *db)
 #endif
 }
 
-#ifndef NSCD_PID_FILE
-#define NSCD_PID_FILE "/var/run/nscd.pid"
-#endif
-
-/*
-   reload_nscd() is called after updating all of the password files,
-   to tell the "nscd" caching daemon to clear its cache.
-   Very loosely based on a shadow-utils patch from Red Hat.
- */
-
-static void
-reload_nscd(void)
-{
-#ifdef ENABLE_NSCD_SIGHUP  /* not every version of nscd can handle it */
-       FILE *pidfile;
-       int pid;
-
-       pidfile = fopen(NSCD_PID_FILE, "r");
-       if (pidfile) {
-               pid = 0;
-               fscanf(pidfile, "%d", &pid);
-               if (pid > 0)
-                       kill(pid, SIGHUP);
-               fclose(pidfile);
-       }
-#endif
-}
-
-
 static void
 dec_lock_count(void)
 {
@@ -330,7 +301,8 @@ dec_lock_count(void)
                        /* Tell nscd when lock count goes to zero,
                           if any of the files were changed.  */
                        if (nscd_need_reload) {
-                               reload_nscd();
+                               nscd_flush_cache("passwd");
+                               nscd_flush_cache("group");
                                nscd_need_reload = 0;
                        }
 #ifdef HAVE_LCKPWDF
@@ -578,6 +550,8 @@ commonio_sort_wrt(struct commonio_db *shadow, struct commonio_db *passwd)
        const char *name;
 
        for (pw_ptr = passwd->head; pw_ptr; pw_ptr = pw_ptr->next) {
+               if (pw_ptr->eptr == NULL)
+                       continue;
                name = passwd->ops->getname(pw_ptr->eptr);
                for (spw_ptr = shadow->head; spw_ptr; spw_ptr = spw_ptr->next)
                        if (strcmp(name, shadow->ops->getname(spw_ptr->eptr)) == 0)
index af91c1f995dfc5b61ebf62691d73c81c2e510ba0..5114e0b2ca1227569ccd31ddd9a9f5356dfef430 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: defines.h,v 1.18 2001/06/28 20:47:05 kloczek Exp $ */
+/* $Id: defines.h,v 1.20 2001/11/19 09:23:52 kloczek Exp $ */
 /* some useful defines */
 
 #ifndef _DEFINES_H_
@@ -43,6 +43,10 @@ char *strchr(), *strrchr(), *strtok();
 # endif
 #endif /* not STDC_HEADERS */
 
+#if HAVE_ERRNO_H
+# include <errno.h>
+#endif
+
 /* Solaris 2.4 defines __SVR4, but not SVR4 -j. */
 
 #ifdef __SVR4
index 12ce99e8b09f3ef66252dbf67d9a02649e0adfbb..10125562934a968b250e4d6d81b9a2d53b9764e3 100644 (file)
@@ -30,7 +30,7 @@
 #include <config.h>
 
 #include "rcsid.h"
-RCSID("$Id: getdef.c,v 1.14 2000/08/26 18:27:17 marekm Exp $")
+RCSID("$Id: getdef.c,v 1.15 2002/01/06 14:08:00 kloczek Exp $")
 
 #include "prototypes.h"
 #include "defines.h"
@@ -201,6 +201,29 @@ getdef_num(const char *item, int dflt)
 }
 
 
+/*
+ * 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;
+
+       if (!def_loaded)
+               def_load();
+
+       if ((d = def_find(item)) == NULL || d->value == NULL)
+               return dflt;
+
+       return (unsigned int) strtoul(d->value, (char **)NULL, 0);
+}
+
+
 /*
  * getdef_long - get long integer value from table of definitions
  *
index 304e10960d2bc9e03386da09e8810d287572682f..04c7d1108d9460d05a5e3e0a40adb79d19b74b72 100644 (file)
@@ -5,6 +5,7 @@
 extern int getdef_bool(const char *);
 extern long getdef_long(const char *, long);
 extern int getdef_num(const char *, int);
+extern unsigned int getdef_unum(const char *, unsigned int);
 extern char *getdef_str(const char *);
 extern int putdef_str(const char *, const char *);
 
index cc4b45852035777968e8d4e67cdb955af6d4b369..d311f92ad15c57942200b449153cc213eb92a947 100644 (file)
@@ -31,7 +31,7 @@
 #include <config.h>
 
 #include "rcsid.h"
-RCSID("$Id: getpass.c,v 1.10 1999/08/27 19:02:51 marekm Exp $")
+RCSID("$Id: getpass.c,v 1.11 2001/11/16 14:53:48 kloczek Exp $")
 
 #include "defines.h"
 
@@ -267,7 +267,9 @@ out:
 #else
        (void) signal (SIGINT, old_signal);
 #endif
+#if 0
 out2:
+#endif
        if (tty_opened)
                (void) fclose(ifp);
 
index bd2b3ce98d25e14d07866286157a4087840762a3..8fdf0cabdc5e7cea206e4babf837e7dc69607340 100644 (file)
@@ -36,6 +36,7 @@ libmisc_la_SOURCES = \
        mail.c \
        motd.c \
        myname.c \
+       nscd.c \
        obscure.c \
        pam_pass.c \
        pwd2spwd.c \
@@ -57,3 +58,5 @@ libmisc_la_SOURCES = \
        utmp.c \
        valid.c \
        xmalloc.c
+
+libmisc_la_LIBADD = $(LIBCRACK)
index fb14b21cd46c7f5770720e7c93679950a605257f..892d5eb83515b4d4033bd4d96679500fb3aea424 100644 (file)
@@ -144,6 +144,7 @@ libmisc_la_SOURCES = \
        mail.c \
        motd.c \
        myname.c \
+       nscd.c \
        obscure.c \
        pam_pass.c \
        pwd2spwd.c \
@@ -166,6 +167,8 @@ libmisc_la_SOURCES = \
        valid.c \
        xmalloc.c
 
+
+libmisc_la_LIBADD = $(LIBCRACK)
 subdir = libmisc
 mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
 CONFIG_HEADER = $(top_builddir)/config.h
@@ -173,16 +176,16 @@ CONFIG_CLEAN_FILES =
 LTLIBRARIES = $(lib_LTLIBRARIES)
 
 libmisc_la_LDFLAGS =
-libmisc_la_LIBADD =
+libmisc_la_DEPENDENCIES =
 am_libmisc_la_OBJECTS = addgrps.lo age.lo basename.lo chkname.lo \
        chkshell.lo chowndir.lo chowntty.lo console.lo copydir.lo \
        entry.lo env.lo failure.lo fields.lo getdate.lo hushed.lo \
        isexpired.lo limits.lo list.lo log.lo login_access.lo \
        login_desrpc.lo login_krb.lo loginprompt.lo mail.lo motd.lo \
-       myname.lo obscure.lo pam_pass.lo pwd2spwd.lo pwdcheck.lo \
-       pwd_init.lo rlogin.lo salt.lo setugid.lo setup.lo setupenv.lo \
-       shell.lo strtoday.lo suauth.lo sub.lo sulog.lo ttytype.lo tz.lo \
-       ulimit.lo utmp.lo valid.lo xmalloc.lo
+       myname.lo nscd.lo obscure.lo pam_pass.lo pwd2spwd.lo \
+       pwdcheck.lo pwd_init.lo rlogin.lo salt.lo setugid.lo setup.lo \
+       setupenv.lo shell.lo strtoday.lo suauth.lo sub.lo sulog.lo \
+       ttytype.lo tz.lo ulimit.lo utmp.lo valid.lo xmalloc.lo
 libmisc_la_OBJECTS = $(am_libmisc_la_OBJECTS)
 DEFAULT_INCLUDES =  -I. -I$(srcdir) -I$(top_builddir)
 CPPFLAGS = @CPPFLAGS@
@@ -202,17 +205,17 @@ depcomp = $(SHELL) $(top_srcdir)/depcomp
 @AMDEP_TRUE@   $(DEPDIR)/login_desrpc.Plo $(DEPDIR)/login_krb.Plo \
 @AMDEP_TRUE@   $(DEPDIR)/loginprompt.Plo $(DEPDIR)/mail.Plo \
 @AMDEP_TRUE@   $(DEPDIR)/motd.Plo $(DEPDIR)/myname.Plo \
-@AMDEP_TRUE@   $(DEPDIR)/obscure.Plo $(DEPDIR)/pam_pass.Plo \
-@AMDEP_TRUE@   $(DEPDIR)/pwd2spwd.Plo $(DEPDIR)/pwd_init.Plo \
-@AMDEP_TRUE@   $(DEPDIR)/pwdcheck.Plo $(DEPDIR)/rlogin.Plo \
-@AMDEP_TRUE@   $(DEPDIR)/salt.Plo $(DEPDIR)/setugid.Plo \
-@AMDEP_TRUE@   $(DEPDIR)/setup.Plo $(DEPDIR)/setupenv.Plo \
-@AMDEP_TRUE@   $(DEPDIR)/shell.Plo $(DEPDIR)/strtoday.Plo \
-@AMDEP_TRUE@   $(DEPDIR)/suauth.Plo $(DEPDIR)/sub.Plo \
-@AMDEP_TRUE@   $(DEPDIR)/sulog.Plo $(DEPDIR)/ttytype.Plo \
-@AMDEP_TRUE@   $(DEPDIR)/tz.Plo $(DEPDIR)/ulimit.Plo \
-@AMDEP_TRUE@   $(DEPDIR)/utmp.Plo $(DEPDIR)/valid.Plo \
-@AMDEP_TRUE@   $(DEPDIR)/xmalloc.Plo
+@AMDEP_TRUE@   $(DEPDIR)/nscd.Plo $(DEPDIR)/obscure.Plo \
+@AMDEP_TRUE@   $(DEPDIR)/pam_pass.Plo $(DEPDIR)/pwd2spwd.Plo \
+@AMDEP_TRUE@   $(DEPDIR)/pwd_init.Plo $(DEPDIR)/pwdcheck.Plo \
+@AMDEP_TRUE@   $(DEPDIR)/rlogin.Plo $(DEPDIR)/salt.Plo \
+@AMDEP_TRUE@   $(DEPDIR)/setugid.Plo $(DEPDIR)/setup.Plo \
+@AMDEP_TRUE@   $(DEPDIR)/setupenv.Plo $(DEPDIR)/shell.Plo \
+@AMDEP_TRUE@   $(DEPDIR)/strtoday.Plo $(DEPDIR)/suauth.Plo \
+@AMDEP_TRUE@   $(DEPDIR)/sub.Plo $(DEPDIR)/sulog.Plo \
+@AMDEP_TRUE@   $(DEPDIR)/ttytype.Plo $(DEPDIR)/tz.Plo \
+@AMDEP_TRUE@   $(DEPDIR)/ulimit.Plo $(DEPDIR)/utmp.Plo \
+@AMDEP_TRUE@   $(DEPDIR)/valid.Plo $(DEPDIR)/xmalloc.Plo
 COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
        $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
 LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) \
@@ -301,6 +304,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/mail.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/motd.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/myname.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/nscd.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/obscure.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/pam_pass.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/pwd2spwd.Plo@am__quote@
index 7d3b355f532d687c809bbaa544141127660a9b1a..01846066c61713d781b5d637d9ee5ff6555c6c2f 100644 (file)
 #include "defines.h"
 #include <pwd.h>
 #include <grp.h>
-#ifdef HAVE_USERSEC_H
-#include <userpw.h>
-#include <usersec.h>
-#include <userconf.h>
-#endif
-
-#ifndef        AGING
-#if defined(SHADOWPWD) || defined(HAVE_USERSEC_H)
-#define AGING  1
-#endif
-#else
-#if !defined(SHADOWPWD) && !defined(HAVE_USERSEC_H) && !defined(ATT_AGE)
-#undef AGING
-#endif
-#endif
 
-#if defined(SHADOWPWD) || defined(AGING) /*{*/
+#if defined(SHADOWPWD)
 
 #include "rcsid.h"
-RCSID("$Id: age.c,v 1.6 1998/12/28 20:34:42 marekm Exp $")
+RCSID("$Id: age.c,v 1.7 2001/12/22 06:59:30 kloczek Exp $")
 
 #ifndef PASSWD_PROGRAM
 #define PASSWD_PROGRAM "/bin/passwd"
@@ -69,34 +54,22 @@ RCSID("$Id: age.c,v 1.6 1998/12/28 20:34:42 marekm Exp $")
  *     if it has expired.
  */
 
-#ifdef SHADOWPWD
 int
 expire(const struct passwd *pw, const struct spwd *sp)
 {
-#else
-int
-expire(const struct passwd *pw)
-{
-#endif
        int     status;
        int     child;
        int     pid;
 
-#ifdef SHADOWPWD
        if (! sp)
                sp = pwd_to_spwd (pw);
-#endif
 
        /*
         * See if the user's password has expired, and if so
         * force them to change their password.
         */
 
-#ifdef SHADOWPWD
        switch (status = isexpired (pw, sp))
-#else
-       switch (status = isexpired (pw))
-#endif
        {
                case 0:
                        return 0;
@@ -118,11 +91,7 @@ expire(const struct passwd *pw)
         * change that password.
         */
 
-#ifdef SHADOWPWD
        if (status > 1 || sp->sp_max < sp->sp_min)
-#else
-       if (status > 1 || c64i (pw->pw_age[0]) < c64i (pw->pw_age[1]))
-#endif
        {
                puts(_("  Contact the system administrator.\n"));
                exit(1);
@@ -136,13 +105,9 @@ expire(const struct passwd *pw)
         * might become stale after "passwd" is executed.
         */
 
-#ifdef SHADOWPWD
        endspent ();
-#endif
        endpwent ();
-#ifdef SHADOWGRP
        endsgent ();
-#endif
        endgrent ();
 
        /*
@@ -188,19 +153,12 @@ expire(const struct passwd *pw)
  *     to expire and warns the user of the pending password expiration.
  */
 
-#ifdef SHADOWPWD
 void
 agecheck(const struct passwd *pw, const struct spwd *sp)
 {
-#else
-void
-agecheck(const struct passwd *pw)
-{
-#endif
        long    now = time ((long *) 0) / SCALE;
        long    remain;
 
-#ifdef SHADOWPWD
        if (! sp)
                sp = pwd_to_spwd (pw);
 
@@ -211,17 +169,7 @@ agecheck(const struct passwd *pw)
 
        if (sp->sp_lstchg == -1 || sp->sp_max == -1 || sp->sp_warn == -1)
                return;
-#else
-       if (pw->pw_age[0] == '\0')
-               return;
-#endif
-
-#ifdef SHADOWPWD
        if ((remain = (sp->sp_lstchg + sp->sp_max) - now) <= sp->sp_warn)
-#else
-       if ((remain = (a64l (pw->pw_age + 2) + c64i (pw->pw_age[0])) * 7
-                       - now) <= getdef_num ("PASS_WARN_AGE", 7))
-#endif
        {
                remain /= DAY/SCALE;
                if (remain > 1)
@@ -232,4 +180,4 @@ agecheck(const struct passwd *pw)
                        printf(_("Your password will expire today.\n"));
        }
 }
-#endif /*}*/
+#endif /* SHADOWPWD */
index 8e71d69a0d6c7088f6968be447d671fc129ace98..95d6583e37e0036e6ada361a190184babce50706 100644 (file)
@@ -6,7 +6,7 @@
 #include <config.h>
 
 #include "rcsid.h"
-RCSID("$Id: chkname.c,v 1.4 1998/04/16 19:57:43 marekm Exp $")
+RCSID("$Id: chkname.c,v 1.5 2001/11/17 01:24:57 kloczek Exp $")
 
 #include <ctype.h>
 #include "defines.h"
@@ -22,19 +22,16 @@ static int
 good_name(const char *name)
 {
        /*
-        * User/group names must start with a letter, and may not
-        * contain colons, commas, newlines (used in passwd/group
-        * files...) or any non-printable characters.
+        * User/group names must match [a-z_][a-z0-9_-]*
         */
-       if (!*name || !isalpha(*name))
+       if (!*name || !((*name >= 'a' && *name <= 'z') || *name == '_'))
                return 0;
 
-       while (*name) {
-               if (*name == ':' || *name == ',' ||
-                   *name == '\n' || !isprint(*name))
+       while (*++name) {
+               if (!((*name >= 'a' && *name <= 'z') ||
+                   (*name >= '0' && *name <= '9') ||
+                   *name == '_' || *name == '-'))
                        return 0;
-
-               name++;
        }
 
        return 1;
index d70b2a796480e4e52b8980efd24b3b2ad84dc755..4894dc8afeb356cf04cb015a7b96420697adf9e7 100644 (file)
 #include "defines.h"
 #include <pwd.h>
 #include <time.h>
-
-#ifdef  HAVE_USERSEC_H
-#include <userpw.h>
-#include <usersec.h>
-#include <userconf.h>
-#endif
-
-#ifndef        AGING
-#if defined(SHADOWPWD) || defined(HAVE_USERSEC_H)
-#define AGING  1
-#endif
-#else
-#if !defined(SHADOWPWD) && !defined(HAVE_USERSEC_H) && !defined(ATT_AGE)
-#undef AGING
-#endif
-#endif
-
-#if defined(SHADOWPWD) || defined(AGING) /*{*/
-
 #include "rcsid.h"
-RCSID("$Id: isexpired.c,v 1.7 1997/12/07 23:27:05 marekm Exp $")
+
+RCSID("$Id: isexpired.c,v 1.9 2002/01/06 14:02:39 kloczek Exp $")
 
 /*
  * isexpired - determine if account is expired yet
@@ -74,23 +56,9 @@ RCSID("$Id: isexpired.c,v 1.7 1997/12/07 23:27:05 marekm Exp $")
 int
 isexpired(const struct passwd *pw, const struct spwd *sp)
 {
-#else
-int
-isexpired(const struct passwd *pw)
-{
-#endif
        long    now;
-#ifdef HAVE_USERSEC_H
-       int     minage = 0;
-       int     maxage = 10000;
-       int     curage = 0;
-       struct  userpw  *pu;
-#endif
-
        now = time ((time_t *) 0) / SCALE;
 
-#ifdef SHADOWPWD
-
        if (!sp)
                sp = pwd_to_spwd(pw);
 
@@ -117,25 +85,6 @@ isexpired(const struct passwd *pw)
        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;
-#endif
-#ifdef HAVE_USERSEC_H  /*{*/
-        /*
-         * The aging information lives someplace else.  Get it from the
-         * login.cfg file
-         */
-
-        if (getconfattr (SC_SYS_PASSWD, SC_MINAGE, &minage, SEC_INT))
-                minage = -1;
-
-        if (getconfattr (SC_SYS_PASSWD, SC_MAXAGE, &maxage, SEC_INT))
-                maxage = -1;
-
-        pu = getuserpw (pw->pw_name);
-        curage = (time (0) - pu->upw_lastupdate) / (7*86400L);
-
-       if (maxage != -1 && curage > maxage)
-               return 1;
-#else  /*} !HAVE_USERSEC_H */
 
        /*
         * The last and max fields must be present for an account
@@ -143,11 +92,9 @@ isexpired(const struct passwd *pw)
         * is considered to be infinite.
         */
 
-#ifdef SHADOWPWD
        if (sp->sp_lstchg == -1 ||
                        sp->sp_max == -1 || sp->sp_max >= (10000L*DAY/SCALE))
                return 0;
-#endif
 #ifdef ATT_AGE
        if (pw->pw_age[0] == '\0' || pw->pw_age[0] == '/')
                return 0;
@@ -159,15 +106,12 @@ isexpired(const struct passwd *pw)
         * the password has expired.
         */
 
-#ifdef SHADOWPWD
        if (now >= sp->sp_lstchg + sp->sp_max)
                return 1;
-#endif
 #ifdef ATT_AGE
        if (a64l (pw->pw_age + 2) + c64i (pw->pw_age[1]) < now / 7)
                return 1;
 #endif
-#endif /*} HAVE_USERSEC_H */
        return 0;
 }
-#endif /*}*/
+#endif /* SHADOWPWD */
diff --git a/libmisc/nscd.c b/libmisc/nscd.c
new file mode 100644 (file)
index 0000000..c686272
--- /dev/null
@@ -0,0 +1,95 @@
+/* Copyright (c) 1999 SuSE GmbH Nuerenberg, Germany
+   Author: Thorsten Kukuk <kukuk@suse.de> */
+
+#include <assert.h>
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <sys/socket.h>
+#include <sys/un.h>
+
+/* Version number of the daemon interface */
+#define NSCD_VERSION 2
+/* Path for the Unix domain socket.  */
+#define _PATH_NSCDSOCKET "/var/run/.nscd_socket"
+
+/* Available services.  */
+typedef enum
+{
+  GETPWBYNAME,
+  GETPWBYUID,
+  GETGRBYNAME,
+  GETGRBYGID,
+  GETHOSTBYNAME,
+  GETHOSTBYNAMEv6,
+  GETHOSTBYADDR,
+  GETHOSTBYADDRv6,
+  LASTDBREQ = GETHOSTBYADDRv6,
+  SHUTDOWN,             /* Shut the server down.  */
+  GETSTAT,              /* Get the server statistic.  */
+  INVALIDATE,           /* Invalidate one special cache.  */
+  LASTREQ
+} request_type;
+
+/* Header common to all requests */
+typedef struct
+{
+  int version;          /* Version number of the daemon interface.  */
+  request_type type;    /* Service requested.  */
+#if defined(__alpha__)
+  int64_t key_len;      /* Key length is 64bit on Alpha.  */
+#else
+  int32_t key_len;      /* Key length, 32bit on most plattforms.  */
+#endif
+} request_header;
+
+/* Create a socket connected to a name.  */
+static int
+nscd_open_socket (void)
+{
+  struct sockaddr_un addr;
+  int sock;
+
+  sock = socket (PF_UNIX, SOCK_STREAM, 0);
+  if (sock < 0)
+    return -1;
+
+  addr.sun_family = AF_UNIX;
+  assert (sizeof (addr.sun_path) >= sizeof (_PATH_NSCDSOCKET));
+  strcpy (addr.sun_path, _PATH_NSCDSOCKET);
+  if (connect (sock, (struct sockaddr *) &addr, sizeof (addr)) < 0)
+    {
+      close (sock);
+      return -1;
+    }
+
+  return sock;
+}
+
+int
+nscd_flush_cache (char *service)
+{
+  int sock = nscd_open_socket ();
+  request_header req;
+  ssize_t nbytes;
+
+  if (sock == -1)
+    return -1;
+
+  req.version = NSCD_VERSION;
+  req.type = INVALIDATE;
+  req.key_len = strlen (service) + 1;
+  nbytes = write (sock, &req, sizeof (request_header));
+  if (nbytes != sizeof (request_header))
+    {
+      close (sock);
+      return -1;
+    }
+
+  nbytes = write (sock, (void *)service, req.key_len);
+
+  close (sock);
+  return (nbytes != req.key_len ? (-1) : 0);
+}
index 1e428ba7f320145095c20711a5446bb28564e65d..35ffb21e13a4c80d7c9e98950a4c924668de5569 100644 (file)
@@ -34,7 +34,7 @@
 #include <config.h>
 
 #include "rcsid.h"
-RCSID("$Id: setupenv.c,v 1.10 2000/08/26 18:27:17 marekm Exp $")
+RCSID("$Id: setupenv.c,v 1.11 2001/11/06 15:50:25 kloczek Exp $")
 
 #include <sys/types.h>
 #include <sys/stat.h>
@@ -59,6 +59,7 @@ addenv_path(const char *varname, const char *dirname, const char *filename)
 }
 
 
+#ifndef USE_PAM
 static void
 read_env_file(const char *filename)
 {
@@ -176,6 +177,8 @@ finished:
        }
        fclose(fp);
 }
+#endif /* USE_PAM */
+
 
 /*
  *     change to the user's home directory
@@ -186,7 +189,10 @@ finished:
 void
 setup_env(struct passwd *info)
 {
-       char *cp, *envf;
+#ifndef USE_PAM
+       char *envf;
+#endif
+       char *cp;
 
        /*
         * Change the current working directory to be the home directory
index bc020a2a48ecfdca2195accac7d8a3225348935b..ebcc8ba6d384afd3e7260be76120fb2d47a320dd 100644 (file)
@@ -41,7 +41,7 @@
 #include <stdio.h>
 
 #include "rcsid.h"
-RCSID("$Id: utmp.c,v 1.8 1999/06/07 16:40:44 marekm Exp $")
+RCSID("$Id: utmp.c,v 1.9 2001/11/06 16:18:08 kloczek Exp $")
 
 #if HAVE_UTMPX_H
 extern struct  utmpx   utxent;
@@ -52,9 +52,6 @@ extern        struct  utmp    *getutent();
 extern struct  utmp    *getutline();
 extern void    setutent();
 extern void    endutent();
-extern time_t  time();
-extern char    *ttyname();
-extern long    lseek();
 
 #define        NO_UTENT \
        "No utmp entry.  You must exec \"login\" from the lowest level \"sh\""
index 1e3df7fbc4b4b10b755d57a89bddc1f27bbc6788..1695db8f4293d43d720ef81ba2e19f27143402a8 100644 (file)
@@ -30,12 +30,14 @@ man_MANS = \
        pwck.8 \
        pwconv.8 \
        pwunconv.8 \
+       sg.1 \
        shadow.5 \
        su.1 \
        suauth.5 \
        useradd.8 \
        userdel.8 \
        usermod.8 \
+       vigr.8 \
        vipw.8
 
 EXTRA_DIST = $(man_MANS) \
@@ -49,4 +51,4 @@ EXTRA_DIST = $(man_MANS) \
        sulogin.8
 
 # subdirectories for translated manual pages
-SUBDIRS = ja pl pt_BR
+SUBDIRS = hu ja pl pt_BR
index 42303ae0af616303f123cc32c8cedc7c5aa2de62..ce1514730735402c202cbd8edddf2df6b5ff8bf5 100644 (file)
@@ -138,12 +138,14 @@ man_MANS = \
        pwck.8 \
        pwconv.8 \
        pwunconv.8 \
+       sg.1 \
        shadow.5 \
        su.1 \
        suauth.5 \
        useradd.8 \
        userdel.8 \
        usermod.8 \
+       vigr.8 \
        vipw.8
 
 
@@ -159,7 +161,7 @@ EXTRA_DIST = $(man_MANS) \
 
 
 # subdirectories for translated manual pages
-SUBDIRS = ja pl pt_BR
+SUBDIRS = hu ja pl pt_BR
 subdir = man
 mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
 CONFIG_HEADER = $(top_builddir)/config.h
index a777871807041c8e25f36137e4d4dc62e1dc06f8..7dcd2b4465fcad2dc48a7603e0ab290ec8f3940b 100644 (file)
@@ -1,4 +1,4 @@
-.\"$Id: chpasswd.8,v 1.8 2001/01/25 10:43:50 kloczek Exp $
+.\"$Id: chpasswd.8,v 1.9 2001/12/22 05:40:01 kloczek Exp $
 .\" Copyright 1991, Julianne Frances Haugh
 .\" All rights reserved.
 .\"
@@ -29,7 +29,7 @@
 .SH NAME
 \fBchpasswd\fR - update password file in batch
 .SH SYNOPSIS
-\fBchpasswd [-e]\fR
+\fBchpasswd\fR [\fB-e\fR]
 .SH DESCRIPTION
 \fBchpasswd\fR reads a file of user name and password pairs
 from standard input and uses this information
index cf0d863bf0ff3d259ed1f418358d86b3edf4300c..b44a516b40aec081f19ed2371062f7a7e6963a32 100644 (file)
@@ -1,4 +1,4 @@
-.\"$Id: dpasswd.8,v 1.8 2001/01/27 02:55:52 kloczek Exp $
+.\"$Id: dpasswd.8,v 1.9 2001/12/22 05:40:01 kloczek Exp $
 .\" Copyright 1991, Julianne Frances Haugh
 .\" All rights reserved.
 .\"
@@ -29,7 +29,7 @@
 .SH NAME
 \fBdpasswd\fR - change dialup password
 .SH SYNOPSIS
-\fBdpasswd\fR [(\fI-af\fR|\fB-d\fR)] \fIshell\fR
+\fBdpasswd\fR [(\fB-af\fR|\fB-d\fR)] \fIshell\fR
 .SH DESCRIPTION
 \fBdpasswd\fR adds, deletes, and updates dialup passwords for user
 login shells.
diff --git a/man/hu/Makefile.am b/man/hu/Makefile.am
new file mode 100644 (file)
index 0000000..98f8c2c
--- /dev/null
@@ -0,0 +1,12 @@
+
+mandir = @mandir@/hu
+
+man_MANS = \
+       chsh.1 \
+       gpasswd.1 \
+       newgrp.1 \
+       passwd.1 \
+       sg.1
+
+EXTRA_DIST = $(man_MANS) \
+       groups.1
diff --git a/man/hu/Makefile.in b/man/hu/Makefile.in
new file mode 100644 (file)
index 0000000..d29ecf9
--- /dev/null
@@ -0,0 +1,295 @@
+# Makefile.in generated automatically by automake 1.5 from Makefile.am.
+
+# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
+# 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@
+
+SHELL = @SHELL@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+bindir = @bindir@
+sbindir = @sbindir@
+libexecdir = @libexecdir@
+datadir = @datadir@
+sysconfdir = @sysconfdir@
+sharedstatedir = @sharedstatedir@
+localstatedir = @localstatedir@
+libdir = @libdir@
+infodir = @infodir@
+includedir = @includedir@
+oldincludedir = /usr/include
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ../..
+
+ACLOCAL = @ACLOCAL@
+AUTOCONF = @AUTOCONF@
+AUTOMAKE = @AUTOMAKE@
+AUTOHEADER = @AUTOHEADER@
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = @program_transform_name@
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+host_alias = @host_alias@
+host_triplet = @host@
+AMTAR = @AMTAR@
+AS = @AS@
+AWK = @AWK@
+BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CPP = @CPP@
+DATADIRNAME = @DATADIRNAME@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+ECHO = @ECHO@
+EXEEXT = @EXEEXT@
+GENCAT = @GENCAT@
+GLIBC21 = @GLIBC21@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLBISON = @INTLBISON@
+INTLLIBS = @INTLLIBS@
+INTLOBJS = @INTLOBJS@
+INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@
+LIBCRACK = @LIBCRACK@
+LIBCRYPT = @LIBCRYPT@
+LIBICONV = @LIBICONV@
+LIBMD = @LIBMD@
+LIBPAM = @LIBPAM@
+LIBSKEY = @LIBSKEY@
+LIBTCFS = @LIBTCFS@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+POFILES = @POFILES@
+POSUB = @POSUB@
+RANLIB = @RANLIB@
+STRIP = @STRIP@
+U = @U@
+USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+YACC = @YACC@
+am__include = @am__include@
+am__quote = @am__quote@
+install_sh = @install_sh@
+
+mandir = @mandir@/hu
+
+man_MANS = \
+       chsh.1 \
+       gpasswd.1 \
+       newgrp.1 \
+       passwd.1 \
+       sg.1
+
+
+EXTRA_DIST = $(man_MANS) \
+       groups.1
+
+subdir = man/hu
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+DIST_SOURCES =
+
+NROFF = nroff
+MANS = $(man_MANS)
+DIST_COMMON = Makefile.am Makefile.in
+all: all-am
+
+.SUFFIXES:
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+distclean-libtool:
+       -rm -f libtool
+$(srcdir)/Makefile.in:  Makefile.am  $(top_srcdir)/configure.in $(ACLOCAL_M4)
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnu  man/hu/Makefile
+Makefile:  $(srcdir)/Makefile.in  $(top_builddir)/config.status
+       cd $(top_builddir) && \
+         CONFIG_HEADERS= CONFIG_LINKS= \
+         CONFIG_FILES=$(subdir)/$@ $(SHELL) ./config.status
+uninstall-info-am:
+
+man1dir = $(mandir)/man1
+install-man1: $(man1_MANS) $(man_MANS)
+       @$(NORMAL_INSTALL)
+       $(mkinstalldirs) $(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 $(srcdir)/$$i; then file=$(srcdir)/$$i; \
+         else file=$$i; fi; \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         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/^.*\\.//'`; \
+         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:
+
+
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+
+top_distdir = ../..
+distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
+
+distdir: $(DISTFILES)
+       @for file in $(DISTFILES); do \
+         if test -f $$file; then d=.; else d=$(srcdir); fi; \
+         dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+         if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+           $(mkinstalldirs) "$(distdir)/$$dir"; \
+         fi; \
+         if test -d $$d/$$file; then \
+           cp -pR $$d/$$file $(distdir) \
+           || 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:
+       $(mkinstalldirs) $(DESTDIR)$(man1dir)
+
+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)" \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -rm -f Makefile $(CONFIG_CLEAN_FILES) stamp-h stamp-h[0-9]*
+
+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
+
+distclean-am: clean-am distclean-generic distclean-libtool
+
+dvi: dvi-am
+
+dvi-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-man
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man: install-man1
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+uninstall-am: uninstall-info-am uninstall-man
+
+uninstall-man: uninstall-man1
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+       distclean distclean-generic distclean-libtool distdir dvi \
+       dvi-am info info-am install install-am install-data \
+       install-data-am install-exec install-exec-am install-info \
+       install-info-am install-man install-man1 install-strip \
+       installcheck installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-generic \
+       mostlyclean-libtool uninstall uninstall-am uninstall-info-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/hu/chsh.1 b/man/hu/chsh.1
new file mode 100644 (file)
index 0000000..b35da01
--- /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,v 1.1 2001/11/13 23:28:50 ankry Exp $
+.\"
+.TH CHSH 1
+.SH NÉV
+chsh \- bejelentkezési parancsértelmezõ (héjj) állítása
+.SH ÁTTEKINTÉS
+.TP 5
+\fBchsh\fR
+[\fB-s \fIhéjjprogram\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éjjprogrammal (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éjj-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
+/etc/passwd \- felhaszálói nyilvántartás
+.br
+/etc/shells \- engedélyezett parancsértelmezõk listája
+.SH LÁSD MÉG
+.BR chfn (1),
+.BR passwd (5)
+.SH MAGYAR FORDÍTÁS
+Szekely Krisztian <szekelyk@edasz.hu>
diff --git a/man/hu/gpasswd.1 b/man/hu/gpasswd.1
new file mode 100644 (file)
index 0000000..7972d86
--- /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,v 1.1 2001/11/13 23:28:50 ankry Exp $
+.\"
+.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
+/etc/group \- információ a csoportról
+.br
+/etc/gshadow \- 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..6e24a5f
--- /dev/null
@@ -0,0 +1,55 @@
+.\" 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,v 1.1 2001/11/13 23:28:50 ankry Exp $
+.\"
+.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
+/etc/group \- információ a csoportokról
+.SH LÁSD MÉG
+.BR newgrp (1),
+.BR getuid (2),
+.BR getgid (2),
+.BR getgroups (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/newgrp.1 b/man/hu/newgrp.1
new file mode 100644 (file)
index 0000000..5e40185
--- /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,v 1.1 2001/11/13 23:28:50 ankry Exp $
+.\"
+.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 Bourne 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
+/etc/passwd \- felhasználói információk
+.br
+/etc/group \- csoportinfomációk
+.SH LÁSD MÉG
+.BR login (1),
+.BR id (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..403d673
--- /dev/null
@@ -0,0 +1,165 @@
+.\" 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,v 1.1 2001/11/13 23:28:50 ankry Exp $
+.\"
+.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|\fBR\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
+/etc/passwd \- felhasználói információk
+.br
+/etc/shadow \- kódolt felhasználói jelszavak
+.SH LÁSD MÉG
+.BR passwd (3),
+.BR shadow (3),
+.BR group (5),
+.BR passwd (5)
+.SH MAGYAR FORDÍTÁS
+Érdi "Cactus" Gergõ <cactus@freemail.c3.hu>
diff --git a/man/hu/sg.1 b/man/hu/sg.1
new file mode 100644 (file)
index 0000000..31be744
--- /dev/null
@@ -0,0 +1 @@
+.so newgrp.1
index f3cdf69a26f725a9715a927bad86dfb5782699c5..4195e30b7e8f15eb20ba0fbd67a91d4e9f818747 100644 (file)
@@ -2,35 +2,51 @@
 mandir = @mandir@/ja
 
 man_MANS = \
+       adduser.8 \
        chage.1 \
        chfn.1 \
+       chpasswd.8 \
        chsh.1 \
-       gpasswd.1 \
-       login.1 \
-       newgrp.1 \
-       passwd.1 \
-       su.1 \
-       shadow.3 \
        faillog.5 \
-       login.access.5 \
-       login.defs.5 \
-       passwd.5 \
-       porttime.5 \
-       shadow.5 \
-       suauth.5 \
-        chpasswd.8 \
        faillog.8 \
+       gpasswd.1 \
        groupadd.8 \
        groupdel.8 \
        groupmod.8 \
        grpck.8 \
+       grpconv.8 \
+       grpunconv.8 \
        lastlog.8 \
+       limits.5 \
+       login.1 \
+       login.access.5 \
+       login.defs.5 \
        logoutd.8 \
        mkpasswd.8 \
+       newgrp.1 \
+       newusers.8 \
+       passwd.1 \
+       passwd.5 \
+       porttime.5 \
        pwck.8 \
        pwconv.8 \
+       pwunconv.8 \
+       sg.1 \
+       shadow.5 \
+       su.1 \
+       suauth.5 \
+       useradd.8 \
        userdel.8 \
-       usermod.8
+       usermod.8 \
+       vigr.8 \
+       vipw.8
 
 EXTRA_DIST = $(man_MANS) \
-       pw_auth.3 pwauth.8 sulogin.8 dpasswd.8
+       dpasswd.8 \
+       groups.1 \
+       id.1 \
+       pw_auth.3 \
+       pwauth.8 \
+       shadow.3 \
+       shadowconfig.8 \
+       sulogin.8
index a509dd2a52a67f4eeb0057f9602069217c8243ad..86d660656b4eb549aa02ce8c8aa9ad9a6eb55006 100644 (file)
@@ -109,39 +109,55 @@ install_sh = @install_sh@
 mandir = @mandir@/ja
 
 man_MANS = \
+       adduser.8 \
        chage.1 \
        chfn.1 \
+       chpasswd.8 \
        chsh.1 \
-       gpasswd.1 \
-       login.1 \
-       newgrp.1 \
-       passwd.1 \
-       su.1 \
-       shadow.3 \
        faillog.5 \
-       login.access.5 \
-       login.defs.5 \
-       passwd.5 \
-       porttime.5 \
-       shadow.5 \
-       suauth.5 \
-        chpasswd.8 \
        faillog.8 \
+       gpasswd.1 \
        groupadd.8 \
        groupdel.8 \
        groupmod.8 \
        grpck.8 \
+       grpconv.8 \
+       grpunconv.8 \
        lastlog.8 \
+       limits.5 \
+       login.1 \
+       login.access.5 \
+       login.defs.5 \
        logoutd.8 \
        mkpasswd.8 \
+       newgrp.1 \
+       newusers.8 \
+       passwd.1 \
+       passwd.5 \
+       porttime.5 \
        pwck.8 \
        pwconv.8 \
+       pwunconv.8 \
+       sg.1 \
+       shadow.5 \
+       su.1 \
+       suauth.5 \
+       useradd.8 \
        userdel.8 \
-       usermod.8
+       usermod.8 \
+       vigr.8 \
+       vipw.8
 
 
 EXTRA_DIST = $(man_MANS) \
-       pw_auth.3 pwauth.8 sulogin.8 dpasswd.8
+       dpasswd.8 \
+       groups.1 \
+       id.1 \
+       pw_auth.3 \
+       pwauth.8 \
+       shadow.3 \
+       shadowconfig.8 \
+       sulogin.8
 
 subdir = man/ja
 mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
@@ -212,45 +228,6 @@ uninstall-man1:
          rm -f $(DESTDIR)$(man1dir)/$$inst; \
        done
 
-man3dir = $(mandir)/man3
-install-man3: $(man3_MANS) $(man_MANS)
-       @$(NORMAL_INSTALL)
-       $(mkinstalldirs) $(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 $(srcdir)/$$i; then file=$(srcdir)/$$i; \
-         else file=$$i; fi; \
-         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
-         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/^.*\\.//'`; \
-         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
-
 man5dir = $(mandir)/man5
 install-man5: $(man5_MANS) $(man_MANS)
        @$(NORMAL_INSTALL)
@@ -358,7 +335,7 @@ check: check-am
 all-am: Makefile $(MANS)
 
 installdirs:
-       $(mkinstalldirs) $(DESTDIR)$(man1dir) $(DESTDIR)$(man3dir) $(DESTDIR)$(man5dir) $(DESTDIR)$(man8dir)
+       $(mkinstalldirs) $(DESTDIR)$(man1dir) $(DESTDIR)$(man5dir) $(DESTDIR)$(man8dir)
 
 install: install-am
 install-exec: install-exec-am
@@ -405,7 +382,7 @@ install-exec-am:
 
 install-info: install-info-am
 
-install-man: install-man1 install-man3 install-man5 install-man8
+install-man: install-man1 install-man5 install-man8
 
 installcheck-am:
 
@@ -419,20 +396,18 @@ mostlyclean-am: mostlyclean-generic mostlyclean-libtool
 
 uninstall-am: uninstall-info-am uninstall-man
 
-uninstall-man: uninstall-man1 uninstall-man3 uninstall-man5 \
-       uninstall-man8
+uninstall-man: uninstall-man1 uninstall-man5 uninstall-man8
 
 .PHONY: all all-am check check-am clean clean-generic clean-libtool \
        distclean distclean-generic distclean-libtool distdir dvi \
        dvi-am info info-am install install-am install-data \
        install-data-am install-exec install-exec-am install-info \
-       install-info-am install-man install-man1 install-man3 \
-       install-man5 install-man8 install-strip installcheck \
-       installcheck-am installdirs maintainer-clean \
-       maintainer-clean-generic mostlyclean mostlyclean-generic \
-       mostlyclean-libtool uninstall uninstall-am uninstall-info-am \
-       uninstall-man uninstall-man1 uninstall-man3 uninstall-man5 \
-       uninstall-man8
+       install-info-am install-man install-man1 install-man5 \
+       install-man8 install-strip installcheck installcheck-am \
+       installdirs maintainer-clean maintainer-clean-generic \
+       mostlyclean mostlyclean-generic mostlyclean-libtool uninstall \
+       uninstall-am uninstall-info-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.
diff --git a/man/ja/adduser.8 b/man/ja/adduser.8
new file mode 100644 (file)
index 0000000..5c58edf
--- /dev/null
@@ -0,0 +1 @@
+.so useradd.8
index c262149157b31a0bcf2b510e30c75654793b56e2..a56f33a53a72e54339dc951bb31b926dd658615c 100644 (file)
@@ -1,4 +1,4 @@
-.\" Copyright 1990 - 1994 John F. Haugh II
+.\" Copyright 1990 - 1994 Julianne Frances Haugh
 .\" All rights reserved.
 .\"
 .\" Redistribution and use in source and binary forms, with or without
@@ -9,18 +9,14 @@
 .\" 2. Redistributions in binary form must reproduce 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
+.\" 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 JOHN HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" 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 JOHN HAUGH OR CONTRIBUTORS BE LIABLE
+.\" 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)
@@ -29,7 +25,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\"    $Id: chage.1,v 1.1 2001/06/16 02:35:46 kloczek Exp $
+.\"    $Id: chage.1,v 1.2 2001/11/16 17:01:32 ankry Exp $
 .\"
 .\" Japanese Version Copyright (c) 1997 Kazuyoshi Furutaka
 .\"         all rights reserved.
 .SH Ì¾Á°
 chage \- ¥æ¡¼¥¶¥Ñ¥¹¥ï¡¼¥É¤ÎÍ­¸ú´ü¸Â¤Î¾ðÊó¤òÊѹ¹¤¹¤ë¡£
 .SH ½ñ¼°
-\fBchage\fR [ \fB-m \fImindays\fR ] [ \fB-M \fImaxdays\fR ]
-[ \fB-d \fIlastday\fR ] [ \fB-I \fIinactive\fR ]
-[ \fB-E \fIexpiredate\fR ] [ \fB-W \fIwarndays\fR ] \fIuser\fR
-.sp 1
-\fBchage\fR -l \fIuser\fR
+.TP 6
+\fBchage\fR
+[\fB-m \fImindays\fR] [\fB-M \fImaxdays\fR]
+[\fB-d \fIlastday\fR] [\fB-I \fIinactive\fR]
+.br
+[\fB-E \fIexpiredate\fR] [\fB-W \fIwarndays\fR] \fIuser\fR
+.TP 6
+\fBchage\fR
+\fB-l\fR \fIuser\fR
 .SH ÀâÌÀ
-\fIchage\fR¤Ï¡¢
+\fBchage\fR¤Ï¡¢
 ¥Ñ¥¹¥ï¡¼¥É¤ÎºÇ½ª¹¹¿·Æü¤«¤é¼¡¤ËÊѹ¹¤¹¤Ù¤­´üÆü¤Þ¤Ç¤ÎÆü¿ô¤òÊѹ¹¤¹¤ë¡£
 ¥·¥¹¥Æ¥à¤Ï¡¢¤³¤Î¾ðÊó¤òÍѤ¤¤Æ¡¢¥æ¡¼¥¶¤¬¤¤¤Ä¥Ñ¥¹¥ï¡¼¥É¤òÊѹ¹¤¹¤Ù¤­¤«¤ò·èÄꤹ¤ë¡£
-\fIchage\fR¥³¥Þ¥ó¥É¤Î»ÈÍѤϡ¢\fB-l\fR¥ª¥×¥·¥ç¥ó¤òÍѤ¤¤ë¾ì¹ç°Ê³°¤Ï
+\fBchage\fR¥³¥Þ¥ó¥É¤Î»ÈÍѤϡ¢\fB-l\fR¥ª¥×¥·¥ç¥ó¤òÍѤ¤¤ë¾ì¹ç°Ê³°¤Ï
 root¥æ¡¼¥¶¤Î¤ß¤ËÀ©¸Â¤µ¤ì¤Æ¤¤¤ë¡£
 \fB-l\fR¥ª¥×¥·¥ç¥ó¤Ï¡¢°ìÈ̥桼¥¶¤¬¼«Ê¬¤Î¥Ñ¥¹¥ï¡¼¥ÉËô¤Ï¥¢¥«¥¦¥ó¥È
 ¤Î´ü¸Â¤¬ÀÚ¤ì¤ëÆü¤¬¤¤¤Ä¤«¤òÃΤ뤿¤á¤Ë»È¤¦¤³¤È¤¬½ÐÍè¤ë¡£
@@ -68,14 +68,14 @@ root
 .PP
 \fB-d\fR¥ª¥×¥·¥ç¥ó¤òÍѤ¤¤ë¾ì¹ç¡¢
 \fIlastday\fR¤ÎÃͤÏ1970ǯ1·î1Æü¤«¤é¥Ñ¥¹¥ï¡¼¥ÉºÇ½ª¹¹¿·ÆüËø¤ÎÆü¿ô¤Ë¤Ê¤ë¡£
-Æü¿ô¤Ï·î·î/ÆüÆü/ǯǯ¤È¤¤¤¦½ñ¼° (¼ã¤·¤¯¤Ï¤¢¤Ê¤¿¤ÎÃϰè¤Ç¤â¤Ã¤È¤è¤¯ÍѤ¤¤é¤ì¤Æ
+Æü¿ô¤Ïǯǯǯǯ/·î·î/ÆüÆü¤È¤¤¤¦½ñ¼° (¼ã¤·¤¯¤Ï¤¢¤Ê¤¿¤ÎÃϰè¤Ç¤â¤Ã¤È¤è¤¯ÍѤ¤¤é¤ì¤Æ
 ¤¤¤ë½ñ¼°)¤Ç»ØÄꤹ¤ë»ö¤â¤Ç¤­¤ë¡£
 .PP
 \fB-E\fR¥ª¥×¥·¥ç¥ó¤Ï¥æ¡¼¥¶¤¬¥¢¥«¥¦¥ó¥È¤ËºÇÁᥢ¥¯¥»¥¹¤Ç¤­¤Ê¤¯¤Ê¤ë
 ÆüÉÕ¤òÀßÄꤹ¤ë¤Î¤ËÍѤ¤¤é¤ì¤ë¡£
 \fIexpiredate\fR¥ª¥×¥·¥ç¥ó¤Ï1970ǯ1·î1Æü¤«¤é¥¢¥«¥¦¥ó¥È¤¬¥í¥Ã¥¯
 ¤µ¤ì¤ëÆüËø¤ÎÆü¿ô¤Ç¤¢¤ë¡£
-Æü¿ô¤Ï·î·î/ÆüÆü/ǯǯ¤È¤¤¤¦½ñ¼°(¼ã¤·¤¯¤Ï¤¢¤Ê¤¿¤ÎÃϰè¤Ç¤â¤Ã¤È¤è¤¯
+Æü¿ô¤Ïǯǯǯǯ/·î·î/ÆüÆü¤È¤¤¤¦½ñ¼°(¼ã¤·¤¯¤Ï¤¢¤Ê¤¿¤ÎÃϰè¤Ç¤â¤Ã¤È¤è¤¯
 ÍѤ¤¤é¤ì¤Æ¤¤¤ë¤â¤Î)¤Ç»ØÄꤹ¤ë¤³¤È¤â½ÐÍè¤ë¡£
 ¥¢¥«¥¦¥ó¥È¤¬¥í¥Ã¥¯¤µ¤ì¤¿¥æ¡¼¥¶¤¬ºÆ¤Ó¤½¤Î¥·¥¹¥Æ¥à¤ò»È¤¦¤¿¤á¤Ë¤Ï¡¢
 ¥·¥¹¥Æ¥à´ÉÍý¼Ô¤Ë¥³¥ó¥¿¥¯¥È¤ò¼è¤é¤Í¤Ð¤Ê¤é¤Ê¤¤¡£
@@ -98,7 +98,7 @@ root
 ¤³¤ÎÊÑ´¹¤¬¹Ô¤ï¤ì¤ë¤¿¤á¡¢´Ý¤á¤Î¸íº¹¤¬À¸¤¸¤ë¤³¤È¤â¤¢¤ë¡£
 .PP
 ¾å¤Ëµó¤²¤¿¤¤¤º¤ì¤Î¥ª¥×¥·¥ç¥ó¤â»ØÄꤷ¤Ê¤«¤Ã¤¿¾ì¹ç¤Ï¡¢
-\fIchage\fR¤ÏÂÐÏÃŪ¤Ëưºî¤·¡¢Á´¤Æ¤ÎÍó¤ËÂФ·¤Æ¡¢³Æ¡¹¸½ºß¤ÎÀßÄêÃͤòɽ¼¨¤·¡¢
+\fBchage\fR¤ÏÂÐÏÃŪ¤Ëưºî¤·¡¢Á´¤Æ¤ÎÍó¤ËÂФ·¤Æ¡¢³Æ¡¹¸½ºß¤ÎÀßÄêÃͤòɽ¼¨¤·¡¢
 ¿·¤·¤¤ÃÍ¤ÎÆþÎϤòÂ¥¤¹¡£
 ¿·¤·¤¤ÃͤòÀßÄꤹ¤ë¾ì¹ç¤Ï¤½¤ì¤òÆþÎϤ·¡¢¸½ºß¤ÎÃͤò»È¤¦¤Ê¤é¶õ¹Ô¤Î¤Þ¤Þ
 ¥ê¥¿¡¼¥ó¥­¡¼¤ò²¡¤»¤Ð¤è¤¤¡£
@@ -108,8 +108,7 @@ root
 .br
 /etc/shadow \- ¥æ¡¼¥¶¤Î shadow ¥¢¥«¥¦¥ó¥È¾ðÊó
 .SH ´ØÏ¢¹àÌÜ
-passwd(4),
-shadow(4)
-.SH ËÝÌõ¼Ô
-¸Å¹âÏÂÄ÷ <furutaka@Flux.tokai.jaeri.go.jp>
-
+.BR passwd (5),
+.BR shadow (5)
+.SH Ãø¼Ô
+Julianne Frances Haugh (jockgrrl@ix.netcom.com)
index b3d7628fb639e70b5036785688f7321781d673dc..049ec32028a292540df99aded71718852ae76bfe 100644 (file)
@@ -1,4 +1,4 @@
-.\" Copyright 1990 - 1994 John F. Haugh II
+.\" Copyright 1990 - 1994 Julianne Frances Haugh
 .\" All rights reserved.
 .\"
 .\" Redistribution and use in source and binary forms, with or without
@@ -9,18 +9,14 @@
 .\" 2. Redistributions in binary form must reproduce 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
+.\" 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 JOHN HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" 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 JOHN HAUGH OR CONTRIBUTORS BE LIABLE
+.\" 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)
@@ -29,7 +25,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\"    $Id: chfn.1,v 1.1 2001/06/16 02:35:46 kloczek Exp $
+.\"    $Id: chfn.1,v 1.2 2001/11/16 17:01:32 ankry Exp $
 .\"
 .\" Japanese Version Copyright (c) 1997 Kazuyoshi Furutaka
 .\"         all rights reserved.
 .\"         by Kazuyoshi Furutaka <furutaka@Flux.tokai.jaeri.go.jp>
 .\"
 .TH CHFN 1
-.SH NAME
+.SH Ì¾Á°
 chfn \- ¥æ¡¼¥¶¤Î̾Á°Åù¤Î¾ðÊó¤òÊѹ¹¤¹¤ë¡£
 .SH ½ñ¼°
-\fBchfn\fR [ \fB-f \fIfull_name\fR ] [ \fB-r \fIroom_no\fR ]
+.TP 5
+\fBchfn\fR
+[\fB-f \fIfull_name\fR] [\fB-r \fIroom_no\fR]
 .br
-[ \fB-w \fIwork_ph\fR ] [ \fB-h \fIhome_ph\fR ] [ \fB-o \fIother\fR ]
-[ \fIuser\fR ]
+[\fB-w \fIwork_ph\fR] [\fB-h \fIhome_ph\fR] [\fB-o \fIother\fR]
+[\fIuser\fR]
 .SH ÀâÌÀ
-\fIchfn\fR
-¤Ï¡¢¥æ¡¼¥¶¤Î¥Õ¥ë¥Í¡¼¥à¡¢¥ª¥Õ¥£¥¹¤ÎÉô²°ÈÖ¹æµÚ¤ÓÆâÀþÈֹ桢
+\fBchfn\fR ¤Ï¡¢¥æ¡¼¥¶¤Î¥Õ¥ë¥Í¡¼¥à¡¢¥ª¥Õ¥£¥¹¤ÎÉô²°ÈÖ¹æµÚ¤ÓÆâÀþÈֹ桢
 ¼«Âð¤ÎÅÅÏÃÈÖ¹æ¤È¤¤¤Ã¤¿¥¢¥«¥¦¥ó¥È¾ðÊó¤òÊѹ¹¤¹¤ë¡£
-¤³¤Î¾ðÊó¤Ï\fIfinger(1)\fR¤ä¤½¤ì¤ÈÎà»÷¤Î¥×¥í¥°¥é¥à¤Ë¤è¤Ã¤ÆÉ½¼¨¤µ¤ì¤ë¡£
+¤³¤Î¾ðÊó¤Ï \fBfinger\fR(1) ¤ä¤½¤ì¤ÈÎà»÷¤Î¥×¥í¥°¥é¥à¤Ë¤è¤Ã¤ÆÉ½¼¨¤µ¤ì¤ë¡£
 °ìÈ̥桼¥¶¤Ï¼«Ê¬¼«¿È¤Î¥¢¥«¥¦¥ó¥È¤Î¾ðÊó¤ÎÊѹ¹¤Î¤ß¹Ô¤¦¤³¤È¤¬½ÐÍè¤ë¡£
 ¥¹¡¼¥Ñ¡¼¥æ¡¼¥¶¤ÏÁ´¤Æ¤Î¥¢¥«¥¦¥ó¥È¤ËÂФ·¤Æ¾ðÊó¤ÎÊѹ¹¤¬½ÐÍè¤ë¡£
-¤Þ¤¿¡¢\fB-o\fR¥ª¥×¥·¥ç¥ó¤òÍѤ¤¤ÆGCOSÍó¤Î̤ÄêµÁÉôʬ¤ÎÊѹ¹¤ò¹Ô¤¨¤ë¤Î¤â
+¤Þ¤¿¡¢\fB-o\fR ¥ª¥×¥·¥ç¥ó¤òÍѤ¤¤Æ GCOS Íó¤Î̤ÄêµÁÉôʬ¤ÎÊѹ¹¤ò¹Ô¤¨¤ë¤Î¤â
 ¥¹¡¼¥Ñ¡¼¥æ¡¼¥¶¤À¤±¤Ç¤¢¤ë¡£
 .PP
 ³ÆÍó¤Ë¤Ï¡¢¥³¥ó¥È¥í¡¼¥ëʸ»úµÚ¤Ó¡¢¥³¥ó¥Þ¡¢¥³¥í¥ó¡¢Åù¹æ°Ê³°¤ÎÁ´¤Æ¤Îʸ»ú¤ò
 ½ñ¤¯¤³¤È¤¬½ÐÍè¤ë¡£
-\fIother\fRÍó¤ËÂФ·¤Æ¤Ï¤³¤ÎÀ©¸Â¤Ï¤Ê¤¤¤Î¤Ç¡¢Â¾¤Î¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤¬ÍѤ¤¤ë
+\fIother\fR Íó¤ËÂФ·¤Æ¤Ï¤³¤ÎÀ©¸Â¤Ï¤Ê¤¤¤Î¤Ç¡¢Â¾¤Î¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤¬ÍѤ¤¤ë
 ¥¢¥«¥¦¥ó¥Æ¥£¥ó¥°¾ðÊó¤òµ­Ï¿¤·¤Æ¤ª¤¯»ö¤¬½ÐÍè¤ë¡£
 .PP
-¤¤¤º¤ì¤Î¥ª¥×¥·¥ç¥ó¤âÁªÂò¤µ¤ì¤Ê¤«¤Ã¤¿¾ì¹ç¤Ï¡¢\fIchfn\fR¤ÏÂÐÏÃŪ¤Ëưºî¤·¡¢
+¤¤¤º¤ì¤Î¥ª¥×¥·¥ç¥ó¤âÁªÂò¤µ¤ì¤Ê¤«¤Ã¤¿¾ì¹ç¤Ï¡¢\fBchfn\fR ¤ÏÂÐÏÃŪ¤Ëưºî¤·¡¢
 Á´¤Æ¤ÎÍó¤ËÂФ·¤Æ¡¢³Æ¡¹¸½ºß¤ÎÀßÄêÃͤòɽ¼¨¤·¡¢¿·¤·¤¤ÃÍ¤ÎÆþÎϤòÂ¥¤¹¡£
 ¿·¤·¤¤ÃͤòÀßÄꤹ¤ë¾ì¹ç¤Ï¤½¤ì¤òÆþÎϤ·¡¢¤Þ¤¿¤Ï¸½ºß¤ÎÃͤò»È¤¦¤Ê¤é¶õ¹Ô¤Î¤Þ¤Þ
 ¥ê¥¿¡¼¥ó¥­¡¼¤ò²¡¤»¤Ð¤è¤¤¡£
 ¸½ºß¤ÎÃͤϰìÂФΠ\fB[ ]\fR µ­¹æ¤Î´Ö¤Ëɽ¼¨¤µ¤ì¤ë¡£
-¥ª¥×¥·¥ç¥ó¤ò»ØÄꤷ¤Ê¤«¤Ã¤¿¾ì¹ç¡¢chfn¤Ï¤½¤ì¤òµ¯Æ°¤·¤¿¥æ¡¼¥¶¤Î¥¢¥«¥¦¥ó¥È¤Ë
+¥ª¥×¥·¥ç¥ó¤ò»ØÄꤷ¤Ê¤«¤Ã¤¿¾ì¹ç¡¢chfn ¤Ï¤½¤ì¤òµ¯Æ°¤·¤¿¥æ¡¼¥¶¤Î¥¢¥«¥¦¥ó¥È¤Ë
 ÂФ·¤ÆÆ¯¤¯¡£
 .SH ¥Õ¥¡¥¤¥ë
 /etc/passwd \- ¥æ¡¼¥¶¤Î¥¢¥«¥¦¥ó¥È¾ðÊó
-.SH ´ØÏ¢¥³¥Þ¥ó¥É
-passwd(4)
-.SH ËÝÌõ¼Ô
-¸Å¹âÏÂÄ÷ <furutaka@Flux.tokai.jaeri.go.jp>
-
+.SH ´ØÏ¢¹àÌÜ
+.BR passwd (5)
+.SH Ãø¼Ô
+Julianne Frances Haugh (jockgrrl@ix.netcom.com)
index 6fba8d2f4399cb4650f2098480210a8baaa456b2..d147cc9f4a1a90f3a92297a6f37dc75a3c8678c0 100644 (file)
@@ -1,4 +1,4 @@
-.\" Copyright 1991, John F. Haugh II
+.\" Copyright 1991, Julianne Frances Haugh
 .\" All rights reserved.
 .\"
 .\" Redistribution and use in source and binary forms, with or without
@@ -9,18 +9,14 @@
 .\" 2. Redistributions in binary form must reproduce 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
+.\" 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 JOHN HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" 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 JOHN HAUGH OR CONTRIBUTORS BE LIABLE
+.\" 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)
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\"    $Id: chpasswd.8,v 1.1 2001/06/16 02:35:46 kloczek Exp $
+.\"    $Id: chpasswd.8,v 1.2 2001/11/16 17:01:32 ankry Exp $
 .\"
 .\" 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>
 .\"
 .TH CHPASSWD 8
 .SH Ì¾Á°
-\fBchpasswd\fR - ¥Ñ¥¹¥ï¡¼¥É¥Õ¥¡¥¤¥ë¤ò¥Ð¥Ã¥Á½èÍý¤Ç¹¹¿·¤¹¤ë
+\fBchpasswd\fR \- ¥Ñ¥¹¥ï¡¼¥É¥Õ¥¡¥¤¥ë¤ò¥Ð¥Ã¥Á½èÍý¤Ç¹¹¿·¤¹¤ë
 .SH ½ñ¼°
-\fBchpasswd\fR
+\fBchpasswd [-e]\fR
 .SH ÀâÌÀ
-\fBchpasswd\fR¥³¥Þ¥ó¥É¤Ïɸ½àÆþÎϤ«¤é¥æ¡¼¥¶Ì¾¤È°Å¹æ²½¤µ¤ì¤Æ¤¤¤Ê¤¤¥Ñ¥¹¥ï¡¼¥É
-¤ÎÁȤߤ¬µ­¤µ¤ì¤Æ¤¤¤ë¥Õ¥¡¥¤¥ë¤òÆÉ¤ß¹þ¤ß¡¢¤½¤Î¾ðÊó¤òÍѤ¤¤Æ´û¸¤Î¥æ¡¼¥¶·²¤Î
+\fBchpasswd\fR¥³¥Þ¥ó¥É¤Ïɸ½àÆþÎϤ«¤é¥æ¡¼¥¶Ì¾¤È¥Ñ¥¹¥ï¡¼¥É
+¤ÎÁȤ¬µ­¤µ¤ì¤Æ¤¤¤ë¥Õ¥¡¥¤¥ë¤òÆÉ¤ß¹þ¤ß¡¢¤½¤Î¾ðÊó¤òÍѤ¤¤Æ´û¸¤Î¥æ¡¼¥¶·²¤Î
 ¥Ñ¥¹¥ï¡¼¥É¾ðÊó¤ò¹¹¿·¤¹¤ë¡£
+-e ¥ª¥×¥·¥ç¥ó¤¬¤Ê¤¤¾ì¹ç¤Ï¡¢¥Ñ¥¹¥ï¡¼¥É¤Ïʿʸ¤È¸«¤Ê¤µ¤ì¤ë¡£
+-e ¥ª¥×¥·¥ç¥ó¤¬¤¢¤ë¾ì¹ç¤Ï¡¢¥Ñ¥¹¥ï¡¼¥É¤Ï°Å¹æ²½¤µ¤ì¤Æ¤¤¤ë¤È¸«¤Ê¤µ¤ì¤ë¡£
 ³Æ¹Ô¤Ï
-.DS
+.sp 1
          \fIuser_name\fR:\fIpassword\fR
-.DE
+.sp 1
 ¤È¤¤¤¦½ñ¼°¤Ç¤¢¤ë¡£
 »ØÄꤷ¤¿¥æ¡¼¥¶¤Ï´û¤Ë¸ºß¤·¤Æ¤¤¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
-Í¿¤¨¤é¤ì¤¿¥Ñ¥¹¥ï¡¼¥É¤¬°Å¹æ²½¤µ¤ì¡¢¥Ñ¥¹¥ï¡¼¥É¤ÎÍ­¸ú´ü¸Â¤¬Â¸ºß¤¹¤ë¤Ê¤é
+Í¿¤¨¤é¤ì¤¿¥Ñ¥¹¥ï¡¼¥É¤ÏɬÍפ˱þ¤¸¤Æ°Å¹æ²½¤µ¤ì¡¢¥Ñ¥¹¥ï¡¼¥É¤ÎÍ­¸ú´ü¸Â¤¬Â¸ºß¤¹¤ë¤Ê¤é
 ¤½¤ì¤â¹¹¿·¤µ¤ì¤ë¡£
 .PP
 ¤³¤Î¥³¥Þ¥ó¥É¤Ï¡¢Æ±»þ¤ËÂçÎ̤Υ¢¥«¥¦¥ó¥È¤òºîÀ®¤¹¤ëÍͤÊÂ絬ÌϤʥ·¥¹¥Æ¥à´Ä¶­
 ¤Ç»ÈÍѤ¹¤ë¤³¤È¤ò°Õ¿Þ¤·¤Æ¤¤¤ë¡£
 .SH ·Ù¹ð
-¤³¤Î¥³¥Þ¥ó¥É¤Î»ÈÍѸå¤Ï¡¢DBM¥Ñ¥¹¥ï¡¼¥É¥Õ¥¡¥¤¥ë¤ò¹¹¿·¤¹¤ë°Ù¤Ë¡¢\fImkpasswd\fR
-¥³¥Þ¥ó¥É¤ò¼Â¹Ô¤·¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
-ÆþÎÏ¥Õ¥¡¥¤¥ë¤Ï¡¢°Å¹æ²½¤µ¤ì¤Æ¤¤¤Ê¤¤¥Ñ¥¹¥ï¡¼¥É¤¬µ­¤µ¤ì¤Æ¤¤¤ë¤Î¤Ç¡¢¥×¥í¥Æ¥¯¥È
-¤ò¤«¤±¤Æ¤ª¤«¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
-newusers(8)¥³¥Þ¥ó¥É¤¬Â¸ºß¤¹¤ë¤Î¤Ç¡¢¤³¤Î¥³¥Þ¥ó¥É¤Ï¼Î¤Æ¤é¤ì¤ë¤«¤âÃΤì¤Ê¤¤¡£
+ÆþÎÏ¥Õ¥¡¥¤¥ë¤Ë°Å¹æ²½¤µ¤ì¤Æ¤¤¤Ê¤¤¥Ñ¥¹¥ï¡¼¥É¤¬µ­¤µ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ï¡¢
+¥×¥í¥Æ¥¯¥È¤ò¤«¤±¤Æ¤ª¤«¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
 .SH ´ØÏ¢¹àÌÜ
-mkpasswd(8), passwd(1), useradd(1)
-.SH ËÝÌõ¼Ô
-¸Å¹âÏÂÄ÷ <furutaka@Flux.tokai.jaeri.go.jp>
+.BR passwd (1),
+.BR useradd (8),
+.BR newusers (8)
+.SH Ãø¼Ô
+Julianne Frances Haugh (jockgrrl@ix.netcom.com)
index 7bd6f50d4be0ea7b003221dbfe1275a78dde0d59..79b066d238b862cb024b8acc8c19aff4630a4d43 100644 (file)
@@ -1,4 +1,4 @@
-.\" Copyright 1990, John F. Haugh II
+.\" Copyright 1990, Julianne Frances Haugh
 .\" All rights reserved.
 .\"
 .\" Redistribution and use in source and binary forms, with or without
@@ -9,18 +9,14 @@
 .\" 2. Redistributions in binary form must reproduce 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
+.\" 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 JOHN HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" 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 JOHN HAUGH OR CONTRIBUTORS BE LIABLE
+.\" 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)
@@ -29,7 +25,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\"    $Id: chsh.1,v 1.1 2001/06/16 02:35:46 kloczek Exp $
+.\"    $Id: chsh.1,v 1.2 2001/11/16 17:01:32 ankry Exp $
 .\"
 .\" Japanese Version Copyright (c) 1997 Kazuyoshi Furutaka
 .\"         all rights reserved.
 .SH Ì¾Á°
 chsh \- ¥í¥°¥¤¥ó¥·¥§¥ë¤òÊѹ¹¤¹¤ë¡£
 .SH ½ñ¼°
-\fBchsh\fR [ \fB-s \fIlogin_shell\fR ] [ \fIuser\fR ]
+.TP 5
+\fBchsh\fR
+[\fB-s \fIlogin_shell\fR] [\fIuser\fR]
 .SH ÀâÌÀ
-\fIchsh\fR¤Ï¥æ¡¼¥¶¤Î¥í¥°¥¤¥ó¥·¥§¥ë¤òÊѹ¹¤¹¤ë¡£
+\fBchsh\fR¤Ï¥æ¡¼¥¶¤Î¥í¥°¥¤¥ó¥·¥§¥ë¤òÊѹ¹¤¹¤ë¡£
 ¤³¤ì¤Ë¤è¤Ã¤Æ¡¢¥æ¡¼¥¶¤¬¥í¥°¥¤¥ó¤·¤ÆºÇ½é¤Ë¼Â¹Ô¤µ¤ì¤ë¥³¥Þ¥ó¥É¤¬·è¤Þ¤ë¡£
 °ìÈ̥桼¥¶¤Ï¼«Ê¬¤Î¥¢¥«¥¦¥ó¥È¤Î¥í¥°¥¤¥ó¥·¥§¥ë¤Î¤ß¤òÊѹ¹¤Ç¤­¤ë¡£
 ¥¹¡¼¥Ñ¡¼¥æ¡¼¥¶¤ÏÁ´¤Æ¤Î¥¢¥«¥¦¥ó¥È¤Î¥í¥°¥¤¥ó¥·¥§¥ë¤òÊѹ¹¤¹¤ë¤³¤È¤¬½ÐÍè¤ë¡£
 .PP
-¥í¥°¥¤¥ó¥·¥§¥ë¤Ï¡¢¥³¥Þ¥ó¥É̾¤¬\fB/etc/shells\fR¤Ëµ­ºÜ¤µ¤ì¤Æ¤¤¤ì¤Ð¤Ê¤ó¤Ç¤âÎɤ¤¡£
+¥í¥°¥¤¥ó¥·¥§¥ë¤Ï¡¢¥³¥Þ¥ó¥É̾¤¬\fI/etc/shells\fR¤Ëµ­ºÜ¤µ¤ì¤Æ¤¤¤ì¤Ð¤Ê¤ó¤Ç¤âÎɤ¤¡£
 ¥¹¡¼¥Ñ¡¼¥æ¡¼¥¶¤Î¾ì¹ç¤Ï¤³¤ÎÀ©¸Â¤Ï¤Ê¤¯¡¢¤¤¤«¤Ê¤ëÃÍ¤Ç¤â»ØÄê¤Ç¤­¤ë¡£
 µ¡Ç½¤òÀ©¸Â¤µ¤ì¤¿¥í¥°¥¤¥ó¥·¥§¥ë¤òÍѤ¤¤Æ¤¤¤ë¥¢¥«¥¦¥ó¥È¤«¤é¤Ï¡¢
 ¥í¥°¥¤¥ó¥·¥§¥ë¤òÊѹ¹½ÐÍè¤Ê¤¤¡£
-¤³¤ÎÍýͳ¤«¤é¡¢\fB/bin/rsh\fR¤ò\fB/etc/shells\fR¤Ë½ñ¤¯¤³¤È¤Ï´«¤á¤é¤ì¤Ê¤¤¡£
+¤³¤ÎÍýͳ¤«¤é¡¢\fB/bin/rsh\fR¤ò\fI/etc/shells\fR¤Ë½ñ¤¯¤³¤È¤Ï´«¤á¤é¤ì¤Ê¤¤¡£
 µ¡Ç½¤¬À©¸Â¤µ¤ì¤¿¥·¥§¥ë¤Ë¸í¤Ã¤ÆÊѹ¹¤·¤Æ¤·¤Þ¤Ã¤¿¾ì¹ç¡¢¤É¤¦¤ä¤Ã¤Æ¤â
 ¥í¥°¥¤¥ó¥·¥§¥ë¤ò¸µ¤Î¤â¤Î¤ËÌ᤹¤³¤È¤¬½ÐÍè¤Ê¤¯¤Ê¤Ã¤Æ¤·¤Þ¤¦¤«¤é¤Ç¤¢¤ë¡£
 .PP
 \fB-s\fR¥ª¥×¥·¥ç¥ó¤ò»ØÄꤷ¤Ê¤«¤Ã¤¿¾ì¹ç¤Ï¡¢
-\fIchsh\fR¤ÏÂÐÏÃŪ¤Ëưºî¤·¡¢³ÆÍó¤ËÂФ·¤Æ¸½ºß¤ÎÀßÄêÃͤòɽ¼¨¤·¡¢
+\fBchsh\fR¤ÏÂÐÏÃŪ¤Ëưºî¤·¡¢³ÆÍó¤ËÂФ·¤Æ¸½ºß¤ÎÀßÄêÃͤòɽ¼¨¤·¡¢
 ¿·¤·¤¤ÃÍ¤ÎÆþÎϤòÂ¥¤¹¡£
 ÀßÄêÃͤòÊѹ¹¤¹¤ë¤Ê¤é¿·¤·¤¤ÃͤòÆþÎϤ·¡¢
 Ëô¤Ï¸½ºß¤ÎÃͤò»È¤¦¤Ê¤é¶õ¹Ô¤Î¤Þ¤Þ¥ê¥¿¡¼¥ó¥­¡¼¤ò²¡¤»¤Ð¤è¤¤¡£
@@ -66,8 +64,7 @@ chsh \- 
 .br
 /etc/shells \- »ØÄê¤Ç¤­¤ë¥í¥°¥¤¥ó¥·¥§¥ë¤Î¥ê¥¹¥È
 .SH ´ØÏ¢¹àÌÜ
-chfn(1),
-passwd(5)
-.SH ËÝÌõ¼Ô
-¸Å¹âÏÂÄ÷ <furutaka@Flux.tokai.jaeri.go.jp>
-
+.BR chfn (1),
+.BR passwd (5)
+.SH Ãø¼Ô
+Julianne Frances Haugh (jockgrrl@ix.netcom.com)
index 44d53c4dc95145c643f517d87f1fb12783f4e05d..260cc30f3bd178023e173041ffebc0118dc7c146 100644 (file)
@@ -1,4 +1,4 @@
-.\" Copyright 1991, John F. Haugh II
+.\" Copyright 1991, Julianne Frances Haugh
 .\" All rights reserved.
 .\"
 .\" Redistribution and use in source and binary forms, with or without
@@ -9,18 +9,14 @@
 .\" 2. Redistributions in binary form must reproduce 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
+.\" 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 JOHN HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" 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 JOHN HAUGH OR CONTRIBUTORS BE LIABLE
+.\" 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)
@@ -29,7 +25,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\"    $Id: dpasswd.8,v 1.1 2001/06/16 02:35:46 kloczek Exp $
+.\"    $Id: dpasswd.8,v 1.2 2001/11/16 17:01:32 ankry Exp $
 .\"
 .\" Japanese Version Copyright (c) 1997 Kazuyoshi Furutaka
 .\"         all rights reserved.
 .\"
 .TH DPASSWD 8
 .SH Ì¾Á°
-\fBdpasswd\fR - ¥À¥¤¥¢¥ë¥¢¥Ã¥×Íѥѥ¹¥ï¡¼¥É¤òÊѹ¹¤¹¤ë
+\fBdpasswd\fR \- ¥À¥¤¥¢¥ë¥¢¥Ã¥×Íѥѥ¹¥ï¡¼¥É¤òÊѹ¹¤¹¤ë
 .SH ½ñ¼°
 \fBdpasswd\fR
-[ \fI-(a|d)\fR ] \fIshell\fR
+.RB [ - ( a | d )]
+\fIshell\fR
 .SH ÀâÌÀ
 \fBdpasswd\fR¤Ï¥æ¡¼¥¶¤Î¥í¥°¥¤¥ó¥·¥§¥ë¤Î¥À¥¤¥¢¥ë¥¢¥Ã¥×Íѥѥ¹¥ï¡¼¥É¤Î
 Äɲᢺï½üµÚ¤Ó¹¹¿·¤ò¹Ô¤Ê¤¦¡£
@@ -57,6 +54,6 @@
 .br
 /etc/dialups
 .SH ´ØÏ¢¹àÌÜ
-login(1)
-.SH ËÝÌõ¼Ô
-¸Å¹âÏÂÄ÷ <furutaka@Flux.tokai.jaeri.go.jp>
+.BR login (1)
+.SH Ãø¼Ô
+Julianne Frances Haugh (jockgrrl@ix.netcom.com)
index f5ea81a8de529bfa2e4ecade9cbb4c704d0df935..13763175ee7a012d404e1faea8d2d6e1e85fea93 100644 (file)
@@ -1,4 +1,4 @@
-.\" Copyright 1989 - 1994, John F. Haugh II
+.\" Copyright 1989 - 1994, Julianne Frances Haugh
 .\" All rights reserved.
 .\"
 .\" Redistribution and use in source and binary forms, with or without
@@ -9,18 +9,14 @@
 .\" 2. Redistributions in binary form must reproduce 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
+.\" 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 JOHN HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" 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 JOHN HAUGH OR CONTRIBUTORS BE LIABLE
+.\" 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)
@@ -29,7 +25,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\"    $Id: faillog.5,v 1.1 2001/06/16 02:35:46 kloczek Exp $
+.\"    $Id: faillog.5,v 1.2 2001/11/16 17:01:32 ankry Exp $
 .\"
 .\" Japanese Version Copyright (c) 1997 Kazuyoshi Furutaka
 .\"         all rights reserved.
@@ -63,6 +59,6 @@ faillog \- 
 .SH ¥Õ¥¡¥¤¥ë
 /var/log/faillog \- ¥í¥°¥¤¥ó¼ºÇԤε­Ï¿
 .SH ´ØÏ¢¹àÌÜ
-faillog(8)
-.SH ËÝÌõ¼Ô
-¸Å¹âÏÂÄ÷ <furutaka@Flux.tokai.jaeri.go.jp>
+.BR faillog (8)
+.SH Ãø¼Ô
+Julianne Frances Haugh (jockgrrl@ix.netcom.com)
index a365121138b057a41fd5d4affbcd9fb2c52724b2..03ef95cc9b900e0e7910e0fe2cc8adedd342f980 100644 (file)
@@ -1,4 +1,4 @@
-.\" Copyright 1989 - 1994, John F. Haugh II
+.\" Copyright 1989 - 1994, Julianne Frances Haugh
 .\" All rights reserved.
 .\"
 .\" Redistribution and use in source and binary forms, with or without
@@ -9,18 +9,14 @@
 .\" 2. Redistributions in binary form must reproduce 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
+.\" 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 JOHN HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" 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 JOHN HAUGH OR CONTRIBUTORS BE LIABLE
+.\" 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)
@@ -29,7 +25,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\"    $Id: faillog.8,v 1.1 2001/06/16 02:35:46 kloczek Exp $
+.\"    $Id: faillog.8,v 1.2 2001/11/16 17:01:32 ankry Exp $
 .\"
 .\" Japanese Version Copyright (c) 1997 Kazuyoshi Furutaka
 .\"         all rights reserved.
 .SH Ì¾Á°
 faillog \- faillog¤òÄ´¤Ù¡¢login¼ºÇÔ¤ÎÀ©¸Â¤òÀßÄꤹ¤ë
 .SH ½ñ¼°
-/etc/faillog [ -u uid ] [ -a ] [ -t days ] [ -m max ] [ -pr ] 
+.TP 8
+.B faillog
+.RB [ -u
+.IR login-name ]
+.RB [ -a ]
+.RB [ -t
+.IR days ]
+.RB [ -m
+.IR max ]
+.RB [ -pr ] 
 .SH ÀâÌÀ
-\fIfaillog\fR¤Ï¥í¥°¥¤¥ó¤Î¼ºÇÔ¤òµ­Ï¿¤¹¤ë¥í¥°¥Õ¥¡¥¤¥ë\fI/usr/adm/faillog\fR
+\fBfaillog\fR¤Ï¥í¥°¥¤¥ó¤Î¼ºÇÔ¤òµ­Ï¿¤¹¤ë¥í¥°¥Õ¥¡¥¤¥ë\fI/var/log/faillog\fR
 ¤ÎÆâÍÆ¤òÀ°·Á¤·¡¢¼ºÇԤβó¿ôµÚ¤Ó¤½¤ÎÀ©¸Â¤ÎÊݼé¤ò¹Ô¤Ê¤¦¡£
-\fIfaillog\fR¤ËÍ¿¤¨¤ë°ú¿ô¤Î½ç½ø¤Ë¤Ï°ÕÌ£¤¬¤¢¤ë¡£
+\fBfaillog\fR¤ËÍ¿¤¨¤ë°ú¿ô¤Î½ç½ø¤Ë¤Ï°ÕÌ£¤¬¤¢¤ë¡£
 ³Æ°ú¿ô¤ÏÍ¿¤¨¤é¤ì¤¿½ç¤Ëľ¤Á¤Ë½èÍý¤µ¤ì¤ë¡£
 .PP
 \fB-p\fR¥Õ¥é¥Ã¥°¤Ï¥í¥°¥¤¥ó¼ºÇԤΥ¨¥ó¥È¥ê¤òUID½ç¤Ëɽ¼¨¤µ¤»¤ë¡£
-\fB-u login-name\fR¤ÈÆþÎϤ·¤¿ºÝ¤Ï¡¢\fBlogin-name\fR¤Î
+\fB-u \fIlogin-name\fR¤ÈÆþÎϤ·¤¿ºÝ¤Ï¡¢\fIlogin-name\fR¤Î
 ¥í¥°¥¤¥ó¼ºÇÔµ­Ï¿¤Î¤ß¤òɽ¼¨¤¹¤ë¡£
-\fB-t days\fR¤ÈÆþÎϤ¹¤ë¤È¡¢ºÇ¶á\fBdays\fRÆü°ÊÆâ¤Î¥í¥°¥¤¥ó¼ºÇÔ
+\fB-t \fIdays\fR¤ÈÆþÎϤ¹¤ë¤È¡¢ºÇ¶á\fIdays\fRÆü°ÊÆâ¤Î¥í¥°¥¤¥ó¼ºÇÔ
 ¤Îµ­Ï¿¤òɽ¼¨¤¹¤ë¡£
 \fB-t\fR¥Õ¥é¥Ã¥°¤òÍѤ¤¤¿ºÝ¤Ï\fB-u\fR¥Õ¥é¥Ã¥°¤ÎƯ¤­¤¬ÍÞÀ©¤µ¤ì¤ë¡£
 \fB-a\fR¥Õ¥é¥Ã¥°¤òÍѤ¤¤ë¤ÈÁ´¥æ¡¼¥¶¤ËÂФ¹¤ëµ­Ï¿¤¬É½¼¨¤µ¤ì¤ë¡£
@@ -59,20 +64,20 @@ faillog \- faillog
 \fB-r\fR¥Õ¥é¥Ã¥°¤ÈÍѤ¤¤Æ¤â°ÕÌ£¤¬Ìµ¤¤¡£
 .PP
 \fB-r\fR¥Õ¥é¥Ã¥°¤Ï¥í¥°¥¤¥ó¼ºÇԤβó¿ô¤ò¥ê¥»¥Ã¥È¤¹¤ë°Ù¤Î¤â¤Î¤Ç¤¢¤ë¡£
-¤³¤Î¥ª¥×¥·¥ç¥ó¤òÍѤ¤¤ë¤Ë¤Ï\fI/usr/adm/faillog\fR¤Ø¤Î½ñ¤­¹þ¤ß¸¢¤¬
+¤³¤Î¥ª¥×¥·¥ç¥ó¤òÍѤ¤¤ë¤Ë¤Ï\fI/var/log/faillog\fR¤Ø¤Î½ñ¤­¹þ¤ß¸¢¤¬
 É¬ÍפǤ¢¤ë¡£
-\fB-u login-name\fR¤ÈÆþÎϤ·¤¿ºÝ¤Ï¡¢\fBlogin-name\fR¤Î
+\fB-u \fIlogin-name\fR¤ÈÆþÎϤ·¤¿ºÝ¤Ï¡¢\fIlogin-name\fR¤Î
 ¥í¥°¥¤¥ó¼ºÇÔ²ó¿ô¤Î¤ß¤ò¥ê¥»¥Ã¥È¤¹¤ë¡£
 .PP
 \fB-m\fR¥Õ¥é¥Ã¥°¤Ï¡¢¥¢¥«¥¦¥ó¥È¤¬»ÈÍÑÉÔǽ¤Ë¤Ê¤ëºÇÂç¤Î¥í¥°¥¤¥ó
 ¼ºÇÔ²ó¿ô¤òÀßÄꤹ¤ë°Ù¤ËÍѤ¤¤ë¡£
-¤³¤Î¥ª¥×¥·¥ç¥ó¤òÍѤ¤¤ë¤Ë¤Ï\fI/usr/adm/faillog\fR¤Ø¤Î½ñ¤­¹þ¤ß¸¢¤¬
+¤³¤Î¥ª¥×¥·¥ç¥ó¤òÍѤ¤¤ë¤Ë¤Ï\fI/var/log/faillog\fR¤Ø¤Î½ñ¤­¹þ¤ß¸¢¤¬
 É¬ÍפǤ¢¤ë¡£
-\fB-m max\fR¤ÈÆþÎϤ·¤¿¾ì¹ç¡¢¥í¥°¥¤¥ó¼ºÇÔ¤¬\fBmax\fR²ó¤Ë㤷¤¿¸å¤Ï
+\fB-m \fImax\fR¤ÈÆþÎϤ·¤¿¾ì¹ç¡¢¥í¥°¥¤¥ó¼ºÇÔ¤¬\fImax\fR²ó¤Ë㤷¤¿¸å¤Ï
 Á´¤Æ¤Î¥¢¥«¥¦¥ó¥È¤¬»ÈÍÑÉÔǽ¤Ë¤Ê¤ë¡£
-\fB-u login-name\fR¤È¤È¤â¤ËÍѤ¤¤ì¤Ð¤³¤Îµ¡Ç½¤ò\fBlogin-name\fR¤Ë
+\fB-u \fIlogin-name\fR¤È¤È¤â¤ËÍѤ¤¤ì¤Ð¤³¤Îµ¡Ç½¤ò\fIlogin-name\fR¤Ë
 ¤Î¤ßºîÍѤµ¤»¤ë»ö¤¬½ÐÍè¤ë¡£
-\fBmax\fR¤ÎÃͤò0¤Ë¤¹¤ë¤È¥í¥°¥¤¥ó¤Î¼ºÇÔ²ó¿ô¤Ë¤ÏÀ©¸Â¤¬Ìµ¤¯¤Ê¤ë¡£
+\fImax\fR¤ÎÃͤò0¤Ë¤¹¤ë¤È¥í¥°¥¤¥ó¤Î¼ºÇÔ²ó¿ô¤Ë¤ÏÀ©¸Â¤¬Ìµ¤¯¤Ê¤ë¡£
 ¥¢¥¿¥Ã¥¯¤Ë¤è¤ê\fBroot\fR¤¬¥í¥°¥¤¥óÉÔǽ¤È¤Ê¤ê¥·¥¹¥Æ¥à´ÉÍý¤¬
 ½ÐÍè¤Ê¤¯¤Ê¤Ã¤Æ¤·¤Þ¤¦»ö¤òËɤ°°Ù¤Ë¡¢\fBroot\fR¤ËÂФ·¤Æ¤Ï
 ºÇÂç¥í¥°¥¤¥ó¼ºÇÔ²ó¿ô¤Ï¤¤¤Ä¤Ç¤âɬ¤º0¤È¤·¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
@@ -81,18 +86,18 @@ faillog \- faillog
 \fB-p\fR¡¢\fB-r\fRµÚ¤Ó\fB-m\fR¤Î³Æ¥ª¥×¥·¥ç¥ó¤Ï\fB-u\fRËô¤Ï\fB-t\fR
 ¤Î¤¤¤º¤ì¤ÈÁȤ߹ç¤ï¤»¤Æ¤âľ¤Á¤Ë½èÍý¤µ¤ì¤ë¡£
 .SH ·Ù¹ð
-\fIfaillog\fR¤ÏºÇ¸å¤Ë¼ºÇÔ¤·¤Æ°ÊÍè¥í¥°¥¤¥ó¤ËÀ®¸ù¤·¤Æ¤¤¤Ê¤¤¥æ¡¼¥¶¤Î¤ß¤ò
+\fBfaillog\fR¤ÏºÇ¸å¤Ë¼ºÇÔ¤·¤Æ°ÊÍè¥í¥°¥¤¥ó¤ËÀ®¸ù¤·¤Æ¤¤¤Ê¤¤¥æ¡¼¥¶¤Î¤ß¤ò
 É½¼¨¤¹¤ë¡£
 ¥í¥°¥¤¥ó¤Ë¼ºÇÔ¤·¤¿¸å¤ËÀµ¤·¤¯¥í¥°¥¤¥ó½ÐÍ褿¥æ¡¼¥¶¤òɽ¼¨¤µ¤»¤ë°Ù¤Ë¤Ï¡¢
 \fB-u\fR¥Õ¥é¥Ã¥°¤òÍѤ¤¤Æ¤½¤Î¥æ¡¼¥¶¤òÌÀ¼¨Åª¤Ë»ØÄꤹ¤ë¤«¡¢
 \fB-a\fR¥Õ¥é¥Ã¥°¤òÍѤ¤¤ÆÁ´¥æ¡¼¥¶¤òɽ¼¨¤µ¤»¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
 .PP
-¥·¥¹¥Æ¥à¤Ë¤è¤Ã¤Æ¤Ï¡¢/usr/adm¤ÎÂå¤ï¤ê¤Ë/var/admËô¤Ï/var/log¤òÍѤ¤¤Æ¤¤¤ë
+¥·¥¹¥Æ¥à¤Ë¤è¤Ã¤Æ¤Ï¡¢/var/log¤ÎÂå¤ï¤ê¤Ë/var/admËô¤Ï/usr/adm¤òÍѤ¤¤Æ¤¤¤ë
 ¤³¤È¤â¤¢¤ë¡£
 .SH ¥Õ¥¡¥¤¥ë
-/usr/adm/faillog \- ¥í¥°¥¤¥ó¼ºÇÔ¤òµ­Ï¿¤¹¤ë¥Õ¥¡¥¤¥ë
+/var/log/faillog \- ¥í¥°¥¤¥ó¼ºÇÔ¤òµ­Ï¿¤¹¤ë¥Õ¥¡¥¤¥ë
 .SH ´ØÏ¢¹àÌÜ
-login(1),
-faillog(4)
-.SH ËÝÌõ¼Ô
-¸Å¹âÏÂÄ÷ <furutaka@Flux.tokai.jaeri.go.jp>
+.BR login (1),
+.BR faillog (5)
+.SH Ãø¼Ô
+Julianne Frances Haugh (jockgrrl@ix.netcom.com)
index 61d7f4e736ff05a9669694eb8d3bf7c56e606498..cc5f56b7965018a9be23bda3fe003312f7a63161 100644 (file)
@@ -4,7 +4,7 @@
 .\" published by the Free Software Foundation; either version 2 of the
 .\" License, or (at your option) any later version.
 .\"
-.\"    $Id: gpasswd.1,v 1.1 2001/06/16 02:35:46 kloczek Exp $
+.\"    $Id: gpasswd.1,v 1.2 2001/11/16 17:01:32 ankry Exp $
 .\"
 .\" Japanese Version Copyright (c) 1997 Kazuyoshi Furutaka
 .\"         all rights reserved.
@@ -19,24 +19,30 @@ gpasswd \- /etc/group
 .B gpasswd \fIgroup\fR
 .br
 .B gpasswd
--a \fIuser\fR \fIgroup\fR
+.B -a
+\fIuser\fR \fIgroup\fR
 .br
 .B gpasswd
--d \fIuser\fR \fIgroup\fR
+.B -d
+\fIuser\fR \fIgroup\fR
 .br
 .B gpasswd
--R \fIgroup\fR
+.B -R
+\fIgroup\fR
 .br
 .B gpasswd
--r \fIgroup\fR
+.B -r
+\fIgroup\fR
 .br
 .B gpasswd
-[ -A \fIuser\fR,... ]
-[ -M \fIuser\fR,... ]
+.RB [ -A
+\fIuser\fR,...]
+.RB [ -M
+\fIuser\fR,...]
 \fIgruop\fR
 .br
 .SH ÀâÌÀ
-.I gpasswd
+.B gpasswd
 ¤Ï/etc/group¥Õ¥¡¥¤¥ë
 (µÚ¤Ó¡¢SHADOWGRP¤òÄêµÁ¤·¤Æ¥³¥ó¥Ñ¥¤¥ë¤·¤¿»þ¤Ï/etc/gshadow¥Õ¥¡¥¤¥ë)
 ¤ò´ÉÍý¤¹¤ë¤Î¤ËÍѤ¤¤é¤ì¤ë¡£
@@ -51,19 +57,19 @@ gpasswd \- /etc/group
 ´ÉÍý¼Ô¤Ï\fB-r\fR¥ª¥×¥·¥ç¥ó¤òÍѤ¤¤Æ¥°¥ë¡¼¥×¥Ñ¥¹¥ï¡¼¥É¤òºï½ü¤¹¤ë»ö¤¬½ÐÍè¤ë¡£
 ¥Ñ¥¹¥ï¡¼¥É¤¬ÀßÄꤵ¤ì¤Æ¤¤¤Ê¤¤»þ¤Ï¡¢
 ¥°¥ë¡¼¥×¤Î¥á¥ó¥Ð¡¼¤Î¤ß¤¬
-.I newgrp(1)
+.B newgrp(1)
 ¤òÍѤ¤¤Æ¥°¥ë¡¼¥×¤Î°ì°÷¤È¤Ê¤ë¤³¤È¤¬½ÐÍè¤ë¡£
 ¥ª¥×¥·¥ç¥ó\fB-R\fR¤ò»ØÄꤷ¤¿¾ì¹ç¤Ï¡¢
 .I newgrp(1)
 ¥³¥Þ¥ó¥É¤òÍѤ¤¤¿¥°¥ë¡¼¥×¤Ø¤Î¥¢¥¯¥»¥¹¤ò½ÐÍè¤Ê¤¯¤¹¤ë¡£
 .PP
 ¥°¥ë¡¼¥×¤Î´ÉÍý¼Ô¤¬¥°¥ë¡¼¥×̾¤Î¤ß¤ò»ØÄꤷ¤Æ
-.I gpasswd
+.B gpasswd
 ¥³¥Þ¥ó¥É¤ò¼Â¹Ô¤·¤¿¾ì¹ç¤Ï
 ¥Ñ¥¹¥ï¡¼¥É¤ÎÆþÎϤòµá¤á¤é¤ì¤ë¡£
 ¥Ñ¥¹¥ï¡¼¥É¤¬ÀßÄꤵ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ç¤â¡¢
 ¥á¥ó¥Ð¡¼¤Ï¥Ñ¥¹¥ï¡¼¥É¤Ê¤·¤Ç
-.I newgrp(1)
+.B newgrp(1)
 ¥³¥Þ¥ó¥É¤òÍѤ¤¤ë¤³¤È¤¬½ÐÍè¤ë¤¬¡¢
 ¥á¥ó¥Ð¡¼¤Ç¤Ê¤¤¿Í¤Ï¥Ñ¥¹¥ï¡¼¥É¤òÆþÎϤ·¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
 
@@ -72,11 +78,8 @@ gpasswd \- /etc/group
 .br
 /etc/gshadow \- shadow¤·¤¿¥°¥ë¡¼¥×¾ðÊó
 .SH ´ØÏ¢¹àÌÜ
-newgrp(1),
-groupadd(1),
-groupdel(1),
-groupmod(1),
-grpck(1)
-.SH ËÝÌõ¼Ô
-¸Å¹âÏÂÄ÷ <furutaka@Flux.tokai.jaeri.go.jp>
-
+.BR newgrp (1),
+.BR groupadd (8),
+.BR groupdel (8),
+.BR groupmod (8),
+.BR grpck (8)
index a96fc4f2572d252b09f8d73d7eb6a7ca3c475159..c2344ac85fc6d42b8d398a341d088a55db6314ac 100644 (file)
@@ -1,4 +1,4 @@
-.\" Copyright 1991, John F. Haugh II
+.\" Copyright 1991, Julianne Frances Haugh
 .\" All rights reserved.
 .\"
 .\" Redistribution and use in source and binary forms, with or without
@@ -9,18 +9,14 @@
 .\" 2. Redistributions in binary form must reproduce 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
+.\" 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 JOHN HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" 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 JOHN HAUGH OR CONTRIBUTORS BE LIABLE
+.\" 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)
@@ -29,7 +25,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\"    $Id: groupadd.8,v 1.1 2001/06/16 02:35:46 kloczek Exp $
+.\"    $Id: groupadd.8,v 1.2 2001/11/16 17:01:32 ankry Exp $
 .\"
 .\" Japanese Version Copyright (c) 1997 Kazuyoshi Furutaka
 .\"         all rights reserved.
 groupadd \- ¿·¤·¤¤¥°¥ë¡¼¥×¤òºîÀ®¤¹¤ë
 .SH ½ñ¼°
 .B groupadd
-[ \fB-g\fI gid \fR[ \fB-o\fR ] ]
+[\fB-g\fI gid \fR[\fB-o\fR]]
 .I group
 .SH ÀâÌÀ
-\fIgroupadd\fR¥³¥Þ¥ó¥É¤Ï¥³¥Þ¥ó¥É¥é¥¤¥ó¾å¤Ç»ØÄꤵ¤ì¤¿Ã͵ڤÓ
+\fBgroupadd\fR¥³¥Þ¥ó¥É¤Ï¥³¥Þ¥ó¥É¥é¥¤¥ó¾å¤Ç»ØÄꤵ¤ì¤¿Ã͵ڤÓ
 ¥·¥¹¥Æ¥à¤Î¥Ç¥£¥Õ¥©¥ë¥ÈÃͤòÍѤ¤¤Æ¿·¤·¤¤¥°¥ë¡¼¥×¤òºîÀ®¤¹¤ë¡£
 ¿·¤·¤¤¥°¥ë¡¼¥×¤ÏɬÍפȤʤ俺ݤ˥·¥¹¥Æ¥à¥Õ¥¡¥¤¥ë¤Ëµ­Æþ¤µ¤ì¤ë¡£
-\fIgroupadd\fR¥³¥Þ¥ó¥É¤Ë»ØÄê¤Ç¤­¤ë¥ª¥×¥·¥ç¥ó¤Ï¼¡¤Î¤â¤Î¤Ç¤¢¤ë
+\fBgroupadd\fR¥³¥Þ¥ó¥É¤Ë»ØÄê¤Ç¤­¤ë¥ª¥×¥·¥ç¥ó¤Ï¼¡¤Î¤â¤Î¤Ç¤¢¤ë
 .IP "\fB-g \fIgid\fR"
 ¿·µ¬¥°¥ë¡¼¥×¤ÎIDÈֹ档
-¤³¤ÎÃͤϡ¢\fI-o\fR¥ª¥×¥·¥ç¥ó¤òÍѤ¤¤Ê¤¤¸Â¤ê¤Ï¡¢Â¾¤È½ÅÊ£¤·¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
+¤³¤ÎÃͤϡ¢\fB-o\fR¥ª¥×¥·¥ç¥ó¤òÍѤ¤¤Ê¤¤¸Â¤ê¤Ï¡¢Â¾¤È½ÅÊ£¤·¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
 ¤Þ¤¿¡¢ÈóÉéÃͤǤʤ¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
 ¥Ç¥£¥Õ¥©¥ë¥È¤Ï¡¢99¤è¤êÂ礭¤¯³î¤Ä¾¤ÎÁ´¤Æ¤Î´û¸¥°¥ë¡¼¥×¤ÎID¤è¤ê¤â
 Â礭¤Ê¤â¤Î¤ÎÃæ¤ÇºÇ¾®¤Î¤â¤Î¤Ç¤¢¤ë¡£
@@ -60,8 +56,13 @@ groupadd \- 
 .br
 /etc/gshadow \- ¥°¥ë¡¼¥×¤Î°ÂÁ´¤Ê¥¢¥«¥¦¥ó¥È¾ðÊó
 .SH ´ØÏ¢¹àÌÜ
-\fBchfn(1), chsh(1), useradd(1M), userdel(1M), usermod(1M),
-passwd(1), groupdel(1M), groupmod(1M)
-.SH ËÝÌõ¼Ô
-¸Å¹âÏÂÄ÷ <furutaka@Flux.tokai.jaeri.go.jp>
-
+.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 (jockgrrl@ix.netcom.com)
index 93831b3f697412cd50aaab6d09eea90e046e7ce4..2882483e44ec0be0386b70dd88e2788bbeb530f9 100644 (file)
@@ -1,4 +1,4 @@
-.\" Copyright 1991 - 1993, John F. Haugh II
+.\" Copyright 1991 - 1993, Julianne Frances Haugh
 .\" All rights reserved.
 .\"
 .\" Redistribution and use in source and binary forms, with or without
@@ -9,18 +9,14 @@
 .\" 2. Redistributions in binary form must reproduce 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
+.\" 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 JOHN HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" 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 JOHN HAUGH OR CONTRIBUTORS BE LIABLE
+.\" 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)
@@ -29,7 +25,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\"    $Id: groupdel.8,v 1.1 2001/06/16 02:35:46 kloczek Exp $
+.\"    $Id: groupdel.8,v 1.2 2001/11/16 17:01:32 ankry Exp $
 .\"
 .\" Japanese Version Copyright (c) 1997 Kazuyoshi Furutaka
 .\"         all rights reserved.
@@ -43,7 +39,7 @@ groupdel \- 
 .B groupdel
 .I group
 .SH ÀâÌÀ
-\fIgroupdel\fR¥³¥Þ¥ó¥É¤Ï¡¢¥·¥¹¥Æ¥à¤Î¥¢¥«¥¦¥ó¥È¥Õ¥¡¥¤¥ë¤òÊѹ¹¤·¡¢
+\fBgroupdel\fR¥³¥Þ¥ó¥É¤Ï¡¢¥·¥¹¥Æ¥à¤Î¥¢¥«¥¦¥ó¥È¥Õ¥¡¥¤¥ë¤òÊѹ¹¤·¡¢
 \fIgroup\fR¤Ë°¤¹¤ëÁ´¤Æ¤Î¥¨¥ó¥È¥ê¡¼¤òºï½ü¤¹¤ë¡£
 »ØÄꤵ¤ì¤¿¥°¥ë¡¼¥×¤Ï¸ºß¤·¤Æ¤¤¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
 .PP
@@ -57,8 +53,13 @@ groupdel \- 
 .br
 /etc/gshadow \- ¥°¥ë¡¼¥×¤Î°ÂÁ´¤Ê¾ðÊó
 .SH ´ØÏ¢¹àÌÜ
-\fBchfn(1), chsh(1), useradd(1M), userdel(1M), usermod(1M),
-passwd(1), groupadd(1M), groupmod(1M)
-.SH ËÝÌõ¼Ô
-¸Å¹âÏÂÄ÷ <furutaka@Flux.tokai.jaeri.go.jp>
-
+.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 (jockgrrl@ix.netcom.com)
index c7c980f1490fe1461abd8b7e0ff28e2d6039165d..6738ff42f2b65d8fee3fd302112cef2471afee52 100644 (file)
@@ -1,4 +1,4 @@
-.\" Copyright 1991, John F. Haugh II
+.\" Copyright 1991, Julianne Frances Haugh
 .\" All rights reserved.
 .\"
 .\" Redistribution and use in source and binary forms, with or without
@@ -9,18 +9,14 @@
 .\" 2. Redistributions in binary form must reproduce 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
+.\" 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 JOHN HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" 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 JOHN HAUGH OR CONTRIBUTORS BE LIABLE
+.\" 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)
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\"    $Id: groupmod.8,v 1.1 2001/06/16 02:35:46 kloczek Exp $
+.\"    $Id: groupmod.8,v 1.2 2001/11/16 17:01:32 ankry Exp $
 .\"
 .\" 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>
 .\"
-.TH GROUPMOD 1M
+.TH GROUPMOD 8
 .SH Ì¾Á°
 groupmod \- ¥°¥ë¡¼¥×¤ËÊѹ¹¤ò²Ã¤¨¤ë
 .SH ½ñ¼°
 .B groupmod
-[ \fB-g\fI gid \fR[ \fB-o\fR ] ]
-[ \fB-n\fI group_name \fR ]
+[\fB-g\fI gid \fR[\fB-o\fR]]
+[\fB-n\fI group_name \fR]
 .I group
 .SH ÀâÌÀ
-\fIgroupmod\fR¥³¥Þ¥ó¥É¤Ï¡¢¥³¥Þ¥ó¥É¥é¥¤¥ó¾å¤Ç»ØÄꤷ¤¿Êѹ¹»ö¹à¤Ë¨¤·¤Æ
+\fBgroupmod\fR¥³¥Þ¥ó¥É¤Ï¡¢¥³¥Þ¥ó¥É¥é¥¤¥ó¾å¤Ç»ØÄꤷ¤¿Êѹ¹»ö¹à¤Ë¨¤·¤Æ
 ¥·¥¹¥Æ¥à¤Î¥¢¥«¥¦¥ó¥È¥Õ¥¡¥¤¥ë¤ò²þÊѤ¹¤ë¡£
 \fIgroupmod\fR¥³¥Þ¥ó¥É¤Ë»ØÄê¤Ç¤­¤ë¥ª¥×¥·¥ç¥ó¤Ï¼¡¤ÎÄ̤ê
 .IP "\fB-g \fIgid\fR"
 Êѹ¹¤ò¼õ¤±¤ë¥°¥ë¡¼¥×¤ÎIDÈֹ档
-¤³¤ÎÃͤϡ¢\fI-o\fR¥ª¥×¥·¥ç¥ó¤òÍѤ¤¤ë¾ì¹ç°Ê³°¤Ï¡¢Â¾¤È½ÅÊ£¤·¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
+¤³¤ÎÃͤϡ¢\fB-o\fR¥ª¥×¥·¥ç¥ó¤òÍѤ¤¤ë¾ì¹ç°Ê³°¤Ï¡¢Â¾¤È½ÅÊ£¤·¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
 ¤Þ¤¿¡¢ÈóÉéÃͤǤʤ¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
 ¥Ç¥£¥Õ¥©¥ë¥È¤Ç¤Ï¡¢99¤è¤êÂ礭¤¯³î¤Ä¾¤ÎÁ´¤Æ¤Î´û¸¥°¥ë¡¼¥×¤ÎID¤è¤ê¤â
 Â礭¤Ê¤â¤Î¤ÎÃæ¤ÇºÇ¾®¤Î¤â¤Î¤Ç¤¢¤ë¡£
@@ -63,8 +59,13 @@ groupmod \- 
 .br
 /etc/gshadow \- ¥°¥ë¡¼¥×¤Î°ÂÁ´¤Ê¾ðÊó
 .SH ´ØÏ¢¹àÌÜ
-\fBchfn(1), chsh(1), useradd(1M), userdel(1M), usermod(1M),
-passwd(1), groupadd(1M), groupdel(1M)
-.SH ËÝÌõ¼Ô
-¸Å¹âÏÂÄ÷ <furutaka@Flux.tokai.jaeri.go.jp>
-
+.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 (jockgrrl@ix.netcom.com)
diff --git a/man/ja/groups.1 b/man/ja/groups.1
new file mode 100644 (file)
index 0000000..0bcc22c
--- /dev/null
@@ -0,0 +1,60 @@
+.\" 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,v 1.1 2001/11/16 17:00:58 ankry Exp $
+.\"
+.\" 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>
+.\"
+.TH GROUPS 1
+.SH Ì¾Á°
+groups \- ¸½ºß¤Î¥°¥ë¡¼¥× ID Ì¾¤Îɽ¼¨
+.SH ½ñ¼°
+.B groups
+.RI [ user ]
+.SH ÀâÌÀ
+.B groups
+¤Ï¸½ºß¤Î¥°¥ë¡¼¥× ID Ì¾¤Þ¤¿¤ÏÃͤòɽ¼¨¤¹¤ë¡£
+¤½¤ÎÃͤ¬ \fI/etc/group\fR ¤ËÅÐÏ¿¤µ¤ì¤Æ¤¤¤Ê¤±¤ì¤Ð¡¢
+¤½¤ÎÃͤϿôÃÍ¥°¥ë¡¼¥× ID ¤È¤·¤ÆÉ½¼¨¤µ¤ì¤ë¡£
+\fIuser\fR ¥ª¥×¥·¥ç¥ó¥Ñ¥é¥á¥¿¤Ï \fIuser\fR ¤¬½ê°¤¹¤ë¥°¥ë¡¼¥×̾¤òɽ¼¨¤¹¤ë¡£
+.SH Ãí°Õ
+¶¦Æ±¥°¥ë¡¼¥×¤¬¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Ê¤¤¥·¥¹¥Æ¥à¤Ï \fI/etc/group\fR ¤Ë
+Êó¹ð¤µ¤ì¤Æ¤¤¤ë¾ðÊó¤òÀßÄꤹ¤ë¡£
+¥æ¡¼¥¶¤Ï¸½ºß¤Î real ¤ä effective ¥°¥ë¡¼¥× 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)
index 5d3f5b32be35d357928f69a5165840d657623b17..2eafff55a34c19e0ff926ee514ce3356761c784a 100644 (file)
@@ -1,4 +1,4 @@
-.\" Copyright 1992 - 1993, John F. Haugh II
+.\" Copyright 1992 - 1993, Julianne Frances Haugh
 .\" All rights reserved.
 .\"
 .\" Redistribution and use in source and binary forms, with or without
@@ -9,18 +9,14 @@
 .\" 2. Redistributions in binary form must reproduce 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
+.\" 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 JOHN HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" 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 JOHN HAUGH OR CONTRIBUTORS BE LIABLE
+.\" 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)
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\"    $Id: grpck.8,v 1.1 2001/06/16 02:35:46 kloczek Exp $
+.\"    $Id: grpck.8,v 1.2 2001/11/16 17:01:32 ankry Exp $
 .\"
 .\" 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>
 .\"
-.TH GRPCK 8
+.TH GRPCK 1
 .SH Ì¾Á°
 grpck \- ¥°¥ë¡¼¥×¥Õ¥¡¥¤¥ë¤Î´°Á´À­¤ò¸¡¾Ú¤¹¤ë
 .SH ½ñ¼°
-\fBgrpck\fR [ \fB-r\fR ] [ \fIgroup\fR \fIshadow\fR ]
-.SH DESCRIPTION
+\fBgrpck\fR [\fB-r\fR] [\fIgroup\fR \fIshadow\fR]
+.SH ÀâÌÀ
 \fBgrpck\fR¥³¥Þ¥ó¥É¤Ï¥·¥¹¥Æ¥à¤Îǧ¾Ú¾ðÊ󤬴°Á´¤Ê¤â¤Î¤«¤É¤¦¤«¤Î¸¡¾Ú¤ò¹Ô¤¦¡£
-\fB/etc/group\fRµÚ¤Ó\fB/etc/gshadow\fR¥Õ¥¡¥¤¥ëÃæ¤ÎÁ´¤Æ¤Î¥¨¥ó¥È¥ê¡¼¤ËÂФ·¤Æ¡¢
+\fI/etc/group\fRµÚ¤Ó\fI/etc/gshadow\fR¥Õ¥¡¥¤¥ëÃæ¤ÎÁ´¤Æ¤Î¥¨¥ó¥È¥ê¡¼¤ËÂФ·¤Æ¡¢
 ½ñ¼°¤¬Àµ¤·¤¤¤«¡¢µÚ¤Ó³ÆÍó¤Ëµ­¤µ¤ì¤Æ¤¤¤ë¥Ç¡¼¥¿¤ÏÍ­¸ú¤Ê¤â¤Î¤«¤É¤¦¤«¤Î¸¡¾Ú¤¬
 ¹Ô¤Ê¤ï¤ì¤ë¡£
 ½ñ¼°¤¬Àµ¤·¤¯¤Ê¤«¤Ã¤¿¤êÄûÀµÉÔǽ¤Ê¸í¤ê¤ò´Þ¤à¥¨¥ó¥È¥ê¡¼¤Ïºï½ü¤òÂ¥¤µ¤ì¤ë¡£
@@ -68,13 +64,13 @@ grpck \- 
 Â¾¤ÎÁ´¤Æ¤Î¥¨¥é¡¼¤ËÂФ·¤Æ¤Ï·Ù¹ð¤¬¤Ê¤µ¤ì¤ë¤Î¤ß¤Ç¤¢¤ê¡¢¤½¤Î¾ì¹ç¤Ï
 ¸í¤ê¤òÄûÀµ¤¹¤ë¤¿¤á¤Ë\fBgroupmod\fR¥³¥Þ¥ó¥É¤ò¼Â¹Ô¤¹¤ë¤è¤¦´«¤á¤é¤ì¤ë¡£
 .P
-\fB/etc/group\fR¥Õ¥¡¥¤¥ë¤ËºîÍѤ¹¤ë¥³¥Þ¥ó¥É¤Ï¡¢²õ¤ì¤¿¤â¤·¤¯¤Ï
+\fI/etc/group\fR¥Õ¥¡¥¤¥ë¤ËºîÍѤ¹¤ë¥³¥Þ¥ó¥É¤Ï¡¢²õ¤ì¤¿¤â¤·¤¯¤Ï
 ½ÅÊ£¤·¤¿¥¨¥ó¥È¥ê¡¼¤òÊѹ¹¤¹¤ë¤³¤È¤Ï½ÐÍè¤Ê¤¤¡£
 ¤½¤Î¤è¤¦¤ÊºÝ¤Ë¸í¤ê¤Î¤¢¤ë¥¨¥ó¥È¥ê¡¼¤òºï½ü¤¹¤ë¤¿¤á¤Ë¤Ï
 \fBgrpck\fR¤òÍѤ¤¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
 .SH ¥ª¥×¥·¥ç¥ó
-¥Ç¥£¥Õ¥©¥ë¥È¤Ç¤Ï¡¢\fBgrpck\fR¤Ï\fB/etc/group\fR¥Õ¥¡¥¤¥ëµÚ¤Ó
-\fB/etc/gshadow\fR¤ËºîÍѤ¹¤ë¡£
+¥Ç¥£¥Õ¥©¥ë¥È¤Ç¤Ï¡¢\fBgrpck\fR¤Ï\fI/etc/group\fR¥Õ¥¡¥¤¥ëµÚ¤Ó
+\fI/etc/gshadow\fR¤ËºîÍѤ¹¤ë¡£
 \fIgroup\fRµÚ¤Ó\fIshadow\fR¥Ñ¥é¥á¡¼¥¿¤òÍѤ¤¤ÆÊ̤Υե¡¥¤¥ë¤òÁªÂò¤¹¤ë
 »ö¤â¤Ç¤­¤ë¡£
 ²Ã¤¨¤Æ¡¢\fB-r\fR¥Õ¥é¥Ã¥°¤ò»ØÄꤹ¤ë¤³¤È¤Ë¤è¤ê¡¢
@@ -88,9 +84,12 @@ grpck \- 
 .br
 /etc/passwd \- ¥æ¡¼¥¶¤Ë´Ø¤¹¤ë¾ðÊó
 .SH ´ØÏ¢¹àÌÜ
-groupmod(1), group(4), passwd(4), shadow(4)
+.BR groupmod (8),
+.BR group (5),
+.BR passwd (5),
+.BR shadow (5)
 .SH ÊÖ¤êÃÍ
-\fIgrpck\fR¥³¥Þ¥ó¥É¤Ï°Ê²¼¤ÎÌá¤êÃͤòÊÖ¤·¤Æ½ªÎ»¤¹¤ë:
+\fBgrpck\fR¥³¥Þ¥ó¥É¤Ï°Ê²¼¤ÎÌá¤êÃͤòÊÖ¤·¤Æ½ªÎ»¤¹¤ë:
 .IP 0 5
 À®¸ù
 .IP 1 5
@@ -103,6 +102,5 @@ groupmod(1), group(4), passwd(4), shadow(4)
 ¥°¥ë¡¼¥×¥Õ¥¡¥¤¥ë¤ò¥í¥Ã¥¯¤Ç¤­¤Ê¤¤
 .IP 5 5
 ¥°¥ë¡¼¥×¥Õ¥¡¥¤¥ë¤ò¹¹¿·¤Ç¤­¤Ê¤¤
-.SH ËÝÌõ¼Ô
-¸Å¹âÏÂÄ÷ <furutaka@Flux.tokai.jaeri.go.jp>
-
+.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..e0a2ab1
--- /dev/null
@@ -0,0 +1 @@
+.so pwconv.8
diff --git a/man/ja/grpunconv.8 b/man/ja/grpunconv.8
new file mode 100644 (file)
index 0000000..e0a2ab1
--- /dev/null
@@ -0,0 +1 @@
+.so pwconv.8
diff --git a/man/ja/id.1 b/man/ja/id.1
new file mode 100644 (file)
index 0000000..7761abb
--- /dev/null
@@ -0,0 +1,57 @@
+.\" 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: id.1,v 1.1 2001/11/16 17:00:53 ankry Exp $
+.\"
+.\" Japanese Version Copyright (c) 2000 ISHIKAWA Keisuke
+.\"         all rights reserved.
+.\" Translated Thu Nov  9 23:17:10 JST 2000
+.\"         by ISHIKAWA Keisuke
+.\"
+.TH ID 1
+.SH Ì¾Á°
+id \- ¸½ºß¤Î¥æ¡¼¥¶ ID Ì¾¤È¥°¥ë¡¼¥× ID Ì¾¤òɽ¼¨¤¹¤ë
+.SH ½ñ¼°
+.B id
+.RB [ -a ]
+.SH ÀâÌÀ
+.B id
+¤Ï¡¢¸½ºß¤Î¼Â¥æ¡¼¥¶ ID¡¢¼Â¸ú¥æ¡¼¥¶ ID¡¢¼Â¥°¥ë¡¼¥× ID¡¢¼Â¸ú¥°¥ë¡¼¥× ID ¤Î̾Á°¤Þ¤¿¤ÏÃͤòɽ¼¨¤¹¤ë¡£
+\fI/etc/passwd\fR ¤Ë¡¢¤½¤ÎÃͤËÂбþ¤¹¤ë¥¨¥ó¥È¥ê¤¬Â¸ºß¤·¤Ê¤¤¾ì¹ç¤Ï¡¢Âбþ¤¹¤ë̾Á°¤Ïɽ¼¨¤µ¤ì¤º¤ËÃͤÀ¤±¤¬É½¼¨¤µ¤ì¤ë¡£
+\fB-a\fR ¥Õ¥é¥° (¥ª¥×¥·¥ç¥ó) ¤ò»ØÄꤹ¤ë¤È¡¢¥æ¡¼¥¶¤òÊ£¿ô¤Î¥°¥ë¡¼¥×¤Î¥á¥ó¥Ð¡¼¤Ë¤Ç¤­¤ë¥·¥¹¥Æ¥à¤Ç¤Î¥°¥ë¡¼¥×¡¦¥»¥Ã¥È¤¬É½¼¨¤µ¤ì¤ë¡£
+.SH ¥Õ¥¡¥¤¥ë
+/etc/passwd \- ¥æ¡¼¥¶¡¼¥¢¥«¥¦¥ó¥È¾ðÊó
+.br
+/etc/group \- ¥°¥ë¡¼¥×¾ðÊó
+.SH ´ØÏ¢¹àÌÜ
+.BR getuid (2),
+.BR getgid (2),
+.BR getgroups (2)
+.SH Ãø¼Ô
+Julianne Frances Haugh (jockgrrl@ix.netcom.com)
+
+
index ac01d0ef0271021b02f6cd2accf2fe561d6bb3da..46d31a31e7a25f91a87a6ae3208043b4884f8db9 100644 (file)
 .\" SUCH DAMAGE.
 .\"
 .\"    @(#)lastlog.8   3.3     08:24:58        29 Sep 1993 (National Guard Release)
-.\"    $Id: lastlog.8,v 1.1 2001/06/16 02:35:46 kloczek Exp $
+.\"    $Id: lastlog.8,v 1.2 2001/11/16 17:01:32 ankry Exp $
 .\"
 .\" 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>
 .\"
 .TH LASTLOG 8
 .SH Ì¾Á°
@@ -40,15 +41,15 @@ lastlog \- lastlog 
 .SH ½ñ¼°
 .B lastlog
 .RB [ \-u
-.IR uid ]
+.IR login-name ]
 .RB [ \-t
 .IR days ]
 .SH ÀâÌÀ
 \fBlastlog\fR ¤ÏºÇ½ª¥í¥°¥¤¥ó¤Îµ­Ï¿¥Õ¥¡¥¤¥ë
-\fI/usr/adm/lastlog\fR ¤ÎÆâÍÆ¤òÀ°·Á¤·¤ÆÉ½¼¨¤¹¤ë¡£
+\fI/var/log/lastlog\fR ¤ÎÆâÍÆ¤òÀ°·Á¤·¤ÆÉ½¼¨¤¹¤ë¡£
 \fBlogin-name\fR, \fBport\fR, \fBlast login time\fR ¤¬É½¼¨¤µ¤ì¤ë¡£
 ¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï (¥Õ¥é¥°¤ò»ØÄꤷ¤Ê¤«¤Ã¤¿¾ì¹ç¤Ï) lastlog ¥¨¥ó¥È¥ê¤ò
-UID ½ç¤Ëɽ¼¨¤¹¤ë¡£
+UID ¤Î¿ôÃͤǥ½¡¼¥È¤·¤ÆÉ½¼¨¤¹¤ë¡£
 \fB\-u \fIlogin-name\fR ¥Õ¥é¥°¤ò»ØÄꤹ¤ë¤È
 \fIlogin-name\fR ¤Îµ­Ï¿¤À¤±¤¬É½¼¨¤µ¤ì¤ë¡£
 \fB\-t \fIdays\fR ¤ÈÆþÎϤ¹¤ë¤ÈºÇ¶á
@@ -60,15 +61,16 @@ UID 
 \fB"**Never logged in**"\fR
 ¤È¤¤¤¦¥á¥Ã¥»¡¼¥¸¤¬É½¼¨¤µ¤ì¤ë¡£
 .SH ¥Õ¥¡¥¤¥ë
-/usr/adm/lastlog \- lastlog µ­Ï¿¥Õ¥¡¥¤¥ë
+/var/log/lastlog \- lastlog µ­Ï¿¥Õ¥¡¥¤¥ë
 .SH ·Ù¹ð
-uid ÈÖ¹æ¤ËÂ礭¤Ê¤È¤Ó¤¬¤¢¤ë¤È¡¢
+uid ÈÖ¹æ¤ËÂ礭¤ÊÈô¤Ó¤¬¤¢¤ë¤È¡¢
 lastlog ¥×¥í¥°¥é¥à¤ÏĹ»þ´Ö¥¹¥¯¥ê¡¼¥ó¤Ë²¿¤â½ÐÎϤ·¤Ê¤¤¤Þ¤Þ
 ¼Â¹Ô¤ò³¤±¤ë (¤Ä¤Þ¤ê mmdf=800 ¤ÇºÇ¸å¤Î uid=170¤Î¾ì¹ç¡¢
 uid 171-799 ¤Î´Ö¥×¥í¥°¥é¥à¤Ï²¿¤â½ÐÎϤ·¤Ê¤¤¤Î¤Ç¡¢
 ¥Ï¥ó¥°¤·¤¿¤è¤¦¤Ë¸«¤¨¤ë)¡£
 .SH Ãø¼Ô
-Julianne Frances Haugh (jfh@tab.com)
+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..0634231
--- /dev/null
@@ -0,0 +1,80 @@
+.\"
+.\" 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>
+.\"
+.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
+Í­¸ú¤Ê¼±Ê̻Ҥϰʲ¼¤Ç¤¢¤ë¡§
+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 »þ´Ö (MIN)
+.br
+U: ºÇÂç¥×¥í¥»¥¹¿ô
+.br
+K: \fBumask\fR(2) ¤Ë¤è¤ëÀßÄꤵ¤ì¤ë¡¢¥Õ¥¡¥¤¥ëºîÀ®»þ¤Î mask
+.br
+L: ¥æ¡¼¥¶¤ÎºÇÂç¥í¥°¥¤¥ó¿ô
+.br
+P: \fBsetpriority\fR(2) ¤Ë¤è¤Ã¤ÆÀßÄꤵ¤ì¤ë¥×¥í¥»¥¹Í¥ÀèÅÙ
+.PP
+Î㤨¤Ð¡¢\fIL2D2048N5\fP ¤ÏÍ­¸ú¤Ê \fBLIMITS_STRING\fP ¤Ç¤¢¤ë¡£ÆÉ¤ß¤ä¤¹¤µ¤ò¹Í¤¨¤Æ¡¢
+2 ÈÖÌܤÎÎã¤Î¤è¤¦¤Ê½ñ¤­Êý¤ò¤¹¤ë¤³¤È¤â¤Ç¤­¤ë¡§
+.sp
+username L2D2048N5
+.br
+username L2 D2048 N5
+.PP
+\fIusername\fP ¤Î¸å¤Î¹Ô¤Î»Ä¤ê¤¬À©¸Â¤µ¤ì¤¿Ê¸»úÎó¤È¤·¤Æ°·¤ï¤ì¤ë¤Î¤Ç¡¢
+¥³¥á¥ó¥È¤¬µö²Ä¤µ¤ì¤Ê¤¤¤³¤È¤ËÃí°Õ¤¹¤ë¤³¤È¡£
+̵¸ú¤ÊÀ©¸Âʸ»úÎó¤Ï¡¢login ¥×¥í¥°¥é¥à¤Ë¤è¤Ã¤ÆµñÀ䤵¤ì¤ë(̵»ë¤µ¤ì¤ë)¤À¤í¤¦¡£
+.PP
+¥Ç¥Õ¥©¥ë¥È¤Î»ØÄê¤Ï¥æ¡¼¥¶Ì¾ "\fB*\fP" ¤Ë¤è¤Ã¤ÆÉ½¼¨¤µ¤ì¤ë¡£
+\fBLIMITS_FILE\fP ¤Ë¿¿ô¤Î \fIdefault\fP ¤òÅÐÏ¿¤·¤Æ¤¤¤ë¾ì¹ç¡¢
+ºÇ¸å¤Î¤â¤Î¤¬¥Ç¥Õ¥©¥ë¥È»ØÄê¤È¤·¤Æ»ÈÍѤµ¤ì¤ë¡£
+.PP
+¤¢¤ë¥æ¡¼¥¶¤Ø¤ÎÀ©¸Â¤ò´°Á´¤Ë̵¸ú¤Ë¤¹¤ë¤Ë¤Ï¡¢¥·¥ó¥°¥ë¥À¥Ã¥·¥å "\fB-\fP" ¤ò»ÈÍѤ¹¤ë¡£
+.PP
+¤µ¤é¤Ë¡¢Á´¤Æ¤ÎÀ©¸Â¤ÎÀßÄê¤Ï¡Ö¥í¥°¥¤¥óËè¡×¤ÇÀßÄꤵ¤ì¤Æ¤¤¤ë¤³¤È¤ËÃí°Õ¤¹¤ë¤³¤È¡£
+¤½¤ì¤é¤Ï¥°¥í¡¼¥Ð¥ë¤Ç¤Ï¤Ê¤¯¤Þ¤¿¡¢±Êµ×¤Ç¤Ï¤Ê¤¤¡£¥°¥í¡¼¥Ð¥ë¤ÊÀ©¸Â¤¬²Äǽ¤Ë¤Ê¤ë¤È¤­¤¬
+Íè¤ë¤À¤í¤¦¤¬¡¢º£¤Î¤È¤³¤í¤Ï¡Ö¤·¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¤³¤È¡×¤Ç¤¢¤ë¡£;)
+.SH ¥Õ¥¡¥¤¥ë
+/etc/limits
+.SH ´ØÏ¢¹àÌÜ
+.BR login (1),
+.BR setpriority (2),
+.BR setrlimit (2)
+.SH Ãø¼Ô
+Cristian Gafton (gafton@sorosis.ro)
index 0e7f120242d3ad815fb6257c6986ca187b281825..58db9804545f6f9605bcbad360ff347b487342ed 100644 (file)
@@ -1,4 +1,4 @@
-.\" Copyright 1989 - 1994, John F. Haugh II
+.\" Copyright 1989 - 1994, Julianne Frances Haugh
 .\" All rights reserved.
 .\"
 .\" Redistribution and use in source and binary forms, with or without
@@ -9,18 +9,14 @@
 .\" 2. Redistributions in binary form must reproduce 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
+.\" 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 JOHN HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" 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 JOHN HAUGH OR CONTRIBUTORS BE LIABLE
+.\" 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)
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\"    $Id: login.1,v 1.1 2001/06/16 02:35:46 kloczek Exp $
+.\"    $Id: login.1,v 1.2 2001/11/16 17:01:32 ankry Exp $
 .\"
 .\" 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 04:05:44 JST 2001
+.\"         by Kentaro Shirakata <argrath@ub32.org>
 .\"
 .TH LOGIN 1
 .SH Ì¾Á°
 login \- ¥·¥¹¥Æ¥à¾å¤Ë¥»¥Ã¥·¥ç¥ó¤ò³«¤¯
 .SH ½ñ¼°
-.B login
-[ username [ environmental-variables ] ]
+\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 ÀâÌÀ
-.I login
+.B login
 ¤Ï¥·¥¹¥Æ¥à¤Ë¿·¤¿¤Ë¥»¥Ã¥·¥ç¥ó¤ò³«¤¯¤¿¤á¤ËÍѤ¤¤é¤ì¤ë¡£
 Ä̾ï¤Ï¡¢¥æ¡¼¥¶¤ÎüËö¤Ëɽ¼¨¤µ¤ì¤ë
-.B login:
-¤È¤¤¤¦¥×¥í¥ó¥×¥È¤Ë±þ¤¨¤ë»ö¤Ë¤è¤Ã¤Æ¼«Æ°Åª¤Ëµ¯Æ°¤µ¤ì¤ë¡£
-.I login
+.I login:
+¤È¤¤¤¦¥×¥í¥ó¥×¥È¤Ë±þ¤¸¤ë»ö¤Ë¤è¤Ã¤Æ¼«Æ°Åª¤Ëµ¯Æ°¤µ¤ì¤ë¡£
+.B login
 ¤Ï¥·¥§¥ë¤Ë¤Î¤ß¸ÂÄꤵ¤ì¤Æ¤ª¤ê¡¢¥µ¥Ö¥×¥í¥»¥¹¤È¤·¤Æµ¯Æ°¤¹¤ë¤³¤È¤Ï½ÐÍè¤Ê¤¤¡£
 Åµ·¿Åª¤Ë¤Ï¡¢¥·¥§¥ë¤Ï
-.I login
+.B login
 ¤ò
 \fBexec login\fR¤È¸«Ðö¤¹¤Î¤Ç¡¢¥æ¡¼¥¶¤Ï¸½ºß¤Î¥·¥§¥ë¤«¤éÈ´¤±¤ë¤³¤È¤Ë¤Ê¤ë¡£
-¥í¥°¥¤¥ó¥·¥§¥ë°Ê³°¤«¤é\fIlogin\fR¤òµ¯Æ°¤·¤è¤¦¤È¤¹¤ë¤È¡¢¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸¤¬
+¥í¥°¥¤¥ó¥·¥§¥ë°Ê³°¤«¤é\fBlogin\fR¤òµ¯Æ°¤·¤è¤¦¤È¤¹¤ë¤È¡¢¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸¤¬
 É½¼¨¤µ¤ì¤ë¡£
 .PP
-\fBlogin:\fR¥×¥í¥ó¥×¥È¤«¤éµ¯Æ°¤·¤¿ºÝ¤Ï¡¢¥æ¡¼¥¶Ì¾¤Ë³¤¤¤Æ´Ä¶­ÊÑ¿ô¤òÆþÎÏ
+\fIlogin:\fR¥×¥í¥ó¥×¥È¤«¤éµ¯Æ°¤·¤¿ºÝ¤Ï¡¢¥æ¡¼¥¶Ì¾¤Ë³¤¤¤Æ´Ä¶­ÊÑ¿ô¤òÆþÎÏ
 ¤¹¤ë»ö¤â¤Ç¤­¤ë¡£
 ¤½¤ì¤é¤òÆþÎϤ¹¤ë¾ì¹ç¤Ï\fBNAME=VALUE\fR¤È¤¤¤¦½ñ¼°¤Ç¹Ô¤¦¡£
 ¤³¤ÎÊýË¡¤ÇÁ´¤Æ¤ÎÊÑ¿ô¤òÀßÄê¤Ç¤­¤ë¤ï¤±¤Ç¤Ï¤Ê¤¤¡£
-ÀßÄê¤Ç¤­¤Ê¤¤¤â¤Î¤ÎÂåɽÎã¤È¤·¤Æ¡¢\fBPATH\fR¡¢\fBHOME\fRµÚ¤Ó\fBSHELL\fR¤¬
+ÀßÄê¤Ç¤­¤Ê¤¤¤â¤Î¤ÎÂåɽÎã¤È¤·¤Æ¡¢\fBPATH\fR, \fBHOME\fR, \fBSHELL\fR¤¬
 ¤¢¤ë¡£
 ²Ã¤¨¤Æ¡¢¥í¥°¥¤¥ó¥·¥§¥ë¤¬\fB/bin/sh\fR¤Î¾ì¹ç¤Ï\fBIFS\fR¤ÎÀßÄê¤â
 ¹Ô¤¦»ö¤¬½ÐÍè¤Ê¤¤¡£
 .PP
 ¼¡¤¤¤Ç¡¢É¬Íפʤé¤Ð¡¢¥Ñ¥¹¥ï¡¼¥É¤ÎÆþÎϤòÂ¥¤µ¤ì¤ë¡£
 ¥Ñ¥¹¥ï¡¼¥É¤òÌÀ¤«¤·¤Æ¤·¤Þ¤ï¤Ê¤¤¤¿¤á¤Ë¡¢¥¨¥³¡¼¤Ï¹Ô¤ï¤ì¤Ê¤¤¡£
-¿ô²ó°Ê¾å¥Ñ¥¹¥ï¡¼¥ÉÆþÎϤ˼ºÇÔ¤¹¤ë¤È\fIlogin\fR¤Ï½ªÎ»¤·ÄÌ¿®¤ÎÀܳ¤Ï
+¿ô²ó°Ê¾å¥Ñ¥¹¥ï¡¼¥ÉÆþÎϤ˼ºÇÔ¤¹¤ë¤È\fBlogin\fR¤Ï½ªÎ»¤·ÄÌ¿®¤ÎÀܳ¤Ï
 ÀÚÃǤµ¤ì¤Æ¤·¤Þ¤¦¡£
 .PP
 ¥¢¥«¥¦¥ó¥È¤ËÂФ·¤Æ¥Ñ¥¹¥ï¡¼¥É¤ÎÍ­¸ú´ü¸Â¤¬ÀßÄꤵ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ï¡¢
 Àè¤Ë¿Ê¤àÁ°¤Ë¿·¤·¤¤¥Ñ¥¹¥ï¡¼¥É¤ÎÀßÄê¤òÂ¥¤µ¤ì¤ë¤³¤È¤â¤¢¤ë¡£
 ¥»¥Ã¥·¥ç¥ó¤ò³¤±¤ë¤¿¤á¤Ë¤Ï¸Å¤¤¥Ñ¥¹¥ï¡¼¥ÉµÚ¤Ó¿·¤·¤¤¥Ñ¥¹¥ï¡¼¥É¤òÆþÎÏ
 ¤·¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
-¾Ü¤·¤¤¾ðÊó¤Ï\fIpasswd(1)\fR¤ò»²¾È¤»¤è¡£
+¾Ü¤·¤¤¾ðÊó¤Ï\fBpasswd\fR (1)¤ò»²¾È¤»¤è¡£
 .PP
 ¥í¥°¥¤¥ó¤ËÀ®¸ù¤¹¤ë¤È¡¢¥·¥¹¥Æ¥à¤Ë´Ø¤¹¤ë¾ðÊó¤ä¥á¥¤¥ë¤Î̵ͭ¤¬É½¼¨¤µ¤ì¤ë¡£
-¥í¥°¥¤¥ó¥Ç¥£¥ì¥¯¥È¥ê¤ËŤµ0¤Î¥Õ¥¡¥¤¥ë\fI.hushlogin\fR¤òºî¤Ã¤Æ¤ª¤¯¤³¤È¤Ç¡¢
+¥í¥°¥¤¥ó¥Ç¥£¥ì¥¯¥È¥ê¤ËŤµ 0 ¤Î¥Õ¥¡¥¤¥ë\fI.hushlogin\fR¤òºî¤Ã¤Æ¤ª¤¯¤³¤È¤Ç¡¢
 ¥·¥¹¥Æ¥à¤Î¥á¥Ã¥»¡¼¥¸¥Õ¥¡¥¤¥ë¡¢Â¨¤Á\fI/etc/motd\fR¤¬É½¼¨¤µ¤ì¤Ê¤¯¤¹¤ë¤³¤È
 ¤â½ÐÍè¤ë¡£
 ¥á¥¤¥ë¤Ë´Ø¤¹¤ë¥á¥Ã¥»¡¼¥¸¤È¤·¤Æ¤Ï¡¢¥á¥¤¥ë¥Ü¥Ã¥¯¥¹¤Î¾õÂ֤ˤè¤Ã¤Æ
-"\fIYou have new mail.\fR"¡¢
-"\fIYou have mail.\fR"¡¢¤â¤·¤¯¤Ï "\fINo Mail.\fR"¤Î¤¤¤º¤ì¤¬É½¼¨¤µ¤ì¤ë¡£
+"\fBYou have new mail.\fR",
+"\fBYou have mail.\fR", "\fBNo Mail.\fR"¤Î¤¤¤º¤ì¤¬É½¼¨¤µ¤ì¤ë¡£
 .PP
 ¥æ¡¼¥¶µÚ¤Ó¥°¥ë¡¼¥×¤ÎID¤Ï\fI/etc/passwd\fR¥Õ¥¡¥¤¥ëÃæ¤Ëµ­ºÜ¤µ¤ì¤Æ¤¤¤ëÃÍ
 ¤Ë¤è¤Ã¤ÆÀßÄꤵ¤ì¤ë¡£
-\fB$HOME\fR¡¢\fB$SHELL\fR¡¢\fB$PATH\fR¡¢\fB$LOGNAME\fRµÚ¤Ó\fB$MAIL\fR¤ÎÃÍ
+\fB$HOME\fR, \fB$SHELL\fR, \fB$PATH\fR, \fB$LOGNAME\fR, \fB$MAIL\fR¤ÎÃÍ
 ¤Ï¥Ñ¥¹¥ï¡¼¥É¥¨¥ó¥È¥ê¡¼Ãæ¤ÎÂбþ¤¹¤ëÍó¤Ëµ­¤µ¤ì¤¿Ãͤˤè¤Ã¤ÆÀßÄꤵ¤ì¤ë¡£
-ulimit¡¢umaskµÚ¤ÓniceÃͤòGECOSÍó¤Î¥¨¥ó¥È¥ê¡¼¤Ë¤è¤Ã¤ÆÀßÄꤹ¤ë¤³¤È¤â¤Ç¤­¤ë¡£
+ulimit, umask, niceÃͤò GECOS Íó¤Î¥¨¥ó¥È¥ê¡¼¤Ë¤è¤Ã¤ÆÀßÄꤹ¤ë¤³¤È¤â¤Ç¤­¤ë¡£
 .PP
 ¥¤¥ó¥¹¥È¥ì¡¼¥·¥ç¥ó¤Ë¤è¤Ã¤Æ¤Ï¡¢
 tty¥Ç¥Ð¥¤¥¹¤ÎüËö¤Î¼ïÎà¤Ë¤¢¤ï¤»¤Æ¡¢
@@ -98,19 +99,40 @@ tty
 .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 ¥ª¥×¥·¥ç¥ó¤Ï \fBlogin\fP ¤¬ root ¤È¤·¤Æµ¯Æ°¤µ¤ì¤¿
+¾ì¹ç¤Ë¤Î¤ßÍѤ¤¤é¤ì¤ë¡£
 .SH ·Ù¹ð
 .PP
-¤³¤ÎÈǤÎ\fIlogin\fR¤Ë¤Ï¿¤¯¤Î¥³¥ó¥Ñ¥¤¥ë»þ¥ª¥×¥·¥ç¥ó¤¬¤¢¤ë¤¬¡¢
+¤³¤ÎÈǤÎ\fBlogin\fR¤Ë¤Ï¿¤¯¤Î¥³¥ó¥Ñ¥¤¥ë»þ¥ª¥×¥·¥ç¥ó¤¬¤¢¤ë¤¬¡¢
 ¥µ¥¤¥È¤Ë¤è¤Ã¤Æ¤Ï¡¢¤½¤Î¤¦¤Á¤Î¤¤¤¯¤Ä¤«¤·¤«»È¤ï¤ì¤Æ¤¤¤Ê¤¤¤³¤È¤â¤¢¤ë¡£
 .PP
 ¥·¥¹¥Æ¥à¤ÎÀßÄê¤Î°ã¤¤¤Ë¤è¤Ã¤Æ¾åµ­¥Õ¥¡¥¤¥ë¤Îºß½è¤Ï¤«¤ï¤ë¡£
-.SH shadow¥í¥°¥¤¥ó¥×¥í¥°¥é¥à¤Ç¤Î¥æ¡¼¥¶À©¸Â¤ÎÀßÄêÊýË¡
+.SH shadow ¥í¥°¥¤¥ó¥×¥í¥°¥é¥à¤Ç¤Î¥æ¡¼¥¶À©¸Â¤ÎÀßÄêÊýË¡
 .PP
-¤Þ¤º¡¢¥ê¥½¡¼¥¹¤ËÂФ·¤Æ²Ý¤·¤¿¤¤À©¸Â¤òµ­¤·¤¿¡¢root¤Î¤ß¤¬ÆÉ¤à¤³¤È¤Î½ÐÍè¤ë
-¥Õ¥¡¥¤¥ë(¥Ç¥£¥Õ¥©¥ë¥È¤Ç¤Ï\fB/etc/limits\fR¡¢
-¼ã¤·¤¯¤Ïconfig.hÃæ¤ÇÄêµÁ¤µ¤ì¤Æ¤¤¤ëLIMITS_FILE¤Ç»ØÄꤷ¤¿¤â¤Î)¤òºî¤ë¡£
-¥Ç¥£¥Õ¥©¥ë¥È¤Ç¤Ï¡¢'root'¤Ë¤Ïquota¤ÎÀ©¸Â¤Ï²Ý¤µ¤ì¤Ê¤¤¡£
-¼ÂºÝ¤Î¤È¤³¤í¡¢¤³¤Î¼êË¡¤Ë¤è¤Ã¤Æroot¤ÈƱ¸¢¤Î¥¢¥«¥¦¥ó¥È(UID¤¬0¤Î¥¢¥«¥¦¥ó¥È)
+¤Þ¤º¡¢¥ê¥½¡¼¥¹¤ËÂФ·¤Æ²Ý¤·¤¿¤¤À©¸Â¤òµ­¤·¤¿¡¢root ¤Î¤ß¤¬ÆÉ¤à¤³¤È¤Î½ÐÍè¤ë
+¥Õ¥¡¥¤¥ë(¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï\fB/etc/limits\fR¡¢
+¤Þ¤¿¤Ï config.h Ãæ¤ÇÄêµÁ¤µ¤ì¤Æ¤¤¤ë LIMITS_FILE ¤Ç»ØÄꤷ¤¿¤â¤Î)¤òºî¤ë¡£
+¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï¡¢'root'¤Ë¤Ï quota ¤ÎÀ©¸Â¤Ï²Ý¤µ¤ì¤Ê¤¤¡£
+¼ÂºÝ¤Î¤È¤³¤í¡¢¤³¤Î¼êË¡¤Ë¤è¤Ã¤Æ root ¤ÈƱ¸¢¤Î¥¢¥«¥¦¥ó¥È(UID ¤¬ 0 ¤Î¥¢¥«¥¦¥ó¥È)
 ¤ËÀ©¸Â¤ò²Ý¤¹¼êΩ¤Æ¤Ï¸ºß¤·¤Ê¤¤¡£
 .PP
 ³Æ¹Ô¤Ë¤Ï°Ê²¼¤Î½ñ¼°¤Ç¥æ¡¼¥¶¤Ø¤ÎÀ©¸Â¤ò½ñ¤¤¤Æ¤ª¤¯¡£
@@ -122,7 +144,7 @@ tty
 ³ÆÀ©¸Â¤Ï¼±Ê̻Ұìʸ»ú¤È¤½¤ì¤Ë³¤¯À©¸Â¿ôÃͤˤè¤Ã¤Æ»ØÄꤹ¤ë¡£
 ¼±Ê̻ҤȤ·¤ÆÍ­¸ú¤Ê¤â¤Î¤Ï:
 .br
-\fBC\fR: core¥Õ¥¡¥¤¥ë¥µ¥¤¥º¤ÎºÇÂçÃÍ (KB)
+\fBC\fR: core ¥Õ¥¡¥¤¥ë¥µ¥¤¥º¤ÎºÇÂçÃÍ (KB)
 .br
 \fBD\fR: ºÇÂç¤Î¥Ç¡¼¥¿¥µ¥¤¥º (KB)
 .br
@@ -136,7 +158,7 @@ tty
 .br
 \fBS\fR: ºÇÂç¤Î¥¹¥¿¥Ã¥¯¥µ¥¤¥º (KB)
 .br
-\fBT\fR: ºÇÂçCPU¥¿¥¤¥à (ʬ)
+\fBT\fR: ºÇÂç CPU ¥¿¥¤¥à (ʬ)
 .br
 \fBU\fR: ºÇÂç¥×¥í¥»¥¹¿ô
 .br
@@ -144,9 +166,9 @@ tty
 .PP
 Î㤨¤Ð¡¢\fBL2D2048N5\fR¤ÏÀµ¤·¤¤\fBLIMITS_STRING\fR¤Ç¤¢¤ë¡£
 .PP
-¥Ç¥£¥Õ¥©¥ë¥È¤Î¥¨¥ó¥È¥ê¡¼¤Ï'\fB*\fR'¤È¤¤¤¦¥æ¡¼¥¶Ì¾¤Çɽ¤µ¤ì¤ë¡£
-LIMITS_FILEÃæ¤ËÊ£¿ô¤Î'¥Ç¥£¥Õ¥©¥ë¥È'¥¨¥ó¥È¥ê¡¼¤¬ÀßÄꤵ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ï¡¢
-ºÇ¸å¤Î¤â¤Î¤¬¥Ç¥£¥Õ¥©¥ë¥È¥¨¥ó¥È¥ê¡¼¤È¤·¤ÆÍѤ¤¤é¤ì¤ë¡£
+¥Ç¥Õ¥©¥ë¥È¤Î¥¨¥ó¥È¥ê¡¼¤Ï'\fB*\fR'¤È¤¤¤¦¥æ¡¼¥¶Ì¾¤Çɽ¤µ¤ì¤ë¡£
+LIMITS_FILE Ãæ¤ËÊ£¿ô¤Î'¥Ç¥Õ¥©¥ë¥È'¥¨¥ó¥È¥ê¡¼¤¬ÀßÄꤵ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ï¡¢
+ºÇ¸å¤Î¤â¤Î¤¬¥Ç¥Õ¥©¥ë¥È¥¨¥ó¥È¥ê¡¼¤È¤·¤ÆÍѤ¤¤é¤ì¤ë¡£
 .SH ¥Õ¥¡¥¤¥ë
 /etc/utmp \- ¸½ºß¤Î¥í¥°¥¤¥ó¥»¥Ã¥·¥ç¥ó¤Î¥ê¥¹¥È
 .br
@@ -154,27 +176,32 @@ LIMITS_FILE
 .br
 /etc/passwd \- ¥æ¡¼¥¶¥¢¥«¥¦¥ó¥È¤Î¾ðÊó
 .br
-/etc/shadow \- shadow¤µ¤ì¤¿¥Ñ¥¹¥ï¡¼¥ÉµÚ¤Ó¡¢´ü¸Â¤Î¾ðÊó
+/etc/shadow \- shadow ¤µ¤ì¤¿¥Ñ¥¹¥ï¡¼¥ÉµÚ¤Ó¡¢´ü¸Â¤Î¾ðÊó
 .br
 /etc/motd \- ¥·¥¹¥Æ¥à¥á¥Ã¥»¡¼¥¸¥Õ¥¡¥¤¥ë
 .br
+/etc/nologin \- root °Ê³°¤Î¥æ¡¼¥¶¤Î¥í¥°¥¤¥ó¤òÍÞÀ©¤¹¤ë
+.br
 /etc/ttytype \- Ã¼Ëö¤Î¼ïÎà¤Î¥ê¥¹¥È
 .br
 /etc/limits \- ¥æ¡¼¥¶¤Ë²Ý¤¹¥·¥¹¥Æ¥à¥ê¥½¡¼¥¹¤Ø¤ÎÀ©¸Â
 .br
-$HOME/.profile \- ¥Ç¥£¥Õ¥©¥ë¥È¥·¥§¥ë¤Î½é´ü²½¥¹¥¯¥ê¥×¥È
+$HOME/.profile \- ¥Ç¥Õ¥©¥ë¥È¥·¥§¥ë¤Î½é´ü²½¥¹¥¯¥ê¥×¥È
 .br
 $HOME/.hushlogin \- ¥·¥¹¥Æ¥à¥á¥Ã¥»¡¼¥¸¤Îɽ¼¨¤ò¤È¤á¤ë
 .br
-.SH ´ØÏ¢¥³¥Þ¥ó¥É
-.PP
-getty(1M),
-mail(1),
-passwd(1),
-sh(1),
-su(1),
-d_passwd(4),
-passwd(4)
-.SH ËÝÌõ¼Ô
-¸Å¹âÏÂÄ÷ <furutaka@Flux.tokai.jaeri.go.jp>
+.SH ´ØÏ¢¹àÌÜ
+.PP
+.BR getty (8),
+.BR mail (1),
+.BR passwd (1),
+.BR sh (1),
+.BR su (1),
+.BR login.defs (5),
+.\" .BR d_passwd (5),
+.BR passwd (5),
+.BR nologin (5)
+.SH Ãø¼Ô
+Julianne Frances Haugh (jockgrrl@ix.netcom.com)
+
 
index e03c169b061a26b775b46930a44743364dc4fd64..6c4ef81c8ddb9829b6bdd74214f25dce02564e13 100644 (file)
@@ -1,54 +1,55 @@
+.\" This page is originally in the shadow package.
+.\"
+.\" Translated Fri 14 Feb 1997 by Kazuyoshi Furutaka <furutaka@Flux.tokai.jaeri.go.jp>
+.\"
 .\" this is comment
-.Dd April 30, 1994
-.Dt LOGIN.ACCESS 5
+.TH LOGIN.ACCESS 5
 .\" .Dt SKEY.ACCESS 5
 .\" .Os FreeBSD 1.2
-.Sh Ì¾Á°
-.Nm login.access
-.Nd ¥í¥°¥¤¥ó¥¢¥¯¥»¥¹¤ò¥³¥ó¥È¥í¡¼¥ë¤¹¤ë¥Æ¡¼¥Ö¥ë
+.SH Ì¾Á°
+login.access \- ¥í¥°¥¤¥ó¥¢¥¯¥»¥¹¤ò¥³¥ó¥È¥í¡¼¥ë¤¹¤ë¥Æ¡¼¥Ö¥ë
 .SH ÀâÌÀ
-.Nm login.access
+.I login.access
 ¥Õ¥¡¥¤¥ë¤Ë¤Ï¡¢¥í¥°¥¤¥ó¤òµö²ÄËô¤ÏµñÀ䤹¤ë(¥æ¡¼¥¶, ¥Û¥¹¥È)¤ÎÁȵڤÓ/Ëô¤Ï
 (¥æ¡¼¥¶, tty)¤ÎÁȤߤ¢¤ï¤»¤ò»ØÄꤹ¤ë¡£
-.Pp
+.PP
 Ã¯¤«¤¬¥í¥°¥¤¥ó¤·¤¿ºÝ¤Ï¡¢
-.Nm login.access
+.I login.access
 ¥Õ¥¡¥¤¥ë¤¬¥¹¥­¥ã¥ó¤µ¤ì¡¢ºÇ½é¤ËÉä¹ç¤¹¤ë(¥æ¡¼¥¶,¥Û¥¹¥È)¤ÎÁȹ礻¡¢¤â¤·¤¯¤Ï
 ¥Í¥Ã¥È¥ï¡¼¥¯·Ðͳ¤Î¥í¥°¥¤¥ó¤Ç¤Ê¤¤¾ì¹ç¤ÏºÇ½é¤ËÉä¹ç¤¹¤ë(¥æ¡¼¥¶, tty)¤ÎÁȤß
 ¹ç¤ï¤»¤òõ¤¹¡£
 ¤³¤Î¥Æ¡¼¥Ö¥ë¤Îµö²ÄÍó¤Ë¤è¤Ã¤Æ¥í¥°¥¤¥ó¤¬µö²Ä¤µ¤ì¤ë¤«µñÀ䤵¤ì¤ë¤«¤¬·è¤Þ¤ë¡£
-.Pp
+.PP
 ¥í¥°¥¤¥ó¥¢¥¯¥»¥¹À©¸æÉ½¤Î³Æ¹Ô¤Ë¤Ï3¤Ä¤ÎÍ󤬤¢¤ê¡¢Ê¸»ú":"¤Çʬ³ä¤µ¤ì¤Æ¤¤¤ë:
-µö²Ä:¥æ¡¼¥¶:Àܳ¸µ
-
-ºÇ½é¤ÎÍó¤Ï"+"(¥¢¥¯¥»¥¹¤òµö²Ä¤¹¤ë)¤â¤·¤¯¤Ï"-"(¥¢¥¯¥»¥¹¤òµñÈݤ¹¤ë)¤Ç¤Ê¤¯¤Æ¤Ï
+.sp 1
+.IR    µö²Ä : ¥æ¡¼¥¶ : Àܳ¸µ
+.sp 1
+ºÇ½é¤ÎÍó¤Ï"\fB+\fR"(¥¢¥¯¥»¥¹¤òµö²Ä¤¹¤ë)¤â¤·¤¯¤Ï"\fB-\fR"(¥¢¥¯¥»¥¹¤òµñÈݤ¹¤ë)¤Ç¤Ê¤¯¤Æ¤Ï
 ¤Ê¤é¤Ê¤¤¡£
-ÆóÈÖÌܤÎÍó¤Ï°ì¤Ä°Ê¾å¤Î¥í¥°¥¤¥ó̾¤Þ¤¿¤Ï¥°¥ë¡¼¥×̾¡¢¤â¤·¤¯¤ÏALL(ɬ¤ºÉä¹ç¤¹¤ë)
+ÆóÈÖÌܤÎÍó¤Ï°ì¤Ä°Ê¾å¤Î¥í¥°¥¤¥ó̾¤Þ¤¿¤Ï¥°¥ë¡¼¥×̾¡¢¤â¤·¤¯¤Ï
+.B ALL
+(ɬ¤ºÉä¹ç¤¹¤ë)
 ¤Ç¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
 »°ÈÖÌܤÎÍó¤Ï¡¢°ì¤Ä°Ê¾å¤Îtty̾(¥Í¥Ã¥È¥ï¡¼¥¯·Ðͳ¤Ç¤Ê¤¤¥í¥°¥¤¥ó¤Î¾ì¹ç)¡¢
-¥Û¥¹¥È̾¡¢("."¤Ç»Ï¤Þ¤ë)¥É¥á¥¤¥ó̾¡¢¥Û¥¹¥È¥¢¥É¥ì¥¹¡¢¤Þ¤¿¤Ï("."¤Ç½ª¤ï¤ë)
-¥¤¥ó¥¿¡¼¥Í¥Ã¥È¤Î¥Í¥Ã¥È¥ï¡¼¥¯Èֹ椫¤é¤Ê¤ë¥ê¥¹¥È¡¢ALL(ɬ¤ºÉä¹ç¤¹¤ë)Ëô¤Ï
-LOCAL("."¤òÁ´¤¯´Þ¤Þ¤Ê¤¤Ê¸»úÎóÁ´¤Æ¤ËÉä¹ç¤¹¤ë)¤Ç¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
+¥Û¥¹¥È̾¡¢("\fB.\fR"¤Ç»Ï¤Þ¤ë)¥É¥á¥¤¥ó̾¡¢¥Û¥¹¥È¥¢¥É¥ì¥¹¡¢¤Þ¤¿¤Ï("\fB.\fR"¤Ç½ª¤ï¤ë)
+¥¤¥ó¥¿¡¼¥Í¥Ã¥È¤Î¥Í¥Ã¥È¥ï¡¼¥¯Èֹ椫¤é¤Ê¤ë¥ê¥¹¥È¡¢
+.B ALL
+(ɬ¤ºÉä¹ç¤¹¤ë)Ëô¤Ï
+.B LOCAL
+("\fB.\fR"¤òÁ´¤¯´Þ¤Þ¤Ê¤¤Ê¸»úÎóÁ´¤Æ¤ËÉä¹ç¤¹¤ë)¤Ç¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
 NIS¤ò±¿ÍѤ·¤Æ¤¤¤ë¾ì¹ç¤Ï¡¢¥Û¥¹¥ÈËô¤Ï¥æ¡¼¥¶¤Î¥Ñ¥¿¡¼¥óÃæ¤Ë@netgroupname
 ¤ò»ØÄꤹ¤ë¤³¤È¤¬½ÐÍè¤ë¡£
-
-EXCEPT¥ª¥Ú¥ì¡¼¥¿¤òÍѤ¤¤ë¤³¤È¤Ë¤è¤ê¡¢¤È¤Æ¤â´Êά¤Ë¥ë¡¼¥ë¤ò»ØÄꤹ¤ë¤³¤È¤¬½ÐÍè¤ë¡£
-
+.PP
+.B EXCEPT
+¥ª¥Ú¥ì¡¼¥¿¤òÍѤ¤¤ë¤³¤È¤Ë¤è¤ê¡¢¤È¤Æ¤â´Êά¤Ë¥ë¡¼¥ë¤ò»ØÄꤹ¤ë¤³¤È¤¬½ÐÍè¤ë¡£
+.PP
 ¥í¥°¥¤¥ó¤¹¤ë¥æ¡¼¥¶Ì¾¤¬¤¤¤º¤ì¤Î̾Á°¤È¤âÉä¹ç¤·¤Ê¤¤¾ì¹ç¤Î¤ß¡¢group¥Õ¥¡¥¤¥ë
 ¤ò¸¡º÷¤¹¤ë¡£
 ¥æ¡¼¥¶Ì¾¤¬Íۤ˵­¤µ¤ì¤Æ¤¤¤ë¥°¥ë¡¼¥×¤Ë¤Î¤ßÉä¹ç¤¹¤ë: ¥×¥í¥°¥é¥à¤Ï¥æ¡¼¥¶¤Î
 ¼ç¥°¥ë¡¼¥×¤ÎidÈÖ¹æËø¤Ï¸«¤Ê¤¤¡£
-.Sh ¥Õ¥¡¥¤¥ë
-.Bl -tag -width /etc/login.access -compact
-.It Pa /etc/login.access
-.Nm login.access
-¥Õ¥¡¥¤¥ë¤Ï
-.Pa /etc
-¤ËÃÖ¤«¤ì¤Æ¤¤¤ë¡£
-.El
+.SH ¥Õ¥¡¥¤¥ë
+/etc/login.access
 .SH ´ØÏ¢¹àÌÜ
-.Xr login 1
+.BR login (1)
 .SH Ãø¼Ô
 Guido van Rooij
-.SH ËÝÌõ¼Ô
-¸Å¹âÏÂÄ÷ <furutaka@Flux.tokai.jaeri.go.jp>
index e5f00dc98491146a2a0d02f0dd8d9de2d5cfe8f6..77a0adb36dfe4d06559767ee4f4c5da275015f57 100644 (file)
@@ -1,4 +1,4 @@
-.\" Copyright 1991 - 1993, John F. Haugh II and Chip Rosenthal
+.\" Copyright 1991 - 1993, Julianne Frances Haugh and Chip Rosenthal
 .\" All rights reserved.
 .\"
 .\" Redistribution and use in source and binary forms, with or without
@@ -9,18 +9,14 @@
 .\" 2. Redistributions in binary form must reproduce 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
+.\" 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 JOHN HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" 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 JOHN HAUGH OR CONTRIBUTORS BE LIABLE
+.\" 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)
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\"    $Id: login.defs.5,v 1.1 2001/06/16 02:35:46 kloczek Exp $
+.\"    $Id: login.defs.5,v 1.2 2001/11/16 17:01:32 ankry Exp $
 .\"
 .\" 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>
 .\"
+.\" WORD: shadow login suite   shadow ¥í¥°¥¤¥óµ¡Ç½
 .TH LOGIN 5
 .SH Ì¾Á°
-/etc/login.defs \- Login¤ÎÀßÄê
+/etc/login.defs \- login¤ÎÀßÄê
 .SH ÀâÌÀ
 .I /etc/login.defs
-¥Õ¥¡¥¤¥ë¤Ïshadow login suite¤ËÂФ¹¤ë¥µ¥¤¥È¸ÇÍ­¤ÎÀßÄê¤ò¹Ô¤¦¤¿¤á¤Î¤â¤Î¤Ç¤¢¤ë¡£
+¥Õ¥¡¥¤¥ë¤Ï shadow ¥í¥°¥¤¥óµ¡Ç½¤ËÂФ¹¤ë¥µ¥¤¥È¸ÇÍ­¤ÎÀßÄê¤ò¹Ô¤¦¤¿¤á¤Î¤â¤Î¤Ç¤¢¤ë¡£
 ¤³¤Î¥Õ¥¡¥¤¥ë¤Ïɬ¤ºÂ¸ºß¤·¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£
 ¤³¤Î¥Õ¥¡¥¤¥ë¤¬Ìµ¤¯¤È¤â¥·¥¹¥Æ¥à±¿ÍѤϲÄǽ¤Ç¤¢¤ë¤¬¡¢¤ª¤½¤é¤¯Ë¾¤Þ¤Ê¤¤
 ·ë²Ì¤È¤Ê¤ë¤À¤í¤¦¡£
 .PP
 ¤³¤Î¥Õ¥¡¥¤¥ë¤ÏÆÉ¤ß¼è¤ê²Äǽ¤Ê¥Æ¥­¥¹¥È¥Õ¥¡¥¤¥ë¤Ç¡¢¥Õ¥¡¥¤¥ëÃæ¤Î°ì¹Ô¤Ë¤Ä¤­
-°ì¤Ä¤Î¥Ñ¥é¥á¥¿¤òÀßÄꤷ¤Æ¤¤¤ë¡£
+°ì¤Ä¤Î¥Ñ¥é¥á¡¼¥¿¤òÀßÄꤷ¤Æ¤¤¤ë¡£
 ³Æ¹Ô¤ÏÀßÄê¥Ñ¥é¥á¡¼¥¿¤Î̾Á°µÚ¤Ó¤½¤ÎÃͤ¬¶õÇò¤Ç¶èÀÚ¤é¤ì¤¿¤â¤Î¤«¤é¤Ê¤ë¡£
 ¶õ¹ÔµÚ¤Ó¥³¥á¥ó¥È¹Ô¤Ï̵»ë¤µ¤ì¤ë¡£
-¥³¥á¥ó¥È¹Ô¤Ï'#'µ­¹æ¤Ç»Ï¤Þ¤ë¡£µ­¹æ'#'¤Ï¤½¤Î¹Ô¤ÎºÇ½é¤Î¶õÇò°Ê³°¤Îʸ»ú
+¥³¥á¥ó¥È¹Ô¤Ï`#'µ­¹æ¤Ç»Ï¤Þ¤ë¡£µ­¹æ`#'¤Ï¤½¤Î¹Ô¤Ç¤Î¶õÇò°Ê³°¤ÎºÇ½é¤Îʸ»ú
 ¤Ç¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
 .PP
 ¥Ñ¥é¥á¡¼¥¿ÃͤϻͤĤη¿¤ò¼è¤ë¤³¤È¤¬½ÐÍè¤ë: Ê¸»úÎó¡¢¥Ö¡¼¥ë·¿¡¢¿ô¡¢ÇÜÀºÅÙ¿ô
 .PP
 °Ê²¼¤Ë¼¨¤¹¤è¤¦¤ÊÀßÄê¹àÌܤ¬¤¢¤ë:
 .\"
+.IP "CHFN_AUTH (¥Ö¡¼¥ëÃÍ)"
+¤â¤·
+.I yes
+¤Ê¤é¡¢
+.B chfn
+¤È
+.B chsh
+¥×¥í¥°¥é¥à¤Ï¥¹¡¼¥Ñ¡¼¥æ¡¼¥¶¤¬µ¯Æ°¤·¤¿¤Î¤Ç¤Ê¤¤¸Â¤ê
+²¿¤é¤«¤ÎÊѹ¹¤ò¹Ô¤Ê¤¦Á°¤Ë¥Ñ¥¹¥ï¡¼¥É¤ò¿Ö¤Í¤ë¡£
+.\"
+.IP "CHFN_RESTRICT (ʸ»úÎó)"
+¤³¤Î¥Ñ¥é¥á¡¼¥¿¤Ï
+.I passwd
+¥Õ¥¡¥¤¥ë¤Î
+.I gecos
+¥Õ¥£¡¼¥ë¥É¤Î¤¦¤Á¡¢
+°ìÈ̥桼¥¶¤¬
+.B chfn
+¤ò»È¤Ã¤ÆÊѹ¹½ÐÍè¤ë¥Õ¥£¡¼¥ë¥É¤ò»ØÄꤹ¤ë¡£
+»ØÄꤹ¤ëʸ»úÎó¤Ï
+.IR f ,
+.IR r ,
+.IR w ,
+.I h
+¤Îʸ»ú¤ÎǤ°Õ¤ÎÁȤ߹ç¤ï¤»¤Ç¡¢¤½¤ì¤¾¤ì¥Õ¥ë¥Í¡¼¥à¡¢Éô²°Èֹ桢
+¿¦¾ìÅÅÏÃÈֹ桢¼«ÂðÅÅÏÃÈÖ¹æ¤ò°ÕÌ£¤¹¤ë¡£
+»ØÄꤵ¤ì¤Ê¤«¤Ã¤¿¾ì¹ç¤Ï¡¢¥¹¡¼¥Ñ¡¼¥æ¡¼¥¶¤À¤±¤¬Á´¤Æ¤Î¹àÌܤòÊѹ¹½ÐÍè¤ë¡£
+.\"
+.IP "CLOSE_SESSIONS (¥Ö¡¼¥ëÃÍ)"
+pam_close_session() ¸Æ¤Ó½Ð¤·¤òÍ­¸ú¤Ë¤¹¤ë¡£
+Ä̾ï¤Î(pam_unix.so)¥»¥Ã¥·¥ç¥ó´ÉÍý¥â¥¸¥å¡¼¥ë¤ò»È¤¦¾ì¹ç¤Ï¡¢¤³¤ì¤ÏÉÔÍפǤ¢¤ë¡£
+¤·¤«¤· kerberos ¤ä¤½¤Î¾¤Î±Ê³Ū¥»¥Ã¥·¥ç¥ó¥â¥Ç¥ë¤òÍѤ¤¤ë¥â¥¸¥å¡¼¥ë¤Ç¤Ï¡¢
+.B login
+¤Ï fork ¤·¤Æ¥·¥§¥ë¤¬½ªÎ»¤¹¤ë¤Î¤òÂÔ¤ÄɬÍפ¬¤¢¤ê¡¢
+¤½¤ì¤Ç¥»¥Ã¥·¥ç¥ó¤ò¥¯¥ê¡¼¥ó¥¢¥Ã¥×½ÐÍè¤ë¡£
+.\"
 .IP "CONSOLE (ʸ»úÎó)"
 ¤³¤Î¹àÌܤò»ØÄꤹ¤ë¤È¡¢root¤¬¥í¥°¥¤¥ó¤Ç¤­¤ë¥³¥ó¥½¡¼¥ë¥Ç¥Ð¥¤¥¹¤òÀ©¸Â¤¹¤ë
 ¤³¤È¤¬½ÐÍè¤ë¡£
 ¤·¤è¤¦¤È¤·¤Æ¤âµñÈݤµ¤ì¤ë¡£¤³¤Î¹àÌܤÎÀßÄê¤ÏÆó¤Ä¤Î·Á¼°¤òÍѤ¤¤ë¤³¤È¤¬½ÐÍè¡¢
 ¤Ò¤È¤Ä¤Ï
 .sp
-.ft CW
+.ft I
        CONSOLE /etc/consoles
-.ft P
+.ft R
 .sp
 ¤ÎÍͤÊÀäÂХѥ¹¤òÍѤ¤¤¿»ØÄêË¡¡¢
 º£°ì¤Ä¤Ï
 .sp
-.ft CW
+.ft I
        CONSOLE console:tty01:tty02:tty03:tty04
-.ft P
+.ft R
 .sp
 ¤ÎÍͤ˥³¥í¥ó¤Ç¶èÀÚ¤é¤ì¤¿¥ê¥¹¥È¤ÇüËöÀþ¤ò»ØÄꤹ¤ëÊýË¡¤Ç¤¢¤ë¡£
 ¥Ñ¥¹Ì¾¤ò»ØÄꤹ¤ë¾ì¹ç¤Ï¡¢°ì¹Ô¤Ç°ì¤Ä¤ÎüËöÀܳÀþ¤ò»ØÄꤷ¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
@@ -92,6 +129,15 @@ root
 ¥»¥­¥å¥ê¥Æ¥£¤¬Èó¾ï¤Ë½ÅÍפǤ¢¤ë¾ì¹ç¤Ï¡¢¤³¤Î¤è¤¦¤Ê¥¢¥¿¥Ã¥¯¤Î²ÄǽÀ­¤ò̵¤¯¤¹
 ¤¿¤á¤Ë¡¢¥³¥í¥ó¤Ç¶èÀڤä¿·Á¼°¤òÍѤ¤¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
 .\"
+.IP "CONSOLE_GROUPS (ʸ»úÎó)"
+XXX Ê¸½ñ²½¤ÎɬÍפ¢¤ê¡£
+.\"
+.IP "CRACKLIB_DICTPATH (ʸ»úÎó)"
+XXX Ê¸½ñ²½¤ÎɬÍפ¢¤ê¡£
+.\"
+.IP "DEFAULT_HOME (¥Ö¡¼¥ëÃÍ)"
+XXX Ê¸½ñ²½¤ÎɬÍפ¢¤ê¡£
+.\"
 .IP "DIALUPS_CHECK_ENAB (¥Ö¡¼¥ëÃÍ)"
 Ãͤ¬
 .I yes
@@ -103,21 +149,25 @@ root
 »ØÄꤷ¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤:
 .nf
 .sp
-.ft CW
+.ft I
        ttyfm01
        ttyfm02
        \0\0.
        \0\0.
        \0\0.
-.ft P
+.ft R
 .sp
 .fi
 .\"
+.IP "ENVIRON_FILE (ʸ»úÎó)"
+¥í¥°¥¤¥ó¤·¤¿¤ê su ¤·¤¿¤ê¤·¤¿»þ¤Ë¥»¥Ã¥È¤¹¤ë´Ä¶­ÊÑ¿ô¤Î¥ê¥¹¥È (°ì¹Ô¤Ë¤Ò¤È¤Ä¤º¤Ä)
+¤¬½ñ¤«¤ì¤¿¥Õ¥¡¥¤¥ë¡£
+.\"
 .IP "ENV_HZ (ʸ»úÎó)"
 ¤³¤Î¥Ñ¥é¥á¡¼¥¿¤Ë¤ÏHZ´Ä¶­ÊÑ¿ô¤ÎÆâÍÆ¤ò»ØÄꤹ¤ë¡£
 »ÈÍÑÎã¤Ï:
 .sp
-       \f(CWENV_HZ     HZ=50\fP
+       \fIENV_HZ     HZ=50\fR
 .sp
 ¤³¤Î¥Ñ¥é¥á¡¼¥¿¤¬ÄêµÁ¤µ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ï¡¢HZ¤ÎÃͤϽé´ü²½¤µ¤ì¤Ê¤¤¡£
 .\"
@@ -126,14 +176,14 @@ root
 UID¤¬¥¼¥í°Ê³°¤Î¥æ¡¼¥¶¤¬¥í¥°¥¤¥ó¤·¤¿¾ì¹ç¡¢´Ä¶­ÊÑ¿ôPATH¤ÎÆâÍÆ¤Ï¤³¤Î
 Ãͤ˽é´ü²½¤µ¤ì¤ë¡£
 ¤³¤Î¥Ñ¥é¥á¡¼¥¿¤Ïɬ¤ºÉ¬ÍפǤ¢¤ë; ÄêµÁ¤µ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ï¸í¤Ã¤¿
-¥Ç¥£¥Õ¥©¥ë¥ÈÃͤËÀßÄꤵ¤ì¤Æ¤·¤Þ¤¦¤À¤í¤¦¡£
+¥Ç¥Õ¥©¥ë¥ÈÃͤËÀßÄꤵ¤ì¤Æ¤·¤Þ¤¦¤À¤í¤¦¡£
 .\"
 .IP "ENV_SUPATH (ʸ»úÎó)"
 ¤³¤Î¥Ñ¥é¥á¡¼¥¿¤Ï¥¹¡¼¥Ñ¡¼¥æ¡¼¥¶¤Î¸¡º÷¥Ñ¥¹¤ËÀßÄꤷ¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
 UID¤¬¥¼¥í¤Î¥æ¡¼¥¶¤¬¥í¥°¥¤¥ó¤·¤¿¾ì¹ç¡¢´Ä¶­ÊÑ¿ôPATH¤ÎÆâÍÆ¤Ï¤³¤Î
 Ãͤ˽é´ü²½¤µ¤ì¤ë¡£
 ¤³¤Î¥Ñ¥é¥á¡¼¥¿¤Ïɬ¤ºÉ¬ÍפǤ¢¤ë; ÄêµÁ¤µ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ï¸í¤ê¤Î¤¢¤êÆÀ¤ë
-¥Ç¥£¥Õ¥©¥ë¥ÈÃͤËÀßÄꤵ¤ì¤Æ¤·¤Þ¤¦¤À¤í¤¦¡£
+¥Ç¥Õ¥©¥ë¥ÈÃͤËÀßÄꤵ¤ì¤Æ¤·¤Þ¤¦¤À¤í¤¦¡£
 .\"
 .IP "ENV_TZ (ʸ»úÎó)"
 ¤³¤Î¥Ñ¥é¥á¡¼¥¿¤Ë¤Ï´Ä¶­ÊÑ¿ôTZ¤òºî¤ê½Ð¤¹¤¿¤á¤Î¾ðÊó¤ò»ØÄꤹ¤ë¡£
@@ -141,13 +191,13 @@ UID
 ÀäÂХѥ¹Ì¾¤Ç¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
 »ÈÍÑÎã¤Ï:
 .sp
-       \f(CWENV_TZ\0\0\0\0TZ=CST6CDT\fP
+       \fIENV_TZ\0\0\0\0TZ=CST6CDT\fP
 .sp
 Ëô¤Ï
 .sp
-       \f(CWENV_TZ\0\0\0\0/etc/tzname\fP
+       \fIENV_TZ\0\0\0\0/etc/tzname\fP
 .sp
-¸ºß¤·¤Ê¤¤¥Õ¥¡¥¤¥ë¤ò»ØÄꤷ¤¿¾ì¹ç¡¢TZ¤Ï¤¢¤ë¥Ç¥£¥Õ¥©¥ë¥ÈÃͤ˽é´ü²½¤µ¤ì¤ë¡£
+¸ºß¤·¤Ê¤¤¥Õ¥¡¥¤¥ë¤ò»ØÄꤷ¤¿¾ì¹ç¡¢TZ¤Ï¤¢¤ë¥Ç¥Õ¥©¥ë¥ÈÃͤ˽é´ü²½¤µ¤ì¤ë¡£
 ¤³¤Î¥Ñ¥é¥á¡¼¥¿¤¬Ì¤ÄêµÁ¤Î¾ì¹ç¤ÏTZ¤ÎÃͤϽé´ü²½¤µ¤ì¤Ê¤¤¡£
 .\"
 .IP "ERASECHAR (¿ô)"
@@ -164,9 +214,18 @@ UID
 ¤ËÀßÄꤷ¤¿¾ì¹ç¤Ï¡¢¥í¥°¥¤¥ó¤Î¼ºÇÔ¤¬
 .I /var/log/faillog
 Ãæ¤Ë
-.I faillog(8)
+.BR faillog (8)
 ¤Î½ñ¼°¤Çµ­Ï¿¤µ¤ì¤ë¡£
 .\"
+.IP "FAIL_DELAY (¿ô)"
+¥í¥°¥¤¥ó¤¬¼ºÇÔ¤¹¤ëËè¤ËÃٱ䤵¤»¤ëÉÿô¡£
+.\"
+.IP "FAKE_SHELL (ʸ»úÎó)"
+ËÜÅö¤Î¥æ¡¼¥¶¡¼¥·¥§¥ë¤ÎÂå¤ï¤ê¤Ë¡¢¤³¤Î¥Ñ¥é¥á¡¼¥¿¤Ç»ØÄꤵ¤ì¤¿¥×¥í¥°¥é¥à¤¬µ¯Æ°¤µ¤ì¤ë¡£
+¤·¤«¤·¡¢¤½¤ÎÌܤ˸«¤¨¤ë̾Á° (argv[0]) ¤Ï¸µ¤Î¥·¥§¥ë¤È¤Ê¤ë¡£
+µ¯Æ°¤µ¤ì¤¿¥×¥í¥°¥é¥à¤Ï¼ÂºÝ¤Î¥·¥§¥ë¤Îµ¯Æ°Á°¤ËɬÍפʺî¶È
+(¥í¥®¥ó¥°¡¢ÄɲÃǧ¾Ú¡¢¥Ð¥Ê¡¼¡¢...)¤¬¹Ô¤Ê¤¨¤ë¡£
+.\"
 .IP "FTMP_FILE (ʸ»úÎó)"
 ¤³¤Î¥Ñ¥é¥á¡¼¥¿¤Ë¤Ï¥í¥°¥¤¥ó¼ºÇÔ¤òµ­Ï¿¤¹¤ë¥Õ¥¡¥¤¥ë¤ÎÀäÂХѥ¹Ì¾¤ò»ØÄꤹ¤ë¡£
 ¥í¥°¥¤¥ó¼ºÇÔ¤¬È¯À¸¤·¤¿¾ì¹ç¡¢¤½¤Îµ­Ï¿¤¬¤³¤Î¥Õ¥¡¥¤¥ë¤Ë
@@ -181,6 +240,11 @@ UID
 ¤³¤Î¥Ñ¥é¥á¡¼¥¿¤¬»ØÄꤵ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ï¥í¥®¥ó¥°¤¬ÍÞÀ©¤µ¤ì¤ë¡£
 ´ØÏ¢¾ðÊó¤ÏFAILLOG_ENAB¤ÈLOG_UNKFAIL_ENAB¤ò»²¾È¤»¤è¡£
 .\"
+.IP "GID_MAX (¿ô)"
+.IP "GID_MIN (¿ô)"
+.B groupadd
+¥×¥í¥°¥é¥à¤¬¥°¥ë¡¼¥×ID¤òÁªÂò¤¹¤ë»þ¤ÎÈϰϡ£
+.\"
 .IP "HUSHLOGIN_FILE (ʸ»úÎó)"
 ¤³¤Î¥Ñ¥é¥á¡¼¥¿¤Ï``hushlogin''¤Î¾ò·ï¤òÀßÄꤹ¤ë¤¿¤á¤ËÍѤ¤¤ë¡£
 ¤³¤ÎÀßÄê¤ò¹Ô¤¦ÊýË¡¤Ë¤ÏÆóÄ̤ꤢ¤ë¡£
@@ -195,13 +259,13 @@ UID
 ¤³¤Î¾ì¹ç¡¢¥Õ¥¡¥¤¥ë¤Ï°Ê²¼¤ÎÍͤʽñ¼°¤Ç¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤:
 .nf
 .sp
-.ft CW
+.ft I
        demo
        /usr/lib/uucp/uucico
        \0\0.
        \0\0.
        \0\0.
-.ft P
+.ft R
 .sp
 .fi
 ¤³¤Î¥Ñ¥é¥á¡¼¥¿¤¬Ì¤ÄêµÁ¤Î¾ì¹ç¤Ï¡¢``hushlogin''¾ò·ï¤¬À®Î©¤¹¤ë¤³¤È¤Ï̵¤¤¡£
@@ -213,6 +277,9 @@ UID
 ´ØÏ¢¤¹¤ë¾ðÊó¤ÏMOTD_FILE, FAILLOG_ENAB, LASTLOG_ENAB, µÚ¤ÓMAIL_CHECK_ENAB
 ¤ò»²¾È¤»¤è¡£ 
 .\"
+.IP "ISSUE_FILE (ʸ»úÎó)"
+¥í¥°¥¤¥ó¥×¥í¥ó¥×¥È¤ò½Ð¤¹Á°¤Ëɽ¼¨¤¹¤ë¥Õ¥¡¥¤¥ë¤Î¥Õ¥ë¥Ñ¥¹Ì¾¡£
+.\"
 .IP "KILLCHAR (¿ô)"
 Ã¼Ëö¤Î
 .I kill
@@ -224,7 +291,7 @@ UID
 .\"
 .IP "LASTLOG_ENAB (¥Ö¡¼¥ëÃÍ)"
 ¤³¤Î¥Ñ¥é¥á¡¼¥¿¤ò
-.IR yes ,
+.I yes
 ¤ËÀßÄꤷ¡¢³î¤Ä¥Õ¥¡¥¤¥ë
 .I /var/log/lastlog
 ¤¬Â¸ºß¤¹¤ë¾ì¹ç¡¢¥æ¡¼¥¶¤¬¥í¥°¥¤¥ó¤ËÀ®¸ù¤·¤¿µ­Ï¿¤¬¤³¤Î¥Õ¥¡¥¤¥ë¤Ë»Ä¤µ¤ì¤ë¡£
@@ -233,6 +300,16 @@ UID
 ¥í¥°¥¤¥ó¼ºÇÔ¤Îɽ¼¨¤Ï¹Ô¤ï¤ì¤Ê¤¤¡£
 ``hushlogin''¾ò·ï¤¬À®¤êΩ¤Ã¤Æ¤¤¤ë¾ì¹ç¤Ï¥í¥°¥¤¥óÀ®¸ù¤â¼ºÇÔ¤âɽ¼¨¤µ¤ì¤Ê¤¤¡£
 .\"
+.IP "LOGIN_RETRIES (¿ô)"
+.B login
+¥×¥í¥°¥é¥à¤¬½ªÎ»¤¹¤ë¤Þ¤Ç¤Ë²Äǽ¤Ê¥í¥°¥¤¥ó¤ÎºÆ»î¹Ô¤Î¿ô¡£
+.\"
+.IP "LOGIN_STRING (ʸ»úÎó)"
+XXX Ê¸½ñ²½¤ÎɬÍפ¢¤ê¡£
+.IP "LOGIN_TIMEOUT (¿ô)"
+XXX Ê¸½ñ²½¤ÎɬÍפ¢¤ê¡£
+.IP "LOG_OK_LOGINS (¥Ö¡¼¥ëÃÍ)"
+XXX Ê¸½ñ²½¤ÎɬÍפ¢¤ê¡£
 .IP "LOG_UNKFAIL_ENAB (¥Ö¡¼¥ëÃÍ)"
 ¤³¤Î¥Ñ¥é¥á¡¼¥¿¤¬
 .I yes
@@ -245,7 +322,7 @@ UID
 .\"
 .IP "MAIL_CHECK_ENAB (¥Ö¡¼¥ëÃÍ)"
 ¤³¤Î¥Ñ¥é¥á¡¼¥¿¤ò
-.IR yes ,
+.I yes
 ¤ËÀßÄꤹ¤ë¤È¡¢¥í¥°¥¤¥ó»þ¤Ë¥æ¡¼¥¶¤Ë¥á¥¤¥ë¥Ü¥Ã¥¯¥¹¤Î¾õÂÖ¤òÄÌÃΤ¹¤ë¡£
 ´ØÏ¢¾ðÊó¤ÏMAIL_DIR¤ò»²¾È¤»¤è¡£
 .\"
@@ -254,8 +331,32 @@ UID
 ÀäÂХѥ¹¤ò»ØÄꤹ¤ë¡£
 ¤³¤Î¥Ñ¥¹¤Ë¥æ¡¼¥¶¤Î¥í¥°¥¤¥ó̾¤òÉÕ¤±Â­¤·¤ÆMAIL´Ä¶­ÊÑ¿ô \- ¥æ¡¼¥¶¤Î
 ¥á¥¤¥ë¥Ü¥Ã¥¯¥¹¤Ø¤Î¥Ñ¥¹ \- ¤òºî¤ê½Ð¤¹¡£
-¤³¤Î¥Ñ¥é¥á¡¼¥¿¤Ïɬ¤ºÄêµÁ¤·¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤; Ì¤ÄêµÁ¤Î¾ì¹ç¤ÏÀµ¤·¤¯¤Ê¤¤²ÄǽÀ­
-¤Î¤¢¤ë¥Ç¥£¥Õ¥©¥ë¥ÈÃͤ¬»È¤ï¤ì¤ë¡£´ØÏ¢¾ðÊó¤ÏMAIL_CHECK_ENAB¤ò»²¾È¤»¤è¡£
+¤³¤Î¥Ñ¥é¥á¡¼¥¿¤È MAIL_FILE ¤Î¤É¤Á¤é¤«¤Ïɬ¤ºÄêµÁ¤·¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤;
+̤ÄêµÁ¤Î¾ì¹ç¤ÏÀµ¤·¤¯¤Ê¤¤²ÄǽÀ­¤Î¤¢¤ë¥Ç¥Õ¥©¥ë¥ÈÃͤ¬»È¤ï¤ì¤ë¡£
+´ØÏ¢¾ðÊó¤ÏMAIL_CHECK_ENAB¤ò»²¾È¤»¤è¡£
+.\"
+.IP "MAIL_FILE (ʸ»úÎó)"
+¤³¤Î¥Ñ¥é¥á¡¼¥¿¤Ë¤Ï¥á¥¤¥ë¥Ü¥Ã¥¯¥¹¥Õ¥¡¥¤¥ë¤Î̾Á°¤ò»ØÄꤹ¤ë¡£
+¥æ¡¼¥¶¤Î¥Û¡¼¥à¥Ç¥£¥ì¥¯¥È¥ê¤Ë¤³¤Î̾Á°¤¬Äɲäµ¤ì¤Æ¡¢
+MAIL´Ä¶­ÊÑ¿ô \- ¥æ¡¼¥¶¤Î¥á¥¤¥ë¥Ü¥Ã¥¯¥¹¤Ø¤Î¥Ñ¥¹ \- ¤òºî¤ê½Ð¤¹¡£
+¤³¤Î¥Ñ¥é¥á¡¼¥¿¤È MAIL_DIR ¤Î¤É¤Á¤é¤«¤Ïɬ¤ºÄêµÁ¤·¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤;
+̤ÄêµÁ¤Î¾ì¹ç¤ÏÀµ¤·¤¯¤Ê¤¤²ÄǽÀ­¤Î¤¢¤ë¥Ç¥Õ¥©¥ë¥ÈÃͤ¬»È¤ï¤ì¤ë¡£
+´ØÏ¢¾ðÊó¤ÏMAIL_CHECK_ENAB¤ò»²¾È¤»¤è¡£
+.\"
+.IP "MD5_CRYPT_ENAB (¥Ö¡¼¥ëÃÍ)"
+.I yes
+¤Ê¤é¡¢
+.B passwd
+¥×¥í¥°¥é¥à¤Ï¿·¤·¤¯Êѹ¹¤µ¤ì¤¿¥Ñ¥¹¥ï¡¼¥É¤ò¿·¤·¤¤ MD5 ¥Ù¡¼¥¹¤Î
+.BR crypt (3)
+¥Ñ¥¹¥ï¡¼¥É¥Ï¥Ã¥·¥å¥¢¥ë¥´¥ê¥º¥à¤òÍѤ¤¤Æ°Å¹æ²½¤¹¤ë¡£
+¤³¤ì¤Ï FreeBSD ¤ÇºÇ½é¤ËºÎÍѤµ¤ì¡¢Linux ¤Ç¤Ï
+libc-5.4.38 ¤È glibc-2.0 (¤Þ¤¿¤Ï¤½¤ì°Ê¾å) ¤ÇÂбþ¤·¤Æ¤¤¤ë¡£
+¤³¤Î¥¢¥ë¥´¥ê¥º¥à¤Ï 8 Ê¸»ú°Ê¾å¤Î¥Ñ¥¹¥ï¡¼¥É¤ËÂбþ¤·¤Æ¤¤¤ë (
+.BR getpass (3)
+¤Ë¤è¤ê 127 Ê¸»ú¤ËÀ©¸Â¤µ¤ì¤ë)¤¬¡¢½¾Íè¤Î
+.BR crypt (3)
+¼ÂÁõ¤È¸ß´¹À­¤¬¤Ê¤¤¡£
 .\"
 .IP "MOTD_FILE (ʸ»úÎó)"
 ¤³¤Î¥Ñ¥é¥á¡¼¥¿¤Ë¤Ï``¤½¤ÎÆü¤Î¥á¥Ã¥»¡¼¥¸''¥Õ¥¡¥¤¥ë¤Ø¤Î¥Ñ¥¹Ì¾¤ò¥³¥í¥ó¤Ç¶èÀڤäÆ
@@ -266,27 +367,34 @@ UID
 ¤¬À®¤êΩ¤Ä¾ì¹ç¤Ë¤Ï¡¢É½¼¨¤Ï¹Ô¤ï¤ì¤Ê¤¤¡£
 .\"
 .IP "NOLOGINS_FILE (ʸ»úÎó)"
-.\" the user will be disconnected.  If this parameter is not specified
-.\" then this feature will be inhibited.
 ¤³¤Î¥Ñ¥é¥á¡¼¥¿¤Ë¤Ïroot°Ê³°¤Î¥í¥°¥¤¥ó¤ò¶Ø»ß¤¹¤ë¥Õ¥¡¥¤¥ë¤ÎÀäÂХѥ¹Ì¾¤ò»ØÄê
 ¤¹¤ë¡£
 ¤³¤Î¥Õ¥¡¥¤¥ë¤¬Â¸ºß¤¹¤ë¾ì¹ç¤Ë¤Ï¡¢root°Ê³°¤Î¥æ¡¼¥¶¤¬¥í¥°¥¤¥ó¤·¤è¤¦¤È¤·¤¿ºÝ
 ¥Õ¥¡¥¤¥ë¤ÎÃæ¿È¤¬É½¼¨¤µ¤ì¡¢¥í¥°¥¤¥ó¤ÏµñÈݤµ¤ì¤ë¡£¤³¤Î¥Ñ¥é¥á¡¼¥¿¤¬»ØÄꤵ¤ì¤Æ
 ¤¤¤Ê¤¤¾ì¹ç¤Ï¤³¤Îµ¡Ç½¤Ï»ÈÍѤǤ­¤Ê¤¤¡£
 .\"
+.IP "NOLOGIN_STR (ʸ»úÎó)"
+XXX Ê¸½ñ²½¤ÎɬÍפ¢¤ê¡£
+.\"
 .IP "OBSCURE_CHECKS_ENAB (¥Ö¡¼¥ëÃÍ)"
 ¤³¤Î¥Ñ¥é¥á¡¼¥¿¤¬
-.IR yes
+.I yes
 ¤ËÀßÄꤵ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ï¡¢¥Ñ¥¹¥ï¡¼¥ÉÊѹ¹¤ò¼õ¤±ÉÕ¤±¤ëÁ°¤Ë¥×¥í¥°¥é¥à
-.I passwd
+.B passwd
 ¤¬Í¾Ê¬¤Ë¥Á¥§¥Ã¥¯¤ò¹Ô¤¦¡£
 ¹Ô¤ï¤ì¤ë¥Á¥§¥Ã¥¯¤ÏÈó¾ï¤Ëñ½ã¤Ç¤¢¤ê¡¢À§Èó¤È¤âÍѤ¤¤ë¤Ù¤­¤Ç¤¢¤ë¡£
-.I passwd
+.B passwd
 ¥×¥í¥°¥é¥à¤¬
-.IR root
+.I root
 ¤Ë¤è¤Ã¤Æ¼Â¹Ô¤µ¤ì¤¿¾ì¹ç¤Ï¡¢¥Ñ¥¹¥ï¡¼¥É¤ÎÆñ²òÅÙ¥Á¥§¥Ã¥¯¤Ï¥Ð¥¤¥Ñ¥¹¤µ¤ì¤ë¡£
 ´ØÏ¢¾ðÊó¤ÏPASS_MIN_LEN¤ò»²¾È¤»¤è¡£
 .\"
+.IP "PASS_ALWAYS_WARN (¥Ö¡¼¥ëÃÍ)"
+XXX Ê¸½ñ²½¤ÎɬÍפ¢¤ê¡£
+.\"
+.IP "PASS_CHANGE_TRIES (¿ô)"
+XXX Ê¸½ñ²½¤ÎɬÍפ¢¤ê¡£
+.\"
 .IP "PASS_MIN_DAYS (¿ô)"
 ¥Ñ¥¹¥ï¡¼¥É¤¬Êѹ¹¤Ç¤­¤ë¤è¤¦¤Ë¤Ê¤ë¤Þ¤Ç¤ÎºÇûÆü¿ô¡£
 ¤³¤ÎÆü¿ô¤¬·Ð¤¿¤Ê¤¤¤¦¤Á¤Ë¥Ñ¥¹¥ï¡¼¥É¤òÊѹ¹¤·¤è¤¦¤È¤·¤Æ¤âµñÈݤµ¤ì¤ë¡£
@@ -302,10 +410,14 @@ UID
 °ì¤Ä¤Î¥Ñ¥¹¥ï¡¼¥É¤ò»È¤¨¤ëºÇĹÆü¿ô¡£¥Ñ¥¹¥ï¡¼¥É¤¬¤³¤ÎÆü¿ô¤è¤ê¤â¸Å¤¤¾ì¹ç¤Ï
 ¥¢¥«¥¦¥ó¥È¤¬¥í¥Ã¥¯¤µ¤ì¤ë¡£»ØÄꤵ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ï¤¢¤ëÂ礭¤Ê¿ô¤¬ÍѤ¤¤é¤ì¤ë¡£
 .\"
+.IP "PASS_MAX_LEN (¿ô)"
+XXX Ê¸½ñ²½¤ÎɬÍפ¢¤ê¡£
+.\"
 .IP "PASS_WARN_AGE (¿ô)"
 ¥Ñ¥¹¥ï¡¼¥É¤ÎÍ­¸ú´ü¸Â¤¬Íè¤ëÁ°¤Ë·Ù¹ð¤òȯ¤¹¤ëÆü¿ô¡£¥¼¥í¤Ë¤·¤Æ¤ª¤¯¤È¡¢ÅöÆü¤Ë¤Î¤ß
 ·Ù¹ð¤ò¹Ô¤¤¡¢Éé¿ô¤ò»ØÄꤷ¤¿¾ì¹ç¤Ï·Ù¹ð¤Ï¹Ô¤ï¤ì¤Ê¤¤¡£
 »ØÄꤵ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ï·Ù¹ð¤Ï¹Ô¤ï¤ì¤Ê¤¤¡£
+.\"
 .IP "PORTTIME_CHECKS_ENAB (¥Ö¡¼¥ëÃÍ)"
 ¤³¤Î¥Ñ¥é¥á¡¼¥¿¤ò
 .I yes
@@ -313,50 +425,62 @@ UID
 .I /etc/porttime
 ¥Õ¥¡¥¤¥ë¤¬Â¸ºß¤¹¤ë¾ì¹ç¤Ï¡¢¥æ¡¼¥¶¤¬¤½¤Î»þ´Ö»ØÄꤷ¤¿Ã¼Ëö¤«¤é¥í¥°¥¤¥ó¤·¤ÆÎɤ¤¤«
 ¤ò³Îǧ¤¹¤ë¤Î¤Ë¤½¤Î¥Õ¥¡¥¤¥ë¤ò»²¾È¤¹¤ë¡£
-c.f. porttime(4)
+c.f.
+.BR porttime (5)
+.\"
+.IP "QMAIL_DIR (ʸ»úÎó)"
+¤³¤Î¥Ñ¥é¥á¡¼¥¿¤Ë¤Ï Qmail ¥æ¡¼¥¶¤Î¤¿¤á¤Î Maildir ¤¬¤¢¤ë¥Ç¥£¥ì¥¯¥È¥ê¤ò»Ø
+Äꤹ¤ë¡£´ØÏ¢¾ðÊó¤Ï MAIL_CHECK_ENAB ¤ò»²¾È¤»¤è¡£
 .\"
 .IP "QUOTAS_ENAB (¥Ö¡¼¥ëÃÍ)"
 ¤³¤Î¥Ñ¥é¥á¡¼¥¿¤¬
 .I yes
-¤ËÀßÄꤵ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ï¡¢¥æ¡¼¥¶¤Î``ulimit,'' ``umask,`` µÚ¤Ó ``niceness''
+¤ËÀßÄꤵ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ï¡¢¥æ¡¼¥¶¤Î``ulimit'', ``umask'', ``niceness''
 ¤¬
 .I passwd
 ¥Õ¥¡¥¤¥ë¤Î
 .I gecos
 Íó¤Ë»ØÄꤵ¤ì¤Æ¤¤¤ëÃͤ˽é´ü²½¤µ¤ì¤ë¡£
-c.f. passwd(4).
+c.f.
+.BR passwd (5)
 .\"
 .IP "SU_NAME (ʸ»úÎó)"
 ¤³¤Î¥Ñ¥é¥á¡¼¥¿¤Ï``su -''¤¬¼Â¹Ô¤µ¤ì¤¿¾ì¹ç¤Î¥³¥Þ¥ó¥É̾¤òÀßÄꤹ¤ë¡£
 Î㤨¤Ð¡¢¤³¤Î¥Ñ¥é¥á¡¼¥¿¤¬``su''¤ÈÄêµÁ¤µ¤ì¤Æ¤¤¤¿¾ì¹ç¡¢
-.I ps(1)
+.BR ps (1)
 ¤Ç¤Ï¼Â¹ÔÃæ¤Î¥³¥Þ¥ó¥É¤¬``-su''¤Èɽ¼¨¤µ¤ì¤ë¡£
 ¤³¤Î¥Ñ¥é¥á¡¼¥¿¤¬ÄêµÁ¤µ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ï¡¢
-.I ps(1)
+.BR ps (1)
 ¤Ë¤Ï¼Â¹ÔÃæ¤Î¼ÂºÝ¤Î¥·¥§¥ë¤Î̾Á°¡¢Î㤨¤Ð``-sh``¤È¤¤¤Ã¤¿É½¼¨¤¬¤Ê¤µ¤ì¤ë¡£
 .\"
 .IP "SULOG_FILE (ʸ»úÎó)"
 ¤³¤Î¥Ñ¥é¥á¡¼¥¿¤Ë¤Ï
-.I su
+.B su
 ¥³¥Þ¥ó¥É¤Î¼Â¹Ôµ­Ï¿¤ò½ñ¤­¹þ¤à¥Õ¥¡¥¤¥ë¤ÎÀäÂХѥ¹Ì¾¤ò»ØÄꤹ¤ë¡£
 ¤³¤Î¥Ñ¥é¥á¡¼¥¿¤¬ÀßÄꤵ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ï¡¢µ­Ï¿¤Ï¹Ô¤ï¤ì¤Ê¤¤¡£
-.I su
+.B su
 ¥³¥Þ¥ó¥É¤Ï¥Ñ¥¹¥ï¡¼¥É¤òǧ¾Ú¤¹¤ëºÝ¤Ë»È¤ï¤ì¤ë»ö¤â¤¢¤ë¤Î¤Ç¡¢¤³¤Î¥ª¥×¥·¥ç¥óËô¤Ï
 .I syslog
 ¤Î¤¤¤º¤ì¤«¤òÍѤ¤¤Æ
-.I su
+.B su
 ¼Â¹Ô¤òµ­Ï¿¤·¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
 ´ØÏ¢¾ðÊó¤ÏSYSLOG_SU_ENAB¥ª¥×¥·¥ç¥ó¤ò»²¾È¤»¤è¡£
 .\"
+.IP "SU_WHEEL_ONLY (¥Ö¡¼¥ëÃÍ)"
+XXX Ê¸½ñ²½¤ÎɬÍפ¢¤ê¡£
+.\"
+.IP "SYSLOG_SG_ENAB (¥Ö¡¼¥ëÃÍ)"
+XXX Ê¸½ñ²½¤ÎɬÍפ¢¤ê¡£
+.\"
 .IP "SYSLOG_SU_ENAB (¥Ö¡¼¥ëÃÍ)"
 ¤³¤Î¥Ñ¥é¥á¡¼¥¿¤¬
 .I yes
 ¤ËÀßÄꤵ¤ì¡¢³î¤Ä
-.I login
+.B login
 ¤¬
 .I syslog
 µ¡Ç½¤òƯ¤«¤»¤ë¤è¤¦¤Ë¥³¥ó¥Ñ¥¤¥ë¤µ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ï¡¢Á´¤Æ¤Î
-.I su
+.B su
 ¼Â¹Ô¤¬
 .I syslog
 µ¡Ç½¤òÍѤ¤¤ÆÄÌÃΤµ¤ì¤ë¡£
@@ -368,24 +492,24 @@ c.f. passwd(4).
 ¥³¥ó¥È¥í¡¼¥ë¥·¡¼¥±¥ó¥¹¤òÁ÷¤ë¡¢¤È¤¤¤¦¤â¤Î¤¬¤¢¤ë¡£
 ¤³¤ÎÌäÂê¤Ï¡¢Â¾¤Î¥æ¡¼¥¶¤¬Ã¼ËöÀþ¤Ë¥¢¥¯¥»¥¹¤Ç¤­¤Ê¤¤¤è¤¦¤Ëµö²Ä°À­¤òÀßÄꤹ¤ì¤Ð
 ²óÈò¤Ç¤­¤ë¤¬¡¢¤³¤¦¤¹¤ë¤È»Äǰ¤Ê¤¬¤é
-.I write
+.B write
 ¤È¤¤¤Ã¤¿¥×¥í¥°¥é¥à¤¬µ¡Ç½¤·¤Ê¤¯¤Ê¤Ã¤Æ¤·¤Þ¤¦¡£Â¾¤Î²ò·èÊýË¡¤È¤·¤Æ¤Ï¡¢
 ÀøºßŪ¤Ë´í¸±¤òÕÔ¤ó¤Àʸ»ú¥·¡¼¥±¥ó¥¹¤ò¥Õ¥£¥ë¥¿¡¼¤·¤Æ¼è¤ê½ü¤¤¤Æ¤·¤Þ¤¦ÍͤÊ
-.I write
+.B write
 ¥×¥í¥°¥é¥à¤ò»È¤¤¡¢¤³¤ì¤òÆÃ¼ì¤Ê¥°¥ë¡¼¥×¤Ë``setgid''¤µ¤»¡¢¤³¤Î¥°¥ë¡¼¥×¤Ë
-üËö¥Ç¥Ð¥¤¥¹¤Î¥°¥ë¡¼¥×½êͭ°À­¤ò³ä¤êÅö¤Æ¡¢Ã¼ËöÀþ¤Îµö²Ä°À­¤ò\f(CW0620\fP¤Ë
+üËö¥Ç¥Ð¥¤¥¹¤Î¥°¥ë¡¼¥×½êͭ°À­¤ò³ä¤êÅö¤Æ¡¢Ã¼ËöÀþ¤Îµö²Ä°À­¤ò\fI0620\fR¤Ë
 ÀßÄꤹ¤ë¡¢¤È¤¤¤¦¤â¤Î¤â¤¢¤ë¡£
 TTYGROUP¤Ï¤Þ¤µ¤Ë¤³¤ÎÍͤʾõ¶·¤Î¤¿¤á¤ËÀßÄê¤Ç¤­¤ë¤è¤¦¤Ë¤·¤Æ¤¢¤ë¡£
 ¤³¤Î¹àÌܤ¬ÄêµÁ¤µ¤ì¤Æ¤¤¤Ê¤¤¤È¤­¤Ï¡¢Ã¼Ëö¤Î¥°¥ë¡¼¥×½êͭ°À­¤Ï¥æ¡¼¥¶¤Î¥°¥ë¡¼¥×
 ÈÖ¹æ¤Ë½é´ü²½¤µ¤ì¤ë¡£
-´ØÏ¢¾ðÊó¤ÏTTYPERMS¤ò»²¾È¤»¤è¡£
+´ØÏ¢¾ðÊó¤Ï TTYPERM ¤ò»²¾È¤»¤è¡£
 .\"
 .IP "TTYPERM (¿ô)"
 ¥í¥°¥¤¥óüËö¤Îµö²Ä°À­¤¬¤³¤ÎÃͤ˽é´ü²½¤µ¤ì¤ë¡£
-ŵ·¿Åª¤ÊÀßÄêÃͤȤ·¤Æ¤Ï¡¢\f(CW0622\fP¤ËÀßÄꤷ¤ÆÂ¾¤Î¥æ¡¼¥¶¤¬¤½¤ÎüËö¤Ëwrite
-¥¢¥¯¥»¥¹½ÐÍè¤ëÍͤˤ¹¤ë¤â¤Î¤ä¡¢\f(CW0600\fP¤ËÀßÄꤷ¤ÆÂ¾¤Î¥æ¡¼¥¶¤«¤éüËö¤ò
+ŵ·¿Åª¤ÊÀßÄêÃͤȤ·¤Æ¤Ï¡¢\fI0622\fR¤ËÀßÄꤷ¤ÆÂ¾¤Î¥æ¡¼¥¶¤¬¤½¤ÎüËö¤Ëwrite
+¥¢¥¯¥»¥¹½ÐÍè¤ëÍͤˤ¹¤ë¤â¤Î¤ä¡¢\fI0600\fR¤ËÀßÄꤷ¤ÆÂ¾¤Î¥æ¡¼¥¶¤«¤éüËö¤ò
 ¼é¤ë¤â¤Î¤Ê¤É¤¬¤¢¤ë¡£
-»ØÄꤵ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ï¡¢Ã¼Ëö¤Îµö²Ä°À­¤Ï\f(CW0622\fP¤Ë½é´ü²½¤µ¤ì¤ë¡£
+»ØÄꤵ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ï¡¢Ã¼Ëö¤Îµö²Ä°À­¤Ï\fI0622\fR¤Ë½é´ü²½¤µ¤ì¤ë¡£
 ´ØÏ¢¾ðÊó¤ÏTTYGROUP¤ò»²¾È¤»¤è¡£
 .\"
 .IP "TTYTYPE_FILE (ʸ»úÎó)"
@@ -394,23 +518,29 @@ TTYGROUP
 Î㤨¤Ð:
 .nf
 .sp
-.ft CW
+.ft I
        vt100\0 tty01
        wyse60  tty02
        \0\0.\0\0\0     \0\0.
        \0\0.\0\0\0     \0\0.
        \0\0.\0\0\0     \0\0.
-.ft P
+.ft R
 .sp
 .fi
-¤³¤Î¾ðÊó¤Ï´Ä¶­ÊÑ¿ôTERM¤ò½é´ü²½¤¹¤ë¤¿¤á¤ËÍѤ¤¤é¤ì¤ë¡£
+¤³¤Î¾ðÊó¤Ï´Ä¶­ÊÑ¿ô TERM ¤¬¤Þ¤ÀÀßÄꤵ¤ì¤Æ¤¤¤Ê¤¤»þ¤Ë
+¤³¤ì¤ò½é´ü²½¤¹¤ë¤¿¤á¤À¤±¤ËÍѤ¤¤é¤ì¤ë¡£
 µ­¹æ``#''¤Ç»Ï¤Þ¤ë¹Ô¤Ï¥³¥á¥ó¥È¤È¤·¤Æ°·¤ï¤ì¤ë¡£
 ¤³¤Î¥Ñ¥é¥á¡¼¥¿¤¬ÀßÄꤵ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¡¢¥Õ¥¡¥¤¥ë¤¬Â¸ºß¤·¤Ê¤¤¾ì¹ç¡¢¤â¤·¤¯¤Ï¤³¤Î
 ¥Õ¥¡¥¤¥ëÃæ¤ÇüËöÀþ¤¬¸«¤Ä¤«¤é¤Ê¤¤¾ì¹ç¤Ï¡¢´Ä¶­ÊÑ¿ôTERM¤ÏÀßÄꤵ¤ì¤Ê¤¤¡£
 .\"
+.IP "UID_MAX (¿ô)"
+XXX Ê¸½ñ²½¤ÎɬÍפ¢¤ê¡£
+.IP "UID_MIN (¿ô)"
+XXX Ê¸½ñ²½¤ÎɬÍפ¢¤ê¡£
+.\"
 .IP "ULIMIT (ÇÜÀºÅÙ¿ô)"
 ¥Õ¥¡¥¤¥ë¥µ¥¤¥º¤Î¸ÂÅÙ¤ò¤³¤ÎÃͤ˽é´ü²½¤¹¤ë¡£
-.IR ulimit
+.I ulimit
 ¤¬È÷¤ï¤Ã¤Æ¤¤¤ë¥·¥¹¥Æ¥à¡¢Î㤨¤ÐSystem V¤Ç¤Î¤ß¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤ë¡£
 »ØÄꤵ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ï¡¢¥Õ¥¡¥¤¥ë¥µ¥¤¥º¸ÂÅ٤Ϥ¢¤ëÂ礭¤ÊÃͤ˽é´ü²½¤µ¤ì¤ë¡£
 .\"
@@ -418,11 +548,12 @@ TTYGROUP
 µö²Ä°À­¥Þ¥¹¥¯¤ò¤³¤ÎÃͤ˽é´ü²½¤¹¤ë¡£
 »ØÄꤵ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ï¡¢µö²Ä°À­¥Þ¥¹¥¯¤Ï¥¼¥í¤Ë½é´ü²½¤µ¤ì¤ë¡£
 .\"
+.IP "USERDEL_CMD (ʸ»úÎó)"
+XXX Ê¸½ñ²½¤ÎɬÍפ¢¤ê¡£
+.\"
 .SH Áê¸ß»²¾È
-.\" The following cross reference shows which programs in the shadow login
-.\" suite use which parameters.
-°Ê²¼¤ÎÁê¸ß»²¾È¤Ïshadow login suiteÃæ¤Î¤É¤Î¥×¥í¥°¥é¥à¤¬
-¤É¤Î¥Ñ¥é¥á¡¼¥¿¤ò»ÈÍѤ¹¤ë¤«¤ò¼¨¤·¤¿¤â¤Î¤Ç¤¢¤ë
+°Ê²¼¤ÎÁê¸ß»²¾È¤Ï shadow ¥í¥°¥¤¥óµ¡Ç½Ãæ¤Î¤É¤Î¥×¥í¥°¥é¥à¤¬
+¤É¤Î¥Ñ¥é¥á¡¼¥¿¤ò»ÈÍѤ¹¤ë¤«¤ò¼¨¤·¤¿¤â¤Î¤Ç¤¢¤ë¡£
 .na
 .IP login 12
 CONSOLE DIALUPS_CHECK_ENAB ENV_HZ ENV_SUPATH ENV_TZ ERASECHAR FAILLOG_ENAB
@@ -441,7 +572,17 @@ MOTD_FILE NOLOGIN_STR QUOTAS_ENAB SULOG_FILE SYSLOG_SU_ENAB
 .IP sulogin 12
 ENV_HZ ENV_SUPATH ENV_TZ MAIL_DIR QUOTAS_ENAB TTYPERM
 .ad
+.SH ¥Ð¥°
+¤³¤Î man ¥Ú¡¼¥¸¤Ë½ñ¤«¤ì¤Æ¤¤¤Ê¤¤ÀßÄê¥Ñ¥é¥á¡¼¥¿¤â¤¢¤ë¡£
 .SH ´ØÏ¢¹àÌÜ
-login(1), passwd(4), faillog(4), porttime(4), faillog(8)
-.SH ËÝÌõ¼Ô
-¸Å¹âÏÂÄ÷ <furutaka@Flux.tokai.jaeri.go.jp>
+.BR login (1),
+.BR passwd (5),
+.BR faillog (5),
+.BR porttime (5),
+.BR faillog (8)
+.SH Ãø¼Ô
+Julianne Frances Haugh (jockgrrl@ix.netcom.com)
+.br
+Chip Rosenthal (chip@unicom.com)
+
+
index 36ef82c779d553ac93dc882d001b74f5c654a521..04c8e4b832da5e4230d6ad7430090ed06dd1028c 100644 (file)
@@ -1,4 +1,4 @@
-.\" Copyright 1991, John F. Haugh II
+.\" Copyright 1991, Julianne Frances Haugh
 .\" All rights reserved.
 .\"
 .\" Redistribution and use in source and binary forms, with or without
@@ -9,18 +9,14 @@
 .\" 2. Redistributions in binary form must reproduce 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
+.\" 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 JOHN HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" 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 JOHN HAUGH OR CONTRIBUTORS BE LIABLE
+.\" 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)
@@ -29,7 +25,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\"    $Id: logoutd.8,v 1.1 2001/06/16 02:35:46 kloczek Exp $
+.\"    $Id: logoutd.8,v 1.2 2001/11/16 17:01:32 ankry Exp $
 .\"
 .\" Japanese Version Copyright (c) 1997 Kazuyoshi Furutaka
 .\"         all rights reserved.
 .SH Ì¾Á°
 logoutd \- ¥í¥°¥¤¥ó»þ´Ö¤ÎÀ©¸Â¤ò²Ê¤¹
 .SH ½ñ¼°
-.B /etc/logoutd
+.B logoutd
 .SH ÀâÌÀ
-.I logoutd
-¤Ï/etc/porttime¤Ëµ­¤µ¤ì¤Æ¤¤¤ë¥í¥°¥¤¥ó»þ´ÖµÚ¤Ó¥Ý¡¼¥È¤ËÂФ¹¤ë
+.B logoutd
+¤Ï
+.I /etc/porttime
+¤Ëµ­¤µ¤ì¤Æ¤¤¤ë¥í¥°¥¤¥ó»þ´ÖµÚ¤Ó¥Ý¡¼¥È¤ËÂФ¹¤ë
 À©¸Â»ö¹à¤ò¼Â»Ü¤¹¤ë¡£
-.I logoutd
-¤Ï\fB/etc/rc\fR¤Ë¤è¤Ã¤Æµ¯Æ°¤µ¤ì¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
+.B logoutd
+¤Ï\fI/etc/rc\fR¤Ë¤è¤Ã¤Æµ¯Æ°¤µ¤ì¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
 .\" at the current time.
-\fB/etc/utmp\fR¥Õ¥¡¥¤¥ë¤òÄê´üŪ¤ËÁöºº¤·¡¢¥í¥°¥¤¥ó¤·¤Æ¤¤¤ë³Æ¥æ¡¼¥¶¤¬
-\fB/etc/porttime\fRÃæ¤Ç»ØÄꤵ¤ì¤¿¥í¥°¥¤¥ó²Äǽ¥æ¡¼¥¶Ì¾¡¢¥Ý¡¼¥ÈµÚ¤Ó»þ¹ï¤Ë
+\fI/etc/utmp\fR¥Õ¥¡¥¤¥ë¤òÄê´üŪ¤ËÁöºº¤·¡¢¥í¥°¥¤¥ó¤·¤Æ¤¤¤ë³Æ¥æ¡¼¥¶¤¬
+\fI/etc/porttime\fRÃæ¤Ç»ØÄꤵ¤ì¤¿¥í¥°¥¤¥ó²Äǽ¥æ¡¼¥¶Ì¾¡¢¥Ý¡¼¥ÈµÚ¤Ó»þ¹ï¤Ë
 È¿¤·¤Æ¤¤¤Ê¤¤¤«¤ò¸¡ºº¤¹¤ë¡£
-\fB/etc/porttime\fR¤ÎÀ©¸Â¤ËÈ¿¤¹¤ë¥í¥°¥¤¥ó¥»¥Ã¥·¥ç¥ó¤Ï½ªÎ»¤µ¤»¤é¤ì¤ë¡£
+\fI/etc/porttime\fR¤ÎÀ©¸Â¤ËÈ¿¤¹¤ë¥í¥°¥¤¥ó¥»¥Ã¥·¥ç¥ó¤Ï½ªÎ»¤µ¤»¤é¤ì¤ë¡£
 .SH ¥Õ¥¡¥¤¥ë
 /etc/porttime \- ¥í¥°¥¤¥óµÚ¤Ó¥Ý¡¼¥È¤ËÂФ¹¤ëµö²Ä
 .br
 /etc/utmp \- ¸½ºß¤Î¥í¥°¥¤¥ó¥»¥Ã¥·¥ç¥ó
-.SH ËÝÌõ¼Ô
-¸Å¹âÏÂÄ÷ <furutaka@Flux.tokai.jaeri.go.jp>
+.SH Ãø¼Ô
+Julianne Frances Haugh (jockgrrl@ix.netcom.com)
index 738c8faa172cf76d372c0da9fbc361c7166dacf5..fbf8309faa219304cb4494aed493f777b521c6b0 100644 (file)
@@ -1,4 +1,4 @@
-.\" Copyright 1991, John F. Haugh II
+.\" Copyright 1991, Julianne Frances Haugh
 .\" All rights reserved.
 .\"
 .\" Redistribution and use in source and binary forms, with or without
@@ -9,18 +9,14 @@
 .\" 2. Redistributions in binary form must reproduce 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
+.\" 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 JOHN HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" 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 JOHN HAUGH OR CONTRIBUTORS BE LIABLE
+.\" 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)
@@ -29,7 +25,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\"    $Id: mkpasswd.8,v 1.1 2001/06/16 02:35:46 kloczek Exp $
+.\"    $Id: mkpasswd.8,v 1.2 2001/11/16 17:01:32 ankry Exp $
 .\"
 .\" Japanese Version Copyright (c) 1997 Kazuyoshi Furutaka
 .\"         all rights reserved.
 .SH Ì¾Á°
 mkpasswd \- passwdµÚ¤Ógroup¥Ç¡¼¥¿¥Ù¡¼¥¹¥Õ¥¡¥¤¥ë¤ò¹¹¿·¤¹¤ë
 .SH ½ñ¼°
-\fBmkpasswd\fR [ \fB-fvgps\fR ] \fIfile\fR
+\fBmkpasswd\fR [\fB-fvgps\fR] \fIfile\fR
 .SH ÀâÌÀ
-.I mkpasswd
+.B mkpasswd
 ¤Ï¥Õ¥é¥Ã¥°¤ÇÍ¿¤¨¤é¤ì¤¿½ñ¼°¤Ë¤·¤¿¤¬¤Ã¤Æ¥Õ¥¡¥¤¥ë¤òÆÉ¤ß¹þ¤ß¡¢
 Âбþ¤¹¤ë¥Ç¡¼¥¿¥Ù¡¼¥¹¥Õ¥¡¥¤¥ë¤Î½ñ¼°¤ËÊÑ´¹¤¹¤ë¡£
 ºîÀ®¤µ¤ì¤¿¥Ç¡¼¥¿¥Ù¡¼¥¹¥Õ¥¡¥¤¥ë¤Ï¡¢Â¿¤¯¤Î¥æ¡¼¥¶¤¬¤¤¤ë¥·¥¹¥Æ¥à¤Ç¤Î¥¢¥¯¥»¥¹
 ¥Ñ¥Õ¥©¡¼¥Þ¥ó¥¹¤ò²þÁ±¤¹¤ë°Ù¤ËÍѤ¤¤é¤ì¤ë¡£
 ½ÐÎÏ¥Õ¥¡¥¤¥ë¤Ï\fIfile\fR.dirµÚ¤Ó\fIfile\fR.pag¤È¤Î̾Á°¤¬ÉÕ¤±¤é¤ì¤ë¡£
 .PP
-\fB-f\fR¥ª¥×¥·¥ç¥ó¤ò»ØÄꤹ¤ë¤È¡¢\fImkpasswd\fR¤Ï´û¤Ë½ÐÎÏ¥Õ¥¡¥¤¥ë¤¬Â¸ºß
+\fB-f\fR¥ª¥×¥·¥ç¥ó¤ò»ØÄꤹ¤ë¤È¡¢\fBmkpasswd\fR¤Ï´û¤Ë½ÐÎÏ¥Õ¥¡¥¤¥ë¤¬Â¸ºß
 ¤·¤Æ¤¤¤Æ¤â̵»ë¤·¤Æ¾å½ñ¤­¤ò¹Ô¤Ê¤¦¡£
 Ä̾ï¤Ï¡¢½ÐÎÏ¥Õ¥¡¥¤¥ë¤¬´û¤Ë¸ºß¤¹¤ë¤È¤Î·Ù¹ð¤òȯ¤·¤ÆÃæÅÓ½ªÎ»¤¹¤ë¡£
 .PP
-\fB-v\fR¥ª¥×¥·¥ç¥ó¤òÉÕ¤±¤¿¾ì¹ç¡¢\fImkpasswd\fR¤ÏÊÑ´¹¤ò¹Ô¤Ê¤¦Ëè¤Ë
+\fB-v\fR¥ª¥×¥·¥ç¥ó¤òÉÕ¤±¤¿¾ì¹ç¡¢\fBmkpasswd\fR¤ÏÊÑ´¹¤ò¹Ô¤Ê¤¦Ëè¤Ë
 ³Æ¥ì¥³¡¼¥É¤Î¾ðÊó¤ò½ÐÎϤ¹¤ë¤È¤È¤â¤Ë¡¢ºÇ¸å¤Ë½ªÎ»¥á¥Ã¥»¡¼¥¸¤òɽ¼¨¤¹¤ë¡£
 .PP
-\fB-g\fR¥ª¥×¥·¥ç¥ó¤ò»ØÄꤷ¤¿¾ì¹ç¤Ï¡¢ÆþÎÏ¥Õ¥¡¥¤¥ë¤¬\fB/etc/group\fR
+\fB-g\fR¥ª¥×¥·¥ç¥ó¤ò»ØÄꤷ¤¿¾ì¹ç¤Ï¡¢ÆþÎÏ¥Õ¥¡¥¤¥ë¤¬\fI/etc/group\fR
 ¥Õ¥¡¥¤¥ë¤ÈƱ¤¸½ñ¼°¤Ç¤¢¤ë¤È¤·¤Æ½èÍý¤ò¹Ô¤Ê¤¦¡£
-\fB-s\fR¥ª¥×¥·¥ç¥ó¤ÈÁȤ߹ç¤ï¤»¤ÆÍѤ¤¤¿¾ì¹ç¤Ï¡¢\fB/etc/gshadow\fR¥Õ¥¡¥¤¥ë
+\fB-s\fR¥ª¥×¥·¥ç¥ó¤ÈÁȤ߹ç¤ï¤»¤ÆÍѤ¤¤¿¾ì¹ç¤Ï¡¢\fI/etc/gshadow\fR¥Õ¥¡¥¤¥ë
 ¤Î½ñ¼°¤È¤·¤Æ°·¤¦¡£
 .PP
 \fB-p\fR¥ª¥×¥·¥ç¥ó¤òÉÕ¤±¤¿¾ì¹ç¤Ï¡¢ÆþÎÏ¥Õ¥¡¥¤¥ë¤Î½ñ¼°¤¬\fB/etc/passwd\fR
 ¤Î·Á¼°¤Ç¤¢¤ë¤È¤·¤Æ½èÍý¤¹¤ë¡£
 ¥Ç¥£¥Õ¥©¥ë¥È¡£
-\fB-s\fR¥ª¥×¥·¥ç¥ó¤ÈÁȤ߹ç¤ï¤»¤¿¾ì¹ç¤Ï¡¢\fB/etc/shadow\fR¥Õ¥¡¥¤¥ë¤Î
+\fB-s\fR¥ª¥×¥·¥ç¥ó¤ÈÁȤ߹ç¤ï¤»¤¿¾ì¹ç¤Ï¡¢\fI/etc/shadow\fR¥Õ¥¡¥¤¥ë¤Î
 ½ñ¼°¤È¤·¤Æ½èÍý¤ò¹Ô¤¦¡£
 .SH ·Ù¹ð
 Ê£¿ô¤Î¥Ç¡¼¥¿¥Ù¡¼¥¹¥Õ¥¡¥¤¥ë¤ò»ÈÍѤ¹¤ë¤³¤È¤Ï¡¢NDBM¥Ç¡¼¥¿¥Ù¡¼¥¹¥é¥¤¥Ö¥é¥ê
@@ -84,6 +80,8 @@ mkpasswd \- passwd
 .br
 /etc/gshadow \- shadow¤·¤¿¥°¥ë¡¼¥×¾ðÊó
 .SH ´ØÏ¢¹àÌÜ
-passwd(4), group(4), shadow(4)
-.SH ËÝÌõ¼Ô
-¸Å¹âÏÂÄ÷ <furutaka@Flux.tokai.jaeri.go.jp>
+.BR passwd (5),
+.BR group (5),
+.BR shadow (5)
+.SH Ãø¼Ô
+Julianne Frances Haugh (jockgrrl@ix.netcom.com)
index e1b54cea348b4b0ff0a88d0fe31e2d9d7b585a58..a3af9a1edefa49f8dc0ad3d0e595c6bc5c2b594e 100644 (file)
@@ -1,4 +1,4 @@
-.\" Copyright 1991, John F. Haugh II
+.\" Copyright 1991, Julianne Frances Haugh
 .\" All rights reserved.
 .\"
 .\" Redistribution and use in source and binary forms, with or without
@@ -9,18 +9,14 @@
 .\" 2. Redistributions in binary form must reproduce 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
+.\" 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 JOHN HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" 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 JOHN HAUGH OR CONTRIBUTORS BE LIABLE
+.\" 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)
@@ -29,7 +25,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\"    $Id: newgrp.1,v 1.1 2001/06/16 02:35:46 kloczek Exp $
+.\"    $Id: newgrp.1,v 1.2 2001/11/16 17:01:32 ankry Exp $
 .\"
 .\" Japanese Version Copyright (c) 1997 Kazuyoshi Furutaka
 .\"         all rights reserved.
@@ -42,21 +38,21 @@ newgrp \- 
 .br
 sg \- °Û¤Ê¤ë¥°¥ë¡¼¥×ID¤Ç¥³¥Þ¥ó¥É¤ò¼Â¹Ô¤¹¤ë
 .SH ½ñ¼°
-.B newgrp
-[ - ] [ \fIgroup\fR ]
+.BR newgrp " [" - ]
+[\fIgroup\fR]
 .br
-.B sg
-[ - ] [ \fIgroup\fR [ \fB-c\fR \fIcommand\fR ] ]
+.BR sg " [" - ]
+[\fIgroup\fR [[\fB-c\fR] \fIcommand\fR]]
 .SH ÀâÌÀ
-.I newgrp
+.B newgrp
 ¤Ï¥í¥°¥¤¥ó¥»¥Ã¥·¥ç¥óÃæ¤Ë¸½ºß¤Î¥°¥ë¡¼¥×ID¤òÊѹ¹¤¹¤ë¤¿¤á¤ËÍѤ¤¤é¤ì¤ë¡£
 ¥ª¥×¥·¥ç¥ó¤È¤·¤Æ\fB\-\fR¥Õ¥é¥°¤òÍ¿¤¨¤¿¾ì¹ç¤Ï¡¢
 ¿·¤¿¤Ë¥í¥°¥¤¥ó¤·¤¿¤Î¤ÈƱ¤¸Íͤ˴Ķ­¤¬ºÆ½é´ü²½¤µ¤ì¤ë¡£
 ¤½¤¦¤Ç¤Ê¤¤¾ì¹ç¤Ï¡¢ºî¶È¥Ç¥£¥ì¥¯¥È¥ê¤ò´Þ¤á¤Æ¡¢¸½ºß¤Î´Ä¶­¤ÏÊѲ½¤·¤Ê¤¤¡£
 .PP
-.I newgrp
+.B newgrp
 ¤Ï¡¢¸½ºß¤Î¼ÂºÝ¤Î¥°¥ë¡¼¥×ID¤ò¡¢»ØÄꤷ¤¿¥°¥ë¡¼¥×¤Ë¡¢
-¤Þ¤¿¥°¥ë¡¼¥×̾¤ò»ØÄꤷ¤Ê¤«¤Ã¤¿¾ì¹ç¤Ï\fB/etc/passwd\fR¤Ëµ­ºÜ¤µ¤ì¤¿
+¤Þ¤¿¥°¥ë¡¼¥×̾¤ò»ØÄꤷ¤Ê¤«¤Ã¤¿¾ì¹ç¤Ï\fI/etc/passwd\fR¤Ëµ­ºÜ¤µ¤ì¤¿
 ¥Ç¥£¥Õ¥©¥ë¥È¤Î¥°¥ë¡¼¥×¤Ë¡¢Êѹ¹¤¹¤ë¡£
 ¥æ¡¼¥¶¤Ë¤Ï¥Ñ¥¹¥ï¡¼¥É¤¬¤Ê¤¯¥°¥ë¡¼¥×¤Ë¤Ï¤¢¤ë¾ì¹ç¡¢
 ¤â¤·¤¯¤Ï¡¢¥á¥ó¥Ð¡¼¤Ç¤¢¤ë¤ÈÀßÄꤵ¤ì¤Æ¤ª¤é¤º¡¢
@@ -65,25 +61,23 @@ sg \- 
 ¥°¥ë¡¼¥×¤Î¥Ñ¥¹¥ï¡¼¥É¤¬ÀßÄꤵ¤ì¤Æ¤ª¤é¤º¡¢¤«¤Ä¥æ¡¼¥¶¤¬¥á¥ó¥Ð¡¼¤È¤·¤Æ
 ÀßÄꤵ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ï¡¢¥¢¥¯¥»¥¹¤òµñÈݤµ¤ì¤ë¡£
 .PP
-.I sg
-¥³¥Þ¥ó¥É¤Ï\fInewgrp\fR¤ÈƱÍÍ¤ÊÆ¯¤­¤ò¤¹¤ë¤¬¡¢
+.B sg
+¥³¥Þ¥ó¥É¤Ï\fBnewgrp\fR¤ÈƱÍÍ¤ÊÆ¯¤­¤ò¤¹¤ë¤¬¡¢
 ¥æ¡¼¥¶¤Î¥·¥§¥ë¤ÏÃÖ¤­´¹¤ï¤é¤Ê¤¤¡£
-½¾¤Ã¤Æ¡¢\fIsg\fR¥³¥Þ¥ó¥É¤«¤éÈ´¤±¤¿¾ì¹ç¤Ï°ÊÁ°¤Î¥°¥ë¡¼¥×ID¤ËÌá¤ë¡£
-.I sg
+½¾¤Ã¤Æ¡¢\fBsg\fR¥³¥Þ¥ó¥É¤«¤éÈ´¤±¤¿¾ì¹ç¤Ï°ÊÁ°¤Î¥°¥ë¡¼¥×ID¤ËÌá¤ë¡£
+.B sg
 ¤Ï¥³¥Þ¥ó¥É¤â¼õ¤±ÉÕ¤±¤ë¡£
 ¥³¥Þ¥ó¥É¤ÏBourne¥·¥§¥ë¤Ç¼Â¹Ô¤µ¤ì¡¢°úÍÑÉä¤Ç°Ï¤Þ¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
 .SH ·Ù¹ð
-.PP
-¤³¤ÎÈǤÎ\fInewgrp\fR¤Ë¤Ï¿¤¯¤Î¥³¥ó¥Ñ¥¤¥ë»þ¥ª¥×¥·¥ç¥ó¤¬¤¢¤ë¤¬¡¢
+¤³¤ÎÈǤÎ\fBnewgrp\fR¤Ë¤Ï¿¤¯¤Î¥³¥ó¥Ñ¥¤¥ë»þ¥ª¥×¥·¥ç¥ó¤¬¤¢¤ë¤¬¡¢
 ¥µ¥¤¥È¤Ë¤è¤Ã¤Æ¤Ï¡¢¤½¤Î¤¦¤Á¤Î¤¤¤¯¤Ä¤«¤·¤«ÀßÄꤵ¤ì¤Æ¤¤¤Ê¤¤¤³¤È¤â¤¢¤ë¡£
 .SH ¥Õ¥¡¥¤¥ë
 /etc/passwd \- ¥æ¡¼¥¶¤Î¥¢¥«¥¦¥ó¥È¾ðÊó
 .br
 /etc/group \- ¥°¥ë¡¼¥×¾ðÊó
 .SH ´ØÏ¢¹àÌÜ
-login(1),
-id(1),
-su(1)
-.SH ËÝÌõ¼Ô
-¸Å¹âÏÂÄ÷ <furutaka@Flux.tokai.jaeri.go.jp>
-
+.BR login (1),
+.BR id (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..154cc71
--- /dev/null
@@ -0,0 +1,73 @@
+.\" 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: newusers.8,v 1.1 2001/11/16 17:00:48 ankry Exp $
+.\"
+.\" Japanese Version Copyright (c) 1996 HANATAKA Shinya
+.\"         all rights reserved.
+.\" Translated Wed Nov 20 17:42:39 JST 1996
+.\"         by HANATAKA Shinya
+.\"
+.TH NEWUSERS 8
+.SH Ì¾Á°
+\fBnewusers\fR - ¥æ¡¼¥¶¾ðÊó¤ÎÊѹ¹¤ä¿·µ¬¥æ¡¼¥¶ºîÀ®¤ò¤Þ¤È¤á¤Æ¹Ô¤¦
+.SH ½ñ¼°
+\fBnewusers\fR [\fI new_users \fR]
+.SH ÀâÌÀ
+\fBnewusers\fR ¤Ï¡¢¥æ¡¼¥¶Ì¾¤Èʿʸ¥Ñ¥¹¥ï¡¼¥É¤ÎÂФòµ­¤·¤¿¥Õ¥¡¥¤¥ë¤òÆÉ¤ß¡¢
+¤½¤Î¾ðÊó¤ò¤â¤È¤Ë¡¢´û¸¤Î¥æ¡¼¥¶¾ðÊó¤ÎÊѹ¹¤ä¡¢¿·µ¬¥æ¡¼¥¶¤ÎºîÀ®¤ò¹Ô¤¦¡£
+¤³¤Î¥Õ¥¡¥¤¥ë¤Î½ñ¼°¤Ï¡¢²¼µ­¤ÎÅÀ¤ò½ü¤­¡¢
+ɸ½àŪ¤Ê¥Ñ¥¹¥ï¡¼¥É¥Õ¥¡¥¤¥ë (\fBpasswd\fR(5) »²¾È) ¤ÈƱ¤¸¤Ç¤¢¤ë¡£
+.IP "\fIpw_passwd\fR" 10
+¤³¤Î¥Õ¥£¡¼¥ë¥É¤¬°Å¹æ²½¤µ¤ì¡¢°Å¹æ²½¥Ñ¥¹¥ï¡¼¥É¤È¤Ê¤ë¡£
+.IP "\fIpw_age\fR"
+¥æ¡¼¥¶¤¬¤¹¤Ç¤Ë¸ºß¤¹¤ë¾ì¹ç¡¢¥Ñ¥¹¥ï¡¼¥É¤ò±£¤¹¤¿¤á¡¢¤³¤Î¥Õ¥£¡¼¥ë¥É¤Ï̵»ë¤µ¤ì¤ë¡£
+.IP "\fIpw_gid\fR"
+¤³¤Î¥Õ¥£¡¼¥ë¥É¤Ë´û¸¤Î¥°¥ë¡¼¥×¤ò»ØÄꤷ¤¿¾ì¹ç¤Ï¡¢
+¥æ¡¼¥¶¤Ï¤½¤Î¥°¥ë¡¼¥×¤Ë²Ã¤¨¤é¤ì¤ë¡£
+¸ºß¤·¤Ê¤¤¥°¥ë¡¼¥× ID ¤ò»ØÄꤷ¤¿¾ì¹ç¤Ï¡¢
+¤½¤Î¥°¥ë¡¼¥× ID ¤ò¤â¤Ä¿·¤¿¤Ê¥°¥ë¡¼¥×¤¬ºî¤é¤ì¤ë¡£
+.IP "\fIpw_dir\fR"
+¤³¤Î¥Õ¥£¡¼¥ë¥É¤Ç»ØÄꤷ¤¿¥Ç¥£¥ì¥¯¥È¥ê¤¬¤¹¤Ç¤Ë¸ºß¤¹¤ë¤«¥Á¥§¥Ã¥¯¤·¡¢
+¤â¤·Â¸ºß¤·¤Ê¤±¤ì¤Ð¡¢¿·¤¿¤Ë¥Ç¥£¥ì¥¯¥È¥ê¤¬ºî¤é¤ì¤ë¡£
+¤Þ¤¿¡¢¤³¤Î¥Ç¥£¥ì¥¯¥È¥ê¤Ï¡¢
+¿·µ¬¥æ¡¼¥¶¡¢¤¢¤ë¤¤¤Ï¾ðÊó¤¬Êѹ¹¤µ¤ì¤¿¥æ¡¼¥¶¤¬½êÍ­¼Ô¤È¤Ê¤ë¡£
+.PP
+¤³¤Î¥³¥Þ¥ó¥É¤Ï¡¢Â¿¤¯¤Î¥¢¥«¥¦¥ó¥È¤¬°ìÅÙ¤ËÊѹ¹¤µ¤ì¤ë¤è¤¦¤Ê
+Â礭¤Ê¥·¥¹¥Æ¥à´Ä¶­¤Ç»È¤¦¤¿¤á¤Î¤â¤Î¤Ç¤¢¤ë¡£
+.SH ·Ù¹ð
+.\" The \fImkpasswd\fR command must be executed afterwards to update the
+.\" DBM password files.
+ÆþÎÏ¥Õ¥¡¥¤¥ë¤Ë¤Ï¡¢À¸¤Î¥Ñ¥¹¥ï¡¼¥É¤¬´Þ¤Þ¤ì¤ë¤¿¤á¡¢°·¤¤¤ËÃí°Õ¤¹¤ë¤³¤È¡£
+.SH ´ØÏ¢¹àÌÜ
+.\" mkpasswd(8), passwd(1), useradd(1)
+.BR passwd (1),
+.BR useradd (8)
+.SH Ãø¼Ô
+Julianne Frances Haugh (jockgrrl@ix.netcom.com)
+
+
index 9803560b83e966b536fc8c09499e7020882c89ec..af49c90cb180671fcbcc3f490c478caed7603d13 100644 (file)
@@ -1,4 +1,4 @@
-.\" Copyright 1989 - 1994, John F. Haugh II
+.\" Copyright 1989 - 1994, Julianne Frances Haugh
 .\" All rights reserved.
 .\"
 .\" Redistribution and use in source and binary forms, with or without
@@ -9,18 +9,14 @@
 .\" 2. Redistributions in binary form must reproduce 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
+.\" 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 JOHN HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" 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 JOHN HAUGH OR CONTRIBUTORS BE LIABLE
+.\" 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)
@@ -29,7 +25,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\"    $Id: passwd.1,v 1.1 2001/06/16 02:35:46 kloczek Exp $
+.\"    $Id: passwd.1,v 1.3 2001/12/22 05:40:04 kloczek Exp $
 .\"
 .\" Japanese Version Copyright (c) 1997 Kazuyoshi Furutaka
 .\"         all rights reserved.
 .SH Ì¾Á°
 passwd \- ¥æ¡¼¥¶¥Ñ¥¹¥ï¡¼¥É¤òÊѹ¹¤¹¤ë
 .SH ½ñ¼°
-\fBpasswd\fR [ \fB-f \fR|\fB -s \fR ] [ \fIname\fR ]
+\fBpasswd\fR [\fB-f\fR|\fB-s\fR] [\fIname\fR]
 .br
-\fBpasswd\fR [ \fB-g\fR ] [ \fB-r\fR|\fBR\fR ] \fIgroup\fR
+\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 ] \fIname\fR
+\fBpasswd\fR [\fB-x\fR \fImax\fR] [\fB-n\fR \fImin\fR]
+[\fB-w\fR \fIwarn\fR] [\fB-i\fR \fIinact\fR] \fIname\fR
 .br
-\fBpasswd\fR { \fB-l\fR | \fB-u\fR | \fB-d\fR | \fB-S\fR } \fIname\fR
+\fBpasswd\fR {\fB-l\fR|\fB-u\fR|\fB-d\fR|\fB-S\fR} \fIname\fR
 .SH ÀâÌÀ
-\fIpasswd\fR¤Ï¥æ¡¼¥¶µÚ¤Ó¥°¥ë¡¼¥×¥¢¥«¥¦¥ó¥È¤Î¥Ñ¥¹¥ï¡¼¥É¤òÊѹ¹¤¹¤ë¡£
+\fBpasswd\fR¤Ï¥æ¡¼¥¶µÚ¤Ó¥°¥ë¡¼¥×¥¢¥«¥¦¥ó¥È¤Î¥Ñ¥¹¥ï¡¼¥É¤òÊѹ¹¤¹¤ë¡£
 °ìÈ̥桼¥¶¤Ï¼«Ê¬¤Î¥¢¥«¥¦¥ó¥È¤Î¥Ñ¥¹¥ï¡¼¥É¤·¤«Êѹ¹¤Ç¤­¤Ê¤¤¡£
 ¥¹¡¼¥Ñ¡¼¥æ¡¼¥¶¤Ï¤¤¤«¤Ê¤ë¥¢¥«¥¦¥ó¥È¤Î¥Ñ¥¹¥ï¡¼¥É¤âÊѹ¹¤¹¤ë¤³¤È¤¬½ÐÍè¤ë¡£
 ¥°¥ë¡¼¥×¤Î´ÉÍý¼Ô¤Ï¥°¥ë¡¼¥×¤Î¥Ñ¥¹¥ï¡¼¥É¤òÊѹ¹¤¹¤ë¤³¤È¤¬½ÐÍè¤ë¡£
-\fIpasswd\fR¤Ë¤è¤Ã¤Æ¡¢¥æ¡¼¥¶¤Î¥Õ¥ë¥Í¡¼¥à¡¢¥í¥°¥¤¥ó¥·¥§¥ë¡¢¥Ñ¥¹¥ï¡¼¥É¤Î
+\fBpasswd\fR¤Ë¤è¤Ã¤Æ¡¢¥æ¡¼¥¶¤Î¥Õ¥ë¥Í¡¼¥à¡¢¥í¥°¥¤¥ó¥·¥§¥ë¡¢¥Ñ¥¹¥ï¡¼¥É¤Î
 ´ü¸ÂÀÚ¤ì¤ÎÆüÉÕµÚ¤ÓÍ­¸ú´ü´ÖÅù¤Î¥¢¥«¥¦¥ó¥È¾ðÊó¤òÊѹ¹¤¹¤ë¤³¤È¤â¤Ç¤­¤ë¡£
 .SS ¥Ñ¥¹¥ï¡¼¥É¤ÎÊѹ¹
 ¥Ñ¥¹¥ï¡¼¥É¤¬´û¤Ë¤¢¤ë¾ì¹ç¤Ï¡¢À褺¸Å¤¤¥Ñ¥¹¥ï¡¼¥É¤òÆþÎϤ¹¤ë¤è¤¦Â¥¤µ¤ì¤ë¡£
@@ -64,7 +60,7 @@ passwd \- 
 .PP
 ¥Ñ¥¹¥ï¡¼¥É¤¬ÆþÎϤµ¤ì¤¿¸å¡¢¥Ñ¥¹¥ï¡¼¥ÉÍ­¸ú´ü¸Â¤Î¾ðÊó¤òÄ´¤Ù¡¢
 ¸½ºß¥Ñ¥¹¥ï¡¼¥É¤ÎÊѹ¹¤¬µö¤µ¤ì¤Æ¤¤¤ë¤«¸¡ºº¤¹¤ë¡£
-¤â¤·µö²Ä¤µ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ï¡¢\fIpasswd\fR¤ÏÊѹ¹¤òµñÈݤ·¤Æ½ªÎ»¤¹¤ë¡£
+¤â¤·µö²Ä¤µ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ï¡¢\fBpasswd\fR¤ÏÊѹ¹¤òµñÈݤ·¤Æ½ªÎ»¤¹¤ë¡£
 .PP
 ¼¡¤¤¤Ç¡¢Âå¤ï¤ê¤Î¥Ñ¥¹¥ï¡¼¥É¤òÆþÎϤ¹¤ë¤è¤¦Â¥¤µ¤ì¤ë¡£
 ÆþÎϤµ¤ì¤¿¥Ñ¥¹¥ï¡¼¥É¤ÏÊ£»¨¤µ¤ò¸¡ºº¤µ¤ì¤ë¡£
@@ -81,10 +77,10 @@ passwd \- 
 .PP
 ¥·¥¹¥Æ¥à¤Î¥Ç¥£¥Õ¥©¥ë¥È¤Î¾Ãµîʸ»ú¤äkillʸ»ú¤ò´Þ¤á¤Ê¤¤ÍͤË
 Ãí°Õ¤·¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
-\fIpasswd\fR¤Ï¤¢¤Þ¤ê¤Ëñ½ã¤Ê¥Ñ¥¹¥ï¡¼¥É¤Ø¤ÎÊѹ¹¤ÏµñÈݤ¹¤ë¡£
+\fBpasswd\fR¤Ï¤¢¤Þ¤ê¤Ëñ½ã¤Ê¥Ñ¥¹¥ï¡¼¥É¤Ø¤ÎÊѹ¹¤ÏµñÈݤ¹¤ë¡£
 .PP
 ÆþÎϤ·¤¿¥Ñ¥¹¥ï¡¼¥É¤¬¼õ¤±Æþ¤ì¤é¤ì¤¿¾ì¹ç¡¢
-\fIpasswd\fR¤Ï¤â¤¦°ìÅÙÆþÎϤòÂ¥¤·¡¢ÆóÈÖÌÜ¤ËÆþÎϤ·¤¿¤â¤Î¤òºÇ½é¤Î
+\fBpasswd\fR¤Ï¤â¤¦°ìÅÙÆþÎϤòÂ¥¤·¡¢ÆóÈÖÌÜ¤ËÆþÎϤ·¤¿¤â¤Î¤òºÇ½é¤Î
 ¤â¤Î¤ÈÈæ³Ó¤¹¤ë¡£
 ¥Ñ¥¹¥ï¡¼¥ÉÊѹ¹¤¬¼õ¤±Æþ¤ì¤é¤ì¤ë¤¿¤á¤Ë¤Ï¡¢Î¾Êý¤ÎÆþÎϤ¬Éä¹ç¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
 .SS ¥°¥ë¡¼¥×¥Ñ¥¹¥ï¡¼¥É
@@ -182,12 +178,9 @@ NIS
 .br
 /etc/shadow \- ¥æ¡¼¥¶¤Î°Å¹æ²½¤µ¤ì¤¿¥Ñ¥¹¥ï¡¼¥É
 .SH ´ØÏ¢¹àÌÜ
-passwd(3),
-shadow(3),
-group(5),
-passwd(5)
-.SH ËÝÌõ¼Ô
-¸Å¹âÏÂÄ÷ <furutaka@Flux.tokai.jaeri.go.jp>
-
-
-
+.BR passwd (3),
+.\" .BR shadow (3),
+.BR group (5),
+.BR passwd (5)
+.SH Ãø¼Ô
+Julianne Frances Haugh (jockgrrl@ix.netcom.com)
index 56c938166b2a39ed60b5bfe1aee08b307128d2d3..2c3ed806eb728b3d957c7497ad93893394a5e2e7 100644 (file)
@@ -1,4 +1,4 @@
-.\" Copyright 1989 - 1990, John F. Haugh II
+.\" Copyright 1989 - 1990, Julianne Frances Haugh
 .\" All rights reserved.
 .\"
 .\" Redistribution and use in source and binary forms, with or without
@@ -9,18 +9,14 @@
 .\" 2. Redistributions in binary form must reproduce 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
+.\" 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 JOHN HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" 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 JOHN HAUGH OR CONTRIBUTORS BE LIABLE
+.\" 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)
@@ -29,7 +25,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\"    $Id: passwd.5,v 1.1 2001/06/16 02:35:46 kloczek Exp $
+.\"    $Id: passwd.5,v 1.2 2001/11/16 17:01:33 ankry Exp $
 .\"
 .\" Japanese Version Copyright (c) 1997 Kazuyoshi Furutaka
 .\"         all rights reserved.
@@ -60,10 +56,10 @@ passwd \- 
 .PP
 ¥Ñ¥¹¥ï¡¼¥É¤¬shadow¤µ¤ì¤Æ¤¤¤ë¾ì¹ç¡¢¥Ñ¥¹¥ï¡¼¥ÉÍó¤òËä¤á¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
 shadow¥Ñ¥¹¥ï¡¼¥É¤òÍѤ¤¤Æ¤¤¤ë¾ì¹ç¡¢°Å¹æ²½¤µ¤ì¤¿¥Ñ¥¹¥ï¡¼¥É¤Ï
-\fB/etc/shadow\fR¤Ë½ñ¤«¤ì¤Æ¤¤¤ë¡£
+\fI/etc/shadow\fR¤Ë½ñ¤«¤ì¤Æ¤¤¤ë¡£
 °Å¹æ²½¤µ¤ì¤¿¥Ñ¥¹¥ï¡¼¥É¤Ï¡¢¥¢¥ë¥Õ¥¡¥Ù¥Ã¥Èa¤«¤éz¡¢A¤«¤éZ¡¢0¤«¤é9
 µÚ¤Ó\.¤È/.¤Î64ʸ»ú¤«¤éºî¤é¤ì¤¿13ʸ»ú¤«¤é¤Ê¤ë¡£
-¤³¤Îʸ»úÎ󤬤ɤΤ褦¤Ë²ò¼á¤µ¤ì¤ë¤«¤Î¾ÜºÙ¤Ï¡¢\fIcrypt(3)\fR¤ò
+¤³¤Îʸ»úÎ󤬤ɤΤ褦¤Ë²ò¼á¤µ¤ì¤ë¤«¤Î¾ÜºÙ¤Ï¡¢\fBcrypt\fR(3)¤ò
 »²¾È¤Î¤³¤È¡£
 .PP
 ¥ª¥×¥·¥ç¥ó¤Ç¡¢¥Ñ¥¹¥ï¡¼¥É¤Ë³¤¤¤Æ¥Ñ¥¹¥ï¡¼¥ÉÍ­¸ú´ü¸Â¤¬¡¢
@@ -76,7 +72,7 @@ shadow
 ¥Ñ¥¹¥ï¡¼¥É¤ÎÍ­¸ú´ü¸Â¤¬²á¤®¤¿»þ¤Ï¡¢¥æ¡¼¥¶¤Ï¿·¤·¤¤¥Ñ¥¹¥ï¡¼¥É¤òÀßÄê
 ¤·¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
 .PP
-¥³¥á¥ó¥ÈÍó¤Ï¡¢\fIfinger(1)\fRÅù¤ÎÍÍ¡¹¤Ê¥·¥¹¥Æ¥à¥æ¡¼¥Æ¥£¥ê¥Æ¥£¤ËÍøÍѤµ¤ì¤ë¡£
+¥³¥á¥ó¥ÈÍó¤Ï¡¢\fBfinger\fR(1)Åù¤ÎÍÍ¡¹¤Ê¥·¥¹¥Æ¥à¥æ¡¼¥Æ¥£¥ê¥Æ¥£¤ËÍøÍѤµ¤ì¤ë¡£
 ¥³¥á¥ó¥ÈÍó¤Ë¤Ï¹¹¤Ë3¤Ä¤Î¿ôÃͤ¬µ­Æþ¤µ¤ì¤Æ¤¤¤Æ¤âÎɤ¤¡£
 ¤½¤ì¤é¤Ï¡¢
 .IP "" .5i
@@ -90,22 +86,22 @@ ulimit= \- ulimit
 ¶èÊ̤µ¤ì¤Æ¤¤¤ë¡£
 .PP
 ¥Û¡¼¥à¥Ç¥£¥ì¥¯¥È¥êÍó¤Ë¤Ï¥í¥°¥¤¥ó»þ¤Îºî¶È¥Ç¥£¥ì¥¯¥È¥ê̾¤¬µ­¤µ¤ì¤Æ¤¤¤ë¡£
-\fILogin\fR¤Ï¤³¤Î¾ðÊó¤òÍѤ¤¤Æ´Ä¶­ÊÑ¿ô\fBHOME\fR¤ÎÆâÍÆ¤òÀßÄꤹ¤ë¡£
+\fBlogin\fR¤Ï¤³¤Î¾ðÊó¤òÍѤ¤¤Æ´Ä¶­ÊÑ¿ô\fBHOME\fR¤ÎÆâÍÆ¤òÀßÄꤹ¤ë¡£
 .PP
 ¥³¥Þ¥ó¥É¥¤¥ó¥¿¥×¥ê¥¿Íó¤Ë¤Ï¥æ¡¼¥¶¤Î¥³¥Þ¥ó¥É¸À¸ì¥¤¥ó¥¿¥×¥ê¥¿¤â¤·¤¯¤Ï
 ºÇ½é¤Ë¼Â¹Ô¤¹¤ë¥×¥í¥°¥é¥à¤Î̾Á°¤òµ­¤¹¡£
-\fILogin\fR¤Ï¤³¤Î¾ðÊó¤òÍѤ¤¤Æ´Ä¶­ÊÑ¿ô\fBSHELL\fR¤ÎÆâÍÆ¤òÀßÄꤹ¤ë¡£
+\fBlogin\fR¤Ï¤³¤Î¾ðÊó¤òÍѤ¤¤Æ´Ä¶­ÊÑ¿ô\fBSHELL\fR¤ÎÆâÍÆ¤òÀßÄꤹ¤ë¡£
 ¤³¤ÎÍó¤Ë²¿¤âµ­¤µ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ï¡¢¥Ç¥£¥Õ¥©¥ë¥ÈÃͤȤ·¤Æ\fB/bin/sh\fR¤ò
 »ÈÍѤ¹¤ë¡£
 .SH ¥Õ¥¡¥¤¥ë
 /etc/passwd \- ¥æ¡¼¥¶¤Î¥¢¥«¥¦¥ó¥È¾ðÊó
 .SH ´ØÏ¢¹àÌÜ
-login(1),
-passwd(1),
-su(1),
-sulogin(1M),
-shadow(5),
-pwconv(8),
-pwunconv(8)
-.SH ËÝÌõ¼Ô
-¸Å¹âÏÂÄ÷ <furutaka@Flux.tokai.jaeri.go.jp>
+.BR login (1),
+.BR passwd (1),
+.BR su (1),
+.BR sulogin (8),
+.BR shadow (5),
+.BR pwconv (8),
+.BR pwunconv (8)
+.SH Ãø¼Ô
+Julianne Frances Haugh (jockgrrl@ix.netcom.com)
index cbb24bba6bb1b5b81c0eaf1d0e8fa6e0d4eb1f5d..930b70d0eda48cbf24a82154f5ee3abd226d4894 100644 (file)
@@ -1,4 +1,4 @@
-.\" Copyright 1989 - 1990, John F. Haugh II
+.\" Copyright 1989 - 1990, Julianne Frances Haugh
 .\" All rights reserved.
 .\"
 .\" Redistribution and use in source and binary forms, with or without
@@ -9,18 +9,14 @@
 .\" 2. Redistributions in binary form must reproduce 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
+.\" 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 JOHN HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" 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 JOHN HAUGH OR CONTRIBUTORS BE LIABLE
+.\" 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)
@@ -29,7 +25,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\"    $Id: porttime.5,v 1.1 2001/06/16 02:35:46 kloczek Exp $
+.\"    $Id: porttime.5,v 1.2 2001/11/16 17:01:33 ankry Exp $
 .\"
 .\" Japanese Version Copyright (c) 1997 Kazuyoshi Furutaka
 .\"         all rights reserved.
@@ -62,32 +58,32 @@ porttime \- 
 Á´¤Æ¤Î¥Ý¡¼¥È¤«¤é¥¢¥¯¥»¥¹¤¹¤ë»ö¤òµö²Ä¤·¤Æ¤¤¤ë¡£
 .br
 .sp 1
-*:jfh:Wk0900-1700
+       *:jfh:Wk0900-1700
 .br
 .sp 1
 °Ê²¼¤Î¥¨¥ó¥È¥ê¤Ç¤Ï¡¢\fBroot\fRµÚ¤Ó\fBoper\fR°Ê³°¤Î¥æ¡¼¥¶¤Ë¤ÏÇ¡²¿¤Ê¤ë»þ´Ö¤Ç¤â
 /dev/console¤«¤é¤Î¥¢¥¯¥»¥¹¤òµö²Ä¤·¤Æ¤¤¤Ê¤¤¡£
-¤³¤ÎÎ㤫¤é\fB/etc/porttime\fR¥Õ¥¡¥¤¥ë¤¬¥¢¥¯¥»¥¹¥¿¥¤¥à¤Î¥ê¥¹¥È¤È¤·¤Æ
+¤³¤ÎÎ㤫¤é\fI/etc/porttime\fR¥Õ¥¡¥¤¥ë¤¬¥¢¥¯¥»¥¹¥¿¥¤¥à¤Î¥ê¥¹¥È¤È¤·¤Æ
 ¤É¤ÎÍÍ¤Ê½ç½ø¤Ç½èÍý¤µ¤ì¤ë¤«¤¬Ê¬¤«¤ë¡£
 Â¾¤ÎÁ´¤Æ¤Î¥æ¡¼¥¶¤ÏÆóÈÖÌܤΥ¨¥ó¥È¥ê¤ËÉä¹ç¤·¡¢½¾¤Ã¤Æconsole¤«¤é¤Î¥¢¥¯¥»¥¹¤Ï
 µö²Ä¤µ¤ì¤Ê¤¤¡£
 .br
 .sp 1
-console:root,oper:Al0000-2400
+       console:root,oper:Al0000-2400
 .br
-console:*:
+       console:*:
 .br
 .sp 1
 °Ê²¼¤Î¥¨¥ó¥È¥ê¤Ç¤Ï¡¢¥æ¡¼¥¶\fBgames\fR¤Ï½¢¶È»þ´Ö³°¤Ê¤éÇ¡²¿¤Ê¤ë¥Ý¡¼¥È¤«¤é¤â
 ¥¢¥¯¥»¥¹½ÐÍè¤ëÍͤ˻ØÄꤷ¤Æ¤¤¤ë¡£
 .br
 .sp 1
-*:games:Wk1700-0900,SaSu0000-2400
+       *:games:Wk1700-0900,SaSu0000-2400
 .br
 .sp 1
 .SH ¥Õ¥¡¥¤¥ë
 /etc/porttime \- ¥Ý¡¼¥È¤Ø¤Î¥¢¥¯¥»¥¹²Äǽ»þ´Ö¤òµ­¤·¤¿¥Õ¥¡¥¤¥ë
 .SH ´ØÏ¢¹àÌÜ
-login(1)
-.SH ËÝÌõ¼Ô
-¸Å¹âÏÂÄ÷ <furutaka@Flux.tokai.jaeri.go.jp>
+.BR login (1)
+.SH Ãø¼Ô
+Julianne Frances Haugh (jockgrrl@ix.netcom.com)
index 8606f36ec7d687d420656394ba203f5ce27dad58..be353f6671b4b6615833e2d29be190e8d959794b 100644 (file)
@@ -1,4 +1,4 @@
-.\" Copyright 1992 - 1993, John F. Haugh II
+.\" Copyright 1992 - 1993, Julianne Frances Haugh
 .\" All rights reserved.
 .\"
 .\" Redistribution and use in source and binary forms, with or without
@@ -9,18 +9,14 @@
 .\" 2. Redistributions in binary form must reproduce 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
+.\" 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 JOHN HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" 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 JOHN HAUGH OR CONTRIBUTORS BE LIABLE
+.\" 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)
@@ -29,7 +25,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\"    $Id: pw_auth.3,v 1.1 2001/06/16 02:35:46 kloczek Exp $
+.\"    $Id: pw_auth.3,v 1.2 2001/11/16 17:01:33 ankry Exp $
 .\"
 .\" Japanese Version Copyright (c) 1997 Kazuyoshi Furutaka
 .\"         all rights reserved.
 .SH Ì¾Á°
 pwauth \- ´ÉÍý¼Ô¤ÎÀßÄꤷ¤¿¥Ñ¥¹¥ï¡¼¥Éǧ¾Ú¥ë¡¼¥Á¥ó
 .SH ½ñ¼°
-.IP "" .5i
-#include <pwauth.h>
-.IP "" .5i
-int pw_auth (char *command, char *user, int reason, char *input);
+.B #include <pwauth.h>
+.PP
+.B int pw_auth (char
+.I *command,
+.B char
+.I *user,
+.B int
+.I reason,
+.B char
+.IB *input) ;
 .SH ÀâÌÀ
-.I pw_auth
+.B pw_auth
 ¤Ï¡¢»ØÄꤵ¤ì¤¿¥æ¡¼¥¶¤ËÂФ·¤Æ´ÉÍý¼Ô¤¬ÀßÄꤷ¤¿´Ø¿ô¤ò¸Æ¤Ó½Ð¤¹¡£
 .PP
 \fIcommand\fR¤Ïǧ¾Ú¥×¥í¥°¥é¥à¤Î̾Á°¤Ç¤¢¤ë¡£
@@ -55,7 +57,7 @@ int pw_auth (char *command, char *user, int reason, char *input);
 ³Æ¡¹¤Î¥×¥í¥°¥é¥à¤Ïµ­¤µ¤ì¤Æ¤¤¤ë½ç¤Ë¼Â¹Ô¤µ¤ì¤ë¡£
 ¥³¥Þ¥ó¥É¥é¥¤¥ó°ú¿ô¤Ï°Ê²¼¤Ëµó¤²¤ëÊýË¡¤Ç»ØÄꤵ¤ì¤ë¡£
 .PP
-\fIuser\fR¤Ï¡¢\fB/etc/passwd\fR¥Õ¥¡¥¤¥ëÃæ¤Ëµ­¤µ¤ì¤¿¡¢
+\fIuser\fR¤Ï¡¢\fI/etc/passwd\fR¥Õ¥¡¥¤¥ëÃæ¤Ëµ­¤µ¤ì¤¿¡¢
 Ç§¾Ú¤µ¤ì¤ë¥æ¡¼¥¶Ì¾¤Ç¤¢¤ë¡£
 ¥æ¡¼¥¶¥¨¥ó¥È¥ê¤Ï¥æ¡¼¥¶Ì¾¤Ç»ØÄꤵ¤ì¤ë¡£
 ¤·¤¿¤¬¤Ã¤Æ¡¢°ì°ÕŪ¤Ç¤Ê¤¤¥æ¡¼¥¶ID¤¬¤¢¤Ã¤Æ¤âÎɤ¯¡¢
@@ -67,54 +69,59 @@ int pw_auth (char *command, char *user, int reason, char *input);
 ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿0,1µÚ¤Ó2¤ò»È¤¦¤³¤È¤¬½ÐÍè¤ë¡£
 Ç§¾Ú¤òÍ×ÀÁ¤·¤¿¥æ¡¼¥¶¤ÎƱ°ìÀ­¤òÄ´¤Ù¤ë¤¿¤á¤Ë¼ÂºÝ¤Î¥æ¡¼¥¶ID¤òÍѤ¤¤ë¤³¤È¤â½ÐÍè¤ë¡£
 \fIreason\fR¤Ï°Ê²¼¤Î¤¤¤º¤ì¤«¤Ç¤¢¤ë
-.IP PW_SU 1i
+.IP \fBPW_SU\fR 1i
 »ØÄꤷ¤¿¥æ¡¼¥¶¤Î¼Â¥æ¡¼¥¶ID¤ËÊѹ¹¤¹¤ë¤¿¤á¤Ë¡¢¥³¥Þ¥ó¥É¤òµ¯Æ°¤·¤¿¥æ¡¼¥¶¤Î
 ¼Â¥æ¡¼¥¶ID¤Îǧ¾Ú¤ò¹Ô¤¦¡£
 \fB-s\fR¥ª¥×¥·¥ç¥ó¤Î¸å¤Ë¥æ¡¼¥¶Ì¾¤ò»ØÄꤷ¤ÆÇ§¾Ú¥×¥í¥°¥é¥à¤¬¸Æ¤Ó½Ð¤µ¤ì¤ë¡£
-.IP PW_LOGIN 1i
+.IP \fBPW_LOGIN\fR 1i
 ¿·¤¿¤Ë¥í¥°¥¤¥ó¥»¥Ã¥·¥ç¥ó¤òºî¤ê½Ð¤½¤¦¤È¤·¤Æ¤¤¤ë»ØÄꤵ¤ì¤¿¥æ¡¼¥¶¤Îǧ¾Ú¤ò
 ¹Ô¤¦¡£
 \fB-l\fR¥ª¥×¥·¥ç¥ó¤Î¸å¤Ë¥æ¡¼¥¶Ì¾¤ò»ØÄꤷ¤ÆÇ§¾Ú¥×¥í¥°¥é¥à¤¬¸Æ¤Ó½Ð¤µ¤ì¤ë¡£
-.IP PW_ADD 1i
+.IP \fBPW_ADD\fR 1i
 »ØÄꤵ¤ì¤¿¥æ¡¼¥¶¤ËÂФ·¤Æ¿·¤¿¤Ê¥¨¥ó¥È¥ê¤òºî¤ë¡£
 ¤³¤ì¤Ë¤è¤ê¡¢Ç§¾Ú¥×¥í¥°¥é¥à¤¬¿·µ¬¥æ¡¼¥¶ÍѤε­²±Îΰè¤ò½àÈ÷¤¹¤ë¤³¤È¤¬½ÐÍè¤ë¡£
 \fB-a\fR¥ª¥×¥·¥ç¥ó¤Î¸å¤Ë¥æ¡¼¥¶Ì¾¤ò»ØÄꤷ¤ÆÇ§¾Ú¥×¥í¥°¥é¥à¤¬¸Æ¤Ó½Ð¤µ¤ì¤ë¡£
-.IP PW_CHANGE 1i
+.IP \fBPW_CHANGE\fR 1i
 »ØÄꤵ¤ì¤¿¥æ¡¼¥¶¤Î´û¸¤Î¥¨¥ó¥È¥ê¤òÊѹ¹¤¹¤ë¡£
 ¤³¤ì¤Ë¤è¤ê¡¢Ç§¾Ú¥×¥í¥°¥é¥à¤¬´û¸¤Î¥æ¡¼¥¶¤Îǧ¾Ú¾ðÊó¤òÊѹ¹¤¹¤ë¤³¤È¤¬½ÐÍè¤ë¡£
 \fB-c\fR¥ª¥×¥·¥ç¥ó¤Î¸å¤Ë¥æ¡¼¥¶Ì¾¤ò»ØÄꤷ¤ÆÇ§¾Ú¥×¥í¥°¥é¥à¤¬¸Æ¤Ó½Ð¤µ¤ì¤ë¡£
-.IP PW_DELETE 1i
+.IP \fBPW_DELETE\fR 1i
 »ØÄꤵ¤ì¤¿¥æ¡¼¥¶¤Îǧ¾Ú¾ðÊó¤ò¾Ãµî¤¹¤ë¡£
 ¤³¤ì¤Ë¤è¤ê¡¢°Ê¸å¤³¤Îǧ¾Ú¥×¥í¥°¥é¥à¤òÍѤ¤¤ÆÇ§¾Ú¤µ¤ì¤ë»ö¤Î̵¤¯¤Ê¤Ã¤¿¥æ¡¼¥¶
 ¾ðÊó¤Îµ­²±Îΰè¤ò²óÉü¤¹¤ë¤³¤È¤¬½ÐÍè¤ë¡£
 \fB-d\fR¥ª¥×¥·¥ç¥ó¤Î¸å¤Ë¥æ¡¼¥¶Ì¾¤ò»ØÄꤷ¤ÆÇ§¾Ú¥×¥í¥°¥é¥à¤¬¸Æ¤Ó½Ð¤µ¤ì¤ë¡£
-.IP PW_TELNET 1i
-\fItelnet\fR¥³¥Þ¥ó¥É¤òÍѤ¤¤Æ¥·¥¹¥Æ¥à¤ËÀܳ¤·¤ÆÍ褿¥æ¡¼¥¶¤Îǧ¾Ú¤ò¹Ô¤¦¡£
+.IP \fBPW_TELNET\fR 1i
+\fBtelnet\fR¥³¥Þ¥ó¥É¤òÍѤ¤¤Æ¥·¥¹¥Æ¥à¤ËÀܳ¤·¤ÆÍ褿¥æ¡¼¥¶¤Îǧ¾Ú¤ò¹Ô¤¦¡£
 \fB-t\fR¥ª¥×¥·¥ç¥ó¤Î¸å¤Ë¥æ¡¼¥¶Ì¾¤ò»ØÄꤷ¤ÆÇ§¾Ú¥×¥í¥°¥é¥à¤¬¸Æ¤Ó½Ð¤µ¤ì¤ë¡£
-.IP PW_RLOGIN 1i
-\fIrlogin\fR¥³¥Þ¥ó¥É¤òÍѤ¤¤Æ¥·¥¹¥Æ¥à¤ËÀܳ¤·¤ÆÍ褿¥æ¡¼¥¶¤Îǧ¾Ú¤ò¹Ô¤¦¡£
+.IP \fBPW_RLOGIN\fR 1i
+\fBrlogin\fR¥³¥Þ¥ó¥É¤òÍѤ¤¤Æ¥·¥¹¥Æ¥à¤ËÀܳ¤·¤ÆÍ褿¥æ¡¼¥¶¤Îǧ¾Ú¤ò¹Ô¤¦¡£
 \fB-r\fR¥ª¥×¥·¥ç¥ó¤Î¸å¤Ë¥æ¡¼¥¶Ì¾¤ò»ØÄꤷ¤ÆÇ§¾Ú¥×¥í¥°¥é¥à¤¬¸Æ¤Ó½Ð¤µ¤ì¤ë¡£
-.IP PW_FTP 1i
-\fIftp\fR¥³¥Þ¥ó¥É¤òÍѤ¤¤Æ¥·¥¹¥Æ¥à¤ËÀܳ¤·¤ÆÍ褿¥æ¡¼¥¶¤Îǧ¾Ú¤ò¹Ô¤¦¡£
+.IP \fBPW_FTP\fR 1i
+\fBftp\fR¥³¥Þ¥ó¥É¤òÍѤ¤¤Æ¥·¥¹¥Æ¥à¤ËÀܳ¤·¤ÆÍ褿¥æ¡¼¥¶¤Îǧ¾Ú¤ò¹Ô¤¦¡£
 \fB-f\fR¥ª¥×¥·¥ç¥ó¤Î¸å¤Ë¥æ¡¼¥¶Ì¾¤ò»ØÄꤷ¤ÆÇ§¾Ú¥×¥í¥°¥é¥à¤¬¸Æ¤Ó½Ð¤µ¤ì¤ë¡£
 ¥æ¡¼¥¶¤È¤ä¤ê¤È¤ê¤¹¤ë¤¿¤á¤Ëɸ½à¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤òÍѤ¤¤ë¤³¤È¤Ï½ÐÍè¤Ê¤¤¡£
 É¸½àÆþÎÏ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Ï¿Æ¥×¥í¥»¥¹¤Ë·ë¤Ó¤Ä¤±¤é¤ì¤Æ¤ª¤ê¡¢
-°ìÊý¾¤ÎÆó¤Ä¤Î½ÐÎÏ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Ï\fB/dev/null\fR¤Ë·ë¤Ó¤Ä¤±¤é¤ì¤Æ¤¤¤ë¡£
-\fIpw_auth\fR´Ø¿ô¤Ï¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿0¤òÍѤ¤¤Æ°ì¹Ô¤Î¥Ç¡¼¥¿¤ò
+°ìÊý¾¤ÎÆó¤Ä¤Î½ÐÎÏ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Ï\fI/dev/null\fR¤Ë·ë¤Ó¤Ä¤±¤é¤ì¤Æ¤¤¤ë¡£
+\fBpw_auth\fR´Ø¿ô¤Ï¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿0¤òÍѤ¤¤Æ°ì¹Ô¤Î¥Ç¡¼¥¿¤ò
 Ç§¾Ú¥×¥í¥°¥é¥à¤Ë¥Ñ¥¤¥×¤¹¤ë¡£
-.IP PW_REXEC 1i
+.IP \fBPW_REXEC\fR 1i
 \fIrexec\fR¥³¥Þ¥ó¥É¤òÍѤ¤¤Æ¥·¥¹¥Æ¥à¤ËÀܳ¤·¤ÆÍ褿¥æ¡¼¥¶¤Îǧ¾Ú¤ò¹Ô¤¦¡£
 \fB-x\fR¥ª¥×¥·¥ç¥ó¤Î¸å¤Ë¥æ¡¼¥¶Ì¾¤ò»ØÄꤷ¤ÆÇ§¾Ú¥×¥í¥°¥é¥à¤¬¸Æ¤Ó½Ð¤µ¤ì¤ë¡£
 ¥ê¥â¡¼¥È¥æ¡¼¥¶¤È¤ä¤ê¤È¤ê¤¹¤ë¤¿¤á¤Ëɸ½à¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤òÍѤ¤¤ë¤³¤È¤Ï
 ½ÐÍè¤Ê¤¤¡£
 É¸½àÆþÎÏ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Ï¿Æ¥×¥í¥»¥¹¤Ë·ë¤Ó¤Ä¤±¤é¤ì¤Æ¤ª¤ê¡¢
-°ìÊý¾¤ÎÆó¤Ä¤Î½ÐÎÏ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Ï\fB/dev/null\fR¤Ë·ë¤Ó¤Ä¤±¤é¤ì¤Æ¤¤¤ë¡£
-\fIpw_auth\fR´Ø¿ô¤Ï¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿0¤òÍѤ¤¤Æ°ì¹Ô¤Î¥Ç¡¼¥¿¤ò
+°ìÊý¾¤ÎÆó¤Ä¤Î½ÐÎÏ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Ï\fI/dev/null\fR¤Ë·ë¤Ó¤Ä¤±¤é¤ì¤Æ¤¤¤ë¡£
+\fBpw_auth\fR´Ø¿ô¤Ï¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿0¤òÍѤ¤¤Æ°ì¹Ô¤Î¥Ç¡¼¥¿¤ò
 Ç§¾Ú¥×¥í¥°¥é¥à¤Ë¥Ñ¥¤¥×¤¹¤ë¡£
 .PP
-ºÇ¸å¤Î°ú¿ô¤ÏPW_FTPµÚ¤ÓPW_REXEC¤ÎÊýË¡¤ÇÍѤ¤¤é¤ì¤ëǧ¾Ú¥Ç¡¼¥¿¤Ç¤¢¤ê¡¢
+ºÇ¸å¤Î°ú¿ô¤Ï
+.B PW_FTP
+µÚ¤Ó
+.B PW_REXEC
+¤ÎÊýË¡¤ÇÍѤ¤¤é¤ì¤ëǧ¾Ú¥Ç¡¼¥¿¤Ç¤¢¤ê¡¢
 °ì¹Ô¤Îʸ¤È¤·¤Æ°·¤ï¤ì¤Æ¡¢Ç§¾Ú¥×¥í¥°¥é¥à¤Ë¥Ñ¥¤¥×¤µ¤ì¤ë¡£
-PW_CHANGE¤ÎÊýË¡¤Ç¥æ¡¼¥¶Ì¾¤¬Êѹ¹¤µ¤ì¤ë¾ì¹ç¤Ï¡¢\fIinput\fR¤ÎÆâÍÆ¤Ï
+.B PW_CHANGE
+¤ÎÊýË¡¤Ç¥æ¡¼¥¶Ì¾¤¬Êѹ¹¤µ¤ì¤ë¾ì¹ç¤Ï¡¢\fIinput\fR¤ÎÆâÍÆ¤Ï
 °ÊÁ°ÍѤ¤¤Æ¤¤¤¿¥æ¡¼¥¶Ì¾¤È¤Ê¤Ã¤Æ¤¤¤ë¡£
 .SH ·Ù¹ð
 ¤³¤Î´Ø¿ô¤Ï¼ÂºÝ¤Î¥»¥Ã¥·¥ç¥ó¤òºî¤ê½Ð¤¹¤³¤È¤Ï¤·¤Ê¤¤¡£
@@ -122,9 +129,14 @@ PW_CHANGE
 .PP
 ¤Þ¤À¥Í¥Ã¥È¥ï¡¼¥¯¥ª¥×¥·¥ç¥ó¤Ï¥Æ¥¹¥È¤·¤Æ¤¤¤Ê¤¤¡£
 .SH ÊÖ¤êÃÍ
-\fIpw_auth\fR´Ø¿ô¤Ï¡¢Ç§¾Ú¥×¥í¥°¥é¥à¤¬½ªÎ»¥³¡¼¥É0¤Ç½ªÎ»¤·¤¿¾ì¹ç¤Ï0¤ò¡¢
+\fBpw_auth\fR´Ø¿ô¤Ï¡¢Ç§¾Ú¥×¥í¥°¥é¥à¤¬½ªÎ»¥³¡¼¥É0¤Ç½ªÎ»¤·¤¿¾ì¹ç¤Ï0¤ò¡¢
 ¤½¤ì°Ê³°¤Î¾ì¹ç¤Ï¥¼¥í°Ê³°¤ÎÃͤòÊÖ¤¹¡£
 .SH ´ØÏ¢¹àÌÜ
-login(1), passwd(1), su(1), useradd(1), userdel(1), usermod(1)
-.\" .SH ËÝÌõ¼Ô
-.\" ¸Å¹âÏÂÄ÷ <furutaka@Flux.tokai.jaeri.go.jp>
+.BR login (1),
+.BR passwd (1),
+.BR su (1),
+.BR useradd (8),
+.BR userdel (8),
+usermod(8)
+.SH AUTHOR
+Julianne Frances Haugh (jockgrrl@ix.netcom.com)
index 590d870582fa4d7a93512bcfadd6192356328484..2992c9609dbbe113205b85d94863f60d50834d1a 100644 (file)
@@ -1,4 +1,4 @@
-.\" Copyright 1992, John F. Haugh II
+.\" Copyright 1992, Julianne Frances Haugh
 .\" All rights reserved.
 .\"
 .\" Redistribution and use in source and binary forms, with or without
@@ -9,18 +9,14 @@
 .\" 2. Redistributions in binary form must reproduce 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
+.\" 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 JOHN HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" 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 JOHN HAUGH OR CONTRIBUTORS BE LIABLE
+.\" 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)
@@ -29,7 +25,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\"    $Id: pwauth.8,v 1.1 2001/06/16 02:35:46 kloczek Exp $
+.\"    $Id: pwauth.8,v 1.2 2001/11/16 17:01:33 ankry Exp $
 .\"
 .\" Japanese Version Copyright (c) 1997 Kazuyoshi Furutaka
 .\"         all rights reserved.
@@ -42,18 +38,18 @@ pwauth \- 
 .SH ÀâÌÀ
 ¥·¥¹¥Æ¥à¤Î´ÉÍý¼Ô¤Ï¡¢¥æ¡¼¥¶¤¬ËܿͤǤ¢¤ë»ö¤òǧ¾Ú¤¹¤ë¼êÃʤȤ·¤Æ¡¢
 ¥×¥í¥°¥é¥à¤ò¤¤¤¯¤Ä¤«ÀßÄꤷ¤Æ¤ª¤¯»ö¤¬½ÐÍè¤ë¡£
-¤½¤ì¤é¤Î¥×¥í¥°¥é¥à¤Ï\fB/etc/passwd\fR¤â¤·¤¯¤Ï\fB/etc/shadow\fR¥Õ¥¡¥¤¥ëÃæ¤Ç¡¢
+¤½¤ì¤é¤Î¥×¥í¥°¥é¥à¤Ï\fI/etc/passwd\fR¤â¤·¤¯¤Ï\fI/etc/shadow\fR¥Õ¥¡¥¤¥ëÃæ¤Ç¡¢
 °Å¹æ²½¤µ¤ì¤¿¥Ñ¥¹¥ï¡¼¥É¤ÎÂå¤ï¤ê¤È¤·¤Æ»ØÄꤵ¤ì¤ë¡£
 ¥æ¡¼¥¶¥¢¥«¥¦¥ó¥È¤ò´ÉÍý¤¹¤ë¥æ¡¼¥Æ¥£¥ê¥Æ¥£¤Ï¡¢°Å¹æ²½¤µ¤ì¤¿¥Ñ¥¹¥ï¡¼¥ÉÍó
 ¤òÄ´¤Ù¡¢¤½¤Î¥æ¡¼¥¶¤ËÂФ·¤Æ¥·¥¹¥Æ¥à´ÉÍý¼Ô¤¬Ç§¾Ú¥×¥í¥°¥é¥à¤òÀßÄꤷ¤Æ
 ¤¤¤ë¤«¤É¤¦¤«¤òȽÃǤ¹¤ë¡£
 ´ÉÍý¥×¥í¥°¥é¥à¤Î¤¤¤º¤ì¤«¤¬¡¢
 ¤³¤ì¤«¤éÊѹ¹¤µ¤ì¤ë¥æ¡¼¥¶¤Ëǧ¾Ú¥×¥í¥°¥é¥à¤¬ÀßÄꤵ¤ì¤Æ¤¤¤ë¤È
-ȽÃǤ·¤¿¾ì¹ç¤Ï¾ï¤Ë¡¢\fIpw_auth\fR´Ø¿ô¤¬¸Æ¤Ó½Ð¤µ¤ì¤ë¡£
+ȽÃǤ·¤¿¾ì¹ç¤Ï¾ï¤Ë¡¢\fBpw_auth\fR´Ø¿ô¤¬¸Æ¤Ó½Ð¤µ¤ì¤ë¡£
 .PP
-¥æ¡¼¥¶Ç§¾Ú¤ËÍѤ¤¤ëºÇ½é¤Î¥¨¥ó¥È¥ê¤Ï\fIuseradd\fR¥³¥Þ¥ó¥É¤Ë¤è¤êÀ¸À®¤µ¤ì¤ë¡£
+¥æ¡¼¥¶Ç§¾Ú¤ËÍѤ¤¤ëºÇ½é¤Î¥¨¥ó¥È¥ê¤Ï\fBuseradd\fR¥³¥Þ¥ó¥É¤Ë¤è¤êÀ¸À®¤µ¤ì¤ë¡£
 Ç§¾Ú¾ðÊó¤ÎÊѹ¹¤ä¥æ¡¼¥¶¥¢¥«¥¦¥ó¥È¤òºï½ü¤¹¤ëÅù¤ÎÊѹ¹¤ËºÝ¤·¤Æ¤Ï
-\fIpw_auth\fR´Ø¿ô¤¬¸Æ¤Ó½Ð¤µ¤ì¡¢
+\fBpw_auth\fR´Ø¿ô¤¬¸Æ¤Ó½Ð¤µ¤ì¡¢
 ³Æ¥æ¡¼¥¶¥¢¥«¥¦¥ó¥È¤Îǧ¾Ú¾ðÊ󤬺ǿ·¤Î¾õÂ֤˰ݻý¤µ¤ì¤ë¡£
 .PP
 Ç§¾Ú¥×¥í¥°¥é¥à¼«ÂÎ¤Ï¼ÂºÝ¤Î¥í¥°¥¤¥óËô¤Ï¥Í¥Ã¥È¥ï¡¼¥¯¥»¥Ã¥·¥ç¥ó¤ò
@@ -62,6 +58,12 @@ pwauth \- 
 ¸Æ¤Ó½Ð¤·¤¿¥×¥í¥»¥¹¤Ë¤Ï¡¢¥í¥°¥¤¥ó¤â¤·¤¯¤Ï¥Í¥Ã¥È¥ï¡¼¥¯¥»¥Ã¥·¥ç¥ó¤òÀ¸À®
 ¤·ÆÀ¤ëŬÀÚ¤ÊÆÃ¸¢¤¬¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
 .SH ´ØÏ¢¹àÌÜ
-login(1), passwd(1), su(1), useradd(1), userdel(1), usermod(1), pwauth(3)
-.SH ËÝÌõ¼Ô
-¸Å¹âÏÂÄ÷ <furutaka@Flux.tokai.jaeri.go.jp>
+.BR login (1),
+.BR passwd (1),
+.BR su (1),
+.BR useradd (8),
+.BR userdel (8),
+.BR usermod (8),
+.BR pw_auth (3)
+.SH Ãø¼Ô
+Julianne Frances Haugh (jockgrrl@ix.netcom.com)
index b2323ad46b05d57aae7acc7ddce74222b263272f..7845cd7d4bd72d73cd0a8127127c26dc34126efb 100644 (file)
@@ -1,4 +1,4 @@
-.\" Copyright 1992, John F. Haugh II
+.\" Copyright 1992, Julianne Frances Haugh
 .\" All rights reserved.
 .\"
 .\" Redistribution and use in source and binary forms, with or without
@@ -9,18 +9,14 @@
 .\" 2. Redistributions in binary form must reproduce 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
+.\" 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 JOHN HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" 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 JOHN HAUGH OR CONTRIBUTORS BE LIABLE
+.\" 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)
@@ -29,7 +25,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\"    $Id: pwck.8,v 1.1 2001/06/16 02:35:46 kloczek Exp $
+.\"    $Id: pwck.8,v 1.2 2001/11/16 17:01:33 ankry Exp $
 .\"
 .\" Japanese Version Copyright (c) 1997 Kazuyoshi Furutaka
 .\"         all rights reserved.
 .SH Ì¾Á°
 pwck \- ¥Ñ¥¹¥ï¡¼¥É¥Õ¥¡¥¤¥ë¤Î´°Á´À­¤ò¸¡¾Ú¤¹¤ë
 .SH ½ñ¼°
-\fBpwck\fR [ \fB-r\fR ] [ \fIpassword\fR \fIshadow\fR ]
-.SH ½ñ¼°
+\fBpwck\fR [\fB-r\fR] [\fIpasswd\fR \fIshadow\fR]
+.SH ÀâÌÀ
 \fBpwck\fR¤Ï¥·¥¹¥Æ¥à¤Îǧ¾Ú¾ðÊó¤Î´°Á´À­¤Î¸¡¾Ú¤ò¹Ô¤¦¡£
-\fB/etc/passwd\fRµÚ¤Ó\fB/etc/shadow\fR¥Õ¥¡¥¤¥ëÃæ¤ÎÁ´¤Æ¤Î¥¨¥ó¥È¥ê¡¼¤ËÂФ·¤Æ¡¢
+\fI/etc/passwd\fRµÚ¤Ó\fI/etc/shadow\fR¥Õ¥¡¥¤¥ëÃæ¤ÎÁ´¤Æ¤Î¥¨¥ó¥È¥ê¡¼¤ËÂФ·¤Æ¡¢
 ½ñ¼°¤¬Àµ¤·¤¤¤«µÚ¤Ó³ÆÍó¤Ëµ­¤µ¤ì¤Æ¤¤¤ë¥Ç¡¼¥¿¤ÏÍ­¸ú¤Ê¤â¤Î¤«¤É¤¦¤«¤Î¸¡¾Ú¤¬
 ¹Ô¤Ê¤ï¤ì¤ë¡£
 ½ñ¼°¤¬Àµ¤·¤¯¤Ê¤«¤Ã¤¿¤ê¤½¤Î¾¤ÎÄûÀµÉÔǽ¤Ê¸í¤ê¤ò´Þ¤à¥¨¥ó¥È¥ê¡¼¤Ïºï½ü¤òÂ¥¤µ¤ì¤ë¡£
@@ -74,12 +70,12 @@ pwck \- 
 Â¾¤ÎÁ´¤Æ¤Î¥¨¥é¡¼¤ËÂФ·¤Æ¤Ï·Ù¹ð¤¬¤Ê¤µ¤ì¤ë¤Î¤ß¤Ç¤¢¤ê¡¢¤½¤Î¾ì¹ç¤Ï
 ¸í¤ê¤òÄûÀµ¤¹¤ë¤¿¤á¤Ë\fBusermod\fR¥³¥Þ¥ó¥É¤ò¼Â¹Ô¤¹¤ë¤è¤¦´«¤á¤é¤ì¤ë¡£
 .P
-\fB/etc/passwd\fR¥Õ¥¡¥¤¥ë¤ËºîÍѤ¹¤ë¥³¥Þ¥ó¥É¤Ï¡¢¸í¤Ã¤¿¤â¤·¤¯¤Ï
+\fI/etc/passwd\fR¥Õ¥¡¥¤¥ë¤ËºîÍѤ¹¤ë¥³¥Þ¥ó¥É¤Ï¡¢¸í¤Ã¤¿¤â¤·¤¯¤Ï
 ½ÅÊ£¤·¤¿¥¨¥ó¥È¥ê¡¼¤òÊѹ¹¤¹¤ë¤³¤È¤Ï½ÐÍè¤Ê¤¤¡£
 ¤½¤ÎºÝ¤Ï¡¢\fBpwck\fR¤òÍѤ¤¤Æ¸í¤ê¤Î¤¢¤ë¥¨¥ó¥È¥ê¡¼¤òºï½ü¤¹¤Ù¤­¤Ç¤¢¤ë¡£
 .SH ¥ª¥×¥·¥ç¥ó
-¥Ç¥£¥Õ¥©¥ë¥È¤Ç¤Ï¡¢\fBpwck\fR¤Ï\fB/etc/passwd\fR¥Õ¥¡¥¤¥ëµÚ¤Ó
-\fB/etc/shadow\fR¤ËÂФ·¤ÆºîÍѤ¹¤ë¡£
+¥Ç¥£¥Õ¥©¥ë¥È¤Ç¤Ï¡¢\fBpwck\fR¤Ï\fI/etc/passwd\fR¥Õ¥¡¥¤¥ëµÚ¤Ó
+\fI/etc/shadow\fR¤ËÂФ·¤ÆºîÍѤ¹¤ë¡£
 \fIpasswd\fRµÚ¤Ó\fIshadow\fR¥Ñ¥é¥á¡¼¥¿¤òÍѤ¤¤ÆÊ̤Υե¡¥¤¥ë¤òÁªÂò¤¹¤ë
 »ö¤â¤Ç¤­¤ë¡£
 ²Ã¤¨¤Æ¡¢\fB-r\fR¥Õ¥é¥Ã¥°¤Ç»Ø¼¨¤¹¤ë¤³¤È¤Ë¤è¤ê¡¢
@@ -93,9 +89,12 @@ pwck \- 
 .br
 /etc/group \- ¥°¥ë¡¼¥×¤Ë´Ø¤¹¤ë¾ðÊó
 .SH ´ØÏ¢¹àÌÜ
-usermod(1), group(4), passwd(4), shadow(4)
+.BR usermod (8),
+.BR group (5),
+.BR passwd (5),
+.BR shadow (5)
 .SH ÊÖ¤êÃÍ
-\fIpwck\fR¥³¥Þ¥ó¥É¤Ï°Ê²¼¤ÎÌá¤êÃͤòÊÖ¤·¤Æ½ªÎ»¤¹¤ë:
+\fBpwck\fR¥³¥Þ¥ó¥É¤Ï°Ê²¼¤ÎÌá¤êÃͤòÊÖ¤·¤Æ½ªÎ»¤¹¤ë:
 .IP 0 5
 À®¸ù
 .IP 1 5
@@ -108,6 +107,5 @@ usermod(1), group(4), passwd(4), shadow(4)
 ¥Ñ¥¹¥ï¡¼¥É¥Õ¥¡¥¤¥ë¤ò¥í¥Ã¥¯¤Ç¤­¤Ê¤¤
 .IP 5 5
 ¥Ñ¥¹¥ï¡¼¥É¥Õ¥¡¥¤¥ë¤ò¹¹¿·½ÐÍè¤Ê¤¤
-.SH ËÝÌõ¼Ô
-¸Å¹âÏÂÄ÷ <furutaka@Flux.tokai.jaeri.go.jp>
-
+.SH Ãø¼Ô
+Julianne Frances Haugh (jockgrrl@ix.netcom.com)
index 6465ee930022095f7c5321bb65881a90978cf3bd..9c8276e17099ac869020dc801506f58311e6c4b5 100644 (file)
@@ -1,73 +1,85 @@
-.\" Copyright 1989 - 1993, 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: pwconv.8,v 1.1 2001/06/16 02:35:46 kloczek Exp $
-.\"
-.\" Japanese Version Copyright (c) 1997 Kazuyoshi Furutaka
+.\" Japanese Version Copyright (c) 2001 Yuichi SATO
 .\"         all rights reserved.
-.\" Translated Fri Feb 14 23:06:00 JST 1997
-.\"         by Kazuyoshi Furutaka <furutaka@Flux.tokai.jaeri.go.jp>
+.\" Translated Sat Dec  1 20:09:17 JST 2001
+.\"         by Yuichi SATO <ysato@h4.dion.ne.jp>
 .\"
-.TH PWCONV 8
+.\" $Id: pwconv.8,v 1.2 2001/12/20 14:02:38 ankry Exp $
+.TH PWCONV 8 "26 Sep 1997"
 .SH Ì¾Á°
-pwconv \- shadow¥Ñ¥¹¥ï¡¼¥É¥Õ¥¡¥¤¥ë¤òÊÑ´¹¡¦¹¹¿·¤¹¤ë
+pwconv, pwunconv, grpconv, grpunconv \- shadow ¥Ñ¥¹¥ï¡¼¥É¤È shadow ¥°¥ë¡¼¥×¤Ø¤ÎÊÑ´¹¡¢¤ª¤è¤ÓÄ̾ï¤Î¥Õ¥¡¥¤¥ë¤Ø¤ÎµÕÊÑ´¹
 .SH ½ñ¼°
-pwconv
-.SH ÀâÌÀ
-\fIPwconv\fR¤Ï¸Å¤¤¥Ñ¥¹¥ï¡¼¥É¥Õ¥¡¥¤¥ë¾ðÊó¤ò¿·¤¿¤Êshadow¥Ñ¥¹¥ï¡¼¥É¥Õ¥¡¥¤¥ë¤Ë
-¥³¥Ô¡¼¤·¡¢¤Þ¤¿¥ª¥×¥·¥ç¥ó¤Î´û¸¤Îshadow¥Õ¥¡¥¤¥ë¤«¤é¥¨¥ó¥È¥ê¤òÉղ乤롣
-¿·¤·¤¤¥Ñ¥¹¥ï¡¼¥É¥Õ¥¡¥¤¥ë¤Ï\fBnpasswd\fR¡¢¿·¤·¤¤shadow¥Õ¥¡¥¤¥ë¤Ï\fBnshadow\fR
-¤È¤¤¤¦Ì¾Á°¤ÇÊݸ¤µ¤ì¤ë¡£
-À¸À®¤µ¤ì¤ëξ¥Õ¥¡¥¤¥ë¤Îµö²Ä¥â¡¼¥É¤Ï¤È¤â¤Ë¡¢½êÍ­¼Ô¤Î¤ß¤¬read¥¢¥¯¥»¥¹¤ò
-½ÐÍè¤ëÍͤËÀßÄꤵ¤ì¤ë¡£
-´û¸¤Îshadow¥Õ¥¡¥¤¥ë¤Î¥¨¥ó¥È¥ê¤Ï¤½¤Î¤Þ¤Þ¥³¥Ô¡¼¤µ¤ì¤ë¡£
-System V Release 3.2¥Õ¥©¡¼¥Þ¥Ã¥È¤Îshadow¥Õ¥¡¥¤¥ë¥¨¥ó¥È¥ê¤Ï
-²¿¤â¸À¤ï¤ºSystem V Release 4¥Õ¥©¡¼¥Þ¥Ã¥È¤ËÊÑ´¹¤µ¤ì½ÐÎϤµ¤ì¤ë¡£
-¥¨¥ó¥È¥ê¤Ë¶õÇòÍ󤬤¢¤ë»þ¤Ï(ŬÅö¤Ê¤é¤Ð)¥Ç¥£¥Õ¥©¥ë¥ÈÃͤ¬ÁÞÆþ¤µ¤ì¤ë¡£
-¥Ñ¥¹¥ï¡¼¥É¤Î´ü¸Â¾ðÊ󤬴û¤ËÀßÄꤵ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ï¡¢
-¿·¤¿¤Ê¥¨¥ó¥È¥ê¤Î¥Ñ¥¹¥ï¡¼¥ÉÍ­¸ú´ü¸Â¤Ï10000Æü¸å¤ÈÀßÄꤵ¤ì¡¢
-ºÇ½ª¹¹¿·Æü¤Ï¤³¤Î¥×¥í¥°¥é¥à¤òµ¯Æ°¤·¤¿ÆüÉդȤʤ롣
-¥Ñ¥¹¥ï¡¼¥ÉÍ󤬶õÇò¤Î¥¨¥ó¥È¥ê¤Ïshadow¥Õ¥¡¥¤¥ë¤ËÁ´¤¯¥³¥Ô¡¼¤µ¤ì¤Ê¤¤¡£
-.SH ¥Õ¥¡¥¤¥ë
-/etc/passwd \- ¸Å¤¤°Å¹æ²½¤µ¤ì¤¿¥Ñ¥¹¥ï¡¼¥ÉµÚ¤Ó¤½¤ÎÍ­¸ú´ü¸Â
+.B pwconv
 .br
-/etc/shadow \- °ÊÁ°¤ËÊÑ´¹¤µ¤ì¤¿shadow¥Ñ¥¹¥ï¡¼¥É¥Õ¥¡¥¤¥ë
+.B pwunconv
 .br
-./npasswd \- ¿·µ¬ºîÀ®¤µ¤ì¤ë¥Ñ¥¹¥ï¡¼¥É¥Õ¥¡¥¤¥ë
+.B grpconv
 .br
-./nshadow \- ¿·µ¬ºîÀ®¤µ¤ì¤ëshadow¥Ñ¥¹¥ï¡¼¥É¥Õ¥¡¥¤¥ë
+.B grpunconv
+.SH ÀâÌÀ
+¤³¤ì¤é 4 ¤Ä¤Î¥×¥í¥°¥é¥à¤Ï¡¢Ä̾ï¤Î¥Ñ¥¹¥ï¡¼¥É¡¦¥°¥ë¡¼¥×¥Õ¥¡¥¤¥ë
+¤ª¤è¤Ó shadow ¥Ñ¥¹¥ï¡¼¥É¡¦¥°¥ë¡¼¥×¥Õ¥¡¥¤¥ë
+.IR /etc/passwd ", " /etc/group ", " /etc/shadow ", " /etc/gshadow
+¤òÁàºî¤¹¤ë¡£
+
+\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
+¤ÏÎà»÷¤·¤Æ¤¤¤ë¡£
+1 ¤ÄÌܤϡ¢Ä̾ï¤Î¥Õ¥¡¥¤¥ë¤Ë¥¨¥ó¥È¥ê¤¬¤Ê¤¤¾ì¹ç¡¢
+¤½¤Î¥¨¥ó¥È¥ê¤Ï shadow ²½¤µ¤ì¤¿¥Õ¥¡¥¤¥ë¤Ç¤Ïºï½ü¤µ¤ì¤ë¤È¤¤¤¦ÅÀ¤Ç¤¢¤ë¡£
+2 ¤ÄÌܤϡ¢Ä̾ï¤Î¥Õ¥¡¥¤¥ë¤Ç¥Ñ¥¹¥ï¡¼¥É¤¬ `x' ¤Ë¤Ê¤Ã¤Æ¤¤¤Ê¤¤¾ì¹ç¡¢
+shadow ²½¤µ¤ì¤¿¥Õ¥¡¥¤¥ë¤Ë¤ª¤¤¤Æ¡¢
+¤½¤ì¤ËÂбþ¤¹¤ë¥¨¥ó¥È¥ê¤¬¹¹¿·¤µ¤ì¤ë¤È¤¤¤¦ÅÀ¤Ç¤¢¤ë¡£
+3 ¤ÄÌܤϡ¢Ä̾ï¤Î¥Õ¥¡¥¤¥ë¤Ë½ñ¤«¤ì¤¿¥Ñ¥¹¥ï¡¼¥É¤¬ `x' ¤ËÃÖ¤­´¹¤¨¤é¤ì¤ëÅÀ¤Ç¤¢¤ë¡£
+¤³¤ì¤é¤Î¥×¥í¥°¥é¥à¤Ï¡¢½é¤á¤ÆÊÑ´¹¤ò¹Ô¤¦¤È¤­¤Ë»È¤¨¤ë¡£
+¤Þ¤¿¡¢Ä̾ï¤Î¥Õ¥¡¥¤¥ë¤ò¼êư¤ÇÊÔ½¸¤·¤¿¾ì¹ç¤Ë
+shadow ²½¤µ¤ì¤¿¥Õ¥¡¥¤¥ë¤ò¹¹¿·¤¹¤ë¤Î¤Ë»È¤¦¤³¤È¤â¤Ç¤­¤ë¡£
+
+.I /etc/shadow
+¤Ë¿·¤·¤¤¥¨¥ó¥È¥ê¤òÄɲ乤ë¾ì¹ç¡¢
+.B pwconv
+¤Ï
+.I /etc/login.defs
+¤Ë¤¢¤ë
+.BR PASS_MIN_DAYS ", " PASS_MAX_DAYS ", " PASS_WARN_AGE
+¤ÎÃͤò»È¤¦¡£
+
+ƱÍͤˡ¢
+.B pwunconv
+¤È
+.B grpunconv
+¤ÏÎà»÷¤·¤Æ¤¤¤ë¡£
+Ä̾ï¤Î¥Õ¥¡¥¤¥ë¤Î¥Ñ¥¹¥ï¡¼¥É¤Ï¡¢
+shadow ²½¤µ¤ì¤¿¥Õ¥¡¥¤¥ë¤ò»È¤Ã¤Æ¹¹¿·¤µ¤ì¤ë¡£
+¥¨¥ó¥È¥ê¤¬Ä̾ï¤Î¥Õ¥¡¥¤¥ë¤Ë¤Ï¸ºß¤¹¤ë¤¬
+shadow ²½¤µ¤ì¤¿¥Õ¥¡¥¤¥ë¤Ë¤Ï¸ºß¤·¤Ê¤¤¤È¤¤¤¦¾ì¹ç¡¢
+¤½¤Î¥¨¥ó¥È¥ê¤Ï¤½¤Î¤Þ¤Þ¤Ë¤µ¤ì¤ë¡£
+ºÇ½ªÅª¤Ë shadow ²½¤µ¤ì¤¿¥Õ¥¡¥¤¥ë¤Ïºï½ü¤µ¤ì¤ë¡£
+
+.B pwunconv 
+¤Ï´ü¸Â¤ÎÀڤ줿¥Ñ¥¹¥ï¡¼¥É¤òÇË´þ¤·¡¢ÊÑ´¹¤Ç¤­¤ë¤â¤Î¤Î¤ß¤òÊÑ´¹¤¹¤ë¡£
+
+.SH ¥Ð¥°
+(ÉÔÀµ¤Ê¥¨¥ó¥È¥ê¤ä½ÅÊ£¤·¤¿¥¨¥ó¥È¥ê¤È¤¤¤Ã¤¿) ¥¨¥é¡¼¤¬
+¥Ñ¥¹¥ï¡¼¥É¥Õ¥¡¥¤¥ë¤ä¥°¥ë¡¼¥×¥Õ¥¡¥¤¥ë¤Ë¤¢¤ë¤È¡¢
+¥×¥í¥°¥é¥à¤Ï±Ê±ó¤Ë¥ë¡¼¥×¤·¤Æ¡¢¤ª¤«¤·¤Ê·Á¤Ç¼ºÇÔ¤¹¤ë¡£
+shadow ¥Ñ¥¹¥ï¡¼¥É¡¦¥°¥ë¡¼¥×¤Ø¤ÎÊÑ´¹¤ä
+shadow ²½¥Õ¥¡¥¤¥ë¤«¤é¤ÎµÕÊÑ´¹¤ò¹Ô¤¦Á°¤Ë¡¢
+\fBpwck\fR ¤È \fBgrpck\fR ¤ò¼Â¹Ô¤·¤Æ¥¨¥é¡¼¤ò½¤Àµ¤¹¤ë¤³¤È¡£
 .SH ´ØÏ¢¹àÌÜ
-passwd(1),
-passwd(4),
-shadow(4),
-pwunconv(8)
-.SH ËÝÌõ¼Ô
-¸Å¹âÏÂÄ÷ <furutaka@Flux.tokai.jaeri.go.jp>
+.BR login.defs (5),
+.BR pwck (8),
+.BR grpck (8),
+.BR shadowconfig (8)
diff --git a/man/ja/pwunconv.8 b/man/ja/pwunconv.8
new file mode 100644 (file)
index 0000000..e0a2ab1
--- /dev/null
@@ -0,0 +1 @@
+.so pwconv.8
diff --git a/man/ja/sg.1 b/man/ja/sg.1
new file mode 100644 (file)
index 0000000..31be744
--- /dev/null
@@ -0,0 +1 @@
+.so newgrp.1
index a171677666d6f95501ae92b19245dfbb127aa8db..0c99a701016111fba3c50400830e6429f65dd8bb 100644 (file)
@@ -1,4 +1,4 @@
-.\" Copyright 1989 - 1993, John F. Haugh II
+.\" Copyright 1989 - 1993, Julianne Frances Haugh
 .\" All rights reserved.
 .\"
 .\" Redistribution and use in source and binary forms, with or without
@@ -9,18 +9,14 @@
 .\" 2. Redistributions in binary form must reproduce 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
+.\" 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 JOHN HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" 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 JOHN HAUGH OR CONTRIBUTORS BE LIABLE
+.\" 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)
@@ -29,7 +25,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\"    $Id: shadow.3,v 1.1 2001/06/16 02:35:46 kloczek Exp $
+.\"    $Id: shadow.3,v 1.2 2001/11/16 17:01:33 ankry Exp $
 .\"
 .\" Japanese Version Copyright (c) 1997 Kazuyoshi Furutaka
 .\"         all rights reserved.
 .SH Ì¾Á°
 shadow \- °Å¹æ²½¤µ¤ì¤¿¥Ñ¥¹¥ï¡¼¥É¥Õ¥¡¥¤¥ëÍѥ롼¥Á¥ó
 .SH ½ñ¼°
-#include <shadow.h>
-.br
-struct spwd *getspent();
-.br
-struct spwd *getspnam(char * name);
-.br
-void setspent();
-.br
-void endspent();
-.br
-struct spwd *fgetspent(FILE *fp);
-.br
-struct spwd *sgetspent(char *cp);
-.br
-int putspent(struct spwd *p,FILE *fp);
-.br
-int lckpwdf ();
-.br
-int ulckpwdf ();
+.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¥Ñ¥¹¥ï¡¼¥É¥Õ¥¡¥¤¥ë\fB/etc/shadow\fR¤ÎÆâÍÆ¤òÁàºî¤¹¤ë¥ë¡¼¥Á¥ó¤Ç¤¢¤ë¡£
+¤Ïshadow¥Ñ¥¹¥ï¡¼¥É¥Õ¥¡¥¤¥ë\fI/etc/shadow\fR¤ÎÆâÍÆ¤òÁàºî¤¹¤ë¥ë¡¼¥Á¥ó¤Ç¤¢¤ë¡£
 .sp
 struct spwd {
 .in +.5i
@@ -109,24 +111,24 @@ sp_expire \- 1970ǯ1
 .br
 sp_flag \- ¾­Íè¤Î»ÈÍѤËͽÌó
 .SH ÀâÌÀ
-\fIgetspent\fR, \fIgetspname\fR, \fIfgetspent\fR, µÚ¤Ó \fIsgetspent\fR
+\fBgetspent\fR, \fBgetspname\fR, \fBfgetspent\fR, µÚ¤Ó \fBsgetspent\fR
 ¤Ï³Æ¡¹\fBstruct spwd\fR¤Ø¤Î¥Ý¥¤¥ó¥¿¤òÊÖ¤¹¡£
-\fIgetspent\fR¤Ï¥Õ¥¡¥¤¥ë¤«¤é¼¡¤Î¥¨¥ó¥È¥ê¤ò¡¢\fIfgetspent\fR¤Ï
+\fBgetspent\fR¤Ï¥Õ¥¡¥¤¥ë¤«¤é¼¡¤Î¥¨¥ó¥È¥ê¤ò¡¢\fBfgetspent\fR¤Ï
 »ØÄꤵ¤ì¤¿¥¹¥È¥ê¡¼¥à¤«¤é¼¡¤Î¥¨¥ó¥È¥ê¤òÊÖ¤¹¡£
 ¤³¤ÎºÝ¡¢¥Õ¥¡¥¤¥ë¤ÏÀµ¤·¤¤½ñ¼°¤Ç¤¢¤ë²¾Äꤷ¤Æ¤¤¤ë¡£
-\fIsgetspent\fR¤ÏÆþÎϤȤ·¤ÆÍ¿¤¨¤é¤ì¤¿Ê¸»úÎó¤òÍѤ¤¤Æ\fBstruct spwd\fR
+\fBsgetspent\fR¤ÏÆþÎϤȤ·¤ÆÍ¿¤¨¤é¤ì¤¿Ê¸»úÎó¤òÍѤ¤¤Æ\fBstruct spwd\fR
 ¤Ø¤Î¥Ý¥¤¥ó¥¿¤òÊÖ¤¹¡£
-\fIgetspnam\fR¤Ï¥Õ¥¡¥¤¥ëÃæ¤Î¸½ºß¤Î°ÌÃÖ¤«¤é\fIname\fR¤ËÉä¹ç¤¹¤ë¥¨¥ó¥È¥ê
+\fBgetspnam\fR¤Ï¥Õ¥¡¥¤¥ëÃæ¤Î¸½ºß¤Î°ÌÃÖ¤«¤é\fBname\fR¤ËÉä¹ç¤¹¤ë¥¨¥ó¥È¥ê
 ¤òõ¤¹¡£
 .PP
-\fIsetspent\fRµÚ¤Ó\fIendspent\fR¤Ïshadow¤·¤¿¥Ñ¥¹¥ï¡¼¥É¥Õ¥¡¥¤¥ë¤Ø¤Î
+\fBsetspent\fRµÚ¤Ó\fBendspent\fR¤Ïshadow¤·¤¿¥Ñ¥¹¥ï¡¼¥É¥Õ¥¡¥¤¥ë¤Ø¤Î
 ¥¢¥¯¥»¥¹¤òÉס¹³«»ÏµÚ¤Ó½ªÎ»¤¹¤ë¤¿¤á¤ËÍѤ¤¤ë¤³¤È¤¬½ÐÍè¤ë¡£
 .PP
 \fB/etc/shadow\fR¥Õ¥¡¥¤¥ë¤ËÂФ¹¤ëÇÓ¾Ū¤Ê¥¢¥¯¥»¥¹¤òÊݾڤ¹¤ë¤¿¤á¤Ë¡¢
-\fIlckpwdf\fRµÚ¤Ó\fIulckpwdf\fR¥ë¡¼¥Á¥ó¤òÍѤ¤¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
-\fIlckpwdf\fR¤Ï\fIpw_lock\fR¤òÍѤ¤¤ÆºÇÂç15Éô֥í¥Ã¥¯¤ò¤·¤è¤¦¤È¤¹¤ë¡£
+\fBlckpwdf\fRµÚ¤Ó\fBulckpwdf\fR¥ë¡¼¥Á¥ó¤òÍѤ¤¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
+\fBlckpwdf\fR¤Ï\fBpw_lock\fR¤òÍѤ¤¤ÆºÇÂç15Éô֥í¥Ã¥¯¤ò¤·¤è¤¦¤È¤¹¤ë¡£
 ¤½¤·¤Æ¡¢ºÇ½é¤Î15ÉäλĤê¤òÍѤ¤¤ÆÆóÅÙÌܤΥí¥Ã¥¯¤ò¤·¤è¤¦¤È¤·Â³¤±¤ë¡£
-Á´Éô¤Ç15Éô֤δ֤ˤ¤¤º¤ì¤«¤Î»î¤ß¤¬¼ºÇÔ¤·¤¿¾ì¹ç¤Ï¡¢\fIlckpwdf\fR¤Ï-1¤òÊÖ¤¹¡£
+Á´Éô¤Ç15Éô֤δ֤ˤ¤¤º¤ì¤«¤Î»î¤ß¤¬¼ºÇÔ¤·¤¿¾ì¹ç¤Ï¡¢\fBlckpwdf\fR¤Ï-1¤òÊÖ¤¹¡£
 ¤¤¤º¤ì¤Î¥í¥Ã¥¯¤âÀ®¸ù¤·¤¿¾ì¹ç¤Ï0¤¬ÊÖ¤µ¤ì¤ë¡£
 .SH ÊÖ¤êÃÍ
 ¤³¤ì¤é¤Î¥ë¡¼¥Á¥ó¤Ï¡¢¥¨¥ó¥È¥ê¤¬»Ä¤Ã¤Æ¤¤¤Ê¤¤¾ì¹çËô¤Ï½èÍý¤Î²áÄø¤Ç
@@ -138,7 +140,7 @@ shadow
 .SH ¥Õ¥¡¥¤¥ë
 /etc/shadow \- °Å¹æ²½¤µ¤ì¤¿¥æ¡¼¥¶¥Ñ¥¹¥ï¡¼¥É
 .SH ´ØÏ¢¹àÌÜ
-getpwent(3),
-shadow(5)
-.\" .SH ËÝÌõ¼Ô
-.\" ¸Å¹âÏÂÄ÷ <furutaka@Flux.tokai.jaeri.go.jp>
+.BR getpwent (3),
+.BR shadow (5)
+.SH Ãø¼Ô
+Julianne Frances Haugh (jockgrrl@ix.netcom.com)
index 8b587ee930ce172a627aede0c2506f439fcb2a80..d3a928f4bca9915ecda0e7b0dc8adf28b45a3574 100644 (file)
@@ -1,4 +1,4 @@
-.\" Copyright 1989 - 1990, John F. Haugh II
+.\" Copyright 1989 - 1990, Julianne Frances Haugh
 .\" All rights reserved.
 .\"
 .\" Redistribution and use in source and binary forms, with or without
@@ -9,18 +9,14 @@
 .\" 2. Redistributions in binary form must reproduce 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
+.\" 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 JOHN HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" 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 JOHN HAUGH OR CONTRIBUTORS BE LIABLE
+.\" 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)
@@ -29,7 +25,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\"    $Id: shadow.5,v 1.1 2001/06/16 02:35:46 kloczek Exp $
+.\"    $Id: shadow.5,v 1.2 2001/11/16 17:01:33 ankry Exp $
 .\"
 .\" Japanese Version Copyright (c) 1997 Kazuyoshi Furutaka
 .\"         all rights reserved.
@@ -66,7 +62,7 @@ shadow \- 
 ¥Ñ¥¹¥ï¡¼¥ÉÍó¤Ïɬ¤ºµ­Æþ¤µ¤ì¤Æ¤¤¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
 °Å¹æ²½¤µ¤ì¤¿¥Ñ¥¹¥ï¡¼¥É¤Ï¡¢a¤«¤éz¡¢A¤«¤éZ¤Î¥¢¥ë¥Õ¥¡¥Ù¥Ã¥È¡¢
 0¤«¤é9Ëø¤Î¿ô»úµÚ¤Ó\.¤È/¤Î64ʸ»ú¤Î¤¦¤Á¤Î13¤«¤é24ʸ»ú¤«¤é¤Ê¤ë¡£
-¤³¤Îʸ»úÎ󤬤ɤΤ褦¤Ë²ò¼á¤µ¤ì¤ë¤«¤Î¾ÜºÙ¤Ï\fIcrypt(3)\fR¤ò»²¾È¤»¤è¡£
+¤³¤Îʸ»úÎ󤬤ɤΤ褦¤Ë²ò¼á¤µ¤ì¤ë¤«¤Î¾ÜºÙ¤Ï\fBcrypt\fR(3)¤ò»²¾È¤»¤è¡£
 .PP
 ºÇ¸å¤Ë¥Ñ¥¹¥ï¡¼¥É¤òÊѹ¹¤·¤¿Æü»þ¤Ï1970ǯ1·î1Æü¤«¤é¤ÎÆü¿ô¤È¤·¤Æ
 µ­½Ò¤µ¤ì¤ë¡£
@@ -80,7 +76,7 @@ shadow \- 
 ¤Þ¤¿¡¢¥¢¥«¥¦¥ó¥È¤Ï»ØÄꤷ¤¿´üÆü¤Ë¡¢¥Ñ¥¹¥ï¡¼¥É¾¤ÎÍ­¸ú´ü¸Â¾ðÊó¤Ë¤Ï¤è¤é¤º¡¢
 »ÈÍÑÉÔǽ¤È¤Ê¤ë¡£
 .PP
-¤³¤Î¾ðÊó¤Ï\fB/etc/passwd\fRÃæ¤Ëµ­¤µ¤ì¤Æ¤¤¤ëÇ¡²¿¤Ê¤ë¥Ñ¥¹¥ï¡¼¥ÉµÚ¤Ó
+¤³¤Î¾ðÊó¤Ï\fI/etc/passwd\fRÃæ¤Ëµ­¤µ¤ì¤Æ¤¤¤ëÇ¡²¿¤Ê¤ë¥Ñ¥¹¥ï¡¼¥ÉµÚ¤Ó
 ¤½¤ÎÍ­¸ú´ü¸Â¾ðÊó¤è¤ê¤âÍ¥À褵¤ì¤ë¡£
 .PP
 ¥Ñ¥¹¥ï¡¼¥É¤Î°ÂÁ´À­¤ò¤ò°Ý»ý¤¹¤ë¤¿¤á¤Ë¤Ï¡¢¤³¤Î¥Õ¥¡¥¤¥ë¤ò°ìÈ̥桼¥¶
@@ -90,14 +86,14 @@ shadow \- 
 .br
 /etc/shadow \- °Å¹æ²½¤µ¤ì¤¿¥æ¡¼¥¶¥Ñ¥¹¥ï¡¼¥É
 .SH ´ØÏ¢¹àÌÜ
-chage(1),
-login(1),
-passwd(1),
-su(1),
-sulogin(1M),
-shadow(3),
-passwd(5),
-pwconv(8),
-pwunconv(8)
-.SH ËÝÌõ¼Ô
-¸Å¹âÏÂÄ÷ <furutaka@Flux.tokai.jaeri.go.jp>
+.BR chage (1),
+.BR login (1),
+.BR passwd (1),
+.BR su (1),
+.BR sulogin (8),
+.BR shadow (3),
+.BR passwd (5),
+.BR pwconv (8),
+.BR pwunconv (8)
+.SH Ãø¼Ô
+Julianne Frances Haugh (jockgrrl@ix.netcom.com)
diff --git a/man/ja/shadowconfig.8 b/man/ja/shadowconfig.8
new file mode 100644 (file)
index 0000000..59d7e6e
--- /dev/null
@@ -0,0 +1,25 @@
+.\"     all right reserved,
+.\" Translated Tue Oct 30 11:59:11 JST 2001
+.\" by Maki KURODA <mkuroda@aisys-jp.com>
+.\"
+.TH SHADOWCONFIG 8 "19 Apr 1997" "Debian GNU/Linux"
+.SH Ì¾Á°
+shadowconfig \- shadow ¥Ñ¥¹¥ï¡¼¥É¤ÎÀßÄê¤ò¥ª¥óµÚ¤Ó¥ª¥Õ¤ËÀÚÂØ¤¨¤ë
+.SH ½ñ¼°
+.B "shadowconfig"
+.IR on " | " off
+.SH ÀâÌÀ
+.PP
+.B shadowconfig on
+¤Ï shadow ¥Ñ¥¹¥ï¡¼¥É¤òÍ­¸ú¤Ë¤¹¤ë¡£
+.B shadowconfig off
+¤Ï shadow ¥Ñ¥¹¥ï¡¼¥É¤ò̵¸ú¤Ë¤¹¤ë¡£
+.B shadowconfig
+¤Ï²¿¤é¤«¤Î´Ö°ã¤¤¤¬¤¢¤ë¤È¡¢¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸¤òɽ¼¨¤·¡¢¡¢
+¥¼¥í¤Ç¤Ï¤Ê¤¤ÊÖ¤êÃͤòÊÖ¤¹¡£
+¤â¤·¤½¤Î¤è¤¦¤Ê¤³¤È¤¬µ¯¤³¤Ã¤¿¾ì¹ç¡¢¥¨¥é¡¼¤ò½¤Àµ¤·¡¢ºÆÅټ¹Ԥ·¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£
+shadow ¥Ñ¥¹¥ï¡¼¥É¤ÎÀßÄ꤬¤¹¤Ç¤Ë¥ª¥ó¤Î¾ì¹ç¤Ë¥ª¥ó¤ËÀßÄꤷ¤¿¤ê¡¢
+¤¹¤Ç¤Ë¥ª¥Õ¤Î¾ì¹ç¤Ë¥ª¥Õ¤ËÀßÄꤷ¤Æ¤â¡¢²¿¤Î±Æ¶Á¤â¤Ê¤¤
+
+.I /usr/doc/passwd/README.debian.gz
+¤Ë¤Ï shadow ¥Ñ¥¹¥ï¡¼¥É¤È¤½¤ì¤Ë´Ø¤¹¤ëÆÃħ¤Î´Êñ¤Ê¾Ò²ð¤¬½ñ¤«¤ì¤Æ¤¤¤ë¡£
index 7dbf898a77b30276d23e5a04fccbb07eb6ecc65e..0366c93d94b3904e23cb818f7fb198c9329f56e8 100644 (file)
@@ -1,4 +1,4 @@
-.\" Copyright 1989 - 1990, John F. Haugh II
+.\" Copyright 1989 - 1990, Julianne Frances Haugh
 .\" All rights reserved.
 .\"
 .\" Redistribution and use in source and binary forms, with or without
@@ -9,18 +9,14 @@
 .\" 2. Redistributions in binary form must reproduce 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
+.\" 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 JOHN HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" 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 JOHN HAUGH OR CONTRIBUTORS BE LIABLE
+.\" 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)
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\"    $Id: su.1,v 1.1 2001/06/16 02:35:46 kloczek Exp $
+.\"    $Id: su.1,v 1.2 2001/11/16 17:01:33 ankry Exp $
 .\"
 .\" 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 16:46:14 JST 2000
+.\"         by Kentaro Shirakata <argrath@ub32.org>
+.\" Updated Fri Jan 12 03:35:18 JST 2001
+.\"         by Kentaro Shirakata <argrath@ub32.org>
 .\"
 .TH SU 1
 .SH Ì¾Á°
 su \- ¥æ¡¼¥¶ID¤òÊѹ¹¤¹¤ë¡¢Ëô¤Ï¥¹¡¼¥Ñ¡¼¥æ¡¼¥¶¤Ë¤Ê¤ë
 .SH ½ñ¼°
-.B su
-[ - ] [ username [ args ] ]
+.BR su " [" - ]
+.RI [ username " [" args ]]
 .SH ÀâÌÀ
-.I su
+.B su
 ¤Ï¥í¥°¥¤¥ó¥»¥Ã¥·¥ç¥óÃæ¤ËÊ̤Υ桼¥¶¤ËÀ®¤ê¤¹¤Þ¤¹¤Î¤ËÍѤ¤¤ë¡£
 ¥æ¡¼¥¶Ì¾¤ò»ØÄꤻ¤º¤Ëµ¯Æ°¤·¤¿¾ì¹ç¡¢
-¥Ç¥£¥Õ¥©¥ë¥È¤Ç¤Ï¥¹¡¼¥Ñ¡¼¥æ¡¼¥¶¤ÎID¤ËÊѹ¹¤¹¤ë¡£
+¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï¥¹¡¼¥Ñ¡¼¥æ¡¼¥¶¤ÎID¤ËÊѹ¹¤¹¤ë¡£
 ¥ª¥×¥·¥ç¥ó°ú¿ô\fB\-\fR¤òÍѤ¤¤ë¤È¡¢
 Ä¾ÀÜ¥í¥°¥¤¥ó¤·¤¿¾ì¹ç¤ÈƱ¤¸´Ä¶­¤Ë½é´ü²½¤µ¤ì¤ë¡£
 .PP
@@ -54,8 +54,8 @@ su \- 
 ¤½¤Î¾ì¹ç¤Î°ú¿ô¤Ï¥æ¡¼¥¶¤Î¥í¥°¥¤¥ó¥·¥§¥ë¤ËÅϤµ¤ì¤ë¡£
 ÆÃ¤Ë¡¢¤½¤Î°ú¿ô¤Î°ì¤Ä¤È¤·¤Æ\fB-c\fR¤òÅϤ·¤¿¾ì¹ç¡¢
 ¤½¤ì¤Ë³¤¯°ú¿ô¤ÏÂçÉôʬ¤Î¥³¥Þ¥ó¥É¥¤¥ó¥¿¥×¥ê¥¿¤Ë¥³¥Þ¥ó¥É¤È¤·¤Æ²ò¼á¤µ¤ì¤ë¡£
-¤½¤Î¥³¥Þ¥ó¥É¤Ï\fB$SHELL\fR¤Ç»ØÄꤵ¤ì¤¿¥·¥§¥ë¤Ç¡¢¤â¤·¤¯¤Ï
-̤ÄêµÁ¤Î¾ì¹ç¤Ë¤Ï\fI/etc/passwd\fR¤Ç»ØÄꤵ¤ì¤¿¥·¥§¥ë¤Ç¼Â¹Ô¤µ¤ì¤ë¡£
+¤½¤Î¥³¥Þ¥ó¥É¤Ï\fI/etc/passwd\fR¤ÇÂоݤΥ桼¥¶¤Ë»ØÄꤵ¤ì¤Æ¤¤¤ë
+¥·¥§¥ë¤Ç¼Â¹Ô¤µ¤ì¤ë¡£
 .PP
 É¬Íפʾì¹ç¤Ë¤Ï¡¢¥æ¡¼¥¶¤Ë¤Ï¥Ñ¥¹¥ï¡¼¥É¤ÎÆþÎϤ¬Â¥¤µ¤ì¤ë¡£
 ´Ö°ã¤Ã¤¿¥Ñ¥¹¥ï¡¼¥É¤¬ÆþÎϤµ¤ì¤¿¾ì¹ç¤Ë¤Ï¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸¤¬½ÐÎϤµ¤ì¤ë¡£
@@ -64,20 +64,29 @@ su \- 
 .PP
 ¸½ºß¤Î´Ä¶­¤Ï¿·¤·¤¤¥·¥§¥ë¤Ë°ú¤­·Ñ¤¬¤ì¤ë¡£
 \fB$PATH\fR¤ÎÃͤϡ¢Ä̾ï¤Î¥æ¡¼¥¶¤Î¾ì¹ç¤Ï\fB/bin:/usr/bin\fR¤Ë¡¢
-¥¹¡¼¥Ñ¡¼¥æ¡¼¥¶¤Î¾ì¹ç¤Ï\fB/bin:/usr/bin:/etc\fR¤ËºÆÀßÄꤵ¤ì¤ë¡£
+¥¹¡¼¥Ñ¡¼¥æ¡¼¥¶¤Î¾ì¹ç¤Ï\fB/sbin:/bin:/usr/sbin:/usr/bin\fR¤ËºÆÀßÄꤵ¤ì¤ë¡£
+¤³¤ì¤Ï\fI/etc/login.defs\fR¤Î\fBENV_PATH\fR¤È\fBENV_SUPATH\fR¤ÇÊѹ¹¤Ç¤­¤ë¡£
+.PP
+¥µ¥Ö¥·¥¹¥Æ¥à¥í¥°¥¤¥ó¤Ï¥í¥°¥¤¥ó¥·¥§¥ë¤ÎºÇ½é¤Îʸ»ú¤È¤·¤Æ
+"*" ¤òÃÖ¤¯¤³¤È¤Ç»ØÄꤹ¤ë¡£
+Í¿¤¨¤é¤ì¤¿¥Û¡¼¥à¥Ç¥£¥ì¥¯¥È¥ê¤Ï¥æ¡¼¥¶¤¬¼ÂºÝ¤Ë¥í¥°¥¤¥ó¤¹¤ë
+¿·¤·¤¤¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤Î¥ë¡¼¥È¤È¤·¤Æ°·¤ï¤ì¤ë¡£
 .SH ·Ù¹ð
 .PP
-¤³¤ÎÈǤÎ\fIsu\fR¤Ë¤Ï¿¤¯¤Î¥³¥ó¥Ñ¥¤¥ë»þ¥ª¥×¥·¥ç¥ó¤¬¤¢¤ë¤¬¡¢
+¤³¤ÎÈǤÎ\fBsu\fR¤Ë¤Ï¿¤¯¤Î¥³¥ó¥Ñ¥¤¥ë»þ¥ª¥×¥·¥ç¥ó¤¬¤¢¤ë¤¬¡¢
 ¥µ¥¤¥È¤Ë¤è¤Ã¤Æ¤Ï¡¢¤½¤Î°ìÉô¤·¤«ÀßÄꤵ¤ì¤Æ¤¤¤Ê¤¤¤³¤È¤â¤¢¤ë¡£
 .SH ¥Õ¥¡¥¤¥ë
 /etc/passwd \- ¥æ¡¼¥¶¥¢¥«¥¦¥ó¥È¤Î¾ðÊó
 .br
 /etc/shadow \- °Å¹æ²½¤µ¤ì¤¿¥Ñ¥¹¥ï¡¼¥ÉµÚ¤Ó´ü¸Â¾ðÊó
 .br
-$HOME/.profile \- ¥Ç¥£¥Õ¥©¥ë¥È¥·¥§¥ëÍѤνé´ü²½¥¹¥¯¥ê¥×¥È
+$HOME/.profile \- ¥Ç¥Õ¥©¥ë¥È¥·¥§¥ëÍѤνé´ü²½¥¹¥¯¥ê¥×¥È
 .SH ´ØÏ¢¹àÌÜ
-login(1),
-sh(1)
-.SH ËÝÌõ¼Ô
-¸Å¹âÏÂÄ÷ <furutaka@Flux.tokai.jaeri.go.jp>
+.BR login (1),
+.BR sh (1),
+.BR suauth (5),
+.BR login.defs (5)
+.SH Ãø¼Ô
+Julianne Frances Haugh (jockgrrl@ix.netcom.com)
+
 
index 78b2065488cbb080ca6a26d2bef41d255b57cb8a..09f0658070023ff179092fc82e8b5106ff1eecda 100644 (file)
@@ -1,3 +1,7 @@
+.\" This page is originally in the shadow package.
+.\"
+.\" Translated Fri 14 Feb 1997 by Kazuyoshi Furutaka <furutaka@Flux.tokai.jaeri.go.jp>
+.\"
 .TH SUAUTH 5 "Feb 14, 1996"
 .UC 5
 .SH Ì¾Á°
@@ -7,8 +11,6 @@ suauth \- su
 .SH ÀâÌÀ
 .I /etc/suauth
 ¥Õ¥¡¥¤¥ë¤Ï¡¢
-.IR /etc/login.defs (5)
-¥Õ¥¡¥¤¥ëÃæ¤ÇÀßÄꤵ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ï¡¢
 su¥³¥Þ¥ó¥É¤ò¼Â¹Ô¤·¤¿»þ¤Ëɬ¤º»²¾È¤µ¤ì¤ë¡£
 ¤³¤Î¥Õ¥¡¥¤¥ë¤Ë¤è¤Ã¤Æ¡¢
 .PP
@@ -27,27 +29,35 @@ su
 to-id:from-id:ACTION
 .RE
 .PP
-¤³¤³¤Ç¡¢to-id¤ÏALL¤È¤¤¤¦¸ì¡¢¥³¥ó¥Þ¤Ç¶èÀÚ¤é¤ì¤¿¥æ¡¼¥¶Ì¾¤Î¥ê¥¹¥È
-¤â¤·¤¯¤ÏALL EXCEPT¤È¤¤¤¦¸ì¤È¤½¤ì¤Ë³¤¯","¤Ç¶èÀÚ¤é¤ì¤¿¥æ¡¼¥¶Ì¾¤Î¥ê¥¹¥È
+¤³¤³¤Ç¡¢to-id¤Ï
+.B ALL
+¤È¤¤¤¦¸ì¡¢¥³¥ó¥Þ¤Ç¶èÀÚ¤é¤ì¤¿¥æ¡¼¥¶Ì¾¤Î¥ê¥¹¥È
+¤â¤·¤¯¤Ï
+.B ALL EXCEPT
+¤È¤¤¤¦¸ì¤È¤½¤ì¤Ë³¤¯","¤Ç¶èÀÚ¤é¤ì¤¿¥æ¡¼¥¶Ì¾¤Î¥ê¥¹¥È
 ¤Î¤¤¤º¤ì¤«¤Ç¤¢¤ë¡£
 .PP
-from-id¤Ïto-id¤ÈƱ¤¸½ñ¼°¤Ç¤¢¤ê¡¢¹¹¤ËGROUP¤È¤¤¤¦¸ì¤â»ÈÍѤǤ­¤ë¡£
-ALL EXCEPT GROUP¤È¤¤¤¦»È¤¤Êý¤âÁ´¤¯Àµ¤·¤¤¡£
-GROUP¤Î¸å¤Ë¤Ï°ì¤Ä°Ê¾å¤Î¥°¥ë¡¼¥×̾¤ò","¤Ç¶èÀڤäƵ­¤¹¡£
+from-id¤Ïto-id¤ÈƱ¤¸½ñ¼°¤Ç¤¢¤ê¡¢¹¹¤Ë
+.B GROUP
+¤È¤¤¤¦¸ì¤â»ÈÍѤǤ­¤ë¡£
+.B ALL EXCEPT GROUP
+¤È¤¤¤¦»È¤¤Êý¤âÁ´¤¯Àµ¤·¤¤¡£
+.B GROUP
+¤Î¸å¤Ë¤Ï°ì¤Ä°Ê¾å¤Î¥°¥ë¡¼¥×̾¤ò","¤Ç¶èÀڤäƵ­¤¹¡£
 ´ØÏ¢¤¹¤ë¥°¥ë¡¼¥×¤Î¼ç¥°¥ë¡¼¥×id¤òµ­¤¹¤À¤±¤Ç¤Ï½½Ê¬¤Ç¤Ï¤Ê¤¯¡¢
-.IR /etc/group (5)
+.B /etc/group (5)
 Ãæ¤Î¥¨¥ó¥È¥ê¤òµ­¤¹É¬Íפ¬¤¢¤ë¡£
 .PP
 ACTION¤Ë¤Ï¡¢¸½ºß¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤ë°Ê²¼¤Î¥ª¥×¥·¥ç¥ó¤Î¤¤¤º¤ì¤«°ì¤Ä
 ¤ò»ØÄê¤Ç¤­¤ë¡£
 .TP 20
-DENY
+.B DENY
 ¥Ñ¥¹¥ï¡¼¥É¤òʹ¤¯Á°¤Ësu¤òÄä»ß¤¹¤ë¡£
 .TP 20
-NOPASS
+.B NOPASS
 ¼«Æ°Åª¤Ësu¤¹¤ë¤³¤È¤¬½ÐÍè¡¢¥Ñ¥¹¥ï¡¼¥É¤Ï¿Ò¤Í¤ÆÍè¤Ê¤¤¡£
 .TP 20
-OWNPASS
+.B OWNPASS
 su½ÐÍè¤ë¤¿¤á¤Ë¤Ï¡¢¥æ¡¼¥¶¤¬¼«Ê¬¤Î¥Ñ¥¹¥ï¡¼¥É¤òÆþÎϤ·¤Ê¤¯¤Æ¤Ï
 ¤Ê¤é¤Ê¤¤¡£¥Ñ¥¹¥ï¡¼¥É¤òÆþÎϤ¹¤ë¤è¤¦¤ËÍ׵ᤵ¤ì¤ë¡£
 .PP
@@ -89,125 +99,15 @@ birddog:terry:NOPASS
 (¹Ô¤Î»Ï¤áµÚ¤Ó½ª¤ï¤ê°Ê³°¤Ë)¸«¤«¤±¤Î¶õÇò¤Ï¤¢¤Ã¤Æ¤Ï¤Ê¤é¤Ê¤¤¤·¡¢
 ÆÃÄê¤Î¥È¡¼¥¯¥ó¤Ë¤è¤êÁ´¤¯Ê̤ζèÀÚ¤êÊý¤Ë¤Ê¤Ã¤Æ¤·¤Þ¤¦»ö¤â¤¢¤ë¡£
 .SH ÊÖ¤êÃÍ
-¥Õ¥¡¥¤¥ë¤ò¥Ñ¡¼¥¹¤¹¤ëºÝ¤Î¥¨¥é¡¼¤Ïsyslogd(8)¤òÍѤ¤¤ÆAUTHµ¡Ç½¤Î¥ì¥Ù¥ëERR
+¥Õ¥¡¥¤¥ë¤ò¥Ñ¡¼¥¹¤¹¤ëºÝ¤Î¥¨¥é¡¼¤Ï
+.B syslogd (8)
+¤òÍѤ¤¤ÆAUTHµ¡Ç½¤Î¥ì¥Ù¥ëERR
 ¤È¤·¤ÆÄÌÃΤµ¤ì¤ë¡£
 .SH ´ØÏ¢¹àÌÜ
-su(1), login.defs(5)
+.BR su (1)
 .SH Ãø¼Ô
 .nf
 Chris Evans (lady0110@sable.ox.ac.uk)
 Lady Margaret Hall
 Oxford University
 England
-.SH ËÝÌõ¼Ô
-¸Å¹âÏÂÄ÷ <furutaka@Flux.tokai.jaeri.go.jp>
-
-----Next_Part(Sat_Feb_15_01:37:39_1997)----
-
-----Next_Part(Sat_Feb_15_01:37:39_1997)--
-Content-Type: Text/Plain; charset=iso-2022-jp
-Content-Transfer-Encoding: 7bit
-
-.TH SUAUTH 5 "Feb 14, 1996"
-.UC 5
-.SH Ì¾Á°
-suauth \- su¤ò¾ÜºÙ¤Ë¥³¥ó¥È¥í¡¼¥ë¤¹¤ë¤¿¤á¤Î¥Õ¥¡¥¤¥ë
-.SH ½ñ¼°
-.B /etc/suauth
-.SH ÀâÌÀ
-.I /etc/suauth
-¥Õ¥¡¥¤¥ë¤Ï¡¢
-.IR /etc/login.defs (5)
-¥Õ¥¡¥¤¥ëÃæ¤ÇÀßÄꤵ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ï¡¢
-su¥³¥Þ¥ó¥É¤ò¼Â¹Ô¤·¤¿»þ¤Ëɬ¤º»²¾È¤µ¤ì¤ë¡£
-¤³¤Î¥Õ¥¡¥¤¥ë¤Ë¤è¤Ã¤Æ¡¢
-.PP
-.RS
-.nf
-1) su¤¬ÂоݤȤ¹¤ë¥æ¡¼¥¶
-.fi
-2)su¥³¥Þ¥ó¥É¤ò¼Â¹Ô¤·¤Æ¤¤¤ë¥æ¡¼¥¶(¤â¤·¤¯¤Ï¤½¤Î¥æ¡¼¥¶¤¬Â°¤¹¤ë¥°¥ë¡¼¥×)
-.RE
-¤Ë´ð¤Å¤¤¤Æsu¥³¥Þ¥ó¥É¤Î¿¶Éñ¤¬Êѹ¹¤µ¤ì¤ë¡£
-.PP
-¤³¤Î¥Õ¥¡¥¤¥ë¤Ï°Ê²¼¤ÎÍͤʽñ¼°¤ò¤·¤Æ¤ª¤ê¡¢
-#¤Ç»Ï¤Þ¤ë¹Ô¤Ï¥³¥á¥ó¥È¤È¤·¤Æ°·¤ï¤ì¡¢Ìµ»ë¤µ¤ì¤ë;
-.PP
-.RS
-to-id:from-id:ACTION
-.RE
-.PP
-¤³¤³¤Ç¡¢to-id¤ÏALL¤È¤¤¤¦¸ì¡¢¥³¥ó¥Þ¤Ç¶èÀÚ¤é¤ì¤¿¥æ¡¼¥¶Ì¾¤Î¥ê¥¹¥È
-¤â¤·¤¯¤ÏALL EXCEPT¤È¤¤¤¦¸ì¤È¤½¤ì¤Ë³¤¯","¤Ç¶èÀÚ¤é¤ì¤¿¥æ¡¼¥¶Ì¾¤Î¥ê¥¹¥È
-¤Î¤¤¤º¤ì¤«¤Ç¤¢¤ë¡£
-.PP
-from-id¤Ïto-id¤ÈƱ¤¸½ñ¼°¤Ç¤¢¤ê¡¢¹¹¤ËGROUP¤È¤¤¤¦¸ì¤â»ÈÍѤǤ­¤ë¡£
-ALL EXCEPT GROUP¤È¤¤¤¦»È¤¤Êý¤âÁ´¤¯Àµ¤·¤¤¡£
-GROUP¤Î¸å¤Ë¤Ï°ì¤Ä°Ê¾å¤Î¥°¥ë¡¼¥×̾¤ò","¤Ç¶èÀڤäƵ­¤¹¡£
-´ØÏ¢¤¹¤ë¥°¥ë¡¼¥×¤Î¼ç¥°¥ë¡¼¥×id¤òµ­¤¹¤À¤±¤Ç¤Ï½½Ê¬¤Ç¤Ï¤Ê¤¯¡¢
-.IR /etc/group (5)
-Ãæ¤Î¥¨¥ó¥È¥ê¤òµ­¤¹É¬Íפ¬¤¢¤ë¡£
-.PP
-ACTION¤Ë¤Ï¡¢¸½ºß¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤ë°Ê²¼¤Î¥ª¥×¥·¥ç¥ó¤Î¤¤¤º¤ì¤«°ì¤Ä
-¤ò»ØÄê¤Ç¤­¤ë¡£
-.TP 20
-DENY
-¥Ñ¥¹¥ï¡¼¥É¤òʹ¤¯Á°¤Ësu¤òÄä»ß¤¹¤ë¡£
-.TP 20
-NOPASS
-¼«Æ°Åª¤Ësu¤¹¤ë¤³¤È¤¬½ÐÍè¡¢¥Ñ¥¹¥ï¡¼¥É¤Ï¿Ò¤Í¤ÆÍè¤Ê¤¤¡£
-.TP 20
-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 ¥Õ¥¡¥¤¥ë
-/etc/suauth
-.SH ¥Ð¥°
-¿¤¯¤Î¥Ð¥°¤¬Àø¤ó¤Ç¤¤¤ë²ÄǽÀ­¤¬¤¢¤ë¡£
-¤È¤ê¤ï¤±¡¢¥Õ¥¡¥¤¥ë¥Ñ¡¼¥µ¤Ï½ñ¼°¥¨¥é¡¼¤Ë´²Âç¤Ç¤Ï¤Ê¤¯¡¢
-(¹Ô¤Î»Ï¤áµÚ¤Ó½ª¤ï¤ê°Ê³°¤Ë)¸«¤«¤±¤Î¶õÇò¤Ï¤¢¤Ã¤Æ¤Ï¤Ê¤é¤Ê¤¤¤·¡¢
-ÆÃÄê¤Î¥È¡¼¥¯¥ó¤Ë¤è¤êÁ´¤¯Ê̤ζèÀÚ¤êÊý¤Ë¤Ê¤Ã¤Æ¤·¤Þ¤¦»ö¤â¤¢¤ë¡£
-.SH ÊÖ¤êÃÍ
-¥Õ¥¡¥¤¥ë¤ò¥Ñ¡¼¥¹¤¹¤ëºÝ¤Î¥¨¥é¡¼¤Ïsyslogd(8)¤òÍѤ¤¤ÆAUTHµ¡Ç½¤Î¥ì¥Ù¥ëERR
-¤È¤·¤ÆÄÌÃΤµ¤ì¤ë¡£
-.SH ´ØÏ¢¹àÌÜ
-su(1), login.defs(5)
-.SH Ãø¼Ô
-.nf
-Chris Evans (lady0110@sable.ox.ac.uk)
-Lady Margaret Hall
-Oxford University
-England
-.SH ËÝÌõ¼Ô
-¸Å¹âÏÂÄ÷ <furutaka@Flux.tokai.jaeri.go.jp>
index 143926310c6ed417249f180e4ce03cb68fc711ca..61c436f696eb746c3a9af51198544a4975e2cf5a 100644 (file)
@@ -1,4 +1,4 @@
-.\" Copyright 1989 - 1992, John F. Haugh II
+.\" Copyright 1989 - 1992, Julianne Frances Haugh
 .\" All rights reserved.
 .\"
 .\" Redistribution and use in source and binary forms, with or without
@@ -9,18 +9,14 @@
 .\" 2. Redistributions in binary form must reproduce 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
+.\" 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 JOHN HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" 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 JOHN HAUGH OR CONTRIBUTORS BE LIABLE
+.\" 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)
@@ -29,7 +25,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\"    $Id: sulogin.8,v 1.1 2001/06/16 02:35:46 kloczek Exp $
+.\"    $Id: sulogin.8,v 1.2 2001/11/16 17:01:33 ankry Exp $
 .\"
 .\" Japanese Version Copyright (c) 1997 Kazuyoshi Furutaka
 .\"         all rights reserved.
 .SH Ì¾Á°
 sulogin \- ¥·¥ó¥°¥ë¥æ¡¼¥¶login
 .SH ½ñ¼°
-\fBsulogin\fR [ \fItty-device\fR ]
+\fBsulogin\fR [\fItty-device\fR]
 .SH ÀâÌÀ
-.I sulogin
+.B sulogin
 ¤Ï¥·¥ó¥°¥ë¥æ¡¼¥¶¥â¡¼¥É»þ¡¢¥æ¡¼¥¶¤¬¥·¥¹¥Æ¥à¤Ë¥¢¥¯¥»¥¹½ÐÍè¤ë¤è¤¦¤Ë
-¤Ê¤ëÁ°¤Ë\fB/etc/init\fR¤Ë¤è¤Ã¤Æµ¯Æ°¤µ¤ì¤ë¡£
-¤³¤Îµ¡Ç½¤Ï¡¢\fIinit\fR¤¬Å¬ÀÚ¤ËÊѹ¹¤µ¤ì¤Æ¤¤¤ë¤«¡¢
+¤Ê¤ëÁ°¤Ë\fI/etc/init\fR¤Ë¤è¤Ã¤Æµ¯Æ°¤µ¤ì¤ë¡£
+¤³¤Îµ¡Ç½¤Ï¡¢\fBinit\fR¤¬Å¬ÀÚ¤ËÊѹ¹¤µ¤ì¤Æ¤¤¤ë¤«¡¢
 \fB/etc/inittab\fR¤Ë¥·¥ó¥°¥ë¥æ¡¼¥¶ÍÑlogin¤Î¥¨¥ó¥È¥ê¤¬¤¢¤ë
 ¥·¥¹¥Æ¥à¤Ç¤Î¤ßƯ¤«¤»¤ë»ö¤¬½ÐÍè¤ë¡£
 .PP
 ¼¡¤ÎÍÍ¤ËÆþÎϤòÂ¥¤µ¤ì¤ë
 .IP "" .5i
-Type control-d for normal startup,
+Type control-d to proceed with normal startup,
 .br
 (or give root password for system maintenance):
 .PP
@@ -68,7 +64,7 @@ Type control-d for normal startup,
 .SH ·Ù¹ð
 .PP
 ¤³¤Î¥³¥Þ¥ó¥É¤Ï¡¢
-\fIinit\fR¤¬\fB/bin/sh\fR¤Ç¤Ï¤Ê¤¯\fB/etc/sulogin\fR¤ò¸Æ¤ÖÍÍÊѹ¹¤µ¤ì¤Æ¤¤¤ë¤«¡¢
+\fBinit\fR¤¬\fB/bin/sh\fR¤Ç¤Ï¤Ê¤¯\fBsulogin\fR¤ò¸Æ¤ÖÍÍÊѹ¹¤µ¤ì¤Æ¤¤¤ë¤«¡¢
 ¤Þ¤¿¤Ï\fIinittab\fRÃæ¤Ç¥·¥ó¥°¥ë¥æ¡¼¥¶¥í¥°¥¤¥ó¤ËÂФ¹¤ëÀßÄ꤬¤Ê¤µ¤ì¤Æ¤¤¤ë
 ¾ì¹ç¤Ë¤Î¤ß»ÈÍѤǤ­¤ë¡£
 Î㤨¤Ð¡¢
@@ -94,8 +90,8 @@ co:s:respawn:/etc/sulogin /dev/console
 .br
 /.profile \- ¥·¥ó¥°¥ë¥æ¡¼¥¶¥·¥§¥ëÍѤνé´ü²½¥¹¥¯¥ê¥×¥È
 .SH ´ØÏ¢¹àÌÜ
-login(1),
-init(1M),
-sh(1)
-.SH ËÝÌõ¼Ô
-¸Å¹âÏÂÄ÷ <furutaka@Flux.tokai.jaeri.go.jp>
+.BR login (1),
+.BR init (8),
+.BR sh (1)
+.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..844ba55
--- /dev/null
@@ -0,0 +1,201 @@
+.\" 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,v 1.1 2001/11/16 17:00:42 ankry Exp $
+.\"
+.\" Japanese Version Copyright (c) 1996 HANATAKA Shinya
+.\"         all rights reserved.
+.\" Translated Wed Nov 20 17:42:39 JST 1996
+.\"         by HANATAKA Shinya 
+.\"
+.\"WORD:        initial group           ¼ç¥°¥ë¡¼¥×
+.\"WORD:        supplementary group     Êä½õ¥°¥ë¡¼¥×
+.\"
+.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 ]]
+.RB [ -p
+.IR passwd ]
+.br
+.RB [ -s
+.IR shell ]
+.RB [ -u
+.IR uid " ["
+.BR -o ]]
+.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 ÀâÌÀ
+.SS ¿·µ¬¥æ¡¼¥¶¤ÎºîÀ®
+\fB-D\fR ¥ª¥×¥·¥ç¥ó¤Ê¤·¤Ç¼Â¹Ô¤µ¤ì¤¿¾ì¹ç¡¢ \fBuseradd\fR ¥³¥Þ¥ó¥É¤Ï¡¢
+¥³¥Þ¥ó¥É¥é¥¤¥ó¤ÇÍ¿¤¨¤é¤ì¤¿Ãͤȥǥե©¥ë¥È¤ÎÀßÄêÃͤò¤â¤È¤Ë¡¢
+¿·µ¬¥æ¡¼¥¶¤Î¥¢¥«¥¦¥ó¥È¤òºîÀ®¤¹¤ë¡£
+¥³¥Þ¥ó¥É¥é¥¤¥ó¤Î¥ª¥×¥·¥ç¥ó¤Ë±þ¤¸¤Æ¡¢¿·µ¬¥æ¡¼¥¶¤Î¥¢¥«¥¦¥ó¥È¤¬
+ɬÍפʥ·¥¹¥Æ¥à¥Õ¥¡¥¤¥ë¤ËÄɲ䵤졢¥Û¡¼¥à¥Ç¥£¥ì¥¯¥È¥ê¤¬ºî¤é¤ì¡¢
+ÀßÄê¥Õ¥¡¥¤¥ë¤¬¥³¥Ô¡¼¤µ¤ì¤ë¡£
+\fBuseradd\fR ¥³¥Þ¥ó¥É¤Î¥ª¥×¥·¥ç¥ó¤Ï¼¡¤Î¤È¤ª¤ê¤Ç¤¢¤ë¡£
+.\" .IP "\fB-A {\fImethod\fR|\fBDEFAULT\fR},..."
+.\" The 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.
+.\" This is a comma-separated list of program names.
+.\" It may include \fBDEFAULT\fR exactly once.
+.IP "\fB-c \fIcomment\fR"
+¥Ñ¥¹¥ï¡¼¥É¥Õ¥¡¥¤¥ë¤ËÄɲ乤뿷µ¬¥æ¡¼¥¶¤Î¥³¥á¥ó¥È¥Õ¥£¡¼¥ë¥É¡£
+.IP "\fB-d \fIhome_dir\fR"
+¿·µ¬¥æ¡¼¥¶¤Î¥í¥°¥¤¥ó»þ¤Î¥Ç¥£¥ì¥¯¥È¥ê¤Ï¡¢ \fIhome_dir\fR ¤È¤¹¤ë¡£
+¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï¡¢ \fIlogin\fR ¤ò \fIdefault_home\fR ¤ËÉÕ¤±²Ã¤¨¤¿¤â¤Î¤¬
+¥í¥°¥¤¥ó»þ¤Î¥Ç¥£¥ì¥¯¥È¥ê¤È¤Ê¤ë¡£
+.IP "\fB-e \fIexpire_date\fR"
+¥æ¡¼¥¶¥¢¥«¥¦¥ó¥È¤¬Ìµ¸ú¤È¤Ê¤ëÆüÉÕ¡£
+ÆüÉդϠ\fIYYYY-MM-DD\fR ¤Î·Á¼°¤Ç¤¢¤ë¡£
+.IP "\fB-f \fIinactive_days\fR"
+¥Ñ¥¹¥ï¡¼¥É¤¬¤Î»ÈÍÑ´ü¸Â¤¬ÀÚ¤ì¤Æ¤«¤é¡¢¤³¤Î¥ª¥×¥·¥ç¥ó¤ÇÍ¿¤¨¤¿Æü¿ô·Ð²á¤¹¤ë¤È
+¥¢¥«¥¦¥ó¥È¤Ï±Êµ×¤Ë»ÈÍÑÉÔǽ¤È¤Ê¤ë¡£
+ÃͤȤ·¤Æ 0 ¤ò»ØÄꤹ¤ë¤È¡¢¥Ñ¥¹¥ï¡¼¥É¤¬¼º¸ú¤·¤¿Ä¾¸å¤Ë¥¢¥«¥¦¥ó¥È¤Ï»ÈÍÑÉÔǽ¤È¤Ê¤ê¡¢
+-1 ¤ò»ØÄꤹ¤ë¤È¡¢¤³¤Îµ¡Ç½¤Ï̵¸ú¤È¤Ê¤ë¡£
+¥Ç¥Õ¥©¥ë¥ÈÃͤϠ-1 ¤Ç¤¢¤ë¡£
+.IP "\fB-g \fIinitial_group\fR"
+¥æ¡¼¥¶¤Î°¤¹¤ë¼ç¥°¥ë¡¼¥×¤Î¥°¥ë¡¼¥×̾¤Þ¤¿¤Ï¥°¥ë¡¼¥× ID¡£
+¥°¥ë¡¼¥×̾¤Ï¤¹¤Ç¤Ë¸ºß¤¹¤ë¤â¤Î¤Ç¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£
+¥°¥ë¡¼¥× ID ¤Ï¡¢¤¹¤Ç¤Ë¸ºß¤¹¤ë¥°¥ë¡¼¥×¤ËÂбþ¤¹¤ë¤â¤Î¤Ç¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£
+¥Ç¥Õ¥©¥ë¥È¤Î¥°¥ë¡¼¥× ID ¤Ï 1 ¤Ç¤¢¤ë¡£
+.IP "\fB-G \fIgroup,[...]\fR"
+¥æ¡¼¥¶¤Î°¤¹¤ëÊä½õ¥°¥ë¡¼¥×¤Î¥ê¥¹¥È¡£
+¥°¥ë¡¼¥×¤Ï¥³¥ó¥Þ¤Ç¶èÀڤꡢ¶õÇò¤ò´Þ¤á¤Æ¤Ï¤¤¤±¤Ê¤¤¡£
+¤³¤ì¤é¤Î¥°¥ë¡¼¥×¤Ï¡¢ \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-p \fIpasswd\fR"
+\fBcrypt\fR(3) ¤Ë¤è¤Ã¤Æ°Å¹æ²½¤µ¤ì¤¿¥Ñ¥¹¥ï¡¼¥É¡£
+¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï¡¢¥¢¥«¥¦¥ó¥È¤Ï»È¤¨¤Ê¤¤¾õÂ֤Ȥʤ롣
+.IP "\fB-s \fIshell\fR"
+¥æ¡¼¥¶¤Î¥í¥°¥¤¥ó¥·¥§¥ë̾¡£
+¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï¤³¤Î¥Õ¥£¡¼¥ë¥É¤Ï¶õÇò¤È¤Ê¤ê¡¢
+¥·¥¹¥Æ¥à¤¬¥Ç¥Õ¥©¥ë¥È¤Î¥í¥°¥¤¥ó¥·¥§¥ë¤òÁª¤Ö¡£
+.IP "\fB-u \fIuid\fR"
+¥æ¡¼¥¶ ID¡£
+\fI-o\fR ¥ª¥×¥·¥ç¥ó¤¬Æ±»þ¤Ë»ØÄꤵ¤ì¤Ê¤¤¾ì¹ç¤Ï¡¢Â¾¤È½Å¤Ê¤Ã¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
+¿ôÃͤÏÈóÉé¤ÎÃͤǤʤ±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£
+¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï¡¢ 99 ¤è¤êÂ礭¤¯¡¢
+¤¹¤Ç¤Ë¸ºß¤¹¤ë¤É¤Î¥æ¡¼¥¶¤è¤ê¤âÂ礭¤¤¿ô¤Î¤¦¤Á¡¢ºÇ¾®¤ÎÃͤ¬»È¤ï¤ì¤ë¡£
+0 ¤«¤é 99 ¤Þ¤Ç¤ÎÃͤÏÂçÄñ¡¢¥·¥¹¥Æ¥à¥¢¥«¥¦¥ó¥ÈÍѤȤ·¤ÆÍ½Ìó¤µ¤ì¤Æ¤¤¤ë¡£
+.SS ¥Ç¥Õ¥©¥ë¥ÈÃͤÎÊѹ¹
+\fB-D\fR ¥ª¥×¥·¥ç¥ó¤ò»ØÄꤹ¤ë¤È¡¢
+\fBuseradd\fR ¤Ï¸½ºß¤Î¥Ç¥Õ¥©¥ë¥ÈÃͤòɽ¼¨¤¹¤ë¤«¡¢
+¤Þ¤¿¤Ï¥ª¥×¥·¥ç¥ó¤ÇÍ¿¤¨¤é¤ì¤¿Ãͤ˱þ¤¸¤Æ¥Ç¥Õ¥©¥ë¥ÈÃͤòÊѹ¹¤¹¤ë¡£
+»ÈÍѲÄǽ¤Ê¥ª¥×¥·¥ç¥ó¤Ï¼¡¤Î¤È¤ª¤ê¤Ç¤¢¤ë¡£
+.IP "\fB-b \fIdefault_home\fR"
+¿·µ¬¥æ¡¼¥¶¤Î¥Û¡¼¥à¥Ç¥£¥ì¥¯¥È¥ê¤Ø¤Î¥Ñ¥¹¡£
+¿·µ¬¥æ¡¼¥¶¥¢¥«¥¦¥ó¥È¤òºîÀ®¤¹¤ëºÝ¤Ë \fB-d\fI ¥ª¥×¥·¥ç¥ó¤ò»ØÄꤷ¤Ê¤¤¾ì¹ç¡¢
+\fIdefault_home\fR ¤Î¸å¤Ë¥æ¡¼¥¶Ì¾¤òÉÕ¤±²Ã¤¨¤¿¤â¤Î¤¬
+¿·µ¬¥Ç¥£¥ì¥¯¥È¥ê̾¤È¤·¤Æ»È¤ï¤ì¤ë¡£
+.IP "\fB-e \fIdefault_expire_date\fR"
+¥æ¡¼¥¶¥¢¥«¥¦¥ó¥È¤¬Ìµ¸ú¤È¤Ê¤ëÆüÉÕ¡£
+.IP "\fB-f \fIdefault_inactive\fR"
+¥Ñ¥¹¥ï¡¼¥É¤Î»ÈÍÑ´ü¸Â¤¬ÀÚ¤ì¤Æ¤«¤é¥¢¥«¥¦¥ó¥È¤¬»ÈÍÑÉÔǽ¤È¤Ê¤ë¤Þ¤Ç¤ÎÆü¿ô¡£
+.IP "\fB-g \fIdefault_group\fR"
+¿·µ¬¥æ¡¼¥¶¤Î°¤¹¤ë¼ç¥°¥ë¡¼¥×¤Î¥°¥ë¡¼¥×̾¤Þ¤¿¤Ï¥°¥ë¡¼¥× ID¡£
+¥°¥ë¡¼¥×̾¤Ï¤¹¤Ç¤Ë¸ºß¤¹¤ë¤â¤Î¤Ç¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£
+¥°¥ë¡¼¥× ID ¤Ï¡¢¤¹¤Ç¤Ë¸ºß¤¹¤ë¥°¥ë¡¼¥×¤ËÂбþ¤¹¤ë¤â¤Î¤Ç¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£
+.IP "\fB-s \fIdefault_shell\fR"
+¿·µ¬¥æ¡¼¥¶¤Î¥í¥°¥¤¥ó¥·¥§¥ë¡£
+»ØÄꤵ¤ì¤¿¥×¥í¥°¥é¥à¤¬¡¢º£¸åºî¤é¤ì¤ë¤¹¤Ù¤Æ¤Î¥æ¡¼¥¶¥¢¥«¥¦¥ó¥È¤ËŬÍѤµ¤ì¤ë¡£
+.PP
+¥ª¥×¥·¥ç¥ó¤ò»ØÄꤷ¤Ê¤¤¾ì¹ç¡¢ \fBuseradd\fR ¤Ï¸½ºß¤Î¥Ç¥Õ¥©¥ë¥ÈÃͤòɽ¼¨¤¹¤ë¡£
+.SH Ãí°Õ
+\fI/etc/skel\fR ¥Ç¥£¥ì¥¯¥È¥ê¤Ë¥Ç¥Õ¥©¥ë¥È¤Î¥æ¡¼¥¶¥Õ¥¡¥¤¥ë¤òÃÖ¤¯ºî¶È¤Ï
+¥·¥¹¥Æ¥à´ÉÍý¼Ô¤ÎÀÕǤ¤Ç¤¢¤ë¡£
+.SH ·Ù¹ð
+NIS ¤Î¥°¥ë¡¼¥×¤Ë¥æ¡¼¥¶¤ò²Ã¤¨¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
+¤³¤ì¤Ïɬ¤º NIS ¥µ¡¼¥Ð¾å¤Ç¹Ô¤¦¤³¤È¡£
+.SH ¥Õ¥¡¥¤¥ë
+/etc/passwd \- ¥æ¡¼¥¶¥¢¥«¥¦¥ó¥È¾ðÊó
+.br
+/etc/shadow \- shadow ¤µ¤ì¤¿¥æ¡¼¥¶¥¢¥«¥¦¥ó¥È¾ðÊó
+.br
+/etc/group \- ¥°¥ë¡¼¥×¾ðÊó
+.br
+/etc/default/useradd \- ¥Ç¥Õ¥©¥ë¥ÈÃͤξðÊó
+.br
+/etc/skel \- ¥Õ¥¡¥¤¥ë¤Î¿÷·Á¤¬ÃÖ¤«¤ì¤ë¥Ç¥£¥ì¥¯¥È¥ê
+.SH ´ØÏ¢¹àÌÜ
+.BR chfn (1),
+.BR chsh (1),
+.BR crypt (3),
+.BR groupadd (8),
+.BR groupdel (8),
+.BR groupmod (8),
+.BR passwd (1),
+.BR userdel (8),
+.BR usermod (8)
+.SH Ãø¼Ô
+Julianne Frances Haugh (jockgrrl@ix.netcom.com)
+
+
index 506c7c00e48402f7a8ca34bf961287b612b9bcf7..c8c9c3e1236c4287f86936b88448d55617f014f8 100644 (file)
@@ -1,4 +1,4 @@
-.\" Copyright 1991 - 1994, John F. Haugh II
+.\" Copyright 1991 - 1994, Julianne Frances Haugh
 .\" All rights reserved.
 .\"
 .\" Redistribution and use in source and binary forms, with or without
@@ -9,18 +9,14 @@
 .\" 2. Redistributions in binary form must reproduce 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
+.\" 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 JOHN HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" 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 JOHN HAUGH OR CONTRIBUTORS BE LIABLE
+.\" 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)
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\"    $Id: userdel.8,v 1.1 2001/06/16 02:35:46 kloczek Exp $
+.\"    $Id: userdel.8,v 1.2 2001/11/16 17:01:33 ankry Exp $
 .\"
 .\" 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 03:27:30 JST 2000
+.\"         by Kentaro Shirakata <argrath@ub32.org>
 .\"
 .TH USERDEL 8
 .SH Ì¾Á°
-userdel \- ¥æ¡¼¥¶¤Î¥¢¥«¥¦¥ó¥ÈµÚ¤Ó´ØÏ¢¤¹¤ë¥Õ¥¡¥¤¥ë¤òºï½ü¤¹¤ë¡£
+userdel \- ¥æ¡¼¥¶¤Î¥¢¥«¥¦¥ó¥ÈµÚ¤Ó´ØÏ¢¤¹¤ë¥Õ¥¡¥¤¥ë¤òºï½ü¤¹¤ë
 .SH ½ñ¼°
 .B userdel
-.\"[ \fB-r\fI ]
-[ \fB-r\fR ]
+[\fB-r\fR]
 .I login
 .SH ÀâÌÀ
-\fIuserdel\fR¥³¥Þ¥ó¥É¤Ï¥·¥¹¥Æ¥à¤Î¥¢¥«¥¦¥ó¥È¥Õ¥¡¥¤¥ë¤ËÊѹ¹¤ò»Ü¤·¡¢
+\fBuserdel\fR¥³¥Þ¥ó¥É¤Ï¥·¥¹¥Æ¥à¤Î¥¢¥«¥¦¥ó¥È¥Õ¥¡¥¤¥ë¤ËÊѹ¹¤ò»Ü¤·¡¢
 ¥æ¡¼¥¶\fIlogin\fR¤Ë°¤¹¤ëÁ´¤Æ¤Î¥¨¥ó¥È¥ê¡¼¤òºï½ü¤¹¤ë¡£
 ºï½ü¤µ¤ì¤ë¥æ¡¼¥¶¤Ï¸ºß¤·¤Æ¤¤¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£
 .IP \fB-r\fR
 ¥æ¡¼¥¶¤Î¥Û¡¼¥à¥Ç¥£¥ì¥¯¥È¥êÃæ¤Î¥Õ¥¡¥¤¥ë¤ò¥Û¡¼¥à¥Ç¥£¥ì¥¯¥È¥ê¼«ÂΤȤȤâ¤Ë
-¾Ãµî¤¹¤ë¡£
+¾Ãµî¤¹¤ë¡£¤Þ¤¿¥æ¡¼¥¶¤Î¥á¡¼¥ë¥¹¥×¡¼¥ë¤â¾Ãµî¤¹¤ë¡£
 Â¾¤Î¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¾å¤Ë¤¢¤ë¥Õ¥¡¥¤¥ë¤Ï¼êºî¶È¤Çõ¤·½Ð¤·¤Æ½üµî¤·¤Ê¤¯¤Æ¤Ï
 ¤Ê¤é¤Ê¤¤¡£
 .SH ¥Õ¥¡¥¤¥ë
@@ -67,8 +64,15 @@ kill
 NIS¤Î¥¯¥é¥¤¥¢¥ó¥È¤«¤é¤Ï¤¤¤«¤Ê¤ëNIS½êÍ­¤Î¥¢¥«¥¦¥ó¥È¤â¾Ãµî¤¹¤ë»ö¤Ï½ÐÍè¤Ê¤¤¡£
 ¾Ãµî¤¹¤ë¾ì¹ç¤Ë¤ÏNIS¤Î¥µ¡¼¥Ð¤«¤é¹Ô¤ï¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
 .SH ´ØÏ¢¹àÌÜ
-\fBchfn(1), chsh(1), groupadd(1M), groupdel(1M), groupmod(1M),
-passwd(1), useradd(1M), usermod(1M)
-.SH ËÝÌõ¼Ô
-¸Å¹âÏÂÄ÷ <furutaka@Flux.tokai.jaeri.go.jp>
+.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 (jockgrrl@ix.netcom.com)
+
 
index 2e66a72a0a8dae799492b0fc79e8d859de5d73a6..d5a19a23f5457f567383073e04aeadd27fae6662 100644 (file)
@@ -1,4 +1,4 @@
-.\" Copyright 1991 - 1994, John F. Haugh II
+.\" Copyright 1991 - 1994, Julianne Frances Haugh
 .\" All rights reserved.
 .\"
 .\" Redistribution and use in source and binary forms, with or without
@@ -9,18 +9,14 @@
 .\" 2. Redistributions in binary form must reproduce 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
+.\" 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 JOHN HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" 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 JOHN HAUGH OR CONTRIBUTORS BE LIABLE
+.\" 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)
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\"    $Id: usermod.8,v 1.1 2001/06/16 02:35:46 kloczek Exp $
+.\"    $Id: usermod.8,v 1.2 2001/11/16 17:01:33 ankry Exp $
 .\"
 .\" 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>
 .\"
 .TH USERMOD 8
 .SH Ì¾Á°
 usermod \- ¥æ¡¼¥¶¥¢¥«¥¦¥ó¥È¤òÊѹ¹¤¹¤ë
 .SH ½ñ¼°
+.TP 8
 .B usermod
-[ \fB-A\fI method\fR | \fBDEFAULT\fR ]
-[ \fB-c\fI comment\fR ]
-[ \fB-d\fI home_dir \fR[ \fB-m\fR ] ]
-[ \fB-e\fI expire_date\fR ]
-[ \fB-f\fI inactive_time\fR ]
-[ \fB-g\fI initial_group\fR ]
-[ \fB-G\fI group[,...]\fR ]
-[ \fB-l\fI login_name \fR ]
-[ \fB-s\fI shell\fR ]
-[ \fB-u\fI uid \fR[ \fB-o\fR ]
+.\" .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 [ -p
+.IR passwd ]
+.br
+.RB [ -s
+.IR shell ]
+.RB [ -u
+.IR uid " ["
+.BR -o ]]
+.RB [ -L | -U ]
 .I login
 .SH ÀâÌÀ
-\fIusermod\fR¥³¥Þ¥ó¥É¤Ï¥³¥Þ¥ó¥É¥é¥¤¥ó¾å¤Ç¤Î»Ø¼¨¤Ë¤·¤¿¤¬¤Ã¤Æ
+\fBusermod\fR¥³¥Þ¥ó¥É¤Ï¥³¥Þ¥ó¥É¥é¥¤¥ó¾å¤Ç¤Î»Ø¼¨¤Ë¤·¤¿¤¬¤Ã¤Æ
 ¥·¥¹¥Æ¥à¤Î¥¢¥«¥¦¥ó¥È¥Õ¥¡¥¤¥ë¤òÊѹ¹¤¹¤ë¡£
-\fIusermod\fR¥³¥Þ¥ó¥É¤Ç»È¤¨¤ë¥ª¥×¥·¥ç¥ó¤Ï
-.IP "\fB-A \fImethod\fR|\fBDEFAULT\fR"
-¥æ¡¼¥¶¤Î¿·¤·¤¤Ç§¾ÚÊýË¡¡£
-¥æ¡¼¥¶¤Îǧ¾ÚÊýË¡¤È¤Ï¡¢¥æ¡¼¥¶¤¬ËܿͤǤ¢¤ë»ö¤ò³Îǧ¤¹¤ë°Ù¤Î¥×¥í¥°¥é¥à̾¤Ç¤¢¤ë¡£
-ʸ»úÎó\fBDEFAULT\fR¤òÍѤ¤¤Æ¥æ¡¼¥¶¤Îǧ¾ÚÊýË¡¤ò¥·¥¹¥Æ¥àɸ½à¤Î¥Ñ¥¹¥ï¡¼¥ÉÊý¼°¤Ë
-Êѹ¹¤¹¤ë»ö¤â½ÐÍè¤ë¡£
+\fBusermod\fR¥³¥Þ¥ó¥É¤Ç»È¤¨¤ë¥ª¥×¥·¥ç¥ó¤Ï
+.\" .IP "\fB-A \fImethod\fR|\fBDEFAULT\fR"
+.\" ¥æ¡¼¥¶¤Î¿·¤·¤¤Ç§¾ÚÊýË¡¡£
+.\" ¥æ¡¼¥¶¤Îǧ¾ÚÊýË¡¤È¤Ï¡¢¥æ¡¼¥¶¤¬ËܿͤǤ¢¤ë»ö¤ò³Îǧ¤¹¤ë°Ù¤Î¥×¥í¥°¥é¥à̾¤Ç¤¢¤ë¡£
+.\" Ê¸»úÎó\fBDEFAULT\fR¤òÍѤ¤¤Æ¥æ¡¼¥¶¤Îǧ¾ÚÊýË¡¤ò¥·¥¹¥Æ¥àɸ½à¤Î¥Ñ¥¹¥ï¡¼¥ÉÊý¼°¤Ë
+.\" Êѹ¹¤¹¤ë»ö¤â½ÐÍè¤ë¡£
 .IP "\fB-c \fIcomment\fR"
 ¥Ñ¥¹¥ï¡¼¥É¥Õ¥¡¥¤¥ë¤Î¿·¤·¤¤¥³¥á¥ó¥ÈÍó¤ÎÆâÍÆ
-Ä̾ï¤Ï\fBchfn(1)\fR¥æ¡¼¥Æ¥£¥ê¥Æ¥£¤òÍѤ¤¤ÆÊѹ¹¤µ¤ì¤ë¡£
+Ä̾ï¤Ï\fBchfn\fR(1)¥æ¡¼¥Æ¥£¥ê¥Æ¥£¤òÍѤ¤¤ÆÊѹ¹¤µ¤ì¤ë¡£
 .IP "\fB-d \fIhome_dir\fR"
 ¿·¤·¤¤¥í¥°¥¤¥ó¥Ç¥£¥ì¥¯¥È¥ê¡£
 \fB-m\fR¥ª¥×¥·¥ç¥ó¤òÍѤ¤¤¿¾ì¹ç¤Ï¸½ºß¤Î¥Û¡¼¥à¥Ç¥£¥ì¥¯¥È¥ê¤ÎÃæ¿È¤¬
@@ -71,21 +89,21 @@ usermod \- 
 ºî¤é¤ì¤ë¡£
 .IP "\fB-e \fIexpire_date\fR"
 ¥¢¥«¥¦¥ó¥È¤¬»ÈÍÑÉÔǽ¤Ë¤Ê¤ëÆüÉÕ¡£
-ÆüÉÕ¤Ï\fIMM/DD/YY\fR¤È¤¤¤¦½ñ¼°¤Ç»ØÄꤹ¤ë(MM,DD,YY¤Ï¤½¤ì¤¾¤ì
-·î¡¢Æü¡¢Ç¯¤òɽ¤¹Æó·å¤Î¿ô»ú)¡£
+ÆüÉÕ¤Ï\fIYYYY-MM-DD\fR¤È¤¤¤¦½ñ¼°¤Ç»ØÄꤹ¤ë
+(YYYY, MM, DD ¤Ï¤½¤ì¤¾¤ìǯ¡¢·î¡¢Æü¤òɽ¤¹¿ô»ú)¡£
 .IP "\fB-f \fIinactive_days\fR"
 ¥Ñ¥¹¥ï¡¼¥É¤Î»ÈÍÑ´ü¸Â¤¬ÀÚ¤ì¤Æ¤«¤é¥¢¥«¥¦¥ó¥È¤¬±Êµ×¤Ë»ÈÍÑÉÔǽ¤Ë¤Ê¤ë
 ¤Þ¤Ç¤ÎÆü¿ô¡£
 0¤È¤¹¤ë¤È¡¢¥Ñ¥¹¥ï¡¼¥É¤Î´ü¸Â¤¬ÀÚ¤ì¤ë¤ÈƱ»þ¤Ë¤³¤Î¥¢¥«¥¦¥ó¥È¤Ï»ÈÍÑÉÔ²Äǽ
 ¤Ë¤Ê¤ë¡£-1¤È¤¹¤ë¤È¤³¤Îµ¡Ç½¤¬Æ¯¤«¤Ê¤¯¤Ê¤ë¡£
-¥Ç¥£¥Õ¥©¥ë¥ÈÃͤÏ-1¡£
+¥Ç¥Õ¥©¥ë¥ÈÃͤÏ-1¡£
 .IP "\fB-g \fIinitial_group\fR"
 ¥í¥°¥¤¥ó»þ¤Î¿·¤·¤¤¥°¥ë¡¼¥×̾¤Þ¤¿¤ÏID¡£
 ¤³¤Î¥°¥ë¡¼¥×̾¤Ï´û¤Ë¸ºß¤·¤Æ¤¤¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
-¤Þ¤¿¡¤¥°¥ë¡¼¥×ÈÖ¹æ¤Ï´û¸¤Î¥°¥ë¡¼¥×¤ò»²¾È¤·¤Æ¤¤¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
-¥Ç¥£¥Õ¥©¥ë¥È¤Î¥°¥ë¡¼¥×ÈÖ¹æ¤Ï1¤Ç¤¢¤ë¡£
+¤Þ¤¿¡¢¥°¥ë¡¼¥×ÈÖ¹æ¤Ï´û¸¤Î¥°¥ë¡¼¥×¤ò»²¾È¤·¤Æ¤¤¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
+¥Ç¥Õ¥©¥ë¥È¤Î¥°¥ë¡¼¥×ÈÖ¹æ¤Ï1¤Ç¤¢¤ë¡£
 .IP "\fB-G \fIgroup,[...]\fR"
-¥æ¡¼¥¶¤¬Â°¤¹¡¤Éû¥°¥ë¡¼¥×¤Î¥ê¥¹¥È¡£
+¥æ¡¼¥¶¤¬Â°¤¹¡¢Éû¥°¥ë¡¼¥×¤Î¥ê¥¹¥È¡£
 ¥°¥ë¡¼¥×¤Ï¥³¥ó¥Þ¤òÍѤ¤¤Æ¶èÀڤꡢ´Ö¤Ë¶õÇòʸ»ú¤òÆþ¤ì¤Æ¤Ï
 ¤Ê¤é¤Ê¤¤¡£
 »ØÄê¤Ç¤­¤ë¥°¥ë¡¼¥×¤Ë¤Ï\fB-g\fR¥ª¥×¥·¥ç¥ó¤òÍѤ¤¤ë¾ì¹ç¤È
@@ -97,9 +115,11 @@ usermod \- 
 Â¾¤Ï²¿¤âÊѹ¹¤·¤Ê¤¤¡£
 ÆÃ¤Ë¡¢¿·¤·¤¤¥í¥°¥¤¥ó̾¤Ë¹ç¤ï¤»¤Æ¥Û¡¼¥à¥Ç¥£¥ì¥¯¥È¥ê̾¤òÊѹ¹¤·¤Ê¤¯¤Æ¤Ï
 ¤Ê¤é¤Ê¤¤¤À¤í¤¦¡£
+.IP "\fB-p \fIpasswd\fR"                                                
+\fBcrypt\fR(3)¤ÎÊÖ¤êÃͤǤ¢¤ë°Å¹æ²½¤µ¤ì¤¿¥Ñ¥¹¥ï¡¼¥É¡£
 .IP "\fB-s \fIshell\fR"
 ¿·¤·¤¤¥í¥°¥¤¥ó¥·¥§¥ë¤Î̾Á°¡£
-¤³¤ÎÍó¤ò¶õÇò¤Ë¤·¤¿¾ì¹ç¤Ï¥·¥¹¥Æ¥à¤¬¥Ç¥£¥Õ¥©¥ë¥È¤Î¥í¥°¥¤¥ó¥·¥§¥ë¤ò
+¤³¤ÎÍó¤ò¶õÇò¤Ë¤·¤¿¾ì¹ç¤Ï¥·¥¹¥Æ¥à¤¬¥Ç¥Õ¥©¥ë¥È¤Î¥í¥°¥¤¥ó¥·¥§¥ë¤ò
 ÁªÂò¤¹¤ë¡£
 .IP "\fB-u \fIuid\fR"
 ¥æ¡¼¥¶¤ÎIDÈֹ档
@@ -110,6 +130,15 @@ usermod \- 
 ¥Û¡¼¥à¥Ç¥£¥ì¥¯¥È¥ê°Ê²¼¤Î¡¢¤½¤Î¥æ¡¼¥¶½êÍ­¤ÎÁ´¤Æ¤Î¥Õ¥¡¥¤¥ë¤Î¥æ¡¼¥¶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ÈÖ¹æ¤òÊѹ¹¤¹¤ëºÝ¤Ï¡¢
@@ -125,8 +154,16 @@ NIS
 .br
 /etc/group \- ¥°¥ë¡¼¥×¾ðÊó
 .SH ´ØÏ¢¹àÌÜ
-\fBchfn(1), chsh(1), groupadd(1M), groupdel(1M), groupmod(1M),
-passwd(1), useradd(1M), userdel(1M)
-.SH ËÝÌõ¼Ô
-¸Å¹âÏÂÄ÷ <furutaka@Flux.tokai.jaeri.go.jp>
+.BR chfn (1),
+.BR chsh (1),
+.BR crypt (3),
+.BR groupadd (8),
+.BR groupdel (8),
+.BR groupmod (8),
+.BR passwd (1),
+.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..f0f503c
--- /dev/null
@@ -0,0 +1 @@
+.so vipw.8
diff --git a/man/ja/vipw.8 b/man/ja/vipw.8
new file mode 100644 (file)
index 0000000..087c254
--- /dev/null
@@ -0,0 +1,37 @@
+.\" $Id: vipw.8,v 1.1 2001/11/16 17:00:34 ankry Exp $
+.\"
+.\"
+.\" 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>
+.\"
+.\"
+.TH VIPW 8 "26 Sep 1997"
+.SH Ì¾Á°
+vipw, vigr \- password¡¢ group¡¢ shadow-password¡¢shadow-group ¥Õ¥¡¥¤¥ë¤òÊÔ½¸¤¹¤ë¡£
+.SH ½ñ¼°
+.BR vipw " [-s]"
+.br
+.BR vigr " [-s]"
+.SH ÀâÌÀ
+.BR vipw " ¤È " vigr
+¤Ï
+.IR /etc/passwd ¤È /etc/group
+¤ò¤½¤ì¤¾¤ìÊÔ½¸¤¹¤ë¡£
+.B -s
+¥Õ¥é¥°¤¬»ØÄꤵ¤ì¤Æ¤¤¤ë¾ì¹ç¡¢¤½¤ì¤é¤Î¥Õ¥¡¥¤¥ë¤Î shadow ¥Ð¡¼¥¸¥ç¥ó¤Ç¤¢¤ë
+.IR /etc/shadow ¤È /etc/gshadow
+¤ò¤½¤ì¤¾¤ìÊÔ½¸¤¹¤ë¡£
+¥×¥í¥°¥é¥à¤Ï¥Õ¥¡¥¤¥ë¤Î²þÊѤòËɤ°¤¿¤á¤ÎŬÀڤʥí¥Ã¥¯¤òÀßÄꤹ¤ë¡£
+»È¤ï¤ì¤ë¥¨¥Ç¥£¥¿¤Ï¡¢´Ä¶­ÊÑ¿ô
+.BR VISUAL ¡¢
+´Ä¶­ÊÑ¿ô
+.BR EDITOR ¡¢
+¥Ç¥Õ¥©¥ë¥È¤Î¥¨¥Ç¥£¥¿
+.BR vi 
+¤Î½ç¤Ç¤¢¤ë¡£
+.SH ´ØÏ¢¹àÌÜ
+.BR passwd (5),
+.BR group (5),
+.BR shadow (5)
index 4d60ac7a6f088a8759a3d22e9f52d67f7e2f2289..6faca3010df6d50a1208877b8f48306ea90a9cd4 100644 (file)
@@ -1,4 +1,4 @@
-.\"$Id: newgrp.1,v 1.9 2001/01/27 02:55:52 kloczek Exp $
+.\"$Id: newgrp.1,v 1.10 2001/12/22 05:40:01 kloczek Exp $
 .\" Copyright 1991, Julianne Frances Haugh
 .\" All rights reserved.
 .\"
@@ -33,7 +33,7 @@ sg \- Execute command as different group ID
 .SH SYNOPSIS
 \fBnewgrp\fR [\fB-\fR] [\fIgroup\fR]
 .br
-\fBnewgrp\fR [\fB-\fR]  [\fIgroup\fR [[\fB-c\fR] \fIcommand\fR]]
+\fBnewgrp\fR [\fB-\fR] [\fIgroup\fR [[\fB-c\fR] \fIcommand\fR]]
 .SH DESCRIPTION
 \fBnewgrp\fR is used to change the current group ID during a login session.
 If the optional \fB\-\fR flag is given, the user's environment
index 57773a95fff62395ac99e6875db2f6077ae78970..ea4bf9b83f3d09b033f072b4bf74b0d98d9b262c 100644 (file)
@@ -1,4 +1,4 @@
-.\"$Id: newusers.8,v 1.8 2001/01/27 02:55:52 kloczek Exp $
+.\"$Id: newusers.8,v 1.9 2001/12/22 05:40:01 kloczek Exp $
 .\" Copyright 1991 - 1994, Julianne Frances Haugh
 .\" All rights reserved.
 .\"
@@ -29,7 +29,7 @@
 .SH NAME
 \fBnewusers\fR - update and create new users in batch
 .SH SYNOPSIS
-\fBnewusers\fR [\fI new_users \fR]
+\fBnewusers\fR [\fInew_users\fR]
 .SH DESCRIPTION
 \fBnewusers\fR reads a file of user name and cleartext password pairs
 and uses this information to update a group of existing users or to
index 321da581b66ec7eed0d6187768f17737b82af208..db6d4830d8c2de73e1bf3fd953df30d0b57d2d79 100644 (file)
@@ -1,4 +1,4 @@
-.\"$Id: passwd.1,v 1.9 2001/01/27 02:55:52 kloczek Exp $
+.\"$Id: passwd.1,v 1.10 2001/12/22 05:40:01 kloczek Exp $
 .\" Copyright 1989 - 1994, Julianne Frances Haugh
 .\" All rights reserved.
 .\"
@@ -31,7 +31,7 @@ passwd \- change user password
 .SH SYNOPSIS
 \fBpasswd\fR [\fB-f\fR|\fB-s\fR] [\fIname\fR]
 .br
-\fBpasswd\fR [\fB-g\fR] [\fB-r\fR|\fBR\fR] \fIgroup\fR
+\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
index f744e83dd3ef8521917fb54ae7b3bc3f95dc560e..0690595b09232d0c631da2e3e06e2443e1ed2ea3 100644 (file)
@@ -2,46 +2,54 @@
 mandir = @mandir@/pl
 
 man_MANS = \
+       adduser.8 \
        chage.1 \
        chfn.1 \
+       chpasswd.8 \
        chsh.1 \
-       gpasswd.1 \
-       login.1 \
-       newgrp.1 \
-       passwd.1 \
-       su.1 \
-       shadow.3 \
        d_passwd.5 \
+       expiry.1 \
        faillog.5 \
-       limits.5 \
-       login.access.5 \
-       login.defs.5 \
-       passwd.5 \
-       porttime.5 \
-       shadow.5 \
-       suauth.5 \
-       adduser.8 \
-        chpasswd.8 \
        faillog.8 \
+       gpasswd.1 \
        groupadd.8 \
        groupdel.8 \
        groupmod.8 \
+       grpck.8 \
        grpconv.8 \
        grpunconv.8 \
-       grpck.8 \
        lastlog.8 \
+       limits.5 \
+       login.1 \
+       login.access.5 \
+       login.defs.5 \
        logoutd.8 \
        mkpasswd.8 \
+       newgrp.1 \
        newusers.8 \
+       passwd.1 \
+       passwd.5 \
+       porttime.5 \
        pwck.8 \
        pwconv.8 \
        pwunconv.8 \
-       shadowconfig.8 \
+       sg.1 \
+       shadow.5 \
+       su.1 \
+       suauth.5 \
        useradd.8 \
        userdel.8 \
        usermod.8 \
+       vigr.8 \
        vipw.8
 
 EXTRA_DIST = $(man_MANS) \
-       dialups.5 groups.1 id.1 pw_auth.3 pwauth.8 sulogin.8 \
-        dpasswd.8
+       dialups.5 \
+       dpasswd.8 \
+       groups.1 \
+       id.1 \
+       pw_auth.3 \
+       pwauth.8 \
+       shadow.3 \
+       shadowconfig.8 \
+       sulogin.8
index 5090e9ad903016d8c333c836f74724bcc639b85f..fdbf4e38e3a5f9658aa24f04477581bf59317304 100644 (file)
@@ -109,50 +109,58 @@ install_sh = @install_sh@
 mandir = @mandir@/pl
 
 man_MANS = \
+       adduser.8 \
        chage.1 \
        chfn.1 \
+       chpasswd.8 \
        chsh.1 \
-       gpasswd.1 \
-       login.1 \
-       newgrp.1 \
-       passwd.1 \
-       su.1 \
-       shadow.3 \
        d_passwd.5 \
+       expiry.1 \
        faillog.5 \
-       limits.5 \
-       login.access.5 \
-       login.defs.5 \
-       passwd.5 \
-       porttime.5 \
-       shadow.5 \
-       suauth.5 \
-       adduser.8 \
-        chpasswd.8 \
        faillog.8 \
+       gpasswd.1 \
        groupadd.8 \
        groupdel.8 \
        groupmod.8 \
+       grpck.8 \
        grpconv.8 \
        grpunconv.8 \
-       grpck.8 \
        lastlog.8 \
+       limits.5 \
+       login.1 \
+       login.access.5 \
+       login.defs.5 \
        logoutd.8 \
        mkpasswd.8 \
+       newgrp.1 \
        newusers.8 \
+       passwd.1 \
+       passwd.5 \
+       porttime.5 \
        pwck.8 \
        pwconv.8 \
        pwunconv.8 \
-       shadowconfig.8 \
+       sg.1 \
+       shadow.5 \
+       su.1 \
+       suauth.5 \
        useradd.8 \
        userdel.8 \
        usermod.8 \
+       vigr.8 \
        vipw.8
 
 
 EXTRA_DIST = $(man_MANS) \
-       dialups.5 groups.1 id.1 pw_auth.3 pwauth.8 sulogin.8 \
-        dpasswd.8
+       dialups.5 \
+       dpasswd.8 \
+       groups.1 \
+       id.1 \
+       pw_auth.3 \
+       pwauth.8 \
+       shadow.3 \
+       shadowconfig.8 \
+       sulogin.8
 
 subdir = man/pl
 mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
@@ -223,45 +231,6 @@ uninstall-man1:
          rm -f $(DESTDIR)$(man1dir)/$$inst; \
        done
 
-man3dir = $(mandir)/man3
-install-man3: $(man3_MANS) $(man_MANS)
-       @$(NORMAL_INSTALL)
-       $(mkinstalldirs) $(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 $(srcdir)/$$i; then file=$(srcdir)/$$i; \
-         else file=$$i; fi; \
-         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
-         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/^.*\\.//'`; \
-         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
-
 man5dir = $(mandir)/man5
 install-man5: $(man5_MANS) $(man_MANS)
        @$(NORMAL_INSTALL)
@@ -369,7 +338,7 @@ check: check-am
 all-am: Makefile $(MANS)
 
 installdirs:
-       $(mkinstalldirs) $(DESTDIR)$(man1dir) $(DESTDIR)$(man3dir) $(DESTDIR)$(man5dir) $(DESTDIR)$(man8dir)
+       $(mkinstalldirs) $(DESTDIR)$(man1dir) $(DESTDIR)$(man5dir) $(DESTDIR)$(man8dir)
 
 install: install-am
 install-exec: install-exec-am
@@ -416,7 +385,7 @@ install-exec-am:
 
 install-info: install-info-am
 
-install-man: install-man1 install-man3 install-man5 install-man8
+install-man: install-man1 install-man5 install-man8
 
 installcheck-am:
 
@@ -430,20 +399,18 @@ mostlyclean-am: mostlyclean-generic mostlyclean-libtool
 
 uninstall-am: uninstall-info-am uninstall-man
 
-uninstall-man: uninstall-man1 uninstall-man3 uninstall-man5 \
-       uninstall-man8
+uninstall-man: uninstall-man1 uninstall-man5 uninstall-man8
 
 .PHONY: all all-am check check-am clean clean-generic clean-libtool \
        distclean distclean-generic distclean-libtool distdir dvi \
        dvi-am info info-am install install-am install-data \
        install-data-am install-exec install-exec-am install-info \
-       install-info-am install-man install-man1 install-man3 \
-       install-man5 install-man8 install-strip installcheck \
-       installcheck-am installdirs maintainer-clean \
-       maintainer-clean-generic mostlyclean mostlyclean-generic \
-       mostlyclean-libtool uninstall uninstall-am uninstall-info-am \
-       uninstall-man uninstall-man1 uninstall-man3 uninstall-man5 \
-       uninstall-man8
+       install-info-am install-man install-man1 install-man5 \
+       install-man8 install-strip installcheck installcheck-am \
+       installdirs maintainer-clean maintainer-clean-generic \
+       mostlyclean mostlyclean-generic mostlyclean-libtool uninstall \
+       uninstall-am uninstall-info-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.
index 35f7abf27da4cfd907f666ab47ff3a831a1c12b3..86a12be2c1388b29ac4b03e3e329bfd8c0b34e0b 100644 (file)
@@ -1,4 +1,4 @@
-.\" $Id: chfn.1,v 1.4 2001/01/27 02:55:54 kloczek Exp $
+.\" $Id: chfn.1,v 1.5 2001/12/22 07:18:47 kloczek Exp $
 .\" {PTM/WK/1999-09-25}
 .\" Copyright 1990 - 1994 Julianne Frances Haugh
 .\" All rights reserved.
@@ -61,7 +61,6 @@ zmianie.
 .SH AUTOR
 Julianne Frances Haugh (jockgrrl@ix.netcom.com)
 .SH OD T£UMACZA
-Niniejsza dokumentacja opisuje polecenie wchodz±ce w sk³ad pakietu
-shadow-password.
-Z uwagi na powtarzaj±ce siê nazwy poleceñ, upewnij siê, ¿e korzystasz
-z w³a¶ciwej dokumentacji.
+Niniejsza dokumentacja opisuje polecenie wchodz±ce w sk³ad pakietu shadow. Z
+uwagi na powtarzaj±ce siê nazwy poleceñ, upewnij siê, ¿e korzystasz z
+w³a¶ciwej dokumentacji.
index f7f9e5863522e6b0162e3b38bb8dc387447d2a4f..4cd9d45ad4d39a4efa1a8ca0ede78b4097c6ff1a 100644 (file)
@@ -1,4 +1,4 @@
-.\" $Id: chsh.1,v 1.4 2001/01/27 02:55:54 kloczek Exp $
+.\" $Id: chsh.1,v 1.5 2001/12/22 07:18:47 kloczek Exp $
 .\" {PTM/WK/1999-09-25}
 .\" Copyright 1990, Julianne Frances Haugh
 .\" All rights reserved.
@@ -60,8 +60,7 @@ Bie
 .SH AUTOR
 Julianne Frances Haugh (jockgrrl@ix.netcom.com)
 .SH OD T£UMACZA
-Niniejsza dokumentacja opisuje polecenie wchodz±ce w sk³ad pakietu
-shadow-password.
-Istnieje wiele programów i skryptów do zarz±dzania kontami
-u¿ytkowników czy grup. Z uwagi na powtarzaj±ce siê nazwy poleceñ, upewnij
-siê, ¿e korzystasz z w³a¶ciwej dokumentacji.
+Niniejsza dokumentacja opisuje polecenie wchodz±ce w sk³ad pakietu shadow.
+Istnieje wiele programów i skryptów do zarz±dzania kontami u¿ytkowników czy
+grup. Z uwagi na powtarzaj±ce siê nazwy poleceñ, upewnij siê, ¿e korzystasz
+z w³a¶ciwej dokumentacji.
diff --git a/man/pl/expiry.1 b/man/pl/expiry.1
new file mode 100644 (file)
index 0000000..5441c3a
--- /dev/null
@@ -0,0 +1,48 @@
+.\"$Id: expiry.1,v 1.1 2001/11/13 23:26:57 ankry Exp $
+.\" 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.
+.\"
+.TH EXPIRY 1
+.SH NAZWA
+expiry \- sprawdzenie wa¿no¶ci i wymuszenie zmiany has³a
+.SH SK£ADNIA
+.TP 6
+\fBexpiry\fR [\fB-c\fR] [\fB-f\fR]
+.SH OPIS
+\fBexpiry\fR sprawdza (\fB-c\fR), kiedy wyga¶nie aktualne has³o oraz wymusza
+(\fB-f\fR) jego zmianê, je¶li potrzeba. Mo¿e ono byæ wywo³ywane jako zwyk³e
+polecenie przez u¿ytkownika.
+.SH PLIKI
+/etc/passwd \- informacje o koncie u¿ytkownika
+.br
+/etc/shadow \- ukryte informacje o koncie u¿ytkownika
+.SH "ZOBACZ TAK¯E"
+.BR passwd (5),
+.BR shadow (5)
+.SH AUTOR
+Ben Collins (bcollins@debian.org)
index b7040de570b95610766183a0531726052f91cd08..f6e79f167e777579211a2fbd79fc0535fa2fddb4 100644 (file)
@@ -1,4 +1,4 @@
-.\" $Id: groupadd.8,v 1.4 2001/01/27 02:55:54 kloczek Exp $
+.\" $Id: groupadd.8,v 1.5 2001/12/22 07:18:47 kloczek Exp $
 .\" {PTM/WK/0.1/VIII-1999}
 .\" Copyright 1991, Julianne Frances Haugh
 .\" All rights reserved.
@@ -59,8 +59,7 @@ Warto
 .SH AUTOR
 Julianne Frances Haugh (jockgrrl@ix.netcom.com)
 .SH OD T£UMACZA
-Niniejsza dokumentacja opisuje polecenie wchodz±ce w sk³ad pakietu
-shadow-password.
-Istnieje wiele programów i skryptów do zarz±dzania kontami
-u¿ytkowników czy grup. Z uwagi na powtarzaj±ce siê nazwy poleceñ, upewnij
-siê, ¿e korzystasz z w³a¶ciwej dokumentacji.
+Niniejsza dokumentacja opisuje polecenie wchodz±ce w sk³ad pakietu shadow.
+Istnieje wiele programów i skryptów do zarz±dzania kontami u¿ytkowników czy
+grup. Z uwagi na powtarzaj±ce siê nazwy poleceñ, upewnij siê, ¿e korzystasz
+z w³a¶ciwej dokumentacji.
index 8fcb35d4e87cc55b06eb0c97ebdbfe50b766145c..37e2a6b95772d0af2c5089da4b7b465043d18a68 100644 (file)
@@ -1,4 +1,4 @@
-.\" $Id: groupdel.8,v 1.4 2001/01/27 02:55:54 kloczek Exp $
+.\" $Id: groupdel.8,v 1.5 2001/12/22 07:18:47 kloczek Exp $
 .\" {PTM/WK/0.1/VIII-1999}
 .\" Copyright 1991 - 1993, Julianne Frances Haugh
 .\" All rights reserved.
@@ -58,8 +58,7 @@ Musisz usun
 .SH AUTOR
 Julianne Frances Haugh (jockgrrl@ix.netcom.com)
 .SH OD T£UMACZA
-Niniejsza dokumentacja opisuje polecenie wchodz±ce w sk³ad pakietu
-shadow-password.
-Istnieje wiele programów i skryptów do zarz±dzania kontami
-u¿ytkowników czy grup. Z uwagi na powtarzaj±ce siê nazwy poleceñ, upewnij
-siê, ¿e korzystasz z w³a¶ciwej dokumentacji.
+Niniejsza dokumentacja opisuje polecenie wchodz±ce w sk³ad pakietu shadow.
+Istnieje wiele programów i skryptów do zarz±dzania kontami u¿ytkowników czy
+grup. Z uwagi na powtarzaj±ce siê nazwy poleceñ, upewnij siê, ¿e korzystasz
+z w³a¶ciwej dokumentacji.
index 8c3a90243bc3f88baf68343d1f11777a53806531..b27e6453d5e821d1d971a28edf9b1b2d3db5f0c5 100644 (file)
@@ -1,4 +1,4 @@
-.\" $Id: groupmod.8,v 1.4 2001/01/27 02:55:54 kloczek Exp $
+.\" $Id: groupmod.8,v 1.5 2001/12/22 07:18:47 kloczek Exp $
 .\" {PTM/WK/0.1/VIII-1999}
 .\" Copyright 1991, Julianne Frances Haugh
 .\" All rights reserved.
@@ -63,8 +63,7 @@ Nazwa grupy zostanie zmieniona z \fIgrupa\fR na \fInazwa_grupy\fR.
 .SH AUTOR
 Julianne Frances Haugh (jockgrrl@ix.netcom.com)
 .SH OD T£UMACZA
-Niniejsza dokumentacja opisuje polecenie wchodz±ce w sk³ad pakietu
-shadow-password.
-Istnieje wiele programów i skryptów do zarz±dzania kontami
-u¿ytkowników czy grup. Z uwagi na powtarzaj±ce siê nazwy poleceñ, upewnij
-siê, ¿e korzystasz z w³a¶ciwej dokumentacji.
+Niniejsza dokumentacja opisuje polecenie wchodz±ce w sk³ad pakietu shadow.
+Istnieje wiele programów i skryptów do zarz±dzania kontami u¿ytkowników czy
+grup. Z uwagi na powtarzaj±ce siê nazwy poleceñ, upewnij siê, ¿e korzystasz
+z w³a¶ciwej dokumentacji.
index 9dca0c8022f9709fb377a963466dc51025644c54..414bcac2fb8fe946f7723b48189513a64e00ab54 100644 (file)
@@ -1,4 +1,4 @@
-.\" $Id: groups.1,v 1.4 2001/01/27 02:55:54 kloczek Exp $
+.\" $Id: groups.1,v 1.5 2001/12/22 07:18:47 kloczek Exp $
 .\" {PRM/WK/1999-09-25}
 .\" Copyright 1991 - 1994, Julianne Frances Haugh
 .\" All rights reserved.
@@ -53,7 +53,6 @@ musi u
 .SH AUTOR
 Julianne Frances Haugh (jockgrrl@ix.netcom.com)
 .SH OD T£UMACZA
-Niniejsza dokumentacja opisuje polecenie wchodz±ce w sk³ad pakietu
-shadow-password.
-Z uwagi na powtarzaj±ce siê nazwy poleceñ, upewnij siê, ¿e korzystasz
-z w³a¶ciwej dokumentacji.
+Niniejsza dokumentacja opisuje polecenie wchodz±ce w sk³ad pakietu shadow. Z
+uwagi na powtarzaj±ce siê nazwy poleceñ, upewnij siê, ¿e korzystasz z
+w³a¶ciwej dokumentacji.
index 81e967e12907a8dd7cd13b471fe5e6845d8476eb..d3b6e3f4442619d12ec5d962e3ba580d4ce4178d 100644 (file)
@@ -1,4 +1,4 @@
-.\" $Id: id.1,v 1.4 2001/01/27 02:55:54 kloczek Exp $
+.\" $Id: id.1,v 1.5 2001/12/22 07:18:47 kloczek Exp $
 .\" {PTM/WK/1999-09-25}
 .\" Copyright 1991, Julianne Frances Haugh
 .\" All rights reserved.
@@ -50,7 +50,6 @@ r
 .SH AUTOR
 Julianne Frances Haugh (jockgrrl@ix.netcom.com)
 .SH OD T£UMACZA
-Niniejsza dokumentacja opisuje polecenie wchodz±ce w sk³ad pakietu
-shadow-password.
-Z uwagi na powtarzaj±ce siê nazwy poleceñ, upewnij siê, ¿e korzystasz
-z w³a¶ciwej dokumentacji.
+Niniejsza dokumentacja opisuje polecenie wchodz±ce w sk³ad pakietu shadow. Z
+uwagi na powtarzaj±ce siê nazwy poleceñ, upewnij siê, ¿e korzystasz z
+w³a¶ciwej dokumentacji.
index 956397d3a94bd4040ca675609a046f1871fedc0a..fc23decc6da2acf4c47f19438e620a1d234f14b9 100644 (file)
@@ -1,4 +1,4 @@
-.\" $Id: login.1,v 1.4 2001/01/27 02:55:54 kloczek Exp $
+.\" $Id: login.1,v 1.5 2001/12/22 07:18:47 kloczek Exp $
 .\" {PTM/WK/1999-09-25}
 .\" Copyright 1989 - 1994, Julianne Frances Haugh
 .\" All rights reserved.
@@ -127,7 +127,6 @@ Po
 .SH AUTOR
 Julianne Frances Haugh (jockgrrl@ix.netcom.com)
 .SH OD T£UMACZA
-Niniejsza dokumentacja opisuje polecenie wchodz±ce w sk³ad pakietu
-shadow-password.
-Z uwagi na powtarzaj±ce siê nazwy poleceñ, upewnij siê, ¿e korzystasz
-z w³a¶ciwej dokumentacji.
+Niniejsza dokumentacja opisuje polecenie wchodz±ce w sk³ad pakietu shadow. Z
+uwagi na powtarzaj±ce siê nazwy poleceñ, upewnij siê, ¿e korzystasz z
+w³a¶ciwej dokumentacji.
index 19e92474669ebfbdafc1af0cbb9317fb794b06a4..d291195e285010b38d8b9dd137d106a087048f3a 100644 (file)
@@ -1,4 +1,4 @@
-.\" $Id: newgrp.1,v 1.4 2001/01/27 02:55:54 kloczek Exp $
+.\" $Id: newgrp.1,v 1.5 2001/12/22 07:18:47 kloczek Exp $
 .\" {PTM/WK/1999-09-15}
 .\" Copyright 1991, Julianne Frances Haugh
 .\" All rights reserved.
@@ -69,7 +69,6 @@ z kt
 .SH AUTOR
 Julianne Frances Haugh (jockgrrl@ix.netcom.com)
 .SH OD T£UMACZA
-Niniejsza dokumentacja opisuje polecenie wchodz±ce w sk³ad pakietu
-shadow-password.
-Z uwagi na powtarzaj±ce siê nazwy poleceñ, upewnij siê, ¿e korzystasz
-z w³a¶ciwej dokumentacji.
+Niniejsza dokumentacja opisuje polecenie wchodz±ce w sk³ad pakietu shadow. Z
+uwagi na powtarzaj±ce siê nazwy poleceñ, upewnij siê, ¿e korzystasz z
+w³a¶ciwej dokumentacji.
index caa1f3c3019168ec5a98106c478ee9f282d06860..1a6fccdccd87453d422bbcc6b8944c0634ff0c0a 100644 (file)
@@ -1,4 +1,4 @@
-.\" $Id: passwd.1,v 1.5 2001/01/27 02:55:54 kloczek Exp $
+.\" $Id: passwd.1,v 1.7 2001/12/22 07:18:47 kloczek Exp $
 .\" {PTM/WK/1999-09-20}
 .\" Copyright 1989 - 1994, Julianne Frances Haugh
 .\" All rights reserved.
@@ -32,7 +32,7 @@ passwd \- zmie
 .SH SK£ADNIA
 \fBpasswd\fR [\fB-f\fR|\fB-s\fR]
 .br
-\fBpasswd\fR [\fB-g\fR] [\fB-r\fR|\fBR\fR] \fIgrupa\fR
+\fBpasswd\fR [\fB-g\fR] [\fB-r\fR|\fB-R\fR] \fIgrupa\fR
 .br
 \fBpasswd\fR [\fB-x\fR \fImax\fR] [\fB-n\fR \fImin\fR]
 [\fB-w\fR \fIostrze¿\fR] [\fB-i\fR \fInieakt\fR] \fIlogin\fR
@@ -184,7 +184,6 @@ nie s
 .SH AUTOR
 Julianne Frances Haugh (jockgrrl@ix.netcom.com)
 .SH OD T£UMACZA
-Niniejsza dokumentacja opisuje polecenie wchodz±ce w sk³ad pakietu
-shadow-password.
-Z uwagi na powtarzaj±ce siê nazwy poleceñ, upewnij siê, ¿e korzystasz
-z w³a¶ciwej dokumentacji.
+Niniejsza dokumentacja opisuje polecenie wchodz±ce w sk³ad pakietu shadow. Z
+uwagi na powtarzaj±ce siê nazwy poleceñ, upewnij siê, ¿e korzystasz z
+w³a¶ciwej dokumentacji.
diff --git a/man/pl/sg.1 b/man/pl/sg.1
new file mode 100644 (file)
index 0000000..31be744
--- /dev/null
@@ -0,0 +1 @@
+.so newgrp.1
index 856c843a2a5863a9db8e64423676ab45b4fb1729..30a9dac4292c6765f3875febc4e3279bac9025b4 100644 (file)
@@ -1,4 +1,4 @@
-.\" $Id: su.1,v 1.4 2001/01/27 02:55:54 kloczek Exp $
+.\" $Id: su.1,v 1.5 2001/12/22 07:18:47 kloczek Exp $
 .\" {PTM/WK/1999-09-25}
 .\" Copyright 1989 - 1990, Julianne Frances Haugh
 .\" All rights reserved.
@@ -76,7 +76,6 @@ cz
 .SH AUTOR
 Julianne Frances Haugh (jockgrrl@ix.netcom.com)
 .SH OD T£UMACZA
-Niniejsza dokumentacja opisuje polecenie wchodz±ce w sk³ad pakietu
-shadow-password.
-Z uwagi na powtarzaj±ce siê nazwy poleceñ, upewnij siê, ¿e korzystasz
-z w³a¶ciwej dokumentacji.
+Niniejsza dokumentacja opisuje polecenie wchodz±ce w sk³ad pakietu shadow. Z
+uwagi na powtarzaj±ce siê nazwy poleceñ, upewnij siê, ¿e korzystasz z
+w³a¶ciwej dokumentacji.
index 8b84aa7f61bc8e2fc242aac15d35bfa033ac2571..f2db365dd3d409e7792d5b7f580cb4835d909d7a 100644 (file)
@@ -1,4 +1,4 @@
-.\" $Id: useradd.8,v 1.5 2001/01/27 02:55:54 kloczek Exp $
+.\" $Id: useradd.8,v 1.8 2001/12/22 08:03:38 kloczek Exp $
 .\" {PTM/WK/0.1/VIII-1999}
 .\" Copyright 1991 - 1994, Julianne Frances Haugh
 .\" All rights reserved.
@@ -32,13 +32,14 @@ useradd - tw
 .SH SK£ADNIA
 .TP 8
 \fBuseradd\fR [\fB-c\fR \fIkomentarz\fR] [\fB-d\fR \fIkatalog_domowy\fR]
+.br
 [\fB-e\fR \fIdata_wa¿no¶ci\fR] [\fB-f\fR \fIdni_nieaktywno¶ci\fR]
 .br
 [\fB-g\fR \fIgrupa_pocz±tkowa\fR] [\fB-G\fR \fIgrupa [,...]\fR]
 .br
-[\fB-m\fR [\fB-k\fR \fIkatalog_wzorców\fR]] [\fB-s\fR \fIpow³oka\fR]
+[\fB-m\fR [\fB-k\fR \fIkatalog_wzorców\fR]] [\fB-o\fR] [\fB-p\fR \fIhas³o\fR]
 .br
-[\fB-u\fR \fIuid\fR [\fB-o\fR]] \fIlogin\fR
+[\fB-s\fR \fIpow³oka\fR] [\fB-u\fR \fIuid\fR] \fIlogin\fR
 .TP 8
 \fBuseradd\fR \fB-D\fR [\fB-g\fI domy¶lna_grupa\fR] [\fB-b\fI katalog_bazowy\fR]
 .br
@@ -99,6 +100,15 @@ podkatalogi zawarte w \fIkatalogu_wzorc
 Opcja \fB-k\fR jest dozwolona tylko w po³±czeniu z opcj± \fB-m\fR.
 Domy¶lnym dzia³aniem jest nie tworzenie katalogu i nie kopiowanie
 jakichkolwiek plików.
+.IP "\fB-o\fR"
+Umo¿liwia utworzenie uzytkownaika z nieunikalnym UID (takim samym jak ju¿
+istniej±cy).
+.IP \fB-r\fR
+Tworzenie konta systemowego. Ta opcja pozwala na utworzenie konta o UID
+ni¿szym ni¿ UID_MIN zdefiniowane w fI/etc/login.defs\fR. O ile nie poda siê
+dodatkowo opcji \fB-m\fR nie jest tworzony katalog domowy dla tak tworzonego
+u¿ytkownika niezaleznie od tego czy twozrenie katalogu jest ustawione czy
+nei w \fI/etc/login.defs\fR.
 .IP "\fB-s \fIpow³oka\fR"
 Nazwa pow³oki (shell) u¿ytkownika. Ustawienie tego pola na puste
 powoduje, ¿e system wybierze domy¶ln± pow³okê logowania.
@@ -158,193 +168,7 @@ na serwerze NIS.
 Julianne Frances Haugh (jockgrrl@ix.netcom.com)
 .SH OD T£UMACZA
 Niniejsza dokumentacja opisuje polecenie wchodz±ce w sk³ad pakietu
-shadow-password.
-Istnieje wiele programów i skryptów do zarz±dzania kontami
-u¿ytkowników czy grup. Z uwagi na powtarzaj±ce siê nazwy poleceñ, upewnij
-siê, ¿e korzystasz z w³a¶ciwej dokumentacji.
-.\" {PTM/WK/0.1/VIII-1999}
-.\" 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,v 1.5 2001/01/27 02:55:54 kloczek Exp $
-.\"
-.TH USERADD 8
-.SH NAZWA
-useradd - twórz nowego u¿ytkownika lub zmieñ domy¶ln± informacjê o nowym
-.SH SK£ADNIA
-.TP 8
-.B useradd
-.\" .RB [ -A
-.\" .RI { metoda | \fBDEFAULT\fR "},... ]"
-.RB [ -c
-.IR komentarz ]
-.RB [ -d
-.IR katalog_domowy ]
-.br
-.RB [ -e
-.IR data_wa¿no¶ci ]
-.RB [ -f
-.IR dni_nieaktywno¶ci ]
-.br
-.RB [ -g
-.IR grupa_pocz±tkowa ]
-.RB [ -G
-.IR grupa [,...]]
-.br
-.RB [ -m " [" -k
-.IR katalog_wzorców ]]
-.RB [ -s
-.IR pow³oka ]
-.br
-.RB [ -u
-.IR uid " ["
-.BR -o ]]
-.I login
-.TP 8
-.B useradd
-\fB-D\fR
-[\fB-g\fI domy¶lna_grupa\fR]
-[\fB-b\fI katalog_bazowy\fR]
-.br
-[\fB-f\fI domy¶lne_dni_nieaktywno¶ci\fR]
-[\fB-e\fI domy¶lna_data_wa¿no¶ci\fR]
-.br
-[\fB-s\fI domy¶lna_pow³oka\fR]
-.SH OPIS
-.SS Tworzenie nowych u¿ytkowników
-Wywo³ane bez opcji \fB-D\fR, polecenie \fBuseradd\fR tworzy nowe konto
-u¿ytkownika pos³uguj±c siê warto¶ciami podanymi w wierszu poleceñ i domy¶lnymi
-warto¶ciami z systemu.
-W zale¿no¶ci od potrzeb i opcji wiersza poleceñ, do plików systemowych
-zostanie wprowadzone nowe konto u¿ytkownika, utworzony bêdzie jego katalog
-domowy, do którego przekopiowane zostan± pliki startowe.
-Polecenie \fBuseradd\fR posiada nastêpuj±ce opcje:
-.\" .IP "\fB-A {\fImetoda\fR|\fBDEFAULT\fR},..."
-.\" Okre¶la metodê autentykacji u¿ytkownika.
-.\" Metoda autentykacji jest nazw± programu odpowiedzialnego za weryfikacjê
-.\" to¿samo¶ci u¿ytkownika.
-.\" Mo¿e zostaæ u¿yty ³añcuch \fBDEFAULT\fR w celu zmiany metody autentykacji
-.\" u¿ytkownika na standardow± metodê has³a systemowego.
-.\" Argumentem tej opcji jest lista oddzielonych przecinkami nazw programów.
-.\" Mo¿e ona zawieraæ ³añcuch \fBDEFAULT\fR tylko jednokrotnie.
-.IP "\fB-c \fIkomentarz\fR"
-Pole komentarza dla zak³adanego u¿ytkownika w pliku hase³.
-.IP "\fB-d \fIkatalog_domowy\fR"
-Warto¶æ \fIkatalog_domowy\fR zostanie u¿yta do okre¶lenia katalogu logowania
-nowotworzonego u¿ytkownika.
-Domy¶lnie do \fIdomy¶lny_domowy\fR dodawana jest nazwa u¿ytkownika
-(\fIlogin\fR) tworz±c pe³n± nazwê katalogu logowania.
-.IP "\fB-e \fIdata_wa¿no¶ci\fR"
-Data, od której konto u¿ytkownika zostanie wy³±czone.
-Data podawana jest w formacie \fIMM/DD/YY\fR.
-.IP "\fB-f \fIdni_nieaktywno¶ci\fR"
-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.
-.IP "\fB-g \fIgrupa_pocz±tkowa\fR"
-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.
-.IP "\fB-G \fIgrupa,[...]\fR"
-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 \fB-g\fR.
-Domy¶lnie u¿ytkownik nale¿y tylko do grupy pocz±tkowej.
-.IP \fB-m\fR
-Je¶li nie istnieje katalog domowy u¿ytkownika, to zostanie on utworzony.
-Je¶li pos³u¿ono siê opcj± \fB-k\fR, to bêd± do niego przekopiowane wzorcowe
-pliki startowe zawarte w \fIkatalogu_wzorców\fR. W przeciwnym przypadku,
-zamiast nich zostan± u¿yte pliki zawarte w \fI/etc/skel\fR.
-W katalogu domowym u¿ytkownika zostan± równie¿ utworzone
-podkatalogi zawarte w \fIkatalogu_wzorców\fR lub \fI/etc/skel\fR.
-Opcja \fB-k\fR jest dozwolona tylko w po³±czeniu z opcj± \fB-m\fR.
-Domy¶lnym dzia³aniem jest nie tworzenie katalogu i nie kopiowanie
-jakichkolwiek plików.
-.IP "\fB-s \fIpow³oka\fR"
-Nazwa pow³oki (shell) u¿ytkownika. Ustawienie tego pola na puste
-powoduje, ¿e system wybierze domy¶ln± pow³okê logowania.
-.IP "\fB-u \fIuid\fR"
-Numeryczna warto¶æ identyfikatora u¿ytkownika (UID). Warto¶æ ta musi
-byæ niepowtarzalna, chyba, ¿e u¿yto opcji \fI-o\fR. Warto¶æ musi byæ nieujemna.
-Domy¶lnie u¿ywana jest tu najmniejsza warto¶æ identyfikatora wiêksza od 99
-i wiêksza od identyfikatorów pozosta³ych u¿ytkowników.
-Warto¶ci od 0 do 99 s± zwykle zarezerwowane dla kont systemowych.
-.SS Zmiana warto¶ci domy¶lnych
-Wywo³ane z opcj± \fB-D\fR, polecenie \fBuseradd\fR albo wy¶wietli bie¿±ce
-warto¶ci domy¶lne, albo zaaktualizuje domy¶lne warto¶ci z wiersza poleceñ.
-Dozwolonymi opcjami s±:
-.IP "\fB-b \fIkatalog_bazowy\fR"
-Pocz±tkowy przedrostek ¶cie¿ki dla katalogu domowego nowego u¿ytkownika.
-Je¶li przy tworzeniu nowego konta nie u¿yto opcji \fB-d\fR, to
-na koniec \fIkatalogu_bazowego\fR zostanie dodana nazwa u¿ytkownika, tworz±c
-now± nazwê katalogu.
-.IP "\fB-e \fIdomy¶lna_data_wa¿no¶ci\fR"
-Data, od której konto u¿ytkownika zostanie wy³±czone.
-.IP "\fB-f \fIdomy¶lne_dni_nieaktywno¶ci\fR"
-Liczba dni po wyga¶niêciu has³a do sta³ego wy³±czenia konta.
-.IP "\fB-g \fIdomy¶lna_grupa\fR"
-Nazwa lub numer pocz±tkowej grupy logowania u¿ytkownika. Nazwa grupy musi
-istnieæ. Numer grupy musi odnosiæ siê do ju¿ istniej±cej grupy.
-.IP "\fB-s \fIdomy¶lna_pow³oka\fR"
-Nazwa pow³oki (shell) dla nowych u¿ytkowników. Podany program bêdzie u¿yty
-dla wszystkich przysz³ych nowych kont u¿ytkowników.
-.PP
-Bez podania opcji \fBuseradd\fR wy¶wietla bie¿±ce ustawienia domy¶lne.
-.SH UWAGI
-Administrator systemu odpowiedzialny jest za umieszczenie domy¶lnych
-plików u¿ytkownika w katalogu \fI/etc/skel\fR.
-.SH OSTRZE¯ENIA
-Nie mo¿esz dodaæ u¿ytkownika do grupy NIS. Musi to zostaæ wykonane
-na serwerze NIS.
-.SH PLIKI
-.IR /etc/passwd " - informacja o kontach u¿ytkowników"
-.br
-.IR /etc/shadow " - bezpieczna informacja o kontach u¿ytkowników"
-.br
-.IR /etc/group " - informacja o grupach"
-.br
-.IR /etc/default/useradd " - ustawienia domy¶lne"
-.br
-.IR /etc/skel " - katalog plików domy¶lnych"
-.SH ZOBACZ TAK¯E
-.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 AUTOR
-Julianne Frances Haugh (jockgrrl@ix.netcom.com)
-.SH OD T£UMACZA
-Niniejsza dokumentacja opisuje polecenie wchodz±ce w sk³ad pakietu
-shadow-password.
+shadow.
 Istnieje wiele programów i skryptów do zarz±dzania kontami
 u¿ytkowników czy grup. Z uwagi na powtarzaj±ce siê nazwy poleceñ, upewnij
 siê, ¿e korzystasz z w³a¶ciwej dokumentacji.
index 5a10b1040f19faacefa947a5838ad0e8a141537c..7e90c8a8b4c205172f7e069a973402db1d0240e3 100644 (file)
@@ -1,4 +1,4 @@
-.\" $Id: userdel.8,v 1.5 2001/01/27 02:55:54 kloczek Exp $
+.\" $Id: userdel.8,v 1.7 2001/12/22 07:18:47 kloczek Exp $
 .\" {PTM/WK/0.1/VIII-1999}
 .\" Copyright 1991 - 1994, Julianne Frances Haugh
 .\" All rights reserved.
@@ -65,83 +65,7 @@ Musi to zosta
 .SH AUTOR
 Julianne Frances Haugh (jockgrrl@ix.netcom.com)
 .SH OD T£UMACZA
-Niniejsza dokumentacja opisuje polecenie wchodz±ce w sk³ad pakietu
-shadow-password.
-Istnieje wiele programów i skryptów do zarz±dzania kontami
-u¿ytkowników czy grup. Z uwagi na powtarzaj±ce siê nazwy poleceñ, upewnij
-siê, ¿e korzystasz z w³a¶ciwej dokumentacji.
-.\" {PTM/WK/0.1/VIII-1999}
-.\" 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: userdel.8,v 1.5 2001/01/27 02:55:54 kloczek Exp $
-.\"
-.TH USERDEL 8
-.SH NAZWA
-userdel \- usuñ konto u¿ytkownika i powi±zane pliki
-.SH SK£ADNIA
-.B userdel
-.RB [ -r ]
-.I login
-.SH OPIS
-Polecenie \fBuserdel\fR zmienia systemowe pliki kont, usuwaj±c wszystkie
-zapisy odnosz±ce siê do \fIlogin\fR.
-Podany u¿ytkownik musi istnieæ.
-.TP
-.B -r
-Zostan± usuniête zarówno pliki w katalogu domowym u¿ytkownika jak
-i sam ten katalog.
-Pliki po³o¿one w innym systemie plików musz± byæ odszukane i usuniête rêcznie.
-.SH PLIKI
-.IR /etc/passwd " - informacja o kontach u¿ytkowników"
-.br
-.IR /etc/shadow " - bezpieczna informacja o kontach u¿ytkowników"
-.br
-.IR /etc/group "  - informacja o grupach"
-.SH PRZESTROGI
-\fBuserdel\fR nie pozwoli na usuniêcie konta aktualnie zalogowanego
-u¿ytkownika. Musisz usun±æ wszystkie uruchomione procesy nale¿±ce
-do usuwanego konta. 
-Nie mo¿esz usun±æ ¿adnych atrybutów NIS klienta NIS.
-Musi to zostaæ wykonane na serwerze NIS.
-.SH ZOBACZ TAK¯E
-.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 AUTOR
-Julianne Frances Haugh (jockgrrl@ix.netcom.com)
-.SH OD T£UMACZA
-Niniejsza dokumentacja opisuje polecenie wchodz±ce w sk³ad pakietu
-shadow-password.
-Istnieje wiele programów i skryptów do zarz±dzania kontami
-u¿ytkowników czy grup. Z uwagi na powtarzaj±ce siê nazwy poleceñ, upewnij
-siê, ¿e korzystasz z w³a¶ciwej dokumentacji.
+Niniejsza dokumentacja opisuje polecenie wchodz±ce w sk³ad pakietu shadow.
+Istnieje wiele programów i skryptów do zarz±dzania kontami u¿ytkowników czy
+grup. Z uwagi na powtarzaj±ce siê nazwy poleceñ, upewnij siê, ¿e korzystasz
+z w³a¶ciwej dokumentacji.
index 7cb32d963ad0112d2c9dfb719739230160c7f3bc..4f0d2e1e8106bf45b9dd65013b1d1e1efae10a7c 100644 (file)
@@ -1,4 +1,4 @@
-.\" $Id: usermod.8,v 1.4 2001/01/25 10:43:54 kloczek Exp $
+.\" $Id: usermod.8,v 1.6 2001/12/22 07:18:48 kloczek Exp $
 .\" {PTM/WK/0.1/VIII-1999}
 .\" Copyright 1991 - 1994, Julianne Frances Haugh
 .\" All rights reserved.
@@ -136,151 +136,7 @@ Jakiekolwiek zmiany dotycz
 .SH AUTOR
 Julianne Frances Haugh (jockgrrl@ix.netcom.com)
 .SH OD T£UMACZA
-Niniejsza dokumentacja opisuje polecenie wchodz±ce w sk³ad pakietu
-shadow-password.
-Istnieje wiele programów i skryptów do zarz±dzania kontami
-u¿ytkowników czy grup. Z uwagi na powtarzaj±ce siê nazwy poleceñ, upewnij
-siê, ¿e korzystasz z w³a¶ciwej dokumentacji.
-.\" {PTM/WK/0.1/VIII-1999}
-.\" 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: usermod.8,v 1.4 2001/01/25 10:43:54 kloczek Exp $
-.\"
-.TH USERMOD 8
-.SH NAZWA
-usermod \- zmiana danych konta u¿ytkownika
-.SH SK£ADNIA
-.TP 8
-.B usermod
-.\" .RB [ -A
-.\" .RI { metoda | \fBDEFAULT\fR "},... ]"
-.RB [ -c
-.IR komentarz ]
-.RB [ -d
-.IR katalog_domowy " ["
-.BR -m ]]
-.br
-.RB [ -e
-.IR data_wa¿no¶ci ]
-.RB [ -f
-.IR dni_nieaktywno¶ci ]
-.br
-.RB [ -g
-.IR grupa_pocz±tkowa ]
-.RB [ -G
-.IR grupa [,...]]
-.br
-.RB [ -l
-.IR login_name ]
-.RB [ -s
-.IR pow³oka ]
-.br
-.RB [ -u
-.IR uid " ["
-.BR -o ]]
-.I login
-.SH OPIS
-Polecenie \fBusermod\fR zmienia systemowe pliki kont, odzwierciedlaj±c zmiany
-podane w wierszu poleceñ. Posiada ono nastêpuj±ce opcje:
-.\" .IP "\fB-A \fImetoda\fR|\fBDEFAULT\fR"
-.\" Nowa warto¶æ metody uwierzytelniania u¿ytkownika. Metoda uwierzytelniania
-.\" jest nazw± programu odpowiedzialnego za weryfikacjê to¿samo¶ci u¿ytkownika.
-.\" Mo¿e zostaæ u¿yty ³añcuch \fBDEFAULT\fR w celu zmiany metody autentykacji
-.\" u¿ytkownika na standardow± metodê has³a systemowego.
-.IP "\fB-c \fIkomentarz\fR"
-Nowa warto¶æ pola komentarza dla danego u¿ytkownika w pliku hase³.
-Zwykle jest zmieniana przy pomocy narzêdzia \fBchfn\fR(1).
-.IP "\fB-d \fIkatalog_domowy\fR"
-Nowy katalog logowania u¿ytkownika. Je¿eli podano opcjê \fB-m\fR, to zawarto¶æ
-aktualnego katalogu domowego zostanie przesuniêta do nowego katalogu. Nowy
-katalog domowy jest tworzony je¶li nie istnieje.
-.IP "\fB-e \fIdata_wa¿no¶ci\fR"
-Data, od której konto danego u¿ytkownika zostanie wy³±czone.
-Data podawana jest w formacie \fIMM/DD/YY\fR.
-.IP "\fB-f \fIdni_nieaktywno¶ci\fR"
-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.
-.IP "\fB-g \fIgrupa_pocz±tkowa\fR"
-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.
-.IP "\fB-G \fIgrupa,[...]\fR"
-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 \fB-g\fR.
-Je¿eli u¿ytkownik jest obecnie cz³onkiem grupy, której nie podano na li¶cie,
-to zostanie z niej usuniêty.
-.IP "\fB-l \fIlogin_name\fR"
-Nazwa u¿ytkownika zostanie zmieniona z \fIlogin\fR na \fIlogin_name\fR.
-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.
-.IP "\fB-s \fIpow³oka\fR"
-Nazwa nowej pow³oki (shell) u¿ytkownika. Ustawienie tego pola na puste
-powoduje, ¿e system wybierze domy¶ln± pow³okê zg³oszeniowej.
-.IP "\fB-u \fIuid\fR"
-Numeryczna warto¶æ identyfikatora u¿ytkownika (user's ID). Warto¶æ ta musi
-byæ niepowtarzalna, chyba, ¿e u¿yto opcji \fI-o\fR. Warto¶æ musi byæ nieujemna.
-Warto¶ci od 0 do 99 s± zwykle zarezerwowane dla kont systemowych.
-Wszystkim plikom posiadanym przez u¿ytkownika, a po³o¿onym w drzewie katalogowym
-rozpoczynaj±cym siê od jego katalogu domowego zostanie automatycznie zmieniony
-identyfikator u¿ytkownika pliku.
-Pliki poza katalogiem domowym u¿ytkownika musz± zostaæ zmienione rêcznie.
-.SH OSTRZE¯ENIA
-\fBusermod\fR nie pozwoli 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¶ciciela plików crontab musisz zmieniæ rêcznie.
-W³a¶ciciela zadañ at musisz zmieniæ rêcznie.
-Jakiekolwiek zmiany dotycz±ce NIS musisz wykonaæ na serwerze NIS.
-.SH PLIKI
-.IR /etc/passwd " - informacja o kontach u¿ytkowników"
-.br
-.IR /etc/shadow " - bezpieczna informacja o kontach u¿ytkowników"
-.br
-.IR /etc/group "  - informacja o grupach"
-.SH ZOBACZ TAK¯E
-.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 AUTOR
-Julianne Frances Haugh (jockgrrl@ix.netcom.com)
-.SH OD T£UMACZA
-Niniejsza dokumentacja opisuje polecenie wchodz±ce w sk³ad pakietu
-shadow-password.
-Istnieje wiele programów i skryptów do zarz±dzania kontami
-u¿ytkowników czy grup. Z uwagi na powtarzaj±ce siê nazwy poleceñ, upewnij
-siê, ¿e korzystasz z w³a¶ciwej dokumentacji.
+Niniejsza dokumentacja opisuje polecenie wchodz±ce w sk³ad pakietu shadow.
+Istnieje wiele programów i skryptów do zarz±dzania kontami u¿ytkowników czy
+grup. Z uwagi na powtarzaj±ce siê nazwy poleceñ, upewnij siê, ¿e korzystasz
+z w³a¶ciwej dokumentacji.
diff --git a/man/pl/vigr.8 b/man/pl/vigr.8
new file mode 100644 (file)
index 0000000..f0f503c
--- /dev/null
@@ -0,0 +1 @@
+.so vipw.8
index 689efa34e8c62648c45958e1d26b2f2837b9b8db..33fdf6178e0db1c26d87ada9e1386cc122a716d0 100644 (file)
@@ -1,4 +1,4 @@
-.\" $Id: vipw.8,v 1.4 2001/01/27 02:55:54 kloczek Exp $
+.\" $Id: vipw.8,v 1.5 2001/12/22 03:28:52 kloczek Exp $
 .\" {PTM\WK\1999-09-14}
 .TH VIPW 8 "26 wrze¶nia 1997"
 .SH NAZWA
@@ -31,34 +31,3 @@ a na ko
 .BR group (5),
 .BR shadow (5)
 .\" {PTM\WK\1999-09-14}
-.\" $Id: vipw.8,v 1.4 2001/01/27 02:55:54 kloczek Exp $
-.TH VIPW 8 "26 wrze¶nia 1997"
-.SH NAZWA
-vipw, vigr - edycja plików hase³, grup i ich wersji dodatkowych (shadow)
-.SH SK£ADNIA
-.BR vipw " [-s]"
-.br
-.BR vigr " [-s]"
-.SH OPIS
-.BR vipw " i " vigr
-umo¿liwiaj± modyfikacjê plików odpowiednio
-.IR /etc/passwd " i " /etc/group .
-Przy zastosowaniu flagi
-.BR -s,
-modyfikuj± tak¿e dodatkowe wersje chronione (shadow) tych plików - odpowiednio
-.IR /etc/shadow " i " /etc/gshadow " .
-Dla ochrony przed uszkodzeniem plików programy te ustawiaj± odpowiednie
-blokady.
-
-Szukaj±c edytora, programy
-.BR vipw " i " vigr
-u¿ywaj± w pierwszej kolejno¶ci zmiennej ¶rodowiskowej
-.BR VISUAL ,
-nastêpnie zmiennej
-.BR EDITOR ,
-a na koñcu domy¶lnego edytora,
-.BR vi .
-.SH ZOBACZ TAK¯E
-.BR passwd (5),
-.BR group (5),
-.BR shadow (5)
diff --git a/man/sg.1 b/man/sg.1
new file mode 100644 (file)
index 0000000..31be744
--- /dev/null
+++ b/man/sg.1
@@ -0,0 +1 @@
+.so newgrp.1
index 2100b3568345d8c7d1090480dd0c749e414b795c..ccf70c6708ce7d5345cc5b5ac10a8c7f781c9af9 100644 (file)
@@ -1,4 +1,4 @@
-.\"$Id: useradd.8,v 1.10 2001/01/27 02:55:52 kloczek Exp $
+.\"$Id: useradd.8,v 1.12 2001/12/22 08:03:36 kloczek Exp $
 .\" Copyright 1991 - 1994, Julianne Frances Haugh
 .\" All rights reserved.
 .\"
@@ -36,13 +36,13 @@ useradd \- Create a new user or update default new user information
 .br
 [\fB-g\fR \fIinitial_group\fR] [\fB-G\fR \fIgroup\fR[,...]]
 .br
-[\fB-m\fR [\fB-k\fR \fIskeleton_dir\fR]] [\fB-p\fR \fIpasswd\fR]
+[\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 [\fB-o\fR]] \fIlogin\fR
+[\fB-s\fR \fIshell\fR] [\fB-u\fR \fIuid\fR] \fIlogin\fR
 .TP 8
 \fBuseradd\fR \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]
+[\fB-e\fI default_expire_date\fR] [\fB-f\fI default_inactive\fR]
 .br
 [\fB-s\fI default_shell\fR]
 .SH DESCRIPTION
@@ -94,6 +94,8 @@ The \fB-k\fR option is only valid in conjunction with the \fB-m\fR
 option.
 The default is to not create the directory and to not copy any
 files.
+.IP "\fB-o\fR"
+Allow create user with duplicate (non-unique) UID.
 .IP "\fB-p \fIpasswd\fR"
 The encrypted password, as returned by \fBcrypt\fR(3).
 The default is to disable the account.
diff --git a/man/vigr.8 b/man/vigr.8
new file mode 100644 (file)
index 0000000..f0f503c
--- /dev/null
@@ -0,0 +1 @@
+.so vipw.8
index bb644d717dc7b8fe62d6106e9d2ea08c2ae68527..0dfb4b81e53c6a442dc77919450afba92435d107 100644 (file)
@@ -1,24 +1,8 @@
-2001-10-06  gettextize  <bug-gnu-utils@gnu.org>
+2002-01-06  gettextize  <bug-gnu-utils@gnu.org>
 
-       * Makefile.in.in: Upgrade to gettext-0.10.38.
+       * Makefile.in.in: Upgrade to gettext-0.10.40.
 
-2001-10-06  gettextize  <bug-gnu-utils@gnu.org>
+2002-01-06  gettextize  <bug-gnu-utils@gnu.org>
 
-       * Makefile.in.in: Upgrade to gettext-0.10.38.
-
-2001-09-10  gettextize  <bug-gnu-utils@gnu.org>
-
-       * Makefile.in.in: Upgrade to gettext-0.10.38.
-
-2001-09-08  gettextize  <bug-gnu-utils@gnu.org>
-
-       * Makefile.in.in: Upgrade to gettext-0.10.38.
-
-2001-09-08  gettextize  <bug-gnu-utils@gnu.org>
-
-       * Makefile.in.in: Upgrade to gettext-0.10.38.
-
-2001-09-07  gettextize  <bug-gnu-utils@gnu.org>
-
-       * Makefile.in.in: Upgrade to gettext-0.10.38.
+       * Makefile.in.in: Upgrade to gettext-0.10.40.
 
index 78f03d4ab09ce094f8040eec6e84c1ac7fd97106..81ad562f080cf07c21ee05d962fbe7d510501081 100644 (file)
Binary files a/po/cs.gmo and b/po/cs.gmo differ
index 2b9d83b4fd7f9751411d1cf6534cb47b71fc1c3b..c36de01f04d56bdaa4c8cc158a7164e273f1d9a1 100644 (file)
--- a/po/cs.po
+++ b/po/cs.po
@@ -4,7 +4,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: shadow-utils-20000902\n"
-"POT-Creation-Date: 2001-09-08 07:36+0200\n"
+"POT-Creation-Date: 2002-01-06 16:13+0100\n"
 "PO-Revision-Date: 2000-09-23 19:58+0200\n"
 "Last-Translator: Jiøí Pavlovský <pavlovsk@ff.cuni.cz>\n"
 "Language-Team: Czech <cs@li.org>\n"
@@ -21,36 +21,36 @@ msgstr "Varov
 msgid "Warning: too many groups\n"
 msgstr "Varování: pøíli¹ mnoho skupin\n"
 
-#: libmisc/age.c:104
+#: libmisc/age.c:77
 msgid "Your password has expired."
 msgstr "Platnost va¹eho hesla vypr¹ela."
 
-#: libmisc/age.c:107
+#: libmisc/age.c:80
 msgid "Your password is inactive."
 msgstr "Va¹e heslo je vypnuto."
 
-#: libmisc/age.c:110
+#: libmisc/age.c:83
 msgid "Your login has expired."
 msgstr "Platnost va¹eho úètu vypr¹ela."
 
-#: libmisc/age.c:127
+#: libmisc/age.c:96
 msgid "  Contact the system administrator.\n"
 msgstr "  Kontaktujte správce systému.\n"
 
-#: libmisc/age.c:130
+#: libmisc/age.c:99
 msgid "  Choose a new password.\n"
 msgstr "  Zvolte nové heslo.\n"
 
-#: libmisc/age.c:228
+#: libmisc/age.c:176
 #, c-format
 msgid "Your password will expire in %ld days.\n"
 msgstr "Platnost va¹eho heslo vypr¹í za %ld dnù.\n"
 
-#: libmisc/age.c:230
+#: libmisc/age.c:178
 msgid "Your password will expire tomorrow.\n"
 msgstr "Platnost va¹eho heslo vypr¹í zítra.\n"
 
-#: libmisc/age.c:232
+#: libmisc/age.c:180
 msgid "Your password will expire today.\n"
 msgstr "Platnost va¹eho heslo vypr¹í dnes.\n"
 
@@ -107,7 +107,7 @@ msgstr "Nem
 msgid "You have mail."
 msgstr "Máte po¹tu."
 
-#: libmisc/obscure.c:281 src/passwd.c:309
+#: libmisc/obscure.c:281 src/passwd.c:244
 #, c-format
 msgid "Bad password: %s.  "
 msgstr "Heslo %s je chybné. "
@@ -122,12 +122,12 @@ msgstr "passwd: vol
 msgid "passwd: %s\n"
 msgstr "passwd: %s\n"
 
-#: libmisc/setupenv.c:205
+#: libmisc/setupenv.c:211
 #, c-format
 msgid "Unable to cd to \"%s\"\n"
 msgstr "Nelze nastavit aktuální adresáø na \"%s\".\n"
 
-#: libmisc/setupenv.c:213
+#: libmisc/setupenv.c:219
 msgid "No directory, logging in with HOME=/"
 msgstr "®ádný adresáø, nastavuji HOME na /"
 
@@ -177,25 +177,25 @@ msgstr "vol
 msgid "Dialup Password: "
 msgstr "Heslo pro pøístup vytáèenou linkou:"
 
-#: lib/getdef.c:253
+#: lib/getdef.c:276
 msgid "Could not allocate space for config info.\n"
 msgstr "Nemohu alokovat dostatek místa pro konfiguraèní údaje.\n"
 
 #.
 #. * Item was never found.
 #.
-#: lib/getdef.c:307
+#: lib/getdef.c:330
 #, c-format
 msgid "configuration error - unknown item '%s' (notify administrator)\n"
 msgstr ""
 "konfiguraèní chyba - neznámý pøedmìt '%s' (informujte správce systému)\n"
 
-#: lib/getdef.c:394
+#: lib/getdef.c:417
 #, c-format
 msgid "error - lookup '%s' failed\n"
 msgstr "chyba - hledání '%s' bylo neúspì¹né\n"
 
-#: lib/getdef.c:402
+#: lib/getdef.c:425
 #, c-format
 msgid "%s not found\n"
 msgstr "%s nenalezeno\n"
@@ -204,7 +204,7 @@ msgstr "%s nenalezeno\n"
 #. * get the password from her, and set the salt for
 #. * the decryption from the group file.
 #.
-#: lib/pwauth.c:54 src/newgrp.c:305
+#: lib/pwauth.c:54 src/newgrp.c:348
 msgid "Password: "
 msgstr "Heslo: "
 
@@ -222,111 +222,107 @@ msgstr "(Echo zapnuto)"
 msgid "Unknown error %d"
 msgstr "Neznámá chyba %d"
 
-#: src/chage.c:162
+#: src/chage.c:116
 #, c-format
 msgid ""
-"Usage: %s [ -l ] [ -m min_days ] [ -M max_days ] [ -W warn ]\n"
-"  [ -I inactive ] [ -E expire ] [ -d last_day ] user\n"
+"Usage: %s [-l] [-m min_days] [-M max_days] [-W warn]\n"
+"\t[-I inactive] [-E expire] [-d last_day] user\n"
 msgstr ""
-"Pou¾ití: %s [ -l ] [ -m min_dnù ] [ -M max_dnù ] [ -W varování ]\n"
-"  [ -I vypnutí ] [ -E vypr¹ení ] [ -d poslední den ] u¾ivatel\n"
+"Pou¾ití: %s [-l] [-m min_dnù] [-M max_dnù] [-W varování]\n"
+"\t[-I vypnutí] [-E vypr¹ení] [-d poslední den] u¾ivatel\n"
 
-#: src/chage.c:164
+#: src/chage.c:122
 #, c-format
-msgid "Usage: %s [ -l ] [ -m min_days ] [ -M max_days ] [ -d last_day ] user\n"
+msgid "Usage: %s [-l] [-m min_days] [-M max_days] [-d last_day] user\n"
 msgstr ""
-"Pou¾ití: %s [ -l ] [ -m min_dnù ] [ -M max_dnù ] [ -d poslední den ] "
-"u¾ivatel\n"
+"Pou¾ití: %s [-l] [-m min_dnù] [-M max_dnù] [-d poslední den] u¾ivatel\n"
 
-#: src/chage.c:199
+#: src/chage.c:157
+#, fuzzy
 msgid ""
-"Enter the new value, or press return for the default\n"
+"Enter the new value, or press ENTER for the default\n"
 "\n"
 msgstr ""
-"Zadejte novou hodnotu, nebo stisknìte return pro pou¾ití implicitní hodnoty\n"
-"\n"
+"Zadejte novou hodnotu, nebo stisknìte ENTER pro pou¾ití implicitní hodnoty\n"
 
-#: src/chage.c:202
+#: src/chage.c:160
 msgid "Minimum Password Age"
 msgstr "Minimální stáøí hesla"
 
-#: src/chage.c:207
+#: src/chage.c:166
 msgid "Maximum Password Age"
 msgstr "maximální stáøí hesla"
 
-#: src/chage.c:213
+#: src/chage.c:174
 msgid "Last Password Change (YYYY-MM-DD)"
 msgstr "Poslední zmìna hesla (YYYY-MM-DD)"
 
-#: src/chage.c:222
+#: src/chage.c:183
 msgid "Password Expiration Warning"
 msgstr "Varování o vypr¹ení platnosti hesla"
 
-#: src/chage.c:227
+#: src/chage.c:189
 msgid "Password Inactive"
 msgstr "Vypnuté heslo"
 
-#: src/chage.c:233
+#: src/chage.c:197
 msgid "Account Expiration Date (YYYY-MM-DD)"
 msgstr "Vypr¹ení platnosti úètu (YYYY-MM-DD)"
 
 #.
 #. * 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.
+#. * 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.
 #.
-#: src/chage.c:287
+#: src/chage.c:248
 #, c-format
 msgid "Minimum:\t%ld\n"
 msgstr "Minimum:\t%ld\n"
 
-#: src/chage.c:288
+#: src/chage.c:249
 #, c-format
 msgid "Maximum:\t%ld\n"
 msgstr "Maximum:\t%ld\n"
 
-#: src/chage.c:290
+#: src/chage.c:251
 #, c-format
 msgid "Warning:\t%ld\n"
 msgstr "Varování:\t%ld\n"
 
-#: src/chage.c:291
+#: src/chage.c:252
 #, c-format
 msgid "Inactive:\t%ld\n"
 msgstr "Vypnutí:\t%ld\n"
 
 #.
-#. * 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.
+#. * 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.
 #.
-#: src/chage.c:300
+#: src/chage.c:260
 msgid "Last Change:\t\t"
 msgstr "Poslední zmìna:\t\t"
 
-#: src/chage.c:302 src/chage.c:316 src/chage.c:333 src/chage.c:346
+#: src/chage.c:262 src/chage.c:276 src/chage.c:293 src/chage.c:306
 msgid "Never\n"
 msgstr "Nikdy\n"
 
 #.
-#. * The password expiration date is determined from the last
-#. * change date plus the number of days the password is valid
-#. * for.
+#. * The password expiration date is determined from the last change
+#. * date plus the number of days the password is valid for.
 #.
-#: src/chage.c:314
+#: src/chage.c:273
 msgid "Password Expires:\t"
 msgstr "Platnost hesla vypr¹í:\t"
 
 #.
-#. * 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.
+#. * 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.
 #.
-#: src/chage.c:330
+#: src/chage.c:290
 msgid "Password Inactive:\t"
 msgstr "Vypnuté heslo:\t"
 
@@ -334,584 +330,584 @@ msgstr "Vypnut
 #. * The account will expire on the given date regardless of the
 #. * password expiring or not.
 #.
-#: src/chage.c:344
+#: src/chage.c:304
 msgid "Account Expires:\t"
 msgstr "Platnost hesla vypr¹í:\t"
 
-#: src/chage.c:453 src/chpasswd.c:139 src/groupadd.c:536 src/groupdel.c:322
-#: src/groupmod.c:522 src/newusers.c:389 src/useradd.c:1721 src/userdel.c:738
-#: src/usermod.c:1687
-#, fuzzy, c-format
-msgid "%s: PAM authentication failed\n"
-msgstr "%s: chyba pøi vytváøení ovìøovací metody\n"
-
-#: src/chage.c:536
+#: src/chage.c:468
 #, c-format
 msgid "%s: do not include \"l\" with other flags\n"
 msgstr "%s: nepou¾ívejte \"l\" s ostatními pøíznaky\n"
 
-#: src/chage.c:548 src/chage.c:660 src/login.c:532
+#: src/chage.c:481 src/chage.c:652 src/login.c:516
 #, c-format
 msgid "%s: permission denied\n"
 msgstr "%s: pøístup odmítnut\n"
 
-#: src/chage.c:560 src/chpasswd.c:157
+#: src/chage.c:512 src/chpasswd.c:139 src/groupadd.c:529 src/groupdel.c:322
+#: src/groupmod.c:520 src/newusers.c:381 src/useradd.c:1754 src/userdel.c:717
+#: src/usermod.c:1732
+#, fuzzy, c-format
+msgid "%s: PAM authentication failed\n"
+msgstr "%s: chyba pøi vytváøení ovìøovací metody\n"
+
+#: src/chage.c:533 src/chpasswd.c:157
 #, c-format
 msgid "%s: can't lock password file\n"
 msgstr "%s: soubor s hesly nelze zamknout\n"
 
-#: src/chage.c:566 src/chpasswd.c:161
+#: src/chage.c:544 src/chpasswd.c:162
 #, c-format
 msgid "%s: can't open password file\n"
 msgstr "%s: soubor s hesly nelze otevøít\n"
 
-#: src/chage.c:573
+#: src/chage.c:552
 #, c-format
 msgid "%s: unknown user: %s\n"
 msgstr "%s: u¾ivatel %s je neznámý\n"
 
-#: src/chage.c:592
-#, c-format
-msgid "%s: can't lock shadow password file\n"
+#: src/chage.c:571
+#, fuzzy, c-format
+msgid "%s: can't lock shadow password file"
 msgstr "%s: soubor se stínovými hesly nelze zamknout\n"
 
-#: src/chage.c:599
-#, c-format
-msgid "%s: can't open shadow password file\n"
+#: src/chage.c:579
+#, fuzzy, c-format
+msgid "%s: can't open shadow password file"
 msgstr "%s: soubor se stínovými hesly nelze otevøít\n"
 
-#: src/chage.c:681
+#: src/chage.c:674
 #, c-format
 msgid "Changing the aging information for %s\n"
 msgstr "Mìním informace o u¾ivateli %s.\n"
 
-#: src/chage.c:683
+#: src/chage.c:677
 #, c-format
 msgid "%s: error changing fields\n"
 msgstr "%s: chyba pøi zmìnì polo¾ek\n"
 
-#: src/chage.c:710 src/chage.c:773 src/pwunconv.c:174
+#: src/chage.c:705 src/chage.c:771 src/pwunconv.c:174
 #, c-format
 msgid "%s: can't update password file\n"
 msgstr "%s: soubor s hesly nelze aktualizovat\n"
 
-#: src/chage.c:740 src/pwunconv.c:169
+#: src/chage.c:737 src/pwunconv.c:168
 #, c-format
 msgid "%s: can't update shadow password file\n"
 msgstr "%s: soubor se stínovými hesly nelze aktualizovat\n"
 
-#: src/chage.c:789 src/chage.c:804 src/chfn.c:570 src/chsh.c:409
-#: src/passwd.c:825 src/passwd.c:926
+#: src/chage.c:789 src/chage.c:805 src/chfn.c:570 src/chsh.c:382
+#: src/passwd.c:747 src/passwd.c:859
 msgid "Error updating the DBM password entry.\n"
 msgstr "Chyba pøi aktualizaci DBM databáze hesel.\n"
 
-#: src/chage.c:821
+#: src/chage.c:823
 #, c-format
 msgid "%s: can't rewrite shadow password file\n"
 msgstr "%s: soubor se stínovými hesly nelze pøepsat\n"
 
-#: src/chage.c:835
+#: src/chage.c:838
 #, c-format
 msgid "%s: can't rewrite password file\n"
 msgstr "%s: soubor s hesly nelze pøepsat\n"
 
-#: src/chage.c:853 src/chpasswd.c:333 src/groupadd.c:595 src/groupdel.c:409
-#: src/groupmod.c:606 src/newusers.c:625 src/useradd.c:1830 src/userdel.c:903
-#: src/usermod.c:1765
+#: src/chage.c:857 src/chpasswd.c:343 src/groupadd.c:590 src/groupdel.c:409
+#: src/groupmod.c:604 src/newusers.c:628 src/useradd.c:1869 src/userdel.c:849
+#: src/usermod.c:1811
 #, fuzzy, c-format
 msgid "%s: PAM chauthtok failed\n"
 msgstr "%s: nelze odemknout soubor\n"
 
-#: src/chage.c:905
-#, c-format
-msgid "%s: no aging information present\n"
-msgstr "%s: chybí informace\n"
-
-#: src/chfn.c:107
+#: src/chfn.c:83
 #, c-format
 msgid ""
-"Usage: %s [ -f full_name ] [ -r room_no ] [ -w work_ph ]\n"
-"\t[ -h home_ph ] [ -o other ] [ user ]\n"
+"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"
-"            [ -h telefon domù ] [ -o ostatní ] [ u¾ivatel ]\n"
+"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"
 
-#: src/chfn.c:111
+#: src/chfn.c:88
 #, c-format
-msgid ""
-"Usage: %s [ -f full_name ] [ -r room_no ] [ -w work_ph ] [ -h home_ph ]\n"
+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"
-"            [ -h telefon domù ]\n"
+"Pou¾ití: %s [-f jméno] [-r èíslo místnosti] [-w telefon do zamìstnání]\n"
+"\t[-h telefon domù]\n"
 
-#: src/chfn.c:163 src/chsh.c:119
-msgid "Enter the new value, or press return for the default\n"
+#: src/chfn.c:139
+#, fuzzy
+msgid "Enter the new value, or press ENTER for the default\n"
 msgstr ""
-"Zadejte novou hodnotu, nebo stisknìte return pro pou¾ití implicitní hodnoty\n"
+"Zadejte novou hodnotu, nebo stisknìte ENTER pro pou¾ití implicitní hodnoty\n"
+"\n"
 
-#: src/chfn.c:166
+#: src/chfn.c:142
 msgid "Full Name"
 msgstr "Celé jméno"
 
-#: src/chfn.c:168
+#: src/chfn.c:144
 #, c-format
 msgid "\tFull Name: %s\n"
 msgstr "\tCelé jméno: %s\n"
 
-#: src/chfn.c:171
+#: src/chfn.c:147
 msgid "Room Number"
 msgstr "Èíslo místnosti"
 
-#: src/chfn.c:173
+#: src/chfn.c:149
 #, c-format
 msgid "\tRoom Number: %s\n"
 msgstr "\tÈíslo místnosti: %s\n"
 
-#: src/chfn.c:176
+#: src/chfn.c:152
 msgid "Work Phone"
 msgstr "Telefon do zamìstnání"
 
-#: src/chfn.c:178
+#: src/chfn.c:154
 #, c-format
 msgid "\tWork Phone: %s\n"
 msgstr "\tTelefon do zamìstnání: %s\n"
 
-#: src/chfn.c:181
+#: src/chfn.c:157
 msgid "Home Phone"
 msgstr "Telefon domù"
 
-#: src/chfn.c:183
+#: src/chfn.c:159
 #, c-format
 msgid "\tHome Phone: %s\n"
 msgstr "\tTelefon domù: %s\n"
 
-#: src/chfn.c:186
+#: src/chfn.c:162
 msgid "Other"
 msgstr "Ostatní"
 
-#: src/chfn.c:298 src/chfn.c:306 src/chfn.c:314 src/chfn.c:322 src/chfn.c:330
-#: src/chfn.c:391 src/passwd.c:1226
+#: src/chfn.c:271 src/chfn.c:281 src/chfn.c:291 src/chfn.c:301 src/chfn.c:311
+#: src/chfn.c:379 src/passwd.c:1115
 #, c-format
 msgid "%s: Permission denied.\n"
 msgstr "%s: pøístup odmítnut\n"
 
-#: src/chfn.c:351 src/chsh.c:224 src/passwd.c:1277
+#: src/chfn.c:332 src/chsh.c:190 src/passwd.c:1165
 #, c-format
 msgid "%s: Unknown user %s\n"
 msgstr "%s: u¾ivatel %s je neznámý\n"
 
-#: src/chfn.c:357 src/chsh.c:232 src/passwd.c:1207
+#: src/chfn.c:341 src/chsh.c:198 src/passwd.c:1096
 #, c-format
 msgid "%s: Cannot determine your user name.\n"
 msgstr "%s: va¹e u¾ivatelské jméno nelze zjistit\n"
 
-#: src/chfn.c:373 src/chsh.c:250
+#: src/chfn.c:358 src/chsh.c:215
 #, c-format
 msgid "%s: cannot change user `%s' on NIS client.\n"
 msgstr "%s: u¾ivatele `%s' nelze na NIS klientu zmìnit\n"
 
-#: src/chfn.c:378 src/chsh.c:257
+#: src/chfn.c:366 src/chsh.c:223
 #, 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"
 
-#: src/chfn.c:453
+#: src/chfn.c:441
 #, c-format
 msgid "Changing the user information for %s\n"
 msgstr "Mìním informace o u¾ivateli %s\n"
 
-#: src/chfn.c:462
+#: src/chfn.c:450
 #, c-format
 msgid "%s: invalid name: \"%s\"\n"
 msgstr "%s: jméno (\"%s\") je chybné\n"
 
-#: src/chfn.c:467
+#: src/chfn.c:456
 #, c-format
 msgid "%s: invalid room number: \"%s\"\n"
 msgstr "%s: èíslo místnosti (\"%s\") je chybné\n"
 
-#: src/chfn.c:472
+#: src/chfn.c:462
 #, c-format
 msgid "%s: invalid work phone: \"%s\"\n"
 msgstr "%s: telefonní èíslo do zamìstnání (\"%s\") je chybné\n"
 
-#: src/chfn.c:477
+#: src/chfn.c:468
 #, c-format
 msgid "%s: invalid home phone: \"%s\"\n"
 msgstr "%s: telefonní èíslo domù (\"%s\") je chybné\n"
 
-#: src/chfn.c:482
+#: src/chfn.c:475
 #, c-format
 msgid "%s: \"%s\" contains illegal characters\n"
 msgstr "%s: \"%s\" obsahuje chybné znaky\n"
 
-#: src/chfn.c:494
+#: src/chfn.c:488
 #, c-format
 msgid "%s: fields too long\n"
 msgstr "%s: polo¾ka je pøíli¹ dlouhá\n"
 
-#: src/chfn.c:509 src/chsh.c:347 src/gpasswd.c:582 src/passwd.c:1388
+#: src/chfn.c:504 src/chsh.c:316 src/gpasswd.c:570 src/passwd.c:1277
 msgid "Cannot change ID to root.\n"
 msgstr "Nelze zmìnit ID na root.\n"
 
-#: src/chfn.c:522 src/chsh.c:361 src/passwd.c:735 src/passwd.c:880
+#: src/chfn.c:519 src/chsh.c:331 src/passwd.c:656 src/passwd.c:811
 msgid "Cannot lock the password file; try again later.\n"
 msgstr "Nelze zamknout soubor s hesly; zkuste to pozdìji.\n"
 
-#: src/chfn.c:528 src/chsh.c:367 src/passwd.c:740 src/passwd.c:885
+#: src/chfn.c:525 src/chsh.c:337 src/passwd.c:661 src/passwd.c:816
 msgid "Cannot open the password file.\n"
 msgstr "Soubor s hesly nelze otevøít.\n"
 
-#: src/chfn.c:545 src/chsh.c:382 src/passwd.c:746 src/usermod.c:1320
+#: src/chfn.c:542 src/chsh.c:352 src/passwd.c:667 src/usermod.c:1348
 #, c-format
 msgid "%s: %s not found in /etc/passwd\n"
 msgstr "%s: %s se v /etc/passwd nenalézá\n"
 
-#: src/chfn.c:562 src/chsh.c:401 src/passwd.c:819 src/passwd.c:920
-#: src/passwd.c:960
+#: src/chfn.c:561 src/chsh.c:373 src/passwd.c:740 src/passwd.c:852
 msgid "Error updating the password entry.\n"
 msgstr "Chyba pøi aktualizaci polo¾ky v souboru s hesly.\n"
 
-#: src/chfn.c:585 src/chsh.c:424 src/passwd.c:832 src/passwd.c:933
+#: src/chfn.c:585 src/chsh.c:397 src/passwd.c:755 src/passwd.c:867
 msgid "Cannot commit password file changes.\n"
 msgstr "Nelze provést zmìny v souboru s hesly.\n"
 
-#: src/chfn.c:592 src/chsh.c:431
+#: src/chfn.c:592 src/chsh.c:404
 msgid "Cannot unlock the password file.\n"
 msgstr "Soubor s hesly nelze odemknout.\n"
 
-#: src/chpasswd.c:69
+#: src/chpasswd.c:66
 #, c-format
 msgid "usage: %s [-e]\n"
 msgstr "Pou¾ití: %s [-e]\n"
 
-#: src/chpasswd.c:169 src/pwconv.c:104
+#: src/chpasswd.c:171 src/pwconv.c:94
 #, c-format
 msgid "%s: can't lock shadow file\n"
 msgstr "%s: soubor se stínovými hesly nelze zamknout\n"
 
-#: src/chpasswd.c:174 src/gpasswd.c:608 src/pwconv.c:109 src/pwunconv.c:109
-#: src/pwunconv.c:114
+#: src/chpasswd.c:177 src/gpasswd.c:596 src/pwconv.c:99 src/pwunconv.c:103
+#: src/pwunconv.c:108
 #, c-format
 msgid "%s: can't open shadow file\n"
 msgstr "%s: soubor se stínovými hesly nelze otevøít\n"
 
-#: src/chpasswd.c:196 src/newusers.c:465
+#: src/chpasswd.c:200 src/newusers.c:460
 #, c-format
 msgid "%s: line %d: line too long\n"
 msgstr "%s: øádek %d je pøíli¹ dlouhý\n"
 
-#: src/chpasswd.c:216
+#: src/chpasswd.c:220
 #, c-format
 msgid "%s: line %d: missing new password\n"
 msgstr "%s: øádek %d: chybí nové heslo\n"
 
-#: src/chpasswd.c:232
+#: src/chpasswd.c:237
 #, c-format
 msgid "%s: line %d: unknown user %s\n"
 msgstr "%s: øádek %d: u¾ivatel %s je neznámý\n"
 
-#: src/chpasswd.c:284
+#: src/chpasswd.c:290
 #, c-format
 msgid "%s: line %d: cannot update password entry\n"
 msgstr "%s: øádek %d: polo¾ku v souboru s hesly nelze aktualizovat\n"
 
-#: src/chpasswd.c:300 src/newusers.c:585
+#: src/chpasswd.c:307 src/newusers.c:588
 #, c-format
 msgid "%s: error detected, changes ignored\n"
 msgstr "%s: chyba, zmìny budou ignorovány\n"
 
-#: src/chpasswd.c:311
+#: src/chpasswd.c:319
 #, c-format
 msgid "%s: error updating shadow file\n"
 msgstr "%s: chyba pøi aktualizaci souboru se stínovými hesly\n"
 
-#: src/chpasswd.c:319
+#: src/chpasswd.c:328
 #, c-format
 msgid "%s: error updating password file\n"
 msgstr "%s: chyba pøi aktualizaci souboru s hesly\n"
 
-#: src/chsh.c:105
+#: src/chsh.c:75
 #, c-format
-msgid "Usage: %s [ -s shell ] [ name ]\n"
-msgstr "Pou¾ití: %s [ -s shell ] [ jméno ]\n"
+msgid "Usage: %s [-s shell] [name]\n"
+msgstr "Pou¾ití: %s [-s shell] [jméno]\n"
+
+#: src/chsh.c:89
+#, fuzzy
+msgid "Enter the new value, or press return for the default\n"
+msgstr ""
+"Zadejte novou hodnotu, nebo stisknìte ENTER pro pou¾ití implicitní hodnoty\n"
+"\n"
 
-#: src/chsh.c:120
+#: src/chsh.c:90
 msgid "Login Shell"
 msgstr "Implicitní shell"
 
-#: src/chsh.c:273 src/chsh.c:286
+#: src/chsh.c:239 src/chsh.c:253
 #, c-format
 msgid "You may not change the shell for %s.\n"
 msgstr "Nemù¾ete zmìnit shell pro %s.\n"
 
-#: src/chsh.c:315
+#: src/chsh.c:282
 #, c-format
 msgid "Changing the login shell for %s\n"
 msgstr "Mìním implicitní shell pro %s\n"
 
-#: src/chsh.c:327
+#: src/chsh.c:294
 #, c-format
 msgid "%s: Invalid entry: %s\n"
 msgstr "%s: chybná polo¾ka %s\n"
 
-#: src/chsh.c:332
+#: src/chsh.c:301
 #, c-format
 msgid "%s is an invalid shell.\n"
 msgstr "Shell %s je chybný.\n"
 
-#: src/dpasswd.c:69
+#: src/dpasswd.c:52
 #, c-format
-msgid "Usage: %s [ -(a|d) ] shell\n"
-msgstr "Pou¾ití: %s [ -(ald) ] shell\n"
+msgid "Usage: %s [-(a|d)] shell\n"
+msgstr "Pou¾ití: %s [-(ald)] shell\n"
 
-#: src/dpasswd.c:134
+#: src/dpasswd.c:115
 msgid "Shell password: "
 msgstr "Heslo shellu: "
 
-#: src/dpasswd.c:140
+#: src/dpasswd.c:121
 msgid "re-enter Shell password: "
 msgstr "zadejte znovu heslo shellu: "
 
-#: src/dpasswd.c:147
+#: src/dpasswd.c:129
 #, c-format
 msgid "%s: Passwords do not match, try again.\n"
 msgstr "%s: hesla se li¹í, zkuste to znovu\n"
 
-#: src/dpasswd.c:167
+#: src/dpasswd.c:149
 #, c-format
 msgid "%s: can't create %s"
 msgstr "%s: %s nelze vytvoøit"
 
-#: src/dpasswd.c:172
+#: src/dpasswd.c:155
 #, c-format
 msgid "%s: can't open %s"
 msgstr "%s: %s nelze otevøít"
 
-#: src/dpasswd.c:200
+#: src/dpasswd.c:183
 #, c-format
 msgid "%s: Shell %s not found.\n"
 msgstr "%s: Shell %s nebyl nalezen.\n"
 
-#: src/expiry.c:84
-msgid "Usage: expiry { -f | -c }\n"
+#: src/expiry.c:59
+#, fuzzy
+msgid "Usage: expiry {-f|-c}\n"
 msgstr "Pou¾ití: expiry { -f | -c }\n"
 
-#: src/expiry.c:137
+#: src/expiry.c:113
 #, c-format
 msgid "%s: WARNING!  Must be set-UID root!\n"
 msgstr "%s: VAROVÁNÍ! Musí mít oprávnìní superu¾ivatele!\n"
 
-#: src/expiry.c:148
+#: src/expiry.c:124
 #, c-format
 msgid "%s: unknown user\n"
 msgstr "%s: neznámý u¾ivatel\n"
 
-#: src/faillog.c:79
+#: src/faillog.c:77
 #, c-format
 msgid "usage: %s [-a|-u user] [-m max] [-r] [-t days] [-l locksecs]\n"
 msgstr "Pou¾ití: %s [-a|-u u¾ivatel] [-m max] [-r] [-t dny] [-l zamkn sek]\n"
 
-#: src/faillog.c:134 src/lastlog.c:103
+#: src/faillog.c:131 src/lastlog.c:96
 #, c-format
 msgid "Unknown User: %s\n"
 msgstr "U¾ivatel %s je neznámý.\n"
 
-#: src/faillog.c:215
+#: src/faillog.c:212
 msgid "Username   Failures  Maximum  Latest\n"
 msgstr "Jméno      Chyb      Maximum  Poslední\n"
 
-#: src/faillog.c:232
+#: src/faillog.c:229
 #, c-format
 msgid "  %s on %s"
 msgstr "  %s on %s"
 
-#: src/faillog.c:236
+#: src/faillog.c:233
 #, c-format
 msgid " [%lds left]"
 msgstr " [%lds zbylo]"
 
-#: src/faillog.c:239
+#: src/faillog.c:237
 #, c-format
 msgid " [%lds lock]"
 msgstr " [%lds zámek]"
 
-#: src/gpasswd.c:89
+#: src/gpasswd.c:78
 #, c-format
 msgid "usage: %s [-r|-R] group\n"
 msgstr "Pou¾ití: %s [r|-R] skupina\n"
 
-#: src/gpasswd.c:90
+#: src/gpasswd.c:79
 #, c-format
 msgid "       %s [-a user] group\n"
 msgstr "       %s [-a u¾ivatel] skupina\n"
 
-#: src/gpasswd.c:91
+#: src/gpasswd.c:80
 #, c-format
 msgid "       %s [-d user] group\n"
 msgstr "       %s [-d u¾ivatel] skupina\n"
 
-#: src/gpasswd.c:93
+#: src/gpasswd.c:83
 #, c-format
 msgid "       %s [-A user,...] [-M user,...] group\n"
 msgstr "       %s [-A u¾ivatel,...] [-M u¾ivatel,...] skupina\n"
 
-#: src/gpasswd.c:96
+#: src/gpasswd.c:85
 #, c-format
 msgid "       %s [-M user,...] group\n"
 msgstr "       %s [-M u¾ivatel,...] skupina\n"
 
-#: src/gpasswd.c:160 src/gpasswd.c:245
+#: src/gpasswd.c:146 src/gpasswd.c:230
 #, c-format
 msgid "%s: unknown user %s\n"
 msgstr "%s: u¾ivatel %s je neznámý\n"
 
-#: src/gpasswd.c:172
+#: src/gpasswd.c:157
 msgid "Permission denied.\n"
 msgstr "Pøístup odmítnut.\n"
 
-#: src/gpasswd.c:257
+#: src/gpasswd.c:243
 #, 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"
 
-#: src/gpasswd.c:308
+#: src/gpasswd.c:294
 msgid "Who are you?\n"
 msgstr "Kdo jste?\n"
 
-#: src/gpasswd.c:328 src/newgrp.c:251
+#: src/gpasswd.c:313 src/newgrp.c:297
 #, c-format
 msgid "unknown group: %s\n"
 msgstr "skupina %s je neznámá\n"
 
-#: src/gpasswd.c:436
+#: src/gpasswd.c:422
 #, c-format
 msgid "Adding user %s to group %s\n"
 msgstr "Pøidávám u¾ivatele %s do skupiny %s.\n"
 
-#: src/gpasswd.c:453
+#: src/gpasswd.c:440
 #, c-format
 msgid "Removing user %s from group %s\n"
 msgstr "Odstraòuji u¾ivatele %s ze skupiny %s\n"
 
-#: src/gpasswd.c:466
+#: src/gpasswd.c:454
 #, c-format
 msgid "%s: unknown member %s\n"
 msgstr "%s: èlen %s je neznámý\n"
 
-#: src/gpasswd.c:513
+#: src/gpasswd.c:501
 #, c-format
 msgid "%s: Not a tty\n"
 msgstr "%s: Nejedná se o tty\n"
 
 #.
-#. * 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.
+#. * 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.
 #.
-#: src/gpasswd.c:535
+#: src/gpasswd.c:522
 #, c-format
 msgid "Changing the password for group %s\n"
 msgstr "Mìním heslo skupiny %s\n"
 
-#: src/gpasswd.c:538
+#: src/gpasswd.c:525
 msgid "New Password: "
 msgstr "Nové heslo: "
 
-#: src/gpasswd.c:543 src/passwd.c:422
+#: src/gpasswd.c:530 src/passwd.c:365
 msgid "Re-enter new password: "
 msgstr "Zadejte opìt nové heslo: "
 
-#: src/gpasswd.c:555
+#: src/gpasswd.c:542
 msgid "They don't match; try again"
 msgstr "Neshodují se; zkuste to opìt"
 
-#: src/gpasswd.c:559
+#: src/gpasswd.c:546
 #, c-format
 msgid "%s: Try again later\n"
 msgstr "%s: Zkuste to pozdìji\n"
 
-#: src/gpasswd.c:590
+#: src/gpasswd.c:578
 #, c-format
 msgid "%s: can't get lock\n"
 msgstr "%s: nelze získat zámek\n"
 
-#: src/gpasswd.c:596
+#: src/gpasswd.c:584
 #, c-format
 msgid "%s: can't get shadow lock\n"
 msgstr "%s: nelze získat zámek pro soubor se stínovými hesly\n"
 
-#: src/gpasswd.c:602
+#: src/gpasswd.c:590
 #, c-format
 msgid "%s: can't open file\n"
 msgstr "%s: nelze otevøít soubor\n"
 
-#: src/gpasswd.c:614
+#: src/gpasswd.c:602
 #, c-format
 msgid "%s: can't update entry\n"
 msgstr "%s: nelze aktualizovat polo¾ku\n"
 
-#: src/gpasswd.c:620
+#: src/gpasswd.c:608
 #, c-format
 msgid "%s: can't update shadow entry\n"
 msgstr "%s: nelze aktualizovat polo¾ku souboru se stínovými hesly\n"
 
-#: src/gpasswd.c:626
+#: src/gpasswd.c:615
 #, c-format
 msgid "%s: can't re-write file\n"
 msgstr "%s: nelze pøepsat soubor\n"
 
-#: src/gpasswd.c:632
+#: src/gpasswd.c:621
 #, c-format
 msgid "%s: can't re-write shadow file\n"
 msgstr "%s: nelze pøepsat soubor se stínovými hesly\n"
 
-#: src/gpasswd.c:640
+#: src/gpasswd.c:630
 #, c-format
 msgid "%s: can't unlock file\n"
 msgstr "%s: nelze odemknout soubor\n"
 
-#: src/gpasswd.c:645
+#: src/gpasswd.c:635
 #, c-format
 msgid "%s: can't update DBM files\n"
 msgstr "%s: nelze aktualizovat soubory s DBM databázemi\n"
 
-#: src/gpasswd.c:652
+#: src/gpasswd.c:642
 #, c-format
 msgid "%s: can't update DBM shadow files\n"
 msgstr "%s: nelze aktualizovat soubory s DBM databázemi stínových hesel\n"
 
-#: src/groupadd.c:111
+#: src/groupadd.c:101
 msgid "usage: groupadd [-g gid [-o]] group\n"
 msgstr "Pou¾ití: groupadd [-g gid [-o]] skupina\n"
 
-#: src/groupadd.c:179 src/groupadd.c:202 src/groupmod.c:189 src/groupmod.c:236
-#: src/useradd.c:949 src/usermod.c:546 src/usermod.c:682
+#: src/groupadd.c:167 src/groupadd.c:192 src/groupmod.c:179 src/groupmod.c:228
+#: src/useradd.c:970 src/usermod.c:552 src/usermod.c:695
 #, c-format
 msgid "%s: error adding new group entry\n"
 msgstr "%s: chyba pøi pøidávání polo¾ky souboru se skupinami\n"
 
-#: src/groupadd.c:189 src/groupadd.c:212 src/groupmod.c:205 src/useradd.c:960
-#: src/usermod.c:558 src/usermod.c:694
+#: src/groupadd.c:178 src/groupadd.c:203 src/groupmod.c:197 src/useradd.c:981
+#: src/usermod.c:564 src/usermod.c:708
 #, c-format
 msgid "%s: cannot add new dbm group entry\n"
 msgstr "%s: nelze pøidat polo¾ku do souboru s dbm databází skupin\n"
 
-#: src/groupadd.c:264 src/useradd.c:1014
+#: src/groupadd.c:255 src/useradd.c:1034
 #, c-format
 msgid "%s: name %s is not unique\n"
 msgstr "%s: jméno %s není jedineèné\n"
 
-#: src/groupadd.c:279
-#, c-format
-msgid "%s: gid %ld is not unique\n"
-msgstr "%s: gid %ld není jedineèné\n"
+#: src/groupadd.c:270
+#, fuzzy, c-format
+msgid "%s: gid %u is not unique\n"
+msgstr "%s uid %ld není jedineèné\n"
 
-#: src/groupadd.c:303
+#: src/groupadd.c:294
 #, c-format
 msgid "%s: can't get unique gid\n"
 msgstr "%s: nelze vytvoøit jedineèné gid\n"
@@ -919,54 +915,54 @@ msgstr "%s: nelze vytvo
 #.
 #. * All invalid group names land here.
 #.
-#: src/groupadd.c:327 src/groupmod.c:347
+#: src/groupadd.c:317 src/groupmod.c:341
 #, c-format
 msgid "%s: %s is a not a valid group name\n"
 msgstr "%s: %s není platným jménem skupiny\n"
 
-#: src/groupadd.c:356 src/groupmod.c:373
+#: src/groupadd.c:346 src/groupmod.c:366
 #, c-format
 msgid "%s: invalid group %s\n"
 msgstr "%s: chybná skupina %s\n"
 
-#: src/groupadd.c:373 src/useradd.c:1290
+#: src/groupadd.c:363 src/useradd.c:1313
 #, c-format
 msgid "%s: -O requires NAME=VALUE\n"
 msgstr "%s: pøepínaè -O vy¾aduje argument typu JMÉNO=HODNOTA\n"
 
-#: src/groupadd.c:418 src/groupdel.c:173 src/groupmod.c:409 src/useradd.c:1399
-#: src/userdel.c:309 src/usermod.c:570
+#: src/groupadd.c:407 src/groupdel.c:173 src/groupmod.c:401 src/useradd.c:1428
+#: src/userdel.c:312 src/usermod.c:576
 #, c-format
 msgid "%s: cannot rewrite group file\n"
 msgstr "%s: soubor se skupinami nelze pøepsat\n"
 
-#: src/groupadd.c:424 src/groupdel.c:179 src/groupmod.c:415 src/useradd.c:1407
-#: src/userdel.c:315 src/usermod.c:707
+#: src/groupadd.c:415 src/groupdel.c:179 src/groupmod.c:409 src/useradd.c:1437
+#: src/userdel.c:319 src/usermod.c:722
 #, c-format
 msgid "%s: cannot rewrite shadow group file\n"
 msgstr "%s: soubor se stínovými skupinami nelze pøepsat\n"
 
-#: src/groupadd.c:443 src/groupdel.c:198 src/groupmod.c:434 src/userdel.c:395
+#: src/groupadd.c:433 src/groupdel.c:198 src/groupmod.c:427 src/userdel.c:403
 #, c-format
 msgid "%s: unable to lock group file\n"
 msgstr "%s: soubor se skupinami nelze zamknout\n"
 
-#: src/groupadd.c:447 src/groupdel.c:202 src/groupmod.c:438
+#: src/groupadd.c:438 src/groupdel.c:202 src/groupmod.c:432
 #, c-format
 msgid "%s: unable to open group file\n"
 msgstr "%s: soubor se skupinami nelze otevøít\n"
 
-#: src/groupadd.c:452 src/groupdel.c:207 src/groupmod.c:443 src/userdel.c:404
+#: src/groupadd.c:445 src/groupdel.c:207 src/groupmod.c:439 src/userdel.c:414
 #, c-format
 msgid "%s: unable to lock shadow group file\n"
 msgstr "%s: soubor se stínovými skupinami nelze zamknout\n"
 
-#: src/groupadd.c:457 src/groupdel.c:212 src/groupmod.c:448
+#: src/groupadd.c:451 src/groupdel.c:212 src/groupmod.c:445
 #, c-format
 msgid "%s: unable to open shadow group file\n"
 msgstr "%s: soubor se stínovými skupinami nelze otevøít\n"
 
-#: src/groupadd.c:568
+#: src/groupadd.c:562
 #, c-format
 msgid "%s: group %s exists\n"
 msgstr "%s: skupina %s ji¾ existuje\n"
@@ -975,12 +971,12 @@ msgstr "%s: skupina %s ji
 msgid "usage: groupdel group\n"
 msgstr "Pou¾ití: groupdel skupina\n"
 
-#: src/groupdel.c:110 src/groupmod.c:193 src/groupmod.c:240
+#: src/groupdel.c:110 src/groupmod.c:184 src/groupmod.c:233
 #, c-format
 msgid "%s: error removing group entry\n"
 msgstr "%s: chyba pøi odstraòování polo¾ky ze souboru se skupinami\n"
 
-#: src/groupdel.c:122 src/groupmod.c:212
+#: src/groupdel.c:122 src/groupmod.c:204
 #, c-format
 msgid "%s: error removing group dbm entry\n"
 msgstr "%s: chyba pøi odstraòování polo¾ky ze souboru s dbm databází skupin\n"
@@ -990,7 +986,7 @@ msgstr "%s: chyba p
 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"
 
-#: src/groupdel.c:150 src/groupmod.c:258
+#: src/groupdel.c:150 src/groupmod.c:254
 #, c-format
 msgid "%s: error removing shadow group dbm entry\n"
 msgstr ""
@@ -1005,132 +1001,131 @@ msgstr ""
 msgid "%s: cannot remove user's primary group.\n"
 msgstr "%s: primární skupinu u¾ivatele nelze odstranit\n"
 
-#: src/groupdel.c:355 src/groupmod.c:551
+#: src/groupdel.c:355 src/groupmod.c:550
 #, c-format
 msgid "%s: group %s does not exist\n"
 msgstr "%s: skupina %s neexistuje\n"
 
-#: src/groupdel.c:369 src/groupmod.c:567
+#: src/groupdel.c:369 src/groupmod.c:566
 #, c-format
 msgid "%s: group %s is a NIS group\n"
 msgstr "%s: skupina %s je NIS skupinou\n"
 
-#: src/groupdel.c:375 src/groupmod.c:573 src/userdel.c:811 src/usermod.c:1023
+#: src/groupdel.c:375 src/groupmod.c:571 src/userdel.c:776 src/usermod.c:1045
 #, c-format
 msgid "%s: %s is the NIS master\n"
 msgstr "%s: %s je hlavním NIS serverem\n"
 
-#: src/groupmems.c:92
+#: src/groupmems.c:95
 msgid "Member already exists\n"
 msgstr ""
 
-#: src/groupmems.c:121
+#: src/groupmems.c:125
 msgid "Member to remove could not be found\n"
 msgstr ""
 
-#: src/groupmems.c:151
+#: src/groupmems.c:158
 msgid "usage: groupmems -a username | -d username | -D | -l [-g groupname]\n"
 msgstr ""
 
-#: src/groupmems.c:191
+#: src/groupmems.c:201
 msgid "Only root can add members to different groups\n"
 msgstr ""
 
-#: src/groupmems.c:196
+#: src/groupmems.c:206
 msgid "Group access is required\n"
 msgstr ""
 
-#: src/groupmems.c:199
+#: src/groupmems.c:210
 msgid "Not primary owner of current group\n"
 msgstr ""
 
-#: src/groupmems.c:204
+#: src/groupmems.c:215
 #, fuzzy
 msgid "Unable to lock group file\n"
 msgstr "%s: soubor se skupinami nelze zamknout\n"
 
-#: src/groupmems.c:209
+#: src/groupmems.c:220
 #, fuzzy
 msgid "Unable to open group file\n"
 msgstr "%s: soubor se skupinami nelze otevøít\n"
 
-#: src/groupmems.c:229
+#: src/groupmems.c:240
 #, fuzzy
 msgid "Cannot close group file\n"
 msgstr "%s: soubor se skupinami nelze otevøít\n"
 
-#: src/groupmod.c:111
+#: src/groupmod.c:103
 msgid "usage: groupmod [-g gid [-o]] [-n name] group\n"
 msgstr "Pou¾ití: groupmod [-g gid [-o]] [-n jméno] skupina\n"
 
-#: src/groupmod.c:171
+#: src/groupmod.c:161
 #, c-format
 msgid "%s: %s not found in /etc/group\n"
 msgstr "%s: %s se v /etc/group nenalézá\n"
 
-#: src/groupmod.c:252
+#: src/groupmod.c:247
 #, c-format
 msgid "%s: cannot add new dbm shadow group entry\n"
 msgstr "%s: nelze pøidat polo¾ku do souboru s dbm databází stínových skupin\n"
 
-#: src/groupmod.c:305
-#, c-format
-msgid "%s: %ld is not a unique gid\n"
+#: src/groupmod.c:300
+#, fuzzy, c-format
+msgid "%s: %u is not a unique gid\n"
 msgstr "%s: gid %ld není jedineèné\n"
 
-#: src/groupmod.c:336
+#: src/groupmod.c:330
 #, c-format
 msgid "%s: %s is not a unique name\n"
 msgstr "%s: jméno %s není jedineèné\n"
 
-#: src/groups.c:62
+#: src/groups.c:59
 #, c-format
 msgid "unknown user %s\n"
 msgstr "u¾ivatel %s je neznámý\n"
 
-#: src/grpck.c:98
+#: src/grpck.c:87
 #, fuzzy, c-format
-msgid "Usage: %s [ -sr ] [ group [ gshadow ] ]\n"
+msgid "Usage: %s [-r] [-s] [group [gshadow]]\n"
 msgstr ""
-"Pou¾ití: %s [ -r ] [ soubor se skupinami [ soubor se stínovými "
-"skupinami ] ]\n"
+"Pou¾ití: %s [-r] [-s] [soubor se skupinami [soubor se stínovými skupinami]]\n"
 
-#: src/grpck.c:100
+#: src/grpck.c:90
 #, fuzzy, c-format
-msgid "Usage: %s [ -sr ] [ group ]\n"
-msgstr "Usage: %s [ -r ] [ soubor se skupinami ]\n"
+msgid "Usage: %s [-r] [-s] [group]\n"
+msgstr "Usage: %s [-r] [-s] [soubor se skupinami]\n"
 
-#: src/grpck.c:119 src/pwck.c:119
+#: src/grpck.c:108 src/pwck.c:108
 msgid "No"
 msgstr "Ne"
 
-#: src/grpck.c:204 src/pwck.c:186
+#: src/grpck.c:192 src/pwck.c:175
 #, c-format
 msgid "%s: -s and -r are incompatibile\n"
 msgstr ""
 
-#: src/grpck.c:244 src/grpck.c:252 src/pwck.c:226 src/pwck.c:235
+#: src/grpck.c:232 src/grpck.c:242 src/pwck.c:215 src/pwck.c:225
 #, c-format
 msgid "%s: cannot lock file %s\n"
 msgstr "%s: soubor %s nelze zamknout\n"
 
-#: src/grpck.c:267 src/grpck.c:275 src/mkpasswd.c:216 src/pwck.c:251
-#: src/pwck.c:260
+#: src/grpck.c:259 src/grpck.c:268 src/mkpasswd.c:202 src/pwck.c:242
+#: src/pwck.c:251
 #, c-format
 msgid "%s: cannot open file %s\n"
 msgstr "%s: soubor %s nelze otevøít\n"
 
 #.
-#. * Tell the user this entire line is bogus and
-#. * ask them to delete it.
+#. * Tell the user this entire line is bogus and ask
+#. * them to delete it.
 #.
-#: src/grpck.c:317
+#: src/grpck.c:311
 msgid "invalid group file entry\n"
 msgstr "chybná polo¾ka v souboru se skupinami\n"
 
-#: src/grpck.c:318 src/grpck.c:381 src/grpck.c:473 src/grpck.c:536
-#: src/grpck.c:553 src/pwck.c:305 src/pwck.c:367 src/pwck.c:474 src/pwck.c:536
-#: src/pwck.c:560
+#: src/grpck.c:312 src/grpck.c:375 src/grpck.c:458 src/grpck.c:521
+#: src/grpck.c:538 src/pwck.c:296 src/pwck.c:358 src/pwck.c:457 src/pwck.c:519
+#: src/pwck.c:543
 #, c-format
 msgid "delete line `%s'? "
 msgstr "smazat øádek `%s'?"
@@ -1139,35 +1134,30 @@ msgstr "smazat 
 #. * Tell the user this entry is a duplicate of
 #. * another and ask them to delete it.
 #.
-#: src/grpck.c:380
+#: src/grpck.c:374
 msgid "duplicate group entry\n"
 msgstr "tato polo¾ka se v souboru se skupinami vyskytuje vícekrát\n"
 
-#: src/grpck.c:397
+#: src/grpck.c:391
 #, c-format
 msgid "invalid group name `%s'\n"
 msgstr "jméno skupiny `%s' je chybné\n"
 
-#: src/grpck.c:407
-#, c-format
-msgid "group %s: bad GID (%d)\n"
-msgstr "skupina %s: chybné GID (%d)\n"
-
-#: src/grpck.c:433
+#: src/grpck.c:418
 #, c-format
 msgid "group %s: no user %s\n"
 msgstr "skupina %s: u¾ivatel %s neexistuje\n"
 
-#: src/grpck.c:435 src/grpck.c:604
+#: src/grpck.c:420 src/grpck.c:590
 #, c-format
 msgid "delete member `%s'? "
 msgstr "smazat èlena `%s'? "
 
 #.
-#. * Tell the user this entire line is bogus and
-#. * ask them to delete it.
+#. * Tell the user this entire line is bogus and ask
+#. * them to delete it.
 #.
-#: src/grpck.c:472
+#: src/grpck.c:457
 msgid "invalid shadow group file entry\n"
 msgstr "chybná polo¾ka v souboru se stínovými skupinami\n"
 
@@ -1175,204 +1165,201 @@ msgstr "chybn
 #. * Tell the user this entry is a duplicate of
 #. * another and ask them to delete it.
 #.
-#: src/grpck.c:535
+#: src/grpck.c:520
 msgid "duplicate shadow group entry\n"
 msgstr "duplikovaná polo¾ka v souboru se stínovými skupinami\n"
 
-#: src/grpck.c:552
+#: src/grpck.c:537
 msgid "no matching group file entry\n"
 msgstr "v souboru se skupinami neexistuje odpovídající polo¾ka\n"
 
-#: src/grpck.c:572
+#: src/grpck.c:558
 #, c-format
 msgid "shadow group %s: no administrative user %s\n"
 msgstr "stínová skupina %s: administrátor %s neexistuje\n"
 
-#: src/grpck.c:574
+#: src/grpck.c:560
 #, c-format
 msgid "delete administrative member `%s'? "
 msgstr "smazat administrátora `%s'? "
 
-#: src/grpck.c:602
+#: src/grpck.c:588
 #, c-format
 msgid "shadow group %s: no user %s\n"
 msgstr "stínová skupina %s: u¾ivatel %s neexistuje\n"
 
-#: src/grpck.c:630 src/grpck.c:636 src/pwck.c:592 src/pwck.c:600
+#: src/grpck.c:616 src/grpck.c:622 src/pwck.c:577 src/pwck.c:585
 #, c-format
 msgid "%s: cannot update file %s\n"
 msgstr "%s: soubor %s nelze aktualizovat\n"
 
-#: src/grpck.c:660 src/pwck.c:626
+#: src/grpck.c:647 src/pwck.c:612
 #, c-format
 msgid "%s: the files have been updated; run mkpasswd\n"
 msgstr "%s: soubory byly aktualizovány; spus»te mkpasswd\n"
 
-#: src/grpck.c:661 src/grpck.c:665 src/pwck.c:627 src/pwck.c:631
+#: src/grpck.c:648 src/grpck.c:652 src/pwck.c:613 src/pwck.c:617
 #, c-format
 msgid "%s: no changes\n"
 msgstr "%s: ¾ádné zmìny nebyly provedeny\n"
 
-#: src/grpck.c:664 src/pwck.c:630
+#: src/grpck.c:651 src/pwck.c:616
 #, c-format
 msgid "%s: the files have been updated\n"
 msgstr "%s: soubory byly aktualizovány\n"
 
-#: src/grpconv.c:62 src/grpunconv.c:63
+#: src/grpconv.c:60 src/grpunconv.c:56
 #, c-format
 msgid "%s: can't lock group file\n"
 msgstr "%s: soubor se skupinami nelze zamknout\n"
 
-#: src/grpconv.c:67 src/grpunconv.c:68
+#: src/grpconv.c:65 src/grpunconv.c:61
 #, c-format
 msgid "%s: can't open group file\n"
 msgstr "%s: soubor se skupinami nelze otevøít\n"
 
-#: src/grpconv.c:72 src/grpunconv.c:73
+#: src/grpconv.c:70 src/grpunconv.c:66
 #, c-format
 msgid "%s: can't lock shadow group file\n"
 msgstr "%s: soubor se stínovými skupinami nelze zamknout\n"
 
-#: src/grpconv.c:77 src/grpunconv.c:78
+#: src/grpconv.c:76 src/grpunconv.c:72
 #, c-format
 msgid "%s: can't open shadow group file\n"
 msgstr "%s: soubor se stínovými skupinami nelze otevøít\n"
 
-#.
-#. * This shouldn't happen (the entry exists) but...
-#.
-#: src/grpconv.c:93
+#: src/grpconv.c:94
 #, c-format
 msgid "%s: can't remove shadow group %s\n"
 msgstr "%s: polo¾ku stínové skupiny %s nelze odstranit\n"
 
-#: src/grpconv.c:134 src/pwconv.c:160
+#: src/grpconv.c:138 src/pwconv.c:153
 #, c-format
 msgid "%s: can't update shadow entry for %s\n"
 msgstr "%s: polo¾ku %s souboru se stínovými hesly nelze aktualizovat\n"
 
-#: src/grpconv.c:143 src/grpunconv.c:94
+#: src/grpconv.c:148 src/grpunconv.c:91
 #, c-format
 msgid "%s: can't update entry for group %s\n"
 msgstr "%s: polo¾ku skupiny %s nelze odstranit\n"
 
-#: src/grpconv.c:150 src/grpunconv.c:102
+#: src/grpconv.c:155 src/grpunconv.c:99
 #, c-format
 msgid "%s: can't update shadow group file\n"
 msgstr "%s: soubor se stínovými hesly nelze aktualizovat\n"
 
-#: src/grpconv.c:154 src/grpunconv.c:107
+#: src/grpconv.c:160 src/grpunconv.c:105
 #, c-format
 msgid "%s: can't update group file\n"
 msgstr "%s: soubor s hesly nelze aktualizovat\n"
 
-#: src/grpconv.c:169 src/grpunconv.c:128
+#: src/grpconv.c:175 src/grpunconv.c:127
 #, c-format
 msgid "%s: not configured for shadow group support.\n"
 msgstr "%s: podpora pro stínová hesla skupin není nakonfigurována\n"
 
-#: src/grpunconv.c:112
+#: src/grpunconv.c:110
 #, c-format
 msgid "%s: can't delete shadow group file\n"
 msgstr "%s: soubor se stínovými hesly skupin nelze smazat\n"
 
-#: src/id.c:56
-msgid "usage: id [ -a ]\n"
-msgstr "Pou¾ití: id [ -a ]\n"
+#: src/id.c:53
+msgid "usage: id [-a]\n"
+msgstr "Pou¾ití: id [-a]\n"
 
-#: src/id.c:58
+#: src/id.c:55
 msgid "usage: id\n"
 msgstr "Pou¾ití: id\n"
 
-#: src/id.c:127
-#, c-format
-msgid "uid=%d(%s)"
+#: src/id.c:123
+#, fuzzy, c-format
+msgid "uid=%u(%s)"
 msgstr "uid=%d(%s)"
 
-#: src/id.c:129
-#, c-format
-msgid "uid=%d"
+#: src/id.c:125
+#, fuzzy, c-format
+msgid "uid=%u"
 msgstr "uid=%d"
 
-#: src/id.c:133
-#, c-format
-msgid " gid=%d(%s)"
+#: src/id.c:129
+#, fuzzy, c-format
+msgid " gid=%u(%s)"
 msgstr " gid=%d(%s)"
 
-#: src/id.c:135
-#, c-format
-msgid " gid=%d"
+#: src/id.c:131
+#, fuzzy, c-format
+msgid " gid=%u"
 msgstr " gid=%d"
 
-#: src/id.c:145
-#, c-format
-msgid " euid=%d(%s)"
+#: src/id.c:141
+#, fuzzy, c-format
+msgid " euid=%u(%s)"
 msgstr " euid=%d(%s)"
 
-#: src/id.c:147
-#, c-format
-msgid " euid=%d"
+#: src/id.c:143
+#, fuzzy, c-format
+msgid " euid=%u"
 msgstr " euid=%d"
 
-#: src/id.c:152
-#, c-format
-msgid " egid=%d(%s)"
+#: src/id.c:148
+#, fuzzy, c-format
+msgid " egid=%u(%s)"
 msgstr " egid=%d(%s)"
 
-#: src/id.c:154
-#, c-format
-msgid " egid=%d"
+#: src/id.c:150
+#, fuzzy, c-format
+msgid " egid=%u"
 msgstr " egid=%d"
 
 #.
-#. * Start off the group message.  It will be of the format
+#. * Start off the group message. It will be of the format
 #. *
-#. *   groups=###(aaa),###(aaa),###(aaa)
+#. *      groups=###(aaa),###(aaa),###(aaa)
 #. *
 #. * where "###" is a numerical value and "aaa" is the
 #. * corresponding name for each respective numerical value.
 #.
-#: src/id.c:175
+#: src/id.c:169
 msgid " groups="
 msgstr " skupiny="
 
-#: src/lastlog.c:116 src/lastlog.c:120
+#: src/lastlog.c:110 src/lastlog.c:116
 #, c-format
 msgid "Usage: %s [<-u|--login> login-name] [<-t|--time> days] [<-h|--help>]\n"
 msgstr ""
 
-#: src/lastlog.c:184
+#: src/lastlog.c:181
 msgid "Username         Port     From             Latest\n"
 msgstr "U¾ivatel         Port     Z                Naposledy\n"
 
-#: src/lastlog.c:186
+#: src/lastlog.c:183
 msgid "Username                Port     Latest\n"
 msgstr "U¾ivatel                Port     Naposledy\n"
 
-#: src/lastlog.c:200
+#: src/lastlog.c:197
 msgid "**Never logged in**"
 msgstr "**Nikdy nebyl pøihlá¹en**"
 
-#: src/login.c:201
+#: src/login.c:183
 #, c-format
 msgid "usage: %s [-p] [name]\n"
 msgstr "Pou¾ití: %s [-p] jméno\n"
 
-#: src/login.c:204
+#: src/login.c:186
 #, c-format
 msgid "       %s [-p] [-h host] [-f name]\n"
 msgstr "       %s [-p] [-h poèítaè] [-f jméno]\n"
 
-#: src/login.c:206
+#: src/login.c:188
 #, c-format
 msgid "       %s [-p] -r host\n"
 msgstr "       %s [-p] -r poèítaè\n"
 
-#: src/login.c:289
+#: src/login.c:272
 msgid "Invalid login time\n"
 msgstr "Chybný èas pøihlá¹ení\n"
 
-#: src/login.c:344
+#: src/login.c:327
 msgid ""
 "\n"
 "System closed for routine maintenance\n"
@@ -1380,7 +1367,7 @@ msgstr ""
 "\n"
 "Systém byl uzavøen kvùli pravidelné údr¾bì.\n"
 
-#: src/login.c:354
+#: src/login.c:338
 msgid ""
 "\n"
 "[Disconnect bypassed -- root login allowed.]\n"
@@ -1388,7 +1375,7 @@ msgstr ""
 "\n"
 "[Odpojení pøeskoèeno -- u¾ivatel root smí být pøihlá¹en.]\n"
 
-#: src/login.c:393
+#: src/login.c:375
 #, c-format
 msgid ""
 "\n"
@@ -1397,17 +1384,17 @@ msgstr ""
 "\n"
 "Vypr¹el èasový limit (%d vteøin) pro pøihlá¹ení.\n"
 
-#: src/login.c:695
+#: src/login.c:687
 #, c-format
 msgid " on `%.100s' from `%.200s'"
 msgstr " na `%.100s' z `%.200s'"
 
-#: src/login.c:697
+#: src/login.c:691
 #, c-format
 msgid " on `%.100s'"
 msgstr " na `%.100s'"
 
-#: src/login.c:837
+#: src/login.c:850
 #, c-format
 msgid ""
 "\n"
@@ -1416,236 +1403,231 @@ msgstr ""
 "\n"
 "Pøihla¹ovací jméno na %s: "
 
-#: src/login.c:839
+#: src/login.c:853
 msgid "login: "
 msgstr "Pøihla¹ovací jméno: "
 
-#: src/login.c:1029 src/sulogin.c:231
+#: src/login.c:1069 src/sulogin.c:233
 msgid "Login incorrect"
 msgstr "Chybné pøihlá¹ení"
 
-#: src/login.c:1217
+#: src/login.c:1263
 msgid "Warning: login re-enabled after temporary lockout.\n"
 msgstr "Varování: po doèasném zákazu je pøihla¹ování opìt povoleno\n"
 
-#: src/login.c:1227
+#: src/login.c:1276
 #, c-format
 msgid "Last login: %s on %s"
 msgstr "Poslední pøihlá¹ení: %s na %s"
 
-#: src/login.c:1230
+#: src/login.c:1279
 #, c-format
 msgid "Last login: %.19s on %s"
 msgstr "Poslední pøihlá¹ení: %.19s na %s"
 
-#: src/login.c:1235
+#: src/login.c:1285
 #, c-format
 msgid " from %.*s"
 msgstr " z %.*s"
 
-#: src/login.c:1307
+#: src/login.c:1362
 msgid "Starting rad_login\n"
 msgstr "Spou¹tím rad_login\n"
 
-#: src/mkpasswd.c:49
+#: src/mkpasswd.c:47
 #, c-format
 msgid "%s: no DBM database on system - no action performed\n"
 msgstr "%s: systém neobsahuje ¾ádnou DBM databázi - není co dìlat\n"
 
-#: src/mkpasswd.c:74 src/mkpasswd.c:382
-#, c-format
-msgid "Usage: %s [ -vf ] [ -p|g|sp|sg ] file\n"
-msgstr "Pou¾ití: %s [ -vf ] [ -p|g|sp|sg ] soubor\n"
-
-#: src/mkpasswd.c:76 src/mkpasswd.c:384
-#, c-format
-msgid "Usage: %s [ -vf ] [ -p|g|sp ] file\n"
-msgstr "Pou¾ití: %s [ -vf ] [ -p|g|sp ] soubor\n"
-
-#: src/mkpasswd.c:79 src/mkpasswd.c:387
-#, c-format
-msgid "Usage: %s [ -vf ] [ -p|g ] file\n"
-msgstr "Pou¾ití: %s [ -vf ] [ -p|g ] soubor\n"
-
-#: src/mkpasswd.c:245 src/mkpasswd.c:249
+#: src/mkpasswd.c:232 src/mkpasswd.c:237
 #, c-format
 msgid "%s: cannot overwrite file %s\n"
 msgstr "%s: soubor %s nelze pøepsat\n"
 
-#: src/mkpasswd.c:263
+#: src/mkpasswd.c:252
 #, c-format
 msgid "%s: cannot open DBM files for %s\n"
 msgstr "%s: soubory s DBM databázemi pro %s nelze otevøít\n"
 
-#: src/mkpasswd.c:296
+#: src/mkpasswd.c:287
 #, c-format
 msgid "%s: the beginning with "
 msgstr "%s: zaèátek s "
 
-#: src/mkpasswd.c:296
+#: src/mkpasswd.c:288
 #, fuzzy
 msgid " is too long\n"
 msgstr "%s: polo¾ka je pøíli¹ dlouhá\n"
 
-#: src/mkpasswd.c:321
+#: src/mkpasswd.c:315
 #, c-format
 msgid "%s: error parsing line \"%s\"\n"
 msgstr "%s: chyba pøi zpracování øádku \"%s\"\n"
 
-#: src/mkpasswd.c:326 src/mkpasswd.c:328 src/mkpasswd.c:330 src/mkpasswd.c:332
+#: src/mkpasswd.c:323 src/mkpasswd.c:328 src/mkpasswd.c:333 src/mkpasswd.c:338
 msgid "adding record for name "
 msgstr "pøidávám záznam pro jméno"
 
-#: src/mkpasswd.c:326 src/mkpasswd.c:328 src/mkpasswd.c:330 src/mkpasswd.c:332
-#: src/mkpasswd.c:336 src/mkpasswd.c:341 src/mkpasswd.c:345 src/mkpasswd.c:349
+#: src/mkpasswd.c:324 src/mkpasswd.c:329 src/mkpasswd.c:334 src/mkpasswd.c:339
+#: src/mkpasswd.c:345 src/mkpasswd.c:351 src/mkpasswd.c:356 src/mkpasswd.c:361
 msgid "\n"
 msgstr ""
 
-#: src/mkpasswd.c:336 src/mkpasswd.c:341 src/mkpasswd.c:345 src/mkpasswd.c:349
+#: src/mkpasswd.c:344 src/mkpasswd.c:350 src/mkpasswd.c:355 src/mkpasswd.c:360
 #, c-format
 msgid "%s: error adding record for "
 msgstr "%s: chyba pøi zadávání záznamu pro jméno "
 
-#: src/mkpasswd.c:367
+#: src/mkpasswd.c:378
 #, c-format
 msgid "added %d entries, longest was %d\n"
 msgstr "poèet pøidaných polo¾ek: %d; délka nejvìt¹í: %d\n"
 
-#: src/newgrp.c:66
-msgid "usage: newgrp [ - ] [ group ]\n"
-msgstr "Pou¾ití: newgrp [ - ] [ skupina ]\n"
+#: src/mkpasswd.c:392
+#, c-format
+msgid "Usage: %s [-vf] [-p|g|sp|sg] file\n"
+msgstr "Pou¾ití: %s [-vf] [-p|g|sp|sg] soubor\n"
 
-#: src/newgrp.c:68
-msgid "usage: sg group [[-c] command ]\n"
-msgstr "Pou¾ití: sg skupina [[-c] pøíkaz ]\n"
+#: src/mkpasswd.c:395
+#, c-format
+msgid "Usage: %s [-vf] [-p|g|sp] file\n"
+msgstr "Pou¾ití: %s [-vf] [-p|g|sp] soubor\n"
 
-#: src/newgrp.c:125
+#: src/mkpasswd.c:398
 #, c-format
-msgid "unknown uid: %d\n"
+msgid "Usage: %s [-vf] [-p|g] file\n"
+msgstr "Pou¾ití: %s [-vf] [-p|g] soubor\n"
+
+#: src/newgrp.c:61
+msgid "usage: newgrp [-] [group]\n"
+msgstr "Pou¾ití: newgrp [-] [skupina]\n"
+
+#: src/newgrp.c:63
+msgid "usage: sg group [[-c] command]\n"
+msgstr "Pou¾ití: sg skupina [[-c] pøíkaz]\n"
+
+#: src/newgrp.c:136
+#, fuzzy, c-format
+msgid "unknown uid: %u\n"
 msgstr "uid %d je neznámé\n"
 
-#: src/newgrp.c:201
-#, c-format
-msgid "unknown gid: %ld\n"
+#: src/newgrp.c:219
+#, fuzzy, c-format
+msgid "unknown gid: %lu\n"
 msgstr "gid %ld je neznámé\n"
 
-#: src/newgrp.c:245
-#, c-format
-msgid "unknown gid: %d\n"
-msgstr "gid %d je neznámé\n"
-
-#: src/newgrp.c:323 src/newgrp.c:332
+#: src/newgrp.c:365 src/newgrp.c:374
 msgid "Sorry.\n"
 msgstr "Lituji.\n"
 
-#: src/newgrp.c:364
+#: src/newgrp.c:472
 msgid "too many groups\n"
 msgstr "pøíli¹ mnoho skupin\n"
 
-#: src/newusers.c:82
+#: src/newusers.c:78
 #, c-format
-msgid "Usage: %s [ input ]\n"
-msgstr "Pou¾ití: %s [ vstup ]\n"
+msgid "Usage: %s [input]\n"
+msgstr "Pou¾ití: %s [vstup]\n"
 
-#: src/newusers.c:414
+#: src/newusers.c:407
 #, c-format
 msgid "%s: can't lock /etc/passwd.\n"
 msgstr "%s: soubor /etc/passwd nelze zamknout\n"
 
-#: src/newusers.c:425
+#: src/newusers.c:419
 #, c-format
 msgid "%s: can't lock files, try again later\n"
 msgstr "%s: soubory nelze zamknout. Zkuste to opìt pozdìji.\n"
 
-#: src/newusers.c:440
+#: src/newusers.c:435
 #, c-format
 msgid "%s: can't open files\n"
 msgstr "%s: soubory nelze otevøít\n"
 
-#: src/newusers.c:485
+#: src/newusers.c:480
 #, c-format
 msgid "%s: line %d: invalid line\n"
 msgstr "%s: øádek %d: chybný øádek\n"
 
-#: src/newusers.c:503
+#: src/newusers.c:499
 #, c-format
 msgid "%s: line %d: can't create GID\n"
 msgstr "%s: øádek %d: nelze vytvoøit GID\n"
 
-#: src/newusers.c:519
+#: src/newusers.c:515
 #, c-format
 msgid "%s: line %d: can't create UID\n"
 msgstr "%s: øádek %d: nelze vytvoøit UID\n"
 
-#: src/newusers.c:531
+#: src/newusers.c:528
 #, c-format
 msgid "%s: line %d: cannot find user %s\n"
 msgstr "%s: øádek %d: u¾ivatele %s nelze nalézt\n"
 
-#: src/newusers.c:539
+#: src/newusers.c:537
 #, c-format
 msgid "%s: line %d: can't update password\n"
 msgstr "%s: øádek %d: heslo nelze aktualizovat\n"
 
-#: src/newusers.c:556
+#: src/newusers.c:555
 #, c-format
 msgid "%s: line %d: mkdir failed\n"
 msgstr "%s: øádek %d: volání mkdir selhalo\n"
 
-#: src/newusers.c:560
+#: src/newusers.c:561
 #, c-format
 msgid "%s: line %d: chown failed\n"
 msgstr "%s: øádek %d: volání chown selhalo\n"
 
-#: src/newusers.c:569
+#: src/newusers.c:571
 #, c-format
 msgid "%s: line %d: can't update entry\n"
 msgstr "%s: øádek %d: polo¾ku nelze aktualizovat\n"
 
-#: src/newusers.c:600
+#: src/newusers.c:603
 #, c-format
 msgid "%s: error updating files\n"
 msgstr "%s: chyba pøi aktualizaci souborù\n"
 
-#: src/passwd.c:239
+#: src/passwd.c:174
 #, c-format
-msgid "usage: %s [ -f | -s ] [ name ]\n"
-msgstr "Pou¾ití: %s [ -f | -s ] [ jméno ]\n"
+msgid "usage: %s [-f|-s] [name]\n"
+msgstr "Pou¾ití: %s [-f|-s] [jméno]\n"
 
-#: src/passwd.c:242
+#: src/passwd.c:178
 #, c-format
-msgid "       %s [ -x max ] [ -n min ] [ -w warn ] [ -i inact ] name\n"
-msgstr "       %s [ -x max ] [ -n min ] [ -w varování ] [ -i vypnutí ] jméno\n"
+msgid "       %s [-x max] [-n min] [-w warn] [-i inact] name\n"
+msgstr "       %s [-x max] [-n min] [-w varování] [-i vypnutí] jméno\n"
 
-#: src/passwd.c:245
-#, c-format
-msgid "       %s { -l | -u | -d | -S | -e } name\n"
+#: src/passwd.c:180
+#, fuzzy, c-format
+msgid "       %s {-l|-u|-d|-S|-e} name\n"
 msgstr "       %s { -l | -u | -d | -S | -e } jméno\n"
 
-#: src/passwd.c:347
+#: src/passwd.c:283
 #, c-format
 msgid "User %s has a TCFS key, his old password is required.\n"
 msgstr "U¾ivatel %s má TCFS klíè, je tøeba jeho staré heslo.\n"
 
-#: src/passwd.c:348
+#: src/passwd.c:286
 msgid "You can use -t option to force the change.\n"
 msgstr "Mù¾ete pou¾ít pøepínaè -t pro vynucení zmìny.\n"
 
-#: src/passwd.c:354
+#: src/passwd.c:292
 msgid "Old password: "
 msgstr "Staré heslo: "
 
-#: src/passwd.c:361
+#: src/passwd.c:301
 #, c-format
 msgid "Incorrect password for `%s'\n"
 msgstr "Chybné heslo pro `%s'\n"
 
-#: src/passwd.c:374
+#: src/passwd.c:314
 #, c-format
 msgid "Warning: user %s has a TCFS key.\n"
 msgstr "Varování: u¾ivatele %s má TCFS klíè.\n"
 
-#: src/passwd.c:392
+#: src/passwd.c:333
 #, c-format
 msgid ""
 "Enter the new password (minimum of %d, maximum of %d characters)\n"
@@ -1654,15 +1636,15 @@ 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"
 
-#: src/passwd.c:399
+#: src/passwd.c:339
 msgid "New password: "
 msgstr "Nové heslo: "
 
-#: src/passwd.c:409
+#: src/passwd.c:350
 msgid "Try again.\n"
 msgstr "Zkuste to znovu.\n"
 
-#: src/passwd.c:418
+#: src/passwd.c:361
 msgid ""
 "\n"
 "Warning: weak password (enter it again to use it anyway).\n"
@@ -1670,90 +1652,91 @@ msgstr ""
 "\n"
 "Varování: slabé heslo (pokud jej opravdu chcete pou¾ít, zadejte jej znovu).\n"
 
-#: src/passwd.c:427
+#: src/passwd.c:371
 msgid "They don't match; try again.\n"
 msgstr "Neshodují se; zkuste to znovu.\n"
 
-#: src/passwd.c:512 src/passwd.c:528
+#: src/passwd.c:451 src/passwd.c:469
 #, c-format
 msgid "The password for %s cannot be changed.\n"
 msgstr "Heslo pro %s nelze zmìnit.\n"
 
-#: src/passwd.c:556
+#: src/passwd.c:494
 #, c-format
 msgid "Sorry, the password for %s cannot be changed yet.\n"
 msgstr "Lituji, ale heslo pro %s nelze je¹tì zmìnit.\n"
 
-#: src/passwd.c:693
+#: src/passwd.c:614
 #, c-format
 msgid "%s: out of memory\n"
 msgstr "%s: do¹la pamì»\n"
 
-#: src/passwd.c:845
+#: src/passwd.c:769
 msgid "Cannot lock the TCFS key database; try again later\n"
 msgstr "Nelze zamknout databázi TCFS klíèù. Zkuste to pozdìji.\n"
 
-#: src/passwd.c:851
+#: src/passwd.c:777
 msgid "Cannot open the TCFS key database.\n"
 msgstr "Nelze otevøít databázi TCFS klíèù.\n"
 
-#: src/passwd.c:857
+#: src/passwd.c:785
 msgid "Error updating the TCFS key database.\n"
 msgstr "Chyba pøi aktualizaci databáze TCFS klíèù.\n"
 
-#: src/passwd.c:862
+#: src/passwd.c:792
 msgid "Cannot commit TCFS changes.\n"
 msgstr "Nelze zmìnit TCFS databázi.\n"
 
-#: src/passwd.c:1069
+#: src/passwd.c:975
 #, c-format
 msgid "%s: Cannot execute %s"
 msgstr "%s: %s nelze spustit"
 
-#: src/passwd.c:1176
+#: src/passwd.c:1077
 #, c-format
 msgid "%s: repository %s not supported\n"
 msgstr "%s: úlo¾na %s není podporována\n"
 
-#: src/passwd.c:1263
+#: src/passwd.c:1152
 #, c-format
 msgid "%s: Permission denied\n"
 msgstr "%s: pøístup odmítnut\n"
 
-#: src/passwd.c:1287
+#: src/passwd.c:1176
 #, c-format
 msgid "You may not change the password for %s.\n"
 msgstr "Nesmíte zmìnit heslo pro %s.\n"
 
-#: src/passwd.c:1352
+#: src/passwd.c:1242
 #, c-format
 msgid "Changing password for %s\n"
 msgstr "Mìním heslo u¾ivatele %s\n"
 
-#: src/passwd.c:1356
+#: src/passwd.c:1246
 #, c-format
 msgid "The password for %s is unchanged.\n"
 msgstr "Heslo u¾ivatele %s nebylo zmìnìno.\n"
 
-#: src/passwd.c:1412
+#: src/passwd.c:1297
 msgid "Password changed.\n"
 msgstr "Heslo bylo zmìnìno.\n"
 
-#: src/pwck.c:98
+#: src/pwck.c:87
 #, fuzzy, c-format
-msgid "Usage: %s [ -sqr ] [ passwd [ shadow ] ]\n"
-msgstr "Pou¾ití: %s [ -qr ] [ soubor s hesly[ soubor se stínovými hesly ] ]\n"
+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"
 
-#: src/pwck.c:100
+#: src/pwck.c:90
 #, fuzzy, c-format
-msgid "Usage: %s [ -sqr ] [ passwd ]\n"
-msgstr "Pou¾ití: %s [ -qr ] [ soubor s hesly ]\n"
+msgid "Usage: %s [-q] [-r] [-s] [passwd]\n"
+msgstr "Pou¾ití: %s [-q] [-r] [-s] [soubor s hesly]\n"
 
 #.
-#. * Tell the user this entire line is bogus and
-#. * ask them to delete it.
+#. * Tell the user this entire line is bogus and ask
+#. * them to delete it.
 #.
-#: src/pwck.c:304
+#: src/pwck.c:295
 msgid "invalid password file entry\n"
 msgstr "chybná polo¾ka v souboru s hesly\n"
 
@@ -1761,32 +1744,24 @@ msgstr "chybn
 #. * Tell the user this entry is a duplicate of
 #. * another and ask them to delete it.
 #.
-#: src/pwck.c:366
+#: src/pwck.c:357
 msgid "duplicate password entry\n"
 msgstr "duplikovaná polo¾ka v souboru s hesly\n"
 
-#: src/pwck.c:382
+#: src/pwck.c:373
 #, c-format
 msgid "invalid user name `%s'\n"
 msgstr "chybné u¾ivatelské jméno `%s'\n"
 
-#: src/pwck.c:392
-#, c-format
-msgid "user %s: bad UID (%d)\n"
-msgstr "u¾ivatel %s: chybné UID (%d)\n"
-
 #.
 #. * No primary group, just give a warning
 #.
-#: src/pwck.c:407
-#, c-format
-msgid "user %s: no group %d\n"
+#: src/pwck.c:388
+#, fuzzy, c-format
+msgid "user %s: no group %u\n"
 msgstr "u¾ivatel %s: skupina %d neexistuje\n"
 
-#.
-#. * Home directory doesn't exist, give a warning
-#.
-#: src/pwck.c:422
+#: src/pwck.c:404
 #, c-format
 msgid "user %s: directory %s does not exist\n"
 msgstr "u¾ivatel %s: adresáø %s neexistuje\n"
@@ -1794,16 +1769,16 @@ msgstr "u
 #.
 #. * Login shell doesn't exist, give a warning
 #.
-#: src/pwck.c:437
+#: src/pwck.c:420
 #, c-format
 msgid "user %s: program %s does not exist\n"
 msgstr "u¾ivatel %s: program %s neexistuje\n"
 
 #.
-#. * Tell the user this entire line is bogus and
-#. * ask them to delete it.
+#. * Tell the user this entire line is bogus and ask
+#. * them to delete it.
 #.
-#: src/pwck.c:473
+#: src/pwck.c:456
 msgid "invalid shadow password file entry\n"
 msgstr "chybná polo¾ka v souboru se stínovými hesly\n"
 
@@ -1811,7 +1786,7 @@ msgstr "chybn
 #. * Tell the user this entry is a duplicate of
 #. * another and ask them to delete it.
 #.
-#: src/pwck.c:535
+#: src/pwck.c:518
 msgid "duplicate shadow password entry\n"
 msgstr "duplikovaná polo¾ka v souboru se stínovými hesly\n"
 
@@ -1819,70 +1794,70 @@ msgstr "duplikovan
 #. * Tell the user this entry has no matching
 #. * /etc/passwd entry and ask them to delete it.
 #.
-#: src/pwck.c:559
+#: src/pwck.c:542
 msgid "no matching password file entry\n"
 msgstr "chybí polo¾ka v souboru s hesly\n"
 
-#: src/pwck.c:576
+#: src/pwck.c:560
 #, c-format
 msgid "user %s: last password change in the future\n"
 msgstr "u¾ivatel %s: poslední zmìna hesla v budoucnosti\n"
 
-#: src/pwconv.c:94 src/pwunconv.c:99
+#: src/pwconv.c:84 src/pwunconv.c:93
 #, c-format
 msgid "%s: can't lock passwd file\n"
 msgstr "%s: soubor s hesly nelze zamknout\n"
 
-#: src/pwconv.c:99 src/pwunconv.c:104
+#: src/pwconv.c:89 src/pwunconv.c:98
 #, c-format
 msgid "%s: can't open passwd file\n"
 msgstr "%s: soubor s hesly nelze otevøít\n"
 
-#: src/pwconv.c:126
+#: src/pwconv.c:117
 #, c-format
 msgid "%s: can't remove shadow entry for %s\n"
 msgstr "%s: polo¾ku souboru s hesly pro u¾ivatele %s nelze odstranit\n"
 
-#: src/pwconv.c:169
+#: src/pwconv.c:163
 #, c-format
 msgid "%s: can't update passwd entry for %s\n"
 msgstr "%s: polo¾ku souboru s hesly pro u¾ivatele %s nelze aktualizovat\n"
 
-#: src/pwconv.c:176
+#: src/pwconv.c:170
 #, c-format
 msgid "%s: can't update shadow file\n"
 msgstr "%s: soubor se stínovými hesly nelze aktualizovat\n"
 
-#: src/pwconv.c:180
+#: src/pwconv.c:175
 #, c-format
 msgid "%s: can't update passwd file\n"
 msgstr "%s: soubor s hesly nelze aktualizovat\n"
 
-#: src/pwunconv.c:53
+#: src/pwunconv.c:50
 #, c-format
 msgid "%s: Shadow passwords are not configured.\n"
 msgstr "%s: stínová hesla nejsou nakonfigurována\n"
 
-#: src/pwunconv.c:162
+#: src/pwunconv.c:160
 #, c-format
 msgid "%s: can't update entry for user %s\n"
 msgstr "%s: polo¾ku pro u¾ivatele %s nelze aktualizovat\n"
 
-#: src/pwunconv.c:179
+#: src/pwunconv.c:181
 #, c-format
 msgid "%s: can't delete shadow password file\n"
 msgstr "%s: nemù¾ete smazat soubor se stínovými hesly\n"
 
-#: src/su.c:140
+#: src/su.c:133
 msgid "Sorry."
 msgstr "Lituji."
 
-#: src/su.c:222
+#: src/su.c:216
 #, c-format
 msgid "%s: must be run from a terminal\n"
 msgstr "%s: musí být spu¹tìno z terminálu\n"
 
-#: src/su.c:310
+#: src/su.c:306
 #, c-format
 msgid "%s: pam_start: error %d\n"
 msgstr "%s: pam_start: chyba %d\n"
@@ -1892,18 +1867,17 @@ msgstr "%s: pam_start: chyba %d\n"
 msgid "Unknown id: %s\n"
 msgstr "Id %s je neznámé.\n"
 
-#. access denied (-1) or unexpected value
-#: src/su.c:371 src/su.c:386
+#: src/su.c:373 src/su.c:390
 #, c-format
 msgid "You are not authorized to su %s\n"
 msgstr "Nejste oprávnìn pou¾ívat su %s\n"
 
 #. require own password
-#: src/su.c:382
+#: src/su.c:385
 msgid "(Enter your own password.)"
 msgstr "(Zadejte va¹e heslo.)"
 
-#: src/su.c:413
+#: src/su.c:419
 #, c-format
 msgid ""
 "%s: %s\n"
@@ -1912,28 +1886,23 @@ msgstr ""
 "%s: %s\n"
 "(Ignoruji)\n"
 
-#: src/su.c:615
+#: src/su.c:626
 msgid "No shell\n"
 msgstr "®ádný shell\n"
 
 #. must be a password file!
-#: src/sulogin.c:136
+#: src/sulogin.c:132
 msgid "No password file\n"
 msgstr "Soubor s hesly neexistuje\n"
 
 #.
 #. * Fail secure
 #.
-#: src/sulogin.c:178
+#: src/sulogin.c:174
 msgid "No password entry for 'root'\n"
 msgstr "V databázi není polo¾ka pro u¾ivatele 'root'\n"
 
-#.
-#. * Here we prompt for the root password, or if no password is
-#. * given we just exit.
-#.
-#. get a password for root
-#: src/sulogin.c:192
+#: src/sulogin.c:190
 msgid ""
 "\n"
 "Type control-d to proceed with normal startup,\n"
@@ -1944,7 +1913,7 @@ msgstr ""
 "(nebo zadejte heslo u¾ivatele root pro údr¾bu systému):"
 
 #. make new environment active
-#: src/sulogin.c:241
+#: src/sulogin.c:243
 msgid "Entering System Maintenance Mode\n"
 msgstr "Vstupuji do re¾imu údr¾by systému\n"
 
@@ -1953,506 +1922,509 @@ msgstr "Vstupuji do re
 msgid "%s: rebuild the group database\n"
 msgstr "%s: vytvoøte znovu databázi skupin\n"
 
-#: src/useradd.c:258
+#: src/useradd.c:260
 #, c-format
 msgid "%s: rebuild the shadow group database\n"
 msgstr "%s: vytvoøte znovu databázi stínových skupin\n"
 
-#: src/useradd.c:295 src/usermod.c:974
+#: src/useradd.c:295 src/useradd.c:309 src/usermod.c:981 src/usermod.c:995
 #, c-format
 msgid "%s: invalid numeric argument `%s'\n"
 msgstr "%s: chybný numerický argument `%s'\n"
 
-#: src/useradd.c:351
+#: src/useradd.c:365
 #, c-format
 msgid "%s: unknown gid %s\n"
 msgstr "%s: gid %s je neznámé\n"
 
-#: src/useradd.c:358 src/useradd.c:660 src/useradd.c:1246 src/usermod.c:261
-#: src/usermod.c:1105
+#: src/useradd.c:373 src/useradd.c:676 src/useradd.c:1269 src/usermod.c:260
+#: src/usermod.c:1128
 #, c-format
 msgid "%s: unknown group %s\n"
 msgstr "%s: skupina %s je neznámá\n"
 
-#: src/useradd.c:426
-#, c-format
-msgid "group=%s,%ld  basedir=%s  skel=%s\n"
+#: src/useradd.c:440
+#, fuzzy, c-format
+msgid "group=%s,%u  basedir=%s  skel=%s\n"
 msgstr "skupina=%s,%ld základ. adr.=%s skel=%s\n"
 
-#: src/useradd.c:429
+#: src/useradd.c:444
 #, c-format
 msgid "shell=%s  "
 msgstr "shell=%s  "
 
-#: src/useradd.c:431
+#: src/useradd.c:446
 #, c-format
 msgid "inactive=%ld  expire=%s"
 msgstr "vypnutí=%ld   vypr¹ení=%s"
 
-#: src/useradd.c:435
-#, c-format
-msgid "GROUP=%ld\n"
+#: src/useradd.c:450
+#, fuzzy, c-format
+msgid "GROUP=%u\n"
 msgstr "SKUPINA=%ld\n"
 
-#: src/useradd.c:436
+#: src/useradd.c:451
 #, c-format
 msgid "HOME=%s\n"
 msgstr "DOMÁCÍ ADRESÁØ=%s\n"
 
-#: src/useradd.c:438
+#: src/useradd.c:453
 #, c-format
 msgid "INACTIVE=%ld\n"
 msgstr "VYPNUTÍ=%ld\n"
 
-#: src/useradd.c:439
+#: src/useradd.c:454
 #, c-format
 msgid "EXPIRE=%s\n"
 msgstr "VYPR©ENÍ=%s\n"
 
-#: src/useradd.c:441
+#: src/useradd.c:456
 #, c-format
 msgid "SHELL=%s\n"
 msgstr "INTERPRET PØÍKAZÙ=%s\n"
 
-#: src/useradd.c:442
+#: src/useradd.c:457
 #, c-format
 msgid "SKEL=%s\n"
 msgstr "SKELETON=%s\n"
 
-#: src/useradd.c:482
+#: src/useradd.c:498
 #, c-format
 msgid "%s: cannot create new defaults file\n"
 msgstr "%s: nemohu vytvoøit nový soubor s implicitními hodnotami\n"
 
-#: src/useradd.c:488
+#: src/useradd.c:503
 #, fuzzy, c-format
 msgid "%s: cannot open new defaults file\n"
 msgstr "%s: nemohu vytvoøit nový soubor s implicitními hodnotami\n"
 
-#: src/useradd.c:582 src/useradd.c:593
+#: src/useradd.c:596 src/useradd.c:608
 #, c-format
 msgid "%s: rename: %s"
 msgstr "%s: pøejmenovat: %s"
 
-#: src/useradd.c:680 src/usermod.c:281
+#: src/useradd.c:697 src/usermod.c:281
 #, c-format
 msgid "%s: group `%s' is a NIS group.\n"
 msgstr "%s: skupina `%s' je NIS skupinou\n"
 
-#: src/useradd.c:688 src/usermod.c:289
+#: src/useradd.c:706 src/usermod.c:290
 #, c-format
 msgid "%s: too many groups specified (max %d).\n"
 msgstr "%s: zadáno pøíli¹ mnoho skupin (max %d).\n"
 
-#: src/useradd.c:720 src/usermod.c:321
+#: src/useradd.c:738 src/usermod.c:322
 #, c-format
 msgid "usage: %s\t[-u uid [-o]] [-g group] [-G group,...] \n"
 msgstr "Pou¾ití: %s\t[-u uid [-o]] [-g skupina [-G skupina,...] \n"
 
-#: src/useradd.c:723
+#: src/useradd.c:742
 msgid "\t\t[-d home] [-s shell] [-c comment] [-m [-k template]]\n"
 msgstr "\t\t[-d domácí adr.] [-s shell] [-c komentáø] [-m [-k ¹ablona]]\n"
 
-#: src/useradd.c:726 src/usermod.c:327
+#: src/useradd.c:745 src/usermod.c:329
+#, fuzzy
 msgid "[-f inactive] [-e expire ] "
-msgstr "[-f vypnutí] [-e vypr¹ení ] "
+msgstr "[-f vypnutí] [-e vypr¹ení] "
 
-#: src/useradd.c:729
+#: src/useradd.c:748
 msgid "[-A program] "
 msgstr "[-A program] "
 
-#: src/useradd.c:731
+#: src/useradd.c:750
 msgid "[-p passwd] name\n"
 msgstr "[-p heslo]  jméno\n"
 
-#: src/useradd.c:733
+#: src/useradd.c:753
 #, c-format
 msgid "       %s\t-D [-g group] [-b base] [-s shell]\n"
 msgstr "       %s\t-D [-g skupina [-b základní adr.] [-s shell]\n"
 
-#: src/useradd.c:736
+#: src/useradd.c:756
+#, fuzzy
 msgid "\t\t[-f inactive] [-e expire ]\n"
-msgstr "\t\t[-f vypnutí] [-e vypr¹ení ]\n"
+msgstr "\t\t[-f vypnutí] [-e vypr¹ení]\n"
 
-#: src/useradd.c:833 src/usermod.c:479
+#: src/useradd.c:850 src/usermod.c:480
 #, c-format
 msgid "%s: error locking group file\n"
 msgstr "%s: chyba pøi zamykání souboru se skupinami\n"
 
-#: src/useradd.c:837 src/usermod.c:484
+#: src/useradd.c:855 src/usermod.c:486
 #, c-format
 msgid "%s: error opening group file\n"
 msgstr "%s: chyba pøi otevírání souboru se skupinami\n"
 
-#: src/useradd.c:842 src/usermod.c:591
+#: src/useradd.c:862 src/usermod.c:597
 #, c-format
 msgid "%s: error locking shadow group file\n"
 msgstr "%s: chyba pøi zamykání souboru se stínovými hesly\n"
 
-#: src/useradd.c:847 src/usermod.c:597
+#: src/useradd.c:867 src/usermod.c:603
 #, c-format
 msgid "%s: error opening shadow group file\n"
 msgstr "%s: chyba pøi otevírání souboru se stínovými hesly\n"
 
-#: src/useradd.c:1019
-#, c-format
-msgid "%s: uid %d is not unique\n"
-msgstr "%s: uid %d není jedineèné\n"
+#: src/useradd.c:1039
+#, fuzzy, c-format
+msgid "%s: uid %u is not unique\n"
+msgstr "%s uid %ld není jedineèné\n"
 
-#: src/useradd.c:1049
+#: src/useradd.c:1069
 #, c-format
 msgid "%s: can't get unique uid\n"
 msgstr "%s: nemohu získat jedineèné uid\n"
 
-#: src/useradd.c:1157 src/useradd.c:1301 src/usermod.c:1053 src/usermod.c:1064
-#: src/usermod.c:1074 src/usermod.c:1120 src/usermod.c:1164
+#: src/useradd.c:1174 src/useradd.c:1325 src/usermod.c:1075 src/usermod.c:1086
+#: src/usermod.c:1096 src/usermod.c:1143 src/usermod.c:1187
 #, c-format
 msgid "%s: invalid field `%s'\n"
 msgstr "%s: chybná polo¾ka `%s'\n"
 
-#: src/useradd.c:1171
+#: src/useradd.c:1189
 #, c-format
 msgid "%s: invalid base directory `%s'\n"
 msgstr "%s: chybný základní adresáø `%s'\n"
 
-#: src/useradd.c:1181
+#: src/useradd.c:1199
 #, c-format
 msgid "%s: invalid comment `%s'\n"
 msgstr "%s: chybný komentáø `%s'\n"
 
-#: src/useradd.c:1191
+#: src/useradd.c:1210
 #, c-format
 msgid "%s: invalid home directory `%s'\n"
 msgstr "%s: chybný domácí adresáø `%s'\n"
 
-#: src/useradd.c:1209 src/usermod.c:1087
+#: src/useradd.c:1229 src/usermod.c:1110
 #, c-format
 msgid "%s: invalid date `%s'\n"
 msgstr "%s: chybné datum `%s'\n"
 
-#: src/useradd.c:1221
+#: src/useradd.c:1242
 #, c-format
 msgid "%s: shadow passwords required for -e\n"
 msgstr "%s: pøepínaè -e vy¾aduje stínová hesla\n"
 
-#: src/useradd.c:1236
+#: src/useradd.c:1258
 #, c-format
 msgid "%s: shadow passwords required for -f\n"
 msgstr "%s: pøepínaè -f vy¾aduje stínová hesla\n"
 
-#: src/useradd.c:1310
+#: src/useradd.c:1336
 #, c-format
 msgid "%s: invalid shell `%s'\n"
 msgstr "%s: chybný shell `%s'\n"
 
-#: src/useradd.c:1351
+#: src/useradd.c:1377
 #, c-format
 msgid "%s: invalid user name `%s'\n"
 msgstr "%s: chybné u¾ivatelské jméno `%s'\n"
 
-#: src/useradd.c:1387 src/userdel.c:298 src/usermod.c:1232
+#: src/useradd.c:1413 src/userdel.c:298 src/usermod.c:1255
 #, c-format
 msgid "%s: cannot rewrite password file\n"
 msgstr "%s: soubor s hesly nelze pøepsat\n"
 
-#: src/useradd.c:1392 src/userdel.c:301 src/usermod.c:1237
+#: src/useradd.c:1420 src/userdel.c:303 src/usermod.c:1262
 #, c-format
 msgid "%s: cannot rewrite shadow password file\n"
 msgstr "%s: soubor se stínovými hesly nelze pøepsat\n"
 
-#: src/useradd.c:1432 src/userdel.c:365 src/usermod.c:1272
+#: src/useradd.c:1461 src/userdel.c:367 src/usermod.c:1296
 #, c-format
 msgid "%s: unable to lock password file\n"
 msgstr "%s: soubor s hesly nelze zamknout\n"
 
-#: src/useradd.c:1436 src/userdel.c:369 src/usermod.c:1276
+#: src/useradd.c:1466 src/userdel.c:372 src/usermod.c:1301
 #, c-format
 msgid "%s: unable to open password file\n"
 msgstr "%s: soubor s hesly nelze otevøít\n"
 
-#: src/useradd.c:1442 src/userdel.c:374 src/usermod.c:1281
+#: src/useradd.c:1474 src/userdel.c:379 src/usermod.c:1308
 #, c-format
 msgid "%s: cannot lock shadow password file\n"
 msgstr "%s: soubor se stínovými hesly nelze zamknout\n"
 
-#: src/useradd.c:1448 src/userdel.c:379 src/usermod.c:1286
+#: src/useradd.c:1481 src/userdel.c:385 src/usermod.c:1314
 #, c-format
 msgid "%s: cannot open shadow password file\n"
 msgstr "%s: soubor se stínovými hesly nelze otevøít\n"
 
-#: src/useradd.c:1547 src/usermod.c:1373
+#: src/useradd.c:1580 src/usermod.c:1405
 #, c-format
 msgid "%s: error adding authentication method\n"
 msgstr "%s: chyba pøi vytváøení ovìøovací metody\n"
 
-#: src/useradd.c:1570
+#: src/useradd.c:1604
 #, c-format
 msgid "%s: error adding new password entry\n"
 msgstr "%s: chyba pøi vytváøení nové polo¾ky v souboru s hesly\n"
 
-#: src/useradd.c:1585
+#: src/useradd.c:1618
 #, c-format
 msgid "%s: error updating password dbm entry\n"
 msgstr "%s: chyba pøi aktualizaci polo¾ky dbm databáze hesel\n"
 
-#: src/useradd.c:1601 src/usermod.c:1432
+#: src/useradd.c:1634 src/usermod.c:1471
 #, c-format
 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"
 
-#: src/useradd.c:1617 src/usermod.c:1447
+#: src/useradd.c:1650 src/usermod.c:1488
 #, c-format
 msgid "%s: error updating shadow passwd dbm entry\n"
 msgstr "%s: chyba pøi aktualizaci polo¾ky dbm databáze stínových hesel\n"
 
-#: src/useradd.c:1649
+#: src/useradd.c:1682
 #, c-format
 msgid "%s: cannot create directory %s\n"
 msgstr "%s: adresáø %s nelze vytvoøit\n"
 
-#: src/useradd.c:1772 src/usermod.c:1210
+#: src/useradd.c:1806 src/usermod.c:1233
 #, c-format
 msgid "%s: user %s exists\n"
 msgstr "%s: u¾ivatel %s ji¾ existuje\n"
 
-#: src/useradd.c:1784
+#: src/useradd.c:1821
 #, c-format
 msgid ""
 "%s: group %s exists - if you want to add this user to that group, use -g.\n"
 msgstr ""
 
-#: src/useradd.c:1815
+#: src/useradd.c:1854
 #, c-format
 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"
 
-#: src/userdel.c:133
+#: src/userdel.c:129
 #, c-format
 msgid "usage: %s [-r] name\n"
 msgstr "Pou¾ití: %s [-r] jméno\n"
 
-#: src/userdel.c:184 src/userdel.c:266
+#: src/userdel.c:181 src/userdel.c:267
 #, c-format
 msgid "%s: error updating group entry\n"
 msgstr "%s: polo¾ku souboru se skupinami nelze aktualizovat\n"
 
-#: src/userdel.c:194 src/userdel.c:275
+#: src/userdel.c:191 src/userdel.c:276
 #, c-format
 msgid "%s: cannot update dbm group entry\n"
 msgstr "%s: polo¾ku dbm databáze skupin nelze aktualizovat\n"
 
-#: src/userdel.c:221
+#: src/userdel.c:219
 #, c-format
 msgid "%s: cannot remove dbm group entry\n"
 msgstr "%s: polo¾ku dbm databáze skupin nelze odstranit\n"
 
-#: src/userdel.c:306
+#: src/userdel.c:308
 #, c-format
 msgid "%s: cannot rewrite TCFS key file\n"
 msgstr "%s: soubor s TCFS klíèi nelze pøepsat\n"
 
-#: src/userdel.c:386
+#: src/userdel.c:392
 #, c-format
 msgid "%s: cannot lock TCFS key file\n"
 msgstr "%s: soubor s TCFS klíèi nelze zamknout\n"
 
-#: src/userdel.c:390
+#: src/userdel.c:397
 #, c-format
 msgid "%s: cannot open TCFS key file\n"
 msgstr "%s: soubor s TCFS klíèi nelze otevøít\n"
 
-#: src/userdel.c:399
+#: src/userdel.c:408
 #, c-format
 msgid "%s: cannot open group file\n"
 msgstr "%s: soubor se skupinami nelze otevøít\n"
 
-#: src/userdel.c:409
+#: src/userdel.c:419
 #, c-format
 msgid "%s: cannot open shadow group file\n"
 msgstr "%s: soubor se stínovými skupinami nelze otevøít\n"
 
-#: src/userdel.c:440 src/userdel.c:455
+#: src/userdel.c:451 src/userdel.c:468
 #, c-format
 msgid "%s: error deleting authentication\n"
 msgstr "%s: chyba pøi odstraòování ovìøovací metody\n"
 
-#: src/userdel.c:464
+#: src/userdel.c:479
 #, c-format
 msgid "%s: error deleting password entry\n"
 msgstr "%s: chyba pøi odstraòování polo¾ky ze souboru s hesly\n"
 
-#: src/userdel.c:467
+#: src/userdel.c:485
 #, c-format
 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"
 
-#: src/userdel.c:476
+#: src/userdel.c:496
 #, c-format
 msgid "%s: error deleting TCFS entry\n"
 msgstr "%s: chyba pøi odstraòování TCFS polo¾ky\n"
 
-#: src/userdel.c:489
+#: src/userdel.c:510
 #, c-format
 msgid "%s: error deleting password dbm entry\n"
 msgstr "%s: chyba pøi odstraòování polo¾ky z dbm databáze hesel\n"
 
-#: src/userdel.c:508
+#: src/userdel.c:533
 #, c-format
 msgid "%s: error deleting shadow passwd dbm entry\n"
 msgstr "%s: chyba pøi odstraòování polo¾ky z dbm databáze stínových hesel\n"
 
-#: src/userdel.c:549
+#: src/userdel.c:569
 #, c-format
 msgid "%s: user %s is currently logged in\n"
 msgstr "%s: u¾ivatel %s je právì pøihlá¹en\n"
 
-#: src/userdel.c:666
+#: src/userdel.c:659
 #, c-format
 msgid "%s: warning: %s not owned by %s, not removing\n"
 msgstr "%s: varování: vlastníkem %s není %s, nema¾u jej\n"
 
-#: src/userdel.c:672
+#: src/userdel.c:666
 #, c-format
 msgid "%s: warning: can't remove "
 msgstr "%s: varování: nemohu smazat "
 
-#: src/userdel.c:791 src/usermod.c:1001
+#: src/userdel.c:758 src/usermod.c:1023
 #, c-format
 msgid "%s: user %s does not exist\n"
 msgstr "%s: u¾ivatel %s neexistuje\n"
 
-#: src/userdel.c:805 src/usermod.c:1017
+#: src/userdel.c:770 src/usermod.c:1039
 #, c-format
 msgid "%s: user %s is a NIS user\n"
 msgstr "%s: u¾ivatel %s je NIS u¾ivatelem\n"
 
-#: src/userdel.c:842
+#: src/userdel.c:799
 #, c-format
 msgid "%s: %s not owned by %s, not removing\n"
 msgstr "%s: vlastníkem %s není %s, nema¾u jej\n"
 
-#: src/userdel.c:865
+#: src/userdel.c:818
 #, 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"
 
-#: src/userdel.c:878
+#: src/userdel.c:830
 #, c-format
 msgid "%s: error removing directory %s\n"
 msgstr "%s: chyba pøi mazání adresáøe %s\n"
 
-#: src/usermod.c:324
+#: src/usermod.c:326
 msgid "\t\t[-d home [-m]] [-s shell] [-c comment] [-l new_name]\n"
 msgstr "\t\t[-d domácí adr. [-m]] [-s shell] [-c komentáø] [-l nové jméno]\n"
 
-#: src/usermod.c:330
+#: src/usermod.c:332
+#, fuzzy
 msgid "[-A {DEFAULT|program},... ] "
-msgstr "[-A {DEFAULT|program},... ] "
+msgstr "[-A {DEFAULT|program},...] "
 
-#: src/usermod.c:332
+#: src/usermod.c:334
 msgid "[-p passwd] [-L|-U] name\n"
 msgstr "[-p heslo] [-L|-U] jméno\n"
 
-#: src/usermod.c:511
+#: src/usermod.c:514
 #, c-format
 msgid "%s: out of memory in update_group\n"
 msgstr "%s nedostatek pamìti v update_group\n"
 
-#: src/usermod.c:634
+#: src/usermod.c:641
 #, c-format
 msgid "%s: out of memory in update_gshadow\n"
 msgstr "%s: nedostatek pamìti v update_gshadow\n"
 
-#: src/usermod.c:1187
+#: src/usermod.c:1210
 #, c-format
 msgid "%s: no flags given\n"
 msgstr "%s: ¾ádné pøepínaèe\n"
 
-#: src/usermod.c:1194
+#: src/usermod.c:1217
 #, 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"
 
-#: src/usermod.c:1215
-#, c-format
-msgid "%s: uid %ld is not unique\n"
+#: src/usermod.c:1239
+#, fuzzy, c-format
+msgid "%s: uid %lu is not unique\n"
 msgstr "%s uid %ld není jedineèné\n"
 
-#: src/usermod.c:1363
+#: src/usermod.c:1392
 #, c-format
 msgid "%s: error deleting authentication method\n"
 msgstr "%s: chyba pøi odstraòování ovìøovací metody\n"
 
-#: src/usermod.c:1383
+#: src/usermod.c:1418
 #, c-format
 msgid "%s: error changing authentication method\n"
 msgstr "%s: chyba pøi zmìnì ovìøovací metody\n"
 
-#: src/usermod.c:1400
+#: src/usermod.c:1436
 #, c-format
 msgid "%s: error changing password entry\n"
 msgstr "%s: chyba pøi zmìnì polo¾ky v souboru s hesly\n"
 
-#: src/usermod.c:1406
+#: src/usermod.c:1442
 #, c-format
 msgid "%s: error removing password entry\n"
 msgstr "%s: chyba pøi odstraòování polo¾ky ze souboru s hesly\n"
 
-#: src/usermod.c:1414
+#: src/usermod.c:1451
 #, c-format
 msgid "%s: error adding password dbm entry\n"
 msgstr "%s: chyba pøi pøidávání polo¾ky do dbm databáze hesel\n"
 
-#: src/usermod.c:1421
+#: src/usermod.c:1459
 #, c-format
 msgid "%s: error removing passwd dbm entry\n"
 msgstr "%s: chyba pøi odstraòování polo¾ky z dbm databáze hesel\n"
 
-#: src/usermod.c:1438
+#: src/usermod.c:1478
 #, c-format
 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"
 
-#: src/usermod.c:1453
+#: src/usermod.c:1495
 #, c-format
 msgid "%s: error removing shadow passwd dbm entry\n"
 msgstr "%s: chyba pøi odstraòování polo¾ky z dbm databáze stínových hesel\n"
 
-#: src/usermod.c:1484
+#: src/usermod.c:1524
 #, c-format
 msgid "%s: directory %s exists\n"
 msgstr "%s: adresáø %s ji¾ existuje\n"
 
-#: src/usermod.c:1491
+#: src/usermod.c:1533
 #, c-format
 msgid "%s: can't create %s\n"
 msgstr "%s: %s nelze vytvoøit\n"
 
-#: src/usermod.c:1497
+#: src/usermod.c:1539
 #, c-format
 msgid "%s: can't chown %s\n"
 msgstr "%s: volání chown pro %s selhalo\n"
 
-#: src/usermod.c:1513
+#: src/usermod.c:1556
 #, c-format
 msgid "%s: cannot rename directory %s to %s\n"
 msgstr "%s: adresáø %s nelze na %s pøejmenovat\n"
 
 #. better leave it alone
-#: src/usermod.c:1610
+#: src/usermod.c:1653
 #, c-format
 msgid "%s: warning: %s not owned by %s\n"
 msgstr "%s: varování: vlastníkem %s není %s\n"
 
-#: src/usermod.c:1616
+#: src/usermod.c:1659
 msgid "failed to change mailbox owner"
 msgstr "chyba pøi zmìnì vlastníka schránky"
 
-#: src/usermod.c:1623
+#: src/usermod.c:1667
 msgid "failed to rename mailbox"
 msgstr "chyba pøi pøejmenovávání schránky"
 
-#: src/vipw.c:102
+#: src/vipw.c:104
 #, c-format
 msgid ""
 "\n"
@@ -2461,20 +2433,20 @@ msgstr ""
 "\n"
 "%s: %s je beze zmìny\n"
 
-#: src/vipw.c:127
+#: src/vipw.c:132
 msgid "Couldn't lock file"
 msgstr "Soubor nelze zamknout"
 
-#: src/vipw.c:134
+#: src/vipw.c:141
 msgid "Couldn't make backup"
 msgstr "Zálohování nelze provést."
 
-#: src/vipw.c:187
+#: src/vipw.c:206
 #, 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"
 
-#: src/vipw.c:226
+#: src/vipw.c:244
 msgid ""
 "Usage:\n"
 "`vipw' edits /etc/passwd        `vipw -s' edits /etc/shadow\n"
@@ -2484,5 +2456,24 @@ msgstr ""
 "`vipw' edituje /etc/passwd        `vipw -s' edituje /etc/shadow\n"
 "`vigr' edituje /etc/group         `vigr -s' edituje /etc/gshadow\n"
 
+#~ msgid "%s: gid %ld is not unique\n"
+#~ msgstr "%s: gid %ld není jedineèné\n"
+
+#, fuzzy
+#~ msgid "unknown gid: %u\n"
+#~ msgstr "gid %d je neznámé\n"
+
+#~ msgid "%s: uid %d is not unique\n"
+#~ msgstr "%s: uid %d není jedineèné\n"
+
+#~ msgid "user %s: bad UID (%d)\n"
+#~ msgstr "u¾ivatel %s: chybné UID (%d)\n"
+
+#~ msgid "%s: no aging information present\n"
+#~ msgstr "%s: chybí informace\n"
+
+#~ msgid "group %s: bad GID (%d)\n"
+#~ msgstr "skupina %s: chybné GID (%d)\n"
+
 #~ msgid "%s: permission denied (shell).\n"
 #~ msgstr "%s: pøístup odmítnut (shell)\n"
index 056a226dbe9985764e27d9cb6ea040dd8002ddbf..0dd2f61dcb66dac8831a2ce57c292e929bc67bec 100644 (file)
Binary files a/po/el.gmo and b/po/el.gmo differ
index 84747fed7dd15221870298d026a6ee56e1c76db3..04bf402c81513e1ced5e0c63d2e3b84b803e7da6 100644 (file)
--- a/po/el.po
+++ b/po/el.po
@@ -6,7 +6,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: Shadow 980726\n"
-"POT-Creation-Date: 2001-09-08 07:36+0200\n"
+"POT-Creation-Date: 2002-01-06 16:13+0100\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: Nikos Mavroyanopoulos <nmav@i-net.paiko.gr>\n"
 "Language-Team: Hellenic <el@li.org>\n"
@@ -23,36 +23,36 @@ msgstr "
 msgid "Warning: too many groups\n"
 msgstr "Ðñïåéäïðïßçóç: ÐïëëÝò ïìÜäåò\n"
 
-#: libmisc/age.c:104
+#: libmisc/age.c:77
 msgid "Your password has expired."
 msgstr "Ôï óõíèçìáôéêü óáò Ý÷åé ëÞîåé."
 
-#: libmisc/age.c:107
+#: libmisc/age.c:80
 msgid "Your password is inactive."
 msgstr "Ôï óõíèçìáôéêü óáò åßíáé áíåíåñãü."
 
-#: libmisc/age.c:110
+#: libmisc/age.c:83
 msgid "Your login has expired."
 msgstr "Ï êùäéêüò åéóüäïõ óáò Ý÷åé ëÞîåé."
 
-#: libmisc/age.c:127
+#: libmisc/age.c:96
 msgid "  Contact the system administrator.\n"
 msgstr "  ÅðéêïéíùíÞóôå ìå ôïí äéá÷åéñéóôÞ ôïõ óõóôÞìáôïò.\n"
 
-#: libmisc/age.c:130
+#: libmisc/age.c:99
 msgid "  Choose a new password.\n"
 msgstr "   ÅðéëÝîôå Ýíá íÝï óõíèçìáôéêü.\n"
 
-#: libmisc/age.c:228
+#: libmisc/age.c:176
 #, c-format
 msgid "Your password will expire in %ld days.\n"
 msgstr "Ôï óõíèçìáôéêü óáò èá ëÞîåé óå %ld ìÝñåò.\n"
 
-#: libmisc/age.c:230
+#: libmisc/age.c:178
 msgid "Your password will expire tomorrow.\n"
 msgstr "Ôï óõíèçìáôéêü óáò èá ëÞîåé áýñéï.\n"
 
-#: libmisc/age.c:232
+#: libmisc/age.c:180
 msgid "Your password will expire today.\n"
 msgstr "Ôï óõíèçìáôéêü óáò èá ëÞîåé óÞìåñá.\n"
 
@@ -111,7 +111,7 @@ msgstr "
 msgid "You have mail."
 msgstr "¸÷åôå ãñÜììáôá."
 
-#: libmisc/obscure.c:281 src/passwd.c:309
+#: libmisc/obscure.c:281 src/passwd.c:244
 #, c-format
 msgid "Bad password: %s.  "
 msgstr "Êáêü óõíèçìáôéêü: %s.  "
@@ -126,12 +126,12 @@ msgstr "
 msgid "passwd: %s\n"
 msgstr "óõíèçìáôéêü: %s\n"
 
-#: libmisc/setupenv.c:205
+#: libmisc/setupenv.c:211
 #, c-format
 msgid "Unable to cd to \"%s\"\n"
 msgstr "Áäõíáìßá áëëáãÞò êáôáëüãïõ óôïí \"%s\"\n"
 
-#: libmisc/setupenv.c:213
+#: libmisc/setupenv.c:219
 msgid "No directory, logging in with HOME=/"
 msgstr "×ùñßò êáôÜëïãï, åéóáãùãÞ ìå ÌÇÔÑÉÊÏ_ÊÁÔÁËÏÃÏ=/"
 
@@ -181,26 +181,26 @@ msgstr "
 msgid "Dialup Password: "
 msgstr "Óõíèçìáôéêü ôçëåöùíéêÞò óýíäåóçò: "
 
-#: lib/getdef.c:253
+#: lib/getdef.c:276
 msgid "Could not allocate space for config info.\n"
 msgstr "Áäõíáìßá äÝóìåõóçò ÷þñïõ ãéá ðëçñïöïñßåò äéáìüñöùóçò.\n"
 
 #.
 #. * Item was never found.
 #.
-#: lib/getdef.c:307
+#: lib/getdef.c:330
 #, c-format
 msgid "configuration error - unknown item '%s' (notify administrator)\n"
 msgstr ""
 "óöÜëìá äéáìüñöùóçò - Üãíùóôï áíôéêåßìåíï '%s' (åéäïðïéåßóôå ôïí "
 "äéá÷åéñéóôÞ)\n"
 
-#: lib/getdef.c:394
+#: lib/getdef.c:417
 #, c-format
 msgid "error - lookup '%s' failed\n"
 msgstr "óöÜëìá - ç áíáæÞôçóç '%s' áðÝôõ÷å\n"
 
-#: lib/getdef.c:402
+#: lib/getdef.c:425
 #, c-format
 msgid "%s not found\n"
 msgstr "%s äåí âñÝèçêå\n"
@@ -209,7 +209,7 @@ msgstr "%s 
 #. * get the password from her, and set the salt for
 #. * the decryption from the group file.
 #.
-#: lib/pwauth.c:54 src/newgrp.c:305
+#: lib/pwauth.c:54 src/newgrp.c:348
 msgid "Password: "
 msgstr "Óõíèçìáôéêü: "
 
@@ -227,111 +227,106 @@ msgstr ""
 msgid "Unknown error %d"
 msgstr "Áãíùóôï óöÜëìá %d"
 
-#: src/chage.c:162
+#: src/chage.c:116
 #, c-format
 msgid ""
-"Usage: %s [ -l ] [ -m min_days ] [ -M max_days ] [ -W warn ]\n"
-"  [ -I inactive ] [ -E expire ] [ -d last_day ] user\n"
+"Usage: %s [-l] [-m min_days] [-M max_days] [-W warn]\n"
+"\t[-I inactive] [-E expire] [-d last_day] user\n"
 msgstr ""
-"×ñÞóç: %s [ -l ] [ -m åëá÷_ìÝñåò ] [ -M ìåã_ìÝñåò ] [ -W ðñïåéä. ]\n"
-"\t[ -I áíåíåñãü ] [ -E ëÞîç ] [ -d ôåëåõôáßá_ìÝñá ] ÷ñÞóôçò\n"
+"×ñÞóç: %s [-l] [-m åëá÷_ìÝñåò] [-M ìåã_ìÝñåò] [-W ðñïåéä.]\n"
+"\t[-I áíåíåñãü] [-E ëÞîç] [-d ôåëåõôáßá_ìÝñá] ÷ñÞóôçò\n"
 
-#: src/chage.c:164
+#: src/chage.c:122
 #, c-format
-msgid "Usage: %s [ -l ] [ -m min_days ] [ -M max_days ] [ -d last_day ] user\n"
+msgid "Usage: %s [-l] [-m min_days] [-M max_days] [-d last_day] user\n"
 msgstr ""
-"×ñÞóç: %s [ -l ] [ -m åëÜ÷_ìÝñåò ] [ -M ìåã_ìÝñåò ]\n"
-"[ -d ôåëåõôáßá_ìÝñá ] ÷ñÞóôçò\n"
+"×ñÞóç: %s [-l] [-m åëÜ÷_ìÝñåò] [-M ìåã_ìÝñåò] [-d ôåëåõôáßá_ìÝñá] ÷ñÞóôçò\n"
 
-#: src/chage.c:199
+#: src/chage.c:157
+#, fuzzy
 msgid ""
-"Enter the new value, or press return for the default\n"
-"\n"
-msgstr ""
-"ÅéóÜãåôå ôçí íÝá ôéìÞ, Þ ðéÝóôå `return' ãéá ôçí ðñïêáèïñéóìÝíç\n"
+"Enter the new value, or press ENTER for the default\n"
 "\n"
+msgstr "ÅéóÜãåôå ôçí íÝá ôéìÞ, Þ ðéÝóôå ENTER ãéá ôçí ðñïêáèïñéóìÝíç\n"
 
-#: src/chage.c:202
+#: src/chage.c:160
 msgid "Minimum Password Age"
 msgstr "Ìéêñüôåñç äéÜñêåéá óõíèçìáôéêïý"
 
-#: src/chage.c:207
+#: src/chage.c:166
 msgid "Maximum Password Age"
 msgstr "ÌÝãéóôç äéÜñêåéá óõíèçìáôéêïý"
 
-#: src/chage.c:213
+#: src/chage.c:174
 msgid "Last Password Change (YYYY-MM-DD)"
 msgstr "Ôåëåõôáßá áëëáãÞ óõíèçìáôéêïý (××××-ÌÌ-ÇÇ)"
 
-#: src/chage.c:222
+#: src/chage.c:183
 msgid "Password Expiration Warning"
 msgstr "Ðñïåéäïðïßçóç ëÞîçò óõíèçìáôéêïý"
 
-#: src/chage.c:227
+#: src/chage.c:189
 msgid "Password Inactive"
 msgstr "Áíåíåñãü óõíèçìáôéêü"
 
-#: src/chage.c:233
+#: src/chage.c:197
 msgid "Account Expiration Date (YYYY-MM-DD)"
 msgstr "Çìåñïìçíßá ËÞîçò Ëïãáñéáóìïý (××××-ÌÌ-ÇÇ)"
 
 #.
 #. * 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.
+#. * 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.
 #.
-#: src/chage.c:287
+#: src/chage.c:248
 #, c-format
 msgid "Minimum:\t%ld\n"
 msgstr "ÅëÜ÷éóôï:\t%ld\n"
 
-#: src/chage.c:288
+#: src/chage.c:249
 #, c-format
 msgid "Maximum:\t%ld\n"
 msgstr "ÌÝãéóôï:\t%ld\n"
 
-#: src/chage.c:290
+#: src/chage.c:251
 #, c-format
 msgid "Warning:\t%ld\n"
 msgstr "Ðñïåéäïðïßçóç:\t%ld\n"
 
-#: src/chage.c:291
+#: src/chage.c:252
 #, c-format
 msgid "Inactive:\t%ld\n"
 msgstr "Áíåíåñãüò:\t%ld\n"
 
 #.
-#. * 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.
+#. * 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.
 #.
-#: src/chage.c:300
+#: src/chage.c:260
 msgid "Last Change:\t\t"
 msgstr "Ôåëåõôáßá áëëáãÞ:\t\t"
 
-#: src/chage.c:302 src/chage.c:316 src/chage.c:333 src/chage.c:346
+#: src/chage.c:262 src/chage.c:276 src/chage.c:293 src/chage.c:306
 msgid "Never\n"
 msgstr "ÐïôÝ\n"
 
 #.
-#. * The password expiration date is determined from the last
-#. * change date plus the number of days the password is valid
-#. * for.
+#. * The password expiration date is determined from the last change
+#. * date plus the number of days the password is valid for.
 #.
-#: src/chage.c:314
+#: src/chage.c:273
 msgid "Password Expires:\t"
 msgstr "Ôï óõíèçìáôéêü ëÞãåé:\t"
 
 #.
-#. * 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.
+#. * 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.
 #.
-#: src/chage.c:330
+#: src/chage.c:290
 #, fuzzy
 msgid "Password Inactive:\t"
 msgstr "Áíåíåñãü óõíèçìáôéêü"
@@ -340,587 +335,590 @@ msgstr "
 #. * The account will expire on the given date regardless of the
 #. * password expiring or not.
 #.
-#: src/chage.c:344
+#: src/chage.c:304
 #, fuzzy
 msgid "Account Expires:\t"
 msgstr "Ôï óõíèçìáôéêü ëÞãåé:\t"
 
-#: src/chage.c:453 src/chpasswd.c:139 src/groupadd.c:536 src/groupdel.c:322
-#: src/groupmod.c:522 src/newusers.c:389 src/useradd.c:1721 src/userdel.c:738
-#: src/usermod.c:1687
-#, fuzzy, c-format
-msgid "%s: PAM authentication failed\n"
-msgstr "%s: ÓöÜëìá êáôÜ ôçí ðñïóèÞêç ìåèüäïõ åîáêñßâùóçò\n"
-
-#: src/chage.c:536
+#: src/chage.c:468
 #, c-format
 msgid "%s: do not include \"l\" with other flags\n"
 msgstr "%s: Íá ìçí óõìðåñéëáìâÜíåôå ôï \"l\" ìå ôéò Üëëåò åíäåßîåéò\n"
 
-#: src/chage.c:548 src/chage.c:660 src/login.c:532
+#: src/chage.c:481 src/chage.c:652 src/login.c:516
 #, c-format
 msgid "%s: permission denied\n"
 msgstr "%s: Üäåéá áðïññßöèçêå\n"
 
-#: src/chage.c:560 src/chpasswd.c:157
+#: src/chage.c:512 src/chpasswd.c:139 src/groupadd.c:529 src/groupdel.c:322
+#: src/groupmod.c:520 src/newusers.c:381 src/useradd.c:1754 src/userdel.c:717
+#: src/usermod.c:1732
+#, fuzzy, c-format
+msgid "%s: PAM authentication failed\n"
+msgstr "%s: ÓöÜëìá êáôÜ ôçí ðñïóèÞêç ìåèüäïõ åîáêñßâùóçò\n"
+
+#: src/chage.c:533 src/chpasswd.c:157
 #, c-format
 msgid "%s: can't lock password file\n"
 msgstr "%s: áäõíáìßá êëåéäþìáôïò ôïõ áñ÷åßïõ óõíèçìáôéêþí\n"
 
-#: src/chage.c:566 src/chpasswd.c:161
+#: src/chage.c:544 src/chpasswd.c:162
 #, c-format
 msgid "%s: can't open password file\n"
 msgstr "%s: áäõíáìßá áíïßãìáôïò ôïõ áñ÷åßïõ óõíèçìáôéêþí\n"
 
-#: src/chage.c:573
+#: src/chage.c:552
 #, c-format
 msgid "%s: unknown user: %s\n"
 msgstr "%s: Üãíùóôïò ÷ñÞóôçò: %s\n"
 
-#: src/chage.c:592
-#, c-format
-msgid "%s: can't lock shadow password file\n"
+#: src/chage.c:571
+#, fuzzy, c-format
+msgid "%s: can't lock shadow password file"
 msgstr "%s: áäõíáìßá êëåéäþìáôïò ôïõ áñ÷åßïõ óêéùäþí óõíèçìáôéêþí\n"
 
-#: src/chage.c:599
-#, c-format
-msgid "%s: can't open shadow password file\n"
+#: src/chage.c:579
+#, fuzzy, c-format
+msgid "%s: can't open shadow password file"
 msgstr "%s: áäõíáìßá áíïßãìáôïò ôïõ áñ÷åßïõ óêéùäþí óõíèçìáôéêþí\n"
 
-#: src/chage.c:681
+#: src/chage.c:674
 #, c-format
 msgid "Changing the aging information for %s\n"
 msgstr "ÁëëáãÞ ðëçñïöïñéþí ÷ñüíïõ ãéá ôïí %s\n"
 
-#: src/chage.c:683
+#: src/chage.c:677
 #, c-format
 msgid "%s: error changing fields\n"
 msgstr "%s: ÓöÜëìá êáôÜ ôçí áëëáãÞ ðåäßùí\n"
 
-#: src/chage.c:710 src/chage.c:773 src/pwunconv.c:174
+#: src/chage.c:705 src/chage.c:771 src/pwunconv.c:174
 #, c-format
 msgid "%s: can't update password file\n"
 msgstr "%s: áäõíáìßá áíáíÝùóçò áñ÷åßïõ óõíèçìáôéêþí\n"
 
-#: src/chage.c:740 src/pwunconv.c:169
+#: src/chage.c:737 src/pwunconv.c:168
 #, c-format
 msgid "%s: can't update shadow password file\n"
 msgstr "%s: áäõíáìßá áíáíÝùóçò ôïõ áñ÷åßïõ óêéùäþí óõíèçìáôéêþí\n"
 
-#: src/chage.c:789 src/chage.c:804 src/chfn.c:570 src/chsh.c:409
-#: src/passwd.c:825 src/passwd.c:926
+#: src/chage.c:789 src/chage.c:805 src/chfn.c:570 src/chsh.c:382
+#: src/passwd.c:747 src/passwd.c:859
 msgid "Error updating the DBM password entry.\n"
 msgstr ""
 "ÓöÜëìá êáôÜ ôçí áíáíÝùóç ôçò êáôá÷þñçóçò óôï dbm áñ÷åßï óõíèçìáôéêþí.\n"
 
-#: src/chage.c:821
+#: src/chage.c:823
 #, c-format
 msgid "%s: can't rewrite shadow password file\n"
 msgstr "%s: áäõíáìßá åðáíåããñáöÞò áñ÷åßïõ óêéùäþí óõíèçìáôéêþí\n"
 
-#: src/chage.c:835
+#: src/chage.c:838
 #, c-format
 msgid "%s: can't rewrite password file\n"
 msgstr "%s: áäõíáìßá åðáíåããñáöÞò áñ÷åßïõ óõíèçìáôéêþí\n"
 
-#: src/chage.c:853 src/chpasswd.c:333 src/groupadd.c:595 src/groupdel.c:409
-#: src/groupmod.c:606 src/newusers.c:625 src/useradd.c:1830 src/userdel.c:903
-#: src/usermod.c:1765
+#: src/chage.c:857 src/chpasswd.c:343 src/groupadd.c:590 src/groupdel.c:409
+#: src/groupmod.c:604 src/newusers.c:628 src/useradd.c:1869 src/userdel.c:849
+#: src/usermod.c:1811
 #, fuzzy, c-format
 msgid "%s: PAM chauthtok failed\n"
 msgstr "%s: áäõíáìßá îåêëåéäþìáôïò áñ÷åßïõ\n"
 
-#: src/chage.c:905
-#, c-format
-msgid "%s: no aging information present\n"
-msgstr "%s: Äåí õðÜñ÷ïõí ðëçñïöïñßåò ãÞñáíóçò\n"
-
-#: src/chfn.c:107
+#: src/chfn.c:83
 #, c-format
 msgid ""
-"Usage: %s [ -f full_name ] [ -r room_no ] [ -w work_ph ]\n"
-"\t[ -h home_ph ] [ -o other ] [ user ]\n"
+"Usage: %s [-f full_name] [-r room_no] [-w work_ph]\n"
+"\t[-h home_ph] [-o other] [user]\n"
 msgstr ""
-"Usage: %s [ -f ðëÞñåò_üíïìá ] [ -r áñßèì_äùìáôßïõ ] [ -w ôçë_åñãáóßáò ]\n"
-"\t[ -h ôçë_ïéêßáò ] [ -o Üëëï ] [ ÷ñÞóôçò ]\n"
+"Usage: %s [-f ðëÞñåò_üíïìá] [-r áñßèì_äùìáôßïõ] [-w ôçë_åñãáóßáò]\n"
+"\t[-h ôçë_ïéêßáò] [-o Üëëï] [÷ñÞóôçò]\n"
 
-#: src/chfn.c:111
+#: src/chfn.c:88
 #, c-format
-msgid ""
-"Usage: %s [ -f full_name ] [ -r room_no ] [ -w work_ph ] [ -h home_ph ]\n"
+msgid "Usage: %s [-f full_name] [-r room_no] [-w work_ph] [-h home_ph]\n"
 msgstr ""
-"×ñÞóç: %s [ -f ðëÞñåò_üíïìá ] [ -r áñéèì_äùìáôßïõ ] [ -w ôçë_äùìáôßïõ ]\n"
-"[ -h ôçë_ïéêßáò ]\n"
+"×ñÞóç: %s [-f ðëÞñåò_üíïìá] [-r áñéèì_äùìáôßïõ] [-w ôçë_äùìáôßïõ]\n"
+"[-h ôçë_ïéêßáò]\n"
 
-#: src/chfn.c:163 src/chsh.c:119
-msgid "Enter the new value, or press return for the default\n"
-msgstr "ÅéóÜãåôå ôçí íÝá ôéìÞ, Þ ðéÝóôå `return' ãéá ôçí ðñïêáèïñéóìÝíç\n"
+#: src/chfn.c:139
+#, fuzzy
+msgid "Enter the new value, or press ENTER for the default\n"
+msgstr ""
+"ÅéóÜãåôå ôçí íÝá ôéìÞ, Þ ðéÝóôå ENTER ãéá ôçí ðñïêáèïñéóìÝíç\n"
+"\n"
 
-#: src/chfn.c:166
+#: src/chfn.c:142
 msgid "Full Name"
 msgstr "ÐëÞñåò üíïìá"
 
-#: src/chfn.c:168
+#: src/chfn.c:144
 #, c-format
 msgid "\tFull Name: %s\n"
 msgstr "\tÐëÞñåò ¼íïìá: %s\n"
 
-#: src/chfn.c:171
+#: src/chfn.c:147
 msgid "Room Number"
 msgstr "Áñéèìüò äùìáôßïõ"
 
-#: src/chfn.c:173
+#: src/chfn.c:149
 #, c-format
 msgid "\tRoom Number: %s\n"
 msgstr "\tÁñéèìüò Äùìáôßïõ: %s\n"
 
-#: src/chfn.c:176
+#: src/chfn.c:152
 msgid "Work Phone"
 msgstr "ÔçëÝöùíï Åñãáóßáò"
 
-#: src/chfn.c:178
+#: src/chfn.c:154
 #, c-format
 msgid "\tWork Phone: %s\n"
 msgstr "\tÔçëÝöùíï Åñãáóßáò: %s\n"
 
-#: src/chfn.c:181
+#: src/chfn.c:157
 msgid "Home Phone"
 msgstr "ÔçëÝöùíï Ïéêßáò"
 
-#: src/chfn.c:183
+#: src/chfn.c:159
 #, c-format
 msgid "\tHome Phone: %s\n"
 msgstr "\tÔçëÝöùíï ïéêßáò: %s\n"
 
-#: src/chfn.c:186
+#: src/chfn.c:162
 msgid "Other"
 msgstr "Áëëï"
 
-#: src/chfn.c:298 src/chfn.c:306 src/chfn.c:314 src/chfn.c:322 src/chfn.c:330
-#: src/chfn.c:391 src/passwd.c:1226
+#: src/chfn.c:271 src/chfn.c:281 src/chfn.c:291 src/chfn.c:301 src/chfn.c:311
+#: src/chfn.c:379 src/passwd.c:1115
 #, c-format
 msgid "%s: Permission denied.\n"
 msgstr "%s: ¶äåéá áðïññßöèçêå.\n"
 
-#: src/chfn.c:351 src/chsh.c:224 src/passwd.c:1277
+#: src/chfn.c:332 src/chsh.c:190 src/passwd.c:1165
 #, c-format
 msgid "%s: Unknown user %s\n"
 msgstr "%s: Áãíùóôïò ï ÷ñÞóôçò %s\n"
 
-#: src/chfn.c:357 src/chsh.c:232 src/passwd.c:1207
+#: src/chfn.c:341 src/chsh.c:198 src/passwd.c:1096
 #, c-format
 msgid "%s: Cannot determine your user name.\n"
 msgstr "%s: Äåí åßíáé äõíáôüí íá êáèïñéóôåß ôï üíïìá ÷ñÞóôç óáò.\n"
 
-#: src/chfn.c:373 src/chsh.c:250
+#: src/chfn.c:358 src/chsh.c:215
 #, c-format
 msgid "%s: cannot change user `%s' on NIS client.\n"
 msgstr "%s: áäõíáìßá áëëáãÞò ÷ñÞóôç `%s' óôïí NIS åîõðçñåôïýìåíï.\n"
 
-#: src/chfn.c:378 src/chsh.c:257
+#: src/chfn.c:366 src/chsh.c:223
 #, c-format
 msgid "%s: `%s' is the NIS master for this client.\n"
 msgstr "%s: `%s' åßíáé ï êýñéïò äéáêïìéóôÞò NIS ãé'áõôüí ôïí åîõðçñåôïýìåíï.\n"
 
-#: src/chfn.c:453
+#: src/chfn.c:441
 #, c-format
 msgid "Changing the user information for %s\n"
 msgstr "ÁëëáãÞ ðëçñïöïñéþí ÷ñÞóôç ãéá ôïí %s\n"
 
-#: src/chfn.c:462
+#: src/chfn.c:450
 #, c-format
 msgid "%s: invalid name: \"%s\"\n"
 msgstr "%s: Ìç Ýãêõñï üíïìá: `%s'\n"
 
-#: src/chfn.c:467
+#: src/chfn.c:456
 #, c-format
 msgid "%s: invalid room number: \"%s\"\n"
 msgstr "%s: Ìç Ýãêõñïò áñéèìüò äùìáôßïõ: `%s'\n"
 
-#: src/chfn.c:472
+#: src/chfn.c:462
 #, c-format
 msgid "%s: invalid work phone: \"%s\"\n"
 msgstr "%s: Ìç Ýãêõñï ôçëÝöùíï åñãáóßáò: `%s'\n"
 
-#: src/chfn.c:477
+#: src/chfn.c:468
 #, c-format
 msgid "%s: invalid home phone: \"%s\"\n"
 msgstr "%s: Ìç Ýãêõñï ôçëÝöùíï ïéêßáò: `%s'\n"
 
-#: src/chfn.c:482
+#: src/chfn.c:475
 #, c-format
 msgid "%s: \"%s\" contains illegal characters\n"
 msgstr "%s: \"%s\" ðåñéÝ÷åé ìç Ýãêõñïõò ÷áñáêôÞñåò\n"
 
-#: src/chfn.c:494
+#: src/chfn.c:488
 #, c-format
 msgid "%s: fields too long\n"
 msgstr "%s: Ðïëý ìáêñéÜ ðåäßá\n"
 
-#: src/chfn.c:509 src/chsh.c:347 src/gpasswd.c:582 src/passwd.c:1388
+#: src/chfn.c:504 src/chsh.c:316 src/gpasswd.c:570 src/passwd.c:1277
 msgid "Cannot change ID to root.\n"
 msgstr "Áäõíáìßá áëëáãÞò ôáõôüôçôáò ÷ñÞóôç óå root.\n"
 
-#: src/chfn.c:522 src/chsh.c:361 src/passwd.c:735 src/passwd.c:880
+#: src/chfn.c:519 src/chsh.c:331 src/passwd.c:656 src/passwd.c:811
 msgid "Cannot lock the password file; try again later.\n"
 msgstr "Áäõíáìßá êëåéäþìáôïò ôïõ áñ÷åßïõ óõíèçìáôéêþí. ÄïêéìÜóôå áñãüôåñá.\n"
 
-#: src/chfn.c:528 src/chsh.c:367 src/passwd.c:740 src/passwd.c:885
+#: src/chfn.c:525 src/chsh.c:337 src/passwd.c:661 src/passwd.c:816
 msgid "Cannot open the password file.\n"
 msgstr "Áäõíáìßá áíïßãìáôïò ôïõ áñ÷åßïõ óõíèçìáôéêþí.\n"
 
-#: src/chfn.c:545 src/chsh.c:382 src/passwd.c:746 src/usermod.c:1320
+#: src/chfn.c:542 src/chsh.c:352 src/passwd.c:667 src/usermod.c:1348
 #, c-format
 msgid "%s: %s not found in /etc/passwd\n"
 msgstr "%s: Ï %s äåí âñÝèçêå óôï /etc/passwd\n"
 
-#: src/chfn.c:562 src/chsh.c:401 src/passwd.c:819 src/passwd.c:920
-#: src/passwd.c:960
+#: src/chfn.c:561 src/chsh.c:373 src/passwd.c:740 src/passwd.c:852
 msgid "Error updating the password entry.\n"
 msgstr "ÓöÜëìá êáôÜ ôçí áíáíÝùóç êáôá÷þñçóçò óôï áñ÷åßï óõíèçìáôéêþí.\n"
 
-#: src/chfn.c:585 src/chsh.c:424 src/passwd.c:832 src/passwd.c:933
+#: src/chfn.c:585 src/chsh.c:397 src/passwd.c:755 src/passwd.c:867
 msgid "Cannot commit password file changes.\n"
 msgstr "Áäõíáìßá åéóáãùãÞò ôùí áëëáãþí óôï áñ÷åßï óõíèçìáôéêþí.\n"
 
-#: src/chfn.c:592 src/chsh.c:431
+#: src/chfn.c:592 src/chsh.c:404
 msgid "Cannot unlock the password file.\n"
 msgstr "Áäõíáìßá îåêëåéäþìáôïò ôïõ áñ÷åßïõ óõíèçìáôéêþí\n"
 
-#: src/chpasswd.c:69
+#: src/chpasswd.c:66
 #, c-format
 msgid "usage: %s [-e]\n"
 msgstr "÷ñÞóç: %s [-e]\n"
 
-#: src/chpasswd.c:169 src/pwconv.c:104
+#: src/chpasswd.c:171 src/pwconv.c:94
 #, c-format
 msgid "%s: can't lock shadow file\n"
 msgstr "%s: áäõíáìßá êëåéäþìáôïò ôïõ áñ÷åßïõ óêéùäþí óõíèçìáôéêþí\n"
 
-#: src/chpasswd.c:174 src/gpasswd.c:608 src/pwconv.c:109 src/pwunconv.c:109
-#: src/pwunconv.c:114
+#: src/chpasswd.c:177 src/gpasswd.c:596 src/pwconv.c:99 src/pwunconv.c:103
+#: src/pwunconv.c:108
 #, c-format
 msgid "%s: can't open shadow file\n"
 msgstr "%s: áäõíáìßá áíïßãìáôïò ôïõ áñ÷åßïõ óêéùäþí óõíèçìáôéêþí\n"
 
-#: src/chpasswd.c:196 src/newusers.c:465
+#: src/chpasswd.c:200 src/newusers.c:460
 #, c-format
 msgid "%s: line %d: line too long\n"
 msgstr "%s: ãñáììÞ %d: ðïëý ìåãÜëç ãñáììÞ\n"
 
-#: src/chpasswd.c:216
+#: src/chpasswd.c:220
 #, c-format
 msgid "%s: line %d: missing new password\n"
 msgstr "%s: ãñáììÞ %d: Ýëëåéøç íÝïõ óõíèçìáôéêïý\n"
 
-#: src/chpasswd.c:232
+#: src/chpasswd.c:237
 #, c-format
 msgid "%s: line %d: unknown user %s\n"
 msgstr "%s: ãñáììÞ %d: Üãíùóôïò ÷ñÞóôçò %s\n"
 
-#: src/chpasswd.c:284
+#: src/chpasswd.c:290
 #, c-format
 msgid "%s: line %d: cannot update password entry\n"
 msgstr "%s: ãñáììÞ %d: áäõíáìßá áíáíÝùóçò êáôá÷þñçóçò óõíèçìáôéêïý\n"
 
-#: src/chpasswd.c:300 src/newusers.c:585
+#: src/chpasswd.c:307 src/newusers.c:588
 #, c-format
 msgid "%s: error detected, changes ignored\n"
 msgstr "%s: Áíé÷íÝõôçêå óöÜëìá, ïé áëëáãÝò áãíïÞèçêáí\n"
 
-#: src/chpasswd.c:311
+#: src/chpasswd.c:319
 #, c-format
 msgid "%s: error updating shadow file\n"
 msgstr ""
 "%s: ÓöÜëìá êáôÜ ôçí áíáíÝùóç êáôá÷ùñÞóåùí óôï áñ÷åßï óêéùäþí óõíèçìáôéêþí\n"
 
-#: src/chpasswd.c:319
+#: src/chpasswd.c:328
 #, c-format
 msgid "%s: error updating password file\n"
 msgstr "%s: ÓöÜëìá êáôÜ ôçí áíáíÝùóç êáôá÷ùñÞóåùí óôï áñ÷åßï óõíèçìáôéêþí\n"
 
-#: src/chsh.c:105
+#: src/chsh.c:75
 #, c-format
-msgid "Usage: %s [ -s shell ] [ name ]\n"
-msgstr "×ñÞóç: %s [ -s öëïéüò ] [ üíïìá ]\n"
+msgid "Usage: %s [-s shell] [name]\n"
+msgstr "×ñÞóç: %s [-s öëïéüò] [üíïìá]\n"
 
-#: src/chsh.c:120
+#: src/chsh.c:89
+#, fuzzy
+msgid "Enter the new value, or press return for the default\n"
+msgstr ""
+"ÅéóÜãåôå ôçí íÝá ôéìÞ, Þ ðéÝóôå ENTER ãéá ôçí ðñïêáèïñéóìÝíç\n"
+"\n"
+
+#: src/chsh.c:90
 msgid "Login Shell"
 msgstr "ÊÝëõöïò Åéóüäïõ"
 
-#: src/chsh.c:273 src/chsh.c:286
+#: src/chsh.c:239 src/chsh.c:253
 #, c-format
 msgid "You may not change the shell for %s.\n"
 msgstr "Äåí ìðïñåßôå íá áëëÜîåôå ôï öëïéü ãéá ôï(í) %s.\n"
 
-#: src/chsh.c:315
+#: src/chsh.c:282
 #, c-format
 msgid "Changing the login shell for %s\n"
 msgstr "ÁëëÜãÞ ôïõ öëïéïý ãéá ôïí %s\n"
 
-#: src/chsh.c:327
+#: src/chsh.c:294
 #, c-format
 msgid "%s: Invalid entry: %s\n"
 msgstr "%s: Ìç Ýãêõñç êáôá÷þñçóç: %s\n"
 
-#: src/chsh.c:332
+#: src/chsh.c:301
 #, c-format
 msgid "%s is an invalid shell.\n"
 msgstr "%s äåí åßíáé Ýãêõñïò öëïéüò.\n"
 
-#: src/dpasswd.c:69
+#: src/dpasswd.c:52
 #, c-format
-msgid "Usage: %s [ -(a|d) ] shell\n"
-msgstr "×ñÞóç: %s [ -(ald) ] öëïéüò\n"
+msgid "Usage: %s [-(a|d)] shell\n"
+msgstr "×ñÞóç: %s [-(ald)] öëïéüò\n"
 
-#: src/dpasswd.c:134
+#: src/dpasswd.c:115
 msgid "Shell password: "
 msgstr "Óõíèçìáôéêü öëïéïý: "
 
-#: src/dpasswd.c:140
+#: src/dpasswd.c:121
 msgid "re-enter Shell password: "
 msgstr "ÅðáíåéóÜãåôå ôï óõíèçìáôéêü öëïéïý: "
 
-#: src/dpasswd.c:147
+#: src/dpasswd.c:129
 #, c-format
 msgid "%s: Passwords do not match, try again.\n"
 msgstr "%s: Ôá óõíèçìáôéêÜ äåí ôáéñéÜæïõí, äïêéìÜóôå îáíÜ.\n"
 
-#: src/dpasswd.c:167
+#: src/dpasswd.c:149
 #, c-format
 msgid "%s: can't create %s"
 msgstr "%s: áäõíáìßá äçìéïõñãßáò ôïõ %s"
 
-#: src/dpasswd.c:172
+#: src/dpasswd.c:155
 #, c-format
 msgid "%s: can't open %s"
 msgstr "%s: áäõíáìßá áíïßãìáôïò ôïõ %s"
 
-#: src/dpasswd.c:200
+#: src/dpasswd.c:183
 #, c-format
 msgid "%s: Shell %s not found.\n"
 msgstr "%s: Ï öëïéüò %s äåí âñÝèçêå.\n"
 
-#: src/expiry.c:84
-msgid "Usage: expiry { -f | -c }\n"
+#: src/expiry.c:59
+#, fuzzy
+msgid "Usage: expiry {-f|-c}\n"
 msgstr "×ñÞóç: expiry { -f | -c }\n"
 
-#: src/expiry.c:137
+#: src/expiry.c:113
 #, c-format
 msgid "%s: WARNING!  Must be set-UID root!\n"
 msgstr ""
 "%s: ÐÑÏÓÏ×Ç!  ÐñÝðåé íá Ý÷åé ôåèåß ôï bit ðáñá÷þñçóçò ôáõôüôçôáò root!\n"
 
-#: src/expiry.c:148
+#: src/expiry.c:124
 #, c-format
 msgid "%s: unknown user\n"
 msgstr "%s: Üãíùóôïò ÷ñÞóôçò\n"
 
-#: src/faillog.c:79
+#: src/faillog.c:77
 #, c-format
 msgid "usage: %s [-a|-u user] [-m max] [-r] [-t days] [-l locksecs]\n"
 msgstr ""
 "÷ñÞóç: %s [-a|-u ÷ñÞóôçò] [-m ìåã] [-r] [-t ìÝñåò] [-l äåõôåñüëåðôá_êëåéä]\n"
 
-#: src/faillog.c:134 src/lastlog.c:103
+#: src/faillog.c:131 src/lastlog.c:96
 #, c-format
 msgid "Unknown User: %s\n"
 msgstr "Áãíùóôïò ÷ñÞóôçò: %s\n"
 
-#: src/faillog.c:215
+#: src/faillog.c:212
 msgid "Username   Failures  Maximum  Latest\n"
 msgstr "¼íïìá_×ñÞóôç Áðïôõ÷ßåò ÌÝãéóôï Ôåëåõôáßá\n"
 
-#: src/faillog.c:232
+#: src/faillog.c:229
 #, c-format
 msgid "  %s on %s"
 msgstr "  %s óôï %s"
 
-#: src/faillog.c:236
+#: src/faillog.c:233
 #, c-format
 msgid " [%lds left]"
 msgstr " [%lds áðÝìåéíáí]"
 
-#: src/faillog.c:239
+#: src/faillog.c:237
 #, c-format
 msgid " [%lds lock]"
 msgstr " [%lds êëåßäùìá]"
 
-#: src/gpasswd.c:89
+#: src/gpasswd.c:78
 #, c-format
 msgid "usage: %s [-r|-R] group\n"
 msgstr "÷ñÞóç: %s [-r|-R] ïìÜäá\n"
 
-#: src/gpasswd.c:90
+#: src/gpasswd.c:79
 #, c-format
 msgid "       %s [-a user] group\n"
 msgstr "       %s [-a ÷ñÞóôçò] ïìÜäá\n"
 
-#: src/gpasswd.c:91
+#: src/gpasswd.c:80
 #, c-format
 msgid "       %s [-d user] group\n"
 msgstr "       %s [-d ÷ñÞóôçò] ïìÜäá\n"
 
-#: src/gpasswd.c:93
+#: src/gpasswd.c:83
 #, c-format
 msgid "       %s [-A user,...] [-M user,...] group\n"
 msgstr "       %s [-A ÷ñÞóôçò,...] [-M ÷ñÞóôçò,...] ïìÜäá\n"
 
-#: src/gpasswd.c:96
+#: src/gpasswd.c:85
 #, c-format
 msgid "       %s [-M user,...] group\n"
 msgstr "       %s [-M ÷ñÞóôçò,...] ïìÜäá\n"
 
-#: src/gpasswd.c:160 src/gpasswd.c:245
+#: src/gpasswd.c:146 src/gpasswd.c:230
 #, c-format
 msgid "%s: unknown user %s\n"
 msgstr "%s: Üãíùóôïò ÷ñÞóôçò %s\n"
 
-#: src/gpasswd.c:172
+#: src/gpasswd.c:157
 msgid "Permission denied.\n"
 msgstr "¶äåéá áðïññßöèçêå.\n"
 
-#: src/gpasswd.c:257
+#: src/gpasswd.c:243
 #, c-format
 msgid "%s: shadow group passwords required for -A\n"
 msgstr "%s: óêéþäç óõíèçìáôéêÜ ïìÜäùí áðáéôïýíôáé ãéá ôï -A\n"
 
-#: src/gpasswd.c:308
+#: src/gpasswd.c:294
 msgid "Who are you?\n"
 msgstr "Ðïéïò åßóáé;\n"
 
-#: src/gpasswd.c:328 src/newgrp.c:251
+#: src/gpasswd.c:313 src/newgrp.c:297
 #, c-format
 msgid "unknown group: %s\n"
 msgstr "Üãíùóôç ïìÜäá: %s\n"
 
-#: src/gpasswd.c:436
+#: src/gpasswd.c:422
 #, c-format
 msgid "Adding user %s to group %s\n"
 msgstr "ÐñïóèÞêç ôïõ ÷ñÞóôç %s óôçí ïìÜäá %s\n"
 
-#: src/gpasswd.c:453
+#: src/gpasswd.c:440
 #, c-format
 msgid "Removing user %s from group %s\n"
 msgstr "ÄéáãñÜöç ôïõ ÷ñÞóôç %s áðü ôçí ïìÜäá %s\n"
 
-#: src/gpasswd.c:466
+#: src/gpasswd.c:454
 #, c-format
 msgid "%s: unknown member %s\n"
 msgstr "%s: Üãíùóôï ìÝëïò %s\n"
 
-#: src/gpasswd.c:513
+#: src/gpasswd.c:501
 #, c-format
 msgid "%s: Not a tty\n"
 msgstr "%s: Äåí åßíáé tty\n"
 
 #.
-#. * 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.
+#. * 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.
 #.
-#: src/gpasswd.c:535
+#: src/gpasswd.c:522
 #, c-format
 msgid "Changing the password for group %s\n"
 msgstr "ÁëëáãÞ ôïõ óõíèÞìáôïò ãéá ôçí ïìÜäá %s\n"
 
-#: src/gpasswd.c:538
+#: src/gpasswd.c:525
 msgid "New Password: "
 msgstr "ÍÝï Óõíèçìáôéêü: "
 
-#: src/gpasswd.c:543 src/passwd.c:422
+#: src/gpasswd.c:530 src/passwd.c:365
 msgid "Re-enter new password: "
 msgstr "ÅðáíåéóÜãåôå ôï íÝï óõíèçìáôéêü: "
 
-#: src/gpasswd.c:555
+#: src/gpasswd.c:542
 msgid "They don't match; try again"
 msgstr "Äåí ôáéñéÜæïõí. ÄïêéìÜóôå îáíÜ"
 
-#: src/gpasswd.c:559
+#: src/gpasswd.c:546
 #, c-format
 msgid "%s: Try again later\n"
 msgstr "%s: ÎáíáäïêéìÜóôå áñãüôåñá\n"
 
-#: src/gpasswd.c:590
+#: src/gpasswd.c:578
 #, c-format
 msgid "%s: can't get lock\n"
 msgstr "%s: Áäõíáìßá äçìéïõñãßáò êëåéäþìáôïò\n"
 
-#: src/gpasswd.c:596
+#: src/gpasswd.c:584
 #, c-format
 msgid "%s: can't get shadow lock\n"
 msgstr ""
 "%s: Áäõíáìßá äçìéïõñãßáò êëåéäþìáôïò ôïõ áñ÷åßïõ óêéùäþí óõíèçìáôéêþí\n"
 
-#: src/gpasswd.c:602
+#: src/gpasswd.c:590
 #, c-format
 msgid "%s: can't open file\n"
 msgstr "%s: áäõíáìßá áíïßãìáôïò ôïõ áñ÷åßïõ %s\n"
 
-#: src/gpasswd.c:614
+#: src/gpasswd.c:602
 #, c-format
 msgid "%s: can't update entry\n"
 msgstr "%s: áäõíáìßá áíáíÝùóçò êáôá÷þñçóçò\n"
 
-#: src/gpasswd.c:620
+#: src/gpasswd.c:608
 #, c-format
 msgid "%s: can't update shadow entry\n"
 msgstr "%s: áäõíáìßá áíáíÝùóçò êáôá÷þñçóçò óôï áñ÷åßï óêéùäþí óõíèçìáôéêþí\n"
 
-#: src/gpasswd.c:626
+#: src/gpasswd.c:615
 #, c-format
 msgid "%s: can't re-write file\n"
 msgstr "%s: áäõíáìßá åðáíåããñáöÞò áñ÷åßïõ\n"
 
-#: src/gpasswd.c:632
+#: src/gpasswd.c:621
 #, c-format
 msgid "%s: can't re-write shadow file\n"
 msgstr "%s: áäõíáìßá åðáíåããñáöÞò áñ÷åßïõ óêéùäþí óõíèçìáôéêþí\n"
 
-#: src/gpasswd.c:640
+#: src/gpasswd.c:630
 #, c-format
 msgid "%s: can't unlock file\n"
 msgstr "%s: áäõíáìßá îåêëåéäþìáôïò áñ÷åßïõ\n"
 
-#: src/gpasswd.c:645
+#: src/gpasswd.c:635
 #, c-format
 msgid "%s: can't update DBM files\n"
 msgstr "%s: áäõíáìßá áíáíÝùóçò ôùí DBM áñ÷åßùí\n"
 
-#: src/gpasswd.c:652
+#: src/gpasswd.c:642
 #, c-format
 msgid "%s: can't update DBM shadow files\n"
 msgstr "%s: áäõíáìßá áíáíÝùóçò ôùí DBM áñ÷åßùí óêéùäþí óõíèçìáôéêþí\n"
 
-#: src/groupadd.c:111
+#: src/groupadd.c:101
 msgid "usage: groupadd [-g gid [-o]] group\n"
 msgstr "÷ñÞóç: groupadd [-g gid [-o]] ïìÜäá\n"
 
-#: src/groupadd.c:179 src/groupadd.c:202 src/groupmod.c:189 src/groupmod.c:236
-#: src/useradd.c:949 src/usermod.c:546 src/usermod.c:682
+#: src/groupadd.c:167 src/groupadd.c:192 src/groupmod.c:179 src/groupmod.c:228
+#: src/useradd.c:970 src/usermod.c:552 src/usermod.c:695
 #, c-format
 msgid "%s: error adding new group entry\n"
 msgstr "%s: ÓöÜëìá êáôÜ ôçí ðñïóèÞêç íÝáò êáôá÷þñçóçò óôï áñ÷åßï ïìÜäùí\n"
 
-#: src/groupadd.c:189 src/groupadd.c:212 src/groupmod.c:205 src/useradd.c:960
-#: src/usermod.c:558 src/usermod.c:694
+#: src/groupadd.c:178 src/groupadd.c:203 src/groupmod.c:197 src/useradd.c:981
+#: src/usermod.c:564 src/usermod.c:708
 #, c-format
 msgid "%s: cannot add new dbm group entry\n"
 msgstr "%s: áäõíáìßá ðñïóèÞêçò íÝáò dbm êáôá÷þñçóçò óôï áñ÷åßï ïìÜäùí\n"
 
-#: src/groupadd.c:264 src/useradd.c:1014
+#: src/groupadd.c:255 src/useradd.c:1034
 #, c-format
 msgid "%s: name %s is not unique\n"
 msgstr "%s: Ôï üíïìá %s äåí åßíáé ìïíáäéêü\n"
 
-#: src/groupadd.c:279
-#, c-format
-msgid "%s: gid %ld is not unique\n"
-msgstr "%s: Ôï gid %ld äåí åßíáé ìïíáäéêü\n"
+#: src/groupadd.c:270
+#, fuzzy, c-format
+msgid "%s: gid %u is not unique\n"
+msgstr "%s: Ôï uid %ld äåí åßíáé ìïíáäéêü\n"
 
-#: src/groupadd.c:303
+#: src/groupadd.c:294
 #, c-format
 msgid "%s: can't get unique gid\n"
 msgstr "%s: áäõíáìßá åýñåóçò ìïíáäéêïý gid\n"
@@ -928,54 +926,54 @@ msgstr "%s: 
 #.
 #. * All invalid group names land here.
 #.
-#: src/groupadd.c:327 src/groupmod.c:347
+#: src/groupadd.c:317 src/groupmod.c:341
 #, c-format
 msgid "%s: %s is a not a valid group name\n"
 msgstr "%s: Ôï %s äåí åßíáé Ýãêõñï üíïìá ïìÜäáò\n"
 
-#: src/groupadd.c:356 src/groupmod.c:373
+#: src/groupadd.c:346 src/groupmod.c:366
 #, c-format
 msgid "%s: invalid group %s\n"
 msgstr "%s: Ìç Ýãêõñç ïìÜäá `%s'\n"
 
-#: src/groupadd.c:373 src/useradd.c:1290
+#: src/groupadd.c:363 src/useradd.c:1313
 #, c-format
 msgid "%s: -O requires NAME=VALUE\n"
 msgstr "%s: -O áðáéôåß ¼ÍÏÌÁ=ÔÉÌÇ\n"
 
-#: src/groupadd.c:418 src/groupdel.c:173 src/groupmod.c:409 src/useradd.c:1399
-#: src/userdel.c:309 src/usermod.c:570
+#: src/groupadd.c:407 src/groupdel.c:173 src/groupmod.c:401 src/useradd.c:1428
+#: src/userdel.c:312 src/usermod.c:576
 #, c-format
 msgid "%s: cannot rewrite group file\n"
 msgstr "%s: áäõíáìßá åðáíåããñáöÞò ôïõ áñ÷åßïõ ïìÜäùí\n"
 
-#: src/groupadd.c:424 src/groupdel.c:179 src/groupmod.c:415 src/useradd.c:1407
-#: src/userdel.c:315 src/usermod.c:707
+#: src/groupadd.c:415 src/groupdel.c:179 src/groupmod.c:409 src/useradd.c:1437
+#: src/userdel.c:319 src/usermod.c:722
 #, c-format
 msgid "%s: cannot rewrite shadow group file\n"
 msgstr "%s: áäõíáìßá åðáíåããñáöÞò ôïõ áñ÷åßïõ óêéùäþí óõíèçìáôéêþí ïìÜäùí\n"
 
-#: src/groupadd.c:443 src/groupdel.c:198 src/groupmod.c:434 src/userdel.c:395
+#: src/groupadd.c:433 src/groupdel.c:198 src/groupmod.c:427 src/userdel.c:403
 #, c-format
 msgid "%s: unable to lock group file\n"
 msgstr "%s: Áäõíáìßá êëåéäþìáôïò ôïõ áñ÷åßïõ ïìÜäùí\n"
 
-#: src/groupadd.c:447 src/groupdel.c:202 src/groupmod.c:438
+#: src/groupadd.c:438 src/groupdel.c:202 src/groupmod.c:432
 #, c-format
 msgid "%s: unable to open group file\n"
 msgstr "%s: Áäõíáìßá áíïßãìáôïò ôïõ áñ÷åßïõ ïìÜäùí\n"
 
-#: src/groupadd.c:452 src/groupdel.c:207 src/groupmod.c:443 src/userdel.c:404
+#: src/groupadd.c:445 src/groupdel.c:207 src/groupmod.c:439 src/userdel.c:414
 #, c-format
 msgid "%s: unable to lock shadow group file\n"
 msgstr "%s: Áäõíáìßá êëåéäþìáôïò ôïõ áñ÷åßïõ óêéùäþí óõíèçìáôéêþí ïìÜäùí\n"
 
-#: src/groupadd.c:457 src/groupdel.c:212 src/groupmod.c:448
+#: src/groupadd.c:451 src/groupdel.c:212 src/groupmod.c:445
 #, c-format
 msgid "%s: unable to open shadow group file\n"
 msgstr "%s: Áäõíáìßá áíïßãìáôïò ôïõ áñ÷åßïõ óêéùäþí óõíèçìáôéêþí ïìÜäùí\n"
 
-#: src/groupadd.c:568
+#: src/groupadd.c:562
 #, c-format
 msgid "%s: group %s exists\n"
 msgstr "%s: Ç ïìÜäá %s õðÜñ÷åé\n"
@@ -984,12 +982,12 @@ msgstr "%s: 
 msgid "usage: groupdel group\n"
 msgstr "÷ñÞóç: groupdel ïìÜäá\n"
 
-#: src/groupdel.c:110 src/groupmod.c:193 src/groupmod.c:240
+#: src/groupdel.c:110 src/groupmod.c:184 src/groupmod.c:233
 #, c-format
 msgid "%s: error removing group entry\n"
 msgstr "%s: ÓöÜëìá êáôÜ ôçí äéáãñáöÞ êáôá÷þñçóçò ïìÜäáò\n"
 
-#: src/groupdel.c:122 src/groupmod.c:212
+#: src/groupdel.c:122 src/groupmod.c:204
 #, c-format
 msgid "%s: error removing group dbm entry\n"
 msgstr "%s: ÓöÜëìá êáôÜ ôçí äéáãñáöÞ êáôá÷þñçóçò óôï dbm áñ÷åßï ïìÜäùí\n"
@@ -1001,7 +999,7 @@ msgstr ""
 "%s: ÓöÜëìá êáôÜ ôçí áöáßñåóç êáôá÷þñçóçò óôï áñ÷åßï óêéùäþí óõíèçìáôéêþí "
 "ïìÜäùí\n"
 
-#: src/groupdel.c:150 src/groupmod.c:258
+#: src/groupdel.c:150 src/groupmod.c:254
 #, c-format
 msgid "%s: error removing shadow group dbm entry\n"
 msgstr ""
@@ -1015,132 +1013,132 @@ msgstr ""
 msgid "%s: cannot remove user's primary group.\n"
 msgstr "%s: áäõíáìßá áöáßñåóçò ôçò ðñùôáñ÷éêÞò ïìÜäáò ôïõ ÷ñÞóôç.\n"
 
-#: src/groupdel.c:355 src/groupmod.c:551
+#: src/groupdel.c:355 src/groupmod.c:550
 #, c-format
 msgid "%s: group %s does not exist\n"
 msgstr "%s: Ç ïìÜäá %s äåí õðÜñ÷åé\n"
 
-#: src/groupdel.c:369 src/groupmod.c:567
+#: src/groupdel.c:369 src/groupmod.c:566
 #, c-format
 msgid "%s: group %s is a NIS group\n"
 msgstr "%s: Ç ïìÜäá %s åßíáé NIS ïìÜäá\n"
 
-#: src/groupdel.c:375 src/groupmod.c:573 src/userdel.c:811 src/usermod.c:1023
+#: src/groupdel.c:375 src/groupmod.c:571 src/userdel.c:776 src/usermod.c:1045
 #, c-format
 msgid "%s: %s is the NIS master\n"
 msgstr "%s: Ï %s åßíáé ï êýñéïò äéáêïìéóôÞò NIS\n"
 
-#: src/groupmems.c:92
+#: src/groupmems.c:95
 msgid "Member already exists\n"
 msgstr ""
 
-#: src/groupmems.c:121
+#: src/groupmems.c:125
 msgid "Member to remove could not be found\n"
 msgstr ""
 
-#: src/groupmems.c:151
+#: src/groupmems.c:158
 msgid "usage: groupmems -a username | -d username | -D | -l [-g groupname]\n"
 msgstr ""
 
-#: src/groupmems.c:191
+#: src/groupmems.c:201
 msgid "Only root can add members to different groups\n"
 msgstr ""
 
-#: src/groupmems.c:196
+#: src/groupmems.c:206
 msgid "Group access is required\n"
 msgstr ""
 
-#: src/groupmems.c:199
+#: src/groupmems.c:210
 msgid "Not primary owner of current group\n"
 msgstr ""
 
-#: src/groupmems.c:204
+#: src/groupmems.c:215
 #, fuzzy
 msgid "Unable to lock group file\n"
 msgstr "%s: Áäõíáìßá êëåéäþìáôïò ôïõ áñ÷åßïõ ïìÜäùí\n"
 
-#: src/groupmems.c:209
+#: src/groupmems.c:220
 #, fuzzy
 msgid "Unable to open group file\n"
 msgstr "%s: Áäõíáìßá áíïßãìáôïò ôïõ áñ÷åßïõ ïìÜäùí\n"
 
-#: src/groupmems.c:229
+#: src/groupmems.c:240
 #, fuzzy
 msgid "Cannot close group file\n"
 msgstr "%s: áäõíáìßá áíïßãìáôïò áñ÷åßïõ ïìÜäùí\n"
 
-#: src/groupmod.c:111
+#: src/groupmod.c:103
 msgid "usage: groupmod [-g gid [-o]] [-n name] group\n"
 msgstr "÷ñÞóç: groupmod [-g gid [-o]] [-n üíïìá] ïìÜäá\n"
 
-#: src/groupmod.c:171
+#: src/groupmod.c:161
 #, fuzzy, c-format
 msgid "%s: %s not found in /etc/group\n"
 msgstr "%s: Ï %s äåí âñÝèçêå óôï /etc/passwd\n"
 
-#: src/groupmod.c:252
+#: src/groupmod.c:247
 #, c-format
 msgid "%s: cannot add new dbm shadow group entry\n"
 msgstr ""
 "%s: áäõíáìßá ðñïóèÞêçò íÝáò dbm êáôá÷þñçóçò óôï áñ÷åßï óêéùäþí óõíèçìáôéêþí "
 "ïìÜäùí\n"
 
-#: src/groupmod.c:305
-#, c-format
-msgid "%s: %ld is not a unique gid\n"
+#: src/groupmod.c:300
+#, fuzzy, c-format
+msgid "%s: %u is not a unique gid\n"
 msgstr "%s: Ôï %ld äåí åßíáé ìïíáäéêü gid\n"
 
-#: src/groupmod.c:336
+#: src/groupmod.c:330
 #, c-format
 msgid "%s: %s is not a unique name\n"
 msgstr "%s: Ôï %s äåí åßíáé ìïíáäéêü üíïìá\n"
 
-#: src/groups.c:62
+#: src/groups.c:59
 #, c-format
 msgid "unknown user %s\n"
 msgstr "Üãíùóôïò ÷ñÞóôçò: %s\n"
 
-#: src/grpck.c:98
+#: src/grpck.c:87
 #, fuzzy, c-format
-msgid "Usage: %s [ -sr ] [ group [ gshadow ] ]\n"
-msgstr "×ñÞóç: %s [ -r ] [ group [ gshadow ] ]\n"
+msgid "Usage: %s [-r] [-s] [group [gshadow]]\n"
+msgstr "×ñÞóç: %s [-r] [-s] [group [gshadow]]\n"
 
-#: src/grpck.c:100
+#: src/grpck.c:90
 #, fuzzy, c-format
-msgid "Usage: %s [ -sr ] [ group ]\n"
-msgstr "×ñÞóç: %s [ -r ] [ group ]\n"
+msgid "Usage: %s [-r] [-s] [group]\n"
+msgstr "×ñÞóç: %s [-r] [-s] [group]\n"
 
-#: src/grpck.c:119 src/pwck.c:119
+#: src/grpck.c:108 src/pwck.c:108
 msgid "No"
 msgstr "Ï÷é"
 
-#: src/grpck.c:204 src/pwck.c:186
+#: src/grpck.c:192 src/pwck.c:175
 #, c-format
 msgid "%s: -s and -r are incompatibile\n"
 msgstr ""
 
-#: src/grpck.c:244 src/grpck.c:252 src/pwck.c:226 src/pwck.c:235
+#: src/grpck.c:232 src/grpck.c:242 src/pwck.c:215 src/pwck.c:225
 #, c-format
 msgid "%s: cannot lock file %s\n"
 msgstr "%s: áäõíáìßá êëåéäþìáôïò ôïõ áñ÷åßïõ %s\n"
 
-#: src/grpck.c:267 src/grpck.c:275 src/mkpasswd.c:216 src/pwck.c:251
-#: src/pwck.c:260
+#: src/grpck.c:259 src/grpck.c:268 src/mkpasswd.c:202 src/pwck.c:242
+#: src/pwck.c:251
 #, c-format
 msgid "%s: cannot open file %s\n"
 msgstr "%s: áäõíáìßá áíïßãìáôïò áñ÷åßïõ %s\n"
 
 #.
-#. * Tell the user this entire line is bogus and
-#. * ask them to delete it.
+#. * Tell the user this entire line is bogus and ask
+#. * them to delete it.
 #.
-#: src/grpck.c:317
+#: src/grpck.c:311
 msgid "invalid group file entry\n"
 msgstr "Ìç Ýãêõñç êáôá÷þñçóç óôï áñ÷åßï ïìÜäùí\n"
 
-#: src/grpck.c:318 src/grpck.c:381 src/grpck.c:473 src/grpck.c:536
-#: src/grpck.c:553 src/pwck.c:305 src/pwck.c:367 src/pwck.c:474 src/pwck.c:536
-#: src/pwck.c:560
+#: src/grpck.c:312 src/grpck.c:375 src/grpck.c:458 src/grpck.c:521
+#: src/grpck.c:538 src/pwck.c:296 src/pwck.c:358 src/pwck.c:457 src/pwck.c:519
+#: src/pwck.c:543
 #, c-format
 msgid "delete line `%s'? "
 msgstr "äéáãñáöÞ ãñáììÞò `%s'; "
@@ -1149,35 +1147,30 @@ msgstr "
 #. * Tell the user this entry is a duplicate of
 #. * another and ask them to delete it.
 #.
-#: src/grpck.c:380
+#: src/grpck.c:374
 msgid "duplicate group entry\n"
 msgstr "áíôéãñáöÞ êáôá÷þñçóçò óôï áñ÷åßï ïìÜäùí\n"
 
-#: src/grpck.c:397
+#: src/grpck.c:391
 #, c-format
 msgid "invalid group name `%s'\n"
 msgstr "Ìç Ýãêõñï üíïìá ïìÜäáò `%s'\n"
 
-#: src/grpck.c:407
-#, c-format
-msgid "group %s: bad GID (%d)\n"
-msgstr "ïìÜäá %s: ëÜèïò GID (%d)\n"
-
-#: src/grpck.c:433
+#: src/grpck.c:418
 #, c-format
 msgid "group %s: no user %s\n"
 msgstr "ïìÜäá %s: äåí õðÜñ÷åé ÷ñÞóôçò %s\n"
 
-#: src/grpck.c:435 src/grpck.c:604
+#: src/grpck.c:420 src/grpck.c:590
 #, c-format
 msgid "delete member `%s'? "
 msgstr "äéáãñáöÞ ìÝëïõò `%s'; "
 
 #.
-#. * Tell the user this entire line is bogus and
-#. * ask them to delete it.
+#. * Tell the user this entire line is bogus and ask
+#. * them to delete it.
 #.
-#: src/grpck.c:472
+#: src/grpck.c:457
 msgid "invalid shadow group file entry\n"
 msgstr "Ìç Ýãêõñç êáôá÷þñçóç óôï áñ÷åßï óêéùäþí óõíèçìáôéêþí ïìÜäùí\n"
 
@@ -1185,209 +1178,206 @@ msgstr "
 #. * Tell the user this entry is a duplicate of
 #. * another and ask them to delete it.
 #.
-#: src/grpck.c:535
+#: src/grpck.c:520
 msgid "duplicate shadow group entry\n"
 msgstr "áíôéãñáöÞ êáôá÷þñçóçò óôï áñ÷åßï óêéùäþí óõíèçìáôéêþí ïìÜäùí\n"
 
-#: src/grpck.c:552
+#: src/grpck.c:537
 msgid "no matching group file entry\n"
 msgstr "Äåí âñÝèçêå êáôá÷þñçóç óôï áñ÷åßï ïìÜäùí ðïõ íá ôáéñéÜæåé\n"
 
-#: src/grpck.c:572
+#: src/grpck.c:558
 #, c-format
 msgid "shadow group %s: no administrative user %s\n"
 msgstr "óêéþäçò ïìÜäá %s: Äåí õðÜñ÷åé äéá÷åéñéóôÞò ÷ñÞóôçò %s\n"
 
-#: src/grpck.c:574
+#: src/grpck.c:560
 #, c-format
 msgid "delete administrative member `%s'? "
 msgstr "äéáãñáöÞ äéá÷åéñéóôéêïý ìÝëïõò `%s'; "
 
-#: src/grpck.c:602
+#: src/grpck.c:588
 #, c-format
 msgid "shadow group %s: no user %s\n"
 msgstr "óêéþäçò ïìÜäá %s: äåí õðÜñ÷åé ÷ñÞóôçò %s\n"
 
-#: src/grpck.c:630 src/grpck.c:636 src/pwck.c:592 src/pwck.c:600
+#: src/grpck.c:616 src/grpck.c:622 src/pwck.c:577 src/pwck.c:585
 #, c-format
 msgid "%s: cannot update file %s\n"
 msgstr "%s: áäõíáìßá áíáíÝùóçò áñ÷åßïõ %s\n"
 
-#: src/grpck.c:660 src/pwck.c:626
+#: src/grpck.c:647 src/pwck.c:612
 #, c-format
 msgid "%s: the files have been updated; run mkpasswd\n"
 msgstr "%s: ôá áñ÷åßá áíáíåþèçêáí. ÅêôåëÝóôå mkpasswd\n"
 
-#: src/grpck.c:661 src/grpck.c:665 src/pwck.c:627 src/pwck.c:631
+#: src/grpck.c:648 src/grpck.c:652 src/pwck.c:613 src/pwck.c:617
 #, c-format
 msgid "%s: no changes\n"
 msgstr "%s: êáìéÜ áëëáãÞ\n"
 
-#: src/grpck.c:664 src/pwck.c:630
+#: src/grpck.c:651 src/pwck.c:616
 #, c-format
 msgid "%s: the files have been updated\n"
 msgstr "%s: ôá áñ÷åßá áíáíåþèçêáí\n"
 
-#: src/grpconv.c:62 src/grpunconv.c:63
+#: src/grpconv.c:60 src/grpunconv.c:56
 #, c-format
 msgid "%s: can't lock group file\n"
 msgstr "%s: áäõíáìßá êëåéäþìáôïò ôïõ áñ÷åßïõ ïìÜäùí\n"
 
-#: src/grpconv.c:67 src/grpunconv.c:68
+#: src/grpconv.c:65 src/grpunconv.c:61
 #, c-format
 msgid "%s: can't open group file\n"
 msgstr "%s: áäõíáìßá áíïßãìáôïò ôïõ áñ÷åßïõ ïìÜäùí\n"
 
-#: src/grpconv.c:72 src/grpunconv.c:73
+#: src/grpconv.c:70 src/grpunconv.c:66
 #, c-format
 msgid "%s: can't lock shadow group file\n"
 msgstr "%s: áäõíáìßá êëåéäþìáôïò ôïõ áñ÷åßïõ óêéùäþí óõíèçìáôéêþí ïìÜäùí\n"
 
-#: src/grpconv.c:77 src/grpunconv.c:78
+#: src/grpconv.c:76 src/grpunconv.c:72
 #, c-format
 msgid "%s: can't open shadow group file\n"
 msgstr "%s: áäõíáìßá áíïßãìáôïò ôïõ áñ÷åßïõ óêéùäþí óõíèçìáôéêþí ïìÜäùí\n"
 
-#.
-#. * This shouldn't happen (the entry exists) but...
-#.
-#: src/grpconv.c:93
+#: src/grpconv.c:94
 #, c-format
 msgid "%s: can't remove shadow group %s\n"
 msgstr ""
 "%s: áäõíáìßá áöáßñåóçò  ôçò ïìÜäáò %s, áðü ôï áñ÷åßï óêéùäþí óõíèçìáôéêþí\n"
 "ïìÜäùí\n"
 
-#: src/grpconv.c:134 src/pwconv.c:160
+#: src/grpconv.c:138 src/pwconv.c:153
 #, c-format
 msgid "%s: can't update shadow entry for %s\n"
 msgstr ""
 "%s: áäõíáìßá áíáíÝùóçò êáôá÷þñçóçò óôï áñ÷åßï óêéùäþí óõíèçìáôéêþí ãéá ôïí %"
 "s\n"
 
-#: src/grpconv.c:143 src/grpunconv.c:94
+#: src/grpconv.c:148 src/grpunconv.c:91
 #, c-format
 msgid "%s: can't update entry for group %s\n"
 msgstr "%s: áäõíáìßá áíáíÝùóçò êáôá÷þñçóçò ãéá ôçí ïìÜäá %s\n"
 
-#: src/grpconv.c:150 src/grpunconv.c:102
+#: src/grpconv.c:155 src/grpunconv.c:99
 #, c-format
 msgid "%s: can't update shadow group file\n"
 msgstr "%s: áäõíáìßá áíáíÝùóçò ôïõ áñ÷åßïõ óêéùäþí óõíèçìáôéêþí ïìÜäùí\n"
 
-#: src/grpconv.c:154 src/grpunconv.c:107
+#: src/grpconv.c:160 src/grpunconv.c:105
 #, c-format
 msgid "%s: can't update group file\n"
 msgstr "%s: áäõíáìßá áíáíÝùóçò ãéá ôï áñ÷åßï ïìÜäùí\n"
 
-#: src/grpconv.c:169 src/grpunconv.c:128
+#: src/grpconv.c:175 src/grpunconv.c:127
 #, c-format
 msgid "%s: not configured for shadow group support.\n"
 msgstr "%s: Äåí åßíáé äéáìïñöùìÝíï ãéá óêéþäç óõíèçìáôéêÜ ïìÜäùí.\n"
 
-#: src/grpunconv.c:112
+#: src/grpunconv.c:110
 #, c-format
 msgid "%s: can't delete shadow group file\n"
 msgstr ""
 "%s: Äåí åßíáé äõíáôüí íá äéáãñáöåß ôï áñ÷åßï óêéùäþí óõíèçìáôéêþí ïìÜäùí\n"
 
-#: src/id.c:56
-msgid "usage: id [ -a ]\n"
-msgstr "÷ñÞóç: id [ -a ]\n"
+#: src/id.c:53
+msgid "usage: id [-a]\n"
+msgstr "÷ñÞóç: id [-a]\n"
 
-#: src/id.c:58
+#: src/id.c:55
 msgid "usage: id\n"
 msgstr "÷ñÞóç: id\n"
 
-#: src/id.c:127
+#: src/id.c:123
 #, c-format
-msgid "uid=%d(%s)"
+msgid "uid=%u(%s)"
 msgstr ""
 
-#: src/id.c:129
+#: src/id.c:125
 #, c-format
-msgid "uid=%d"
+msgid "uid=%u"
 msgstr ""
 
-#: src/id.c:133
+#: src/id.c:129
 #, c-format
-msgid " gid=%d(%s)"
+msgid " gid=%u(%s)"
 msgstr ""
 
-#: src/id.c:135
+#: src/id.c:131
 #, c-format
-msgid " gid=%d"
+msgid " gid=%u"
 msgstr ""
 
-#: src/id.c:145
+#: src/id.c:141
 #, c-format
-msgid " euid=%d(%s)"
+msgid " euid=%u(%s)"
 msgstr ""
 
-#: src/id.c:147
+#: src/id.c:143
 #, c-format
-msgid " euid=%d"
+msgid " euid=%u"
 msgstr ""
 
-#: src/id.c:152
+#: src/id.c:148
 #, c-format
-msgid " egid=%d(%s)"
+msgid " egid=%u(%s)"
 msgstr ""
 
-#: src/id.c:154
+#: src/id.c:150
 #, c-format
-msgid " egid=%d"
+msgid " egid=%u"
 msgstr ""
 
 #.
-#. * Start off the group message.  It will be of the format
+#. * Start off the group message. It will be of the format
 #. *
-#. *   groups=###(aaa),###(aaa),###(aaa)
+#. *      groups=###(aaa),###(aaa),###(aaa)
 #. *
 #. * where "###" is a numerical value and "aaa" is the
 #. * corresponding name for each respective numerical value.
 #.
-#: src/id.c:175
+#: src/id.c:169
 msgid " groups="
 msgstr " ïìÜäåò="
 
-#: src/lastlog.c:116 src/lastlog.c:120
+#: src/lastlog.c:110 src/lastlog.c:116
 #, c-format
 msgid "Usage: %s [<-u|--login> login-name] [<-t|--time> days] [<-h|--help>]\n"
 msgstr ""
 
-#: src/lastlog.c:184
+#: src/lastlog.c:181
 msgid "Username         Port     From             Latest\n"
 msgstr "¼íïìá_×ñÞóôç     Èýñá     Áðü              Ôåëåõôáßá\n"
 
-#: src/lastlog.c:186
+#: src/lastlog.c:183
 msgid "Username                Port     Latest\n"
 msgstr "¼íïìá_×ñÞóôç            Èýñá     Ôåëåõôáßá\n"
 
-#: src/lastlog.c:200
+#: src/lastlog.c:197
 msgid "**Never logged in**"
 msgstr "**ÊáìéÜ åßóïäïò óôï óýóôçìá**"
 
-#: src/login.c:201
+#: src/login.c:183
 #, c-format
 msgid "usage: %s [-p] [name]\n"
 msgstr "÷ñÞóç: %s [-p] [üíïìá]\n"
 
-#: src/login.c:204
+#: src/login.c:186
 #, c-format
 msgid "       %s [-p] [-h host] [-f name]\n"
 msgstr "       %s [-p] [-h óýóôçìá] [-f üíïìá]\n"
 
-#: src/login.c:206
+#: src/login.c:188
 #, c-format
 msgid "       %s [-p] -r host\n"
 msgstr "       %s [-p] -r óýóôçìá\n"
 
-#: src/login.c:289
+#: src/login.c:272
 msgid "Invalid login time\n"
 msgstr "ÅóöáëìÝíç þñá åéóüäïõ\n"
 
-#: src/login.c:344
+#: src/login.c:327
 msgid ""
 "\n"
 "System closed for routine maintenance\n"
@@ -1395,7 +1385,7 @@ msgstr ""
 "\n"
 "Ôï óýóôçìá Ýêëåéóå ãéá óõíôÞñçóç ñïõôßíáò\n"
 
-#: src/login.c:354
+#: src/login.c:338
 msgid ""
 "\n"
 "[Disconnect bypassed -- root login allowed.]\n"
@@ -1403,7 +1393,7 @@ msgstr ""
 "\n"
 "[ÐáñÜêáìøç áðïóýíäåóçò -- Ç åßóïäïò ôïõ root åðåôñÜðç.]\n"
 
-#: src/login.c:393
+#: src/login.c:375
 #, c-format
 msgid ""
 "\n"
@@ -1412,17 +1402,17 @@ msgstr ""
 "\n"
 "Ç äéáäéêáóßá åéóüäïõ ôåñìáôßóôçêå ìåôÜ áðü %d äåõôåñüëåðôá.\n"
 
-#: src/login.c:695
+#: src/login.c:687
 #, c-format
 msgid " on `%.100s' from `%.200s'"
 msgstr " óôï `%.100s' áðü `%.200s'"
 
-#: src/login.c:697
+#: src/login.c:691
 #, c-format
 msgid " on `%.100s'"
 msgstr " óôï `%.100s'"
 
-#: src/login.c:837
+#: src/login.c:850
 #, c-format
 msgid ""
 "\n"
@@ -1431,243 +1421,237 @@ msgstr ""
 "\n"
 "%s login: "
 
-#: src/login.c:839
+#: src/login.c:853
 msgid "login: "
 msgstr "login: "
 
-#: src/login.c:1029 src/sulogin.c:231
+#: src/login.c:1069 src/sulogin.c:233
 msgid "Login incorrect"
 msgstr "Äéáäéêáóßá åéóüäïõ áðÝôõ÷å"
 
-#: src/login.c:1217
+#: src/login.c:1263
 msgid "Warning: login re-enabled after temporary lockout.\n"
 msgstr ""
 "Ðñïåéäïðïßçóç: Ç åßóïäïò åðáíåíåñãïðïéÞèçêå ìåôÜ áðü ðñïóùñéíü áðïêëåéóìü.\n"
 
-#: src/login.c:1227
+#: src/login.c:1276
 #, c-format
 msgid "Last login: %s on %s"
 msgstr "Ôåëåõôáßá åßóïäïò: %s óôï %s"
 
-#: src/login.c:1230
+#: src/login.c:1279
 #, c-format
 msgid "Last login: %.19s on %s"
 msgstr "Ôåëåõôáßá åßóïäïò: %.19s óôï %s"
 
-#: src/login.c:1235
+#: src/login.c:1285
 #, c-format
 msgid " from %.*s"
 msgstr " áðü %.*s"
 
-#: src/login.c:1307
+#: src/login.c:1362
 msgid "Starting rad_login\n"
 msgstr "¸íáñîç rad_login\n"
 
-#: src/mkpasswd.c:49
+#: src/mkpasswd.c:47
 #, c-format
 msgid "%s: no DBM database on system - no action performed\n"
 msgstr ""
 "%s: Äåí õðÜñ÷åé DBM âÜóç äåäïìÝíùí óôï óýóôçìá - êáìéÜ åíÝñãåéá äåí "
 "åêôåëåßôáé\n"
 
-#: src/mkpasswd.c:74 src/mkpasswd.c:382
-#, c-format
-msgid "Usage: %s [ -vf ] [ -p|g|sp|sg ] file\n"
-msgstr "×ñÞóç: %s [ -vf ] [ -p|g|sp|sg ] áñ÷åßï\n"
-
-#: src/mkpasswd.c:76 src/mkpasswd.c:384
-#, c-format
-msgid "Usage: %s [ -vf ] [ -p|g|sp ] file\n"
-msgstr "×ñÞóç: %s [ -vf ] [ -p|g|sp ] áñ÷åßï\n"
-
-#: src/mkpasswd.c:79 src/mkpasswd.c:387
-#, c-format
-msgid "Usage: %s [ -vf ] [ -p|g ] file\n"
-msgstr "×ñÞóç: %s [ -vf ] [ -p|g ] áñ÷åßï\n"
-
-#: src/mkpasswd.c:245 src/mkpasswd.c:249
+#: src/mkpasswd.c:232 src/mkpasswd.c:237
 #, c-format
 msgid "%s: cannot overwrite file %s\n"
 msgstr "%s: áäõíáìßá åããñáöÞò ðÜíù áðü ôï áñ÷åßï %s\n"
 
-#: src/mkpasswd.c:263
+#: src/mkpasswd.c:252
 #, c-format
 msgid "%s: cannot open DBM files for %s\n"
 msgstr "%s: áäõíáìßá áíïßãìáôïò DBM áñ÷åßùí ãéá ôï %s\n"
 
-#: src/mkpasswd.c:296
+#: src/mkpasswd.c:287
 #, c-format
 msgid "%s: the beginning with "
 msgstr "%s: ç áñ÷Þ ìå "
 
-#: src/mkpasswd.c:296
+#: src/mkpasswd.c:288
 #, fuzzy
 msgid " is too long\n"
 msgstr "%s: Ðïëý ìáêñéÜ ðåäßá\n"
 
-#: src/mkpasswd.c:321
+#: src/mkpasswd.c:315
 #, c-format
 msgid "%s: error parsing line \"%s\"\n"
 msgstr "%s: ÓöÜëìá êáôÜ ôçí åðåîåñãáóßá ôçò ãñáììÞò \"%s\"\n"
 
-#: src/mkpasswd.c:326 src/mkpasswd.c:328 src/mkpasswd.c:330 src/mkpasswd.c:332
+#: src/mkpasswd.c:323 src/mkpasswd.c:328 src/mkpasswd.c:333 src/mkpasswd.c:338
 msgid "adding record for name "
 msgstr "ðñïóèÞêç êáôá÷þñçóçò ãéá üíïìá "
 
-#: src/mkpasswd.c:326 src/mkpasswd.c:328 src/mkpasswd.c:330 src/mkpasswd.c:332
-#: src/mkpasswd.c:336 src/mkpasswd.c:341 src/mkpasswd.c:345 src/mkpasswd.c:349
+#: src/mkpasswd.c:324 src/mkpasswd.c:329 src/mkpasswd.c:334 src/mkpasswd.c:339
+#: src/mkpasswd.c:345 src/mkpasswd.c:351 src/mkpasswd.c:356 src/mkpasswd.c:361
 msgid "\n"
 msgstr ""
 
-#: src/mkpasswd.c:336 src/mkpasswd.c:341 src/mkpasswd.c:345 src/mkpasswd.c:349
+#: src/mkpasswd.c:344 src/mkpasswd.c:350 src/mkpasswd.c:355 src/mkpasswd.c:360
 #, c-format
 msgid "%s: error adding record for "
 msgstr "%s: ÓöÜëìá êáôÜ ôçí ðñïóèÞêç êáôá÷þñçóçò ãéá "
 
-#: src/mkpasswd.c:367
+#: src/mkpasswd.c:378
 #, c-format
 msgid "added %d entries, longest was %d\n"
 msgstr "ðñïóôÝèçêáí %d êáôá÷ùñÞóåéò, ç ìåãáëýôåñç Þôáí %d\n"
 
-#: src/newgrp.c:66
-msgid "usage: newgrp [ - ] [ group ]\n"
-msgstr "÷ñÞóç: newgrp [ - ] [ ïìÜäá ]\n"
+#: src/mkpasswd.c:392
+#, c-format
+msgid "Usage: %s [-vf] [-p|g|sp|sg] file\n"
+msgstr "×ñÞóç: %s [-vf] [-p|g|sp|sg] áñ÷åßï\n"
 
-#: src/newgrp.c:68
-#, fuzzy
-msgid "usage: sg group [[-c] command ]\n"
-msgstr "÷ñÞóç: sg ïìÜäá [ åíôïëÞ ]\n"
+#: src/mkpasswd.c:395
+#, c-format
+msgid "Usage: %s [-vf] [-p|g|sp] file\n"
+msgstr "×ñÞóç: %s [-vf] [-p|g|sp] áñ÷åßï\n"
 
-#: src/newgrp.c:125
+#: src/mkpasswd.c:398
 #, c-format
-msgid "unknown uid: %d\n"
+msgid "Usage: %s [-vf] [-p|g] file\n"
+msgstr "×ñÞóç: %s [-vf] [-p|g] áñ÷åßï\n"
+
+#: src/newgrp.c:61
+msgid "usage: newgrp [-] [group]\n"
+msgstr "÷ñÞóç: newgrp [-] [ïìÜäá]\n"
+
+#: src/newgrp.c:63
+#, fuzzy
+msgid "usage: sg group [[-c] command]\n"
+msgstr "÷ñÞóç: sg ïìÜäá [åíôïëÞ]\n"
+
+#: src/newgrp.c:136
+#, fuzzy, c-format
+msgid "unknown uid: %u\n"
 msgstr "Üãíùóôï uid: %d\n"
 
-#: src/newgrp.c:201
-#, c-format
-msgid "unknown gid: %ld\n"
+#: src/newgrp.c:219
+#, fuzzy, c-format
+msgid "unknown gid: %lu\n"
 msgstr "Üãíùóôï gid: %ld\n"
 
-#: src/newgrp.c:245
-#, c-format
-msgid "unknown gid: %d\n"
-msgstr "Üãíùóôï gid: %d\n"
-
-#: src/newgrp.c:323 src/newgrp.c:332
+#: src/newgrp.c:365 src/newgrp.c:374
 msgid "Sorry.\n"
 msgstr "ËõðÜìáé.\n"
 
-#: src/newgrp.c:364
+#: src/newgrp.c:472
 msgid "too many groups\n"
 msgstr "ðÜñá ðïëëÝò ïìÜäåò\n"
 
-#: src/newusers.c:82
+#: src/newusers.c:78
 #, c-format
-msgid "Usage: %s [ input ]\n"
-msgstr "×ñÞóç: %s [ åßóïäïò ]\n"
+msgid "Usage: %s [input]\n"
+msgstr "×ñÞóç: %s [åßóïäïò]\n"
 
-#: src/newusers.c:414
+#: src/newusers.c:407
 #, c-format
 msgid "%s: can't lock /etc/passwd.\n"
 msgstr "%s: áäõíáìßá êëåéäþìáôïò ôïõ /etc/passwd.\n"
 
-#: src/newusers.c:425
+#: src/newusers.c:419
 #, c-format
 msgid "%s: can't lock files, try again later\n"
 msgstr "%s: áäõíáìßá êëåéäþìáôïò áñ÷åßùí, îáíáäïêéìÜóôå áñãüôåñá\n"
 
-#: src/newusers.c:440
+#: src/newusers.c:435
 #, c-format
 msgid "%s: can't open files\n"
 msgstr "%s: áäõíáìßá áíïßãìáôïò ôùí áñ÷åßùí\n"
 
-#: src/newusers.c:485
+#: src/newusers.c:480
 #, c-format
 msgid "%s: line %d: invalid line\n"
 msgstr "%s: ãñáììÞ %d: ìç Ýãêõñç ãñáììÞ\n"
 
-#: src/newusers.c:503
+#: src/newusers.c:499
 #, c-format
 msgid "%s: line %d: can't create GID\n"
 msgstr "%s: ãñáììÞ %d: áäõíáìßá äçìéïõñãßáò GID\n"
 
-#: src/newusers.c:519
+#: src/newusers.c:515
 #, c-format
 msgid "%s: line %d: can't create UID\n"
 msgstr "%s: ãñáììÞ %d: áäõíáìßá äçìéïõñãßáò UID\n"
 
-#: src/newusers.c:531
+#: src/newusers.c:528
 #, c-format
 msgid "%s: line %d: cannot find user %s\n"
 msgstr "%s: ãñáììÞ %d: áäõíáìßá åýñåóçò ÷ñÞóôç %s\n"
 
-#: src/newusers.c:539
+#: src/newusers.c:537
 #, c-format
 msgid "%s: line %d: can't update password\n"
 msgstr "%s: ãñáììÞ %d: áäõíáìßá áíáíÝùóç óõíèçìáôéêïý\n"
 
-#: src/newusers.c:556
+#: src/newusers.c:555
 #, c-format
 msgid "%s: line %d: mkdir failed\n"
 msgstr "%s: ãñáììÞ %d: áðïôõ÷ßá äçìéïõñãßáò êáôáëüãïõ(mkdir)\n"
 
-#: src/newusers.c:560
+#: src/newusers.c:561
 #, c-format
 msgid "%s: line %d: chown failed\n"
 msgstr "%s: ãñáììÞ %d: áðïôõ÷ßá áëëáãÞò éäéïêôÞôç(chown)\n"
 
-#: src/newusers.c:569
+#: src/newusers.c:571
 #, c-format
 msgid "%s: line %d: can't update entry\n"
 msgstr "%s: ãñáììÞ %d: áäõíáìßá áíáíÝùóçò êáôá÷þñçóçò\n"
 
-#: src/newusers.c:600
+#: src/newusers.c:603
 #, c-format
 msgid "%s: error updating files\n"
 msgstr "%s: ÓöÜëìá êáôÜ ôçí åíçìÝñùóç áñ÷åßùí\n"
 
-#: src/passwd.c:239
+#: src/passwd.c:174
 #, c-format
-msgid "usage: %s [ -f | -s ] [ name ]\n"
-msgstr "÷ñÞóç: %s [ -f | -s ] [ üíïìá ]\n"
+msgid "usage: %s [-f|-s] [name]\n"
+msgstr "÷ñÞóç: %s [-f|-s] [üíïìá]\n"
 
-#: src/passwd.c:242
+#: src/passwd.c:178
 #, c-format
-msgid "       %s [ -x max ] [ -n min ] [ -w warn ] [ -i inact ] name\n"
-msgstr ""
-"       %s [ -x ìåã. ] [ -n åëÜ÷. ] [ -w ðñïåéä. ] [ -i áíåíåñãü ] üíïìá\n"
+msgid "       %s [-x max] [-n min] [-w warn] [-i inact] name\n"
+msgstr "       %s [-x ìåã.] [-n åëÜ÷.] [-w ðñïåéä.] [-i áíåíåñãü] üíïìá\n"
 
-#: src/passwd.c:245
-#, c-format
-msgid "       %s { -l | -u | -d | -S | -e } name\n"
+#: src/passwd.c:180
+#, fuzzy, c-format
+msgid "       %s {-l|-u|-d|-S|-e} name\n"
 msgstr "       %s { -l | -u | -d | -S | -e } üíïìá\n"
 
-#: src/passwd.c:347
+#: src/passwd.c:283
 #, c-format
 msgid "User %s has a TCFS key, his old password is required.\n"
 msgstr "Ï ÷ñÞóôçò %s Ý÷åé êëåéäß TCFS, áðáéôåßôáé ôï ðáëéü óõíèçìáôéêü.\n"
 
-#: src/passwd.c:348
+#: src/passwd.c:286
 msgid "You can use -t option to force the change.\n"
 msgstr ""
 "Ìðïñåßôå íá ÷ñçóéìïðïéÞóåôå ôçí -t ðáñÜìåôñï ãéá íá åîáíáãêÜóåôå ôçí\n"
 "ðñáãìáôïðïßçóç ôçò áëëáãÞò.\n"
 
-#: src/passwd.c:354
+#: src/passwd.c:292
 msgid "Old password: "
 msgstr "Ðáëéü Óõíèçìáôéêü: "
 
-#: src/passwd.c:361
+#: src/passwd.c:301
 #, c-format
 msgid "Incorrect password for `%s'\n"
 msgstr "ÅóöáëìÝíï óõíèçìáôéêü ãéá ôïí `%s'\n"
 
-#: src/passwd.c:374
+#: src/passwd.c:314
 #, c-format
 msgid "Warning: user %s has a TCFS key.\n"
 msgstr "Ðñïåéäïðïßçóç: Ï ÷ñÞóôçò %s Ý÷åé êëåéäß TCFS.\n"
 
-#: src/passwd.c:392
+#: src/passwd.c:333
 #, c-format
 msgid ""
 "Enter the new password (minimum of %d, maximum of %d characters)\n"
@@ -1677,15 +1661,15 @@ msgstr ""
 "Ðáñáêáëþ ÷ñçóéìïðïéÞóôå Ýíá óõíäõáóìü áðü êåöáëáßá êáé ìéêñÜ ãñÜììáôá\n"
 "êáèþò êáé áñéèìïýò.\n"
 
-#: src/passwd.c:399
+#: src/passwd.c:339
 msgid "New password: "
 msgstr "ÍÝï Óõíèçìáôéêü: "
 
-#: src/passwd.c:409
+#: src/passwd.c:350
 msgid "Try again.\n"
 msgstr "ÎáíáäïêéìÜóôå.\n"
 
-#: src/passwd.c:418
+#: src/passwd.c:361
 msgid ""
 "\n"
 "Warning: weak password (enter it again to use it anyway).\n"
@@ -1693,90 +1677,90 @@ msgstr ""
 "\n"
 "Ðñïóï÷Þ: áäýíáìï óõíèçìáôéêü (åéóÜãåôÝ ôï ðÜëé ãéá íá ôï ÷ñçóéìïðïéÞóåôå).\n"
 
-#: src/passwd.c:427
+#: src/passwd.c:371
 msgid "They don't match; try again.\n"
 msgstr "Äåí ôáéñéÜæïõí. ÄïêéìÜóôå îáíÜ.\n"
 
-#: src/passwd.c:512 src/passwd.c:528
+#: src/passwd.c:451 src/passwd.c:469
 #, c-format
 msgid "The password for %s cannot be changed.\n"
 msgstr "Ôï óõíèçìáôéêü ãéá ôïí %s äåí ìðïñåß íá áëëÜîåé.\n"
 
-#: src/passwd.c:556
+#: src/passwd.c:494
 #, c-format
 msgid "Sorry, the password for %s cannot be changed yet.\n"
 msgstr "Óõãíþìç, ôï óõíèçìáôéêü ãéá ôïí %s äåí ìðïñåß íá áëëÜîåé áêüìç.\n"
 
-#: src/passwd.c:693
+#: src/passwd.c:614
 #, c-format
 msgid "%s: out of memory\n"
 msgstr "%s: äåí õðÜñ÷åé åëåýèåñç ìíÞìç\n"
 
-#: src/passwd.c:845
+#: src/passwd.c:769
 msgid "Cannot lock the TCFS key database; try again later\n"
 msgstr "Áäõíáìßá êëåéäþìáôïò ôçò âÜóçò êëåéäéþí ôïõ TCFS. ÄïêéìÜóôå áñãüôåñá\n"
 
-#: src/passwd.c:851
+#: src/passwd.c:777
 msgid "Cannot open the TCFS key database.\n"
 msgstr "Áäõíáìßá áíïßãìáôïò ôçò âÜóçò êëåéäéþí ôïõ TCFS.\n"
 
-#: src/passwd.c:857
+#: src/passwd.c:785
 msgid "Error updating the TCFS key database.\n"
 msgstr "ÓöÜëìá êáôÜ ôçí áíáíÝùóç ôçò âÜóçò êëåéäéþí ôïõ TCFS.\n"
 
-#: src/passwd.c:862
+#: src/passwd.c:792
 msgid "Cannot commit TCFS changes.\n"
 msgstr "Áäõíáìßá õëïðïßçóçò ôùí áëëáãþí óôï TCFS.\n"
 
-#: src/passwd.c:1069
+#: src/passwd.c:975
 #, c-format
 msgid "%s: Cannot execute %s"
 msgstr "%s: Áäõíáìßá åêôÝëåóçò ôïõ %s"
 
-#: src/passwd.c:1176
+#: src/passwd.c:1077
 #, c-format
 msgid "%s: repository %s not supported\n"
 msgstr "%s: ç áðïèÞêç %s äåí õðïóôçñßæåôáé\n"
 
-#: src/passwd.c:1263
+#: src/passwd.c:1152
 #, c-format
 msgid "%s: Permission denied\n"
 msgstr "%s: ¶äåéá áðïññßöèçêå\n"
 
-#: src/passwd.c:1287
+#: src/passwd.c:1176
 #, c-format
 msgid "You may not change the password for %s.\n"
 msgstr "Äåí ìðïñåßôå íá áëëÜîåôå ôï óõíèçìáôéêü ãéá ôï(í) %s.\n"
 
-#: src/passwd.c:1352
+#: src/passwd.c:1242
 #, c-format
 msgid "Changing password for %s\n"
 msgstr "ÁëëáãÞ óõíèçìáôéêïý ãéá ôïí %s\n"
 
-#: src/passwd.c:1356
+#: src/passwd.c:1246
 #, c-format
 msgid "The password for %s is unchanged.\n"
 msgstr "Ôï óõíèçìáôéêü ãéá ôïí %s äåí Üëëáîå.\n"
 
-#: src/passwd.c:1412
+#: src/passwd.c:1297
 msgid "Password changed.\n"
 msgstr "Ôï óõíèçìáôéêü Üëëáîå.\n"
 
-#: src/pwck.c:98
+#: src/pwck.c:87
 #, fuzzy, c-format
-msgid "Usage: %s [ -sqr ] [ passwd [ shadow ] ]\n"
-msgstr "×ñÞóç: %s [ -qr ] [ passwd [ shadow ] ]\n"
+msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+msgstr "×ñÞóç: %s [-q] [-r] [-s] [passwd [shadow]]\n"
 
-#: src/pwck.c:100
+#: src/pwck.c:90
 #, fuzzy, c-format
-msgid "Usage: %s [ -sqr ] [ passwd ]\n"
-msgstr "×ñÞóç: %s [ -qr ] [ passwd ]\n"
+msgid "Usage: %s [-q] [-r] [-s] [passwd]\n"
+msgstr "×ñÞóç: %s [-q] [-r] [-s] [passwd]\n"
 
 #.
-#. * Tell the user this entire line is bogus and
-#. * ask them to delete it.
+#. * Tell the user this entire line is bogus and ask
+#. * them to delete it.
 #.
-#: src/pwck.c:304
+#: src/pwck.c:295
 msgid "invalid password file entry\n"
 msgstr "Ìç Ýãêõñç êáôá÷þñçóç óôï áñ÷åßï óõíèçìáôéêþí\n"
 
@@ -1784,32 +1768,24 @@ msgstr "
 #. * Tell the user this entry is a duplicate of
 #. * another and ask them to delete it.
 #.
-#: src/pwck.c:366
+#: src/pwck.c:357
 msgid "duplicate password entry\n"
 msgstr "áíôéãñáöÞ êáôá÷þñçóçò óôï áñ÷åßï óõíèçìáôéêþí\n"
 
-#: src/pwck.c:382
+#: src/pwck.c:373
 #, c-format
 msgid "invalid user name `%s'\n"
 msgstr "Ìç Ýãêõñï üíïìá ÷ñÞóôç `%s'\n"
 
-#: src/pwck.c:392
-#, c-format
-msgid "user %s: bad UID (%d)\n"
-msgstr "÷ñÞóôçò %s: ëáíèáóìÝíï UID (%d)\n"
-
 #.
 #. * No primary group, just give a warning
 #.
-#: src/pwck.c:407
-#, c-format
-msgid "user %s: no group %d\n"
+#: src/pwck.c:388
+#, fuzzy, c-format
+msgid "user %s: no group %u\n"
 msgstr "÷ñÞóôçò %s: êáìéÜ ïìÜäá %d\n"
 
-#.
-#. * Home directory doesn't exist, give a warning
-#.
-#: src/pwck.c:422
+#: src/pwck.c:404
 #, c-format
 msgid "user %s: directory %s does not exist\n"
 msgstr "÷ñÞóôçò %s: ï êáôÜëïãïò %s äåí õðÜñ÷åé\n"
@@ -1817,16 +1793,16 @@ msgstr "
 #.
 #. * Login shell doesn't exist, give a warning
 #.
-#: src/pwck.c:437
+#: src/pwck.c:420
 #, c-format
 msgid "user %s: program %s does not exist\n"
 msgstr "÷ñÞóôçò %s: ôï ðñüãñáììá %s äåí õðÜñ÷åé\n"
 
 #.
-#. * Tell the user this entire line is bogus and
-#. * ask them to delete it.
+#. * Tell the user this entire line is bogus and ask
+#. * them to delete it.
 #.
-#: src/pwck.c:473
+#: src/pwck.c:456
 msgid "invalid shadow password file entry\n"
 msgstr "Ìç Ýãêõñç êáôá÷þñçóç óôï áñ÷åßï óêéùäþí óõíèçìáôéêþí\n"
 
@@ -1834,7 +1810,7 @@ msgstr "
 #. * Tell the user this entry is a duplicate of
 #. * another and ask them to delete it.
 #.
-#: src/pwck.c:535
+#: src/pwck.c:518
 msgid "duplicate shadow password entry\n"
 msgstr "áíôéãñáöÞ êáôá÷þñçóçò óôï áñ÷åßï óêéùäþí óõíèçìáôéêþí\n"
 
@@ -1842,72 +1818,72 @@ msgstr "
 #. * Tell the user this entry has no matching
 #. * /etc/passwd entry and ask them to delete it.
 #.
-#: src/pwck.c:559
+#: src/pwck.c:542
 msgid "no matching password file entry\n"
 msgstr "Äåí âñÝèçêå êáôá÷þñçóç óôï áñ÷åßï óõíèçìáôéêþí ðïõ íá ôáéñßáæåé\n"
 
-#: src/pwck.c:576
+#: src/pwck.c:560
 #, c-format
 msgid "user %s: last password change in the future\n"
 msgstr "÷ñÞóôçò %s: ôåëåõôáßá áëëáãÞ óõíèçìáôéêïý óôï ìÝëëïí\n"
 
-#: src/pwconv.c:94 src/pwunconv.c:99
+#: src/pwconv.c:84 src/pwunconv.c:93
 #, c-format
 msgid "%s: can't lock passwd file\n"
 msgstr "%s: áäõíáìßá êëåéäþìáôïò ôïõ áñ÷åßïõ óõíèçìáôéêþí\n"
 
-#: src/pwconv.c:99 src/pwunconv.c:104
+#: src/pwconv.c:89 src/pwunconv.c:98
 #, c-format
 msgid "%s: can't open passwd file\n"
 msgstr "%s: áäõíáìßá áíïßãìáôïò ôïõ áñ÷åßïõ óõíèçìáôéêþí\n"
 
-#: src/pwconv.c:126
+#: src/pwconv.c:117
 #, c-format
 msgid "%s: can't remove shadow entry for %s\n"
 msgstr ""
 "áäõíáìßá áöáßñåóçò êáôá÷þñçóçò ãéá ôïí %s, áðü ôï áñ÷åßï óêéùäþí "
 "óõíèçìáôéêþí\n"
 
-#: src/pwconv.c:169
+#: src/pwconv.c:163
 #, c-format
 msgid "%s: can't update passwd entry for %s\n"
 msgstr "%s: áäõíáìßá áíáíÝùóçò êáôá÷þñçóçò óõíèçìáôéêïý ãéá ôïí %s\n"
 
-#: src/pwconv.c:176
+#: src/pwconv.c:170
 #, c-format
 msgid "%s: can't update shadow file\n"
 msgstr "%s: áäõíáìßá áíáíÝùóçò êáôá÷þñçóçò ôïõ áñ÷åßïõ óêéùäþí óõíèçìáôéêþí\n"
 
-#: src/pwconv.c:180
+#: src/pwconv.c:175
 #, c-format
 msgid "%s: can't update passwd file\n"
 msgstr "%s: áäõíáìßá áíáíÝùóçò áñ÷åßïõ óõíèçìáôéêþí\n"
 
-#: src/pwunconv.c:53
+#: src/pwunconv.c:50
 #, c-format
 msgid "%s: Shadow passwords are not configured.\n"
 msgstr "%s: Ôá óêéþäç óõíèçìáôéêÜ äåí Ý÷ïõí äéáìïñöùèåß.\n"
 
-#: src/pwunconv.c:162
+#: src/pwunconv.c:160
 #, c-format
 msgid "%s: can't update entry for user %s\n"
 msgstr "%s: áäõíáìßá áíáíÝùóçò êáôá÷þñçóçò ãéá ôïí ÷ñÞóôç %s\n"
 
-#: src/pwunconv.c:179
+#: src/pwunconv.c:181
 #, c-format
 msgid "%s: can't delete shadow password file\n"
 msgstr "%s: Äåí åßíáé äõíáôüí íá äéáãñáöåß ôï áñ÷åßï óêéùäþí óõíèçìáôéêþí\n"
 
-#: src/su.c:140
+#: src/su.c:133
 msgid "Sorry."
 msgstr "ËõðÜìáé."
 
-#: src/su.c:222
+#: src/su.c:216
 #, c-format
 msgid "%s: must be run from a terminal\n"
 msgstr "%s: ðñÝðåé íá åêôåëåóôåß áðü ôåñìáôéêü\n"
 
-#: src/su.c:310
+#: src/su.c:306
 #, c-format
 msgid "%s: pam_start: error %d\n"
 msgstr "%s: pam_start: óöÜëìá %d\n"
@@ -1917,18 +1893,17 @@ msgstr "%s: pam_start: 
 msgid "Unknown id: %s\n"
 msgstr "Áãíùóôç ôáõôüôçôá: %s\n"
 
-#. access denied (-1) or unexpected value
-#: src/su.c:371 src/su.c:386
+#: src/su.c:373 src/su.c:390
 #, c-format
 msgid "You are not authorized to su %s\n"
 msgstr "Äåí Ý÷åôå Üäåéá ãéá su %s\n"
 
 #. require own password
-#: src/su.c:382
+#: src/su.c:385
 msgid "(Enter your own password.)"
 msgstr "(ÅéóÜãåôå ôï äéêü óáò óõíèçìáôéêü.)"
 
-#: src/su.c:413
+#: src/su.c:419
 #, c-format
 msgid ""
 "%s: %s\n"
@@ -1937,28 +1912,23 @@ msgstr ""
 "%s: %s\n"
 "(ÁãíïÞèçêå)\n"
 
-#: src/su.c:615
+#: src/su.c:626
 msgid "No shell\n"
 msgstr "Äåí õðÜñ÷åé öëïéüò\n"
 
 #. must be a password file!
-#: src/sulogin.c:136
+#: src/sulogin.c:132
 msgid "No password file\n"
 msgstr "Äåí õðÜñ÷åé áñ÷åßï óõíèçìáôéêþí\n"
 
 #.
 #. * Fail secure
 #.
-#: src/sulogin.c:178
+#: src/sulogin.c:174
 msgid "No password entry for 'root'\n"
 msgstr "Äåí õðÜñ÷åé êáôá÷þñçóç óõíèçìáôéêïý ãéá ôïí 'root'\n"
 
-#.
-#. * Here we prompt for the root password, or if no password is
-#. * given we just exit.
-#.
-#. get a password for root
-#: src/sulogin.c:192
+#: src/sulogin.c:190
 msgid ""
 "\n"
 "Type control-d to proceed with normal startup,\n"
@@ -1969,7 +1939,7 @@ msgstr ""
 "(Þ äþóôå ôï óõíèçìáôéêü ôïõ root ãéá óõíôÞñçóç ôïõ óõóôÞìáôïò):"
 
 #. make new environment active
-#: src/sulogin.c:241
+#: src/sulogin.c:243
 msgid "Entering System Maintenance Mode\n"
 msgstr "¸íáñîç ÊáôÜóôáóçò ÓõíôÞñçóçò ÓõóôÞìáôïò\n"
 
@@ -1978,527 +1948,530 @@ msgstr "
 msgid "%s: rebuild the group database\n"
 msgstr "%s: åðáíáêôßóôå ôçí âÜóç äåäïìÝíùí ïìÜäùí\n"
 
-#: src/useradd.c:258
+#: src/useradd.c:260
 #, c-format
 msgid "%s: rebuild the shadow group database\n"
 msgstr "%s: åðáíáêôßóôå ôçí âÜóç äåäïìÝíùí ôùí óêéùäþí óõíèçìáôéêþí ïìÜäùí\n"
 
-#: src/useradd.c:295 src/usermod.c:974
+#: src/useradd.c:295 src/useradd.c:309 src/usermod.c:981 src/usermod.c:995
 #, c-format
 msgid "%s: invalid numeric argument `%s'\n"
 msgstr "%s: Ìç Ýãêõñç áñéèìçôéêÞ ðáñÜìåôñïò `%s'\n"
 
-#: src/useradd.c:351
+#: src/useradd.c:365
 #, c-format
 msgid "%s: unknown gid %s\n"
 msgstr "%s: Üãíùóôï gid %s\n"
 
-#: src/useradd.c:358 src/useradd.c:660 src/useradd.c:1246 src/usermod.c:261
-#: src/usermod.c:1105
+#: src/useradd.c:373 src/useradd.c:676 src/useradd.c:1269 src/usermod.c:260
+#: src/usermod.c:1128
 #, c-format
 msgid "%s: unknown group %s\n"
 msgstr "%s: Üãíùóôç ïìÜäá %s\n"
 
-#: src/useradd.c:426
-#, c-format
-msgid "group=%s,%ld  basedir=%s  skel=%s\n"
+#: src/useradd.c:440
+#, fuzzy, c-format
+msgid "group=%s,%u  basedir=%s  skel=%s\n"
 msgstr "ïìÜäá=%s,%ld  âáóéêüò_êáôáë=%s  óêåë=%s\n"
 
-#: src/useradd.c:429
+#: src/useradd.c:444
 #, c-format
 msgid "shell=%s  "
 msgstr "öëïéüò=%s  "
 
-#: src/useradd.c:431
+#: src/useradd.c:446
 #, c-format
 msgid "inactive=%ld  expire=%s"
 msgstr "áíåíåñãü=%ld  ëÞîç=%s"
 
-#: src/useradd.c:435
-#, c-format
-msgid "GROUP=%ld\n"
+#: src/useradd.c:450
+#, fuzzy, c-format
+msgid "GROUP=%u\n"
 msgstr "ÏÌÁÄÁ=%ld\n"
 
-#: src/useradd.c:436
+#: src/useradd.c:451
 #, c-format
 msgid "HOME=%s\n"
 msgstr "ÌÇÔÑÉÊÏÓ_ÊÁÔÁËÏÃÏÓ=%s\n"
 
-#: src/useradd.c:438
+#: src/useradd.c:453
 #, c-format
 msgid "INACTIVE=%ld\n"
 msgstr "ÁÍÅÍÅÑÃÏÓ=%ld\n"
 
-#: src/useradd.c:439
+#: src/useradd.c:454
 #, c-format
 msgid "EXPIRE=%s\n"
 msgstr "ËÇÎÇ=%s\n"
 
-#: src/useradd.c:441
+#: src/useradd.c:456
 #, c-format
 msgid "SHELL=%s\n"
 msgstr "ÊÅËÕÖÏÓ=%s\n"
 
-#: src/useradd.c:442
+#: src/useradd.c:457
 #, c-format
 msgid "SKEL=%s\n"
 msgstr "ÓÊÅË=%s\n"
 
-#: src/useradd.c:482
+#: src/useradd.c:498
 #, c-format
 msgid "%s: cannot create new defaults file\n"
 msgstr "%s: áäõíáìßá äçìéïõñãßáò íÝïõ áñ÷åßïõ ðñïêáèïñéóìÝíùí ñõèìßóåùí\n"
 
-#: src/useradd.c:488
+#: src/useradd.c:503
 #, fuzzy, c-format
 msgid "%s: cannot open new defaults file\n"
 msgstr "%s: áäõíáìßá äçìéïõñãßáò íÝïõ áñ÷åßïõ ðñïêáèïñéóìÝíùí ñõèìßóåùí\n"
 
-#: src/useradd.c:582 src/useradd.c:593
+#: src/useradd.c:596 src/useradd.c:608
 #, c-format
 msgid "%s: rename: %s"
 msgstr "%s: ìåôïíïìáóßá: %s"
 
-#: src/useradd.c:680 src/usermod.c:281
+#: src/useradd.c:697 src/usermod.c:281
 #, c-format
 msgid "%s: group `%s' is a NIS group.\n"
 msgstr "%s: Ç ïìÜäá `%s' åßíáé NIS ïìÜäá.\n"
 
-#: src/useradd.c:688 src/usermod.c:289
+#: src/useradd.c:706 src/usermod.c:290
 #, c-format
 msgid "%s: too many groups specified (max %d).\n"
 msgstr "%s: Ðñïóäéïñßóôçêáí õðåñâïëéêÝò ïìÜäåò (ìåã. %d).\n"
 
-#: src/useradd.c:720 src/usermod.c:321
+#: src/useradd.c:738 src/usermod.c:322
 #, c-format
 msgid "usage: %s\t[-u uid [-o]] [-g group] [-G group,...] \n"
 msgstr "÷ñÞóç: %s\t[-u uid [-o]] [-g ïìÜäá] [-G ïìÜäá,...] \n"
 
-#: src/useradd.c:723
+#: src/useradd.c:742
 msgid "\t\t[-d home] [-s shell] [-c comment] [-m [-k template]]\n"
 msgstr ""
 "\t\t[-d ìçôñéêüò_êáôÜëïãïò] [-s öëïéüò] [-c ó÷üëéï]\n"
 "\t\t[-m [-k êáíüíáò]]\n"
 
-#: src/useradd.c:726 src/usermod.c:327
+#: src/useradd.c:745 src/usermod.c:329
+#, fuzzy
 msgid "[-f inactive] [-e expire ] "
-msgstr "[-f áíåíåñãü] [-e ëÞîç ] "
+msgstr "[-f áíåíåñãü] [-e ëÞîç] "
 
-#: src/useradd.c:729
+#: src/useradd.c:748
 msgid "[-A program] "
 msgstr "[-A ðñüãñáììá] "
 
-#: src/useradd.c:731
+#: src/useradd.c:750
 msgid "[-p passwd] name\n"
 msgstr "[-p óõíèçìáôéêü] üíïìá\n"
 
-#: src/useradd.c:733
+#: src/useradd.c:753
 #, c-format
 msgid "       %s\t-D [-g group] [-b base] [-s shell]\n"
 msgstr "       %s\t-D [-g ïìÜäá] [-b âÜóç] [-s öëïéüò]\n"
 
-#: src/useradd.c:736
+#: src/useradd.c:756
+#, fuzzy
 msgid "\t\t[-f inactive] [-e expire ]\n"
-msgstr "\t\t[-f áíåíåñãü] [-e ëÞîç ]\n"
+msgstr "\t\t[-f áíåíåñãü] [-e ëÞîç]\n"
 
-#: src/useradd.c:833 src/usermod.c:479
+#: src/useradd.c:850 src/usermod.c:480
 #, c-format
 msgid "%s: error locking group file\n"
 msgstr "%s: ÓöÜëìá êáôÜ ôï êëåßäùìá ôïõ áñ÷åßïõ ïìÜäùí\n"
 
-#: src/useradd.c:837 src/usermod.c:484
+#: src/useradd.c:855 src/usermod.c:486
 #, c-format
 msgid "%s: error opening group file\n"
 msgstr "%s: ÓöÜëìá êáôÜ ôï Üíïéãìá ôïõ áñ÷åßïõ ïìÜäùí\n"
 
-#: src/useradd.c:842 src/usermod.c:591
+#: src/useradd.c:862 src/usermod.c:597
 #, c-format
 msgid "%s: error locking shadow group file\n"
 msgstr "%s: ÓöÜëìá êáôÜ ôï êëåßäùìá ôïõ áñ÷åßïõ óêéùäþí óõíèçìáôéêþí ïìÜäùí\n"
 
-#: src/useradd.c:847 src/usermod.c:597
+#: src/useradd.c:867 src/usermod.c:603
 #, c-format
 msgid "%s: error opening shadow group file\n"
 msgstr "%s: ÓöÜëìá êáôÜ ôï Üíïéãìá ôïõ áñ÷åßïõ óêéùäþí óõíèçìáôéêþí ïìÜäùí\n"
 
-#: src/useradd.c:1019
-#, c-format
-msgid "%s: uid %d is not unique\n"
-msgstr "%s: Ôï uid %d äåí åßíáé ìïíáäéêü\n"
+#: src/useradd.c:1039
+#, fuzzy, c-format
+msgid "%s: uid %u is not unique\n"
+msgstr "%s: Ôï uid %ld äåí åßíáé ìïíáäéêü\n"
 
-#: src/useradd.c:1049
+#: src/useradd.c:1069
 #, c-format
 msgid "%s: can't get unique uid\n"
 msgstr "%s: áäõíáìßá åõñåóçò ìïíáäéêïý uid\n"
 
-#: src/useradd.c:1157 src/useradd.c:1301 src/usermod.c:1053 src/usermod.c:1064
-#: src/usermod.c:1074 src/usermod.c:1120 src/usermod.c:1164
+#: src/useradd.c:1174 src/useradd.c:1325 src/usermod.c:1075 src/usermod.c:1086
+#: src/usermod.c:1096 src/usermod.c:1143 src/usermod.c:1187
 #, c-format
 msgid "%s: invalid field `%s'\n"
 msgstr "%s: Ìç Ýãêõñï ðåäßï `%s'\n"
 
-#: src/useradd.c:1171
+#: src/useradd.c:1189
 #, c-format
 msgid "%s: invalid base directory `%s'\n"
 msgstr "%s: Ìç Ýãêõñïò êáôÜëïãïò âÜóçò `%s'\n"
 
-#: src/useradd.c:1181
+#: src/useradd.c:1199
 #, c-format
 msgid "%s: invalid comment `%s'\n"
 msgstr "%s: Ìç Ýãêõñï ó÷üëéï `%s'\n"
 
-#: src/useradd.c:1191
+#: src/useradd.c:1210
 #, c-format
 msgid "%s: invalid home directory `%s'\n"
 msgstr "%s: Ìç Ýãêõñïò ìçôñéêüò êáôÜëïãïò ÷ñÞóôç `%s'\n"
 
-#: src/useradd.c:1209 src/usermod.c:1087
+#: src/useradd.c:1229 src/usermod.c:1110
 #, c-format
 msgid "%s: invalid date `%s'\n"
 msgstr "%s: Ìç Ýãêõñç çìåñïìçíßá `%s'\n"
 
-#: src/useradd.c:1221
+#: src/useradd.c:1242
 #, c-format
 msgid "%s: shadow passwords required for -e\n"
 msgstr "%s: óêéþäç óõíèçìáôéêÜ áðáéôïýíôáé ãéá ôï -e\n"
 
-#: src/useradd.c:1236
+#: src/useradd.c:1258
 #, c-format
 msgid "%s: shadow passwords required for -f\n"
 msgstr "%s: óêéþäç óõíèçìáôéêÜ áðáéôïýíôáé ãéá -f\n"
 
-#: src/useradd.c:1310
+#: src/useradd.c:1336
 #, c-format
 msgid "%s: invalid shell `%s'\n"
 msgstr "%s: Ìç Ýãêõñïò öëïéüò `%s'\n"
 
-#: src/useradd.c:1351
+#: src/useradd.c:1377
 #, c-format
 msgid "%s: invalid user name `%s'\n"
 msgstr "%s: Ìç Ýãêõñï üíïìá ÷ñÞóôç `%s'\n"
 
-#: src/useradd.c:1387 src/userdel.c:298 src/usermod.c:1232
+#: src/useradd.c:1413 src/userdel.c:298 src/usermod.c:1255
 #, c-format
 msgid "%s: cannot rewrite password file\n"
 msgstr "%s: áäõíáìßá åðáíåããñáöÞò ôïõ áñ÷åßïõ óõíèçìáôéêþí\n"
 
-#: src/useradd.c:1392 src/userdel.c:301 src/usermod.c:1237
+#: src/useradd.c:1420 src/userdel.c:303 src/usermod.c:1262
 #, c-format
 msgid "%s: cannot rewrite shadow password file\n"
 msgstr "%s: áäõíáìßá åðáíåããñáöÞò ôïõ áñ÷åßïõ óêéùäþí óõíèçìáôéêþí\n"
 
-#: src/useradd.c:1432 src/userdel.c:365 src/usermod.c:1272
+#: src/useradd.c:1461 src/userdel.c:367 src/usermod.c:1296
 #, c-format
 msgid "%s: unable to lock password file\n"
 msgstr "%s: Áäõíáìßá êëåéäþìáôïò ôïõ áñ÷åßïõ óõíèçìáôéêþí\n"
 
-#: src/useradd.c:1436 src/userdel.c:369 src/usermod.c:1276
+#: src/useradd.c:1466 src/userdel.c:372 src/usermod.c:1301
 #, c-format
 msgid "%s: unable to open password file\n"
 msgstr "%s: Áäõíáìßá áíïßãìáôïò ôïõ áñ÷åßïõ óõíèçìáôéêþí\n"
 
-#: src/useradd.c:1442 src/userdel.c:374 src/usermod.c:1281
+#: src/useradd.c:1474 src/userdel.c:379 src/usermod.c:1308
 #, c-format
 msgid "%s: cannot lock shadow password file\n"
 msgstr "%s: áäõíáìßá êëåéäþìáôïò ôïõ áñ÷åßïõ óêéùäþí óõíèçìáôéêþí\n"
 
-#: src/useradd.c:1448 src/userdel.c:379 src/usermod.c:1286
+#: src/useradd.c:1481 src/userdel.c:385 src/usermod.c:1314
 #, c-format
 msgid "%s: cannot open shadow password file\n"
 msgstr "%s: áäõíáìßá áíïßãìáôïò áñ÷åßïõ óêéùäþí óõíèçìáôéêþí\n"
 
-#: src/useradd.c:1547 src/usermod.c:1373
+#: src/useradd.c:1580 src/usermod.c:1405
 #, c-format
 msgid "%s: error adding authentication method\n"
 msgstr "%s: ÓöÜëìá êáôÜ ôçí ðñïóèÞêç ìåèüäïõ åîáêñßâùóçò\n"
 
-#: src/useradd.c:1570
+#: src/useradd.c:1604
 #, c-format
 msgid "%s: error adding new password entry\n"
 msgstr ""
 "%s: ÓöÜëìá êáôÜ ôçí ðñïóèÞêç íÝáò êáôá÷þñçóçò óôï áñ÷åßï óõíèçìáôéêþí\n"
 
-#: src/useradd.c:1585
+#: src/useradd.c:1618
 #, c-format
 msgid "%s: error updating password dbm entry\n"
 msgstr ""
 "%s: ÓöÜëìá êáôÜ ôçí áíáíÝùóç êáôá÷ùñÞóåùí óôï dbm áñ÷åßï óõíèçìáôéêþí\n"
 
-#: src/useradd.c:1601 src/usermod.c:1432
+#: src/useradd.c:1634 src/usermod.c:1471
 #, c-format
 msgid "%s: error adding new shadow password entry\n"
 msgstr ""
 "%s: ÓöÜëìá êáôÜ ôçí ðñïóèÞêç íÝáò êáôá÷þñçóçò óôï áñ÷åßï óêéùäþí "
 "óõíèçìáôéêþí\n"
 
-#: src/useradd.c:1617 src/usermod.c:1447
+#: src/useradd.c:1650 src/usermod.c:1488
 #, c-format
 msgid "%s: error updating shadow passwd dbm entry\n"
 msgstr ""
 "%s: ÓöÜëìá êáôÜ ôçí áíáíÝùóç êáôá÷ùñÞóåùí óôï dbm áñ÷åßï óêéùäþí "
 "óõíèçìáôéêþí\n"
 
-#: src/useradd.c:1649
+#: src/useradd.c:1682
 #, c-format
 msgid "%s: cannot create directory %s\n"
 msgstr "%s: áäõíáìßá äçìéïõñãßáò êáôáëüãïõ %s\n"
 
-#: src/useradd.c:1772 src/usermod.c:1210
+#: src/useradd.c:1806 src/usermod.c:1233
 #, c-format
 msgid "%s: user %s exists\n"
 msgstr "%s: Ï ÷ñÞóôçò %s õðÜñ÷åé\n"
 
-#: src/useradd.c:1784
+#: src/useradd.c:1821
 #, c-format
 msgid ""
 "%s: group %s exists - if you want to add this user to that group, use -g.\n"
 msgstr ""
 
-#: src/useradd.c:1815
+#: src/useradd.c:1854
 #, c-format
 msgid "%s: warning: CREATE_HOME not supported, please use -m instead.\n"
 msgstr ""
 
-#: src/userdel.c:133
+#: src/userdel.c:129
 #, c-format
 msgid "usage: %s [-r] name\n"
 msgstr "÷ñÞóç: %s [-r] üíïìá\n"
 
-#: src/userdel.c:184 src/userdel.c:266
+#: src/userdel.c:181 src/userdel.c:267
 #, c-format
 msgid "%s: error updating group entry\n"
 msgstr "%s: ÓöÜëìá êáôÜ ôçí áíáíÝùóç êáôá÷ùñÞóçò ïìÜäáò\n"
 
-#: src/userdel.c:194 src/userdel.c:275
+#: src/userdel.c:191 src/userdel.c:276
 #, c-format
 msgid "%s: cannot update dbm group entry\n"
 msgstr "%s: áäõíáìßá áíáíÝùóçò ôçò dbm êáôá÷þñçóçò óôï áñ÷åßï ïìÜäùí\n"
 
-#: src/userdel.c:221
+#: src/userdel.c:219
 #, fuzzy, c-format
 msgid "%s: cannot remove dbm group entry\n"
 msgstr "%s: áäõíáìßá áíáíÝùóçò ôçò dbm êáôá÷þñçóçò óôï áñ÷åßï ïìÜäùí\n"
 
-#: src/userdel.c:306
+#: src/userdel.c:308
 #, c-format
 msgid "%s: cannot rewrite TCFS key file\n"
 msgstr "%s: áäõíáìßá åðáíåããñáöÞò ôïõ áñ÷åßïõ êëåéäéþí ôïõ TCFS\n"
 
-#: src/userdel.c:386
+#: src/userdel.c:392
 #, c-format
 msgid "%s: cannot lock TCFS key file\n"
 msgstr "%s: áäõíáìßá êëåéäþìáôïò ôïõ áñ÷åßïõ êëåéäéþí ôïõ TCFS\n"
 
-#: src/userdel.c:390
+#: src/userdel.c:397
 #, c-format
 msgid "%s: cannot open TCFS key file\n"
 msgstr "%s: áäõíáìßá áíïßãìáôïò ôïõ áñ÷åßïõ êëåéäéþí ôïõ TCFS\n"
 
-#: src/userdel.c:399
+#: src/userdel.c:408
 #, c-format
 msgid "%s: cannot open group file\n"
 msgstr "%s: áäõíáìßá áíïßãìáôïò áñ÷åßïõ ïìÜäùí\n"
 
-#: src/userdel.c:409
+#: src/userdel.c:419
 #, c-format
 msgid "%s: cannot open shadow group file\n"
 msgstr "%s: áäõíáìßá áíïßãìáôïò áñ÷åßïõ óêéùäþí óõíèçìáôéêþí ïìÜäùí\n"
 
-#: src/userdel.c:440 src/userdel.c:455
+#: src/userdel.c:451 src/userdel.c:468
 #, c-format
 msgid "%s: error deleting authentication\n"
 msgstr "%s: ÓöÜëìá êáôÜ ôçí äéáãñáöÞ åîáêñßâùóçò\n"
 
-#: src/userdel.c:464
+#: src/userdel.c:479
 #, c-format
 msgid "%s: error deleting password entry\n"
 msgstr "%s: ÓöÜëìá êáôÜ ôçí äéáãñáöÞ êáôá÷þñçóçò óôï áñ÷åßï óõíèçìáôéêþí\n"
 
-#: src/userdel.c:467
+#: src/userdel.c:485
 #, c-format
 msgid "%s: error deleting shadow password entry\n"
 msgstr ""
 "%s: ÓöÜëìá êáôÜ ôçí äéáãñáöÞ êáôá÷þñçóçò óôï áñ÷åßï óêéùäþí óõíèçìáôéêþí\n"
 
-#: src/userdel.c:476
+#: src/userdel.c:496
 #, c-format
 msgid "%s: error deleting TCFS entry\n"
 msgstr "%s: ÓöÜëìá êáôÜ ôçí äéáãñáöÞ êáôá÷þñçóçò ôïõ TCFS\n"
 
-#: src/userdel.c:489
+#: src/userdel.c:510
 #, c-format
 msgid "%s: error deleting password dbm entry\n"
 msgstr "%s: ÓöÜëìá êáôÜ ôçí äéáãñáöÞ êáôá÷þñçóçò óôï dbm áñ÷åßï óõíèçìáôéêþí\n"
 
-#: src/userdel.c:508
+#: src/userdel.c:533
 #, c-format
 msgid "%s: error deleting shadow passwd dbm entry\n"
 msgstr ""
 "%s: ÓöÜëìá êáôÜ ôçí äéáãñáöÞ êáôá÷þñçóçò óôï dbm áñ÷åßï óêéùäþí "
 "óõíèçìáôéêþí\n"
 
-#: src/userdel.c:549
+#: src/userdel.c:569
 #, c-format
 msgid "%s: user %s is currently logged in\n"
 msgstr "%s: Ï ÷ñÞóôçò %s âñßóêåôáé óôï óýóôçìá\n"
 
-#: src/userdel.c:666
+#: src/userdel.c:659
 #, c-format
 msgid "%s: warning: %s not owned by %s, not removing\n"
 msgstr "%s: ðñïåéäïðïßçóç: Ôï %s äåí áíÞêåé óôïí %s, äåí äéáãñÜöåôáé\n"
 
-#: src/userdel.c:672
+#: src/userdel.c:666
 #, c-format
 msgid "%s: warning: can't remove "
 msgstr "%s: ðñïåéäïðïßçóç: áäõíáìßá äéáãñáöÞò "
 
-#: src/userdel.c:791 src/usermod.c:1001
+#: src/userdel.c:758 src/usermod.c:1023
 #, c-format
 msgid "%s: user %s does not exist\n"
 msgstr "%s: Ï ÷ñÞóôçò %s äåí õðÜñ÷åé\n"
 
-#: src/userdel.c:805 src/usermod.c:1017
+#: src/userdel.c:770 src/usermod.c:1039
 #, c-format
 msgid "%s: user %s is a NIS user\n"
 msgstr "%s: Ï ÷ñÞóôçò %s åßíáé NIS ÷ñÞóôçò\n"
 
-#: src/userdel.c:842
+#: src/userdel.c:799
 #, c-format
 msgid "%s: %s not owned by %s, not removing\n"
 msgstr "%s: Ôï %s äåí áíÞêåé óôïí %s, äåí áöáéñåßôáé\n"
 
-#: src/userdel.c:865
+#: src/userdel.c:818
 #, c-format
 msgid "%s: not removing directory %s (would remove home of user %s)\n"
 msgstr ""
 "%s: Äåí äéáãñÜöåôáé ï êáôÜëïãïò %s (èá áöáéñïýóå ôïí ìçôñéêü êáôÜëïãï ôïõ "
 "÷ñÞóôç %s)\n"
 
-#: src/userdel.c:878
+#: src/userdel.c:830
 #, c-format
 msgid "%s: error removing directory %s\n"
 msgstr "%s: ÓöÜëìá êáôÜ ôçí äéáãñáöÞ ôïõ êáôáëüãïõ %s\n"
 
-#: src/usermod.c:324
+#: src/usermod.c:326
 msgid "\t\t[-d home [-m]] [-s shell] [-c comment] [-l new_name]\n"
 msgstr ""
 "\t\t[-d ìçôñéêüò_êáôÜëïãïò [-m]] [-s öëïéüò] [-c ó÷üëéï]\n"
 "\t\t[-l íÝï_üíïìá]\n"
 
-#: src/usermod.c:330
+#: src/usermod.c:332
+#, fuzzy
 msgid "[-A {DEFAULT|program},... ] "
-msgstr "[-A {DEFAULT|ðñüãñáììá},... ] "
+msgstr "[-A {DEFAULT|ðñüãñáììá},...] "
 
-#: src/usermod.c:332
+#: src/usermod.c:334
 #, fuzzy
 msgid "[-p passwd] [-L|-U] name\n"
 msgstr "[-p óõíèçìáôéêü] üíïìá\n"
 
-#: src/usermod.c:511
+#: src/usermod.c:514
 #, c-format
 msgid "%s: out of memory in update_group\n"
 msgstr "%s: äåí õðÜñ÷åé åëåýèåñç ìíÞìç óôï update_group\n"
 
-#: src/usermod.c:634
+#: src/usermod.c:641
 #, c-format
 msgid "%s: out of memory in update_gshadow\n"
 msgstr "%s:  óôï update_gshadow\n"
 
-#: src/usermod.c:1187
+#: src/usermod.c:1210
 #, c-format
 msgid "%s: no flags given\n"
 msgstr "%s: Äåí äüèçêáí åíäåßîåéò\n"
 
-#: src/usermod.c:1194
+#: src/usermod.c:1217
 #, c-format
 msgid "%s: shadow passwords required for -e and -f\n"
 msgstr "%s: óêéþäç óõíèçìáôéêÜ áðáéôïýíôáé ãéá ôï -e êáé -f\n"
 
-#: src/usermod.c:1215
-#, c-format
-msgid "%s: uid %ld is not unique\n"
+#: src/usermod.c:1239
+#, fuzzy, c-format
+msgid "%s: uid %lu is not unique\n"
 msgstr "%s: Ôï uid %ld äåí åßíáé ìïíáäéêü\n"
 
-#: src/usermod.c:1363
+#: src/usermod.c:1392
 #, c-format
 msgid "%s: error deleting authentication method\n"
 msgstr "%s: ÓöÜëìá êáôÜ ôçí äéáãñáöÞ ìåèüäïõ åîáêñßâùóçò\n"
 
-#: src/usermod.c:1383
+#: src/usermod.c:1418
 #, c-format
 msgid "%s: error changing authentication method\n"
 msgstr "%s: ÓöÜëìá êáôÜ ôçí áëëáãÞ ìåèüäïõ åîáêñßâùóçò\n"
 
-#: src/usermod.c:1400
+#: src/usermod.c:1436
 #, c-format
 msgid "%s: error changing password entry\n"
 msgstr "%s: ÓöÜëìá êáôÜ ôçí áëëáãÞ êáôá÷þñçóçò óõíèçìáôéêïý\n"
 
-#: src/usermod.c:1406
+#: src/usermod.c:1442
 #, c-format
 msgid "%s: error removing password entry\n"
 msgstr "%s: ÓöÜëìá êáôÜ ôçí áöáßñåóç êáôá÷þñçóçò óôï áñ÷åßï óõíèçìáôéêþí\n"
 
-#: src/usermod.c:1414
+#: src/usermod.c:1451
 #, c-format
 msgid "%s: error adding password dbm entry\n"
 msgstr ""
 "%s: ÓöÜëìá êáôÜ ôçí ðñïóèÞêç íÝáò êáôá÷þñçóçò óôï dbm áñ÷åßï óõíèçìáôéêþí\n"
 
-#: src/usermod.c:1421
+#: src/usermod.c:1459
 #, c-format
 msgid "%s: error removing passwd dbm entry\n"
 msgstr ""
 "%s: ÓöÜëìá êáôÜ ôçí áöáßñåóç êáôá÷þñçóçò áðü ôï dbm áñ÷åßï óõíèçìáôéêþí\n"
 
-#: src/usermod.c:1438
+#: src/usermod.c:1478
 #, c-format
 msgid "%s: error removing shadow password entry\n"
 msgstr ""
 "%s: ÓöÜëìá êáôÜ ôçí áöáßñåóç êáôá÷þñçóçò óôï áñ÷åßï óêéùäþí óõíèçìáôéêþí\n"
 
-#: src/usermod.c:1453
+#: src/usermod.c:1495
 #, c-format
 msgid "%s: error removing shadow passwd dbm entry\n"
 msgstr ""
 "%s: ÓöÜëìá êáôÜ ôçí áöáßñåóç êáôá÷þñçóçò óôï dbm áñ÷åßï óêéùäþí "
 "óõíèçìáôéêþí\n"
 
-#: src/usermod.c:1484
+#: src/usermod.c:1524
 #, c-format
 msgid "%s: directory %s exists\n"
 msgstr "%s: ï êáôÜëïãïò %s õðÜñ÷åé\n"
 
-#: src/usermod.c:1491
+#: src/usermod.c:1533
 #, c-format
 msgid "%s: can't create %s\n"
 msgstr "%s: áäõíáìßá äçìéïõñãßáò ôïõ %s\n"
 
-#: src/usermod.c:1497
+#: src/usermod.c:1539
 #, c-format
 msgid "%s: can't chown %s\n"
 msgstr "%s: Áäõíáìßá áëëáãÞò éäéïêôÞôç(chown) ôïõ %s\n"
 
-#: src/usermod.c:1513
+#: src/usermod.c:1556
 #, c-format
 msgid "%s: cannot rename directory %s to %s\n"
 msgstr "%s: áäõíáìßá ìåôïíïìáóßáò ôïõ êáôáëüãïõ %s óå %s\n"
 
 #. better leave it alone
-#: src/usermod.c:1610
+#: src/usermod.c:1653
 #, c-format
 msgid "%s: warning: %s not owned by %s\n"
 msgstr "%s: ðñïåéäïðïßçóç: Ôï %s äåí áíÞêåé óôïí %s\n"
 
-#: src/usermod.c:1616
+#: src/usermod.c:1659
 msgid "failed to change mailbox owner"
 msgstr "áðïôõ÷ßá áëëáãÞò ôïõ éäéïêôÞôç ôïõ ãñáììáôïêéâùôßïõ"
 
-#: src/usermod.c:1623
+#: src/usermod.c:1667
 msgid "failed to rename mailbox"
 msgstr "áðïôõ÷ßá ìåôïíïìáóßáò ãñáììáôïêéâùôßïõ"
 
-#: src/vipw.c:102
+#: src/vipw.c:104
 #, c-format
 msgid ""
 "\n"
@@ -2507,21 +2480,21 @@ msgstr ""
 "\n"
 "%s: Ôï %s äåí Üëëáîå\n"
 
-#: src/vipw.c:127
+#: src/vipw.c:132
 #, fuzzy
 msgid "Couldn't lock file"
 msgstr "%s: áäõíáìßá îåêëåéäþìáôïò áñ÷åßïõ\n"
 
-#: src/vipw.c:134
+#: src/vipw.c:141
 msgid "Couldn't make backup"
 msgstr ""
 
-#: src/vipw.c:187
+#: src/vipw.c:206
 #, c-format
 msgid "%s: can't restore %s: %s (your changes are in %s)\n"
 msgstr "%s: áäõíáìßá åðáíáöïñÜò %s: %s (ïé áëëáãÝò åßíáé óôï %s)\n"
 
-#: src/vipw.c:226
+#: src/vipw.c:244
 msgid ""
 "Usage:\n"
 "`vipw' edits /etc/passwd        `vipw -s' edits /etc/shadow\n"
@@ -2531,6 +2504,25 @@ msgstr ""
 "`vipw' óýíôáóåé ôï /etc/passwd        `vipw -s' óõíôÜóóåé ôï /etc/shadow\n"
 "`vigr' óýíôáóåé ôï /etc/group         `vigr -s' óõíôÜóóåé ôï /etc/gshadow\n"
 
+#~ msgid "%s: gid %ld is not unique\n"
+#~ msgstr "%s: Ôï gid %ld äåí åßíáé ìïíáäéêü\n"
+
+#, fuzzy
+#~ msgid "unknown gid: %u\n"
+#~ msgstr "Üãíùóôï gid: %d\n"
+
+#~ msgid "%s: uid %d is not unique\n"
+#~ msgstr "%s: Ôï uid %d äåí åßíáé ìïíáäéêü\n"
+
+#~ msgid "user %s: bad UID (%d)\n"
+#~ msgstr "÷ñÞóôçò %s: ëáíèáóìÝíï UID (%d)\n"
+
+#~ msgid "%s: no aging information present\n"
+#~ msgstr "%s: Äåí õðÜñ÷ïõí ðëçñïöïñßåò ãÞñáíóçò\n"
+
+#~ msgid "group %s: bad GID (%d)\n"
+#~ msgstr "ïìÜäá %s: ëÜèïò GID (%d)\n"
+
 #~ msgid "%s: permission denied (shell).\n"
 #~ msgstr "%s: Üäåéá áðïññßöèçêå (öëïéüò)\n"
 
index 046640d2f25bb6809173b5ab28fd5cde235b011e..593d5cefd8a8d4b3d96d61715798a7c245859d66 100644 (file)
Binary files a/po/fr.gmo and b/po/fr.gmo differ
index f18188a8c47d354da95487c7dcbc568df2e3b939..63120df919e0a03d339d19f997fb96d4cb14ae89 100644 (file)
--- a/po/fr.po
+++ b/po/fr.po
@@ -6,7 +6,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: shadow 19990709\n"
-"POT-Creation-Date: 2001-09-08 07:36+0200\n"
+"POT-Creation-Date: 2002-01-06 16:13+0100\n"
 "PO-Revision-Date: 1999-07-09 20:02+0200\n"
 "Last-Translator: Vincent Renardias <vincent@ldsol.com>\n"
 "Language-Team: Vincent Renardias <vincent@ldsol.com>\n"
@@ -23,36 +23,36 @@ msgstr "Avertissement: le groupe %s est inconnu\n"
 msgid "Warning: too many groups\n"
 msgstr "Avertissement: trop de groupes\n"
 
-#: libmisc/age.c:104
+#: libmisc/age.c:77
 msgid "Your password has expired."
 msgstr "Votre mot de passe a expiré."
 
-#: libmisc/age.c:107
+#: libmisc/age.c:80
 msgid "Your password is inactive."
 msgstr "Votre mot de passe est désactivé."
 
-#: libmisc/age.c:110
+#: libmisc/age.c:83
 msgid "Your login has expired."
 msgstr "Votre compte a expiré."
 
-#: libmisc/age.c:127
+#: libmisc/age.c:96
 msgid "  Contact the system administrator.\n"
 msgstr "  Contactez l'administrateur système.\n"
 
-#: libmisc/age.c:130
+#: libmisc/age.c:99
 msgid "  Choose a new password.\n"
 msgstr "  Choisissez un nouveau mot de passe.\n"
 
-#: libmisc/age.c:228
+#: libmisc/age.c:176
 #, c-format
 msgid "Your password will expire in %ld days.\n"
 msgstr "Votre mot de passe expirera dans %ld jours.\n"
 
-#: libmisc/age.c:230
+#: libmisc/age.c:178
 msgid "Your password will expire tomorrow.\n"
 msgstr "Votre mot de passe expirera demain.\n"
 
-#: libmisc/age.c:232
+#: libmisc/age.c:180
 msgid "Your password will expire today.\n"
 msgstr "Votre mot de passe expirera aujourd'hui.\n"
 
@@ -111,7 +111,7 @@ msgstr "Pas de courier."
 msgid "You have mail."
 msgstr "Vous avez du courier."
 
-#: libmisc/obscure.c:281 src/passwd.c:309
+#: libmisc/obscure.c:281 src/passwd.c:244
 #, c-format
 msgid "Bad password: %s.  "
 msgstr "Mauvais mot de passe: %s.  "
@@ -126,12 +126,12 @@ msgstr "passwd: 
 msgid "passwd: %s\n"
 msgstr "passwd: %s\n"
 
-#: libmisc/setupenv.c:205
+#: libmisc/setupenv.c:211
 #, c-format
 msgid "Unable to cd to \"%s\"\n"
 msgstr "Impossible d'aller dans \"%s\"\n"
 
-#: libmisc/setupenv.c:213
+#: libmisc/setupenv.c:219
 msgid "No directory, logging in with HOME=/"
 msgstr "Pas de répertoire, connexion avec HOME=/"
 
@@ -181,26 +181,26 @@ msgstr "
 msgid "Dialup Password: "
 msgstr "Mot de passe dialup : "
 
-#: lib/getdef.c:253
+#: lib/getdef.c:276
 msgid "Could not allocate space for config info.\n"
 msgstr "Impossible d'allouer l'espace pour l'information sur la conf.\n"
 
 #.
 #. * Item was never found.
 #.
-#: lib/getdef.c:307
+#: lib/getdef.c:330
 #, c-format
 msgid "configuration error - unknown item '%s' (notify administrator)\n"
 msgstr ""
 "erreur de configuration - élément '%s' inconnu (avertissez "
 "l'administrateur)\n"
 
-#: lib/getdef.c:394
+#: lib/getdef.c:417
 #, c-format
 msgid "error - lookup '%s' failed\n"
 msgstr "erreur - échec de la recherche de '%s'\n"
 
-#: lib/getdef.c:402
+#: lib/getdef.c:425
 #, c-format
 msgid "%s not found\n"
 msgstr "%s non trouvé\n"
@@ -209,7 +209,7 @@ msgstr "%s non trouv
 #. * get the password from her, and set the salt for
 #. * the decryption from the group file.
 #.
-#: lib/pwauth.c:54 src/newgrp.c:305
+#: lib/pwauth.c:54 src/newgrp.c:348
 msgid "Password: "
 msgstr "Mot de passe: "
 
@@ -227,112 +227,108 @@ msgstr ""
 msgid "Unknown error %d"
 msgstr "Erreur %d inconnue"
 
-#: src/chage.c:162
+#: src/chage.c:116
 #, c-format
 msgid ""
-"Usage: %s [ -l ] [ -m min_days ] [ -M max_days ] [ -W warn ]\n"
-"  [ -I inactive ] [ -E expire ] [ -d last_day ] user\n"
+"Usage: %s [-l] [-m min_days] [-M max_days] [-W warn]\n"
+"\t[-I inactive] [-E expire] [-d last_day] user\n"
 msgstr ""
-"Usage: %s [ -l ] [ -m min_jourss ] [ -M max_jours ]\n"
-"  [ -W avertissement ] [ -I inactif ] [ -E expire ] [ -d dernier_jour ]\n"
-"  utilisateur\n"
+"Usage: %s [-l] [-m min_jourss] [-M max_jours] [-W avertissement]\n"
+"\t[-I inactif] [-E expire] [-d dernier_jour] utilisateur\n"
 
-#: src/chage.c:164
+#: src/chage.c:122
 #, c-format
-msgid "Usage: %s [ -l ] [ -m min_days ] [ -M max_days ] [ -d last_day ] user\n"
+msgid "Usage: %s [-l] [-m min_days] [-M max_days] [-d last_day] user\n"
 msgstr ""
-"Usage: %s [ -l ] [ -m min_jours ] [ -M max_jours ] [ -d dernier_jour ] "
-"utilisateur\n"
+"Usage: %s [-l] [-m min_jours] [-M max_jours] [-d dernier_jour] utilisateur\n"
 
-#: src/chage.c:199
+#: src/chage.c:157
+#, fuzzy
 msgid ""
-"Enter the new value, or press return for the default\n"
+"Enter the new value, or press ENTER for the default\n"
 "\n"
 msgstr ""
 "Entrez la nouvelle valeur ou tapes Entrée pour la valeur par défaut\n"
 "\n"
 
-#: src/chage.c:202
+#: src/chage.c:160
 msgid "Minimum Password Age"
 msgstr "Age minimum du mot de passe"
 
-#: src/chage.c:207
+#: src/chage.c:166
 msgid "Maximum Password Age"
 msgstr "Age maximum du mot de passe"
 
-#: src/chage.c:213
+#: src/chage.c:174
 msgid "Last Password Change (YYYY-MM-DD)"
 msgstr "Dernier changement de mot de passe (YYYY-MM-DD)"
 
-#: src/chage.c:222
+#: src/chage.c:183
 msgid "Password Expiration Warning"
 msgstr "Avertissement d'expiration de mot de passe"
 
-#: src/chage.c:227
+#: src/chage.c:189
 msgid "Password Inactive"
 msgstr "Mot de passe désactivé"
 
-#: src/chage.c:233
+#: src/chage.c:197
 msgid "Account Expiration Date (YYYY-MM-DD)"
 msgstr "Date d'expiration du compte (YYYY-MM-DD)"
 
 #.
 #. * 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.
+#. * 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.
 #.
-#: src/chage.c:287
+#: src/chage.c:248
 #, c-format
 msgid "Minimum:\t%ld\n"
 msgstr "Minimum :\t%ld\n"
 
-#: src/chage.c:288
+#: src/chage.c:249
 #, c-format
 msgid "Maximum:\t%ld\n"
 msgstr "Maximum :\t%ld\n"
 
-#: src/chage.c:290
+#: src/chage.c:251
 #, c-format
 msgid "Warning:\t%ld\n"
 msgstr "Avertissement :\t%ld\n"
 
-#: src/chage.c:291
+#: src/chage.c:252
 #, c-format
 msgid "Inactive:\t%ld\n"
 msgstr "Désactivé :\t%ld\n"
 
 #.
-#. * 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.
+#. * 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.
 #.
-#: src/chage.c:300
+#: src/chage.c:260
 msgid "Last Change:\t\t"
 msgstr "Dernier changement :\t\t"
 
-#: src/chage.c:302 src/chage.c:316 src/chage.c:333 src/chage.c:346
+#: src/chage.c:262 src/chage.c:276 src/chage.c:293 src/chage.c:306
 msgid "Never\n"
 msgstr "Jamais\n"
 
 #.
-#. * The password expiration date is determined from the last
-#. * change date plus the number of days the password is valid
-#. * for.
+#. * The password expiration date is determined from the last change
+#. * date plus the number of days the password is valid for.
 #.
-#: src/chage.c:314
+#: src/chage.c:273
 msgid "Password Expires:\t"
 msgstr "Expiration du mot de passe :\t"
 
 #.
-#. * 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.
+#. * 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.
 #.
-#: src/chage.c:330
+#: src/chage.c:290
 #, fuzzy
 msgid "Password Inactive:\t"
 msgstr "Mot de passe désactivé"
@@ -341,581 +337,579 @@ msgstr "Mot de passe d
 #. * The account will expire on the given date regardless of the
 #. * password expiring or not.
 #.
-#: src/chage.c:344
+#: src/chage.c:304
 #, fuzzy
 msgid "Account Expires:\t"
 msgstr "Expiration du mot de passe :\t"
 
-#: src/chage.c:453 src/chpasswd.c:139 src/groupadd.c:536 src/groupdel.c:322
-#: src/groupmod.c:522 src/newusers.c:389 src/useradd.c:1721 src/userdel.c:738
-#: src/usermod.c:1687
-#, fuzzy, c-format
-msgid "%s: PAM authentication failed\n"
-msgstr "%s : erreur lors de l'ajout de la méthode d'authentification\n"
-
-#: src/chage.c:536
+#: src/chage.c:468
 #, c-format
 msgid "%s: do not include \"l\" with other flags\n"
 msgstr "%s : ne pas include \"l\" avec les autres drapeaux\n"
 
-#: src/chage.c:548 src/chage.c:660 src/login.c:532
+#: src/chage.c:481 src/chage.c:652 src/login.c:516
 #, c-format
 msgid "%s: permission denied\n"
 msgstr "%s : permission refusée\n"
 
-#: src/chage.c:560 src/chpasswd.c:157
+#: src/chage.c:512 src/chpasswd.c:139 src/groupadd.c:529 src/groupdel.c:322
+#: src/groupmod.c:520 src/newusers.c:381 src/useradd.c:1754 src/userdel.c:717
+#: src/usermod.c:1732
+#, fuzzy, c-format
+msgid "%s: PAM authentication failed\n"
+msgstr "%s : erreur lors de l'ajout de la méthode d'authentification\n"
+
+#: src/chage.c:533 src/chpasswd.c:157
 #, c-format
 msgid "%s: can't lock password file\n"
 msgstr "%s: impossible de vérouiller de fichier de mots de passe\n"
 
-#: src/chage.c:566 src/chpasswd.c:161
+#: src/chage.c:544 src/chpasswd.c:162
 #, c-format
 msgid "%s: can't open password file\n"
 msgstr "%s: impossible d'ouvrir le fichier de mots de passe\n"
 
-#: src/chage.c:573
+#: src/chage.c:552
 #, c-format
 msgid "%s: unknown user: %s\n"
 msgstr "%s: utilisateur inconnu: %s\n"
 
-#: src/chage.c:592
-#, c-format
-msgid "%s: can't lock shadow password file\n"
+#: src/chage.c:571
+#, fuzzy, c-format
+msgid "%s: can't lock shadow password file"
 msgstr "%s : impossible de vérouiller le fichier shadow password\n"
 
-#: src/chage.c:599
-#, c-format
-msgid "%s: can't open shadow password file\n"
+#: src/chage.c:579
+#, fuzzy, c-format
+msgid "%s: can't open shadow password file"
 msgstr "%s : impossible d'ouvrir le fichier shadow password\n"
 
-#: src/chage.c:681
+#: src/chage.c:674
 #, c-format
 msgid "Changing the aging information for %s\n"
 msgstr "Changement des informations sur l'age pour %s\n"
 
-#: src/chage.c:683
+#: src/chage.c:677
 #, c-format
 msgid "%s: error changing fields\n"
 msgstr "%s : erreur lors du changement des champs\n"
 
-#: src/chage.c:710 src/chage.c:773 src/pwunconv.c:174
+#: src/chage.c:705 src/chage.c:771 src/pwunconv.c:174
 #, c-format
 msgid "%s: can't update password file\n"
 msgstr "%s : impossible de mettre à jour le fichier passwd\n"
 
-#: src/chage.c:740 src/pwunconv.c:169
+#: src/chage.c:737 src/pwunconv.c:168
 #, c-format
 msgid "%s: can't update shadow password file\n"
 msgstr "%s : impossible de mettre à jour le fichier shadow password\n"
 
-#: src/chage.c:789 src/chage.c:804 src/chfn.c:570 src/chsh.c:409
-#: src/passwd.c:825 src/passwd.c:926
+#: src/chage.c:789 src/chage.c:805 src/chfn.c:570 src/chsh.c:382
+#: src/passwd.c:747 src/passwd.c:859
 msgid "Error updating the DBM password entry.\n"
 msgstr "Erreur durant la mise à jour de l'entrée du mot de passe DBM.\n"
 
-#: src/chage.c:821
+#: src/chage.c:823
 #, c-format
 msgid "%s: can't rewrite shadow password file\n"
 msgstr "%s : impossible de re-écrire le fichier shadow password\n"
 
-#: src/chage.c:835
+#: src/chage.c:838
 #, c-format
 msgid "%s: can't rewrite password file\n"
 msgstr "%s : impossible de re-écrire le fichier password\n"
 
-#: src/chage.c:853 src/chpasswd.c:333 src/groupadd.c:595 src/groupdel.c:409
-#: src/groupmod.c:606 src/newusers.c:625 src/useradd.c:1830 src/userdel.c:903
-#: src/usermod.c:1765
+#: src/chage.c:857 src/chpasswd.c:343 src/groupadd.c:590 src/groupdel.c:409
+#: src/groupmod.c:604 src/newusers.c:628 src/useradd.c:1869 src/userdel.c:849
+#: src/usermod.c:1811
 #, fuzzy, c-format
 msgid "%s: PAM chauthtok failed\n"
 msgstr "%s : impossible de dévérouiller le fichier\n"
 
-#: src/chage.c:905
-#, c-format
-msgid "%s: no aging information present\n"
-msgstr "%s : aucune information sur l'age\n"
-
-#: src/chfn.c:107
-#, c-format
+#: src/chfn.c:83
+#, fuzzy, c-format
 msgid ""
-"Usage: %s [ -f full_name ] [ -r room_no ] [ -w work_ph ]\n"
-"\t[ -h home_ph ] [ -o other ] [ user ]\n"
+"Usage: %s [-f full_name] [-r room_no] [-w work_ph]\n"
+"\t[-h home_ph] [-o other] [user]\n"
 msgstr ""
-"Usage: %s [ -f nom_complet ] [ -r no_bureau ] [ -w tel_bureau ]\n"
-"\t[ -h tel_perso ] [ -o autre ] [ utilisateur ]\n"
+"Usage: %s [-f nom_complet ] [-r no_bureau ] [-w tel_bureau ]\n"
+"\t[-h tel_perso ] [-o autre ] [utilisateur ]\n"
 
-#: src/chfn.c:111
-#, c-format
-msgid ""
-"Usage: %s [ -f full_name ] [ -r room_no ] [ -w work_ph ] [ -h home_ph ]\n"
-msgstr "Usage: %s [ -f nom_complet ] [ -w no_bureau ] [ -h tel_bureau ]\n"
+#: src/chfn.c:88
+#, fuzzy, c-format
+msgid "Usage: %s [-f full_name] [-r room_no] [-w work_ph] [-h home_ph]\n"
+msgstr "Usage: %s [-f nom_complet ] [-w no_bureau ] [-h tel_bureau ]\n"
 
-#: src/chfn.c:163 src/chsh.c:119
-msgid "Enter the new value, or press return for the default\n"
+#: src/chfn.c:139
+msgid "Enter the new value, or press ENTER for the default\n"
 msgstr "Entrez la nouvelle valeur ou tapez Entrée pour le défaut\n"
 
-#: src/chfn.c:166
+#: src/chfn.c:142
 msgid "Full Name"
 msgstr "Nom complet"
 
-#: src/chfn.c:168
+#: src/chfn.c:144
 #, c-format
 msgid "\tFull Name: %s\n"
 msgstr "\tNom complet : %s\n"
 
-#: src/chfn.c:171
+#: src/chfn.c:147
 msgid "Room Number"
 msgstr "No de bureau"
 
-#: src/chfn.c:173
+#: src/chfn.c:149
 #, c-format
 msgid "\tRoom Number: %s\n"
 msgstr "\tNo de bureau : %s\n"
 
-#: src/chfn.c:176
+#: src/chfn.c:152
 msgid "Work Phone"
 msgstr "Téléphone travail"
 
-#: src/chfn.c:178
+#: src/chfn.c:154
 #, c-format
 msgid "\tWork Phone: %s\n"
 msgstr "\tTéléphone travail : %s\n"
 
-#: src/chfn.c:181
+#: src/chfn.c:157
 msgid "Home Phone"
 msgstr "Téléphone perso"
 
-#: src/chfn.c:183
+#: src/chfn.c:159
 #, c-format
 msgid "\tHome Phone: %s\n"
 msgstr "\tTéléphone perso : %s\n"
 
-#: src/chfn.c:186
+#: src/chfn.c:162
 msgid "Other"
 msgstr "Autre"
 
-#: src/chfn.c:298 src/chfn.c:306 src/chfn.c:314 src/chfn.c:322 src/chfn.c:330
-#: src/chfn.c:391 src/passwd.c:1226
+#: src/chfn.c:271 src/chfn.c:281 src/chfn.c:291 src/chfn.c:301 src/chfn.c:311
+#: src/chfn.c:379 src/passwd.c:1115
 #, c-format
 msgid "%s: Permission denied.\n"
 msgstr "%s: Permission refusée.\n"
 
-#: src/chfn.c:351 src/chsh.c:224 src/passwd.c:1277
+#: src/chfn.c:332 src/chsh.c:190 src/passwd.c:1165
 #, c-format
 msgid "%s: Unknown user %s\n"
 msgstr "%s: Utilisateur %s inconnu\n"
 
-#: src/chfn.c:357 src/chsh.c:232 src/passwd.c:1207
+#: src/chfn.c:341 src/chsh.c:198 src/passwd.c:1096
 #, c-format
 msgid "%s: Cannot determine your user name.\n"
 msgstr "%s: Impossible de déterminer votre nom d'utilisateur.\n"
 
-#: src/chfn.c:373 src/chsh.c:250
+#: src/chfn.c:358 src/chsh.c:215
 #, c-format
 msgid "%s: cannot change user `%s' on NIS client.\n"
 msgstr "%s: impossible de changer l'utilisateur `%' sur le client NIS.\n"
 
-#: src/chfn.c:378 src/chsh.c:257
+#: src/chfn.c:366 src/chsh.c:223
 #, 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"
 
-#: src/chfn.c:453
+#: src/chfn.c:441
 #, c-format
 msgid "Changing the user information for %s\n"
 msgstr "Changement de l'information utilisateur pour %s\n"
 
-#: src/chfn.c:462
+#: src/chfn.c:450
 #, c-format
 msgid "%s: invalid name: \"%s\"\n"
 msgstr "%s : nom non valide : \"%s\"\n"
 
-#: src/chfn.c:467
+#: src/chfn.c:456
 #, c-format
 msgid "%s: invalid room number: \"%s\"\n"
 msgstr "%s : no de bureau non valide : \"%s\"\n"
 
-#: src/chfn.c:472
+#: src/chfn.c:462
 #, c-format
 msgid "%s: invalid work phone: \"%s\"\n"
 msgstr "%s : téléphone du bureau non valide : \"%s\"\n"
 
-#: src/chfn.c:477
+#: src/chfn.c:468
 #, c-format
 msgid "%s: invalid home phone: \"%s\"\n"
 msgstr "%s : téléphone perso non valide : \"%s\"\n"
 
-#: src/chfn.c:482
+#: src/chfn.c:475
 #, c-format
 msgid "%s: \"%s\" contains illegal characters\n"
 msgstr "%s : \"%s\" contient des caractères non valide\n"
 
-#: src/chfn.c:494
+#: src/chfn.c:488
 #, c-format
 msgid "%s: fields too long\n"
 msgstr "%s: champs trop longs\n"
 
-#: src/chfn.c:509 src/chsh.c:347 src/gpasswd.c:582 src/passwd.c:1388
+#: src/chfn.c:504 src/chsh.c:316 src/gpasswd.c:570 src/passwd.c:1277
 msgid "Cannot change ID to root.\n"
 msgstr "Impossible de changer l'ID en root.\n"
 
-#: src/chfn.c:522 src/chsh.c:361 src/passwd.c:735 src/passwd.c:880
+#: src/chfn.c:519 src/chsh.c:331 src/passwd.c:656 src/passwd.c:811
 msgid "Cannot lock the password file; try again later.\n"
 msgstr ""
 "Impossible de vérouiller le fichier de mots de passe; essayez plus tard.\n"
 
-#: src/chfn.c:528 src/chsh.c:367 src/passwd.c:740 src/passwd.c:885
+#: src/chfn.c:525 src/chsh.c:337 src/passwd.c:661 src/passwd.c:816
 msgid "Cannot open the password file.\n"
 msgstr "Impossible d'ouvrir le fichier de mots de passe.\n"
 
-#: src/chfn.c:545 src/chsh.c:382 src/passwd.c:746 src/usermod.c:1320
+#: src/chfn.c:542 src/chsh.c:352 src/passwd.c:667 src/usermod.c:1348
 #, c-format
 msgid "%s: %s not found in /etc/passwd\n"
 msgstr "%s: %s non trouvé dans /etc/passwd\n"
 
-#: src/chfn.c:562 src/chsh.c:401 src/passwd.c:819 src/passwd.c:920
-#: src/passwd.c:960
+#: src/chfn.c:561 src/chsh.c:373 src/passwd.c:740 src/passwd.c:852
 msgid "Error updating the password entry.\n"
 msgstr "Erreur durant la mise à jour du mot de passe.\n"
 
-#: src/chfn.c:585 src/chsh.c:424 src/passwd.c:832 src/passwd.c:933
+#: src/chfn.c:585 src/chsh.c:397 src/passwd.c:755 src/passwd.c:867
 msgid "Cannot commit password file changes.\n"
 msgstr "Impossible de valider le changement de mot de passe.\n"
 
-#: src/chfn.c:592 src/chsh.c:431
+#: src/chfn.c:592 src/chsh.c:404
 msgid "Cannot unlock the password file.\n"
 msgstr "Impossible de dévérouiller le fichier de mots de passe.\n"
 
-#: src/chpasswd.c:69
+#: src/chpasswd.c:66
 #, c-format
 msgid "usage: %s [-e]\n"
 msgstr "usage: %s [-e]\n"
 
-#: src/chpasswd.c:169 src/pwconv.c:104
+#: src/chpasswd.c:171 src/pwconv.c:94
 #, c-format
 msgid "%s: can't lock shadow file\n"
 msgstr "%s: impossible de vérouiller le fichier shadow\n"
 
-#: src/chpasswd.c:174 src/gpasswd.c:608 src/pwconv.c:109 src/pwunconv.c:109
-#: src/pwunconv.c:114
+#: src/chpasswd.c:177 src/gpasswd.c:596 src/pwconv.c:99 src/pwunconv.c:103
+#: src/pwunconv.c:108
 #, c-format
 msgid "%s: can't open shadow file\n"
 msgstr "%s: impossible d'ouvrir le fichier shadow\n"
 
-#: src/chpasswd.c:196 src/newusers.c:465
+#: src/chpasswd.c:200 src/newusers.c:460
 #, c-format
 msgid "%s: line %d: line too long\n"
 msgstr "%s: ligne %d: ligne trop longue\n"
 
-#: src/chpasswd.c:216
+#: src/chpasswd.c:220
 #, c-format
 msgid "%s: line %d: missing new password\n"
 msgstr "%s: ligne %d: nouveau mot de passe manquant\n"
 
-#: src/chpasswd.c:232
+#: src/chpasswd.c:237
 #, c-format
 msgid "%s: line %d: unknown user %s\n"
 msgstr "%s: ligne %d: utilisateur %s inconnu\n"
 
-#: src/chpasswd.c:284
+#: src/chpasswd.c:290
 #, c-format
 msgid "%s: line %d: cannot update password entry\n"
 msgstr "%s: ligne %d: impossible de mettre le mot de passe à jour\n"
 
-#: src/chpasswd.c:300 src/newusers.c:585
+#: src/chpasswd.c:307 src/newusers.c:588
 #, c-format
 msgid "%s: error detected, changes ignored\n"
 msgstr "%s: erreur détectée; changements ignorés\n"
 
-#: src/chpasswd.c:311
+#: src/chpasswd.c:319
 #, c-format
 msgid "%s: error updating shadow file\n"
 msgstr "%s: erreur lors de la mise à jour du fichier shadow\n"
 
-#: src/chpasswd.c:319
+#: src/chpasswd.c:328
 #, c-format
 msgid "%s: error updating password file\n"
 msgstr "%s: erreur lors de la mise à jour du fichier de mots de passe\n"
 
-#: src/chsh.c:105
-#, c-format
-msgid "Usage: %s [ -s shell ] [ name ]\n"
-msgstr "Usage: %s [ -s shell ] [ nom ]\n"
+#: src/chsh.c:75
+#, fuzzy, c-format
+msgid "Usage: %s [-s shell] [name]\n"
+msgstr "Usage: %s [-s shell ] [nom ]\n"
+
+#: src/chsh.c:89
+#, fuzzy
+msgid "Enter the new value, or press return for the default\n"
+msgstr "Entrez la nouvelle valeur ou tapez Entrée pour le défaut\n"
 
-#: src/chsh.c:120
+#: src/chsh.c:90
 msgid "Login Shell"
 msgstr "Shell de login"
 
-#: src/chsh.c:273 src/chsh.c:286
+#: src/chsh.c:239 src/chsh.c:253
 #, c-format
 msgid "You may not change the shell for %s.\n"
 msgstr "Vous ne pouvez pas changer le shell de %s.\n"
 
-#: src/chsh.c:315
+#: src/chsh.c:282
 #, c-format
 msgid "Changing the login shell for %s\n"
 msgstr "Changement du shell de login pour %s\n"
 
-#: src/chsh.c:327
+#: src/chsh.c:294
 #, c-format
 msgid "%s: Invalid entry: %s\n"
 msgstr "%s: Entrée non valide : %s\n"
 
-#: src/chsh.c:332
+#: src/chsh.c:301
 #, c-format
 msgid "%s is an invalid shell.\n"
 msgstr "%s n'est pas un shell valide.\n"
 
-#: src/dpasswd.c:69
-#, c-format
-msgid "Usage: %s [ -(a|d) ] shell\n"
-msgstr "Usage: %s [ -(a|d) ] shell\n"
+#: src/dpasswd.c:52
+#, fuzzy, c-format
+msgid "Usage: %s [-(a|d)] shell\n"
+msgstr "Usage: %s [-(a|d) ] shell\n"
 
-#: src/dpasswd.c:134
+#: src/dpasswd.c:115
 msgid "Shell password: "
 msgstr "Mot de passe shell : "
 
-#: src/dpasswd.c:140
+#: src/dpasswd.c:121
 msgid "re-enter Shell password: "
 msgstr "Confirmez le mot de passe shell : "
 
-#: src/dpasswd.c:147
+#: src/dpasswd.c:129
 #, c-format
 msgid "%s: Passwords do not match, try again.\n"
 msgstr "%s : Les mots de passe ne correspondent pas, essayez encore.\n"
 
-#: src/dpasswd.c:167
+#: src/dpasswd.c:149
 #, c-format
 msgid "%s: can't create %s"
 msgstr "%s: impossible de créer %s"
 
-#: src/dpasswd.c:172
+#: src/dpasswd.c:155
 #, c-format
 msgid "%s: can't open %s"
 msgstr "%s : impossible d'ouvrir %s"
 
-#: src/dpasswd.c:200
+#: src/dpasswd.c:183
 #, c-format
 msgid "%s: Shell %s not found.\n"
 msgstr "%s : Shell %s non trouvé.\n"
 
-#: src/expiry.c:84
-msgid "Usage: expiry { -f | -c }\n"
+#: src/expiry.c:59
+#, fuzzy
+msgid "Usage: expiry {-f|-c}\n"
 msgstr "Usage : expiry { -f | -c }\n"
 
-#: src/expiry.c:137
+#: src/expiry.c:113
 #, c-format
 msgid "%s: WARNING!  Must be set-UID root!\n"
 msgstr "%s: AVERTISSEMENT! Devrait être set-UID root!\n"
 
-#: src/expiry.c:148
+#: src/expiry.c:124
 #, c-format
 msgid "%s: unknown user\n"
 msgstr "%s : utilisateur inconnu\n"
 
-#: src/faillog.c:79
+#: src/faillog.c:77
 #, c-format
 msgid "usage: %s [-a|-u user] [-m max] [-r] [-t days] [-l locksecs]\n"
 msgstr "usage: %s [-a|-u utilisateur] [-m max] [-r] [-t jours] [-l sec_ver]\n"
 
-#: src/faillog.c:134 src/lastlog.c:103
+#: src/faillog.c:131 src/lastlog.c:96
 #, c-format
 msgid "Unknown User: %s\n"
 msgstr "Utilisateur %s inconnu\n"
 
-#: src/faillog.c:215
+#: src/faillog.c:212
 msgid "Username   Failures  Maximum  Latest\n"
 msgstr "Utilisateur Échecs   Maximum  Dernier\n"
 
-#: src/faillog.c:232
+#: src/faillog.c:229
 #, c-format
 msgid "  %s on %s"
 msgstr "  %s sur %s"
 
-#: src/faillog.c:236
+#: src/faillog.c:233
 #, c-format
 msgid " [%lds left]"
 msgstr " [%lds restant]"
 
-#: src/faillog.c:239
+#: src/faillog.c:237
 #, c-format
 msgid " [%lds lock]"
 msgstr " [%lds verrou]"
 
-#: src/gpasswd.c:89
+#: src/gpasswd.c:78
 #, c-format
 msgid "usage: %s [-r|-R] group\n"
 msgstr "usage: %s [-r|-R] groupe\n"
 
-#: src/gpasswd.c:90
+#: src/gpasswd.c:79
 #, c-format
 msgid "       %s [-a user] group\n"
 msgstr "       %s [-a utilisateur] groupe\n"
 
-#: src/gpasswd.c:91
+#: src/gpasswd.c:80
 #, c-format
 msgid "       %s [-d user] group\n"
 msgstr "       %s [-d utilisateur] groupe\n"
 
-#: src/gpasswd.c:93
+#: src/gpasswd.c:83
 #, c-format
 msgid "       %s [-A user,...] [-M user,...] group\n"
 msgstr "       %s [-A utilisateur,...] [-M utilisateur,...] groupe\n"
 
-#: src/gpasswd.c:96
+#: src/gpasswd.c:85
 #, c-format
 msgid "       %s [-M user,...] group\n"
 msgstr "       %s [-M utilisateur,...] groupe\n"
 
-#: src/gpasswd.c:160 src/gpasswd.c:245
+#: src/gpasswd.c:146 src/gpasswd.c:230
 #, c-format
 msgid "%s: unknown user %s\n"
 msgstr "%s : utilisateur %s inconnu\n"
 
-#: src/gpasswd.c:172
+#: src/gpasswd.c:157
 msgid "Permission denied.\n"
 msgstr "Permission refusée.\n"
 
-#: src/gpasswd.c:257
+#: src/gpasswd.c:243
 #, c-format
 msgid "%s: shadow group passwords required for -A\n"
 msgstr "%s : mots de passe shadow nécessaires pour -A\n"
 
-#: src/gpasswd.c:308
+#: src/gpasswd.c:294
 msgid "Who are you?\n"
 msgstr "Qui êtes vous?\n"
 
-#: src/gpasswd.c:328 src/newgrp.c:251
+#: src/gpasswd.c:313 src/newgrp.c:297
 #, c-format
 msgid "unknown group: %s\n"
 msgstr "groupe inconnu : %s\n"
 
-#: src/gpasswd.c:436
+#: src/gpasswd.c:422
 #, c-format
 msgid "Adding user %s to group %s\n"
 msgstr "Ajout de l'utilisateur %s au groupe %s\n"
 
-#: src/gpasswd.c:453
+#: src/gpasswd.c:440
 #, c-format
 msgid "Removing user %s from group %s\n"
 msgstr "Retrait de l'utilisateur %s du groupe %s\n"
 
-#: src/gpasswd.c:466
+#: src/gpasswd.c:454
 #, c-format
 msgid "%s: unknown member %s\n"
 msgstr "%s : membre %s inconnu\n"
 
-#: src/gpasswd.c:513
+#: src/gpasswd.c:501
 #, c-format
 msgid "%s: Not a tty\n"
 msgstr "%s : N'est pas un tty\n"
 
 #.
-#. * 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.
+#. * 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.
 #.
-#: src/gpasswd.c:535
+#: src/gpasswd.c:522
 #, c-format
 msgid "Changing the password for group %s\n"
 msgstr "Changement du mot de passe pour le group %s\n"
 
-#: src/gpasswd.c:538
+#: src/gpasswd.c:525
 msgid "New Password: "
 msgstr "Nouveau mot de passe : "
 
-#: src/gpasswd.c:543 src/passwd.c:422
+#: src/gpasswd.c:530 src/passwd.c:365
 msgid "Re-enter new password: "
 msgstr "Nouveau mot de passe (à nouveau) : "
 
-#: src/gpasswd.c:555
+#: src/gpasswd.c:542
 msgid "They don't match; try again"
 msgstr "Ils ne sont pas identiques; essayez à nouveau"
 
-#: src/gpasswd.c:559
+#: src/gpasswd.c:546
 #, c-format
 msgid "%s: Try again later\n"
 msgstr "%s: Essayez à nouveau plus tard\n"
 
-#: src/gpasswd.c:590
+#: src/gpasswd.c:578
 #, c-format
 msgid "%s: can't get lock\n"
 msgstr "%s : impossible d'obtenir le verrou\n"
 
-#: src/gpasswd.c:596
+#: src/gpasswd.c:584
 #, c-format
 msgid "%s: can't get shadow lock\n"
 msgstr "%s : impossible d'obtenir le verrou sur shadow\n"
 
-#: src/gpasswd.c:602
+#: src/gpasswd.c:590
 #, c-format
 msgid "%s: can't open file\n"
 msgstr "%s : impossible d'ouvrir le fichier\n"
 
-#: src/gpasswd.c:614
+#: src/gpasswd.c:602
 #, c-format
 msgid "%s: can't update entry\n"
 msgstr "%s : impossible de mettre à jour l'entrée\n"
 
-#: src/gpasswd.c:620
+#: src/gpasswd.c:608
 #, c-format
 msgid "%s: can't update shadow entry\n"
 msgstr "%s : impossible de mettre à jour l'entrée shadow\n"
 
-#: src/gpasswd.c:626
+#: src/gpasswd.c:615
 #, c-format
 msgid "%s: can't re-write file\n"
 msgstr "%s : impossible de re-écrire le fichier\n"
 
-#: src/gpasswd.c:632
+#: src/gpasswd.c:621
 #, c-format
 msgid "%s: can't re-write shadow file\n"
 msgstr "%s : impossible de re-écrire le fichier shadow\n"
 
-#: src/gpasswd.c:640
+#: src/gpasswd.c:630
 #, c-format
 msgid "%s: can't unlock file\n"
 msgstr "%s : impossible de dévérouiller le fichier\n"
 
-#: src/gpasswd.c:645
+#: src/gpasswd.c:635
 #, c-format
 msgid "%s: can't update DBM files\n"
 msgstr "%s : impossible de mettre à jours les fichiers DBM\n"
 
-#: src/gpasswd.c:652
+#: src/gpasswd.c:642
 #, c-format
 msgid "%s: can't update DBM shadow files\n"
 msgstr "%s : impossible de mettre à jours les fichiers DBM shadow\n"
 
-#: src/groupadd.c:111
+#: src/groupadd.c:101
 msgid "usage: groupadd [-g gid [-o]] group\n"
 msgstr "usage: groupadd [-g gid [-o]] groupe\n"
 
-#: src/groupadd.c:179 src/groupadd.c:202 src/groupmod.c:189 src/groupmod.c:236
-#: src/useradd.c:949 src/usermod.c:546 src/usermod.c:682
+#: src/groupadd.c:167 src/groupadd.c:192 src/groupmod.c:179 src/groupmod.c:228
+#: src/useradd.c:970 src/usermod.c:552 src/usermod.c:695
 #, c-format
 msgid "%s: error adding new group entry\n"
 msgstr "%s : erreur durant l'addition du nouveau groupe\n"
 
-#: src/groupadd.c:189 src/groupadd.c:212 src/groupmod.c:205 src/useradd.c:960
-#: src/usermod.c:558 src/usermod.c:694
+#: src/groupadd.c:178 src/groupadd.c:203 src/groupmod.c:197 src/useradd.c:981
+#: src/usermod.c:564 src/usermod.c:708
 #, c-format
 msgid "%s: cannot add new dbm group entry\n"
 msgstr "%s : impossible d'ajouter une nouvelle entrée pour le groupe dbm\n"
 
-#: src/groupadd.c:264 src/useradd.c:1014
+#: src/groupadd.c:255 src/useradd.c:1034
 #, c-format
 msgid "%s: name %s is not unique\n"
 msgstr "%s : le nom %s n'est pas unique\n"
 
-#: src/groupadd.c:279
-#, c-format
-msgid "%s: gid %ld is not unique\n"
-msgstr "%s : le gid %ld n'est pas unique\n"
+#: src/groupadd.c:270
+#, fuzzy, c-format
+msgid "%s: gid %u is not unique\n"
+msgstr "%s : l'uid %ld n'est pas unique\n"
 
-#: src/groupadd.c:303
+#: src/groupadd.c:294
 #, c-format
 msgid "%s: can't get unique gid\n"
 msgstr "%s : impossible d'obtenir un gid unique\n"
@@ -923,54 +917,54 @@ msgstr "%s : impossible d'obtenir un gid unique\n"
 #.
 #. * All invalid group names land here.
 #.
-#: src/groupadd.c:327 src/groupmod.c:347
+#: src/groupadd.c:317 src/groupmod.c:341
 #, c-format
 msgid "%s: %s is a not a valid group name\n"
 msgstr "%s : %s n'est pas un nom de groupe valide\n"
 
-#: src/groupadd.c:356 src/groupmod.c:373
+#: src/groupadd.c:346 src/groupmod.c:366
 #, c-format
 msgid "%s: invalid group %s\n"
 msgstr "%s : groupe %s non valide\n"
 
-#: src/groupadd.c:373 src/useradd.c:1290
+#: src/groupadd.c:363 src/useradd.c:1313
 #, c-format
 msgid "%s: -O requires NAME=VALUE\n"
 msgstr "%s : -O requiert NAME=VALEUR\n"
 
-#: src/groupadd.c:418 src/groupdel.c:173 src/groupmod.c:409 src/useradd.c:1399
-#: src/userdel.c:309 src/usermod.c:570
+#: src/groupadd.c:407 src/groupdel.c:173 src/groupmod.c:401 src/useradd.c:1428
+#: src/userdel.c:312 src/usermod.c:576
 #, c-format
 msgid "%s: cannot rewrite group file\n"
 msgstr "%s : impossible de re-écrire le fichier group\n"
 
-#: src/groupadd.c:424 src/groupdel.c:179 src/groupmod.c:415 src/useradd.c:1407
-#: src/userdel.c:315 src/usermod.c:707
+#: src/groupadd.c:415 src/groupdel.c:179 src/groupmod.c:409 src/useradd.c:1437
+#: src/userdel.c:319 src/usermod.c:722
 #, c-format
 msgid "%s: cannot rewrite shadow group file\n"
 msgstr "%s : impossible de re-écrire le fichier shadow group\n"
 
-#: src/groupadd.c:443 src/groupdel.c:198 src/groupmod.c:434 src/userdel.c:395
+#: src/groupadd.c:433 src/groupdel.c:198 src/groupmod.c:427 src/userdel.c:403
 #, c-format
 msgid "%s: unable to lock group file\n"
 msgstr "%s : impossible de vérouiller le fichier group\n"
 
-#: src/groupadd.c:447 src/groupdel.c:202 src/groupmod.c:438
+#: src/groupadd.c:438 src/groupdel.c:202 src/groupmod.c:432
 #, c-format
 msgid "%s: unable to open group file\n"
 msgstr "%s : impossible d'ouvrir le fichier group\n"
 
-#: src/groupadd.c:452 src/groupdel.c:207 src/groupmod.c:443 src/userdel.c:404
+#: src/groupadd.c:445 src/groupdel.c:207 src/groupmod.c:439 src/userdel.c:414
 #, c-format
 msgid "%s: unable to lock shadow group file\n"
 msgstr "%s : impossible de vérouiller le fichier group\n"
 
-#: src/groupadd.c:457 src/groupdel.c:212 src/groupmod.c:448
+#: src/groupadd.c:451 src/groupdel.c:212 src/groupmod.c:445
 #, c-format
 msgid "%s: unable to open shadow group file\n"
 msgstr "%s : impossible d'ouvrir le fichier shadow group\n"
 
-#: src/groupadd.c:568
+#: src/groupadd.c:562
 #, c-format
 msgid "%s: group %s exists\n"
 msgstr "%s : le groupe %s existe\n"
@@ -979,12 +973,12 @@ msgstr "%s : le groupe %s existe\n"
 msgid "usage: groupdel group\n"
 msgstr "usage: groupdel groupe\n"
 
-#: src/groupdel.c:110 src/groupmod.c:193 src/groupmod.c:240
+#: src/groupdel.c:110 src/groupmod.c:184 src/groupmod.c:233
 #, c-format
 msgid "%s: error removing group entry\n"
 msgstr "%s : erreur lors de retrait de l'entrée du groupe\n"
 
-#: src/groupdel.c:122 src/groupmod.c:212
+#: src/groupdel.c:122 src/groupmod.c:204
 #, c-format
 msgid "%s: error removing group dbm entry\n"
 msgstr "%s : erreur lors du retrait de l'entrée dbm du groupe\n"
@@ -994,7 +988,7 @@ msgstr "%s : erreur lors du retrait de l'entr
 msgid "%s: error removing shadow group entry\n"
 msgstr "%s : erreur lors du retrait de l'entrée shadow du groupe\n"
 
-#: src/groupdel.c:150 src/groupmod.c:258
+#: src/groupdel.c:150 src/groupmod.c:254
 #, c-format
 msgid "%s: error removing shadow group dbm entry\n"
 msgstr "%s : erreur lors du retrait de l'entrée dbm shadow du groupe\n"
@@ -1007,130 +1001,130 @@ msgstr "%s : erreur lors du retrait de l'entr
 msgid "%s: cannot remove user's primary group.\n"
 msgstr "%s : impossible d'enlever l'utilisateur de son groupe primaire.\n"
 
-#: src/groupdel.c:355 src/groupmod.c:551
+#: src/groupdel.c:355 src/groupmod.c:550
 #, c-format
 msgid "%s: group %s does not exist\n"
 msgstr "%s : le groupe %s n'existe pas\n"
 
-#: src/groupdel.c:369 src/groupmod.c:567
+#: src/groupdel.c:369 src/groupmod.c:566
 #, c-format
 msgid "%s: group %s is a NIS group\n"
 msgstr "%s : le groupe %s est un groupe NIS\n"
 
-#: src/groupdel.c:375 src/groupmod.c:573 src/userdel.c:811 src/usermod.c:1023
+#: src/groupdel.c:375 src/groupmod.c:571 src/userdel.c:776 src/usermod.c:1045
 #, c-format
 msgid "%s: %s is the NIS master\n"
 msgstr "%s : %s est le maître NIS\n"
 
-#: src/groupmems.c:92
+#: src/groupmems.c:95
 msgid "Member already exists\n"
 msgstr ""
 
-#: src/groupmems.c:121
+#: src/groupmems.c:125
 msgid "Member to remove could not be found\n"
 msgstr ""
 
-#: src/groupmems.c:151
+#: src/groupmems.c:158
 msgid "usage: groupmems -a username | -d username | -D | -l [-g groupname]\n"
 msgstr ""
 
-#: src/groupmems.c:191
+#: src/groupmems.c:201
 msgid "Only root can add members to different groups\n"
 msgstr ""
 
-#: src/groupmems.c:196
+#: src/groupmems.c:206
 msgid "Group access is required\n"
 msgstr ""
 
-#: src/groupmems.c:199
+#: src/groupmems.c:210
 msgid "Not primary owner of current group\n"
 msgstr ""
 
-#: src/groupmems.c:204
+#: src/groupmems.c:215
 #, fuzzy
 msgid "Unable to lock group file\n"
 msgstr "%s : impossible de vérouiller le fichier group\n"
 
-#: src/groupmems.c:209
+#: src/groupmems.c:220
 #, fuzzy
 msgid "Unable to open group file\n"
 msgstr "%s : impossible d'ouvrir le fichier group\n"
 
-#: src/groupmems.c:229
+#: src/groupmems.c:240
 #, fuzzy
 msgid "Cannot close group file\n"
 msgstr "%s : impossible d'ouvrir le fichier group\n"
 
-#: src/groupmod.c:111
+#: src/groupmod.c:103
 msgid "usage: groupmod [-g gid [-o]] [-n name] group\n"
 msgstr "usage : groupmod [-g gid [-o]] [-n nom] groupe\n"
 
-#: src/groupmod.c:171
+#: src/groupmod.c:161
 #, c-format
 msgid "%s: %s not found in /etc/group\n"
 msgstr "%s : %s non trouvé dans /etc/group\n"
 
-#: src/groupmod.c:252
+#: src/groupmod.c:247
 #, c-format
 msgid "%s: cannot add new dbm shadow group entry\n"
 msgstr "%s : impossible d'ajouter une nouvelle entrée dbm shadow group\n"
 
-#: src/groupmod.c:305
-#, c-format
-msgid "%s: %ld is not a unique gid\n"
+#: src/groupmod.c:300
+#, fuzzy, c-format
+msgid "%s: %u is not a unique gid\n"
 msgstr "%s : %ld n'est pas un gid unique\n"
 
-#: src/groupmod.c:336
+#: src/groupmod.c:330
 #, c-format
 msgid "%s: %s is not a unique name\n"
 msgstr "%s : %s n'est pas un nom unique\n"
 
-#: src/groups.c:62
+#: src/groups.c:59
 #, c-format
 msgid "unknown user %s\n"
 msgstr "utilisateur %s inconnu\n"
 
-#: src/grpck.c:98
+#: src/grpck.c:87
 #, fuzzy, c-format
-msgid "Usage: %s [ -sr ] [ group [ gshadow ] ]\n"
-msgstr "Usage : %s [ -r ] ] groupe [ gshadow ] ]\n"
+msgid "Usage: %s [-r] [-s] [group [gshadow]]\n"
+msgstr "Usage : %s [-r] [-s] [groupe [gshadow ] ]\n"
 
-#: src/grpck.c:100
+#: src/grpck.c:90
 #, fuzzy, c-format
-msgid "Usage: %s [ -sr ] [ group ]\n"
-msgstr "Usage: %s [ -r ] [ groupe ]\n"
+msgid "Usage: %s [-r] [-s] [group]\n"
+msgstr "Usage: %s [-r] [-s] [groupe ]\n"
 
-#: src/grpck.c:119 src/pwck.c:119
+#: src/grpck.c:108 src/pwck.c:108
 msgid "No"
 msgstr "Non"
 
-#: src/grpck.c:204 src/pwck.c:186
+#: src/grpck.c:192 src/pwck.c:175
 #, c-format
 msgid "%s: -s and -r are incompatibile\n"
 msgstr ""
 
-#: src/grpck.c:244 src/grpck.c:252 src/pwck.c:226 src/pwck.c:235
+#: src/grpck.c:232 src/grpck.c:242 src/pwck.c:215 src/pwck.c:225
 #, c-format
 msgid "%s: cannot lock file %s\n"
 msgstr "%s : impossible de vérouiller le fichier %s\n"
 
-#: src/grpck.c:267 src/grpck.c:275 src/mkpasswd.c:216 src/pwck.c:251
-#: src/pwck.c:260
+#: src/grpck.c:259 src/grpck.c:268 src/mkpasswd.c:202 src/pwck.c:242
+#: src/pwck.c:251
 #, c-format
 msgid "%s: cannot open file %s\n"
 msgstr "%s : impossible d'ouvrir le fichier %s\n"
 
 #.
-#. * Tell the user this entire line is bogus and
-#. * ask them to delete it.
+#. * Tell the user this entire line is bogus and ask
+#. * them to delete it.
 #.
-#: src/grpck.c:317
+#: src/grpck.c:311
 msgid "invalid group file entry\n"
 msgstr "entrée dans le fichier group non valide\n"
 
-#: src/grpck.c:318 src/grpck.c:381 src/grpck.c:473 src/grpck.c:536
-#: src/grpck.c:553 src/pwck.c:305 src/pwck.c:367 src/pwck.c:474 src/pwck.c:536
-#: src/pwck.c:560
+#: src/grpck.c:312 src/grpck.c:375 src/grpck.c:458 src/grpck.c:521
+#: src/grpck.c:538 src/pwck.c:296 src/pwck.c:358 src/pwck.c:457 src/pwck.c:519
+#: src/pwck.c:543
 #, c-format
 msgid "delete line `%s'? "
 msgstr "effacer la ligne `%s'? "
@@ -1139,35 +1133,30 @@ msgstr "effacer la ligne `%s'? "
 #. * Tell the user this entry is a duplicate of
 #. * another and ask them to delete it.
 #.
-#: src/grpck.c:380
+#: src/grpck.c:374
 msgid "duplicate group entry\n"
 msgstr "entrée de groupe dupliquée\n"
 
-#: src/grpck.c:397
+#: src/grpck.c:391
 #, c-format
 msgid "invalid group name `%s'\n"
 msgstr "nom de groupe `%s' non valide\n"
 
-#: src/grpck.c:407
-#, c-format
-msgid "group %s: bad GID (%d)\n"
-msgstr "groupe %s : mauvais GID (%d)\n"
-
-#: src/grpck.c:433
+#: src/grpck.c:418
 #, c-format
 msgid "group %s: no user %s\n"
 msgstr "groupe %s : pas d'utilisateur %s\n"
 
-#: src/grpck.c:435 src/grpck.c:604
+#: src/grpck.c:420 src/grpck.c:590
 #, c-format
 msgid "delete member `%s'? "
 msgstr "effacer le membre `%s'? "
 
 #.
-#. * Tell the user this entire line is bogus and
-#. * ask them to delete it.
+#. * Tell the user this entire line is bogus and ask
+#. * them to delete it.
 #.
-#: src/grpck.c:472
+#: src/grpck.c:457
 msgid "invalid shadow group file entry\n"
 msgstr "entrée non valide dans le fichier shadow group\n"
 
@@ -1175,204 +1164,202 @@ msgstr "entr
 #. * Tell the user this entry is a duplicate of
 #. * another and ask them to delete it.
 #.
-#: src/grpck.c:535
+#: src/grpck.c:520
 msgid "duplicate shadow group entry\n"
 msgstr "entrée dupliquée dans le fichier shadow group\n"
 
-#: src/grpck.c:552
+#: src/grpck.c:537
 msgid "no matching group file entry\n"
 msgstr "aucune entrée dans le fichier group correspondante\n"
 
-#: src/grpck.c:572
+#: src/grpck.c:558
 #, c-format
 msgid "shadow group %s: no administrative user %s\n"
 msgstr "groupe shadow %s : aucun administrateur %s\n"
 
-#: src/grpck.c:574
+#: src/grpck.c:560
 #, c-format
 msgid "delete administrative member `%s'? "
 msgstr "effacer le membre administrateur `%s' ?"
 
-#: src/grpck.c:602
+#: src/grpck.c:588
 #, c-format
 msgid "shadow group %s: no user %s\n"
 msgstr "groupe shadow %s : aucun utilisateur %s\n"
 
-#: src/grpck.c:630 src/grpck.c:636 src/pwck.c:592 src/pwck.c:600
+#: src/grpck.c:616 src/grpck.c:622 src/pwck.c:577 src/pwck.c:585
 #, c-format
 msgid "%s: cannot update file %s\n"
 msgstr "%s : impossible de mettre à jour le fichier %s\n"
 
-#: src/grpck.c:660 src/pwck.c:626
+#: src/grpck.c:647 src/pwck.c:612
 #, c-format
 msgid "%s: the files have been updated; run mkpasswd\n"
 msgstr "%s : les fichiers ont été mis à jour; exécutez mkpasswd\n"
 
-#: src/grpck.c:661 src/grpck.c:665 src/pwck.c:627 src/pwck.c:631
+#: src/grpck.c:648 src/grpck.c:652 src/pwck.c:613 src/pwck.c:617
 #, c-format
 msgid "%s: no changes\n"
 msgstr ""
 
-#: src/grpck.c:664 src/pwck.c:630
+#: src/grpck.c:651 src/pwck.c:616
 #, c-format
 msgid "%s: the files have been updated\n"
 msgstr ""
 
-#: src/grpconv.c:62 src/grpunconv.c:63
+#: src/grpconv.c:60 src/grpunconv.c:56
 #, c-format
 msgid "%s: can't lock group file\n"
 msgstr ""
 
-#: src/grpconv.c:67 src/grpunconv.c:68
+#: src/grpconv.c:65 src/grpunconv.c:61
 #, c-format
 msgid "%s: can't open group file\n"
 msgstr ""
 
-#: src/grpconv.c:72 src/grpunconv.c:73
+#: src/grpconv.c:70 src/grpunconv.c:66
 #, c-format
 msgid "%s: can't lock shadow group file\n"
 msgstr ""
 
-#: src/grpconv.c:77 src/grpunconv.c:78
+#: src/grpconv.c:76 src/grpunconv.c:72
 #, c-format
 msgid "%s: can't open shadow group file\n"
 msgstr ""
 
-#.
-#. * This shouldn't happen (the entry exists) but...
-#.
-#: src/grpconv.c:93
+#: src/grpconv.c:94
 #, c-format
 msgid "%s: can't remove shadow group %s\n"
 msgstr ""
 
-#: src/grpconv.c:134 src/pwconv.c:160
+#: src/grpconv.c:138 src/pwconv.c:153
 #, c-format
 msgid "%s: can't update shadow entry for %s\n"
 msgstr ""
 
-#: src/grpconv.c:143 src/grpunconv.c:94
+#: src/grpconv.c:148 src/grpunconv.c:91
 #, c-format
 msgid "%s: can't update entry for group %s\n"
 msgstr ""
 
-#: src/grpconv.c:150 src/grpunconv.c:102
+#: src/grpconv.c:155 src/grpunconv.c:99
 #, c-format
 msgid "%s: can't update shadow group file\n"
 msgstr ""
 
-#: src/grpconv.c:154 src/grpunconv.c:107
+#: src/grpconv.c:160 src/grpunconv.c:105
 #, c-format
 msgid "%s: can't update group file\n"
 msgstr ""
 
-#: src/grpconv.c:169 src/grpunconv.c:128
+#: src/grpconv.c:175 src/grpunconv.c:127
 #, c-format
 msgid "%s: not configured for shadow group support.\n"
 msgstr ""
 
-#: src/grpunconv.c:112
+#: src/grpunconv.c:110
 #, c-format
 msgid "%s: can't delete shadow group file\n"
 msgstr ""
 
-#: src/id.c:56
-msgid "usage: id [ -a ]\n"
-msgstr "Usage : id [ -a ]\n"
+#: src/id.c:53
+#, fuzzy
+msgid "usage: id [-a]\n"
+msgstr "Usage : id [-a ]\n"
 
-#: src/id.c:58
+#: src/id.c:55
 msgid "usage: id\n"
 msgstr "Usage : id\n"
 
-#: src/id.c:127
-#, c-format
-msgid "uid=%d(%s)"
+#: src/id.c:123
+#, fuzzy, c-format
+msgid "uid=%u(%s)"
 msgstr "uid=%d(%s)"
 
-#: src/id.c:129
-#, c-format
-msgid "uid=%d"
+#: src/id.c:125
+#, fuzzy, c-format
+msgid "uid=%u"
 msgstr "uid=%d"
 
-#: src/id.c:133
-#, c-format
-msgid " gid=%d(%s)"
+#: src/id.c:129
+#, fuzzy, c-format
+msgid " gid=%u(%s)"
 msgstr " gid=%d(%s)"
 
-#: src/id.c:135
-#, c-format
-msgid " gid=%d"
+#: src/id.c:131
+#, fuzzy, c-format
+msgid " gid=%u"
 msgstr " gid=%d"
 
-#: src/id.c:145
-#, c-format
-msgid " euid=%d(%s)"
+#: src/id.c:141
+#, fuzzy, c-format
+msgid " euid=%u(%s)"
 msgstr " euid=%d(%s)"
 
-#: src/id.c:147
-#, c-format
-msgid " euid=%d"
+#: src/id.c:143
+#, fuzzy, c-format
+msgid " euid=%u"
 msgstr " euid=%d"
 
-#: src/id.c:152
-#, c-format
-msgid " egid=%d(%s)"
+#: src/id.c:148
+#, fuzzy, c-format
+msgid " egid=%u(%s)"
 msgstr " egid=%d(%s)"
 
-#: src/id.c:154
-#, c-format
-msgid " egid=%d"
+#: src/id.c:150
+#, fuzzy, c-format
+msgid " egid=%u"
 msgstr " egid=%d"
 
 #.
-#. * Start off the group message.  It will be of the format
+#. * Start off the group message. It will be of the format
 #. *
-#. *   groups=###(aaa),###(aaa),###(aaa)
+#. *      groups=###(aaa),###(aaa),###(aaa)
 #. *
 #. * where "###" is a numerical value and "aaa" is the
 #. * corresponding name for each respective numerical value.
 #.
-#: src/id.c:175
+#: src/id.c:169
 msgid " groups="
 msgstr " groupes="
 
-#: src/lastlog.c:116 src/lastlog.c:120
+#: src/lastlog.c:110 src/lastlog.c:116
 #, c-format
 msgid "Usage: %s [<-u|--login> login-name] [<-t|--time> days] [<-h|--help>]\n"
 msgstr ""
 
-#: src/lastlog.c:184
+#: src/lastlog.c:181
 msgid "Username         Port     From             Latest\n"
 msgstr "Utilisateur      Port     Venant de        Dernière\n"
 
-#: src/lastlog.c:186
+#: src/lastlog.c:183
 msgid "Username                Port     Latest\n"
 msgstr "Utilisateur             Port     Dernière\n"
 
-#: src/lastlog.c:200
+#: src/lastlog.c:197
 msgid "**Never logged in**"
 msgstr "**Jamais connecté**"
 
-#: src/login.c:201
+#: src/login.c:183
 #, c-format
 msgid "usage: %s [-p] [name]\n"
 msgstr "Usage : %s [-p] [nom]\n"
 
-#: src/login.c:204
+#: src/login.c:186
 #, c-format
 msgid "       %s [-p] [-h host] [-f name]\n"
 msgstr "       %s [-p] [-h hôte] [-f nom]\n"
 
-#: src/login.c:206
+#: src/login.c:188
 #, c-format
 msgid "       %s [-p] -r host\n"
 msgstr "       %s [-p] -r hôte\n"
 
-#: src/login.c:289
+#: src/login.c:272
 msgid "Invalid login time\n"
 msgstr "Heure de connexion non valide\n"
 
-#: src/login.c:344
+#: src/login.c:327
 msgid ""
 "\n"
 "System closed for routine maintenance\n"
@@ -1380,7 +1367,7 @@ msgstr ""
 "\n"
 "Système fermé pour maintenance\n"
 
-#: src/login.c:354
+#: src/login.c:338
 msgid ""
 "\n"
 "[Disconnect bypassed -- root login allowed.]\n"
@@ -1388,7 +1375,7 @@ msgstr ""
 "\n"
 "[Disconnexion court-circuitée -- login root authorisé.]\n"
 
-#: src/login.c:393
+#: src/login.c:375
 #, c-format
 msgid ""
 "\n"
@@ -1397,17 +1384,17 @@ msgstr ""
 "\n"
 "Tentative de connexion: délai de %s secondes dépassé.\n"
 
-#: src/login.c:695
+#: src/login.c:687
 #, c-format
 msgid " on `%.100s' from `%.200s'"
 msgstr " sur `%.100s' à partir de `%.200s'"
 
-#: src/login.c:697
+#: src/login.c:691
 #, c-format
 msgid " on `%.100s'"
 msgstr " sur `%.100s'"
 
-#: src/login.c:837
+#: src/login.c:850
 #, c-format
 msgid ""
 "\n"
@@ -1416,238 +1403,234 @@ msgstr ""
 "\n"
 "% login: "
 
-#: src/login.c:839
+#: src/login.c:853
 msgid "login: "
 msgstr "login: "
 
-#: src/login.c:1029 src/sulogin.c:231
+#: src/login.c:1069 src/sulogin.c:233
 msgid "Login incorrect"
 msgstr "Login incorrect"
 
-#: src/login.c:1217
+#: src/login.c:1263
 msgid "Warning: login re-enabled after temporary lockout.\n"
 msgstr "Avertissement: login réactivé après une désactivation temporaire.\n"
 
-#: src/login.c:1227
+#: src/login.c:1276
 #, c-format
 msgid "Last login: %s on %s"
 msgstr "Dernière connexion : le %s sur %s"
 
-#: src/login.c:1230
+#: src/login.c:1279
 #, c-format
 msgid "Last login: %.19s on %s"
 msgstr "Dernière connexion : le %.19s sur %s"
 
-#: src/login.c:1235
+#: src/login.c:1285
 #, c-format
 msgid " from %.*s"
 msgstr " à partir de %.*s"
 
-#: src/login.c:1307
+#: src/login.c:1362
 msgid "Starting rad_login\n"
 msgstr "Démarrage de rad_login\n"
 
-#: src/mkpasswd.c:49
+#: src/mkpasswd.c:47
 #, c-format
 msgid "%s: no DBM database on system - no action performed\n"
 msgstr "%s : pas de base de données DBM sur le système - aucune action prise\n"
 
-#: src/mkpasswd.c:74 src/mkpasswd.c:382
-#, c-format
-msgid "Usage: %s [ -vf ] [ -p|g|sp|sg ] file\n"
-msgstr "Usage : %s [ -vf ] [ -p|g|sp|sg ] fichier\n"
-
-#: src/mkpasswd.c:76 src/mkpasswd.c:384
-#, c-format
-msgid "Usage: %s [ -vf ] [ -p|g|sp ] file\n"
-msgstr "Usage : %s [ -vf ] [ -p|g|sp ] fichier\n"
-
-#: src/mkpasswd.c:79 src/mkpasswd.c:387
-#, c-format
-msgid "Usage: %s [ -vf ] [ -p|g ] file\n"
-msgstr "Usage : %s [ -vf ] [ -p|g ] fichier\n"
-
-#: src/mkpasswd.c:245 src/mkpasswd.c:249
+#: src/mkpasswd.c:232 src/mkpasswd.c:237
 #, c-format
 msgid "%s: cannot overwrite file %s\n"
 msgstr "%s : impossible d'écraser le fichier %s\n"
 
-#: src/mkpasswd.c:263
+#: src/mkpasswd.c:252
 #, c-format
 msgid "%s: cannot open DBM files for %s\n"
 msgstr "%s : impossible d'ouvrir les fichiers DBM pour %s\n"
 
-#: src/mkpasswd.c:296
+#: src/mkpasswd.c:287
 #, c-format
 msgid "%s: the beginning with "
 msgstr ""
 
-#: src/mkpasswd.c:296
+#: src/mkpasswd.c:288
 #, fuzzy
 msgid " is too long\n"
 msgstr "%s: champs trop longs\n"
 
-#: src/mkpasswd.c:321
+#: src/mkpasswd.c:315
 #, c-format
 msgid "%s: error parsing line \"%s\"\n"
 msgstr "%s : erreur lors l'analyse de la ligne \"%s\"\n"
 
-#: src/mkpasswd.c:326 src/mkpasswd.c:328 src/mkpasswd.c:330 src/mkpasswd.c:332
+#: src/mkpasswd.c:323 src/mkpasswd.c:328 src/mkpasswd.c:333 src/mkpasswd.c:338
 msgid "adding record for name "
 msgstr ""
 
-#: src/mkpasswd.c:326 src/mkpasswd.c:328 src/mkpasswd.c:330 src/mkpasswd.c:332
-#: src/mkpasswd.c:336 src/mkpasswd.c:341 src/mkpasswd.c:345 src/mkpasswd.c:349
+#: src/mkpasswd.c:324 src/mkpasswd.c:329 src/mkpasswd.c:334 src/mkpasswd.c:339
+#: src/mkpasswd.c:345 src/mkpasswd.c:351 src/mkpasswd.c:356 src/mkpasswd.c:361
 msgid "\n"
 msgstr ""
 
-#: src/mkpasswd.c:336 src/mkpasswd.c:341 src/mkpasswd.c:345 src/mkpasswd.c:349
+#: src/mkpasswd.c:344 src/mkpasswd.c:350 src/mkpasswd.c:355 src/mkpasswd.c:360
 #, c-format
 msgid "%s: error adding record for "
 msgstr ""
 
-#: src/mkpasswd.c:367
+#: src/mkpasswd.c:378
 #, c-format
 msgid "added %d entries, longest was %d\n"
 msgstr "%d entrées ajoutées, la plus longue fut %d\n"
 
-#: src/newgrp.c:66
-msgid "usage: newgrp [ - ] [ group ]\n"
-msgstr "Usage : newgrp [ - ] [ groupe ]\n"
+#: src/mkpasswd.c:392
+#, fuzzy, c-format
+msgid "Usage: %s [-vf] [-p|g|sp|sg] file\n"
+msgstr "Usage : %s [-vf ] [-p|g|sp|sg ] fichier\n"
+
+#: src/mkpasswd.c:395
+#, fuzzy, c-format
+msgid "Usage: %s [-vf] [-p|g|sp] file\n"
+msgstr "Usage : %s [-vf ] [-p|g|sp ] fichier\n"
+
+#: src/mkpasswd.c:398
+#, fuzzy, c-format
+msgid "Usage: %s [-vf] [-p|g] file\n"
+msgstr "Usage : %s [-vf ] [-p|g ] fichier\n"
 
-#: src/newgrp.c:68
+#: src/newgrp.c:61
 #, fuzzy
-msgid "usage: sg group [[-c] command ]\n"
-msgstr "Usage : sg groupe [ commande ]\n"
+msgid "usage: newgrp [-] [group]\n"
+msgstr "Usage : newgrp [- ] [groupe ]\n"
 
-#: src/newgrp.c:125
-#, c-format
-msgid "unknown uid: %d\n"
+#: src/newgrp.c:63
+#, fuzzy
+msgid "usage: sg group [[-c] command]\n"
+msgstr "Usage : sg groupe [commande ]\n"
+
+#: src/newgrp.c:136
+#, fuzzy, c-format
+msgid "unknown uid: %u\n"
 msgstr "uid inconnue : %d\n"
 
-#: src/newgrp.c:201
-#, c-format
-msgid "unknown gid: %ld\n"
+#: src/newgrp.c:219
+#, fuzzy, c-format
+msgid "unknown gid: %lu\n"
 msgstr "gid inconnu : %ld\n"
 
-#: src/newgrp.c:245
-#, c-format
-msgid "unknown gid: %d\n"
-msgstr "gid inconnu : %d\n"
-
-#: src/newgrp.c:323 src/newgrp.c:332
+#: src/newgrp.c:365 src/newgrp.c:374
 msgid "Sorry.\n"
 msgstr "Désolé ;-)\n"
 
-#: src/newgrp.c:364
+#: src/newgrp.c:472
 msgid "too many groups\n"
 msgstr "trop de groupes\n"
 
-#: src/newusers.c:82
-#, c-format
-msgid "Usage: %s [ input ]\n"
-msgstr "Usage : %s [ entrée ] \n"
+#: src/newusers.c:78
+#, fuzzy, c-format
+msgid "Usage: %s [input]\n"
+msgstr "Usage : %s [entrée ] \n"
 
-#: src/newusers.c:414
+#: src/newusers.c:407
 #, c-format
 msgid "%s: can't lock /etc/passwd.\n"
 msgstr "%s : impossible de vérouiller /etc/passwd.\n"
 
-#: src/newusers.c:425
+#: src/newusers.c:419
 #, c-format
 msgid "%s: can't lock files, try again later\n"
 msgstr "%s : impossible de vérouiller les fichiers, essayez plus tard\n"
 
-#: src/newusers.c:440
+#: src/newusers.c:435
 #, c-format
 msgid "%s: can't open files\n"
 msgstr "%s : impossible d'ouvrir les fichiers\n"
 
-#: src/newusers.c:485
+#: src/newusers.c:480
 #, c-format
 msgid "%s: line %d: invalid line\n"
 msgstr "%s : ligne %d : ligne non valide\n"
 
-#: src/newusers.c:503
+#: src/newusers.c:499
 #, c-format
 msgid "%s: line %d: can't create GID\n"
 msgstr "%s : ligne %d : impossible de créer le GID\n"
 
-#: src/newusers.c:519
+#: src/newusers.c:515
 #, c-format
 msgid "%s: line %d: can't create UID\n"
 msgstr "%s : ligne %d : impossible de créer le GID\n"
 
-#: src/newusers.c:531
+#: src/newusers.c:528
 #, c-format
 msgid "%s: line %d: cannot find user %s\n"
 msgstr "%s : ligne %d : impossible de trouver l'utilisateur %s\n"
 
-#: src/newusers.c:539
+#: src/newusers.c:537
 #, c-format
 msgid "%s: line %d: can't update password\n"
 msgstr "%s : ligne %d : impossible de mettre le mot de passe à jour\n"
 
-#: src/newusers.c:556
+#: src/newusers.c:555
 #, c-format
 msgid "%s: line %d: mkdir failed\n"
 msgstr "%s : ligne %d : échec de mkdir\n"
 
-#: src/newusers.c:560
+#: src/newusers.c:561
 #, c-format
 msgid "%s: line %d: chown failed\n"
 msgstr "%s : ligne %d : échec de chown\n"
 
-#: src/newusers.c:569
+#: src/newusers.c:571
 #, c-format
 msgid "%s: line %d: can't update entry\n"
 msgstr "%s : ligne %d : impossible de mettre l'entrée à jour\n"
 
-#: src/newusers.c:600
+#: src/newusers.c:603
 #, c-format
 msgid "%s: error updating files\n"
 msgstr "%s : erreur lors de la mise à jour des fichiers\n"
 
-#: src/passwd.c:239
-#, c-format
-msgid "usage: %s [ -f | -s ] [ name ]\n"
-msgstr "Usage : %s [ -f | -s ] [ nom ]\n"
+#: src/passwd.c:174
+#, fuzzy, c-format
+msgid "usage: %s [-f|-s] [name]\n"
+msgstr "Usage : %s [-f|-s] [nom ]\n"
 
-#: src/passwd.c:242
-#, c-format
-msgid "       %s [ -x max ] [ -n min ] [ -w warn ] [ -i inact ] name\n"
-msgstr "       %s [ -x max ] [ -n min ] [ -w avert ] [ -i inact ] nom\n"
+#: src/passwd.c:178
+#, fuzzy, c-format
+msgid "       %s [-x max] [-n min] [-w warn] [-i inact] name\n"
+msgstr "       %s [-x max ] [-n min ] [-w avert ] [-i inact ] nom\n"
 
-#: src/passwd.c:245
-#, c-format
-msgid "       %s { -l | -u | -d | -S | -e } name\n"
+#: src/passwd.c:180
+#, fuzzy, c-format
+msgid "       %s {-l|-u|-d|-S|-e} name\n"
 msgstr "       %s { -l | -u | -d | -S | -e } nom\n"
 
-#: src/passwd.c:347
+#: src/passwd.c:283
 #, c-format
 msgid "User %s has a TCFS key, his old password is required.\n"
 msgstr ""
 "L'utilisateur %s a une clé TCFS, son ancien mot de passe est nécessaire.\n"
 
-#: src/passwd.c:348
+#: src/passwd.c:286
 msgid "You can use -t option to force the change.\n"
 msgstr "Vous pouvez utiliser l'option -t pour forcer le changement.\n"
 
-#: src/passwd.c:354
+#: src/passwd.c:292
 msgid "Old password: "
 msgstr "Ancien mot de passe : "
 
-#: src/passwd.c:361
+#: src/passwd.c:301
 #, c-format
 msgid "Incorrect password for `%s'\n"
 msgstr "Mot de passe incorrect pour `%s'\n"
 
-#: src/passwd.c:374
+#: src/passwd.c:314
 #, c-format
 msgid "Warning: user %s has a TCFS key.\n"
 msgstr "Avertissement : l'utilisateur %s a une clé TCFS.\n"
 
-#: src/passwd.c:392
+#: src/passwd.c:333
 #, c-format
 msgid ""
 "Enter the new password (minimum of %d, maximum of %d characters)\n"
@@ -1657,15 +1640,15 @@ msgstr ""
 "caractères). Utilisez une combinaison de lettres en majuscule/minuscule\n"
 "et de nombres.\n"
 
-#: src/passwd.c:399
+#: src/passwd.c:339
 msgid "New password: "
 msgstr "Nouveau mot de passe : "
 
-#: src/passwd.c:409
+#: src/passwd.c:350
 msgid "Try again.\n"
 msgstr "Essaye encore...\n"
 
-#: src/passwd.c:418
+#: src/passwd.c:361
 msgid ""
 "\n"
 "Warning: weak password (enter it again to use it anyway).\n"
@@ -1674,92 +1657,92 @@ msgstr ""
 "Avertissement : mot de passe simpliste (tapez le à nouveau pour l'utiliser\n"
 "quand même).\n"
 
-#: src/passwd.c:427
+#: src/passwd.c:371
 msgid "They don't match; try again.\n"
 msgstr "Ils ne sont pas identique; essaye encore...\n"
 
-#: src/passwd.c:512 src/passwd.c:528
+#: src/passwd.c:451 src/passwd.c:469
 #, c-format
 msgid "The password for %s cannot be changed.\n"
 msgstr "Le mot de passe pour %s ne peut être changé.\n"
 
-#: src/passwd.c:556
+#: src/passwd.c:494
 #, c-format
 msgid "Sorry, the password for %s cannot be changed yet.\n"
 msgstr "Désolé, le mot de passe pour %s ne peux pas encore être changé.\n"
 
-#: src/passwd.c:693
+#: src/passwd.c:614
 #, c-format
 msgid "%s: out of memory\n"
 msgstr "%s : plus de mémoire\n"
 
-#: src/passwd.c:845
+#: src/passwd.c:769
 msgid "Cannot lock the TCFS key database; try again later\n"
 msgstr ""
 "Impossible de vérouiller la base de données de clés TCFS; essayez à\n"
 "nouveau plus tard\n"
 
-#: src/passwd.c:851
+#: src/passwd.c:777
 msgid "Cannot open the TCFS key database.\n"
 msgstr "Impossible d'ouvrir la base de clés TCFS.\n"
 
-#: src/passwd.c:857
+#: src/passwd.c:785
 msgid "Error updating the TCFS key database.\n"
 msgstr "Erreur lors de la mise à jour de la base de clés TCFS.\n"
 
-#: src/passwd.c:862
+#: src/passwd.c:792
 msgid "Cannot commit TCFS changes.\n"
 msgstr "Impossible de valider les changements TCFS.\n"
 
-#: src/passwd.c:1069
+#: src/passwd.c:975
 #, c-format
 msgid "%s: Cannot execute %s"
 msgstr "%s : Impossible d'exécuter %s"
 
-#: src/passwd.c:1176
+#: src/passwd.c:1077
 #, c-format
 msgid "%s: repository %s not supported\n"
 msgstr ""
 
-#: src/passwd.c:1263
+#: src/passwd.c:1152
 #, c-format
 msgid "%s: Permission denied\n"
 msgstr "%s : Permission refusée\n"
 
-#: src/passwd.c:1287
+#: src/passwd.c:1176
 #, c-format
 msgid "You may not change the password for %s.\n"
 msgstr "Vous ne pouvez pas changer le mot de passe de %s.\n"
 
-#: src/passwd.c:1352
+#: src/passwd.c:1242
 #, c-format
 msgid "Changing password for %s\n"
 msgstr "Changement du mot de passe de %s\n"
 
-#: src/passwd.c:1356
+#: src/passwd.c:1246
 #, c-format
 msgid "The password for %s is unchanged.\n"
 msgstr "Le mot de passe pour %s est inchangé.\n"
 
-#: src/passwd.c:1412
+#: src/passwd.c:1297
 msgid "Password changed.\n"
 msgstr "Mot de passe changé.\n"
 
-#: src/pwck.c:98
+#: src/pwck.c:87
 #, fuzzy, c-format
-msgid "Usage: %s [ -sqr ] [ passwd [ shadow ] ]\n"
-msgstr "Usage : %s [ -qr ] [ passwd [ shadow ] ]\n"
+msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+msgstr "Usage : %s [-q] [-r] [-s] [passwd [shadow ] ]\n"
 
-#: src/pwck.c:100
+#: src/pwck.c:90
 #, fuzzy, c-format
-msgid "Usage: %s [ -sqr ] [ passwd ]\n"
-msgstr "Usage : %s [ -qr ] [ passwd ]\n"
+msgid "Usage: %s [-q] [-r] [-s] [passwd]\n"
+msgstr "Usage : %s [-q] [-r] [-s] [passwd ]\n"
 
 #.
-#. * Tell the user this entire line is bogus and
-#. * ask them to delete it.
+#. * Tell the user this entire line is bogus and ask
+#. * them to delete it.
 #.
-#: src/pwck.c:304
+#: src/pwck.c:295
 msgid "invalid password file entry\n"
 msgstr "entrée non valide dans le fichier password\n"
 
@@ -1767,32 +1750,24 @@ msgstr "entr
 #. * Tell the user this entry is a duplicate of
 #. * another and ask them to delete it.
 #.
-#: src/pwck.c:366
+#: src/pwck.c:357
 msgid "duplicate password entry\n"
 msgstr "entrée dupliquée dans password\n"
 
-#: src/pwck.c:382
+#: src/pwck.c:373
 #, c-format
 msgid "invalid user name `%s'\n"
 msgstr "nom d'utilisateur `%s' non valide\n"
 
-#: src/pwck.c:392
-#, c-format
-msgid "user %s: bad UID (%d)\n"
-msgstr "utilisateur %s : mauvais UID (%d)\n"
-
 #.
 #. * No primary group, just give a warning
 #.
-#: src/pwck.c:407
-#, c-format
-msgid "user %s: no group %d\n"
+#: src/pwck.c:388
+#, fuzzy, c-format
+msgid "user %s: no group %u\n"
 msgstr "utilisateur %s : aucun groupe %d\n"
 
-#.
-#. * Home directory doesn't exist, give a warning
-#.
-#: src/pwck.c:422
+#: src/pwck.c:404
 #, c-format
 msgid "user %s: directory %s does not exist\n"
 msgstr "utilisateur %s : le répertoire %s n'existe pas\n"
@@ -1800,16 +1775,16 @@ msgstr "utilisateur %s : le r
 #.
 #. * Login shell doesn't exist, give a warning
 #.
-#: src/pwck.c:437
+#: src/pwck.c:420
 #, c-format
 msgid "user %s: program %s does not exist\n"
 msgstr "utilisateur %s : le programme %s n'existe pas\n"
 
 #.
-#. * Tell the user this entire line is bogus and
-#. * ask them to delete it.
+#. * Tell the user this entire line is bogus and ask
+#. * them to delete it.
 #.
-#: src/pwck.c:473
+#: src/pwck.c:456
 msgid "invalid shadow password file entry\n"
 msgstr "entrée shadow password non valide\n"
 
@@ -1817,7 +1792,7 @@ msgstr "entr
 #. * Tell the user this entry is a duplicate of
 #. * another and ask them to delete it.
 #.
-#: src/pwck.c:535
+#: src/pwck.c:518
 msgid "duplicate shadow password entry\n"
 msgstr "entrée shadow password dupliquée\n"
 
@@ -1825,71 +1800,71 @@ msgstr "entr
 #. * Tell the user this entry has no matching
 #. * /etc/passwd entry and ask them to delete it.
 #.
-#: src/pwck.c:559
+#: src/pwck.c:542
 msgid "no matching password file entry\n"
 msgstr "aucune entrée correspondante dans le fichier password\n"
 
-#: src/pwck.c:576
+#: src/pwck.c:560
 #, c-format
 msgid "user %s: last password change in the future\n"
 msgstr ""
 "utilisateur %s : date du dernier changement de mot de passe dans le futur\n"
 
-#: src/pwconv.c:94 src/pwunconv.c:99
+#: src/pwconv.c:84 src/pwunconv.c:93
 #, c-format
 msgid "%s: can't lock passwd file\n"
 msgstr "%s : impossible de vérouiller le fichier passwd\n"
 
-#: src/pwconv.c:99 src/pwunconv.c:104
+#: src/pwconv.c:89 src/pwunconv.c:98
 #, c-format
 msgid "%s: can't open passwd file\n"
 msgstr "%s : impossible d'ouvrir le fichier passwd\n"
 
-#: src/pwconv.c:126
+#: src/pwconv.c:117
 #, c-format
 msgid "%s: can't remove shadow entry for %s\n"
 msgstr "%s : impossible d'enlever l'entrée shadow pour %s\n"
 
-#: src/pwconv.c:169
+#: src/pwconv.c:163
 #, c-format
 msgid "%s: can't update passwd entry for %s\n"
 msgstr "%s : impossible de mettre à jour le mot de passe de %s\n"
 
-#: src/pwconv.c:176
+#: src/pwconv.c:170
 #, c-format
 msgid "%s: can't update shadow file\n"
 msgstr "%s : impossible de mettre à jour le fichier shadow\n"
 
-#: src/pwconv.c:180
+#: src/pwconv.c:175
 #, c-format
 msgid "%s: can't update passwd file\n"
 msgstr "%s : impossible de mettre à jour le fichier passwd\n"
 
-#: src/pwunconv.c:53
+#: src/pwunconv.c:50
 #, c-format
 msgid "%s: Shadow passwords are not configured.\n"
 msgstr "%s : Les mots de passe shadow ne sont pas configurés.\n"
 
-#: src/pwunconv.c:162
+#: src/pwunconv.c:160
 #, c-format
 msgid "%s: can't update entry for user %s\n"
 msgstr "%s : impossible de mettre à jour l'entrée %s\n"
 
-#: src/pwunconv.c:179
+#: src/pwunconv.c:181
 #, c-format
 msgid "%s: can't delete shadow password file\n"
 msgstr "%s : impossible d'effacer le fichier shadow\n"
 
-#: src/su.c:140
+#: src/su.c:133
 msgid "Sorry."
 msgstr "Désolé ;-)"
 
-#: src/su.c:222
+#: src/su.c:216
 #, c-format
 msgid "%s: must be run from a terminal\n"
 msgstr "%s : doit être lancé à partir d'un terminal\n"
 
-#: src/su.c:310
+#: src/su.c:306
 #, c-format
 msgid "%s: pam_start: error %d\n"
 msgstr "%s : pam_start : erreur %d\n"
@@ -1899,18 +1874,17 @@ msgstr "%s : pam_start : erreur %d\n"
 msgid "Unknown id: %s\n"
 msgstr "ID inconnue : %s\n"
 
-#. access denied (-1) or unexpected value
-#: src/su.c:371 src/su.c:386
+#: src/su.c:373 src/su.c:390
 #, fuzzy, c-format
 msgid "You are not authorized to su %s\n"
 msgstr "Vous n'êtes pas authorisés "
 
 #. require own password
-#: src/su.c:382
+#: src/su.c:385
 msgid "(Enter your own password.)"
 msgstr "(Entrez votre propre mot de passe.)"
 
-#: src/su.c:413
+#: src/su.c:419
 #, c-format
 msgid ""
 "%s: %s\n"
@@ -1919,28 +1893,23 @@ msgstr ""
 "%s: %s\n"
 "(Ignoré)\n"
 
-#: src/su.c:615
+#: src/su.c:626
 msgid "No shell\n"
 msgstr "Pas de shell\n"
 
 #. must be a password file!
-#: src/sulogin.c:136
+#: src/sulogin.c:132
 msgid "No password file\n"
 msgstr "Pas de fichier de mot de passe\n"
 
 #.
 #. * Fail secure
 #.
-#: src/sulogin.c:178
+#: src/sulogin.c:174
 msgid "No password entry for 'root'\n"
 msgstr "Pas d'entrée pour le mot de passe de 'root'\n"
 
-#.
-#. * Here we prompt for the root password, or if no password is
-#. * given we just exit.
-#.
-#. get a password for root
-#: src/sulogin.c:192
+#: src/sulogin.c:190
 msgid ""
 "\n"
 "Type control-d to proceed with normal startup,\n"
@@ -1951,7 +1920,7 @@ msgstr ""
 "(ou donnez le mot de passe de root pour la maintenance) : "
 
 #. make new environment active
-#: src/sulogin.c:241
+#: src/sulogin.c:243
 msgid "Entering System Maintenance Mode\n"
 msgstr "Entrée du système en mode maintenance\n"
 
@@ -1960,510 +1929,510 @@ msgstr "Entr
 msgid "%s: rebuild the group database\n"
 msgstr "%s : reconstruction de la base de données des groupes\n"
 
-#: src/useradd.c:258
+#: src/useradd.c:260
 #, c-format
 msgid "%s: rebuild the shadow group database\n"
 msgstr "%s : reconstruction de la base de données des groupes shadow\n"
 
-#: src/useradd.c:295 src/usermod.c:974
+#: src/useradd.c:295 src/useradd.c:309 src/usermod.c:981 src/usermod.c:995
 #, c-format
 msgid "%s: invalid numeric argument `%s'\n"
 msgstr "%s : argument numérique `%s' non valide\n"
 
-#: src/useradd.c:351
+#: src/useradd.c:365
 #, c-format
 msgid "%s: unknown gid %s\n"
 msgstr "%s : gid %s inconnu\n"
 
-#: src/useradd.c:358 src/useradd.c:660 src/useradd.c:1246 src/usermod.c:261
-#: src/usermod.c:1105
+#: src/useradd.c:373 src/useradd.c:676 src/useradd.c:1269 src/usermod.c:260
+#: src/usermod.c:1128
 #, c-format
 msgid "%s: unknown group %s\n"
 msgstr "%s : groupe %s inconnu\n"
 
-#: src/useradd.c:426
-#, c-format
-msgid "group=%s,%ld  basedir=%s  skel=%s\n"
+#: src/useradd.c:440
+#, fuzzy, c-format
+msgid "group=%s,%u  basedir=%s  skel=%s\n"
 msgstr "group=%s,%ld  rép_base=%s  skel=%s\n"
 
-#: src/useradd.c:429
+#: src/useradd.c:444
 #, c-format
 msgid "shell=%s  "
 msgstr "shell=%s  "
 
-#: src/useradd.c:431
+#: src/useradd.c:446
 #, c-format
 msgid "inactive=%ld  expire=%s"
 msgstr "inactif=%ld  expire=%s"
 
-#: src/useradd.c:435
-#, c-format
-msgid "GROUP=%ld\n"
+#: src/useradd.c:450
+#, fuzzy, c-format
+msgid "GROUP=%u\n"
 msgstr "GROUP=%ld\n"
 
-#: src/useradd.c:436
+#: src/useradd.c:451
 #, c-format
 msgid "HOME=%s\n"
 msgstr "HOME=%s\n"
 
-#: src/useradd.c:438
+#: src/useradd.c:453
 #, c-format
 msgid "INACTIVE=%ld\n"
 msgstr "INACTIVE=%ld\n"
 
-#: src/useradd.c:439
+#: src/useradd.c:454
 #, c-format
 msgid "EXPIRE=%s\n"
 msgstr "EXPIRE=%s\n"
 
-#: src/useradd.c:441
+#: src/useradd.c:456
 #, c-format
 msgid "SHELL=%s\n"
 msgstr "SHELL=%s\n"
 
-#: src/useradd.c:442
+#: src/useradd.c:457
 #, c-format
 msgid "SKEL=%s\n"
 msgstr "SKEL=%s\n"
 
-#: src/useradd.c:482
+#: src/useradd.c:498
 #, c-format
 msgid "%s: cannot create new defaults file\n"
 msgstr "%s : impossible de créer un nouveau fichier de défauts\n"
 
-#: src/useradd.c:488
+#: src/useradd.c:503
 #, fuzzy, c-format
 msgid "%s: cannot open new defaults file\n"
 msgstr "%s : impossible de créer un nouveau fichier de défauts\n"
 
-#: src/useradd.c:582 src/useradd.c:593
+#: src/useradd.c:596 src/useradd.c:608
 #, c-format
 msgid "%s: rename: %s"
 msgstr "%s : rename : %s"
 
-#: src/useradd.c:680 src/usermod.c:281
+#: src/useradd.c:697 src/usermod.c:281
 #, c-format
 msgid "%s: group `%s' is a NIS group.\n"
 msgstr "%s : le groupe `%s' est un groupe NIS.\n"
 
-#: src/useradd.c:688 src/usermod.c:289
+#: src/useradd.c:706 src/usermod.c:290
 #, c-format
 msgid "%s: too many groups specified (max %d).\n"
 msgstr "%s : trop de groupes spécifiés (max %d).\n"
 
-#: src/useradd.c:720 src/usermod.c:321
+#: src/useradd.c:738 src/usermod.c:322
 #, c-format
 msgid "usage: %s\t[-u uid [-o]] [-g group] [-G group,...] \n"
 msgstr "Usage : %s\t[-u uid [-o]] [-g groupe] [-G groupe,...] \n"
 
-#: src/useradd.c:723
+#: src/useradd.c:742
 msgid "\t\t[-d home] [-s shell] [-c comment] [-m [-k template]]\n"
 msgstr "\t\t[-d home] [-s shell] [-c commentaire] [-m [-k template]]\n"
 
-#: src/useradd.c:726 src/usermod.c:327
+#: src/useradd.c:745 src/usermod.c:329
 msgid "[-f inactive] [-e expire ] "
 msgstr "[-f inactif] [-e expire ] "
 
-#: src/useradd.c:729
+#: src/useradd.c:748
 msgid "[-A program] "
 msgstr "[-A program] "
 
-#: src/useradd.c:731
+#: src/useradd.c:750
 msgid "[-p passwd] name\n"
 msgstr "[-p mot-de-passe] nom\n"
 
-#: src/useradd.c:733
+#: src/useradd.c:753
 #, c-format
 msgid "       %s\t-D [-g group] [-b base] [-s shell]\n"
 msgstr "       %s\t-D [-g groupe] [-b base] [-s shell]\n"
 
-#: src/useradd.c:736
+#: src/useradd.c:756
 msgid "\t\t[-f inactive] [-e expire ]\n"
 msgstr "\t\t[-f inactif] [-e expire ]\n"
 
-#: src/useradd.c:833 src/usermod.c:479
+#: src/useradd.c:850 src/usermod.c:480
 #, c-format
 msgid "%s: error locking group file\n"
 msgstr "%s : erreur lors du vérouillage du fichier de groupe\n"
 
-#: src/useradd.c:837 src/usermod.c:484
+#: src/useradd.c:855 src/usermod.c:486
 #, c-format
 msgid "%s: error opening group file\n"
 msgstr "%s : erreur lors d'ouverture du fichier de groupe\n"
 
-#: src/useradd.c:842 src/usermod.c:591
+#: src/useradd.c:862 src/usermod.c:597
 #, c-format
 msgid "%s: error locking shadow group file\n"
 msgstr "%s : erreur lors du vérouillage du fichier shadow group\n"
 
-#: src/useradd.c:847 src/usermod.c:597
+#: src/useradd.c:867 src/usermod.c:603
 #, c-format
 msgid "%s: error opening shadow group file\n"
 msgstr "%s : erreur lors de l'ouverture du fichier shadow group\n"
 
-#: src/useradd.c:1019
-#, c-format
-msgid "%s: uid %d is not unique\n"
-msgstr "%s : l'uid %d n'est pas unique\n"
+#: src/useradd.c:1039
+#, fuzzy, c-format
+msgid "%s: uid %u is not unique\n"
+msgstr "%s : l'uid %ld n'est pas unique\n"
 
-#: src/useradd.c:1049
+#: src/useradd.c:1069
 #, c-format
 msgid "%s: can't get unique uid\n"
 msgstr "%s : impossible d'obtenir un uid unique\n"
 
-#: src/useradd.c:1157 src/useradd.c:1301 src/usermod.c:1053 src/usermod.c:1064
-#: src/usermod.c:1074 src/usermod.c:1120 src/usermod.c:1164
+#: src/useradd.c:1174 src/useradd.c:1325 src/usermod.c:1075 src/usermod.c:1086
+#: src/usermod.c:1096 src/usermod.c:1143 src/usermod.c:1187
 #, c-format
 msgid "%s: invalid field `%s'\n"
 msgstr "%s : champs `%s' non valide\n"
 
-#: src/useradd.c:1171
+#: src/useradd.c:1189
 #, c-format
 msgid "%s: invalid base directory `%s'\n"
 msgstr "%s : répertoire de base non valide `%s'\n"
 
-#: src/useradd.c:1181
+#: src/useradd.c:1199
 #, c-format
 msgid "%s: invalid comment `%s'\n"
 msgstr "%s : commentaire `%s' non valide\n"
 
-#: src/useradd.c:1191
+#: src/useradd.c:1210
 #, c-format
 msgid "%s: invalid home directory `%s'\n"
 msgstr "%s : répertoire personnel `%s' non valide\n"
 
-#: src/useradd.c:1209 src/usermod.c:1087
+#: src/useradd.c:1229 src/usermod.c:1110
 #, c-format
 msgid "%s: invalid date `%s'\n"
 msgstr "%s : date `%s' non valide\n"
 
-#: src/useradd.c:1221
+#: src/useradd.c:1242
 #, c-format
 msgid "%s: shadow passwords required for -e\n"
 msgstr "%s : mots de passe shadow nécessaires pour -e\n"
 
-#: src/useradd.c:1236
+#: src/useradd.c:1258
 #, c-format
 msgid "%s: shadow passwords required for -f\n"
 msgstr "%s : mots de passe shadow nécessaires pour -f\n"
 
-#: src/useradd.c:1310
+#: src/useradd.c:1336
 #, c-format
 msgid "%s: invalid shell `%s'\n"
 msgstr "%s : shell `%s' non valide\n"
 
-#: src/useradd.c:1351
+#: src/useradd.c:1377
 #, c-format
 msgid "%s: invalid user name `%s'\n"
 msgstr "%s : nom d'utilisateur `%s' non valide\n"
 
-#: src/useradd.c:1387 src/userdel.c:298 src/usermod.c:1232
+#: src/useradd.c:1413 src/userdel.c:298 src/usermod.c:1255
 #, c-format
 msgid "%s: cannot rewrite password file\n"
 msgstr "%s : impossible de reécrire le fichier de mots de passe\n"
 
-#: src/useradd.c:1392 src/userdel.c:301 src/usermod.c:1237
+#: src/useradd.c:1420 src/userdel.c:303 src/usermod.c:1262
 #, c-format
 msgid "%s: cannot rewrite shadow password file\n"
 msgstr "%s : impossible de reécrire le fichier shadow\n"
 
-#: src/useradd.c:1432 src/userdel.c:365 src/usermod.c:1272
+#: src/useradd.c:1461 src/userdel.c:367 src/usermod.c:1296
 #, c-format
 msgid "%s: unable to lock password file\n"
 msgstr "%s : impossible de vérouiller le fichier de mots de passe\n"
 
-#: src/useradd.c:1436 src/userdel.c:369 src/usermod.c:1276
+#: src/useradd.c:1466 src/userdel.c:372 src/usermod.c:1301
 #, c-format
 msgid "%s: unable to open password file\n"
 msgstr "%s : impossible d'ouvrir le fichier de mots de passe\n"
 
-#: src/useradd.c:1442 src/userdel.c:374 src/usermod.c:1281
+#: src/useradd.c:1474 src/userdel.c:379 src/usermod.c:1308
 #, c-format
 msgid "%s: cannot lock shadow password file\n"
 msgstr "%s : impossible de vérouiller le fichier de mots de passe\n"
 
-#: src/useradd.c:1448 src/userdel.c:379 src/usermod.c:1286
+#: src/useradd.c:1481 src/userdel.c:385 src/usermod.c:1314
 #, c-format
 msgid "%s: cannot open shadow password file\n"
 msgstr "%s : impossible d'ouvrir le fichier shadow\n"
 
-#: src/useradd.c:1547 src/usermod.c:1373
+#: src/useradd.c:1580 src/usermod.c:1405
 #, c-format
 msgid "%s: error adding authentication method\n"
 msgstr "%s : erreur lors de l'ajout de la méthode d'authentification\n"
 
-#: src/useradd.c:1570
+#: src/useradd.c:1604
 #, c-format
 msgid "%s: error adding new password entry\n"
 msgstr "%s : erreur lors de l'ajout de la nouvelle entrée\n"
 
-#: src/useradd.c:1585
+#: src/useradd.c:1618
 #, c-format
 msgid "%s: error updating password dbm entry\n"
 msgstr "%s : erreur lors de la mise à jour de l'entrée dbm\n"
 
-#: src/useradd.c:1601 src/usermod.c:1432
+#: src/useradd.c:1634 src/usermod.c:1471
 #, c-format
 msgid "%s: error adding new shadow password entry\n"
 msgstr "%s : erreur lors de l'ajout de la nouvelle entrée shadow\n"
 
-#: src/useradd.c:1617 src/usermod.c:1447
+#: src/useradd.c:1650 src/usermod.c:1488
 #, c-format
 msgid "%s: error updating shadow passwd dbm entry\n"
 msgstr "%s : erreur lors de la mise à jour de l'entrée shadow passwd dbm\n"
 
-#: src/useradd.c:1649
+#: src/useradd.c:1682
 #, c-format
 msgid "%s: cannot create directory %s\n"
 msgstr "%s : impossible de créer le répertoire %s\n"
 
-#: src/useradd.c:1772 src/usermod.c:1210
+#: src/useradd.c:1806 src/usermod.c:1233
 #, c-format
 msgid "%s: user %s exists\n"
 msgstr "%s : l'utilisateur %s existe\n"
 
-#: src/useradd.c:1784
+#: src/useradd.c:1821
 #, c-format
 msgid ""
 "%s: group %s exists - if you want to add this user to that group, use -g.\n"
 msgstr ""
 
-#: src/useradd.c:1815
+#: src/useradd.c:1854
 #, c-format
 msgid "%s: warning: CREATE_HOME not supported, please use -m instead.\n"
 msgstr ""
 "%s : avertissement : CREATE_HOME non supporté, utilisez -m à la place.\n"
 
-#: src/userdel.c:133
+#: src/userdel.c:129
 #, c-format
 msgid "usage: %s [-r] name\n"
 msgstr "Usage : %s [-r] nom\n"
 
-#: src/userdel.c:184 src/userdel.c:266
+#: src/userdel.c:181 src/userdel.c:267
 #, c-format
 msgid "%s: error updating group entry\n"
 msgstr "%s : erreur lors de la mise à jour de l'entrée group\n"
 
-#: src/userdel.c:194 src/userdel.c:275
+#: src/userdel.c:191 src/userdel.c:276
 #, c-format
 msgid "%s: cannot update dbm group entry\n"
 msgstr "%s : impossible de mettre à jour l'entrée dbm group\n"
 
-#: src/userdel.c:221
+#: src/userdel.c:219
 #, fuzzy, c-format
 msgid "%s: cannot remove dbm group entry\n"
 msgstr "%s : impossible de mettre à jour l'entrée dbm group\n"
 
-#: src/userdel.c:306
+#: src/userdel.c:308
 #, c-format
 msgid "%s: cannot rewrite TCFS key file\n"
 msgstr "%s : impossible de reécrire le fichier de clés TCFS\n"
 
-#: src/userdel.c:386
+#: src/userdel.c:392
 #, c-format
 msgid "%s: cannot lock TCFS key file\n"
 msgstr "%s : impossible de vérouiller le fichier de clés TCFS\n"
 
-#: src/userdel.c:390
+#: src/userdel.c:397
 #, c-format
 msgid "%s: cannot open TCFS key file\n"
 msgstr "%s : impossible d'ouvrir le fichier de clés TCFS\n"
 
-#: src/userdel.c:399
+#: src/userdel.c:408
 #, c-format
 msgid "%s: cannot open group file\n"
 msgstr "%s : impossible d'ouvrir le fichier group\n"
 
-#: src/userdel.c:409
+#: src/userdel.c:419
 #, c-format
 msgid "%s: cannot open shadow group file\n"
 msgstr "%s : impossible d'ouvrir le fichier shadow group\n"
 
-#: src/userdel.c:440 src/userdel.c:455
+#: src/userdel.c:451 src/userdel.c:468
 #, c-format
 msgid "%s: error deleting authentication\n"
 msgstr "%s : erreur lors de l'effacement de l'authentification\n"
 
-#: src/userdel.c:464
+#: src/userdel.c:479
 #, c-format
 msgid "%s: error deleting password entry\n"
 msgstr "%s : erreur lors de la suppression de l'entrée dans /etc/passwd\n"
 
-#: src/userdel.c:467
+#: src/userdel.c:485
 #, c-format
 msgid "%s: error deleting shadow password entry\n"
 msgstr "%s : erreur lors de la suppression de l'entrée dans /etc/shadow\n"
 
-#: src/userdel.c:476
+#: src/userdel.c:496
 #, c-format
 msgid "%s: error deleting TCFS entry\n"
 msgstr "%s : erreur lors de l'effacement de l'entrée TCFS\n"
 
-#: src/userdel.c:489
+#: src/userdel.c:510
 #, c-format
 msgid "%s: error deleting password dbm entry\n"
 msgstr "%s : erreur lors de l'effacement de l'entrée dbm du mot de passe\n"
 
-#: src/userdel.c:508
+#: src/userdel.c:533
 #, c-format
 msgid "%s: error deleting shadow passwd dbm entry\n"
 msgstr "%s : erreur lors de l'effacement de l'entrée shadow passwd dbm\n"
 
-#: src/userdel.c:549
+#: src/userdel.c:569
 #, c-format
 msgid "%s: user %s is currently logged in\n"
 msgstr "%s : l'utilisateur %s est connecté\n"
 
-#: src/userdel.c:666
+#: src/userdel.c:659
 #, c-format
 msgid "%s: warning: %s not owned by %s, not removing\n"
 msgstr "%s : avertissement : %s n'appartient pas à %s, non enlevé\n"
 
-#: src/userdel.c:672
+#: src/userdel.c:666
 #, c-format
 msgid "%s: warning: can't remove "
 msgstr "%s : impossible d'enlever "
 
-#: src/userdel.c:791 src/usermod.c:1001
+#: src/userdel.c:758 src/usermod.c:1023
 #, c-format
 msgid "%s: user %s does not exist\n"
 msgstr "%s : l'utilisateur %s n'existe pas\n"
 
-#: src/userdel.c:805 src/usermod.c:1017
+#: src/userdel.c:770 src/usermod.c:1039
 #, c-format
 msgid "%s: user %s is a NIS user\n"
 msgstr "%s : le compte %s est un compte NIS\n"
 
-#: src/userdel.c:842
+#: src/userdel.c:799
 #, c-format
 msgid "%s: %s not owned by %s, not removing\n"
 msgstr "%s : %s n'appartient pas à %s, non enlevé\n"
 
-#: src/userdel.c:865
+#: src/userdel.c:818
 #, c-format
 msgid "%s: not removing directory %s (would remove home of user %s)\n"
 msgstr ""
 "%s : répertoire %s non enlevé (cela enléverait le répertoire personnel de %"
 "s)\n"
 
-#: src/userdel.c:878
+#: src/userdel.c:830
 #, c-format
 msgid "%s: error removing directory %s\n"
 msgstr "%s : erreur lors de l'effacement du répertoire %s\n"
 
-#: src/usermod.c:324
+#: src/usermod.c:326
 msgid "\t\t[-d home [-m]] [-s shell] [-c comment] [-l new_name]\n"
 msgstr "\t\t[-d home [-m]] [-s shell] [-c commentaire] [-l nouveau_nom]\n"
 
-#: src/usermod.c:330
+#: src/usermod.c:332
 msgid "[-A {DEFAULT|program},... ] "
 msgstr "[-A {DÉFAUT|programme},... ] "
 
-#: src/usermod.c:332
+#: src/usermod.c:334
 #, fuzzy
 msgid "[-p passwd] [-L|-U] name\n"
 msgstr "[-p mot-de-passe] nom\n"
 
-#: src/usermod.c:511
+#: src/usermod.c:514
 #, c-format
 msgid "%s: out of memory in update_group\n"
 msgstr "%s : plus de mémoire pour update_group\n"
 
-#: src/usermod.c:634
+#: src/usermod.c:641
 #, c-format
 msgid "%s: out of memory in update_gshadow\n"
 msgstr "%s : plus de mémoire pour update_gshadow\n"
 
-#: src/usermod.c:1187
+#: src/usermod.c:1210
 #, c-format
 msgid "%s: no flags given\n"
 msgstr "%s : aucun drapeau donné\n"
 
-#: src/usermod.c:1194
+#: src/usermod.c:1217
 #, c-format
 msgid "%s: shadow passwords required for -e and -f\n"
 msgstr "%s : mots de passe shadow nécessaires pour -e ou -f\n"
 
-#: src/usermod.c:1215
-#, c-format
-msgid "%s: uid %ld is not unique\n"
+#: src/usermod.c:1239
+#, fuzzy, c-format
+msgid "%s: uid %lu is not unique\n"
 msgstr "%s : l'uid %ld n'est pas unique\n"
 
-#: src/usermod.c:1363
+#: src/usermod.c:1392
 #, c-format
 msgid "%s: error deleting authentication method\n"
 msgstr "%s : erreur lors de l'effacement de la méthode d'authentification\n"
 
-#: src/usermod.c:1383
+#: src/usermod.c:1418
 #, c-format
 msgid "%s: error changing authentication method\n"
 msgstr "%s : erreur lors du changement de la méthode d'authentification\n"
 
-#: src/usermod.c:1400
+#: src/usermod.c:1436
 #, c-format
 msgid "%s: error changing password entry\n"
 msgstr "%s : erreur lors du changement de l'entrée dans /etc/passwd\n"
 
-#: src/usermod.c:1406
+#: src/usermod.c:1442
 #, c-format
 msgid "%s: error removing password entry\n"
 msgstr "%s : erreur lors de l'effacement du mot de passe\n"
 
-#: src/usermod.c:1414
+#: src/usermod.c:1451
 #, c-format
 msgid "%s: error adding password dbm entry\n"
 msgstr ""
 
-#: src/usermod.c:1421
+#: src/usermod.c:1459
 #, c-format
 msgid "%s: error removing passwd dbm entry\n"
 msgstr ""
 
-#: src/usermod.c:1438
+#: src/usermod.c:1478
 #, c-format
 msgid "%s: error removing shadow password entry\n"
 msgstr ""
 
-#: src/usermod.c:1453
+#: src/usermod.c:1495
 #, c-format
 msgid "%s: error removing shadow passwd dbm entry\n"
 msgstr ""
 
-#: src/usermod.c:1484
+#: src/usermod.c:1524
 #, c-format
 msgid "%s: directory %s exists\n"
 msgstr "%s : le répertoire %s existe\n"
 
-#: src/usermod.c:1491
+#: src/usermod.c:1533
 #, c-format
 msgid "%s: can't create %s\n"
 msgstr "%s : impossible de créer %s\n"
 
-#: src/usermod.c:1497
+#: src/usermod.c:1539
 #, c-format
 msgid "%s: can't chown %s\n"
 msgstr "%s : impossible de changer le propriètaire de %s\n"
 
-#: src/usermod.c:1513
+#: src/usermod.c:1556
 #, c-format
 msgid "%s: cannot rename directory %s to %s\n"
 msgstr "%s : impossible de renommer le répertoire %s en %s\n"
 
 #. better leave it alone
-#: src/usermod.c:1610
+#: src/usermod.c:1653
 #, c-format
 msgid "%s: warning: %s not owned by %s\n"
 msgstr "%s : avertissement : %s n'appartient pas à %s\n"
 
-#: src/usermod.c:1616
+#: src/usermod.c:1659
 msgid "failed to change mailbox owner"
 msgstr "échec du changement de propriètaire de la mailbox"
 
-#: src/usermod.c:1623
+#: src/usermod.c:1667
 msgid "failed to rename mailbox"
 msgstr "échec du renommage de la mailbox"
 
-#: src/vipw.c:102
+#: src/vipw.c:104
 #, c-format
 msgid ""
 "\n"
@@ -2472,20 +2441,20 @@ msgstr ""
 "\n"
 "%s : %s est inchangé\n"
 
-#: src/vipw.c:127
+#: src/vipw.c:132
 msgid "Couldn't lock file"
 msgstr "Impossible de vérouiller le fichier"
 
-#: src/vipw.c:134
+#: src/vipw.c:141
 msgid "Couldn't make backup"
 msgstr "Impossible de faire une sauvegarde"
 
-#: src/vipw.c:187
+#: src/vipw.c:206
 #, c-format
 msgid "%s: can't restore %s: %s (your changes are in %s)\n"
 msgstr "%s : impossible de restaurer %s : %s (vos changements sont dans %s)\n"
 
-#: src/vipw.c:226
+#: src/vipw.c:244
 msgid ""
 "Usage:\n"
 "`vipw' edits /etc/passwd        `vipw -s' edits /etc/shadow\n"
@@ -2495,5 +2464,24 @@ msgstr ""
 "`vipw' édite /etc/passwd        `vipw -s' édite /etc/shadow\n"
 "`vigr' édite /etc/group         `vigr -s' édite /etc/gshadow\n"
 
+#~ msgid "%s: gid %ld is not unique\n"
+#~ msgstr "%s : le gid %ld n'est pas unique\n"
+
+#, fuzzy
+#~ msgid "unknown gid: %u\n"
+#~ msgstr "gid inconnu : %d\n"
+
+#~ msgid "%s: uid %d is not unique\n"
+#~ msgstr "%s : l'uid %d n'est pas unique\n"
+
+#~ msgid "user %s: bad UID (%d)\n"
+#~ msgstr "utilisateur %s : mauvais UID (%d)\n"
+
+#~ msgid "%s: no aging information present\n"
+#~ msgstr "%s : aucune information sur l'age\n"
+
+#~ msgid "group %s: bad GID (%d)\n"
+#~ msgstr "groupe %s : mauvais GID (%d)\n"
+
 #~ msgid "%s: permission denied (shell).\n"
 #~ msgstr "%s : permission refusée (shell).\n"
diff --git a/po/ja.gmo b/po/ja.gmo
new file mode 100644 (file)
index 0000000..ccd1ff5
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..90024d2
--- /dev/null
+++ b/po/ja.po
@@ -0,0 +1,2475 @@
+# Shadow utils japanese message catalog
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# Yasuyuki Furukawa <furukawa@vinelinux.org>, 2000.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: shadow 1990827\n"
+"POT-Creation-Date: 2002-01-06 16:13+0100\n"
+"PO-Revision-Date: 2000-06-18 120:22+0900\n"
+"Last-Translator: Yasuyuki Furukawa <furukawa@vinelinux.org>\n"
+"Language-Team: Japanese\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=EUC-JP\n"
+"Content-Transfer-Encoding: 8-bit\n"
+
+#: libmisc/addgrps.c:60
+#, c-format
+msgid "Warning: unknown group %s\n"
+msgstr "·Ù¹ð: ÉÔÌÀ¤Ê¥°¥ë¡¼¥× %s¤Ç¤¹\n"
+
+#: libmisc/addgrps.c:71
+msgid "Warning: too many groups\n"
+msgstr "·Ù¹ð: ¥°¥ë¡¼¥×¤¬Â¿¤¹¤®¤Þ¤¹\n"
+
+#: libmisc/age.c:77
+msgid "Your password has expired."
+msgstr "¤¢¤Ê¤¿¤Î¥Ñ¥¹¥ï¡¼¥É¤Ï´ü¸Â¤¬ÀÚ¤ì¤Þ¤·¤¿."
+
+#: libmisc/age.c:80
+msgid "Your password is inactive."
+msgstr "¤¢¤Ê¤¿¤Î¥Ñ¥¹¥ï¡¼¥É¤Ïinactive¤Ç¤¹."
+
+#: libmisc/age.c:83
+msgid "Your login has expired."
+msgstr "¤¢¤Ê¤¿¤Î¥í¥°¥¤¥ó¤Ï´ü¸Â¤¬ÀÚ¤ì¤Þ¤·¤¿."
+
+#: libmisc/age.c:96
+msgid "  Contact the system administrator.\n"
+msgstr "  ¥·¥¹¥Æ¥à´ÉÍý¼Ô¤ÈÁêÃ̤·¤Æ¤¯¤À¤µ¤¤.\n"
+
+#: libmisc/age.c:99
+msgid "  Choose a new password.\n"
+msgstr "  ¿·¤·¤¤¥Ñ¥¹¥ï¡¼¥É¤òÁªÂò¤·¤Æ¤¯¤À¤µ¤¤.\n"
+
+#: libmisc/age.c:176
+#, c-format
+msgid "Your password will expire in %ld days.\n"
+msgstr "¤¢¤Ê¤¿¤Î¥Ñ¥¹¥ï¡¼¥É¤Ï%ldÆüÃæ¤Ë´ü¸Â¤¬ÀÚ¤ì¤Þ¤¹.\n"
+
+#: libmisc/age.c:178
+msgid "Your password will expire tomorrow.\n"
+msgstr "¤¢¤Ê¤¿¤Î¥Ñ¥¹¥ï¡¼¥É¤ÏÌÀÆü¤Ë´ü¸Â¤¬ÀÚ¤ì¤Þ¤¹.\n"
+
+#: libmisc/age.c:180
+msgid "Your password will expire today.\n"
+msgstr "¤¢¤Ê¤¿¤Î¥Ñ¥¹¥ï¡¼¥É¤ÏËÜÆü´ü¸ÂÀÚ¤ì¤Ç¤¹.\n"
+
+#: libmisc/chowntty.c:113
+#, c-format
+msgid "Unable to change tty %s"
+msgstr "TTY %s¤òÊѹ¹¤Ç¤­¤Þ¤»¤ó"
+
+#: libmisc/env.c:160
+msgid "Environment overflow\n"
+msgstr "´Ä¶­¥ª¡¼¥Ð¡¼¥Õ¥í¡¼¤Ç¤¹\n"
+
+#: libmisc/env.c:200
+#, c-format
+msgid "You may not change $%s\n"
+msgstr "$%s¤òÊѹ¹¤Ç¤­¤Þ¤»¤ó\n"
+
+#: libmisc/failure.c:238
+#, c-format
+msgid "%d %s since last login.  Last was %s on %s.\n"
+msgstr "ºÇ¸å¤Î¥í¥°¥¤¥ó¤«¤é %d %s.  ºÇ¸å¤Î¥í¥°¥¤¥ó¤Ï %s, ¥Þ¥·¥ó %s.\n"
+
+#: libmisc/failure.c:239
+msgid "failures"
+msgstr "¼ºÇÔ"
+
+#: libmisc/failure.c:239
+msgid "failure"
+msgstr "¼ºÇÔ"
+
+#: libmisc/limits.c:397
+msgid "Too many logins.\n"
+msgstr "¥í¥°¥¤¥ó¤¬Â¿¤¹¤®¤Þ¤¹.\n"
+
+#: libmisc/login_desrpc.c:63
+#, c-format
+msgid "Password does not decrypt secret key for %s.\n"
+msgstr "¥Ñ¥¹¥ï¡¼¥É¤Ï%s¤ÎÈëÌ©¸°¤ò°Å¹æÉü¸µ¤Ç¤­¤Þ¤»¤ó.\n"
+
+#: libmisc/login_desrpc.c:69
+#, c-format
+msgid "Could not set %s's secret key: is the keyserv daemon running?\n"
+msgstr "%s¤ÎÈëÌ©¸°¤òÀßÄê¤Ç¤­¤Þ¤»¤ó¤Ç¤·¤¿: keyserv¥Ç¡¼¥â¥ó¤¬µ¯Æ°¤·¤Æ¤Þ¤¹¤«?\n"
+
+#: libmisc/mail.c:62 libmisc/mail.c:77
+msgid "You have new mail."
+msgstr "¿·¤·¤¤¥á¡¼¥ë¤¬Íè¤Æ¤¤¤Þ¤¹."
+
+#: libmisc/mail.c:73
+msgid "No mail."
+msgstr "¥á¡¼¥ë¤Ï¤¢¤ê¤Þ¤»¤ó."
+
+#: libmisc/mail.c:75
+msgid "You have mail."
+msgstr "¥á¡¼¥ë¤¬¤¢¤ê¤Þ¤¹."
+
+#: libmisc/obscure.c:281 src/passwd.c:244
+#, c-format
+msgid "Bad password: %s.  "
+msgstr "ÉÔÀµ¤Ê¥Ñ¥¹¥ï¡¼¥É¤Ç¤¹: %s."
+
+#: libmisc/pam_pass.c:42
+#, c-format
+msgid "passwd: pam_start() failed, error %d\n"
+msgstr ""
+
+#: libmisc/pam_pass.c:49
+#, c-format
+msgid "passwd: %s\n"
+msgstr "¥Ñ¥¹¥ï¡¼¥É: %s\n"
+
+#: libmisc/setupenv.c:211
+#, c-format
+msgid "Unable to cd to \"%s\"\n"
+msgstr "\"%s\"¤Ø¥Ç¥£¥ì¥¯¥È¥êÊѹ¹¤Ç¤­¤Þ¤»¤ó\n"
+
+#: libmisc/setupenv.c:219
+msgid "No directory, logging in with HOME=/"
+msgstr "¥Ç¥£¥ì¥¯¥È¥ê¤¬¤¢¤ê¤Þ¤»¤ó. HOME=/ ¤È¤·¤Æ¥í¥°¥¤¥ó¤·¤Þ¤¹"
+
+#: libmisc/shell.c:78
+#, c-format
+msgid "Executing shell %s\n"
+msgstr "¥·¥§¥ë%s¤Î¼Â¹ÔÃæ\n"
+
+#.
+#. * 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 ...
+#.
+#: libmisc/shell.c:122
+#, c-format
+msgid "Cannot execute %s"
+msgstr "%s¤ò¼Â¹Ô¤Ç¤­¤Þ¤»¤ó"
+
+#: libmisc/suauth.c:99
+msgid "Access to su to that account DENIED.\n"
+msgstr "su¤Ç¤³¤Î¥¢¥«¥¦¥ó¥È¤Ø¥¢¥¯¥»¥¹¤¹¤ë¤³¤È¤òµñÈݤµ¤ì¤Þ¤·¤¿.\n"
+
+#: libmisc/suauth.c:106
+msgid "Password authentication bypassed.\n"
+msgstr "¥Ð¥¤¥Ð¥¹¤Ë¤è¤Ã¤Æ¥Ñ¥¹¥ï¡¼¥É¤òǧ¾Ú¤·¤Þ¤¹.\n"
+
+#: libmisc/suauth.c:113
+msgid "Please enter your OWN password as authentication.\n"
+msgstr "ǧ¾Ú¤È¤·¤Æ, ¤¢¤Ê¤¿½êÍ­¤Î¥Ñ¥¹¥ï¡¼¥É¤òÆþÎϤ·¤Æ¤¯¤À¤µ¤¤.\n"
+
+#: libmisc/sub.c:61
+#, c-format
+msgid "Invalid root directory \"%s\"\n"
+msgstr "ÉÔÀµ¤Ê¥ë¡¼¥È¥Ç¥£¥ì¥¯¥È¥ê  \"%s\" ¤Ç¤¹ \n"
+
+#: libmisc/sub.c:73
+#, c-format
+msgid "Can't change root directory to \"%s\"\n"
+msgstr "¥ë¡¼¥È¥Ç¥£¥ì¥¯¥È¥ê¤ò \"%s\"¤ØÊѹ¹¤Ç¤­¤Þ¤»¤ó\n"
+
+#: libmisc/xmalloc.c:28
+#, c-format
+msgid "malloc(%d) failed\n"
+msgstr "malloc(%d) ¤Ë¼ºÇÔ¤·¤Þ¤·¤¿\n"
+
+#: lib/dialchk.c:71
+msgid "Dialup Password: "
+msgstr "¥À¥¤¥¢¥ë¥¢¥Ã¥×¥Ñ¥¹¥ï¡¼¥É: "
+
+#: lib/getdef.c:276
+msgid "Could not allocate space for config info.\n"
+msgstr "ÀßÄê¾ðÊóÍѤζõ¤­ÍÆÎ̤¬³ÎÊݤǤ­¤Þ¤»¤ó¤Ç¤·¤¿.\n"
+
+#.
+#. * Item was never found.
+#.
+#: lib/getdef.c:330
+#, c-format
+msgid "configuration error - unknown item '%s' (notify administrator)\n"
+msgstr "ÀßÄꥨ¥é¡¼ - ÉÔÌÀ¤Ê¥¢¥¤¥Æ¥à '%s'¤Ç¤¹  (notify administrator)\n"
+
+#: lib/getdef.c:417
+#, c-format
+msgid "error - lookup '%s' failed\n"
+msgstr ""
+
+#: lib/getdef.c:425
+#, c-format
+msgid "%s not found\n"
+msgstr "%s¤Ï¸«ÉÕ¤«¤ê¤Þ¤»¤ó\n"
+
+#.
+#. * get the password from her, and set the salt for
+#. * the decryption from the group file.
+#.
+#: lib/pwauth.c:54 src/newgrp.c:348
+msgid "Password: "
+msgstr "¥Ñ¥¹¥ï¡¼¥É: "
+
+#: lib/pwauth.c:56
+#, c-format
+msgid "%s's Password: "
+msgstr "%s¤Î¥Ñ¥¹¥ï¡¼¥É: "
+
+#: lib/pwauth.c:270
+msgid "(Echo on) "
+msgstr ""
+
+#: lib/strerror.c:20
+#, c-format
+msgid "Unknown error %d"
+msgstr "ÉÔÌÀ¤Ê¥¨¥é¡¼ %d"
+
+#: src/chage.c:116
+#, c-format
+msgid ""
+"Usage: %s [-l] [-m min_days] [-M max_days] [-W warn]\n"
+"\t[-I inactive] [-E expire] [-d last_day] user\n"
+msgstr ""
+"»ÈÍÑË¡: %s [-l] [-m ºÇ¾®Æü¿ô] [-M ºÇÂçÆü¿ô] [-W ·Ù¹ð]\n"
+"\t[-I Ìµ¸ú] [-E ´ü¸ÂÀÚ¤ì] [-d ºÇ¸åÆü] ¥æ¡¼¥¶\n"
+
+#: src/chage.c:122
+#, c-format
+msgid "Usage: %s [-l] [-m min_days] [-M max_days] [-d last_day] user\n"
+msgstr "»ÈÍÑË¡: %s [-l] [-m ºÇ¾®Æü¿ô] [-M ºÇÂçÆü¿ô] [-d ºÇ¸åÆü] ¥æ¡¼¥¶\n"
+
+#: src/chage.c:157
+#, fuzzy
+msgid ""
+"Enter the new value, or press ENTER for the default\n"
+"\n"
+msgstr ""
+"¿·¤·¤¤ÃͤòÆþÎϤ·¤Æ¤¯¤À¤µ¤¤, É¸½àÀßÄêÃͤòÍøÍѤ¹¤ë¤Ë¤Ï¥ê¥¿¡¼¥ó¤ò²¡¤·¤Æ¤¯¤À¤µ"
+"¤¤.\n"
+"\n"
+
+#: src/chage.c:160
+msgid "Minimum Password Age"
+msgstr "ºÇ¾®¥Ñ¥¹¥ï¡¼¥ÉÊѹ¹ÉÔ²ÄǽÆü¿ô"
+
+#: src/chage.c:166
+msgid "Maximum Password Age"
+msgstr "ºÇÂç¥Ñ¥¹¥ï¡¼¥ÉÊѹ¹²ÄǽÆü¿ô"
+
+#: src/chage.c:174
+msgid "Last Password Change (YYYY-MM-DD)"
+msgstr "ºÇ¸å¥Ñ¥¹¥ï¡¼¥ÉÊѹ¹ÆüÉÕ (YYYY-MM-DD)"
+
+#: src/chage.c:183
+msgid "Password Expiration Warning"
+msgstr "¥Ñ¥¹¥ï¡¼¥É´ü¸ÂÀÚ¤ì·Ù¹ðÆü¿ô"
+
+#: src/chage.c:189
+msgid "Password Inactive"
+msgstr "¥Ñ¥¹¥ï¡¼¥É̵¸úÆü¿ô"
+
+#: src/chage.c:197
+msgid "Account Expiration Date (YYYY-MM-DD)"
+msgstr "¥¢¥«¥¦¥ó¥È´ü¸ÂÀÚ¤ìÆüÉÕ (YYYY-MM-DD)"
+
+#.
+#. * 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.
+#.
+#: src/chage.c:248
+#, c-format
+msgid "Minimum:\t%ld\n"
+msgstr "ºÇ¾®:\t%ld\n"
+
+#: src/chage.c:249
+#, c-format
+msgid "Maximum:\t%ld\n"
+msgstr "ºÇÂç:\t%ld\n"
+
+#: src/chage.c:251
+#, c-format
+msgid "Warning:\t%ld\n"
+msgstr "·Ù¹ð:\t%ld\n"
+
+#: src/chage.c:252
+#, c-format
+msgid "Inactive:\t%ld\n"
+msgstr "̵¸ú:\t%ld\n"
+
+#.
+#. * 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.
+#.
+#: src/chage.c:260
+msgid "Last Change:\t\t"
+msgstr "ºÇ¶á¤ÎÊѹ¹:\t\t"
+
+#: src/chage.c:262 src/chage.c:276 src/chage.c:293 src/chage.c:306
+msgid "Never\n"
+msgstr "¤Ê¤·:\n"
+
+#.
+#. * The password expiration date is determined from the last change
+#. * date plus the number of days the password is valid for.
+#.
+#: src/chage.c:273
+msgid "Password Expires:\t"
+msgstr "¥Ñ¥¹¥ï¡¼¥É´ü¸Â:\t"
+
+#.
+#. * 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.
+#.
+#: src/chage.c:290
+msgid "Password Inactive:\t"
+msgstr "¥Ñ¥¹¥ï¡¼¥É̵¸ú:\t"
+
+#.
+#. * The account will expire on the given date regardless of the
+#. * password expiring or not.
+#.
+#: src/chage.c:304
+msgid "Account Expires:\t"
+msgstr "¥¢¥«¥¦¥ó¥È´ü¸ÂÀÚ¤ì:\t"
+
+#: src/chage.c:468
+#, c-format
+msgid "%s: do not include \"l\" with other flags\n"
+msgstr "%s: Â¾¤Î¥Õ¥é¥°¤Î¤¿¤á \"l\" ¥ª¥×¥·¥ç¥ó¤Ï´Þ¤Þ¤»¤ë¤³¤È¤¬¤Ç¤­¤Þ¤»¤ó\n"
+
+#: src/chage.c:481 src/chage.c:652 src/login.c:516
+#, c-format
+msgid "%s: permission denied\n"
+msgstr "%s: ¸¢¸Â¤¬¤¢¤ê¤Þ¤»¤ó\n"
+
+#: src/chage.c:512 src/chpasswd.c:139 src/groupadd.c:529 src/groupdel.c:322
+#: src/groupmod.c:520 src/newusers.c:381 src/useradd.c:1754 src/userdel.c:717
+#: src/usermod.c:1732
+#, fuzzy, c-format
+msgid "%s: PAM authentication failed\n"
+msgstr "¥Ð¥¤¥Ð¥¹¤Ë¤è¤Ã¤Æ¥Ñ¥¹¥ï¡¼¥É¤òǧ¾Ú¤·¤Þ¤¹.\n"
+
+#: src/chage.c:533 src/chpasswd.c:157
+#, c-format
+msgid "%s: can't lock password file\n"
+msgstr "%s: ¥Ñ¥¹¥ï¡¼¥É¥Õ¥¡¥¤¥ë¤ò¥í¥Ã¥¯¤Ç¤­¤Þ¤»¤ó\n"
+
+#: src/chage.c:544 src/chpasswd.c:162
+#, c-format
+msgid "%s: can't open password file\n"
+msgstr "%s: ¥Ñ¥¹¥ï¡¼¥É¥Õ¥¡¥¤¥ë¤¬³«¤±¤Þ¤»¤ó\n"
+
+#: src/chage.c:552
+#, c-format
+msgid "%s: unknown user: %s\n"
+msgstr "%s: ÉÔÌÀ¤Ê¥æ¡¼¥¶¤Ç¤¹: %s\n"
+
+#: src/chage.c:571
+#, fuzzy, c-format
+msgid "%s: can't lock shadow password file"
+msgstr "¥·¥ã¥É¥¦¡¦¥Ñ¥¹¥ï¡¼¥É¡¦¥Õ¥¡¥¤¥ë¤ò¥í¥Ã¥¯¤Ç¤­¤Þ¤»¤ó\n"
+
+#: src/chage.c:579
+#, fuzzy, c-format
+msgid "%s: can't open shadow password file"
+msgstr "%s: ¥·¥ã¥É¥¦¡¦¥Ñ¥¹¥ï¡¼¥É¡¦¥Õ¥¡¥¤¥ë¤ò³«¤±¤Þ¤»¤ó\n"
+
+#: src/chage.c:674
+#, c-format
+msgid "Changing the aging information for %s\n"
+msgstr "%s¤Î´ü¸Â¾ðÊó¤òÊѹ¹Ãæ\n"
+
+#: src/chage.c:677
+#, c-format
+msgid "%s: error changing fields\n"
+msgstr "%s: ¹àÌÜÊѹ¹¤Ç¥¨¥é¡¼¤¬µ¯¤³¤ê¤Þ¤·¤¿\n"
+
+#: src/chage.c:705 src/chage.c:771 src/pwunconv.c:174
+#, c-format
+msgid "%s: can't update password file\n"
+msgstr "%s: ¥Ñ¥¹¥ï¡¼¥É¡¦¥Õ¥¡¥¤¥ë¤ò¹¹¿·¤·¤Þ¤»¤ó\n"
+
+#: src/chage.c:737 src/pwunconv.c:168
+#, c-format
+msgid "%s: can't update shadow password file\n"
+msgstr "%s: ¥·¥ã¥É¥¦¡¦¥Ñ¥¹¥ï¡¼¥É¡¦¥Õ¥¡¥¤¥ë¤ò¹¹¿·¤·¤Þ¤»¤ó\n"
+
+#: src/chage.c:789 src/chage.c:805 src/chfn.c:570 src/chsh.c:382
+#: src/passwd.c:747 src/passwd.c:859
+msgid "Error updating the DBM password entry.\n"
+msgstr ""
+
+#: src/chage.c:823
+#, c-format
+msgid "%s: can't rewrite shadow password file\n"
+msgstr ""
+
+#: src/chage.c:838
+#, c-format
+msgid "%s: can't rewrite password file\n"
+msgstr "%s: ¥Ñ¥¹¥ï¡¼¥É¡¦¥Õ¥¡¥¤¥ë¤ò¾å½ñ¤­¤Ç¤­¤Þ¤»¤ó\n"
+
+#: src/chage.c:857 src/chpasswd.c:343 src/groupadd.c:590 src/groupdel.c:409
+#: src/groupmod.c:604 src/newusers.c:628 src/useradd.c:1869 src/userdel.c:849
+#: src/usermod.c:1811
+#, fuzzy, c-format
+msgid "%s: PAM chauthtok failed\n"
+msgstr "%s: ¥Õ¥¡¥¤¥ë¤ò¥í¥Ã¥¯¤Ç¤­¤Þ¤»¤ó\n"
+
+#: src/chfn.c:83
+#, 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 ¥ë¡¼¥àNo] [-w ¿¦¾ìTEL]\n"
+"\t[-h ¼«ÂðTEL] [-o ¤½¤Î¾] [¥æ¡¼¥¶]\n"
+
+#: src/chfn.c:88
+#, c-format
+msgid "Usage: %s [-f full_name] [-r room_no] [-w work_ph] [-h home_ph]\n"
+msgstr "»ÈÍÑË¡: %s [-f ¥Õ¥ë¥Í¡¼¥à] [-r ¥ë¡¼¥àNo] [-w ¿¦¾ìTEL] [-h ¼«ÂðTEL]\n"
+
+#: src/chfn.c:139
+msgid "Enter the new value, or press ENTER for the default\n"
+msgstr ""
+"¿·¤·¤¤ÃͤòÆþÎϤ·¤Æ¤¯¤À¤µ¤¤, É¸½àÀßÄêÃͤòÍøÍѤ¹¤ë¤Ë¤Ï ¥ê¥¿¡¼¥ó¤ò²¡¤·¤Æ¤¯¤À¤µ"
+"¤¤.\n"
+
+#: src/chfn.c:142
+msgid "Full Name"
+msgstr "¥Õ¥ë¥Í¡¼¥à"
+
+#: src/chfn.c:144
+#, c-format
+msgid "\tFull Name: %s\n"
+msgstr "\t¥Õ¥ë¥Í¡¼¥à: %s\n"
+
+#: src/chfn.c:147
+msgid "Room Number"
+msgstr "Éô²°ÈÖ¹æ"
+
+#: src/chfn.c:149
+#, c-format
+msgid "\tRoom Number: %s\n"
+msgstr "\tÉô²°ÈÖ¹æ: %s\n"
+
+#: src/chfn.c:152
+msgid "Work Phone"
+msgstr "¿¦¾ìÅÅÏÃÈÖ¹æ"
+
+#: src/chfn.c:154
+#, c-format
+msgid "\tWork Phone: %s\n"
+msgstr "\t¿¦¾ìÅÅÏÃÈÖ¹æ: %s\n"
+
+#: src/chfn.c:157
+msgid "Home Phone"
+msgstr "¼«ÂðÅÅÏÃÈÖ¹æ"
+
+#: src/chfn.c:159
+#, c-format
+msgid "\tHome Phone: %s\n"
+msgstr "\t¼«ÂðÅÅÏÃÈÖ¹æ: %s\n"
+
+#: src/chfn.c:162
+msgid "Other"
+msgstr "¤½¤Î¾"
+
+#: src/chfn.c:271 src/chfn.c:281 src/chfn.c:291 src/chfn.c:301 src/chfn.c:311
+#: src/chfn.c:379 src/passwd.c:1115
+#, c-format
+msgid "%s: Permission denied.\n"
+msgstr "%s: ¸¢¸Â¤¬¤¢¤ê¤Þ¤»¤ó.\n"
+
+#: src/chfn.c:332 src/chsh.c:190 src/passwd.c:1165
+#, c-format
+msgid "%s: Unknown user %s\n"
+msgstr "%s: ÉÔÌÀ¤Ê¥æ¡¼¥¶ %s\n"
+
+#: src/chfn.c:341 src/chsh.c:198 src/passwd.c:1096
+#, c-format
+msgid "%s: Cannot determine your user name.\n"
+msgstr "%s: ¤¢¤Ê¤¿¤Î¥æ¡¼¥¶Ì¾¤òȽÄê¤Ç¤­¤Þ¤»¤ó.\n"
+
+#: src/chfn.c:358 src/chsh.c:215
+#, c-format
+msgid "%s: cannot change user `%s' on NIS client.\n"
+msgstr "%s: NIS¥¯¥é¥¤¥¢¥ó¥È¾å¤Ç¥æ¡¼¥¶`%s'¤ÏÊѹ¹¤Ç¤­¤Þ¤»¤ó.\n"
+
+#: src/chfn.c:366 src/chsh.c:223
+#, c-format
+msgid "%s: `%s' is the NIS master for this client.\n"
+msgstr "%s: `%s'¤¬¤³¤Î¥¯¥é¥¤¥¢¥ó¥ÈÍѤÎNIS¥Þ¥¹¥¿¡¼¤Ç¤¹.\n"
+
+#: src/chfn.c:441
+#, c-format
+msgid "Changing the user information for %s\n"
+msgstr "%s¤Î¥æ¡¼¥¶¾ðÊóÊѹ¹Ãæ\n"
+
+#: src/chfn.c:450
+#, c-format
+msgid "%s: invalid name: \"%s\"\n"
+msgstr "%s: ¥æ¡¼¥¶Ì¾¤¬ÉÔÀµ¤Ç¤¹: \"%s\"\n"
+
+#: src/chfn.c:456
+#, c-format
+msgid "%s: invalid room number: \"%s\"\n"
+msgstr "%s: Éô²°Èֹ椬ÉÔÀµ¤Ç¤¹: \"%s\"\n"
+
+#: src/chfn.c:462
+#, c-format
+msgid "%s: invalid work phone: \"%s\"\n"
+msgstr "%s: ¿¦¾ìÅÅÏÃÈֹ椬ÉÔÀµ¤Ç¤¹: \"%s\"\n"
+
+#: src/chfn.c:468
+#, c-format
+msgid "%s: invalid home phone: \"%s\"\n"
+msgstr "%s: ¼«ÂðÅÅÏÃÈֹ椬ÉÔÀµ¤Ç¤¹: \"%s\"\n"
+
+#: src/chfn.c:475
+#, c-format
+msgid "%s: \"%s\" contains illegal characters\n"
+msgstr "%s: \"%s\" ¤ÏÉÔÀµ¤Êʸ»ú¤ò´Þ¤ó¤Ç¤¤¤Þ¤¹\n"
+
+#: src/chfn.c:488
+#, c-format
+msgid "%s: fields too long\n"
+msgstr "%s: ÆþÎÏÆâÍÆ¤¬Ä¹²á¤®¤Þ¤¹\n"
+
+#: src/chfn.c:504 src/chsh.c:316 src/gpasswd.c:570 src/passwd.c:1277
+msgid "Cannot change ID to root.\n"
+msgstr "ID¤òroot¤ØÊѹ¹¤Ç¤­¤Þ¤»¤ó.\n"
+
+#: src/chfn.c:519 src/chsh.c:331 src/passwd.c:656 src/passwd.c:811
+msgid "Cannot lock the password file; try again later.\n"
+msgstr "¥Ñ¥¹¥ï¡¼¥É¡¦¥Õ¥¡¥¤¥ë¤ò¥í¥Ã¥¯¤Ç¤­¤Þ¤»¤ó; ¸å¤Ç¤â¤¦°ìÅٻ¤Æ¤¯¤À¤µ¤¤.\n"
+
+#: src/chfn.c:525 src/chsh.c:337 src/passwd.c:661 src/passwd.c:816
+msgid "Cannot open the password file.\n"
+msgstr "¥Ñ¥¹¥ï¡¼¥É¡¦¥Õ¥¡¥¤¥ë¤ò³«¤±¤Þ¤»¤ó.\n"
+
+#: src/chfn.c:542 src/chsh.c:352 src/passwd.c:667 src/usermod.c:1348
+#, c-format
+msgid "%s: %s not found in /etc/passwd\n"
+msgstr "%s: %s¤Ï /etc/passwdÃæ¤Ë¸«ÉÕ¤«¤ê¤Þ¤»¤ó\n"
+
+#: src/chfn.c:561 src/chsh.c:373 src/passwd.c:740 src/passwd.c:852
+msgid "Error updating the password entry.\n"
+msgstr "¥Ñ¥¹¥ï¡¼¥ÉÆþÎϤι¹¿·¤Î¥¨¥é¡¼¤Ç¤¹.\n"
+
+#: src/chfn.c:585 src/chsh.c:397 src/passwd.c:755 src/passwd.c:867
+msgid "Cannot commit password file changes.\n"
+msgstr "¥Ñ¥¹¥ï¡¼¥É¡¦¥Õ¥¡¥¤¥ë¤ÎÊѹ¹¤ò³ÎÄê(commit)¤Ç¤­¤Þ¤»¤ó.\n"
+
+#: src/chfn.c:592 src/chsh.c:404
+msgid "Cannot unlock the password file.\n"
+msgstr "¥Ñ¥¹¥ï¡¼¥É¡¦¥Õ¥¡¥¤¥ë¤ò¥í¥Ã¥¯²ò½ü¤Ç¤­¤Þ¤»¤ó.\n"
+
+#: src/chpasswd.c:66
+#, c-format
+msgid "usage: %s [-e]\n"
+msgstr "»ÈÍÑË¡: %s [-e]\n"
+
+#: src/chpasswd.c:171 src/pwconv.c:94
+#, c-format
+msgid "%s: can't lock shadow file\n"
+msgstr "%s: ¥·¥ã¥É¥¦¡¦¥Õ¥¡¥¤¥ë¤ò¥í¥Ã¥¯¤Ç¤­¤Þ¤»¤ó\n"
+
+#: src/chpasswd.c:177 src/gpasswd.c:596 src/pwconv.c:99 src/pwunconv.c:103
+#: src/pwunconv.c:108
+#, c-format
+msgid "%s: can't open shadow file\n"
+msgstr "%s: ¥·¥ã¥É¥¦¡¦¥Õ¥¡¥¤¥ë¤ò³«¤±¤Þ¤»¤ó\n"
+
+#: src/chpasswd.c:200 src/newusers.c:460
+#, c-format
+msgid "%s: line %d: line too long\n"
+msgstr "%s: %d ¹Ô: 1¹Ô¤¬Ä¹²á¤®¤Þ¤¹\n"
+
+#: src/chpasswd.c:220
+#, c-format
+msgid "%s: line %d: missing new password\n"
+msgstr "%s: %d ¹Ô: ¿·µ¬¥Ñ¥¹¥ï¡¼¥É¤¬¤¢¤ê¤Þ¤»¤ó\n"
+
+#: src/chpasswd.c:237
+#, c-format
+msgid "%s: line %d: unknown user %s\n"
+msgstr "%s: %d ¹Ô: ÉÔÌÀ¤Ê¥æ¡¼¥¶ %s ¤Ç¤¹\n"
+
+#: src/chpasswd.c:290
+#, c-format
+msgid "%s: line %d: cannot update password entry\n"
+msgstr "%s: %d ¹Ô: ¥Ñ¥¹¥ï¡¼¥ÉÆþÎϤò¹¹¿·¤Ç¤­¤Þ¤»¤ó\n"
+
+#: src/chpasswd.c:307 src/newusers.c:588
+#, c-format
+msgid "%s: error detected, changes ignored\n"
+msgstr "%s: ¥¨¥é¡¼¤¬¸¡½Ð¤µ¤ì¤Þ¤·¤¿, Êѹ¹¤Ï̵¸ú¤Ë¤Ê¤ê¤Þ¤·¤¿\n"
+
+#: src/chpasswd.c:319
+#, c-format
+msgid "%s: error updating shadow file\n"
+msgstr "%s: ¥·¥ã¥É¥¦¡¦¥Õ¥¡¥¤¥ë¤Î¹¹¿·¤Ë¥¨¥é¡¼¤Ç¤¹\n"
+
+#: src/chpasswd.c:328
+#, c-format
+msgid "%s: error updating password file\n"
+msgstr "%s: ¥Ñ¥¹¥ï¡¼¥É¡¦¥Õ¥¡¥¤¥ë¤Î¹¹¿·¤Î¥¨¥é¡¼¤Ç¤¹\n"
+
+#: src/chsh.c:75
+#, c-format
+msgid "Usage: %s [-s shell] [name]\n"
+msgstr "»ÈÍÑË¡: %s [-s ¥·¥§¥ë] [¥æ¡¼¥¶Ì¾]\n"
+
+#: src/chsh.c:89
+#, fuzzy
+msgid "Enter the new value, or press return for the default\n"
+msgstr ""
+"¿·¤·¤¤ÃͤòÆþÎϤ·¤Æ¤¯¤À¤µ¤¤, É¸½àÀßÄêÃͤòÍøÍѤ¹¤ë¤Ë¤Ï ¥ê¥¿¡¼¥ó¤ò²¡¤·¤Æ¤¯¤À¤µ"
+"¤¤.\n"
+
+#: src/chsh.c:90
+msgid "Login Shell"
+msgstr "¥í¥°¥¤¥ó¡¦¥·¥§¥ë"
+
+#: src/chsh.c:239 src/chsh.c:253
+#, c-format
+msgid "You may not change the shell for %s.\n"
+msgstr "¤¢¤Ê¤¿¤¬ %s¤Î¥·¥§¥ë¤òÊѹ¹¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó.\n"
+
+#: src/chsh.c:282
+#, c-format
+msgid "Changing the login shell for %s\n"
+msgstr "%s¤Î¥í¥°¥¤¥ó¥·¥§¥ë¤òÊѹ¹Ãæ\n"
+
+#: src/chsh.c:294
+#, c-format
+msgid "%s: Invalid entry: %s\n"
+msgstr "%s: ÉÔÀµ¤ÊÆþÎÏ: %s\n"
+
+#: src/chsh.c:301
+#, c-format
+msgid "%s is an invalid shell.\n"
+msgstr "%s¤ÏÉÔÀµ¤Ê¥·¥§¥ë¤Ç¤¹.\n"
+
+#: src/dpasswd.c:52
+#, c-format
+msgid "Usage: %s [-(a|d)] shell\n"
+msgstr "»ÈÍÑË¡: %s [-(a|d)] ¥·¥§¥ë\n"
+
+#: src/dpasswd.c:115
+msgid "Shell password: "
+msgstr "¥·¥§¥ë¥Ñ¥¹¥ï¡¼¥É: "
+
+#: src/dpasswd.c:121
+msgid "re-enter Shell password: "
+msgstr "¥·¥§¥ë¥Ñ¥¹¥ï¡¼¥É¤ÎºÆÆþÎÏ: "
+
+#: src/dpasswd.c:129
+#, c-format
+msgid "%s: Passwords do not match, try again.\n"
+msgstr "%s: ¥Ñ¥¹¥ï¡¼¥É¤¬°ìÃפ·¤Þ¤»¤ó, ¤â¤¦°ìÅÙ¤ª´ê¤¤¤·¤Þ¤¹.\n"
+
+#: src/dpasswd.c:149
+#, c-format
+msgid "%s: can't create %s"
+msgstr "%s: %s¤òºîÀ®¤Ç¤­¤Þ¤»¤ó"
+
+#: src/dpasswd.c:155
+#, c-format
+msgid "%s: can't open %s"
+msgstr "%s: %s¤ò³«¤±¤Þ¤»¤ó"
+
+#: src/dpasswd.c:183
+#, c-format
+msgid "%s: Shell %s not found.\n"
+msgstr "%s: ¥·¥§¥ë %s¤¬¸«ÉÕ¤«¤ê¤Þ¤»¤ó.\n"
+
+#: src/expiry.c:59
+#, fuzzy
+msgid "Usage: expiry {-f|-c}\n"
+msgstr "»ÈÍÑË¡: expiry { -f | -c }\n"
+
+#: src/expiry.c:113
+#, c-format
+msgid "%s: WARNING!  Must be set-UID root!\n"
+msgstr "%s: ·Ù¹ð!  set-UID root¤µ¤ì¤Æ¤Ê¤¯¤Æ¤Ï¤Ê¤ê¤Þ¤»¤ó!\n"
+
+#: src/expiry.c:124
+#, c-format
+msgid "%s: unknown user\n"
+msgstr "%s: ÉÔÌÀ¤Ê¥æ¡¼¥¶¤Ç¤¹\n"
+
+#: src/faillog.c:77
+#, c-format
+msgid "usage: %s [-a|-u user] [-m max] [-r] [-t days] [-l locksecs]\n"
+msgstr "»ÈÍÑË¡: %s [-a|-u ¥æ¡¼¥¶] [-m ºÇÂç] [-r] [-t Æü¿ô] [-l ¥í¥Ã¥¯ÉÃ]\n"
+
+#: src/faillog.c:131 src/lastlog.c:96
+#, c-format
+msgid "Unknown User: %s\n"
+msgstr "ÉÔÌÀ¤Ê¥æ¡¼¥¶¤Ç¤¹: %s\n"
+
+#: src/faillog.c:212
+msgid "Username   Failures  Maximum  Latest\n"
+msgstr "¥æ¡¼¥¶Ì¾   ¼ºÇÔ      ºÇÂç     ºÇ¶á\n"
+
+#: src/faillog.c:229
+#, c-format
+msgid "  %s on %s"
+msgstr ""
+
+#: src/faillog.c:233
+#, c-format
+msgid " [%lds left]"
+msgstr ""
+
+#: src/faillog.c:237
+#, c-format
+msgid " [%lds lock]"
+msgstr ""
+
+#: src/gpasswd.c:78
+#, c-format
+msgid "usage: %s [-r|-R] group\n"
+msgstr "»ÈÍÑË¡: %s [-r|-R] ¥°¥ë¡¼¥×\n"
+
+#: src/gpasswd.c:79
+#, c-format
+msgid "       %s [-a user] group\n"
+msgstr ""
+
+#: src/gpasswd.c:80
+#, c-format
+msgid "       %s [-d user] group\n"
+msgstr "       %s [-d ¥æ¡¼¥¶] ¥°¥ë¡¼¥×\n"
+
+#: src/gpasswd.c:83
+#, c-format
+msgid "       %s [-A user,...] [-M user,...] group\n"
+msgstr "       %s [-A ¥æ¡¼¥¶,...] [-M ¥æ¡¼¥¶,...] ¥°¥ë¡¼¥×\n"
+
+#: src/gpasswd.c:85
+#, c-format
+msgid "       %s [-M user,...] group\n"
+msgstr "       %s [-M ¥æ¡¼¥¶,...] ¥°¥ë¡¼¥×\n"
+
+#: src/gpasswd.c:146 src/gpasswd.c:230
+#, c-format
+msgid "%s: unknown user %s\n"
+msgstr "%s: ÉÔÌÀ¤Ê¥æ¡¼¥¶ %s ¤Ç¤¹\n"
+
+#: src/gpasswd.c:157
+msgid "Permission denied.\n"
+msgstr "¥¢¥¯¥»¥¹¸¢¤¬µñÈݤµ¤ì¤Þ¤·¤¿.\n"
+
+#: src/gpasswd.c:243
+#, c-format
+msgid "%s: shadow group passwords required for -A\n"
+msgstr "%s: ¥·¥ã¥É¥¦¡¦¥°¥ë¡¼¥×¡¦¥Ñ¥¹¥ï¡¼¥É¤¬ -A¤ËÂФ·¤ÆÉ¬ÍפǤ¹\n"
+
+#: src/gpasswd.c:294
+msgid "Who are you?\n"
+msgstr "¤¢¤Ê¤¿¤Ïï?\n"
+
+#: src/gpasswd.c:313 src/newgrp.c:297
+#, c-format
+msgid "unknown group: %s\n"
+msgstr "ÉÔÌÀ¤Ê¥°¥ë¡¼¥×¤Ç¤¹: %s\n"
+
+#: src/gpasswd.c:422
+#, c-format
+msgid "Adding user %s to group %s\n"
+msgstr "¥æ¡¼¥¶ %s ¤ò¥°¥ë¡¼¥× %s ¤«¤éÄɲÃ\n"
+
+#: src/gpasswd.c:440
+#, c-format
+msgid "Removing user %s from group %s\n"
+msgstr "¥æ¡¼¥¶ %s ¤ò¥°¥ë¡¼¥× %s ¤«¤éºï½ü\n"
+
+#: src/gpasswd.c:454
+#, c-format
+msgid "%s: unknown member %s\n"
+msgstr "%s: ÉÔÌÀ¤ÊÈÖ¹æ %s¤Ç¤¹\n"
+
+#: src/gpasswd.c:501
+#, c-format
+msgid "%s: Not a tty\n"
+msgstr "%s: TTY¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó\n"
+
+#.
+#. * 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.
+#.
+#: src/gpasswd.c:522
+#, c-format
+msgid "Changing the password for group %s\n"
+msgstr "%s¥°¥ë¡¼¥×¤Î¥Ñ¥¹¥ï¡¼¥É¤òÊѹ¹\n"
+
+#: src/gpasswd.c:525
+msgid "New Password: "
+msgstr "¿·µ¬¥Ñ¥¹¥ï¡¼¥É: "
+
+#: src/gpasswd.c:530 src/passwd.c:365
+msgid "Re-enter new password: "
+msgstr "¿·µ¬¥Ñ¥¹¥ï¡¼¥ÉºÆÆþÎÏ: "
+
+#: src/gpasswd.c:542
+msgid "They don't match; try again"
+msgstr "°ìÃפ·¤Þ¤»¤ó; ¤â¤¦°ìÅÙ¤ª´ê¤¤¤·¤Þ¤¹"
+
+#: src/gpasswd.c:546
+#, c-format
+msgid "%s: Try again later\n"
+msgstr "%s: ¸å¤Ç¤â¤¦°ìÅÙ¤ª´ê¤¤¤·¤Þ¤¹\n"
+
+#: src/gpasswd.c:578
+#, c-format
+msgid "%s: can't get lock\n"
+msgstr "%s: ¥í¥Ã¥¯¤Ç¤­¤Þ¤»¤ó\n"
+
+#: src/gpasswd.c:584
+#, c-format
+msgid "%s: can't get shadow lock\n"
+msgstr "%s: ¥·¥ã¥É¥¦¤ò¥í¥Ã¥¯¤Ç¤­¤Þ¤»¤ó\n"
+
+#: src/gpasswd.c:590
+#, c-format
+msgid "%s: can't open file\n"
+msgstr "%s: ¥Õ¥¡¥¤¥ë¤ò³«¤±¤Þ¤»¤ó\n"
+
+#: src/gpasswd.c:602
+#, c-format
+msgid "%s: can't update entry\n"
+msgstr "%s: ¥¨¥ó¥È¥ê¤ò¹¹¿·¤Ç¤­¤Þ¤»¤ó\n"
+
+#: src/gpasswd.c:608
+#, c-format
+msgid "%s: can't update shadow entry\n"
+msgstr "%s: ¥·¥ã¥É¥¦¡¦¥¨¥ó¥È¥ê¤ò¹¹¿·¤Ç¤­¤Þ¤»¤ó\n"
+
+#: src/gpasswd.c:615
+#, c-format
+msgid "%s: can't re-write file\n"
+msgstr "%s: ¥Õ¥¡¥¤¥ë¤ò¾å½ñ¤­¤Ç¤­¤Þ¤»¤ó\n"
+
+#: src/gpasswd.c:621
+#, c-format
+msgid "%s: can't re-write shadow file\n"
+msgstr "%s: ¥·¥ã¥É¥¦¡¦¥Õ¥¡¥¤¥ë¤ò¾å½ñ¤­¤Ç¤­¤Þ¤»¤ó\n"
+
+#: src/gpasswd.c:630
+#, c-format
+msgid "%s: can't unlock file\n"
+msgstr "%s: ¥Õ¥¡¥¤¥ë¤ò¥í¥Ã¥¯¤Ç¤­¤Þ¤»¤ó\n"
+
+#: src/gpasswd.c:635
+#, c-format
+msgid "%s: can't update DBM files\n"
+msgstr "%s: DBM ¥Õ¥¡¥¤¥ë¤ò¹¹¿·¤Ç¤­¤Þ¤»¤ó\n"
+
+#: src/gpasswd.c:642
+#, c-format
+msgid "%s: can't update DBM shadow files\n"
+msgstr "%s: DBM ¥·¥ã¥É¥¦¡¦¥Õ¥¡¥¤¥ë¤ò¹¹¿·¤Ç¤­¤Þ¤»¤ó\n"
+
+#: src/groupadd.c:101
+#, fuzzy
+msgid "usage: groupadd [-g gid [-o]] group\n"
+msgstr "»ÈÍÑË¡: groupadd [-g ¥°¥ë¡¼¥×ID [-o]]  [-r] [-f] ¥°¥ë¡¼¥×\n"
+
+#: src/groupadd.c:167 src/groupadd.c:192 src/groupmod.c:179 src/groupmod.c:228
+#: src/useradd.c:970 src/usermod.c:552 src/usermod.c:695
+#, c-format
+msgid "%s: error adding new group entry\n"
+msgstr "%s: ¿·µ¬¥°¥ë¡¼¥×¥¨¥ó¥È¥ê¤ØÄɲäΥ¨¥é¡¼¤Ç¤¹\n"
+
+#: src/groupadd.c:178 src/groupadd.c:203 src/groupmod.c:197 src/useradd.c:981
+#: src/usermod.c:564 src/usermod.c:708
+#, c-format
+msgid "%s: cannot add new dbm group entry\n"
+msgstr "%s: ¿·µ¬DBM¥°¥ë¡¼¥×¡¦¥¨¥ó¥È¥ê¤ØÄɲäǤ­¤Þ¤»¤ó\n"
+
+#: src/groupadd.c:255 src/useradd.c:1034
+#, c-format
+msgid "%s: name %s is not unique\n"
+msgstr "s: Ì¾Á° %s ¤Ï½ÅÊ£¤·¤Æ¤¤¤Þ¤¹\n"
+
+#: src/groupadd.c:270
+#, fuzzy, c-format
+msgid "%s: gid %u is not unique\n"
+msgstr "%s: ¥æ¡¼¥¶ID %ld ¤¬½ÅÊ£¤·¤Æ¤¤¤Þ¤¹\n"
+
+#: src/groupadd.c:294
+#, c-format
+msgid "%s: can't get unique gid\n"
+msgstr "%s: °ì°Õ¤Î¥°¥ë¡¼¥×ID¤ò¼èÆÀ¤Ç¤­¤Þ¤»¤ó\n"
+
+#.
+#. * All invalid group names land here.
+#.
+#: src/groupadd.c:317 src/groupmod.c:341
+#, c-format
+msgid "%s: %s is a not a valid group name\n"
+msgstr ""
+
+#: src/groupadd.c:346 src/groupmod.c:366
+#, c-format
+msgid "%s: invalid group %s\n"
+msgstr "%s: ¥°¥ë¡¼¥× %s ¤ÏÉÔŬÀڤǤ¹\n"
+
+#: src/groupadd.c:363 src/useradd.c:1313
+#, c-format
+msgid "%s: -O requires NAME=VALUE\n"
+msgstr ""
+
+#: src/groupadd.c:407 src/groupdel.c:173 src/groupmod.c:401 src/useradd.c:1428
+#: src/userdel.c:312 src/usermod.c:576
+#, fuzzy, c-format
+msgid "%s: cannot rewrite group file\n"
+msgstr "%s: ¥°¥ë¡¼¥×¡¦¥Õ¥¡¥¤¥ë¤ò³«¤±¤Þ¤»¤ó\n"
+
+#: src/groupadd.c:415 src/groupdel.c:179 src/groupmod.c:409 src/useradd.c:1437
+#: src/userdel.c:319 src/usermod.c:722
+#, fuzzy, c-format
+msgid "%s: cannot rewrite shadow group file\n"
+msgstr "%s: ¥·¥ã¥É¥¦¡¦¥°¥ë¡¼¥×¡¦¥Õ¥¡¥¤¥ë¤¬³«¤±¤Þ¤»¤ó\n"
+
+#: src/groupadd.c:433 src/groupdel.c:198 src/groupmod.c:427 src/userdel.c:403
+#, fuzzy, c-format
+msgid "%s: unable to lock group file\n"
+msgstr "%s: ¥°¥ë¡¼¥×¡¦¥Õ¥¡¥¤¥ë¤ò¥í¥Ã¥¯¤Ç¤­¤Þ¤»¤ó\n"
+
+#: src/groupadd.c:438 src/groupdel.c:202 src/groupmod.c:432
+#, fuzzy, c-format
+msgid "%s: unable to open group file\n"
+msgstr "%s: ¥°¥ë¡¼¥×¥Õ¥¡¥¤¥ë¤ò³«¤±¤Þ¤»¤ó\n"
+
+#: src/groupadd.c:445 src/groupdel.c:207 src/groupmod.c:439 src/userdel.c:414
+#, fuzzy, c-format
+msgid "%s: unable to lock shadow group file\n"
+msgstr "%s: ¥·¥ã¥É¥¦¡¦¥°¥ë¡¼¥×¡¦¥Õ¥¡¥¤¥ë¤ò¥í¥Ã¥¯¤Ç¤­¤Þ¤»¤ó\n"
+
+#: src/groupadd.c:451 src/groupdel.c:212 src/groupmod.c:445
+#, fuzzy, c-format
+msgid "%s: unable to open shadow group file\n"
+msgstr "%s: ¥·¥ã¥É¥¦¡¦¥°¥ë¡¼¥×¡¦¥Õ¥¡¥¤¥ë¤¬³«¤±¤Þ¤»¤ó\n"
+
+#: src/groupadd.c:562
+#, fuzzy, c-format
+msgid "%s: group %s exists\n"
+msgstr "%s: ¥æ¡¼¥¶ %s ¤Ï¸ºß¤·¤Þ¤¹\n"
+
+#: src/groupdel.c:92
+msgid "usage: groupdel group\n"
+msgstr "»ÈÍÑË¡: groupdel ¥°¥ë¡¼¥×\n"
+
+#: src/groupdel.c:110 src/groupmod.c:184 src/groupmod.c:233
+#, c-format
+msgid "%s: error removing group entry\n"
+msgstr ""
+
+#: src/groupdel.c:122 src/groupmod.c:204
+#, c-format
+msgid "%s: error removing group dbm entry\n"
+msgstr ""
+
+#: src/groupdel.c:137
+#, c-format
+msgid "%s: error removing shadow group entry\n"
+msgstr ""
+
+#: src/groupdel.c:150 src/groupmod.c:254
+#, c-format
+msgid "%s: error removing shadow group dbm entry\n"
+msgstr ""
+
+#.
+#. * Can't remove the group.
+#.
+#: src/groupdel.c:254
+#, c-format
+msgid "%s: cannot remove user's primary group.\n"
+msgstr ""
+
+#: src/groupdel.c:355 src/groupmod.c:550
+#, c-format
+msgid "%s: group %s does not exist\n"
+msgstr "%s: %s¥°¥ë¡¼¥× ¤Ï¸ºß¤·¤Þ¤»¤ó\n"
+
+#: src/groupdel.c:369 src/groupmod.c:566
+#, c-format
+msgid "%s: group %s is a NIS group\n"
+msgstr "%s: %s¥°¥ë¡¼¥×¤Ï NIS ¤Î¥°¥ë¡¼¥×¤Ç¤¹\n"
+
+#: src/groupdel.c:375 src/groupmod.c:571 src/userdel.c:776 src/usermod.c:1045
+#, c-format
+msgid "%s: %s is the NIS master\n"
+msgstr "%s: %s ¤Ï NIS ¥Þ¥¹¥¿¡¼¤Ç¤¹\n"
+
+#: src/groupmems.c:95
+msgid "Member already exists\n"
+msgstr ""
+
+#: src/groupmems.c:125
+msgid "Member to remove could not be found\n"
+msgstr ""
+
+#: src/groupmems.c:158
+msgid "usage: groupmems -a username | -d username | -D | -l [-g groupname]\n"
+msgstr ""
+
+#: src/groupmems.c:201
+msgid "Only root can add members to different groups\n"
+msgstr ""
+
+#: src/groupmems.c:206
+msgid "Group access is required\n"
+msgstr ""
+
+#: src/groupmems.c:210
+msgid "Not primary owner of current group\n"
+msgstr ""
+
+#: src/groupmems.c:215
+#, fuzzy
+msgid "Unable to lock group file\n"
+msgstr "%s: ¥°¥ë¡¼¥×¡¦¥Õ¥¡¥¤¥ë¤ò¥í¥Ã¥¯¤Ç¤­¤Þ¤»¤ó\n"
+
+#: src/groupmems.c:220
+#, fuzzy
+msgid "Unable to open group file\n"
+msgstr "%s: ¥°¥ë¡¼¥×¥Õ¥¡¥¤¥ë¤ò³«¤±¤Þ¤»¤ó\n"
+
+#: src/groupmems.c:240
+#, fuzzy
+msgid "Cannot close group file\n"
+msgstr "%s: ¥°¥ë¡¼¥×¡¦¥Õ¥¡¥¤¥ë¤ò³«¤±¤Þ¤»¤ó\n"
+
+#: src/groupmod.c:103
+msgid "usage: groupmod [-g gid [-o]] [-n name] group\n"
+msgstr "»ÈÍÑË¡: groupmod [-g ¥°¥ë¡¼¥×ID [-o]] [-n Ì¾Á°] ¥°¥ë¡¼¥×\n"
+
+#: src/groupmod.c:161
+#, c-format
+msgid "%s: %s not found in /etc/group\n"
+msgstr "%s: /etc/group¤Ë %s ¤¬¸«ÉÕ¤«¤ê¤Þ¤»¤ó\n"
+
+#: src/groupmod.c:247
+#, c-format
+msgid "%s: cannot add new dbm shadow group entry\n"
+msgstr "%s: ¿·µ¬DBM¥·¥ã¥É¥¦¡¦¥°¥ë¡¼¥×¡¦¥¨¥ó¥È¥ê¤òÄɲäǤ­¤Þ¤»¤ó\n"
+
+#: src/groupmod.c:300
+#, fuzzy, c-format
+msgid "%s: %u is not a unique gid\n"
+msgstr "%s: %ld ¤Ï¥°¥ë¡¼¥×ID¤¬½ÅÊ£¤·¤Æ¤¤¤Þ¤¹\n"
+
+#: src/groupmod.c:330
+#, c-format
+msgid "%s: %s is not a unique name\n"
+msgstr "%s: %s ¤Ï̾Á°¤¬½ÅÊ£¤·¤Æ¤¤¤Þ¤¹\n"
+
+#: src/groups.c:59
+#, c-format
+msgid "unknown user %s\n"
+msgstr "ÉÔÌÀ¤Ê¥æ¡¼¥¶¤Ç¤¹ %s\n"
+
+#: src/grpck.c:87
+#, fuzzy, c-format
+msgid "Usage: %s [-r] [-s] [group [gshadow]]\n"
+msgstr "»ÈÍÑË¡: %s [-r] [-s] [¥°¥ë¡¼¥× [¥°¥ë¡¼¥×¥·¥ã¥É¥¦]]\n"
+
+#: src/grpck.c:90
+#, fuzzy, c-format
+msgid "Usage: %s [-r] [-s] [group]\n"
+msgstr "»ÈÍÑË¡: %s [-r] [¥°¥ë¡¼¥×]\n"
+
+#: src/grpck.c:108 src/pwck.c:108
+msgid "No"
+msgstr ""
+
+#: src/grpck.c:192 src/pwck.c:175
+#, c-format
+msgid "%s: -s and -r are incompatibile\n"
+msgstr ""
+
+#: src/grpck.c:232 src/grpck.c:242 src/pwck.c:215 src/pwck.c:225
+#, c-format
+msgid "%s: cannot lock file %s\n"
+msgstr "%s: ¥Õ¥¡¥¤¥ë %s ¤ò¥í¥Ã¥¯¤Ç¤­¤Þ¤»¤ó\n"
+
+#: src/grpck.c:259 src/grpck.c:268 src/mkpasswd.c:202 src/pwck.c:242
+#: src/pwck.c:251
+#, c-format
+msgid "%s: cannot open file %s\n"
+msgstr "%s: ¥Õ¥¡¥¤¥ë %s ¤ò³«¤±¤Þ¤»¤ó\n"
+
+#.
+#. * Tell the user this entire line is bogus and ask
+#. * them to delete it.
+#.
+#: src/grpck.c:311
+msgid "invalid group file entry\n"
+msgstr "ÉÔÀµ¤Ê¥°¥ë¡¼¥×¡¦¥Õ¥¡¥¤¥ë¤Î¥¨¥ó¥È¥ê¤Ç¤¹\n"
+
+#: src/grpck.c:312 src/grpck.c:375 src/grpck.c:458 src/grpck.c:521
+#: src/grpck.c:538 src/pwck.c:296 src/pwck.c:358 src/pwck.c:457 src/pwck.c:519
+#: src/pwck.c:543
+#, c-format
+msgid "delete line `%s'? "
+msgstr "`%s'¹Ô¤òºï½ü¤·¤Þ¤¹¤«? "
+
+#.
+#. * Tell the user this entry is a duplicate of
+#. * another and ask them to delete it.
+#.
+#: src/grpck.c:374
+msgid "duplicate group entry\n"
+msgstr "¥°¥ë¡¼¥×¥¨¥ó¥È¥ê¤¬½ÅÊ£¤·¤Æ¤¤¤Þ¤¹\n"
+
+#: src/grpck.c:391
+#, c-format
+msgid "invalid group name `%s'\n"
+msgstr "ÉÔÀµ¤Ê¥°¥ë¡¼¥×̾ `%s' ¤Ç¤¹\n"
+
+#: src/grpck.c:418
+#, c-format
+msgid "group %s: no user %s\n"
+msgstr "¥°¥ë¡¼¥× %s: ¥æ¡¼¥¶ %s ¤Ï¤¤¤Þ¤»¤ó\n"
+
+#: src/grpck.c:420 src/grpck.c:590
+#, c-format
+msgid "delete member `%s'? "
+msgstr "¥á¥ó¥Ð¡¼ `%s' ¤òºï½ü¤·¤Þ¤¹¤«? "
+
+#.
+#. * Tell the user this entire line is bogus and ask
+#. * them to delete it.
+#.
+#: src/grpck.c:457
+msgid "invalid shadow group file entry\n"
+msgstr "¥·¥ã¥É¥¦¡¦¥°¥ë¡¼¥×¡¦¥Õ¥¡¥¤¥ë¡¦¥¨¥ó¥È¥ê¤¬ÉÔÀµ¤Ç¤¹\n"
+
+#.
+#. * Tell the user this entry is a duplicate of
+#. * another and ask them to delete it.
+#.
+#: src/grpck.c:520
+msgid "duplicate shadow group entry\n"
+msgstr "¥°¥ë¡¼¥×¥¨¥ó¥È¥ê¤¬½ÅÊ£¤·¤Æ¤¤¤Þ¤¹\n"
+
+#: src/grpck.c:537
+msgid "no matching group file entry\n"
+msgstr "¥°¥ë¡¼¥×¥Õ¥¡¥¤¥ë¥¨¥ó¥È¥ê¤È°ìÃפ·¤Þ¤»¤ó\n"
+
+#: src/grpck.c:558
+#, c-format
+msgid "shadow group %s: no administrative user %s\n"
+msgstr ""
+
+#: src/grpck.c:560
+#, c-format
+msgid "delete administrative member `%s'? "
+msgstr ""
+
+#: src/grpck.c:588
+#, c-format
+msgid "shadow group %s: no user %s\n"
+msgstr ""
+
+#: src/grpck.c:616 src/grpck.c:622 src/pwck.c:577 src/pwck.c:585
+#, c-format
+msgid "%s: cannot update file %s\n"
+msgstr ""
+
+#: src/grpck.c:647 src/pwck.c:612
+#, c-format
+msgid "%s: the files have been updated; run mkpasswd\n"
+msgstr ""
+
+#: src/grpck.c:648 src/grpck.c:652 src/pwck.c:613 src/pwck.c:617
+#, c-format
+msgid "%s: no changes\n"
+msgstr "%s: Êѹ¹¤Ï¤¢¤ê¤Þ¤»¤ó\n"
+
+#: src/grpck.c:651 src/pwck.c:616
+#, c-format
+msgid "%s: the files have been updated\n"
+msgstr "%s: ¥Õ¥¡¥¤¥ë¤Ï¹¹¿·¤µ¤ì¤Þ¤·¤¿\n"
+
+#: src/grpconv.c:60 src/grpunconv.c:56
+#, c-format
+msgid "%s: can't lock group file\n"
+msgstr "%s: ¥°¥ë¡¼¥×¡¦¥Õ¥¡¥¤¥ë¤ò¥í¥Ã¥¯¤Ç¤­¤Þ¤»¤ó\n"
+
+#: src/grpconv.c:65 src/grpunconv.c:61
+#, c-format
+msgid "%s: can't open group file\n"
+msgstr "%s: ¥°¥ë¡¼¥×¥Õ¥¡¥¤¥ë¤ò³«¤±¤Þ¤»¤ó\n"
+
+#: src/grpconv.c:70 src/grpunconv.c:66
+#, c-format
+msgid "%s: can't lock shadow group file\n"
+msgstr "%s: ¥·¥ã¥É¥¦¡¦¥°¥ë¡¼¥×¡¦¥Õ¥¡¥¤¥ë¤ò¥í¥Ã¥¯¤Ç¤­¤Þ¤»¤ó\n"
+
+#: src/grpconv.c:76 src/grpunconv.c:72
+#, c-format
+msgid "%s: can't open shadow group file\n"
+msgstr "%s: ¥·¥ã¥É¥¦¡¦¥°¥ë¡¼¥×¡¦¥Õ¥¡¥¤¥ë¤¬³«¤±¤Þ¤»¤ó\n"
+
+#: src/grpconv.c:94
+#, c-format
+msgid "%s: can't remove shadow group %s\n"
+msgstr "%s: ¥·¥ã¥É¥¦¡¦¥°¥ë¡¼¥× %s ¤òºï½ü¤Ç¤­¤Þ¤»¤ó\n"
+
+#: src/grpconv.c:138 src/pwconv.c:153
+#, c-format
+msgid "%s: can't update shadow entry for %s\n"
+msgstr "%s: %s ¤Î¥·¥ã¥É¥¦¡¦¥¨¥ó¥È¥ê¤ò¹¹¿·¤Ç¤­¤Þ¤»¤ó\n"
+
+#: src/grpconv.c:148 src/grpunconv.c:91
+#, c-format
+msgid "%s: can't update entry for group %s\n"
+msgstr "%s: ¥°¥ë¡¼¥× %s ¤Î¥¨¥ó¥È¥ê¤ò¹¹¿·¤Ç¤­¤Þ¤»¤ó\n"
+
+#: src/grpconv.c:155 src/grpunconv.c:99
+#, c-format
+msgid "%s: can't update shadow group file\n"
+msgstr "%s: ¥·¥ã¥É¥¦¡¦¥°¥ë¡¼¥×¡¦¥Õ¥¡¥¤¥ë¤ò¹¹¿·¤Ç¤­¤Þ¤»¤ó\n"
+
+#: src/grpconv.c:160 src/grpunconv.c:105
+#, c-format
+msgid "%s: can't update group file\n"
+msgstr "%s: ¥°¥ë¡¼¥×¡¦¥Õ¥¡¥¤¥ë¤ò¹¹¿·¤Ç¤­¤Þ¤»¤ó\n"
+
+#: src/grpconv.c:175 src/grpunconv.c:127
+#, c-format
+msgid "%s: not configured for shadow group support.\n"
+msgstr "%s: ¥·¥ã¥É¥¦¡¦¥°¥ë¡¼¥×¡¦¥µ¥Ý¡¼¥ÈÍѤËÀßÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó\n"
+
+#: src/grpunconv.c:110
+#, c-format
+msgid "%s: can't delete shadow group file\n"
+msgstr "%s: ¥°¥ë¡¼¥×¡¦¥Õ¥¡¥¤¥ë¤òºï½ü¤Ç¤­¤Þ¤»¤ó\n"
+
+#: src/id.c:53
+msgid "usage: id [-a]\n"
+msgstr "»ÈÍÑË¡: id [-a]\n"
+
+#: src/id.c:55
+msgid "usage: id\n"
+msgstr "»ÈÍÑË¡: id\n"
+
+#: src/id.c:123
+#, fuzzy, c-format
+msgid "uid=%u(%s)"
+msgstr "¥æ¡¼¥¶ID=%d(%s)"
+
+#: src/id.c:125
+#, fuzzy, c-format
+msgid "uid=%u"
+msgstr "¥æ¡¼¥¶ID=%d"
+
+#: src/id.c:129
+#, fuzzy, c-format
+msgid " gid=%u(%s)"
+msgstr " ¥°¥ë¡¼¥×ID=%d(%s)"
+
+#: src/id.c:131
+#, fuzzy, c-format
+msgid " gid=%u"
+msgstr " ¥°¥ë¡¼¥×ID=%d"
+
+#: src/id.c:141
+#, fuzzy, c-format
+msgid " euid=%u(%s)"
+msgstr " ¼Â¸ú¥æ¡¼¥¶ID=%d(%s)"
+
+#: src/id.c:143
+#, fuzzy, c-format
+msgid " euid=%u"
+msgstr " ¼Â¸ú¥æ¡¼¥¶ID=%d"
+
+#: src/id.c:148
+#, fuzzy, c-format
+msgid " egid=%u(%s)"
+msgstr " ¼Â¸ú¥°¥ë¡¼¥×ID=%d(%s)"
+
+#: src/id.c:150
+#, fuzzy, c-format
+msgid " egid=%u"
+msgstr " ¼Â¸ú¥°¥ë¡¼¥×ID=%d"
+
+#.
+#. * 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.
+#.
+#: src/id.c:169
+msgid " groups="
+msgstr " ¥°¥ë¡¼¥×="
+
+#: src/lastlog.c:110 src/lastlog.c:116
+#, c-format
+msgid "Usage: %s [<-u|--login> login-name] [<-t|--time> days] [<-h|--help>]\n"
+msgstr ""
+
+#: src/lastlog.c:181
+msgid "Username         Port     From             Latest\n"
+msgstr "¥æ¡¼¥¶Ì¾         ¥Ý¡¼¥È   ¾ì½ê             ºÇ¶á¤Î¥í¥°¥¤¥ó\n"
+
+#: src/lastlog.c:183
+msgid "Username                Port     Latest\n"
+msgstr "¥æ¡¼¥¶Ì¾                ¥Ý¡¼¥È   ºÇ¶á¤Î¥í¥°¥¤¥ó\n"
+
+#: src/lastlog.c:197
+msgid "**Never logged in**"
+msgstr "**°ìÅÙ¤â¥í¥°¥¤¥ó¤Ï¤¢¤ê¤Þ¤»¤ó**"
+
+#: src/login.c:183
+#, c-format
+msgid "usage: %s [-p] [name]\n"
+msgstr "»ÈÍÑË¡:  %s [-p] [¥æ¡¼¥¶Ì¾]\n"
+
+#: src/login.c:186
+#, c-format
+msgid "       %s [-p] [-h host] [-f name]\n"
+msgstr "       %s [-p] [-h ¥Û¥¹¥È] [-f ¥æ¡¼¥¶Ì¾]\n"
+
+#: src/login.c:188
+#, c-format
+msgid "       %s [-p] -r host\n"
+msgstr "       %s [-p] -r ¥Û¥¹¥È\n"
+
+#: src/login.c:272
+msgid "Invalid login time\n"
+msgstr "¥í¥°¥¤¥ó»þ´Ö¤¬ÉÔÀµ¤Ç¤¹\n"
+
+#: src/login.c:327
+msgid ""
+"\n"
+"System closed for routine maintenance\n"
+msgstr ""
+"\n"
+"¥·¥¹¥Æ¥à¤Ï¥á¥ó¥Æ¥Ê¥ó¥¹¥ë¡¼¥Á¥ó¤ËÂФ·¤ÆÊĤ¸¤Þ¤·¤¿\n"
+
+#: src/login.c:338
+msgid ""
+"\n"
+"[Disconnect bypassed -- root login allowed.]\n"
+msgstr ""
+
+#: src/login.c:375
+#, c-format
+msgid ""
+"\n"
+"Login timed out after %d seconds.\n"
+msgstr ""
+"\n"
+"%sÉøå¤Î¥í¥°¥¤¥ó¡¦¥¿¥¤¥àÀ©¸Â¤Ç¤¹.\n"
+
+#: src/login.c:687
+#, c-format
+msgid " on `%.100s' from `%.200s'"
+msgstr ""
+
+#: src/login.c:691
+#, c-format
+msgid " on `%.100s'"
+msgstr ""
+
+#: src/login.c:850
+#, c-format
+msgid ""
+"\n"
+"%s login: "
+msgstr ""
+"\n"
+"%s ¥í¥°¥¤¥ó: "
+
+#: src/login.c:853
+msgid "login: "
+msgstr "¥í¥°¥¤¥ó: "
+
+#: src/login.c:1069 src/sulogin.c:233
+msgid "Login incorrect"
+msgstr "¥í¥°¥¤¥ó¤¬°ã¤¤¤Þ¤¹"
+
+#: src/login.c:1263
+msgid "Warning: login re-enabled after temporary lockout.\n"
+msgstr ""
+
+#: src/login.c:1276
+#, c-format
+msgid "Last login: %s on %s"
+msgstr "ºÇ¶á¤Î¥í¥°¥¤¥ó: %s on %s"
+
+#: src/login.c:1279
+#, c-format
+msgid "Last login: %.19s on %s"
+msgstr "ºÇ¶á¤Î¥í¥°¥¤¥ó: %.19s on %s"
+
+#: src/login.c:1285
+#, c-format
+msgid " from %.*s"
+msgstr " ¾ì½ê %.*s"
+
+#: src/login.c:1362
+msgid "Starting rad_login\n"
+msgstr ""
+
+#: src/mkpasswd.c:47
+#, c-format
+msgid "%s: no DBM database on system - no action performed\n"
+msgstr ""
+
+#: src/mkpasswd.c:232 src/mkpasswd.c:237
+#, c-format
+msgid "%s: cannot overwrite file %s\n"
+msgstr ""
+
+#: src/mkpasswd.c:252
+#, c-format
+msgid "%s: cannot open DBM files for %s\n"
+msgstr ""
+
+#: src/mkpasswd.c:287
+#, c-format
+msgid "%s: the beginning with "
+msgstr ""
+
+#: src/mkpasswd.c:288
+#, fuzzy
+msgid " is too long\n"
+msgstr "%s: ÆþÎÏÆâÍÆ¤¬Ä¹²á¤®¤Þ¤¹\n"
+
+#: src/mkpasswd.c:315
+#, c-format
+msgid "%s: error parsing line \"%s\"\n"
+msgstr ""
+
+#: src/mkpasswd.c:323 src/mkpasswd.c:328 src/mkpasswd.c:333 src/mkpasswd.c:338
+msgid "adding record for name "
+msgstr ""
+
+#: src/mkpasswd.c:324 src/mkpasswd.c:329 src/mkpasswd.c:334 src/mkpasswd.c:339
+#: src/mkpasswd.c:345 src/mkpasswd.c:351 src/mkpasswd.c:356 src/mkpasswd.c:361
+msgid "\n"
+msgstr ""
+
+#: src/mkpasswd.c:344 src/mkpasswd.c:350 src/mkpasswd.c:355 src/mkpasswd.c:360
+#, c-format
+msgid "%s: error adding record for "
+msgstr ""
+
+#: src/mkpasswd.c:378
+#, c-format
+msgid "added %d entries, longest was %d\n"
+msgstr ""
+
+#: src/mkpasswd.c:392
+#, c-format
+msgid "Usage: %s [-vf] [-p|g|sp|sg] file\n"
+msgstr "»ÈÍÑË¡: %s [-vf] [-p|g|sp|sg] ¥Õ¥¡¥¤¥ë\n"
+
+#: src/mkpasswd.c:395
+#, c-format
+msgid "Usage: %s [-vf] [-p|g|sp] file\n"
+msgstr "»ÈÍÑË¡: %s [-vf] [-p|g|sp] ¥Õ¥¡¥¤¥ë\n"
+
+#: src/mkpasswd.c:398
+#, c-format
+msgid "Usage: %s [-vf] [-p|g] file\n"
+msgstr "»ÈÍÑË¡: %s [-vf] [-p|g] ¥Õ¥¡¥¤¥ë\n"
+
+#: src/newgrp.c:61
+msgid "usage: newgrp [-] [group]\n"
+msgstr "»ÈÍÑË¡: newgrp [-] [¥°¥ë¡¼¥×]\n"
+
+#: src/newgrp.c:63
+msgid "usage: sg group [[-c] command]\n"
+msgstr "»ÈÍÑË¡: sg ¥°¥ë¡¼¥× [[-c] ¥³¥Þ¥ó¥É]\n"
+
+#: src/newgrp.c:136
+#, fuzzy, c-format
+msgid "unknown uid: %u\n"
+msgstr "ÉÔÌÀ¤Ê¥æ¡¼¥¶ID¤Ç¤¹: %d\n"
+
+#: src/newgrp.c:219
+#, fuzzy, c-format
+msgid "unknown gid: %lu\n"
+msgstr "ÉÔÌÀ¤Ê¥°¥ë¡¼¥×ID¤Ç¤¹: %ld\n"
+
+#: src/newgrp.c:365 src/newgrp.c:374
+msgid "Sorry.\n"
+msgstr "¿½¤·Ìõ¤´¤¶¤¤¤Þ¤»¤ó.\n"
+
+#: src/newgrp.c:472
+msgid "too many groups\n"
+msgstr "¥°¥ë¡¼¥×¤¬Â¿¤¹¤®¤Þ¤¹\n"
+
+#: src/newusers.c:78
+#, c-format
+msgid "Usage: %s [input]\n"
+msgstr "»ÈÍÑË¡: %s [ÆþÎÏ]\n"
+
+#: src/newusers.c:407
+#, c-format
+msgid "%s: can't lock /etc/passwd.\n"
+msgstr "%s: /etc/passwd ¤ò¥í¥Ã¥¯¤Ç¤­¤Þ¤»¤ó.\n"
+
+#: src/newusers.c:419
+#, c-format
+msgid "%s: can't lock files, try again later\n"
+msgstr "%s: ¥Õ¥¡¥¤¥ë¤ò¥í¥Ã¥¯¤Ç¤­¤Þ¤»¤ó, ¸å¤Ç¤â¤¦°ìÅٻ¤Æ¤¯¤À¤µ¤¤\n"
+
+#: src/newusers.c:435
+#, c-format
+msgid "%s: can't open files\n"
+msgstr "%s: ¥Õ¥¡¥¤¥ë¤ò³«¤­¤Þ¤¹\n"
+
+#: src/newusers.c:480
+#, c-format
+msgid "%s: line %d: invalid line\n"
+msgstr "%s: %d¹Ô: ÉÔÀµ¹Ô¤Ç¤¹\n"
+
+#: src/newusers.c:499
+#, c-format
+msgid "%s: line %d: can't create GID\n"
+msgstr "%s: %d¹Ô: ¥°¥ë¡¼¥×ID¤¬ºîÀ®¤Ç¤­¤Þ¤»¤ó\n"
+
+#: src/newusers.c:515
+#, c-format
+msgid "%s: line %d: can't create UID\n"
+msgstr "%s: %d¹Ô: ¥æ¡¼¥¶ID¤¬ºîÀ®¤Ç¤­¤Þ¤»¤ó\n"
+
+#: src/newusers.c:528
+#, c-format
+msgid "%s: line %d: cannot find user %s\n"
+msgstr "%s: %d¹Ô: ¥æ¡¼¥¶ %s ¤¬¸«ÉÕ¤«¤ê¤Þ¤»¤ó\n"
+
+#: src/newusers.c:537
+#, c-format
+msgid "%s: line %d: can't update password\n"
+msgstr "%s: %d¹Ô: ¥Ñ¥¹¥ï¡¼¥É¤ò¹¹¿·¤Ç¤­¤Þ¤»¤ó\n"
+
+#: src/newusers.c:555
+#, c-format
+msgid "%s: line %d: mkdir failed\n"
+msgstr "%s: %d¹Ô: mkdir ¤Ë¼ºÇÔ¤·¤Þ¤·¤¿\n"
+
+#: src/newusers.c:561
+#, c-format
+msgid "%s: line %d: chown failed\n"
+msgstr "%s: %d¹Ô: chown ¤Ë¼ºÇÔ¤·¤Þ¤·¤¿\n"
+
+#: src/newusers.c:571
+#, c-format
+msgid "%s: line %d: can't update entry\n"
+msgstr "%s: %d¹Ô: ¥¨¥ó¥È¥ê¤ò¹¹¿·¤Ç¤­¤Þ¤»¤ó\n"
+
+#: src/newusers.c:603
+#, c-format
+msgid "%s: error updating files\n"
+msgstr "%s: ¥Õ¥¡¥¤¥ë¹¹¿·¤Î¥¨¥é¡¼¤Ç¤¹\n"
+
+#: src/passwd.c:174
+#, c-format
+msgid "usage: %s [-f|-s] [name]\n"
+msgstr "»ÈÍÑË¡: %s [-f|-s] [¥æ¡¼¥¶Ì¾]\n"
+
+#: src/passwd.c:178
+#, c-format
+msgid "       %s [-x max] [-n min] [-w warn] [-i inact] name\n"
+msgstr "       %s [-x ºÇÂç] [-n ºÇ¾®] [-w ·Ù¹ð] [-i Ìµ¸ú] ¥æ¡¼¥¶Ì¾\n"
+
+#: src/passwd.c:180
+#, fuzzy, c-format
+msgid "       %s {-l|-u|-d|-S|-e} name\n"
+msgstr "       %s { -l | -u | -d | -S | -e } ¥æ¡¼¥¶Ì¾\n"
+
+#: src/passwd.c:283
+#, c-format
+msgid "User %s has a TCFS key, his old password is required.\n"
+msgstr ""
+"¥æ¡¼¥¶ %s ¤Ï TCFS¥­¡¼¤ò¤â¤Ã¤Æ¤¤¤Þ¤¹, ¤½¤Î¥æ¡¼¥¶¤Îµì¥Ñ¥¹¥ï¡¼¥É¤¬É¬ÍפǤ¹.\n"
+
+#: src/passwd.c:286
+msgid "You can use -t option to force the change.\n"
+msgstr "¶¯À©Åª¤ËÊѹ¹¤ò¹Ô¤¦¤Ë¤Ï, ¥ª¥×¥·¥ç¥ó -t ¤¬É¬ÍפǤ¹\n"
+
+#: src/passwd.c:292
+msgid "Old password: "
+msgstr "¸Å¤¤¥Ñ¥¹¥ï¡¼¥É: "
+
+#: src/passwd.c:301
+#, c-format
+msgid "Incorrect password for `%s'\n"
+msgstr ""
+
+#: src/passwd.c:314
+#, c-format
+msgid "Warning: user %s has a TCFS key.\n"
+msgstr ""
+
+#: src/passwd.c:333
+#, 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 ""
+
+#: src/passwd.c:339
+msgid "New password: "
+msgstr "¿·¤·¤¤¥Ñ¥¹¥ï¡¼¥É: "
+
+#: src/passwd.c:350
+msgid "Try again.\n"
+msgstr "¤â¤¦°ìÅÙ¤ª´ê¤¤¤·¤Þ¤¹.\n"
+
+#: src/passwd.c:361
+msgid ""
+"\n"
+"Warning: weak password (enter it again to use it anyway).\n"
+msgstr ""
+"\n"
+"·Ù¹ð: ÀȤ¤¥Ñ¥¹¥ï¡¼¥É¤Ç¤¹ (¤É¤¦¤·¤Æ¤â»È¤¦¾ì¹ç, ¤â¤¦°ìÅÙ¤³¤ì¤òÆþÎϤ·¤Æ¤¯¤À¤µ"
+"¤¤).\n"
+
+#: src/passwd.c:371
+msgid "They don't match; try again.\n"
+msgstr "°ìÃפ·¤Þ¤»¤ó: ¤â¤¦°ìÅÙ¤ª´ê¤¤¤·¤Þ¤¹.\n"
+
+#: src/passwd.c:451 src/passwd.c:469
+#, c-format
+msgid "The password for %s cannot be changed.\n"
+msgstr "%s ¤Î¥Ñ¥¹¥ï¡¼¥É¤ÏÊѹ¹¤Ç¤­¤Þ¤»¤ó.\n"
+
+#: src/passwd.c:494
+#, c-format
+msgid "Sorry, the password for %s cannot be changed yet.\n"
+msgstr "¿½¤·Ìõ¤¢¤ê¤Þ¤»¤ó¤¬, %s ¤Î¥Ñ¥¹¥ï¡¼¥É¤Ï¤Þ¤ÀÊѹ¹¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó.\n"
+
+#: src/passwd.c:614
+#, c-format
+msgid "%s: out of memory\n"
+msgstr "%s: ¥á¥â¥ê¤¬¤¿¤ê¤Þ¤»¤ó\n"
+
+#: src/passwd.c:769
+msgid "Cannot lock the TCFS key database; try again later\n"
+msgstr "TCFS¥­¡¼¥Ç¡¼¥¿¥Ù¡¼¥¹¤ò¥í¥Ã¥¯¤Ç¤­¤Þ¤»¤ó, ¸å¤Ç¤â¤¦°ìÅٻ¤Æ¤¯¤À¤µ¤¤.\n"
+
+#: src/passwd.c:777
+msgid "Cannot open the TCFS key database.\n"
+msgstr "TCFS¥­¡¼¥Ç¡¼¥¿¥Ù¡¼¥¹¤ò³«¤±¤Þ¤»¤ó.\n"
+
+#: src/passwd.c:785
+msgid "Error updating the TCFS key database.\n"
+msgstr "TCFS¥­¡¼¥Ç¡¼¥¿¥Ù¡¼¥¹¤Î¹¹¿·¤Î¥¨¥é¡¼¤Ç¤¹.\n"
+
+#: src/passwd.c:792
+msgid "Cannot commit TCFS changes.\n"
+msgstr "TCFSÊѹ¹¤òcommit¤Ç¤­¤Þ¤»¤ó.\n"
+
+#: src/passwd.c:975
+#, c-format
+msgid "%s: Cannot execute %s"
+msgstr "%s: %s¤ò¼Â¹Ô¤Ç¤­¤Þ¤»¤ó"
+
+#: src/passwd.c:1077
+#, c-format
+msgid "%s: repository %s not supported\n"
+msgstr "%s: ¥ì¥Ý¥¸¥È¥ê %s ¤Ï¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Þ¤»¤ó\n"
+
+#: src/passwd.c:1152
+#, c-format
+msgid "%s: Permission denied\n"
+msgstr "%s: ¸¢¸Â¤¬¤¢¤ê¤Þ¤»¤ó\n"
+
+#: src/passwd.c:1176
+#, c-format
+msgid "You may not change the password for %s.\n"
+msgstr "¤¢¤Ê¤¿¤Ï %s ¤Î¥Ñ¥¹¥ï¡¼¥É¤òÊѹ¹¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó.\n"
+
+#: src/passwd.c:1242
+#, c-format
+msgid "Changing password for %s\n"
+msgstr "%s¤Î¥Ñ¥¹¥ï¡¼¥É¤ÎÊѹ¹\n"
+
+#: src/passwd.c:1246
+#, c-format
+msgid "The password for %s is unchanged.\n"
+msgstr "%s¤Î¥Ñ¥¹¥ï¡¼¥É¤ÏÊѹ¹¤µ¤ì¤Þ¤»¤ó.\n"
+
+#: src/passwd.c:1297
+msgid "Password changed.\n"
+msgstr "¥Ñ¥¹¥ï¡¼¥É¤ÏÊѹ¹¤µ¤ì¤Þ¤·¤¿.\n"
+
+#: src/pwck.c:87
+#, fuzzy, c-format
+msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+msgstr "»ÈÍÑ: %s [-q] [-r] [-s] [¥Ñ¥¹¥ï¡¼¥É [¥·¥ã¥É¥¦]]\n"
+
+#: src/pwck.c:90
+#, fuzzy, c-format
+msgid "Usage: %s [-q] [-r] [-s] [passwd]\n"
+msgstr "»ÈÍÑ: %s [-q] [-r] [-s] [¥Ñ¥¹¥ï¡¼¥É]\n"
+
+#.
+#. * Tell the user this entire line is bogus and ask
+#. * them to delete it.
+#.
+#: src/pwck.c:295
+msgid "invalid password file entry\n"
+msgstr "¥Ñ¥¹¥ï¡¼¥É¡¦¥Õ¥¡¥¤¥ë¡¦¥¨¥ó¥È¥ê¤¬ÉÔÀµ¤Ç¤¹\n"
+
+#.
+#. * Tell the user this entry is a duplicate of
+#. * another and ask them to delete it.
+#.
+#: src/pwck.c:357
+msgid "duplicate password entry\n"
+msgstr "¥Ñ¥¹¥ï¡¼¥É¥¨¥ó¥È¥ê¤¬½ÅÊ£¤·¤Æ¤¤¤Þ¤¹\n"
+
+#: src/pwck.c:373
+#, c-format
+msgid "invalid user name `%s'\n"
+msgstr "ÉÔÀµ¤Ê¥æ¡¼¥¶Ì¾`%s' ¤Ç¤¹\n"
+
+#.
+#. * No primary group, just give a warning
+#.
+#: src/pwck.c:388
+#, fuzzy, c-format
+msgid "user %s: no group %u\n"
+msgstr "¥æ¡¼¥¶ %s: ¥°¥ë¡¼¥× %d ¤¬¤¢¤ê¤Þ¤»¤ó\n"
+
+#: src/pwck.c:404
+#, c-format
+msgid "user %s: directory %s does not exist\n"
+msgstr "¥æ¡¼¥¶ %s: ¥Ç¥£¥ì¥¯¥È¥ê %s ¤¬Â¸ºß¤·¤Þ¤»¤ó\n"
+
+#.
+#. * Login shell doesn't exist, give a warning
+#.
+#: src/pwck.c:420
+#, c-format
+msgid "user %s: program %s does not exist\n"
+msgstr "¥æ¡¼¥¶ %s: ¥×¥í¥°¥é¥à %s ¤Ï¸ºß¤·¤Þ¤»¤ó\n"
+
+#.
+#. * Tell the user this entire line is bogus and ask
+#. * them to delete it.
+#.
+#: src/pwck.c:456
+msgid "invalid shadow password file entry\n"
+msgstr "ÉÔÀµ¤Ê¥·¥ã¥É¥¦¡¦¥Ñ¥¹¥ï¡¼¥É¡¦¥¨¥ó¥È¥ê¤Ç¤¹\n"
+
+#.
+#. * Tell the user this entry is a duplicate of
+#. * another and ask them to delete it.
+#.
+#: src/pwck.c:518
+msgid "duplicate shadow password entry\n"
+msgstr "¥·¥ã¥É¥¦¡¦¥Ñ¥¹¥ï¡¼¥É¡¦¥¨¥ó¥È¥ê¤¬½ÅÊ£¤·¤Æ¤¤¤Þ¤¹\n"
+
+#.
+#. * Tell the user this entry has no matching
+#. * /etc/passwd entry and ask them to delete it.
+#.
+#: src/pwck.c:542
+msgid "no matching password file entry\n"
+msgstr "¥Ñ¥¹¥ï¡¼¥É¡¦¥Õ¥¡¥¤¥ë¡¦¥¨¥ó¥È¥ê¤È°ìÃפ·¤Þ¤»¤ó\n"
+
+#: src/pwck.c:560
+#, c-format
+msgid "user %s: last password change in the future\n"
+msgstr "¥æ¡¼¥¶ %s: ºÇ¸å¤Î¥Ñ¥¹¥ï¡¼¥ÉÊѹ¹¤¬Ì¤Íè¤Ë¤¢¤ê¤Þ¤¹\n"
+
+#: src/pwconv.c:84 src/pwunconv.c:93
+#, c-format
+msgid "%s: can't lock passwd file\n"
+msgstr "%s: ¥Ñ¥¹¥ï¡¼¥É¥Õ¥¡¥¤¥ë¤ò¥í¥Ã¥¯¤Ç¤­¤Þ¤»¤ó\n"
+
+#: src/pwconv.c:89 src/pwunconv.c:98
+#, c-format
+msgid "%s: can't open passwd file\n"
+msgstr "%s: ¥Ñ¥¹¥ï¡¼¥É¥Õ¥¡¥¤¥ë¤ò³«¤±¤Þ¤»¤ó\n"
+
+#: src/pwconv.c:117
+#, c-format
+msgid "%s: can't remove shadow entry for %s\n"
+msgstr "%s: %s¤Î¥·¥ã¥É¥¦¡¦¥¨¥ó¥È¥ê¤òºï½ü¤Ç¤­¤Þ¤»¤ó\n"
+
+#: src/pwconv.c:163
+#, c-format
+msgid "%s: can't update passwd entry for %s\n"
+msgstr "%s: %s¤Î¥Ñ¥¹¥ï¡¼¥É¥¨¥ó¥È¥ê¤ò¹¹¿·¤Ç¤­¤Þ¤»¤ó\n"
+
+#: src/pwconv.c:170
+#, c-format
+msgid "%s: can't update shadow file\n"
+msgstr "%s: ¥·¥ã¥É¥¦¥Õ¥¡¥¤¥ë¤ò¹¹¿·¤Ç¤­¤Þ¤»¤ó\n"
+
+#: src/pwconv.c:175
+#, c-format
+msgid "%s: can't update passwd file\n"
+msgstr "%s: ¥Ñ¥¹¥ï¡¼¥É¥Õ¥¡¥¤¥ë¤ò¹¹¿·¤Ç¤­¤Þ¤»¤ó\n"
+
+#: src/pwunconv.c:50
+#, c-format
+msgid "%s: Shadow passwords are not configured.\n"
+msgstr "%s: ¥·¥ã¥É¥¦¥Ñ¥¹¥ï¡¼¥É¤¬ÀßÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó.\n"
+
+#: src/pwunconv.c:160
+#, c-format
+msgid "%s: can't update entry for user %s\n"
+msgstr "%s: ¥æ¡¼¥¶ %s ¤Î¥¨¥ó¥È¥ê¤ò¹¹¿·¤Ç¤­¤Þ¤»¤ó\n"
+
+#: src/pwunconv.c:181
+#, c-format
+msgid "%s: can't delete shadow password file\n"
+msgstr "%s: ¥·¥ã¥É¥¦¡¦¥Ñ¥¹¥ï¡¼¥É¡¦¥Õ¥¡¥¤¥ë¤òºï½ü¤Ç¤­¤Þ¤»¤ó\n"
+
+#: src/su.c:133
+msgid "Sorry."
+msgstr "¿½¤·Ìõ¤´¤¶¤¤¤Þ¤»¤ó."
+
+#: src/su.c:216
+#, c-format
+msgid "%s: must be run from a terminal\n"
+msgstr "%s: Ã¼Ëö¾å¤«¤é¼Â¹Ô¤·¤Æ¤¯¤À¤µ¤¤\n"
+
+#: src/su.c:306
+#, c-format
+msgid "%s: pam_start: error %d\n"
+msgstr "%s: pam_start: ¥¨¥é¡¼ %d\n"
+
+#: src/su.c:336
+#, c-format
+msgid "Unknown id: %s\n"
+msgstr "ÉÔÌÀ¤Ê ID¤Ç¤¹: %s\n"
+
+#: src/su.c:373 src/su.c:390
+#, c-format
+msgid "You are not authorized to su %s\n"
+msgstr "¤¢¤Ê¤¿¤Ï su %s ¤Ëǧ¾Ú¤Ç¤­¤Þ¤»¤ó¤Ç¤·¤¿\n"
+
+#. require own password
+#: src/su.c:385
+msgid "(Enter your own password.)"
+msgstr "(¤¢¤Ê¤¿¼«¿È¤Î¥Ñ¥¹¥ï¡¼¥É¤òÆþÎϤ·¤Æ¤¯¤À¤µ¤¤.)"
+
+#: src/su.c:419
+#, c-format
+msgid ""
+"%s: %s\n"
+"(Ignored)\n"
+msgstr ""
+"%s: %s\n"
+"(̵¸ú)\n"
+
+#: src/su.c:626
+msgid "No shell\n"
+msgstr "¥·¥§¥ë¤¬¤¢¤ê¤Þ¤»¤ó\n"
+
+#. must be a password file!
+#: src/sulogin.c:132
+msgid "No password file\n"
+msgstr "¥Ñ¥¹¥ï¡¼¥É¥Õ¥¡¥¤¥ë¤¬¤¢¤ê¤Þ¤»¤ó\n"
+
+#.
+#. * Fail secure
+#.
+#: src/sulogin.c:174
+msgid "No password entry for 'root'\n"
+msgstr "'root'¤Î¥Ñ¥¹¥ï¡¼¥É¥¨¥ó¥È¥ê¤¬¤¢¤ê¤Þ¤»¤ó\n"
+
+#: src/sulogin.c:190
+msgid ""
+"\n"
+"Type control-d to proceed with normal startup,\n"
+"(or give root password for system maintenance):"
+msgstr ""
+
+#. make new environment active
+#: src/sulogin.c:243
+msgid "Entering System Maintenance Mode\n"
+msgstr "¥·¥¹¥Æ¥à¥á¥ó¥Æ¥Ê¥ó¥¹¥â¡¼¥É¤ØÆþ¤ê¤Þ¤¹\n"
+
+#: src/useradd.c:251
+#, c-format
+msgid "%s: rebuild the group database\n"
+msgstr ""
+
+#: src/useradd.c:260
+#, c-format
+msgid "%s: rebuild the shadow group database\n"
+msgstr ""
+
+#: src/useradd.c:295 src/useradd.c:309 src/usermod.c:981 src/usermod.c:995
+#, c-format
+msgid "%s: invalid numeric argument `%s'\n"
+msgstr ""
+
+#: src/useradd.c:365
+#, c-format
+msgid "%s: unknown gid %s\n"
+msgstr "%s: ÉÔÌÀ¤Ê¥°¥ë¡¼¥×ID %s\n"
+
+#: src/useradd.c:373 src/useradd.c:676 src/useradd.c:1269 src/usermod.c:260
+#: src/usermod.c:1128
+#, c-format
+msgid "%s: unknown group %s\n"
+msgstr "%s: ÉÔÌÀ¤Ê¥°¥ë¡¼¥× %s\n"
+
+#: src/useradd.c:440
+#, fuzzy, c-format
+msgid "group=%s,%u  basedir=%s  skel=%s\n"
+msgstr "¥°¥ë¡¼¥×=%s,%ld ¥Ù¡¼¥¹¥Ç¥£¥ì¥¯¥È¥ê=%s  ¿÷·¿=%s\n"
+
+#: src/useradd.c:444
+#, c-format
+msgid "shell=%s  "
+msgstr "¥·¥§¥ë=%s  "
+
+#: src/useradd.c:446
+#, c-format
+msgid "inactive=%ld  expire=%s"
+msgstr ""
+
+#: src/useradd.c:450
+#, c-format
+msgid "GROUP=%u\n"
+msgstr ""
+
+#: src/useradd.c:451
+#, c-format
+msgid "HOME=%s\n"
+msgstr ""
+
+#: src/useradd.c:453
+#, c-format
+msgid "INACTIVE=%ld\n"
+msgstr ""
+
+#: src/useradd.c:454
+#, c-format
+msgid "EXPIRE=%s\n"
+msgstr ""
+
+#: src/useradd.c:456
+#, c-format
+msgid "SHELL=%s\n"
+msgstr ""
+
+#: src/useradd.c:457
+#, c-format
+msgid "SKEL=%s\n"
+msgstr ""
+
+#: src/useradd.c:498
+#, c-format
+msgid "%s: cannot create new defaults file\n"
+msgstr ""
+
+#: src/useradd.c:503
+#, fuzzy, c-format
+msgid "%s: cannot open new defaults file\n"
+msgstr "%s: ¥°¥ë¡¼¥×¡¦¥Õ¥¡¥¤¥ë¤ò³«¤±¤Þ¤»¤ó\n"
+
+#: src/useradd.c:596 src/useradd.c:608
+#, c-format
+msgid "%s: rename: %s"
+msgstr ""
+
+#: src/useradd.c:697 src/usermod.c:281
+#, c-format
+msgid "%s: group `%s' is a NIS group.\n"
+msgstr ""
+
+#: src/useradd.c:706 src/usermod.c:290
+#, c-format
+msgid "%s: too many groups specified (max %d).\n"
+msgstr ""
+
+#: src/useradd.c:738 src/usermod.c:322
+#, c-format
+msgid "usage: %s\t[-u uid [-o]] [-g group] [-G group,...] \n"
+msgstr "»ÈÍÑË¡: %s\t[-u ¥æ¡¼¥¶ID [-o]] [-g ¥°¥ë¡¼¥×] [-G ¥°¥ë¡¼¥×,...] \n"
+
+#: src/useradd.c:742
+msgid "\t\t[-d home] [-s shell] [-c comment] [-m [-k template]]\n"
+msgstr "\t\t[-d ¥Û¡¼¥à] [-s ¥·¥§¥ë] [-c ¥³¥á¥ó¥È] [-m [-k ¥Æ¥ó¥×¥ì¡¼¥È]]\n"
+
+#: src/useradd.c:745 src/usermod.c:329
+#, fuzzy
+msgid "[-f inactive] [-e expire ] "
+msgstr "[-f Ìµ¸úÆü¿ô] [-e ´ü¸ÂÀÚ¤ìÆü] "
+
+#: src/useradd.c:748
+msgid "[-A program] "
+msgstr "[-A ¥×¥í¥°¥é¥à] "
+
+#: src/useradd.c:750
+#, fuzzy
+msgid "[-p passwd] name\n"
+msgstr "[-p ¥Ñ¥¹¥ï¡¼¥É] [-L|-U] ¥æ¡¼¥¶Ì¾\n"
+
+#: src/useradd.c:753
+#, c-format
+msgid "       %s\t-D [-g group] [-b base] [-s shell]\n"
+msgstr "       %s\t-D [-g ¥°¥ë¡¼¥×] [-b ¥Ù¡¼¥¹] [-s ¥·¥§¥ë]\n"
+
+#: src/useradd.c:756
+#, fuzzy
+msgid "\t\t[-f inactive] [-e expire ]\n"
+msgstr "\t\t[-f Ìµ¸úÆü¿ô] [-e ´ü¸ÂÀÚ¤ìÆü]\n"
+
+#: src/useradd.c:850 src/usermod.c:480
+#, c-format
+msgid "%s: error locking group file\n"
+msgstr ""
+
+#: src/useradd.c:855 src/usermod.c:486
+#, c-format
+msgid "%s: error opening group file\n"
+msgstr ""
+
+#: src/useradd.c:862 src/usermod.c:597
+#, c-format
+msgid "%s: error locking shadow group file\n"
+msgstr ""
+
+#: src/useradd.c:867 src/usermod.c:603
+#, c-format
+msgid "%s: error opening shadow group file\n"
+msgstr ""
+
+#: src/useradd.c:1039
+#, fuzzy, c-format
+msgid "%s: uid %u is not unique\n"
+msgstr "%s: ¥æ¡¼¥¶ID %ld ¤¬½ÅÊ£¤·¤Æ¤¤¤Þ¤¹\n"
+
+#: src/useradd.c:1069
+#, c-format
+msgid "%s: can't get unique uid\n"
+msgstr "%s: °ì°Õ¤Î¥æ¡¼¥¶ID¤ò¼èÆÀ¤Ç¤­¤Þ¤»¤ó\n"
+
+#: src/useradd.c:1174 src/useradd.c:1325 src/usermod.c:1075 src/usermod.c:1086
+#: src/usermod.c:1096 src/usermod.c:1143 src/usermod.c:1187
+#, c-format
+msgid "%s: invalid field `%s'\n"
+msgstr ""
+
+#: src/useradd.c:1189
+#, c-format
+msgid "%s: invalid base directory `%s'\n"
+msgstr "%s: ¥Ù¡¼¥¹¥Ç¥£¥ì¥¯¥È¥ê `%s' ¤ÏÉÔÀµ¤Ç¤¹\n"
+
+#: src/useradd.c:1199
+#, c-format
+msgid "%s: invalid comment `%s'\n"
+msgstr "%s: ¥³¥á¥ó¥È `%s' ¤ÏÉÔÀµ¤Ç¤¹\n"
+
+#: src/useradd.c:1210
+#, c-format
+msgid "%s: invalid home directory `%s'\n"
+msgstr "%s: ¥Û¡¼¥à¥Ç¥£¥ì¥¯¥È¥ê `%s' ¤ÏÉÔÀµ¤Ç¤¹\n"
+
+#: src/useradd.c:1229 src/usermod.c:1110
+#, c-format
+msgid "%s: invalid date `%s'\n"
+msgstr "%s: ÆüÉÕ `%s' ¤ÏÉÔÀµ¤Ç¤¹\n"
+
+#: src/useradd.c:1242
+#, c-format
+msgid "%s: shadow passwords required for -e\n"
+msgstr ""
+
+#: src/useradd.c:1258
+#, c-format
+msgid "%s: shadow passwords required for -f\n"
+msgstr ""
+
+#: src/useradd.c:1336
+#, c-format
+msgid "%s: invalid shell `%s'\n"
+msgstr "%s: ¥·¥§¥ë `%s' ¤ÏÉÔÀµ¤Ç¤¹\n"
+
+#: src/useradd.c:1377
+#, c-format
+msgid "%s: invalid user name `%s'\n"
+msgstr ""
+
+#: src/useradd.c:1413 src/userdel.c:298 src/usermod.c:1255
+#, c-format
+msgid "%s: cannot rewrite password file\n"
+msgstr ""
+
+#: src/useradd.c:1420 src/userdel.c:303 src/usermod.c:1262
+#, c-format
+msgid "%s: cannot rewrite shadow password file\n"
+msgstr ""
+
+#: src/useradd.c:1461 src/userdel.c:367 src/usermod.c:1296
+#, c-format
+msgid "%s: unable to lock password file\n"
+msgstr ""
+
+#: src/useradd.c:1466 src/userdel.c:372 src/usermod.c:1301
+#, c-format
+msgid "%s: unable to open password file\n"
+msgstr ""
+
+#: src/useradd.c:1474 src/userdel.c:379 src/usermod.c:1308
+#, c-format
+msgid "%s: cannot lock shadow password file\n"
+msgstr ""
+
+#: src/useradd.c:1481 src/userdel.c:385 src/usermod.c:1314
+#, c-format
+msgid "%s: cannot open shadow password file\n"
+msgstr ""
+
+#: src/useradd.c:1580 src/usermod.c:1405
+#, c-format
+msgid "%s: error adding authentication method\n"
+msgstr ""
+
+#: src/useradd.c:1604
+#, c-format
+msgid "%s: error adding new password entry\n"
+msgstr ""
+
+#: src/useradd.c:1618
+#, c-format
+msgid "%s: error updating password dbm entry\n"
+msgstr ""
+
+#: src/useradd.c:1634 src/usermod.c:1471
+#, c-format
+msgid "%s: error adding new shadow password entry\n"
+msgstr ""
+
+#: src/useradd.c:1650 src/usermod.c:1488
+#, c-format
+msgid "%s: error updating shadow passwd dbm entry\n"
+msgstr ""
+
+#: src/useradd.c:1682
+#, c-format
+msgid "%s: cannot create directory %s\n"
+msgstr ""
+
+#: src/useradd.c:1806 src/usermod.c:1233
+#, c-format
+msgid "%s: user %s exists\n"
+msgstr "%s: ¥æ¡¼¥¶ %s ¤Ï¸ºß¤·¤Þ¤¹\n"
+
+#: src/useradd.c:1821
+#, 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"
+
+#: src/useradd.c:1854
+#, c-format
+msgid "%s: warning: CREATE_HOME not supported, please use -m instead.\n"
+msgstr ""
+
+#: src/userdel.c:129
+#, c-format
+msgid "usage: %s [-r] name\n"
+msgstr "»ÈÍÑË¡: %s [-r] ¥æ¡¼¥¶Ì¾\n"
+
+#: src/userdel.c:181 src/userdel.c:267
+#, c-format
+msgid "%s: error updating group entry\n"
+msgstr "%s: ¥°¥ë¡¼¥×¡¦¥¨¥ó¥È¥ê¤Î¹¹¿·¤Î¥¨¥é¡¼¤Ç¤¹\n"
+
+#: src/userdel.c:191 src/userdel.c:276
+#, c-format
+msgid "%s: cannot update dbm group entry\n"
+msgstr "%s: DBM¥°¥ë¡¼¥×¡¦¥¨¥ó¥È¥ê¤ò¹¹¿·¤Ç¤­¤Þ¤»¤ó\n"
+
+#: src/userdel.c:219
+#, fuzzy, c-format
+msgid "%s: cannot remove dbm group entry\n"
+msgstr "%s: DBM¥°¥ë¡¼¥×¡¦¥¨¥ó¥È¥ê¤ò¹¹¿·¤Ç¤­¤Þ¤»¤ó\n"
+
+#: src/userdel.c:308
+#, c-format
+msgid "%s: cannot rewrite TCFS key file\n"
+msgstr "%s: TCFS¥­¡¼¡¦¥Õ¥¡¥¤¥ë¤òºÆ½ñ¤­¹þ¤ß¤Ç¤­¤Þ¤»¤ó\n"
+
+#: src/userdel.c:392
+#, c-format
+msgid "%s: cannot lock TCFS key file\n"
+msgstr "%s: TCFS¥­¡¼¡¦¥Õ¥¡¥¤¥ë¤ò¥í¥Ã¥¯¤Ç¤­¤Þ¤»¤ó\n"
+
+#: src/userdel.c:397
+#, c-format
+msgid "%s: cannot open TCFS key file\n"
+msgstr "%s: TCFS¥­¡¼¡¦¥Õ¥¡¥¤¥ë¤ò³«¤±¤Þ¤»¤ó\n"
+
+#: src/userdel.c:408
+#, c-format
+msgid "%s: cannot open group file\n"
+msgstr "%s: ¥°¥ë¡¼¥×¡¦¥Õ¥¡¥¤¥ë¤ò³«¤±¤Þ¤»¤ó\n"
+
+#: src/userdel.c:419
+#, c-format
+msgid "%s: cannot open shadow group file\n"
+msgstr "%s: ¥·¥ã¥É¥¦¡¦¥°¥ë¡¼¥×¡¦¥Õ¥¡¥¤¥ë¤¬³«¤±¤Þ¤»¤ó\n"
+
+#: src/userdel.c:451 src/userdel.c:468
+#, c-format
+msgid "%s: error deleting authentication\n"
+msgstr ""
+
+#: src/userdel.c:479
+#, c-format
+msgid "%s: error deleting password entry\n"
+msgstr "%s: ¥Ñ¥¹¥ï¡¼¥É¡¦¥¨¥ó¥È¥êºï½ü¤Î¥¨¥é¡¼¤Ç¤¹\n"
+
+#: src/userdel.c:485
+#, c-format
+msgid "%s: error deleting shadow password entry\n"
+msgstr "%s: ¥·¥ã¥É¥¦¡¦¥Ñ¥¹¥ï¡¼¥É¡¦¥¨¥ó¥È¥êºï½ü¤Î¥¨¥é¡¼¤Ç¤¹\n"
+
+#: src/userdel.c:496
+#, c-format
+msgid "%s: error deleting TCFS entry\n"
+msgstr "%s: TCFS¥¨¥ó¥È¥êºï½ü¤Î¥¨¥é¡¼¤Ç¤¹\n"
+
+#: src/userdel.c:510
+#, c-format
+msgid "%s: error deleting password dbm entry\n"
+msgstr "%s: ¥Ñ¥¹¥ï¡¼¥ÉDBM¥¨¥ó¥È¥êºï½ü¤Î¥¨¥é¡¼¤Ç¤¹\n"
+
+#: src/userdel.c:533
+#, c-format
+msgid "%s: error deleting shadow passwd dbm entry\n"
+msgstr ""
+
+#: src/userdel.c:569
+#, c-format
+msgid "%s: user %s is currently logged in\n"
+msgstr "%s: ¥æ¡¼¥¶ %s ¤Ï¸½ºß¥í¥°¥¤¥óÃæ¤Ç¤¹\n"
+
+#: src/userdel.c:659
+#, c-format
+msgid "%s: warning: %s not owned by %s, not removing\n"
+msgstr "%s: ·Ù¹ð: %s¤Ï %s ¤Î½êÍ­¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó, ºï½ü¤Ï¹Ô¤¤¤Þ¤»¤ó\n"
+
+#: src/userdel.c:666
+#, c-format
+msgid "%s: warning: can't remove "
+msgstr ""
+
+#: src/userdel.c:758 src/usermod.c:1023
+#, c-format
+msgid "%s: user %s does not exist\n"
+msgstr "%s: ¥æ¡¼¥¶ %s ¤Ï¸ºß¤·¤Þ¤»¤ó\n"
+
+#: src/userdel.c:770 src/usermod.c:1039
+#, c-format
+msgid "%s: user %s is a NIS user\n"
+msgstr "%s: ¥æ¡¼¥¶ %s ¤Ï NIS ¥æ¡¼¥¶¤Ç¤¹\n"
+
+#: src/userdel.c:799
+#, c-format
+msgid "%s: %s not owned by %s, not removing\n"
+msgstr "%s: %s¤Ï %s¤Î½êÍ­¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó, ºï½ü¤Ï¹Ô¤¤¤Þ¤»¤ó\n"
+
+#: src/userdel.c:818
+#, c-format
+msgid "%s: not removing directory %s (would remove home of user %s)\n"
+msgstr "%s: ¥Ç¥£¥ì¥¯¥È¥ê%s ¤Îºï½ü¤Ï¹Ô¤¤¤Þ¤»¤ó (would remove home of user %s)\n"
+
+#: src/userdel.c:830
+#, c-format
+msgid "%s: error removing directory %s\n"
+msgstr "%s: ¥Ç¥£¥ì¥¯¥È¥ê %s ¤Îºï½ü¤Î¥¨¥é¡¼¤Ç¤¹\n"
+
+#: src/usermod.c:326
+msgid "\t\t[-d home [-m]] [-s shell] [-c comment] [-l new_name]\n"
+msgstr "\t\t[-d ¥Û¡¼¥à [-m]] [-s ¥·¥§¥ë] [-c ¥³¥á¥ó¥È] [-l ¿·µ¬¥æ¡¼¥¶Ì¾]\n"
+
+#: src/usermod.c:332
+#, fuzzy
+msgid "[-A {DEFAULT|program},... ] "
+msgstr "[-A {DEFAULT|¥×¥í¥°¥é¥à},...] "
+
+#: src/usermod.c:334
+msgid "[-p passwd] [-L|-U] name\n"
+msgstr "[-p ¥Ñ¥¹¥ï¡¼¥É] [-L|-U] ¥æ¡¼¥¶Ì¾\n"
+
+#: src/usermod.c:514
+#, c-format
+msgid "%s: out of memory in update_group\n"
+msgstr "%s: update_group Ãæ¤Ë¥á¥â¥ê¤¬ÉÔ­¤·¤Þ¤·¤¿\n"
+
+#: src/usermod.c:641
+#, c-format
+msgid "%s: out of memory in update_gshadow\n"
+msgstr "%s: update_shdow Ãæ¤Ë¥á¥â¥ê¤¬ÉÔ­¤·¤Þ¤·¤¿\n"
+
+#: src/usermod.c:1210
+#, c-format
+msgid "%s: no flags given\n"
+msgstr "%s: ¤Ò¤È¤Ä¤â¥Õ¥é¥°¤¬»ØÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó\n"
+
+#: src/usermod.c:1217
+#, c-format
+msgid "%s: shadow passwords required for -e and -f\n"
+msgstr "%s: ¥·¥ã¥É¥¦¡¦¥Ñ¥¹¥ï¡¼¥É¤Ë¤Ï -e ¤ª¤è¤Ó -e ¤¬É¬ÍפǤ¹\n"
+
+#: src/usermod.c:1239
+#, fuzzy, c-format
+msgid "%s: uid %lu is not unique\n"
+msgstr "%s: ¥æ¡¼¥¶ID %ld ¤¬½ÅÊ£¤·¤Æ¤¤¤Þ¤¹\n"
+
+#: src/usermod.c:1392
+#, c-format
+msgid "%s: error deleting authentication method\n"
+msgstr "%s: ¥Ñ¥¹¥ï¡¼¥Éǧ¾ÚÊýË¡¤Îºï½ü¤Î¥¨¥é¡¼¤Ç¤¹\n"
+
+#: src/usermod.c:1418
+#, c-format
+msgid "%s: error changing authentication method\n"
+msgstr "%s: ¥Ñ¥¹¥ï¡¼¥Éǧ¾ÚÊýË¡¤ÎÊѹ¹¤Î¥¨¥é¡¼¤Ç¤¹\n"
+
+#: src/usermod.c:1436
+#, c-format
+msgid "%s: error changing password entry\n"
+msgstr "%s: ¥Ñ¥¹¥ï¡¼¥É¡¦¥¨¥ó¥È¥êÊѹ¹¤Î¥¨¥é¡¼¤Ç¤¹\n"
+
+#: src/usermod.c:1442
+#, c-format
+msgid "%s: error removing password entry\n"
+msgstr "%s: ¥Ñ¥¹¥ï¡¼¥É¡¦¥¨¥ó¥È¥êºï½ü¤Î¥¨¥é¡¼¤Ç¤¹\n"
+
+#: src/usermod.c:1451
+#, c-format
+msgid "%s: error adding password dbm entry\n"
+msgstr "%s: ¥Ñ¥¹¥ï¡¼¥ÉDBM¥¨¥ó¥È¥êÄɲäΥ¨¥é¡¼¤Ç¤¹\n"
+
+#: src/usermod.c:1459
+#, c-format
+msgid "%s: error removing passwd dbm entry\n"
+msgstr "%s: ¥Ñ¥¹¥ï¡¼¥ÉDBM¥¨¥ó¥È¥êºï½ü¤Î¥¨¥é¡¼¤Ç¤¹\n"
+
+#: src/usermod.c:1478
+#, c-format
+msgid "%s: error removing shadow password entry\n"
+msgstr "%s: ¥·¥ã¥É¥¦¡¦¥Ñ¥¹¥ï¡¼¥É¡¦¥¨¥ó¥È¥êºï½ü¤Î¥¨¥é¡¼¤Ç¤¹\n"
+
+#: src/usermod.c:1495
+#, c-format
+msgid "%s: error removing shadow passwd dbm entry\n"
+msgstr "%s: ¥·¥ã¥É¥¦¥Ñ¥¹¥ï¡¼¥É DBM¥¨¥ó¥È¥ê ¤Îºï½ü¤Î¥¨¥é¡¼\n"
+
+#: src/usermod.c:1524
+#, c-format
+msgid "%s: directory %s exists\n"
+msgstr "%s: ¥Ç¥£¥ì¥¯¥È¥ê %s¤Ï¸ºß¤·¤Þ¤¹\n"
+
+#: src/usermod.c:1533
+#, c-format
+msgid "%s: can't create %s\n"
+msgstr "%s: %s¤ò ºîÀ®¤Ç¤­¤Þ¤»¤ó\n"
+
+#: src/usermod.c:1539
+#, c-format
+msgid "%s: can't chown %s\n"
+msgstr "%s: %s¤òchown¤Ç¤­¤Þ¤»¤ó\n"
+
+#: src/usermod.c:1556
+#, c-format
+msgid "%s: cannot rename directory %s to %s\n"
+msgstr "%s: ¥Ç¥£¥ì¥¯¥È¥ê%s¤ò %s¤ØÌ¾Á°Êѹ¹¤Ç¤­¤Þ¤»¤ó\n"
+
+#. better leave it alone
+#: src/usermod.c:1653
+#, c-format
+msgid "%s: warning: %s not owned by %s\n"
+msgstr "%s: ·Ù¹ð: %s ¤Ï%s¤Î½êÍ­¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó\n"
+
+#: src/usermod.c:1659
+msgid "failed to change mailbox owner"
+msgstr "mailbox¤Î½êÍ­¼Ô¤ÎÊѹ¹¤Ë¼ºÇÔ¤·¤Þ¤·¤¿"
+
+#: src/usermod.c:1667
+msgid "failed to rename mailbox"
+msgstr "mailbox¤Î̾Á°Êѹ¹¤Ë¼ºÇÔ¤·¤Þ¤·¤¿"
+
+#: src/vipw.c:104
+#, c-format
+msgid ""
+"\n"
+"%s: %s is unchanged\n"
+msgstr ""
+"\n"
+"%s: %s ¤ÎÊѹ¹¤Ï¹Ô¤ï¤ì¤Þ¤»¤ó\n"
+
+#: src/vipw.c:132
+msgid "Couldn't lock file"
+msgstr "¥Õ¥¡¥¤¥ë¤ò¥í¥Ã¥¯¤Ç¤­¤Þ¤»¤ó"
+
+#: src/vipw.c:141
+msgid "Couldn't make backup"
+msgstr "¥Ð¥Ã¥¯¥¢¥Ã¥×¤òºîÀ®¤Ç¤­¤Þ¤»¤ó"
+
+#: src/vipw.c:206
+#, c-format
+msgid "%s: can't restore %s: %s (your changes are in %s)\n"
+msgstr "%s: %s¤òÉüµì¤Ç¤­¤Þ¤»¤ó¤Ç¤·¤¿: %s (¤¢¤Ê¤¿¤ÎÊѹ¹¤Ï%s¤Ë¤¢¤ê¤Þ¤¹)\n"
+
+#: src/vipw.c:244
+msgid ""
+"Usage:\n"
+"`vipw' edits /etc/passwd        `vipw -s' edits /etc/shadow\n"
+"`vigr' edits /etc/group         `vigr -s' edits /etc/gshadow\n"
+msgstr ""
+"»ÈÍÑË¡:\n"
+"`vipw' /etc/passwd ¤òÊÔ½¸       `vipw -s' /etc/shadow¤òÊÔ½¸\n"
+"`vigr' /etc/group¤òÊÔ½¸         `vigr -s' /etc/gshadow¤òÊÔ½¸\n"
+
+#~ msgid "%s: gid %ld is not unique\n"
+#~ msgstr "%s: ¥°¥ë¡¼¥×ID %ld ¤Ï½ÅÊ£¤·¤Æ¤¤¤Þ¤¹\n"
+
+#, fuzzy
+#~ msgid "unknown gid: %u\n"
+#~ msgstr "ÉÔÌÀ¤Ê¥°¥ë¡¼¥×ID¤Ç¤¹: %d\n"
+
+#~ msgid "%s: uid %d is not unique\n"
+#~ msgstr "%s: ¥æ¡¼¥¶ID %d ¤Ï½ÅÊ£¤·¤Æ¤¤¤Þ¤¹\n"
+
+#~ msgid "user %s: bad UID (%d)\n"
+#~ msgstr "¥æ¡¼¥¶ %s: ÉÔÀµ¤Ê¥æ¡¼¥¶ID¤Ç¤¦¤¹ (%d)\n"
+
+#~ msgid "%s: no aging information present\n"
+#~ msgstr "$s: ´ü¸Â¾ðÊ󤬤¢¤ê¤Þ¤»¤ó\n"
+
+#~ msgid "group %s: bad GID (%d)\n"
+#~ msgstr "¥°¥ë¡¼¥× %s: ÉÔÀµ¤Ê¥°¥ë¡¼¥×ID (%d) ¤Ç¤¹\n"
+
+#~ msgid "%s: permission denied (shell).\n"
+#~ msgstr "%s: ¸¢¸Â¤¬µñÈݤµ¤ì¤Þ¤·¤¿(¥·¥§¥ë).\n"
+
+#~ msgid "[-p passwd] [-n] [-r] name\n"
+#~ msgstr "[-p ¥Ñ¥¹¥ï¡¼¥É] [-n] [-r] ¥æ¡¼¥¶Ì¾\n"
diff --git a/po/ko.gmo b/po/ko.gmo
new file mode 100644 (file)
index 0000000..8a88e88
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..d3eace8
--- /dev/null
+++ b/po/ko.po
@@ -0,0 +1,2477 @@
+# shadow korean translations
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# Hwang, SangJin <accel@accellinux.org>, 1999.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: shadow\n"
+"POT-Creation-Date: 2002-01-06 16:13+0100\n"
+"PO-Revision-Date: 2001-02-03 15:09+0900\n"
+"Last-Translator: Hwang, Sang-Jin <violiet@suse.de>\n"
+"Language-Team: Korean <ko@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=euc-kr\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: libmisc/addgrps.c:60
+#, c-format
+msgid "Warning: unknown group %s\n"
+msgstr "°æ°í: ¾Ë ¼ö ¾ø´Â ±×·ì(%s)\n"
+
+#: libmisc/addgrps.c:71
+msgid "Warning: too many groups\n"
+msgstr "°æ°í: ±×·ì¼ö°¡ ³Ê¹« ¸¹À½\n"
+
+#: libmisc/age.c:77
+msgid "Your password has expired."
+msgstr "ÆÐ½º¿öµå »ç¿ë±âÇÑÀÌ Áö³µ½À´Ï´Ù."
+
+#: libmisc/age.c:80
+msgid "Your password is inactive."
+msgstr "ÆÐ½º¿öµå »ç¿ë±â°£ Ãʰú·Î »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù."
+
+#: libmisc/age.c:83
+msgid "Your login has expired."
+msgstr "·Î±×ÀΠ»ç¿ë±âÇÑÀÌ Áö³µ½À´Ï´Ù"
+
+#: libmisc/age.c:96
+msgid "  Contact the system administrator.\n"
+msgstr "  ½Ã½ºÅÛ °ü¸®ÀÚ¿Í »ó´ãÇϽʽÿÀ.\n"
+
+#: libmisc/age.c:99
+msgid "  Choose a new password.\n"
+msgstr "  »õ·Î¿î ÆÐ½º¿öµå¸¦ ¼±ÅÃÇϼ¼¿ä.\n"
+
+#: libmisc/age.c:176
+#, c-format
+msgid "Your password will expire in %ld days.\n"
+msgstr "ÆÐ½º¿öµå »ç¿ë±âÇÑÀÌ %ldÀÏ¿¡ ³¡³³´Ï´Ù.\n"
+
+#: libmisc/age.c:178
+msgid "Your password will expire tomorrow.\n"
+msgstr "ÆÐ½º¿öµå »ç¿ë±âÇÑÀÌ ³»ÀÏ ³¡³³´Ï´Ù.\n"
+
+#: libmisc/age.c:180
+msgid "Your password will expire today.\n"
+msgstr "ÆÐ½º¿öµå »ç¿ë±âÇÑÀÌ ¿À´Ã ³¡³³´Ï´Ù.\n"
+
+#: libmisc/chowntty.c:113
+#, c-format
+msgid "Unable to change tty %s"
+msgstr "tty(´Ü¸»Å͹̳Î) %s·Î º¯°æÇÒ ¼ö ¾øÀ½"
+
+#: libmisc/env.c:160
+msgid "Environment overflow\n"
+msgstr ""
+
+#: libmisc/env.c:200
+#, c-format
+msgid "You may not change $%s\n"
+msgstr "$%s´Â º¯°æµÇ¾î ÀÖÁö ¾ÊÀº°Í °°½À´Ï´Ù\n"
+
+#: libmisc/failure.c:238
+#, c-format
+msgid "%d %s since last login.  Last was %s on %s.\n"
+msgstr "¸¶Áö¸· ·Î±×ÀÎÀ¸·ÎºÎÅÍ %dȸÀÇ %sÀÔ´Ï´Ù. ¸¶Áö¸· ·Î±×ÀÎÀº %s Àå¼Ò %s.\n"
+
+#: libmisc/failure.c:239
+msgid "failures"
+msgstr "½ÇÆÐ"
+
+#: libmisc/failure.c:239
+msgid "failure"
+msgstr "½ÇÆÐ"
+
+#: libmisc/limits.c:397
+msgid "Too many logins.\n"
+msgstr "·Î±×Àμö°¡ ¸¹½À´Ï´Ù.\n"
+
+#: libmisc/login_desrpc.c:63
+#, c-format
+msgid "Password does not decrypt secret key for %s.\n"
+msgstr "ÆÐ½º¿öµå°¡ %sÀÇ ºñ¹Ð۸¦ Çؼ®ÇÒ ¼ö ¾øÀ½.\n"
+
+#: libmisc/login_desrpc.c:69
+#, c-format
+msgid "Could not set %s's secret key: is the keyserv daemon running?\n"
+msgstr "%sÀÇ ºñ¹Ð¿­¼è¸¦ ¼³Á¤ÇÒ ¼ö ¾ø½À´Ï´Ù: keyservµ¥¸óÀÌ ÇöÀç ½ÇÇàÁßÀԴϱî?\n"
+
+#: libmisc/mail.c:62 libmisc/mail.c:77
+msgid "You have new mail."
+msgstr "»õ·Î¿î ¸ÞÀÏÀÌ µµÂøÇÏ¿´½À´Ï´Ù."
+
+#: libmisc/mail.c:73
+msgid "No mail."
+msgstr "¸ÞÀÏ ¾øÀ½."
+
+#: libmisc/mail.c:75
+msgid "You have mail."
+msgstr "¸ÞÀÏÀÌ ÀÖ½À´Ï´Ù."
+
+#: libmisc/obscure.c:281 src/passwd.c:244
+#, c-format
+msgid "Bad password: %s.  "
+msgstr "À߸øµÈ ÆÐ½º¿öµå: %s.  "
+
+#: libmisc/pam_pass.c:42
+#, c-format
+msgid "passwd: pam_start() failed, error %d\n"
+msgstr "ÆÐ½º¿öµå: pam_start()¿¡ ½ÇÆÐÇß½À´Ï´Ù, ¿À·ù %d\n"
+
+#: libmisc/pam_pass.c:49
+#, c-format
+msgid "passwd: %s\n"
+msgstr "ÆÐ½º¿öµå: %s\n"
+
+#: libmisc/setupenv.c:211
+#, c-format
+msgid "Unable to cd to \"%s\"\n"
+msgstr "µð·ºÅ丮¸¦ \"%s\"·Î À̵¿ÇÒ ¼ö ¾ø½À´Ï´Ù\n"
+
+#: libmisc/setupenv.c:219
+msgid "No directory, logging in with HOME=/"
+msgstr "µð·ºÅ丮°¡ ¾øÀ½, ·çÆ® µð·ºÅ丮(/)·Î ·Î±×ÀÎÇÕ´Ï´Ù"
+
+#: libmisc/shell.c:78
+#, c-format
+msgid "Executing shell %s\n"
+msgstr "%s ½©À» ½ÇÇàÇÕ´Ï´Ù\n"
+
+#.
+#. * 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 ...
+#.
+#: libmisc/shell.c:122
+#, c-format
+msgid "Cannot execute %s"
+msgstr "%s¸¦ ½ÇÇàÇÒ ¼ö ¾øÀ½"
+
+#: libmisc/suauth.c:99
+msgid "Access to su to that account DENIED.\n"
+msgstr "ÀÌ ¾îÄ«¿îÆ®·Î su·Î Á¢±ÙÁ¦¾îÇϴ Çã°¡°¡ ¾øÀ½.\n"
+
+#: libmisc/suauth.c:106
+msgid "Password authentication bypassed.\n"
+msgstr "ÆÐ½º¿öµå ÀÎÁõÀÌ ¹«½ÃµÇ¾ú½À´Ï´Ù.\n"
+
+#: libmisc/suauth.c:113
+msgid "Please enter your OWN password as authentication.\n"
+msgstr "»ç¿ëÀÚ ÀÚ½ÅÀÇ ÆÐ½º¿öµå¸¦ ÀÎÁõÀ¸·Î½á ÀÔ·ÂÀ» ÇϽʽÿÀ.\n"
+
+#: libmisc/sub.c:61
+#, c-format
+msgid "Invalid root directory \"%s\"\n"
+msgstr "Ȩ µð·ºÅ丮 \"%s\"°¡ À߸øµÇ¾ú½À´Ï´Ù\n"
+
+#: libmisc/sub.c:73
+#, c-format
+msgid "Can't change root directory to \"%s\"\n"
+msgstr "·çÆ® µð·ºÅ丮¸¦ \"%s\"·Î º¯°æÇÒ ¼ö ¾øÀ½\n"
+
+#: libmisc/xmalloc.c:28
+#, c-format
+msgid "malloc(%d) failed\n"
+msgstr "malloc(%d)¿¡ ½ÇÆÐÇßÀ½\n"
+
+#: lib/dialchk.c:71
+msgid "Dialup Password: "
+msgstr "´ÙÀ̾ó¾÷ ÆÐ½º¿öµå: "
+
+#: lib/getdef.c:276
+msgid "Could not allocate space for config info.\n"
+msgstr "¼³Á¤ Á¤º¸¸¦ À§ÇÑ °ø°£ È®º¸¸¦ ÇÒ ¼ö ¾ø½À´Ï´Ù.\n"
+
+#.
+#. * Item was never found.
+#.
+#: lib/getdef.c:330
+#, c-format
+msgid "configuration error - unknown item '%s' (notify administrator)\n"
+msgstr "¼³Á¤ ¿À·ù - ¾Ë ¼ö ¾ø´ÂŰ '%s'°¡ ÀÖÀ½ (°ü¸®ÀÚ¿¡°Ô ¿¬¶ô¹Ù¶÷)\n"
+
+#: lib/getdef.c:417
+#, c-format
+msgid "error - lookup '%s' failed\n"
+msgstr "¿À·ù - '%s'ÀÇ °Ë»ö¿¡ ½ÇÆÐ\n"
+
+#: lib/getdef.c:425
+#, c-format
+msgid "%s not found\n"
+msgstr "%s°¡ ¹ß°ßµÇÁö ¾ÊÀ½\n"
+
+#.
+#. * get the password from her, and set the salt for
+#. * the decryption from the group file.
+#.
+#: lib/pwauth.c:54 src/newgrp.c:348
+msgid "Password: "
+msgstr "ÆÐ½º¿öµå: "
+
+#: lib/pwauth.c:56
+#, c-format
+msgid "%s's Password: "
+msgstr "%sÀÇ ÆÐ½º¿öµå: "
+
+#: lib/pwauth.c:270
+msgid "(Echo on) "
+msgstr ""
+
+#: lib/strerror.c:20
+#, c-format
+msgid "Unknown error %d"
+msgstr "¾Ë ¼ö ¾ø´Â ¿À·ù %d"
+
+#: src/chage.c:116
+#, c-format
+msgid ""
+"Usage: %s [-l] [-m min_days] [-M max_days] [-W warn]\n"
+"\t[-I inactive] [-E expire] [-d last_day] user\n"
+msgstr ""
+"»ç¿ë¹ý: %s [-l] [-m ÃÖ¼ÒÀϼö] [-M ÃÖ´ëÀϼö] [-W °æ°íÀϼö]\n"
+"\t[-I ¹«È¿Àϼö] [-E ¸¸·áÀϼö] [-d »õ ÆÐ½º¿öµå º¯°æÀÏ] »ç¿ëÀÚ¸í\n"
+
+#: src/chage.c:122
+#, c-format
+msgid "Usage: %s [-l] [-m min_days] [-M max_days] [-d last_day] user\n"
+msgstr "»ç¿ë¹ý: %s [-l] [-m ÃÖ¼ÒÀϼö] [-M ÃÖ´ëÀϼö] [-W °æ°íÀϼö] »ç¿ëÀÚ\n"
+
+#: src/chage.c:157
+#, fuzzy
+msgid ""
+"Enter the new value, or press ENTER for the default\n"
+"\n"
+msgstr "»õ·Î¿î °ªÀ» ³Ö°Å³ª, µðÆúÆ® °ªÀ» ¿øÇÑ´Ù¸é ENTER۸¦ Ä¡¼¼¿ä.\n"
+
+#: src/chage.c:160
+msgid "Minimum Password Age"
+msgstr "ÃÖ¼Ò ÆÐ½º¿öµå ¿¬·É"
+
+#: src/chage.c:166
+msgid "Maximum Password Age"
+msgstr "ÃÖ´ë ÆÐ½º¿öµå ¿¬·É"
+
+#: src/chage.c:174
+msgid "Last Password Change (YYYY-MM-DD)"
+msgstr "¸¶Áö¸· ÆÐ½º¿öµå º¯°æ (YYYY-MM-DD)"
+
+#: src/chage.c:183
+msgid "Password Expiration Warning"
+msgstr "ÆÐ½º¿öµå »ç¿ë¸¸±âÀÏ Ãʰú °æ°í"
+
+#: src/chage.c:189
+msgid "Password Inactive"
+msgstr "ÆÐ½º¿öµå°¡ À¯È¿ÇÏÁö ¾ÊÀ½"
+
+#: src/chage.c:197
+msgid "Account Expiration Date (YYYY-MM-DD)"
+msgstr "°èÁ¤ »ç¿ëÀÏ ¸¸±â ÀÏ(YYYY-MM-DD)"
+
+#.
+#. * 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.
+#.
+#: src/chage.c:248
+#, c-format
+msgid "Minimum:\t%ld\n"
+msgstr "ÃÖ¼Ò:\t%ld\n"
+
+#: src/chage.c:249
+#, c-format
+msgid "Maximum:\t%ld\n"
+msgstr "ÃÖ´ë:\t%ld\n"
+
+#: src/chage.c:251
+#, c-format
+msgid "Warning:\t%ld\n"
+msgstr "°æ°í:\t%ld\n"
+
+#: src/chage.c:252
+#, c-format
+msgid "Inactive:\t%ld\n"
+msgstr "À¯È¿ÇÏÁö ¾ÊÀ½:\t%ld\n"
+
+#.
+#. * 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.
+#.
+#: src/chage.c:260
+msgid "Last Change:\t\t"
+msgstr "¸¶Áö¸· º¯°æ:\t\t"
+
+#: src/chage.c:262 src/chage.c:276 src/chage.c:293 src/chage.c:306
+msgid "Never\n"
+msgstr "ºÒ°¡\n"
+
+#.
+#. * The password expiration date is determined from the last change
+#. * date plus the number of days the password is valid for.
+#.
+#: src/chage.c:273
+msgid "Password Expires:\t"
+msgstr "ÆÐ½º¿öµå ¸¸±â:\t"
+
+#.
+#. * 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.
+#.
+#: src/chage.c:290
+msgid "Password Inactive:\t"
+msgstr "ÆÐ½º¿öµå°¡ À¯È¿ÇÏÁö ¾ÊÀ½:\t"
+
+#.
+#. * The account will expire on the given date regardless of the
+#. * password expiring or not.
+#.
+#: src/chage.c:304
+msgid "Account Expires:\t"
+msgstr "°èÁ¤ ¸¸±â:\t"
+
+#: src/chage.c:468
+#, c-format
+msgid "%s: do not include \"l\" with other flags\n"
+msgstr "%s: \"l\" ¿Í ÇÔ²² ´Ù¸¥ flags¸¦ Æ÷ÇÔÇÏÁö ¸»°Í\n"
+
+#: src/chage.c:481 src/chage.c:652 src/login.c:516
+#, c-format
+msgid "%s: permission denied\n"
+msgstr "%s: Á¢±Ù±ÇÇÑ ¾øÀ½\n"
+
+#: src/chage.c:512 src/chpasswd.c:139 src/groupadd.c:529 src/groupdel.c:322
+#: src/groupmod.c:520 src/newusers.c:381 src/useradd.c:1754 src/userdel.c:717
+#: src/usermod.c:1732
+#, fuzzy, c-format
+msgid "%s: PAM authentication failed\n"
+msgstr "%s: ÀÎÁõ¹æ¹ý Ãß°¡Çϴµ¥ ¿À·ù\n"
+
+#: src/chage.c:533 src/chpasswd.c:157
+#, c-format
+msgid "%s: can't lock password file\n"
+msgstr "%s: ÆÐ½º¿öµå ÆÄÀÏÀ» lockÇÒ ¼ö ¾ø½À´Ï´Ù\n"
+
+#: src/chage.c:544 src/chpasswd.c:162
+#, c-format
+msgid "%s: can't open password file\n"
+msgstr "ÆÐ½º¿öµå ÆÄÀÏÀ» ¿­¼ö°¡ ¾ø½À´Ï´Ù\n"
+
+#: src/chage.c:552
+#, c-format
+msgid "%s: unknown user: %s\n"
+msgstr "¾Ë¼ö¾ø´Â »ç¿ëÀÚ: %s\n"
+
+#: src/chage.c:571
+#, fuzzy, c-format
+msgid "%s: can't lock shadow password file"
+msgstr "½¦µµ¿ì ÆÐ½º¿öµå ÆÄÀÏÀ» lockÇÒ ¼ö ¾ø½À´Ï´Ù\n"
+
+#: src/chage.c:579
+#, fuzzy, c-format
+msgid "%s: can't open shadow password file"
+msgstr "½¦µµ¿ì ÆÐ½º¿öµå ÆÄÀÏÀ» ¿­¼ö°¡ ¾ø½À´Ï´Ù\n"
+
+#: src/chage.c:674
+#, c-format
+msgid "Changing the aging information for %s\n"
+msgstr "%sÀÇ ¿¬·É¿¡ ´ëÇÑ Á¤º¸¸¦ °»½ÅÇÕ´Ï´Ù %s\n"
+
+#: src/chage.c:677
+#, c-format
+msgid "%s: error changing fields\n"
+msgstr "%s: Ç׸ñÀ» ¹Ù²Ù´Â µµÁß ¿À·ù°¡ ¹ß»ýÇß½À´Ï´Ù\n"
+
+#: src/chage.c:705 src/chage.c:771 src/pwunconv.c:174
+#, c-format
+msgid "%s: can't update password file\n"
+msgstr "ÆÐ½º¿öµå ÆÄÀÏÀ» ¾÷µ¥ÀÌÆ® ÇÒ ¼ö ¾ø½À´Ï´Ù\n"
+
+#: src/chage.c:737 src/pwunconv.c:168
+#, c-format
+msgid "%s: can't update shadow password file\n"
+msgstr "½¦µµ¿ì ÆÐ½º¿öµå ÆÄÀÏÀ» ¾÷µ¥ÀÌÆ® ÇÒ ¼ö ¾ø½À´Ï´Ù\n"
+
+#: src/chage.c:789 src/chage.c:805 src/chfn.c:570 src/chsh.c:382
+#: src/passwd.c:747 src/passwd.c:859
+msgid "Error updating the DBM password entry.\n"
+msgstr "DBM Æä½º¿öµå ÀԷºκÐÀ» ¾÷µ¥ÀÌÆ® Çϴµ¥ ¿À·ù°¡ ¹ß»ýÇß½À´Ï´Ù.\n"
+
+#: src/chage.c:823
+#, c-format
+msgid "%s: can't rewrite shadow password file\n"
+msgstr "½¦µµ¿ì ÆÐ½º¿öµå ÆÄÀÏÀ» ´Ù½Ã ÀÛ¼ºÇÒ ¼ö ¾ø½À´Ï´Ù\n"
+
+#: src/chage.c:838
+#, c-format
+msgid "%s: can't rewrite password file\n"
+msgstr "ÆÐ½º¿öµå ÆÄÀÏÀ» ´Ù½Ã ÀÛ¼ºÇÒ ¼ö ¾ø½À´Ï´Ù\n"
+
+#: src/chage.c:857 src/chpasswd.c:343 src/groupadd.c:590 src/groupdel.c:409
+#: src/groupmod.c:604 src/newusers.c:628 src/useradd.c:1869 src/userdel.c:849
+#: src/usermod.c:1811
+#, fuzzy, c-format
+msgid "%s: PAM chauthtok failed\n"
+msgstr "%s: ÆÄÀÏ Àá±ÝÀ» Ç® ¼ö ¾ø½À´Ï´Ù\n"
+
+#: src/chfn.c:83
+#, 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"
+
+#: src/chfn.c:88
+#, 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"
+
+#: src/chfn.c:139
+msgid "Enter the new value, or press ENTER for the default\n"
+msgstr "»õ·Î¿î °ªÀ» ³Ö°Å³ª, µðÆúÆ®¸¦ ¿øÇϸ頿£Å͸¦ Ä¡¼¼¿ä\n"
+
+#: src/chfn.c:142
+msgid "Full Name"
+msgstr "À̸§"
+
+#: src/chfn.c:144
+#, c-format
+msgid "\tFull Name: %s\n"
+msgstr "\tÀ̸§: %s\n"
+
+#: src/chfn.c:147
+msgid "Room Number"
+msgstr "¹æ ¹øÈ£"
+
+#: src/chfn.c:149
+#, c-format
+msgid "\tRoom Number: %s\n"
+msgstr "\t¹æ ¹øÈ£: %s\n"
+
+#: src/chfn.c:152
+msgid "Work Phone"
+msgstr "Á÷Àå ¹øÈ­¹øÈ£"
+
+#: src/chfn.c:154
+#, c-format
+msgid "\tWork Phone: %s\n"
+msgstr "\tÁ÷Àå ÀüÈ­¹øÈ£: %s\n"
+
+#: src/chfn.c:157
+msgid "Home Phone"
+msgstr "Áý ÀüÈ­¹øÈ£"
+
+#: src/chfn.c:159
+#, c-format
+msgid "\tHome Phone: %s\n"
+msgstr "\tÁý ÀüÈ­¹øÈ£: %s\n"
+
+#: src/chfn.c:162
+msgid "Other"
+msgstr "±âŸ"
+
+#: src/chfn.c:271 src/chfn.c:281 src/chfn.c:291 src/chfn.c:301 src/chfn.c:311
+#: src/chfn.c:379 src/passwd.c:1115
+#, c-format
+msgid "%s: Permission denied.\n"
+msgstr "Á¢±Ù±ÇÇÑ ¾øÀ½.\n"
+
+#: src/chfn.c:332 src/chsh.c:190 src/passwd.c:1165
+#, c-format
+msgid "%s: Unknown user %s\n"
+msgstr "¾Ë¼ö¾ø´Â »ç¿ëÀÚ %s\n"
+
+#: src/chfn.c:341 src/chsh.c:198 src/passwd.c:1096
+#, c-format
+msgid "%s: Cannot determine your user name.\n"
+msgstr "%s: »ç¿ëÀÚ À̸§À» ÀνÄÇÒ ¼ö ¾ø½À´Ï´Ù.\n"
+
+#: src/chfn.c:358 src/chsh.c:215
+#, c-format
+msgid "%s: cannot change user `%s' on NIS client.\n"
+msgstr "NIS Å¬¶óÀÌ¾ðÆ®¿¡¼­ '%s'ÀÇ »ç¿ëÀÚ À̸§À» º¯°æÇÒ ¼ö ¾ø½À´Ï´Ù.\n"
+
+#: src/chfn.c:366 src/chsh.c:223
+#, c-format
+msgid "%s: `%s' is the NIS master for this client.\n"
+msgstr "%s: ÇöÀçÀǠŬ¶óÀÌ¾ðÆ®¿¡ ´ëÇÏ¿© '%s'°¡ NIS ¸¶½ºÅÍÀÔ´Ï´Ù.\n"
+
+#: src/chfn.c:441
+#, c-format
+msgid "Changing the user information for %s\n"
+msgstr "%s¿¡ ´ëÇÏ¿© »ç¿ëÀÚÀÇ Á¤º¸¸¦ ¹Ù²ß´Ï´Ù\n"
+
+#: src/chfn.c:450
+#, c-format
+msgid "%s: invalid name: \"%s\"\n"
+msgstr "%s: À¯È¿ÇÏÁö ¾Ê´Â À̸§: \"%s\"\n"
+
+#: src/chfn.c:456
+#, c-format
+msgid "%s: invalid room number: \"%s\"\n"
+msgstr "À¯È¿ÇÏÁö ¾Ê´Â ¹æ ¹øÈ£: \"%s\"\n"
+
+#: src/chfn.c:462
+#, c-format
+msgid "%s: invalid work phone: \"%s\"\n"
+msgstr "À¯È¿ÇÏÁö ¾Ê´Â Á÷Àå ÀüÈ­¹øÈ£: \"%s\"\n"
+
+#: src/chfn.c:468
+#, c-format
+msgid "%s: invalid home phone: \"%s\"\n"
+msgstr "%s: À¯È¿ÇÏÁö ¾Ê´Â Áý ÀüÈ­¹øÈ£: \"%s\"\n"
+
+#: src/chfn.c:475
+#, c-format
+msgid "%s: \"%s\" contains illegal characters\n"
+msgstr "%s: \"%s\"Àº ÀûÀýÇÏÁö ¾Ê´Â ±ÛÀÚ¸¦ Æ÷ÇÔÇϰí ÀÖ½À´Ï´Ù\n"
+
+#: src/chfn.c:488
+#, c-format
+msgid "%s: fields too long\n"
+msgstr "%s: ÀԷ¹üÀ§°¡ ³Ê¹« ±é´Ï´Ù\n"
+
+#: src/chfn.c:504 src/chsh.c:316 src/gpasswd.c:570 src/passwd.c:1277
+msgid "Cannot change ID to root.\n"
+msgstr "·çÆ®·Î ¾ÆÀ̵𠺯°æÀÌ ºÒ°¡´É ÇÕ´Ï´Ù.\n"
+
+#: src/chfn.c:519 src/chsh.c:331 src/passwd.c:656 src/passwd.c:811
+msgid "Cannot lock the password file; try again later.\n"
+msgstr "ÆÐ½º¿öµå ÆÄÀÏÀ» lockÇÒ ¼ö ¾ø½À´Ï´Ù;  ³ªÁß¿¡ ´Ù½Ã ½ÃµµÇϽʽÿÀ.\n"
+
+#: src/chfn.c:525 src/chsh.c:337 src/passwd.c:661 src/passwd.c:816
+msgid "Cannot open the password file.\n"
+msgstr "ÆÐ½º¿öµå ÆÄÀÏÀ» ¿­¼ö°¡ ¾ø½À´Ï´Ù.\n"
+
+#: src/chfn.c:542 src/chsh.c:352 src/passwd.c:667 src/usermod.c:1348
+#, c-format
+msgid "%s: %s not found in /etc/passwd\n"
+msgstr "%s: %s°¡ /etc/passwd¿¡¼­ ¹ß°ßµÇÁö ¾Ê½À´Ï´Ù\n"
+
+#: src/chfn.c:561 src/chsh.c:373 src/passwd.c:740 src/passwd.c:852
+msgid "Error updating the password entry.\n"
+msgstr "ÆÐ½º¿öµå ÀÔ·ÂÀ» ¾÷µ¥ÀÌÆ®Çϴµ¥ ¿À·ù¹ß»ý.\n"
+
+#: src/chfn.c:585 src/chsh.c:397 src/passwd.c:755 src/passwd.c:867
+msgid "Cannot commit password file changes.\n"
+msgstr "ÆÐ½º¿öµå ÆÄÀÏ º¯°æÀ» Ã³¸®ÇÒ ¼ö ¾ø½À´Ï´Ù.\n"
+
+#: src/chfn.c:592 src/chsh.c:404
+msgid "Cannot unlock the password file.\n"
+msgstr "ÆÐ½º¿öµå ÆÄÀÏÀ» lockÇÒ ¼ö ¾ø½À´Ï´Ù.\n"
+
+#: src/chpasswd.c:66
+#, c-format
+msgid "usage: %s [-e]\n"
+msgstr "»ç¿ë¹ý: %s [-e]\n"
+
+#: src/chpasswd.c:171 src/pwconv.c:94
+#, c-format
+msgid "%s: can't lock shadow file\n"
+msgstr "%s: ½¦µµ¿ì ÆÄÀÏÀ» lockÇÒ ¼ö ¾ø½À´Ï´Ù\n"
+
+#: src/chpasswd.c:177 src/gpasswd.c:596 src/pwconv.c:99 src/pwunconv.c:103
+#: src/pwunconv.c:108
+#, c-format
+msgid "%s: can't open shadow file\n"
+msgstr "%s: ½¦µµ¿ì ÆÄÀÏÀ» ¿­ ¼ö ¾ø½À´Ï´Ù\n"
+
+#: src/chpasswd.c:200 src/newusers.c:460
+#, c-format
+msgid "%s: line %d: line too long\n"
+msgstr "%s: line %d: ³Ê¹« ±é´Ï´Ù\n"
+
+#: src/chpasswd.c:220
+#, c-format
+msgid "%s: line %d: missing new password\n"
+msgstr "%s: line %d: »õ·Î¿î ÆÐ½º¿öµå°¡ ¾ø½À´Ï´Ù\n"
+
+#: src/chpasswd.c:237
+#, c-format
+msgid "%s: line %d: unknown user %s\n"
+msgstr "%s: line %d: ¾Ë ¼ö ¾ø´Â »ç¿ëÀÚ %s\n"
+
+#: src/chpasswd.c:290
+#, c-format
+msgid "%s: line %d: cannot update password entry\n"
+msgstr "%s: line %d: ÆÐ½º¿öµå ÀÔ·ÂÀ» ¾÷µ¥ÀÌÆ® ÇÒ ¼ö ¾ø½À´Ï´Ù\n"
+
+#: src/chpasswd.c:307 src/newusers.c:588
+#, c-format
+msgid "%s: error detected, changes ignored\n"
+msgstr "%s: ¿À·ù¹ß»ý, º¯°æÀ̠󸮵ÇÁö ¾Ê¾Ò½À´Ï´Ù\n"
+
+#: src/chpasswd.c:319
+#, c-format
+msgid "%s: error updating shadow file\n"
+msgstr "%s: ½¦µµ¿ì ÆÄÀÏÀ» ¾÷µ¥ÀÌÆ® Çϴµ¥ ¿À·ù¹ß»ý\n"
+
+#: src/chpasswd.c:328
+#, c-format
+msgid "%s: error updating password file\n"
+msgstr "%s: ÆÐ½º¿öµå ÆÄÀÏÀ» ¾÷µ¥ÀÌÆ® Çϴµ¥ ¿À·ù¹ß»ý\n"
+
+#: src/chsh.c:75
+#, c-format
+msgid "Usage: %s [-s shell] [name]\n"
+msgstr "»ç¿ë¹ý: %s [-s ½©] [À̸§]\n"
+
+#: src/chsh.c:89
+#, fuzzy
+msgid "Enter the new value, or press return for the default\n"
+msgstr "»õ·Î¿î °ªÀ» ³Ö°Å³ª, µðÆúÆ®¸¦ ¿øÇϸ頿£Å͸¦ Ä¡¼¼¿ä\n"
+
+#: src/chsh.c:90
+msgid "Login Shell"
+msgstr "·Î±ä ½©"
+
+#: src/chsh.c:239 src/chsh.c:253
+#, c-format
+msgid "You may not change the shell for %s.\n"
+msgstr "»ç¿ëÀڴ %s¿¡ ´ëÇÑ ½©À» º¯°æÇÒ ¼ö ¾ø½À´Ï´Ù.\n"
+
+#: src/chsh.c:282
+#, c-format
+msgid "Changing the login shell for %s\n"
+msgstr "%s¿¡ ´ëÇÑ ·Î±ä ½©À» º¯°æÇϰí ÀÖ½À´Ï´Ù\n"
+
+#: src/chsh.c:294
+#, c-format
+msgid "%s: Invalid entry: %s\n"
+msgstr "%s: ºÎÀûÀýÇÑ ÀÔ·Â: %s\n"
+
+#: src/chsh.c:301
+#, c-format
+msgid "%s is an invalid shell.\n"
+msgstr "%s´Â ºÎÀûÀýÇÑ ½©ÀÔ´Ï´Ù.\n"
+
+#: src/dpasswd.c:52
+#, c-format
+msgid "Usage: %s [-(a|d)] shell\n"
+msgstr "»ç¿ë¹ý: %s [-(a|d)] ½©\n"
+
+#: src/dpasswd.c:115
+msgid "Shell password: "
+msgstr "½© ÆÐ½º¿öµå: "
+
+#: src/dpasswd.c:121
+msgid "re-enter Shell password: "
+msgstr "½© ÆÐ½º¿öµå¸¦ ´Ù½Ã ÀÔ·Â: "
+
+#: src/dpasswd.c:129
+#, c-format
+msgid "%s: Passwords do not match, try again.\n"
+msgstr "%s: ÆÐ½º¿öµå°¡ ¸ÂÁö ¾Ê½À´Ï´Ù. ´Ù½Ã ½ÃµµÇϼ¼¿ä. \n"
+
+#: src/dpasswd.c:149
+#, c-format
+msgid "%s: can't create %s"
+msgstr "%s: %s¸¦ ¸¸µé ¼ö ¾ø½À´Ï´Ù"
+
+#: src/dpasswd.c:155
+#, c-format
+msgid "%s: can't open %s"
+msgstr "%s: %s¸¦ ¿­¼ö°¡ ¾ø½À´Ï´Ù"
+
+#: src/dpasswd.c:183
+#, c-format
+msgid "%s: Shell %s not found.\n"
+msgstr "%s: %sÀÇ ½©ÀÌ ¹ß°ßµÇÁö ¾ø½À´Ï´Ù.\n"
+
+#: src/expiry.c:59
+#, fuzzy
+msgid "Usage: expiry {-f|-c}\n"
+msgstr "»ç¿ë¹ý: ¸¸±â { -f | -c }\n"
+
+#: src/expiry.c:113
+#, c-format
+msgid "%s: WARNING!  Must be set-UID root!\n"
+msgstr "%s: °æ°í! ¹Ýµå½Ã ·çÆ®ÀÇ UID¸¦ ¸ÂÃâ°Í!\n"
+
+#: src/expiry.c:124
+#, c-format
+msgid "%s: unknown user\n"
+msgstr "%s: ¾Ë¼ö¾ø´Â »ç¿ëÀÚ\n"
+
+#: src/faillog.c:77
+#, c-format
+msgid "usage: %s [-a|-u user] [-m max] [-r] [-t days] [-l locksecs]\n"
+msgstr "»ç¿ë¹ý: %s [-a|-u »ç¿ëÀÚ] [-m ÃÖ´ë] [-r] [-t ³¯Â¥] [-l locksecs]\n"
+
+#: src/faillog.c:131 src/lastlog.c:96
+#, c-format
+msgid "Unknown User: %s\n"
+msgstr "¾Ë¼ö¾ø´Â »ç¿ëÀÚ: %s\n"
+
+#: src/faillog.c:212
+msgid "Username   Failures  Maximum  Latest\n"
+msgstr "ÃÖ´ë ÀԷ½à±îÁö »ç¿ëÀÚ À̸§ ÀÎÁõ ½ÇÆÐ\n"
+
+#: src/faillog.c:229
+#, c-format
+msgid "  %s on %s"
+msgstr "%s ÀÇ %s"
+
+#: src/faillog.c:233
+#, c-format
+msgid " [%lds left]"
+msgstr " [%lds left]"
+
+#: src/faillog.c:237
+#, c-format
+msgid " [%lds lock]"
+msgstr " [%lds lock]"
+
+#: src/gpasswd.c:78
+#, c-format
+msgid "usage: %s [-r|-R] group\n"
+msgstr "»ç¿ë¹ý: %s [-r|-R] ±×·ì\n"
+
+#: src/gpasswd.c:79
+#, c-format
+msgid "       %s [-a user] group\n"
+msgstr "       %s [-a »ç¿ëÀÚ] ±×·ì\n"
+
+#: src/gpasswd.c:80
+#, c-format
+msgid "       %s [-d user] group\n"
+msgstr "       %s [-d »ç¿ëÀÚ] ±×·ì\n"
+
+#: src/gpasswd.c:83
+#, c-format
+msgid "       %s [-A user,...] [-M user,...] group\n"
+msgstr "       %s [-A »ç¿ëÀÚ,...] [-M »ç¿ëÀÚ,...] ±×·ì\n"
+
+#: src/gpasswd.c:85
+#, c-format
+msgid "       %s [-M user,...] group\n"
+msgstr "       %s [-M »ç¿ëÀÚ,...] ±×·ì\n"
+
+#: src/gpasswd.c:146 src/gpasswd.c:230
+#, c-format
+msgid "%s: unknown user %s\n"
+msgstr "%s: ¾Ë ¼ö ¾ø´Â »ç¿ëÀÚ %s\n"
+
+#: src/gpasswd.c:157
+msgid "Permission denied.\n"
+msgstr "Á¢±Ù±ÇÇÑ ¾øÀ½.\n"
+
+#: src/gpasswd.c:243
+#, c-format
+msgid "%s: shadow group passwords required for -A\n"
+msgstr "%s: -A¿¡ ´ëÇÏ¿© ½¦µµ¿ì ±×·ì ÆÐ½º¿öµå°¡ ÇÊ¿äÇÕ´Ï´Ù\n"
+
+#: src/gpasswd.c:294
+msgid "Who are you?\n"
+msgstr "´ç½ÅÀº ´©±¸½Ê´Ï±î?\n"
+
+#: src/gpasswd.c:313 src/newgrp.c:297
+#, c-format
+msgid "unknown group: %s\n"
+msgstr "¾Ë ¼ö ¾ø´Â ±×·ì: %s\n"
+
+#: src/gpasswd.c:422
+#, c-format
+msgid "Adding user %s to group %s\n"
+msgstr "%s ±×·ì¿¡ %s »ç¿ëÀÚ µî·ÏÁß\n"
+
+#: src/gpasswd.c:440
+#, c-format
+msgid "Removing user %s from group %s\n"
+msgstr "%s ±×·ì À¸·ÎºÎÅÍ %s »ç¿ëÀÚ »èÁ¦Áß\n"
+
+#: src/gpasswd.c:454
+#, c-format
+msgid "%s: unknown member %s\n"
+msgstr "%s: ¾Ë ¼ö ¾ø´Â ±×·ì¸â¹ö %s\n"
+
+#: src/gpasswd.c:501
+#, c-format
+msgid "%s: Not a tty\n"
+msgstr "%s: tty °¡ ¾Æ´Ô\n"
+
+#.
+#. * 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.
+#.
+#: src/gpasswd.c:522
+#, c-format
+msgid "Changing the password for group %s\n"
+msgstr "%s ±×·ì¿¡ ´ëÇÏ¿© ÆÐ½º¿öµå¸¦ º¯°æÁß\n"
+
+#: src/gpasswd.c:525
+msgid "New Password: "
+msgstr "»õ·Î¿î ÆÐ½º¿öµå: "
+
+#: src/gpasswd.c:530 src/passwd.c:365
+msgid "Re-enter new password: "
+msgstr "»õ ÆÐ½º¿öµå¸¦ ´Ù½Ã ÀÔ·ÂÇϼ¼¿ä: "
+
+#: src/gpasswd.c:542
+msgid "They don't match; try again"
+msgstr "ÀԷ°ªÀÌ ÀÏÄ¡ÇÏÁö ¾Ê½À´Ï´Ù; ´Ù½Ã ½ÃµµÇϼ¼¿ä"
+
+#: src/gpasswd.c:546
+#, c-format
+msgid "%s: Try again later\n"
+msgstr "%s: ³ªÁß¿¡ ´Ù½Ã ½ÃµµÇϼ¼¿ä\n"
+
+#: src/gpasswd.c:578
+#, c-format
+msgid "%s: can't get lock\n"
+msgstr "%s: Àá±ÝÀ» ÇÒ ¼ö ¾ø½À´Ï´Ù\n"
+
+#: src/gpasswd.c:584
+#, c-format
+msgid "%s: can't get shadow lock\n"
+msgstr "%s: ½¦µµ¿ì Àá±ÝÀ» ÇÒ ¼ö ¾ø½À´Ï´Ù\n"
+
+#: src/gpasswd.c:590
+#, c-format
+msgid "%s: can't open file\n"
+msgstr "%s: ÆÄÀÏÀ» ¿­ ¼ö ¾ø½À´Ï´Ù\n"
+
+#: src/gpasswd.c:602
+#, c-format
+msgid "%s: can't update entry\n"
+msgstr "%s: ÀԷ°ªÀ» ¾÷µ¥ÀÌÆ® ÇÒ ¼ö ¾ø½À´Ï´Ù\n"
+
+#: src/gpasswd.c:608
+#, c-format
+msgid "%s: can't update shadow entry\n"
+msgstr "%s: ½¦µµ¿ì ÀԷ°ªÀ» ¾÷µ¥ÀÌÆ® ÇÒ ¼ö ¾ø½À´Ï´Ù\n"
+
+#: src/gpasswd.c:615
+#, c-format
+msgid "%s: can't re-write file\n"
+msgstr "%s: ÆÄÀÏÀ» ´Ù½Ã ¾µ ¼ö ¾ø½À´Ï´Ù\n"
+
+#: src/gpasswd.c:621
+#, c-format
+msgid "%s: can't re-write shadow file\n"
+msgstr "%s: ½¦µµ¿ì ÆÄÀÏÀ» ´Ù½Ã ¾µ ¼ö ¾ø½À´Ï´Ù\n"
+
+#: src/gpasswd.c:630
+#, c-format
+msgid "%s: can't unlock file\n"
+msgstr "%s: ÆÄÀÏ Àá±ÝÀ» Ç® ¼ö ¾ø½À´Ï´Ù\n"
+
+#: src/gpasswd.c:635
+#, c-format
+msgid "%s: can't update DBM files\n"
+msgstr "%s: DBM ÆÄÀÏÀ» ¾÷µ¥ÀÌÆ® ÇÒ ¼ö ¾ø½À´Ï´Ù\n"
+
+#: src/gpasswd.c:642
+#, c-format
+msgid "%s: can't update DBM shadow files\n"
+msgstr "%s: DBM ½¦µµ¿ì ÆÄÀÏÀ» ¾÷µ¥ÀÌÆ® ÇÒ ¼ö ¾ø½À´Ï´Ù\n"
+
+#: src/groupadd.c:101
+msgid "usage: groupadd [-g gid [-o]] group\n"
+msgstr "»ç¿ë¹ý: groupadd [-g gid(±×·ì ¾ÆÀ̵ð) [-o]] ±×·ì¸í\n"
+
+#: src/groupadd.c:167 src/groupadd.c:192 src/groupmod.c:179 src/groupmod.c:228
+#: src/useradd.c:970 src/usermod.c:552 src/usermod.c:695
+#, c-format
+msgid "%s: error adding new group entry\n"
+msgstr "%s: »õ·Î¿î ±×·ìÀ» Ãß°¡Çϴµ¥ ¿À·ù\n"
+
+#: src/groupadd.c:178 src/groupadd.c:203 src/groupmod.c:197 src/useradd.c:981
+#: src/usermod.c:564 src/usermod.c:708
+#, c-format
+msgid "%s: cannot add new dbm group entry\n"
+msgstr "%s: »õ·Î¿î dbm ±×·ì ÀԷ°ªÀ» Ãß°¡Çϴµ¥ ¿À·ù\n"
+
+#: src/groupadd.c:255 src/useradd.c:1034
+#, c-format
+msgid "%s: name %s is not unique\n"
+msgstr "%s: %s ¶õ À̸§Àº ÀûÀýÇÏÁö ¾Ê½À´Ï´Ù\n"
+
+#: src/groupadd.c:270
+#, fuzzy, c-format
+msgid "%s: gid %u is not unique\n"
+msgstr "%s: uid(»ç¿ëÀÚ ¾ÆÀ̵ð) %ld ´Â ÀûÀýÇÏÁö ¾Ê½À´Ï´Ù\n"
+
+#: src/groupadd.c:294
+#, c-format
+msgid "%s: can't get unique gid\n"
+msgstr "%s: ÀûÀýÇÑ gid(±×·ì ¾ÆÀ̵ð)¸¦ ¾òÀ» ¼ö ¾ø½À´Ï´Ù\n"
+
+#.
+#. * All invalid group names land here.
+#.
+#: src/groupadd.c:317 src/groupmod.c:341
+#, c-format
+msgid "%s: %s is a not a valid group name\n"
+msgstr "%s: %s ´Â À¯È¿ÇÑ ±×·ì¸íÀÌ ¾Æ´Õ´Ï´Ù\n"
+
+#: src/groupadd.c:346 src/groupmod.c:366
+#, c-format
+msgid "%s: invalid group %s\n"
+msgstr "%s: À¯È¿ÇÏÁö ¾ÊÀº ±×·ì %s\n"
+
+#: src/groupadd.c:363 src/useradd.c:1313
+#, c-format
+msgid "%s: -O requires NAME=VALUE\n"
+msgstr "%s: NAME=VALUE ¸¦ À§Çؼ­´Â -O ¿É¼ÇÀÌ ÇÊ¿äÇÕ´Ï´Ù\n"
+
+#: src/groupadd.c:407 src/groupdel.c:173 src/groupmod.c:401 src/useradd.c:1428
+#: src/userdel.c:312 src/usermod.c:576
+#, c-format
+msgid "%s: cannot rewrite group file\n"
+msgstr "%s: ±×·ìÆÄÀÏÀ» ´Ù½Ã ¾µ ¼ö ¾ø½À´Ï´Ù\n"
+
+#: src/groupadd.c:415 src/groupdel.c:179 src/groupmod.c:409 src/useradd.c:1437
+#: src/userdel.c:319 src/usermod.c:722
+#, c-format
+msgid "%s: cannot rewrite shadow group file\n"
+msgstr "%s: ½¦µµ¿ì ±×·ì ÆÄÀÏÀ» ´Ù½Ã ¾µ ¼ö ¾ø½À´Ï´Ù\n"
+
+#: src/groupadd.c:433 src/groupdel.c:198 src/groupmod.c:427 src/userdel.c:403
+#, c-format
+msgid "%s: unable to lock group file\n"
+msgstr "%s: ±×·ì ÆÄÀÏ Àá±ÝÀ» ÇÒ ¼ö ¾ø½À´Ï´Ù\n"
+
+#: src/groupadd.c:438 src/groupdel.c:202 src/groupmod.c:432
+#, c-format
+msgid "%s: unable to open group file\n"
+msgstr "%s: ±×·ì ÆÄÀÏÀ» ¿­¼ö°¡ ¾ø½À´Ï´Ù\n"
+
+#: src/groupadd.c:445 src/groupdel.c:207 src/groupmod.c:439 src/userdel.c:414
+#, c-format
+msgid "%s: unable to lock shadow group file\n"
+msgstr "%s: ½¦µµ¿ì ±×·ì ÆÄÀÏ Àá±ÝÀ» ÇÒ ¼ö ¾ø½À´Ï´Ù\n"
+
+#: src/groupadd.c:451 src/groupdel.c:212 src/groupmod.c:445
+#, c-format
+msgid "%s: unable to open shadow group file\n"
+msgstr "%s: ½¦µµ¿ì ±×·ì ÆÄÀÏÀ» ¿­ ¼ö ¾ø½À´Ï´Ù\n"
+
+#: src/groupadd.c:562
+#, c-format
+msgid "%s: group %s exists\n"
+msgstr "%s: ±×·ì %s ´Â Á¸ÀçÇÕ´Ï´Ù\n"
+
+#: src/groupdel.c:92
+msgid "usage: groupdel group\n"
+msgstr "»ç¿ë¹ý: groupdel ±×·ì¸í\n"
+
+#: src/groupdel.c:110 src/groupmod.c:184 src/groupmod.c:233
+#, c-format
+msgid "%s: error removing group entry\n"
+msgstr "%s: ±×·ì ÀԷ°ªÀ» Á¦°ÅÇϴµ¥ ¿À·ù\n"
+
+#: src/groupdel.c:122 src/groupmod.c:204
+#, c-format
+msgid "%s: error removing group dbm entry\n"
+msgstr "%s: ±×·ì dbm ÀԷ°ªÀ» Á¦°ÅÇϴµ¥ ¿À·ù\n"
+
+#: src/groupdel.c:137
+#, c-format
+msgid "%s: error removing shadow group entry\n"
+msgstr "%s: ½¦µµ¿ì ±×·ì ÀԷ°ªÀ» Á¦°ÅÇϴµ¥ ¿À·ù\n"
+
+#: src/groupdel.c:150 src/groupmod.c:254
+#, c-format
+msgid "%s: error removing shadow group dbm entry\n"
+msgstr "%s: ½¦µµ¿ì ±×·ì dbm ÀԷ°ªÀ» Á¦°ÅÇϴµ¥ ¿À·ù\n"
+
+#.
+#. * Can't remove the group.
+#.
+#: src/groupdel.c:254
+#, c-format
+msgid "%s: cannot remove user's primary group.\n"
+msgstr "%s: »ç¿ëÀÚÀÇ primary ±×·ìÀ» Á¦°ÅÇÒ ¼ö ¾ø½À´Ï´Ù.\n"
+
+#: src/groupdel.c:355 src/groupmod.c:550
+#, c-format
+msgid "%s: group %s does not exist\n"
+msgstr "%s: ±×·ì %s ´Â Á¸ÀçÇÏÁö ¾Ê½À´Ï´Ù\n"
+
+#: src/groupdel.c:369 src/groupmod.c:566
+#, c-format
+msgid "%s: group %s is a NIS group\n"
+msgstr "%s: ±×·ì %s ´Â NIS ±×·ìÀÔ´Ï´Ù\n"
+
+#: src/groupdel.c:375 src/groupmod.c:571 src/userdel.c:776 src/usermod.c:1045
+#, c-format
+msgid "%s: %s is the NIS master\n"
+msgstr "%s: %s ´Â NIS ¸¶½ºÅÍ(master)ÀÔ´Ï´Ù\n"
+
+#: src/groupmems.c:95
+msgid "Member already exists\n"
+msgstr ""
+
+#: src/groupmems.c:125
+msgid "Member to remove could not be found\n"
+msgstr ""
+
+#: src/groupmems.c:158
+msgid "usage: groupmems -a username | -d username | -D | -l [-g groupname]\n"
+msgstr ""
+
+#: src/groupmems.c:201
+msgid "Only root can add members to different groups\n"
+msgstr ""
+
+#: src/groupmems.c:206
+msgid "Group access is required\n"
+msgstr ""
+
+#: src/groupmems.c:210
+msgid "Not primary owner of current group\n"
+msgstr ""
+
+#: src/groupmems.c:215
+#, fuzzy
+msgid "Unable to lock group file\n"
+msgstr "%s: ±×·ì ÆÄÀÏ Àá±ÝÀ» ÇÒ ¼ö ¾ø½À´Ï´Ù\n"
+
+#: src/groupmems.c:220
+#, fuzzy
+msgid "Unable to open group file\n"
+msgstr "%s: ±×·ì ÆÄÀÏÀ» ¿­¼ö°¡ ¾ø½À´Ï´Ù\n"
+
+#: src/groupmems.c:240
+#, fuzzy
+msgid "Cannot close group file\n"
+msgstr "%s: ±×·ì ÆÄÀÏÀ» ¿­ ¼ö ¾ø½À´Ï´Ù\n"
+
+#: src/groupmod.c:103
+msgid "usage: groupmod [-g gid [-o]] [-n name] group\n"
+msgstr "»ç¿ë¹ý: groupmod [-g gid(±×·ì ¾ÆÀ̵ð) [-o]] [-n À̸§] ±×·ì¸í\n"
+
+#: src/groupmod.c:161
+#, c-format
+msgid "%s: %s not found in /etc/group\n"
+msgstr "%s: %s ´Â /etc/group ¿¡¼­ ¹ß°ßÀÌ µÇÁö ¾Ê¾Ò½À´Ï´Ù\n"
+
+#: src/groupmod.c:247
+#, c-format
+msgid "%s: cannot add new dbm shadow group entry\n"
+msgstr "%s: »õ·Î¿î dbm ½¦µµ¿ì ±×·ì ÀԷ°ªÀ» Ãß°¡ÇÒ ¼ö ¾ø½À´Ï´Ù\n"
+
+#: src/groupmod.c:300
+#, fuzzy, c-format
+msgid "%s: %u is not a unique gid\n"
+msgstr "%s: %ld ´Â ÀûÀýÇÑ gid(±×·ì ¾ÆÀ̵ð)°¡ ¾Æ´Õ´Ï´Ù\n"
+
+#: src/groupmod.c:330
+#, c-format
+msgid "%s: %s is not a unique name\n"
+msgstr "%s: %s ´Â ÀûÀýÇÑ À̸§ÀÌ ¾Æ´Õ´Ï´Ù\n"
+
+#: src/groups.c:59
+#, c-format
+msgid "unknown user %s\n"
+msgstr "¾Ë¼ö¾ø´Â »ç¿ëÀÚ %s\n"
+
+#: src/grpck.c:87
+#, fuzzy, c-format
+msgid "Usage: %s [-r] [-s] [group [gshadow]]\n"
+msgstr "»ç¿ë¹ý: %s [-s][-r] [group [gshadow]]\n"
+
+#: src/grpck.c:90
+#, fuzzy, c-format
+msgid "Usage: %s [-r] [-s] [group]\n"
+msgstr "»ç¿ë¹ý: %s [-s] [-r] [group]\n"
+
+#: src/grpck.c:108 src/pwck.c:108
+msgid "No"
+msgstr "¾Æ´Ï¿À"
+
+#: src/grpck.c:192 src/pwck.c:175
+#, c-format
+msgid "%s: -s and -r are incompatibile\n"
+msgstr ""
+
+#: src/grpck.c:232 src/grpck.c:242 src/pwck.c:215 src/pwck.c:225
+#, c-format
+msgid "%s: cannot lock file %s\n"
+msgstr "%s: ÆÄÀÏ %s Àá±ÝÀ» ÇÒ ¼ö ¾ø½À´Ï´Ù\n"
+
+#: src/grpck.c:259 src/grpck.c:268 src/mkpasswd.c:202 src/pwck.c:242
+#: src/pwck.c:251
+#, c-format
+msgid "%s: cannot open file %s\n"
+msgstr "%s: ÆÄÀÏ %s ¸¦ ¿­ ¼ö ¾ø½À´Ï´Ù\n"
+
+#.
+#. * Tell the user this entire line is bogus and ask
+#. * them to delete it.
+#.
+#: src/grpck.c:311
+msgid "invalid group file entry\n"
+msgstr "À¯È¿ÇÏÁö ¾ÊÀº ±×·ìÆÄÀÏ  ÀԷ°ª\n"
+
+#: src/grpck.c:312 src/grpck.c:375 src/grpck.c:458 src/grpck.c:521
+#: src/grpck.c:538 src/pwck.c:296 src/pwck.c:358 src/pwck.c:457 src/pwck.c:519
+#: src/pwck.c:543
+#, c-format
+msgid "delete line `%s'? "
+msgstr "¶óÀΠ'%s'¸¦ Áö¿ï±î¿ä? "
+
+#.
+#. * Tell the user this entry is a duplicate of
+#. * another and ask them to delete it.
+#.
+#: src/grpck.c:374
+msgid "duplicate group entry\n"
+msgstr "±×·ì ÀԷ°ª º¹Á¦\n"
+
+#: src/grpck.c:391
+#, c-format
+msgid "invalid group name `%s'\n"
+msgstr "À¯È¿ÇÏÁö ¾ÊÀº ±×·ì¸í '%s'\n"
+
+#: src/grpck.c:418
+#, c-format
+msgid "group %s: no user %s\n"
+msgstr "±×·ì %s: »ç¿ëÀÚ %s °¡ ¾ø½À´Ï´Ù\n"
+
+#: src/grpck.c:420 src/grpck.c:590
+#, c-format
+msgid "delete member `%s'? "
+msgstr "¸â¹ö '%s'¸¦ Áö¿ï±î¿ä? "
+
+#.
+#. * Tell the user this entire line is bogus and ask
+#. * them to delete it.
+#.
+#: src/grpck.c:457
+msgid "invalid shadow group file entry\n"
+msgstr "À¯È¿ÇÏÁö ¾ÊÀº ½¦µµ¿ì ±×·ìÆÄÀÏ ÀԷ°ª\n"
+
+#.
+#. * Tell the user this entry is a duplicate of
+#. * another and ask them to delete it.
+#.
+#: src/grpck.c:520
+msgid "duplicate shadow group entry\n"
+msgstr "½¦µµ¿ì ±×·ì ÀԷ°ª º¹Á¦\n"
+
+#: src/grpck.c:537
+msgid "no matching group file entry\n"
+msgstr "±×·ì ÆÄÀÏ ÀԷ°ªÀÌ ÀÏÄ¡ÇÏÁö ¾Ê½À´Ï´Ù\n"
+
+#: src/grpck.c:558
+#, c-format
+msgid "shadow group %s: no administrative user %s\n"
+msgstr "½¦µµ¿ì ±×·ì %s: °ü¸®±ÇÇÑÀÌ Àִ »ç¿ëÀÚ %s °¡ ¾ø½À´Ï´Ù\n"
+
+#: src/grpck.c:560
+#, c-format
+msgid "delete administrative member `%s'? "
+msgstr "°ü¸® ±ÇÇÑÀÌ Àִ ¸â¹ö '%s' ¸¦ Áö¿ï±î¿ä? "
+
+#: src/grpck.c:588
+#, c-format
+msgid "shadow group %s: no user %s\n"
+msgstr "½¦µµ¿ì ±×·ì %s: %s ¶õ »ç¿ëÀÚ°¡ ¾ø½À´Ï´Ù\n"
+
+#: src/grpck.c:616 src/grpck.c:622 src/pwck.c:577 src/pwck.c:585
+#, c-format
+msgid "%s: cannot update file %s\n"
+msgstr "%s: ÆÄÀÏ %s ¸¦ ¾÷µ¥ÀÌÆ® ÇÒ ¼ö ¾ø½À´Ï´Ù\n"
+
+#: src/grpck.c:647 src/pwck.c:612
+#, c-format
+msgid "%s: the files have been updated; run mkpasswd\n"
+msgstr "%s: ÆÄÀÏÀÌ ¾÷µ¥ÀÌÆ® µÇ¾ú½À´Ï´Ù; mkpasswd ¸¦ ½ÇÇàÇϽʽÿÀ\n"
+
+#: src/grpck.c:648 src/grpck.c:652 src/pwck.c:613 src/pwck.c:617
+#, c-format
+msgid "%s: no changes\n"
+msgstr "%s: º¯°æÀÌ ¾È µÇ¾ú½À´Ï´Ù\n"
+
+#: src/grpck.c:651 src/pwck.c:616
+#, c-format
+msgid "%s: the files have been updated\n"
+msgstr "%s: ÆÄÀÏÀÌ ¾÷µ¥ÀÌÆ® µÇ¾ú½À´Ï´Ù\n"
+
+#: src/grpconv.c:60 src/grpunconv.c:56
+#, c-format
+msgid "%s: can't lock group file\n"
+msgstr "%s: ±×·ì ÆÄÀÏ Àá±ÝÀ» ÇÒ ¼ö ¾ø½À´Ï´Ù\n"
+
+#: src/grpconv.c:65 src/grpunconv.c:61
+#, c-format
+msgid "%s: can't open group file\n"
+msgstr "%s: ±×·ì ÆÄÀÏÀ» ¿­ ¼ö ¾ø½À´Ï´Ù\n"
+
+#: src/grpconv.c:70 src/grpunconv.c:66
+#, c-format
+msgid "%s: can't lock shadow group file\n"
+msgstr "%s: ½¦µµ¿ì ±×·ì ÆÄÀÏ Àá±ÝÀ» ÇÒ ¼ö ¾ø½À´Ï´Ù\n"
+
+#: src/grpconv.c:76 src/grpunconv.c:72
+#, c-format
+msgid "%s: can't open shadow group file\n"
+msgstr "%s: ½¦µµ¿ì ±×·ì ÆÄÀÏÀ» ¿­ ¼ö ¾ø½À´Ï´Ù\n"
+
+#: src/grpconv.c:94
+#, c-format
+msgid "%s: can't remove shadow group %s\n"
+msgstr "%s: ½¦µµ¿ì ±×·ì %s ¸¦ Á¦°ÅÇÒ ¼ö ¾ø½À´Ï´Ù\n"
+
+#: src/grpconv.c:138 src/pwconv.c:153
+#, c-format
+msgid "%s: can't update shadow entry for %s\n"
+msgstr "%s: %s ¿¡ ´ëÇÑ ½¦µµ¿ì ÀԷ°ªÀ» ¾÷µ¥ÀÌÆ® ÇÒ ¼ö ¾ø½À´Ï´Ù\n"
+
+#: src/grpconv.c:148 src/grpunconv.c:91
+#, c-format
+msgid "%s: can't update entry for group %s\n"
+msgstr "%s: %s ±×·ì¿¡ ´ëÇÑ ÀԷ°ªÀ» ¾÷µ¥ÀÌÆ® ÇÒ ¼ö ¾ø½À´Ï´Ù\n"
+
+#: src/grpconv.c:155 src/grpunconv.c:99
+#, c-format
+msgid "%s: can't update shadow group file\n"
+msgstr "%s: ½¦µµ¿ì ±×·ì ÆÄÀÏÀ» ¾÷µ¥ÀÌÆ® ÇÒ ¼ö ¾ø½À´Ï´Ù\n"
+
+#: src/grpconv.c:160 src/grpunconv.c:105
+#, c-format
+msgid "%s: can't update group file\n"
+msgstr "%s: ±×·ì ÆÄÀÏÀ» ¾÷µ¥ÀÌÆ® ÇÒ ¼ö ¾ø½À´Ï´Ù\n"
+
+#: src/grpconv.c:175 src/grpunconv.c:127
+#, c-format
+msgid "%s: not configured for shadow group support.\n"
+msgstr "%s: ½¦µµ¿ì ±×·ì Áö¿ø¿¡ ´ëÇÏ¿© Çü¼ºÀÌ µÇÁö ¾Ê¾Ò½À´Ï´Ù.\n"
+
+#: src/grpunconv.c:110
+#, c-format
+msgid "%s: can't delete shadow group file\n"
+msgstr "%s: ½¦µµ¿ì ±×·ì ÆÄÀÏÀ» Áö¿ï¼ö ¾ø½À´Ï´Ù\n"
+
+#: src/id.c:53
+msgid "usage: id [-a]\n"
+msgstr "»ç¿ë¹ý: id [-a]\n"
+
+#: src/id.c:55
+msgid "usage: id\n"
+msgstr "»ç¿ë¹ý: id\n"
+
+#: src/id.c:123
+#, fuzzy, c-format
+msgid "uid=%u(%s)"
+msgstr "uid(»ç¿ëÀÚ ¾ÆÀ̵ð)=%d(%s)"
+
+#: src/id.c:125
+#, fuzzy, c-format
+msgid "uid=%u"
+msgstr "uid(»ç¿ëÀÚ ¾ÆÀ̵ð)=%d"
+
+#: src/id.c:129
+#, fuzzy, c-format
+msgid " gid=%u(%s)"
+msgstr " gid(±×·ì ¾ÆÀ̵ð)=%d(%s)"
+
+#: src/id.c:131
+#, fuzzy, c-format
+msgid " gid=%u"
+msgstr " gid(±×·ì ¾ÆÀ̵ð)=%d"
+
+#: src/id.c:141
+#, fuzzy, c-format
+msgid " euid=%u(%s)"
+msgstr " euid=%d(%s)"
+
+#: src/id.c:143
+#, fuzzy, c-format
+msgid " euid=%u"
+msgstr " euid=%d"
+
+#: src/id.c:148
+#, fuzzy, c-format
+msgid " egid=%u(%s)"
+msgstr " egid=%d(%s)"
+
+#: src/id.c:150
+#, fuzzy, c-format
+msgid " egid=%u"
+msgstr " egid=%d"
+
+#.
+#. * 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.
+#.
+#: src/id.c:169
+msgid " groups="
+msgstr " ±×·ìµé="
+
+#: src/lastlog.c:110 src/lastlog.c:116
+#, c-format
+msgid "Usage: %s [<-u|--login> login-name] [<-t|--time> days] [<-h|--help>]\n"
+msgstr ""
+
+#: src/lastlog.c:181
+msgid "Username         Port     From             Latest\n"
+msgstr "»ç¿ëÀÚ¸í\tÆ÷Æ®\t~·ÎºÎÅÍ\t\tÃÖ±ÙÁ¤º¸\n"
+
+#: src/lastlog.c:183
+msgid "Username                Port     Latest\n"
+msgstr "»ç¿ëÀÚ¸í\t\tÆ÷Æ®\tÃÖ±ÙÁ¤º¸\n"
+
+#: src/lastlog.c:197
+msgid "**Never logged in**"
+msgstr "**Çѹøµµ ·Î±äÇÑÀûÀÌ ¾ø½À´Ï´Ù**"
+
+#: src/login.c:183
+#, c-format
+msgid "usage: %s [-p] [name]\n"
+msgstr "»ç¿ë¹ý: %s [-p] [À̸§]\n"
+
+#: src/login.c:186
+#, c-format
+msgid "       %s [-p] [-h host] [-f name]\n"
+msgstr "\t%s [-p][-h È£½ºÆ®¸í][-f À̸§]\n"
+
+#: src/login.c:188
+#, c-format
+msgid "       %s [-p] -r host\n"
+msgstr "\t%s [-p] -r È£½ºÆ®\n"
+
+#: src/login.c:272
+msgid "Invalid login time\n"
+msgstr "À¯È¿ÇÏÁö ¾ÊÀº ·Î±ä ½Ã°£(ÇöÀç½Ã°£Àº ·Î±ä±ÇÇÑ ¾øÀ½)\n"
+
+#: src/login.c:327
+msgid ""
+"\n"
+"System closed for routine maintenance\n"
+msgstr ""
+"\n"
+"±Ù¿øÁöÀÇ Á¤ºñ¸¦ À§ÇØ ½Ã½ºÅÛÀÌ Á¾·áµÇ¾ú½À´Ï´Ù\n"
+
+#: src/login.c:338
+msgid ""
+"\n"
+"[Disconnect bypassed -- root login allowed.]\n"
+msgstr ""
+"\n"
+"[Á¢¼ÓÇØÁ¦°¡ ¹«½ÃµÇ¾ú½À´Ï´Ù -- ·çÆ®¸¸ ·Î±äÀ» ÇÒ ¼ö ÀÖ½À´Ï´Ù]\n"
+
+#: src/login.c:375
+#, c-format
+msgid ""
+"\n"
+"Login timed out after %d seconds.\n"
+msgstr ""
+"\n"
+"%d ÃÊÈÄ¿¡ ·Î±ä ½Ã°£ÀÌ ¿Ï·áµË´Ï´Ù.\n"
+
+#: src/login.c:687
+#, c-format
+msgid " on `%.100s' from `%.200s'"
+msgstr " on `%.100s' from `%.200s'"
+
+#: src/login.c:691
+#, c-format
+msgid " on `%.100s'"
+msgstr " on `%.100s'"
+
+#: src/login.c:850
+#, c-format
+msgid ""
+"\n"
+"%s login: "
+msgstr ""
+"\n"
+"%s ·Î±ä: "
+
+#: src/login.c:853
+msgid "login: "
+msgstr "·Î±ä: "
+
+#: src/login.c:1069 src/sulogin.c:233
+msgid "Login incorrect"
+msgstr "·Î±ä¸íÀÌ ¸ÂÁö ¾Ê½À´Ï´Ù"
+
+#: src/login.c:1263
+msgid "Warning: login re-enabled after temporary lockout.\n"
+msgstr "°æ°í: ÀϽÃÀûÀ¸·Î Æä¼âµÈµÚ ´Ù½Ã ·Î±äÇÒ ¼ö ÀÖ½À´Ï´Ù.\n"
+
+#: src/login.c:1276
+#, c-format
+msgid "Last login: %s on %s"
+msgstr "¸¶Áö¸· ·Î±ä: %s on %s"
+
+#: src/login.c:1279
+#, c-format
+msgid "Last login: %.19s on %s"
+msgstr "¸¶Áö¸· ·Î±ä: %.19s on %s"
+
+#: src/login.c:1285
+#, c-format
+msgid " from %.*s"
+msgstr " from %.*s"
+
+#: src/login.c:1362
+msgid "Starting rad_login\n"
+msgstr "rad_login À» ½ÃÀÛÇϰí ÀÖ½À´Ï´Ù\n"
+
+#: src/mkpasswd.c:47
+#, c-format
+msgid "%s: no DBM database on system - no action performed\n"
+msgstr ""
+"%s: ½Ã½ºÅÛ¿¡ DBM µ¥ÀÌÅͺ£À̽º°¡ ¾ø½À´Ï´Ù - µû¶ó¼­ ¾î¶»ÇÑ °Íµµ ½ÇÇàµÇÁö ¾Ê¾Ò½À"
+"´Ï´Ù\n"
+
+#: src/mkpasswd.c:232 src/mkpasswd.c:237
+#, c-format
+msgid "%s: cannot overwrite file %s\n"
+msgstr "%s: ÆÄÀÏ %s ¸¦ °ãÃľµ ¼ö ¾ø½À´Ï´Ù\n"
+
+#: src/mkpasswd.c:252
+#, c-format
+msgid "%s: cannot open DBM files for %s\n"
+msgstr "%s: %s ¿¡ ´ëÇÑ DBM ÆÄÀÏÀ» ¿­ ¼ö ¾ø½À´Ï´Ù\n"
+
+#: src/mkpasswd.c:287
+#, c-format
+msgid "%s: the beginning with "
+msgstr "%s: ~¿Í ÇÔ²² ½ÃÀÛ "
+
+#: src/mkpasswd.c:288
+#, fuzzy
+msgid " is too long\n"
+msgstr "%s: ÀԷ¹üÀ§°¡ ³Ê¹« ±é´Ï´Ù\n"
+
+#: src/mkpasswd.c:315
+#, c-format
+msgid "%s: error parsing line \"%s\"\n"
+msgstr "%s: ¶óÀΠ\"%s\" À» ºÐ¼®Çϴµ¥ ¿À·ù\n"
+
+#: src/mkpasswd.c:323 src/mkpasswd.c:328 src/mkpasswd.c:333 src/mkpasswd.c:338
+msgid "adding record for name "
+msgstr "À̸§¿¡ ´ëÇÑ ±â·ÏÀ» Ãß°¡Çϰí ÀÖ½À´Ï´Ù "
+
+#: src/mkpasswd.c:324 src/mkpasswd.c:329 src/mkpasswd.c:334 src/mkpasswd.c:339
+#: src/mkpasswd.c:345 src/mkpasswd.c:351 src/mkpasswd.c:356 src/mkpasswd.c:361
+msgid "\n"
+msgstr ""
+
+#: src/mkpasswd.c:344 src/mkpasswd.c:350 src/mkpasswd.c:355 src/mkpasswd.c:360
+#, c-format
+msgid "%s: error adding record for "
+msgstr "%s: ¿¡ ´ëÇÑ ±â·ÏÀ» Ãß°¡Çϴµ¥ ¿À·ù "
+
+#: src/mkpasswd.c:378
+#, c-format
+msgid "added %d entries, longest was %d\n"
+msgstr "%d ÀԷ°ªÀÌ Ãß°¡ µÇ¾ú½À´Ï´Ù, °¡Àå±ä°ÍÀº %d ÀÔ´Ï´Ù\n"
+
+#: src/mkpasswd.c:392
+#, c-format
+msgid "Usage: %s [-vf] [-p|g|sp|sg] file\n"
+msgstr "»ç¿ë¹ý: %s [-vf] [-p|sp|sg] ÆÄÀϸí\n"
+
+#: src/mkpasswd.c:395
+#, c-format
+msgid "Usage: %s [-vf] [-p|g|sp] file\n"
+msgstr "»ç¿ë¹ý: %s [-vf][-p|g|sp] ÆÄÀϸí\n"
+
+#: src/mkpasswd.c:398
+#, c-format
+msgid "Usage: %s [-vf] [-p|g] file\n"
+msgstr "»ç¿ë¹ý: %s [-vf][-p|g] ÆÄÀϸí\n"
+
+#: src/newgrp.c:61
+msgid "usage: newgrp [-] [group]\n"
+msgstr "»ç¿ë¹ý: newgrp [-] [±×·ì]\n"
+
+#: src/newgrp.c:63
+msgid "usage: sg group [[-c] command]\n"
+msgstr "»ç¿ë¹ý: sg group [[-c] ¸í·É]\n"
+
+#: src/newgrp.c:136
+#, fuzzy, c-format
+msgid "unknown uid: %u\n"
+msgstr "¾Ë¼ö¾ø´Â uid(»ç¿ëÀÚ ¾ÆÀ̵ð): %d\n"
+
+#: src/newgrp.c:219
+#, fuzzy, c-format
+msgid "unknown gid: %lu\n"
+msgstr "¾Ë¼ö¾ø´Â gid(±×·ì ¾ÆÀ̵ð): %ld\n"
+
+#: src/newgrp.c:365 src/newgrp.c:374
+msgid "Sorry.\n"
+msgstr "Á˼ÛÇÕ´Ï´Ù.\n"
+
+#: src/newgrp.c:472
+msgid "too many groups\n"
+msgstr "±×·ìµéÀÌ ³Ê¹«³ª ¸¹½À´Ï´Ù\n"
+
+#: src/newusers.c:78
+#, c-format
+msgid "Usage: %s [input]\n"
+msgstr "»ç¿ë¹ý:%s [ÀԷ°ª]\n"
+
+#: src/newusers.c:407
+#, c-format
+msgid "%s: can't lock /etc/passwd.\n"
+msgstr "%s: /etc/passwd Àá±ÝÀ» ÇÒ ¼ö ¾ø½À´Ï´Ù.\n"
+
+#: src/newusers.c:419
+#, c-format
+msgid "%s: can't lock files, try again later\n"
+msgstr "%s: ÆÄÀÏ Àá±ÝÀ» ÇÒ ¼ö ¾ø½À´Ï´Ù, ³ªÁß¿¡ ´Ù½Ã ½ÃµµÇϼ¼¿ä\n"
+
+#: src/newusers.c:435
+#, c-format
+msgid "%s: can't open files\n"
+msgstr "%s: ÆÄÀÏÀ» ¿­¼ö°¡ ¾ø½À´Ï´Ù\n"
+
+#: src/newusers.c:480
+#, c-format
+msgid "%s: line %d: invalid line\n"
+msgstr "%s: ¶óÀΠ%d: À¯È¿ÇÏÁö ¾ÊÀº ¶óÀÎ\n"
+
+#: src/newusers.c:499
+#, c-format
+msgid "%s: line %d: can't create GID\n"
+msgstr "%s: ¶óÀΠ%d: GID(±×·ì ¾ÆÀ̵ð)¸¦ ¸¸µé¼ö ¾ø½À´Ï´Ù\n"
+
+#: src/newusers.c:515
+#, c-format
+msgid "%s: line %d: can't create UID\n"
+msgstr "%s: ¶óÀΠ%d: UID(»ç¿ëÀÚ ¾ÆÀ̵ð)¸¦ ¸¸µé¼ö ¾ø½À´Ï´Ù\n"
+
+#: src/newusers.c:528
+#, c-format
+msgid "%s: line %d: cannot find user %s\n"
+msgstr "%s: ¶óÀΠ%d: »ç¿ëÀÚ %s ¸¦ ¹ß°ßÇÒ ¼ö ¾ø½À´Ï´Ù\n"
+
+#: src/newusers.c:537
+#, c-format
+msgid "%s: line %d: can't update password\n"
+msgstr "%s: ¶óÀΠ%d: ÆÐ½º¿öµå¸¦ ¾÷µ¥ÀÌÆ® ÇÒ ¼ö ¾ø½À´Ï´Ù\n"
+
+#: src/newusers.c:555
+#, c-format
+msgid "%s: line %d: mkdir failed\n"
+msgstr "%s: ¶óÀΠ%d: µð·ºÅ丮 ¸¸µé±â¸¦ ½ÇÆÐÇß½À´Ï´Ù\n"
+
+#: src/newusers.c:561
+#, c-format
+msgid "%s: line %d: chown failed\n"
+msgstr "%s: ¶óÀΠ%d: chown À» ½ÇÆÐÇß½À´Ï´Ù\n"
+
+#: src/newusers.c:571
+#, c-format
+msgid "%s: line %d: can't update entry\n"
+msgstr "%s: ¶óÀΠ%d: ÀԷ°ªÀ» ¾÷µ¥ÀÌÆ® ÇÒ ¼ö ¾ø½À´Ï´Ù\n"
+
+#: src/newusers.c:603
+#, c-format
+msgid "%s: error updating files\n"
+msgstr "%s: ÆÄÀÏÀ» ¾÷µ¥ÀÌÆ® Çϴµ¥ ¿À·ù\n"
+
+#: src/passwd.c:174
+#, c-format
+msgid "usage: %s [-f|-s] [name]\n"
+msgstr "»ç¿ë¹ý: %s [-f|-s][À̸§]\n"
+
+#: src/passwd.c:178
+#, c-format
+msgid "       %s [-x max] [-n min] [-w warn] [-i inact] name\n"
+msgstr "\t%s [-x ÃÖ´ë][-n ÃÖ¼Ò][-w °æ°í][-i ºñȰ¼ºÈ­] À̸§\n"
+
+#: src/passwd.c:180
+#, fuzzy, c-format
+msgid "       %s {-l|-u|-d|-S|-e} name\n"
+msgstr "\t%s { -l | -u | -d | -S | -e } À̸§\n"
+
+#: src/passwd.c:283
+#, c-format
+msgid "User %s has a TCFS key, his old password is required.\n"
+msgstr ""
+"»ç¿ëÀÚ %s ´Â TCFS Å°¸¦ °¡Áö°í ÀÖ½À´Ï´Ù, ±×ÀÇ ¿¹Àü ÆÐ½º¿öµå°¡ ¿ä±¸µË´Ï´Ù.\n"
+
+#: src/passwd.c:286
+msgid "You can use -t option to force the change.\n"
+msgstr "°­Á¦·Î º¯°æÀ» Çϱâ À§Çؼ­´Â -t ¿É¼ÇÀ» »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.\n"
+
+#: src/passwd.c:292
+msgid "Old password: "
+msgstr "¿¹Àü ÆÐ½º¿öµå: "
+
+#: src/passwd.c:301
+#, c-format
+msgid "Incorrect password for `%s'\n"
+msgstr "`%s' ¿¡ ´ëÇÏ¿© ÆÐ½º¿öµå°¡ ¸ÂÁö ¾Ê½À´Ï´Ù\n"
+
+#: src/passwd.c:314
+#, c-format
+msgid "Warning: user %s has a TCFS key.\n"
+msgstr "°æ°í: »ç¿ëÀÚ %s ´Â TCFS Å°¸¦ °¡Áö°í ÀÖ½À´Ï´Ù.\n"
+
+#: src/passwd.c:333
+#, 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"
+
+#: src/passwd.c:339
+msgid "New password: "
+msgstr "»õ·Î¿î ÆÐ½º¿öµå: "
+
+#: src/passwd.c:350
+msgid "Try again.\n"
+msgstr "´Ù½Ã ½ÃµµÇϼ¼¿ä.\n"
+
+#: src/passwd.c:361
+msgid ""
+"\n"
+"Warning: weak password (enter it again to use it anyway).\n"
+msgstr ""
+"\n"
+"°æ°í: º¸¾È¼ºÀÌ ¾ø´Â ÆÐ½º¿öµå (±×·¡µµ »ç¿ëÇϱ栿øÇѴٸ頴ٽàÀÔ·ÂÇϼ¼¿ä).\n"
+
+#: src/passwd.c:371
+msgid "They don't match; try again.\n"
+msgstr "ÀԷ°ªÀÌ ÀÏÄ¡ÇÏÁö ¾Ê½À´Ï´Ù; ´Ù½Ã ½ÃµµÇϼ¼¿ä.\n"
+
+#: src/passwd.c:451 src/passwd.c:469
+#, c-format
+msgid "The password for %s cannot be changed.\n"
+msgstr "%s ¿¡ ´ëÇÑ ÆÐ½º¿öµå´Â º¯°æµÉ ¼ö ¾ø½À´Ï´Ù.\n"
+
+#: src/passwd.c:494
+#, c-format
+msgid "Sorry, the password for %s cannot be changed yet.\n"
+msgstr "Á˼ÛÇÕ´Ï´Ù, %s ¿¡ ´ëÇÑ ÆÐ½º¿öµå°¡ ¾ÆÁ÷ º¯°æÀÌ µÉ ¼ö ¾ø½À´Ï´Ù.\n"
+
+#: src/passwd.c:614
+#, c-format
+msgid "%s: out of memory\n"
+msgstr "%s: ¸Þ¸ð¸® ºÎÁ·\n"
+
+#: src/passwd.c:769
+msgid "Cannot lock the TCFS key database; try again later\n"
+msgstr "TCFS Å° µ¥ÀÌÅͺ£À̽º Àá±ÝÀ» ÇÒ ¼ö ¾ø½À´Ï´Ù; ³ªÁß¿¡ ´Ù½Ã ½ÃµµÇϼ¼¿ä\n"
+
+#: src/passwd.c:777
+msgid "Cannot open the TCFS key database.\n"
+msgstr "TCFS Å° µ¥ÀÌÅͺ£À̽º¸¦ ¿­¼ö°¡ ¾ø½À´Ï´Ù.\n"
+
+#: src/passwd.c:785
+msgid "Error updating the TCFS key database.\n"
+msgstr "TCFs Å° µ¥ÀÌÅͺ£À̽º ¾÷µ¥ÀÌÆ® Áß ¿À·ù.\n"
+
+#: src/passwd.c:792
+msgid "Cannot commit TCFS changes.\n"
+msgstr "TCFS º¯°æÀ» ½ÇÇàÇÒ ¼ö ¾ø½À´Ï´Ù.\n"
+
+#: src/passwd.c:975
+#, c-format
+msgid "%s: Cannot execute %s"
+msgstr "%s: %s ¸¦ ½ÇÇàÇÒ ¼ö ¾ø½À´Ï´Ù"
+
+#: src/passwd.c:1077
+#, c-format
+msgid "%s: repository %s not supported\n"
+msgstr "%s: ÀúÀå¼Ò %s ´Â Áö¿øÀÌ µÇÁö ¾Ê½À´Ï´Ù\n"
+
+#: src/passwd.c:1152
+#, c-format
+msgid "%s: Permission denied\n"
+msgstr "%s: Á¢±Ù±ÇÇÑ ¾øÀ½\n"
+
+#: src/passwd.c:1176
+#, c-format
+msgid "You may not change the password for %s.\n"
+msgstr "%s ¿¡ ´ëÇÑ ÆÐ½º¿öµå¸¦ ´ç½ÅÀº º¯°æÇÒ ¼ö ¾ø½À´Ï´Ù.\n"
+
+#: src/passwd.c:1242
+#, c-format
+msgid "Changing password for %s\n"
+msgstr "%s ¿¡ ´ëÇÑ ÆÐ½º¿öµå¸¦ º¯°æÁß\n"
+
+#: src/passwd.c:1246
+#, c-format
+msgid "The password for %s is unchanged.\n"
+msgstr "%s ¿¡ ´ëÇÑ ÆÐ½º¿öµå°¡ º¯°æµÇÁö ¾Ê¾Ò½À´Ï´Ù.\n"
+
+#: src/passwd.c:1297
+msgid "Password changed.\n"
+msgstr "ÆÐ½º¿öµå°¡ º¯°æµÇ¾ú½À´Ï´Ù.\n"
+
+#: src/pwck.c:87
+#, fuzzy, c-format
+msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+msgstr "»ç¿ë¹ý: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+
+#: src/pwck.c:90
+#, fuzzy, c-format
+msgid "Usage: %s [-q] [-r] [-s] [passwd]\n"
+msgstr "»ç¿ë¹ý: %s [-q] [-r] [-s] [ÆÐ½º¿öµå]\n"
+
+#.
+#. * Tell the user this entire line is bogus and ask
+#. * them to delete it.
+#.
+#: src/pwck.c:295
+msgid "invalid password file entry\n"
+msgstr "À¯È¿ÇÏÁö ¾ÊÀº ÆÐ½º¿öµå ÆÄÀÏ ÀÔ·Â\n"
+
+#.
+#. * Tell the user this entry is a duplicate of
+#. * another and ask them to delete it.
+#.
+#: src/pwck.c:357
+msgid "duplicate password entry\n"
+msgstr "ÆÐ½º¿öµå ÀԷ°ª º¹Á¦\n"
+
+#: src/pwck.c:373
+#, c-format
+msgid "invalid user name `%s'\n"
+msgstr "À¯È¿ÇÏÁö ¾ÊÀº »ç¿ëÀÚ¸í `%s'\n"
+
+#.
+#. * No primary group, just give a warning
+#.
+#: src/pwck.c:388
+#, fuzzy, c-format
+msgid "user %s: no group %u\n"
+msgstr "»ç¿ëÀÚ %s: ±×·ìÀÌ ¾ø½À´Ï´Ù %d\n"
+
+#: src/pwck.c:404
+#, c-format
+msgid "user %s: directory %s does not exist\n"
+msgstr "»ç¿ëÀÚ %s: µð·ºÅ丮 %s ´Â Á¸ÀçÇÏÁö ¾Ê½À´Ï´Ù\n"
+
+#.
+#. * Login shell doesn't exist, give a warning
+#.
+#: src/pwck.c:420
+#, c-format
+msgid "user %s: program %s does not exist\n"
+msgstr "»ç¿ëÀÚ %s: ÇÁ·Î±×·¥ %s ´Â Á¸ÀçÇÏÁö ¾Ê½À´Ï´Ù\n"
+
+#.
+#. * Tell the user this entire line is bogus and ask
+#. * them to delete it.
+#.
+#: src/pwck.c:456
+msgid "invalid shadow password file entry\n"
+msgstr "À¯È¿ÇÏÁö ¾ÊÀº ½¦µµ¿ì ÆÐ½º¿öµå ÆÄÀÏ ÀԷ°ª\n"
+
+#.
+#. * Tell the user this entry is a duplicate of
+#. * another and ask them to delete it.
+#.
+#: src/pwck.c:518
+msgid "duplicate shadow password entry\n"
+msgstr "½¦µµ¿ì ÆÐ½º¿öµå ÀԷ°ª º¹Á¦\n"
+
+#.
+#. * Tell the user this entry has no matching
+#. * /etc/passwd entry and ask them to delete it.
+#.
+#: src/pwck.c:542
+msgid "no matching password file entry\n"
+msgstr "ÆÐ½º¿öµå ÆÄÀÏ ÀԷ°ªÀÌ ÀÏÄ¡ÇÏÁö ¾Ê½À´Ï´Ù\n"
+
+#: src/pwck.c:560
+#, c-format
+msgid "user %s: last password change in the future\n"
+msgstr "»ç¿ëÀÚ %s: ¸¶Áö¸· ÆÐ½º¿öµå´Â ³ªÁß¿¡ º¯°æ\n"
+
+#: src/pwconv.c:84 src/pwunconv.c:93
+#, c-format
+msgid "%s: can't lock passwd file\n"
+msgstr "%s: ÆÐ½º¿öµå ÆÄÀÏ Àá±ÝÀ» ÇÒ ¼ö ¾ø½À´Ï´Ù\n"
+
+#: src/pwconv.c:89 src/pwunconv.c:98
+#, c-format
+msgid "%s: can't open passwd file\n"
+msgstr "%s: ÆÐ½º¿öµå ÆÄÀÏÀ» ¿­ ¼ö ¾ø½À´Ï´Ù\n"
+
+#: src/pwconv.c:117
+#, c-format
+msgid "%s: can't remove shadow entry for %s\n"
+msgstr "%s: %s ¿¡ ´ëÇÑ ½¦µµ¿ì ÀԷ°ªÀ» Á¦°ÅÇÒ ¼ö ¾ø½À´Ï´Ù\n"
+
+#: src/pwconv.c:163
+#, c-format
+msgid "%s: can't update passwd entry for %s\n"
+msgstr "%s: %s ¿¡ ´ëÇÑ ÆÐ½º¿öµå ÀԷ°ªÀ» ¾÷µ¥ÀÌÆ® ÇÒ ¼ö ¾ø½À´Ï´Ù\n"
+
+#: src/pwconv.c:170
+#, c-format
+msgid "%s: can't update shadow file\n"
+msgstr "%s: ½¦µµ¿ì ÆÄÀÏÀ» ¾÷µ¥ÀÌÆ® ÇÒ ¼ö ¾ø½À´Ï´Ù\n"
+
+#: src/pwconv.c:175
+#, c-format
+msgid "%s: can't update passwd file\n"
+msgstr "%s: ÆÐ½º¿öµå ÆÄÀÏÀ» ¾÷µ¥ÀÌÆ® ÇÒ ¼ö ¾ø½À´Ï´Ù\n"
+
+#: src/pwunconv.c:50
+#, c-format
+msgid "%s: Shadow passwords are not configured.\n"
+msgstr "%s: ½¦µµ¿ì ÆÐ½º¿öµå°¡ Çü¼ºµÇÁö ¾Ê¾Ò½À´Ï´Ù.\n"
+
+#: src/pwunconv.c:160
+#, c-format
+msgid "%s: can't update entry for user %s\n"
+msgstr "%s: »ç¿ëÀÚ %s ¿¡ ´ëÇÑ ÀԷ°ªÀ» ¾÷µ¥ÀÌÆ® ÇÒ ¼ö ¾ø½À´Ï´Ù\n"
+
+#: src/pwunconv.c:181
+#, c-format
+msgid "%s: can't delete shadow password file\n"
+msgstr "%s: ½¦µµ¿ì ÆÐ½º¿öµå ÆÄÀÏÀ» Áö¿ï ¼ö ¾ø½À´Ï´Ù\n"
+
+#: src/su.c:133
+msgid "Sorry."
+msgstr "Á˼ÛÇÕ´Ï´Ù."
+
+#: src/su.c:216
+#, c-format
+msgid "%s: must be run from a terminal\n"
+msgstr "%s: Å͹̳ο¡¼­ ¹Þµå½Ã ½ÇÇàÀÌ µÇ¾îÁ®¾ß ÇÕ´Ï´Ù\n"
+
+#: src/su.c:306
+#, c-format
+msgid "%s: pam_start: error %d\n"
+msgstr "%s: pam_start: ¿À·ù %d\n"
+
+#: src/su.c:336
+#, c-format
+msgid "Unknown id: %s\n"
+msgstr "¾Ë¼ö¾ø´Â ¾ÆÀ̵ð: %s\n"
+
+#: src/su.c:373 src/su.c:390
+#, c-format
+msgid "You are not authorized to su %s\n"
+msgstr "´ç½ÅÀº su %s ¿¡°Ô ÀÎÁõÀÌ µÇÁö ¾Ê¾Ò½À´Ï´Ù\n"
+
+#. require own password
+#: src/su.c:385
+msgid "(Enter your own password.)"
+msgstr "(ÀÚ½ÅÀÇ ÆÐ½º¿öµå¸¦ ÀÔ·ÂÇϼ¼¿ä.)"
+
+#: src/su.c:419
+#, c-format
+msgid ""
+"%s: %s\n"
+"(Ignored)\n"
+msgstr ""
+"%s: %s\n"
+"(¹«½ÃµÊ)\n"
+
+#: src/su.c:626
+msgid "No shell\n"
+msgstr "½©ÀÌ ¾øÀ½\n"
+
+#. must be a password file!
+#: src/sulogin.c:132
+msgid "No password file\n"
+msgstr "ÆÐ½º¿öµå ÆÄÀÏ ¾øÀ½\n"
+
+#.
+#. * Fail secure
+#.
+#: src/sulogin.c:174
+msgid "No password entry for 'root'\n"
+msgstr "'·çÆ®'¿¡ ´ëÇÑ ÆÐ½º¿öµå ÆÄÀÏ ÀԷ°ª ¾øÀ½\n"
+
+#: src/sulogin.c:190
+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"
+"(±×·¸Áö ¾ÊÀ¸¸é ½Ã½ºÅÛ Á¤ºñ¸¦ À§ÇÏ¿© ·çÆ® ÆÐ½º¿öµå¸¦ ÀÔ·ÂÇϼ¼¿ä)"
+
+#. make new environment active
+#: src/sulogin.c:243
+msgid "Entering System Maintenance Mode\n"
+msgstr "½Ã½ºÅÛ Á¤ºñ ¸ðµå·Î µé¾î°¡°í ÀÖ½À´Ï´Ù\n"
+
+#: src/useradd.c:251
+#, c-format
+msgid "%s: rebuild the group database\n"
+msgstr "%s: ±×·ì µ¥ÀÌÅͺ£À̽º¸¦ ´Ù½Ã ¸¸µì´Ï´Ù\n"
+
+#: src/useradd.c:260
+#, c-format
+msgid "%s: rebuild the shadow group database\n"
+msgstr "%s: ½¦µµ¿ì ±×·ì µ¥ÀÌÅͺ£À̽º¸¦ ´Ù½Ã ¸¸µì´Ï´Ù\n"
+
+#: src/useradd.c:295 src/useradd.c:309 src/usermod.c:981 src/usermod.c:995
+#, c-format
+msgid "%s: invalid numeric argument `%s'\n"
+msgstr "%s: À¯È¿ÇÏÁö ¾ÊÀº ¼ýÀÚ ÀԷ°ª `%s'\n"
+
+#: src/useradd.c:365
+#, c-format
+msgid "%s: unknown gid %s\n"
+msgstr "%s: ¾Ë¼ö¾ø´Â gid(±×·ì ¾ÆÀ̵ð) %s\n"
+
+#: src/useradd.c:373 src/useradd.c:676 src/useradd.c:1269 src/usermod.c:260
+#: src/usermod.c:1128
+#, c-format
+msgid "%s: unknown group %s\n"
+msgstr "%s: ¾Ë¼ö¾ø´Â ±×·ì %s\n"
+
+#: src/useradd.c:440
+#, fuzzy, c-format
+msgid "group=%s,%u  basedir=%s  skel=%s\n"
+msgstr "±×·ì=%s,%ld Ãʱ⠵ð·ºÅ丮=%s skel=%s\n"
+
+#: src/useradd.c:444
+#, c-format
+msgid "shell=%s  "
+msgstr "½©=%s  "
+
+#: src/useradd.c:446
+#, c-format
+msgid "inactive=%ld  expire=%s"
+msgstr "ºñȰ¼ºÈ­=%ld ¸¸±â=%s"
+
+#: src/useradd.c:450
+#, fuzzy, c-format
+msgid "GROUP=%u\n"
+msgstr "±×·ì=%ld\n"
+
+#: src/useradd.c:451
+#, c-format
+msgid "HOME=%s\n"
+msgstr "Ȩµð·ºÅ丮=%s\n"
+
+#: src/useradd.c:453
+#, c-format
+msgid "INACTIVE=%ld\n"
+msgstr "ºñȰ¼ºÈ­=%ld\n"
+
+#: src/useradd.c:454
+#, c-format
+msgid "EXPIRE=%s\n"
+msgstr "¸¸±â=%s\n"
+
+#: src/useradd.c:456
+#, c-format
+msgid "SHELL=%s\n"
+msgstr "½©=%s\n"
+
+#: src/useradd.c:457
+#, c-format
+msgid "SKEL=%s\n"
+msgstr "SKEL=%s\n"
+
+#: src/useradd.c:498
+#, c-format
+msgid "%s: cannot create new defaults file\n"
+msgstr "%s: »õ·Î¿î µðÆúÆ® ÆÄÀÏÀ» ¸¸µé¼ö ¾ø½À´Ï´Ù\n"
+
+#: src/useradd.c:503
+#, fuzzy, c-format
+msgid "%s: cannot open new defaults file\n"
+msgstr "%s: »õ·Î¿î µðÆúÆ® ÆÄÀÏÀ» ¸¸µé¼ö ¾ø½À´Ï´Ù\n"
+
+#: src/useradd.c:596 src/useradd.c:608
+#, c-format
+msgid "%s: rename: %s"
+msgstr "%s: À̸§ Àç ¼³Á¤: %s"
+
+#: src/useradd.c:697 src/usermod.c:281
+#, c-format
+msgid "%s: group `%s' is a NIS group.\n"
+msgstr "%s: ±×·ì `%s' ´Â NIS ±×·ìÀÔ´Ï´Ù.\n"
+
+#: src/useradd.c:706 src/usermod.c:290
+#, c-format
+msgid "%s: too many groups specified (max %d).\n"
+msgstr "%s: ³Ê¹«³ª ¸¹Àº ±×·ìÀÌ ¸í½ÃµÇ¾ú½À´Ï´Ù (ÃÖ´ë %d).\n"
+
+#: src/useradd.c:738 src/usermod.c:322
+#, c-format
+msgid "usage: %s\t[-u uid [-o]] [-g group] [-G group,...] \n"
+msgstr "»ç¿ë¹ý: %s\t[-u uid(»ç¿ëÀÚ ¾ÆÀ̵ð) [-o]] [-g ±×·ì¸í][-G ±×·ì,...]\n"
+
+#: src/useradd.c:742
+msgid "\t\t[-d home] [-s shell] [-c comment] [-m [-k template]]\n"
+msgstr "\t\t[-d È¨µð·ºÅ丮][-s ½©][-c Àû¿ä»çÇ×][-m [-k template]]\n"
+
+#: src/useradd.c:745 src/usermod.c:329
+#, fuzzy
+msgid "[-f inactive] [-e expire ] "
+msgstr "[-f ºñȰ¼ºÈ­][-e ¸¸±â] "
+
+#: src/useradd.c:748
+msgid "[-A program] "
+msgstr "[-A ÇÁ·Î±×·¥] "
+
+#: src/useradd.c:750
+msgid "[-p passwd] name\n"
+msgstr "[-p ÆÐ½º¿öµå] À̸§\n"
+
+#: src/useradd.c:753
+#, c-format
+msgid "       %s\t-D [-g group] [-b base] [-s shell]\n"
+msgstr "\t%s\t-D [-g ±×·ì¸í][-b Ãʱâµð·ºÅ丮][-s ½©]\n"
+
+#: src/useradd.c:756
+#, fuzzy
+msgid "\t\t[-f inactive] [-e expire ]\n"
+msgstr "\t\t[-f ºñȰ¼ºÈ­][-e ¸¸±â]\n"
+
+#: src/useradd.c:850 src/usermod.c:480
+#, c-format
+msgid "%s: error locking group file\n"
+msgstr "%s: ±×·ì ÆÄÀÏ Àá±ÝÀ» Çϴµ¥ ¿À·ù\n"
+
+#: src/useradd.c:855 src/usermod.c:486
+#, c-format
+msgid "%s: error opening group file\n"
+msgstr "%s: ±×·ì ÆÄÀÏÀ» ¿©´Âµ¥ ¿À·ù\n"
+
+#: src/useradd.c:862 src/usermod.c:597
+#, c-format
+msgid "%s: error locking shadow group file\n"
+msgstr "%s: ½¦µµ¿ì ±×·ìÀ» Àá±×´Âµ¥ ¿À·ù\n"
+
+#: src/useradd.c:867 src/usermod.c:603
+#, c-format
+msgid "%s: error opening shadow group file\n"
+msgstr "%s: ±×·ì ÆÄÀÏÀ» ¿©´Âµ¥ ¿À·ù\n"
+
+#: src/useradd.c:1039
+#, fuzzy, c-format
+msgid "%s: uid %u is not unique\n"
+msgstr "%s: uid(»ç¿ëÀÚ ¾ÆÀ̵ð) %ld ´Â ÀûÀýÇÏÁö ¾Ê½À´Ï´Ù\n"
+
+#: src/useradd.c:1069
+#, c-format
+msgid "%s: can't get unique uid\n"
+msgstr "%s: ÀûÀýÇÑ uid(»ç¿ëÀÚ ¾ÆÀ̵ð)¸¦ ¾òÀ» ¼ö ¾ø½À´Ï´Ù\n"
+
+#: src/useradd.c:1174 src/useradd.c:1325 src/usermod.c:1075 src/usermod.c:1086
+#: src/usermod.c:1096 src/usermod.c:1143 src/usermod.c:1187
+#, c-format
+msgid "%s: invalid field `%s'\n"
+msgstr "%s: `%s' ºÎºÐÀº À¯È¿ÇÏÁö ¾Ê½À´Ï´Ù\n"
+
+#: src/useradd.c:1189
+#, c-format
+msgid "%s: invalid base directory `%s'\n"
+msgstr "%s: ±âº» µð·ºÅ丮 `%s' ´Â À¯È¿ÇÏÁö ¾Ê½À´Ï´Ù\n"
+
+#: src/useradd.c:1199
+#, c-format
+msgid "%s: invalid comment `%s'\n"
+msgstr "%s: Àû¿ä»çÇ× `%s' Àº À¯È¿ÇÏÁö ¾Ê½À´Ï´Ù\n"
+
+#: src/useradd.c:1210
+#, c-format
+msgid "%s: invalid home directory `%s'\n"
+msgstr "%s: È¨ µð·ºÅ丮 `%s' ´Â À¯È¿ÇÏÁö ¾Ê½À´Ï´Ù\n"
+
+#: src/useradd.c:1229 src/usermod.c:1110
+#, c-format
+msgid "%s: invalid date `%s'\n"
+msgstr "%s: ³¯Â¥ `%s' ´Â À¯È¿ÇÏÁö ¾Ê½À´Ï´Ù\n"
+
+#: src/useradd.c:1242
+#, c-format
+msgid "%s: shadow passwords required for -e\n"
+msgstr "%s: ½¦µµ¿ì ÆÐ½º¿öµå°¡ -e ¿É¼ÇÀ» ¿ä±¸ÇÕ´Ï´Ù\n"
+
+#: src/useradd.c:1258
+#, c-format
+msgid "%s: shadow passwords required for -f\n"
+msgstr "%s: ½¦µµ¿ì ÆÐ½º¿öµå°¡ -f ¿É¼ÇÀ» ¿ä±¸ÇÕ´Ï´Ù\n"
+
+#: src/useradd.c:1336
+#, c-format
+msgid "%s: invalid shell `%s'\n"
+msgstr "%s: À¯È¿ÇÏÁö ¾ÊÀº ½© `%s'\n"
+
+#: src/useradd.c:1377
+#, c-format
+msgid "%s: invalid user name `%s'\n"
+msgstr "%s: À¯È¿ÇÏÁö ¾ÊÀº »ç¿ëÀÚ¸í `%s'\n"
+
+#: src/useradd.c:1413 src/userdel.c:298 src/usermod.c:1255
+#, c-format
+msgid "%s: cannot rewrite password file\n"
+msgstr "%s: ÆÐ½º¿öµå ÆÄÀÏÀ» ´Ù½Ã ¾µ¼ö°¡ ¾ø½À´Ï´Ù\n"
+
+#: src/useradd.c:1420 src/userdel.c:303 src/usermod.c:1262
+#, c-format
+msgid "%s: cannot rewrite shadow password file\n"
+msgstr "%s: ½¦µµ¿ì ÆÐ½º¿öµå ÆÄÀÏÀ» ´Ù½Ã ¾µ¼ö°¡ ¾ø½À´Ï´Ù\n"
+
+#: src/useradd.c:1461 src/userdel.c:367 src/usermod.c:1296
+#, c-format
+msgid "%s: unable to lock password file\n"
+msgstr "%s: ÆÐ½º¿öµå ÆÄÀÏ Àá±ÝÀ» ÇÒ ¼ö ¾ø½À´Ï´Ù\n"
+
+#: src/useradd.c:1466 src/userdel.c:372 src/usermod.c:1301
+#, c-format
+msgid "%s: unable to open password file\n"
+msgstr "%s: ÆÐ½º¿öµå ÆÄÀÏÀ» ¿­ ¼ö ¾ø½À´Ï´Ù\n"
+
+#: src/useradd.c:1474 src/userdel.c:379 src/usermod.c:1308
+#, c-format
+msgid "%s: cannot lock shadow password file\n"
+msgstr "%s: ½¦µµ¿ì ÆÐ½º¿öµå ÆÄÀÏÀ» Àá±Û ¼ö ¾ø½À´Ï´Ù\n"
+
+#: src/useradd.c:1481 src/userdel.c:385 src/usermod.c:1314
+#, c-format
+msgid "%s: cannot open shadow password file\n"
+msgstr "%s: ½¦µµ¿ì ÆÐ½º¿öµå ÆÄÀÏÀ» ¿­ ¼ö ¾ø½À´Ï´Ù\n"
+
+#: src/useradd.c:1580 src/usermod.c:1405
+#, c-format
+msgid "%s: error adding authentication method\n"
+msgstr "%s: ÀÎÁõ¹æ¹ý Ãß°¡Çϴµ¥ ¿À·ù\n"
+
+#: src/useradd.c:1604
+#, c-format
+msgid "%s: error adding new password entry\n"
+msgstr "%s: »õ·Î¿î ÆÐ½º¿öµå ÀԷ°ªÀ» Ãß°¡Çϴµ¥ ¿À·ù\n"
+
+#: src/useradd.c:1618
+#, c-format
+msgid "%s: error updating password dbm entry\n"
+msgstr "%s: ÆÐ½º¿öµå dbm ÀԷ°ªÀ» ¾÷µ¥ÀÌÆ®Çϴµ¥ ¿À·ù\n"
+
+#: src/useradd.c:1634 src/usermod.c:1471
+#, c-format
+msgid "%s: error adding new shadow password entry\n"
+msgstr "%s: »õ·Î¿î ½¦µµ¿ì ÆÐ½º¿öµå ÀԷ°ªÀ» Ãß°¡Çϴµ¥ ¿À·ù\n"
+
+#: src/useradd.c:1650 src/usermod.c:1488
+#, c-format
+msgid "%s: error updating shadow passwd dbm entry\n"
+msgstr "%s: ½¦µµ¿ì ÆÐ½º¿öµå dbm ÀԷ°ªÀ» ¾÷µ¥ÀÌÆ® Çϴµ¥ ¿À·ù\n"
+
+#: src/useradd.c:1682
+#, c-format
+msgid "%s: cannot create directory %s\n"
+msgstr "%s: µð·ºÅ丮 %s ¸¦ ¸¸µé ¼ö ¾ø½À´Ï´Ù\n"
+
+#: src/useradd.c:1806 src/usermod.c:1233
+#, c-format
+msgid "%s: user %s exists\n"
+msgstr "%s: »ç¿ëÀÚ %s ´Â Á¸ÀçÇÕ´Ï´Ù\n"
+
+#: src/useradd.c:1821
+#, c-format
+msgid ""
+"%s: group %s exists - if you want to add this user to that group, use -g.\n"
+msgstr ""
+
+#: src/useradd.c:1854
+#, c-format
+msgid "%s: warning: CREATE_HOME not supported, please use -m instead.\n"
+msgstr ""
+"%s:°æ°í: CREATE_HOME Àº Áö¿øµÇÁö ¾Ê½À´Ï´Ù, -m ¿É¼ÇÀ» ´ë½Å »ç¿ëÇϼ¼¿ä.\n"
+
+#: src/userdel.c:129
+#, c-format
+msgid "usage: %s [-r] name\n"
+msgstr "»ç¿ë¹ý: %s [-r] À̸§\n"
+
+#: src/userdel.c:181 src/userdel.c:267
+#, c-format
+msgid "%s: error updating group entry\n"
+msgstr "%s: ±×·ì ÀԷ°ªÀ» ¾÷µ¥ÀÌÆ®Çϴµ¥ ¿À·ù\n"
+
+#: src/userdel.c:191 src/userdel.c:276
+#, c-format
+msgid "%s: cannot update dbm group entry\n"
+msgstr "%s: dbm ±×·ì ÀԷ°ªÀ» ¾÷µ¥ÀÌÆ® ÇÒ ¼ö ¾ø½À´Ï´Ù\n"
+
+#: src/userdel.c:219
+#, fuzzy, c-format
+msgid "%s: cannot remove dbm group entry\n"
+msgstr "%s: dbm ±×·ì ÀԷ°ªÀ» ¾÷µ¥ÀÌÆ® ÇÒ ¼ö ¾ø½À´Ï´Ù\n"
+
+#: src/userdel.c:308
+#, c-format
+msgid "%s: cannot rewrite TCFS key file\n"
+msgstr "%s: TCFS Å° ÆÄÀÏÀ» ´Ù½Ã ¾µ ¼ö ¾ø½À´Ï´Ù\n"
+
+#: src/userdel.c:392
+#, c-format
+msgid "%s: cannot lock TCFS key file\n"
+msgstr "%s: TCFS Å° ÆÄÀÏÀ» Àá±Û ¼ö ¾ø½À´Ï´Ù\n"
+
+#: src/userdel.c:397
+#, c-format
+msgid "%s: cannot open TCFS key file\n"
+msgstr "%s: TCFS Å° ÆÄÀÏÀ» ¿­ ¼ö ¾ø½À´Ï´Ù\n"
+
+#: src/userdel.c:408
+#, c-format
+msgid "%s: cannot open group file\n"
+msgstr "%s: ±×·ì ÆÄÀÏÀ» ¿­ ¼ö ¾ø½À´Ï´Ù\n"
+
+#: src/userdel.c:419
+#, c-format
+msgid "%s: cannot open shadow group file\n"
+msgstr "%s: ½¦µµ¿ì ±×·ì ÆÄÀÏÀ» ¿­ ¼ö ¾ø½À´Ï´Ù\n"
+
+#: src/userdel.c:451 src/userdel.c:468
+#, c-format
+msgid "%s: error deleting authentication\n"
+msgstr "%s: ÀÎÁõÀ» Áö¿ì´Âµ¥ ¿À·ù\n"
+
+#: src/userdel.c:479
+#, c-format
+msgid "%s: error deleting password entry\n"
+msgstr "%s: ÆÐ½º¿öµå ÀԷ°ªÀ» Áö¿ì´Âµ¥ ¿À·ù\n"
+
+#: src/userdel.c:485
+#, c-format
+msgid "%s: error deleting shadow password entry\n"
+msgstr "%s: ½¦µµ¿ì ÆÐ½º¿öµå ÀԷ°ªÀ» Áö¿ì´Âµ¥ ¿À·ù\n"
+
+#: src/userdel.c:496
+#, c-format
+msgid "%s: error deleting TCFS entry\n"
+msgstr "%s: TCFS ÀԷ°ªÀ» Áö¿ì´Âµ¥ ¿À·ù\n"
+
+#: src/userdel.c:510
+#, c-format
+msgid "%s: error deleting password dbm entry\n"
+msgstr "%s: ÆÐ½º¿öµå dbm ÀԷ°ªÀ» Áö¿ì´Âµ¥ ¿À·ù\n"
+
+#: src/userdel.c:533
+#, c-format
+msgid "%s: error deleting shadow passwd dbm entry\n"
+msgstr "%s: ½¦µµ¿ì ÆÐ½º¿öµå dbm ÀԷ°ªÀ» Áö¿ì´Âµ¥ ¿À·ù\n"
+
+#: src/userdel.c:569
+#, c-format
+msgid "%s: user %s is currently logged in\n"
+msgstr "%s: »ç¿ëÀÚ %s ´Â ÇöÀ砷αäÇÑ »óÅ ÀÔ´Ï´Ù\n"
+
+#: src/userdel.c:659
+#, c-format
+msgid "%s: warning: %s not owned by %s, not removing\n"
+msgstr ""
+"%s: °æ°í: %s ´Â %s ¿¡ ¼ÒÀ¯µÇ¾î ÀÖÁö ¾Ê½À´Ï´Ù, µû¶ó¼­ Á¦°ÅµÇÁö ¾Ê½À´Ï´Ù\n"
+
+#: src/userdel.c:666
+#, c-format
+msgid "%s: warning: can't remove "
+msgstr "%s: °æ°í: Á¦°ÅÇÒ ¼ö ¾ø½À´Ï´Ù "
+
+#: src/userdel.c:758 src/usermod.c:1023
+#, c-format
+msgid "%s: user %s does not exist\n"
+msgstr "%s: »ç¿ëÀÚ %s ´Â Á¸ÀçÇÏÁö ¾Ê½À´Ï´Ù\n"
+
+#: src/userdel.c:770 src/usermod.c:1039
+#, c-format
+msgid "%s: user %s is a NIS user\n"
+msgstr "%s: »ç¿ëÀÚ %s ´Â NIS »ç¿ëÀÚ ÀÔ´Ï´Ù\n"
+
+#: src/userdel.c:799
+#, c-format
+msgid "%s: %s not owned by %s, not removing\n"
+msgstr "%s: %s ´Â %s ¿¡ ¼ÒÀ¯µÇ¾î ÀÖÁö ¾Ê½À´Ï´Ù, µû¶ó¼­ Á¦°ÅµÇÁö ¾Ê½À´Ï´Ù\n"
+
+#: src/userdel.c:818
+#, c-format
+msgid "%s: not removing directory %s (would remove home of user %s)\n"
+msgstr ""
+"%s: µð·ºÅ丮 %s ´Â Á¦°ÅµÇÁö ¾Ê½À´Ï´Ù (»ç¿ëÀÚ %s ÀǠȨ µð·ºÅ丮°¡ Áö¿öÁú °ÍÀÔ"
+"´Ï´Ù)\n"
+
+#: src/userdel.c:830
+#, c-format
+msgid "%s: error removing directory %s\n"
+msgstr "%s: µð·ºÅ丮 %s ¸¦ Áö¿ì´Âµ¥ ¿À·ù\n"
+
+#: src/usermod.c:326
+msgid "\t\t[-d home [-m]] [-s shell] [-c comment] [-l new_name]\n"
+msgstr "\t\t[-d È¨ µð·ºÅ丮 [-m]] [-s ½©] [-c Àû¿ä»çÇ×] [-l »õ_À̸§]\n"
+
+#: src/usermod.c:332
+#, fuzzy
+msgid "[-A {DEFAULT|program},... ] "
+msgstr "[-A {µðÆúÆ®|ÇÁ·Î±×·¥},...]"
+
+#: src/usermod.c:334
+#, fuzzy
+msgid "[-p passwd] [-L|-U] name\n"
+msgstr "[-p ÆÐ½º¿öµå] À̸§\n"
+
+#: src/usermod.c:514
+#, c-format
+msgid "%s: out of memory in update_group\n"
+msgstr "%s: ¾÷µ¥ÀÌÆ®_±×·ì¿¡ ¸Þ¸ð¸® ºÎÁ·\n"
+
+#: src/usermod.c:641
+#, c-format
+msgid "%s: out of memory in update_gshadow\n"
+msgstr "%s: ¾÷µ¥ÀÌÆ®_±×·ì½¦µµ¿ì¿¡ ¸Þ¸ð¸® ºÎÁ·\n"
+
+#: src/usermod.c:1210
+#, c-format
+msgid "%s: no flags given\n"
+msgstr "%s: ÁÖ¾îÁø flag °¡ ¾ø½À´Ï´Ù\n"
+
+#: src/usermod.c:1217
+#, c-format
+msgid "%s: shadow passwords required for -e and -f\n"
+msgstr "%s: ½¦µµ¿ì ÆÐ½º¿öµå°¡ -e ¿É¼Ç°ú -f ¿É¼ÇÀ» ¿ä±¸ÇÕ´Ï´Ù\n"
+
+#: src/usermod.c:1239
+#, fuzzy, c-format
+msgid "%s: uid %lu is not unique\n"
+msgstr "%s: uid(»ç¿ëÀÚ ¾ÆÀ̵ð) %ld ´Â ÀûÀýÇÏÁö ¾Ê½À´Ï´Ù\n"
+
+#: src/usermod.c:1392
+#, c-format
+msgid "%s: error deleting authentication method\n"
+msgstr "%s: ÀÎÁõ¹æ¹ýÀ» Áö¿ì´Âµ¥ ¿À·ù\n"
+
+#: src/usermod.c:1418
+#, c-format
+msgid "%s: error changing authentication method\n"
+msgstr "%s: ÀÎÁõ¹æ¹ýÀ» º¯°æÇϴµ¥ ¿À·ù\n"
+
+#: src/usermod.c:1436
+#, c-format
+msgid "%s: error changing password entry\n"
+msgstr "%s: ÆÐ½º¿öµå ÀԷ°ªÀ» º¯°æÇϴµ¥ ¿À·ù\n"
+
+#: src/usermod.c:1442
+#, c-format
+msgid "%s: error removing password entry\n"
+msgstr "%s: ÆÐ½º¿öµå ÀԷ°ªÀ» Á¦°ÅÇϴµ¥ ¿À·ù\n"
+
+#: src/usermod.c:1451
+#, c-format
+msgid "%s: error adding password dbm entry\n"
+msgstr "%s: ÆÐ½º¿öµå dbm ÀԷ°ªÀ» Ãß°¡Çϴµ¥ ¿À·ù\n"
+
+#: src/usermod.c:1459
+#, c-format
+msgid "%s: error removing passwd dbm entry\n"
+msgstr "%s: ÆÐ½º¿öµå dbm ÀԷ°ªÀ» Á¦°ÅÇϴµ¥ ¿À·ù\n"
+
+#: src/usermod.c:1478
+#, c-format
+msgid "%s: error removing shadow password entry\n"
+msgstr "%s: ½¦µµ¿ì ÆÐ½º¿öµå ÀԷ°ªÀ» Á¦°ÅÇϴµ¥ ¿À·ù\n"
+
+#: src/usermod.c:1495
+#, c-format
+msgid "%s: error removing shadow passwd dbm entry\n"
+msgstr "%s: ½¦µµ¿ì ÆÐ½º¿öµå dbm ÀԷ°ªÀ» Á¦°ÅÇϴµ¥ ¿À·ù\n"
+
+#: src/usermod.c:1524
+#, c-format
+msgid "%s: directory %s exists\n"
+msgstr "%s: µð·ºÅ丮 %s ´Â Á¸ÀçÇÕ´Ï´Ù\n"
+
+#: src/usermod.c:1533
+#, c-format
+msgid "%s: can't create %s\n"
+msgstr "%s: %s ¸¦ ¸¸µé ¼ö ¾ø½À´Ï´Ù\n"
+
+#: src/usermod.c:1539
+#, c-format
+msgid "%s: can't chown %s\n"
+msgstr "%s: %s ¸¦ chown ÇÒ ¼ö ¾ø½À´Ï´Ù\n"
+
+#: src/usermod.c:1556
+#, c-format
+msgid "%s: cannot rename directory %s to %s\n"
+msgstr "%s: µð·ºÅ丮 %s ¿¡¼­ %s ·Î À̸§À» ¹Ù²Ü¼ö ¾ø½À´Ï´Ù\n"
+
+#. better leave it alone
+#: src/usermod.c:1653
+#, c-format
+msgid "%s: warning: %s not owned by %s\n"
+msgstr "%s: °æ°í: %s ´Â %s ¿¡ ¼ÒÀ¯µÇ¾î ÀÖÁö ¾Ê½À´Ï´Ù\n"
+
+#: src/usermod.c:1659
+msgid "failed to change mailbox owner"
+msgstr "¸ÞÀϹڽº ¼ÒÀ¯ÀÚ¸¦ º¯°æÇϴµ¥ ½ÇÆÐÇß½À´Ï´Ù"
+
+#: src/usermod.c:1667
+msgid "failed to rename mailbox"
+msgstr "¸ÞÀϹڽºÀÇ À̸§À» ¹Ù²Ù´Âµ¥ ½ÇÆÐÇß½À´Ï´Ù"
+
+#: src/vipw.c:104
+#, c-format
+msgid ""
+"\n"
+"%s: %s is unchanged\n"
+msgstr ""
+"\n"
+"%s: %s ´Â º¯°æµÇÁö ¾Ê¾Ò½À´Ï´Ù\n"
+
+#: src/vipw.c:132
+msgid "Couldn't lock file"
+msgstr "ÆÄÀÏÀ» Àá±Û ¼ö ¾ø½À´Ï´Ù"
+
+#: src/vipw.c:141
+msgid "Couldn't make backup"
+msgstr "¹é¾÷À» ¸¸µé ¼ö ¾ø½À´Ï´Ù"
+
+#: src/vipw.c:206
+#, c-format
+msgid "%s: can't restore %s: %s (your changes are in %s)\n"
+msgstr ""
+"%s: %s ¸¦ º¹±¸½Ãų ¼ö ¾ø½À´Ï´Ù: %s (´ç½ÅÀÇ º¯°æ»çÇ×Àº %s ¿¡ ÀÖ½À´Ï´Ù)\n"
+
+#: src/vipw.c:244
+msgid ""
+"Usage:\n"
+"`vipw' edits /etc/passwd        `vipw -s' edits /etc/shadow\n"
+"`vigr' edits /etc/group         `vigr -s' edits /etc/gshadow\n"
+msgstr ""
+"»ç¿ë¹ý:\n"
+"`vipw' ´Â /etc/passwd ¸¦ ÆíÁýÇÕ´Ï´Ù\t`vipw -s' ´Â /etc/shadow¸¦ ÆíÁýÇÕ´Ï´Ù\n"
+"`vigr' Àº /etc/group À» ÆíÁýÇÕ´Ï´Ù\t`vigr -s' ´Â /etc/gshadow¸¦ ÆíÁýÇÕ´Ï´Ù\n"
+
+#~ msgid "%s: gid %ld is not unique\n"
+#~ msgstr "%s: gid(±×·ì ¾ÆÀ̵ð) %ld ´Â ÀûÀýÇÏÁö ¾Ê½À´Ï´Ù\n"
+
+#, fuzzy
+#~ msgid "unknown gid: %u\n"
+#~ msgstr "¾Ë¼ö¾ø´Â gid: %d\n"
+
+#~ msgid "%s: uid %d is not unique\n"
+#~ msgstr "%s: uid(»ç¿ëÀÚ ¾ÆÀ̵ð) %d ´Â ÀûÀýÇÏÁö ¾Ê½À´Ï´Ù\n"
+
+#~ msgid "user %s: bad UID (%d)\n"
+#~ msgstr "»ç¿ëÀÚ %s: ÁÁÁö ¾ÊÀº UID(»ç¿ëÀÚ ¾ÆÀ̵ð) (%d)\n"
+
+#~ msgid "%s: no aging information present\n"
+#~ msgstr "%s: ¿¬·É¿¡ ´ëÇÑ ¾î¶°ÇÑ Á¤º¸µµ ³ªÅ¸³ªÁö ¾Ê½À´Ï´Ù\n"
+
+#~ msgid "group %s: bad GID (%d)\n"
+#~ msgstr "±×·ì %s: ÁÁÁö¾ÊÀº GID(±×·ì ¾ÆÀ̵ð) (%d)\n"
+
+#~ msgid "%s: permission denied (shell).\n"
+#~ msgstr "%s: Á¢±Ù±ÇÇÑ ¾øÀ½ (½©).\n"
index 7febab21f9bd86d3337a0693d4f5b6e99ddd13dc..b85e316b552bbf1644a0044379a15e9d37fd1aa7 100644 (file)
Binary files a/po/pl.gmo and b/po/pl.gmo differ
index d2688a5dddc606500439debe8d4d872ace22806f..adb6b9c853939acc8e1a5859c2a08c8e69c60eec 100644 (file)
--- a/po/pl.po
+++ b/po/pl.po
@@ -5,7 +5,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: shadow-981228\n"
-"POT-Creation-Date: 2001-09-08 07:36+0200\n"
+"POT-Creation-Date: 2002-01-06 16:13+0100\n"
 "PO-Revision-Date: 1999-03-02 22:29+01:00\n"
 "Last-Translator: Arkadiusz Mi¶kiewicz <misiek@misiek.eu.org>\n"
 "Language-Team: PL <pl@li.org>\n"
@@ -22,36 +22,36 @@ msgstr "Ostrze
 msgid "Warning: too many groups\n"
 msgstr "Ostrze¿enie: zbyt wiele grup\n"
 
-#: libmisc/age.c:104
+#: libmisc/age.c:77
 msgid "Your password has expired."
 msgstr "Twoje has³o straci³o wa¿no¶æ."
 
-#: libmisc/age.c:107
+#: libmisc/age.c:80
 msgid "Your password is inactive."
 msgstr "Twoje has³o jest nieaktywne."
 
-#: libmisc/age.c:110
+#: libmisc/age.c:83
 msgid "Your login has expired."
 msgstr "Twoje konto straci³o wa¿no¶æ."
 
-#: libmisc/age.c:127
+#: libmisc/age.c:96
 msgid "  Contact the system administrator.\n"
 msgstr "  Skontaktuj siê z administratorem systemu.\n"
 
-#: libmisc/age.c:130
+#: libmisc/age.c:99
 msgid "  Choose a new password.\n"
 msgstr "  Wybierz nowe has³o.\n"
 
-#: libmisc/age.c:228
+#: libmisc/age.c:176
 #, c-format
 msgid "Your password will expire in %ld days.\n"
 msgstr "Twoje has³o straci wa¿no¶æ w ci±gu %ld dni.\n"
 
-#: libmisc/age.c:230
+#: libmisc/age.c:178
 msgid "Your password will expire tomorrow.\n"
 msgstr "Jutro twoje has³o straci wa¿no¶æ.\n"
 
-#: libmisc/age.c:232
+#: libmisc/age.c:180
 msgid "Your password will expire today.\n"
 msgstr "Dzi¶ twoje has³o straci wa¿no¶æ.\n"
 
@@ -110,7 +110,7 @@ msgstr "Nie masz poczty."
 msgid "You have mail."
 msgstr "Masz pocztê."
 
-#: libmisc/obscure.c:281 src/passwd.c:309
+#: libmisc/obscure.c:281 src/passwd.c:244
 #, c-format
 msgid "Bad password: %s.  "
 msgstr "Z³e has³o: %s.  "
@@ -125,12 +125,12 @@ msgstr "passwd: pam_start() nie powiod
 msgid "passwd: %s\n"
 msgstr "passwd: %s\n"
 
-#: libmisc/setupenv.c:205
+#: libmisc/setupenv.c:211
 #, c-format
 msgid "Unable to cd to \"%s\"\n"
 msgstr "Nie mogê zmieniæ katalogu na \"%s\"\n"
 
-#: libmisc/setupenv.c:213
+#: libmisc/setupenv.c:219
 msgid "No directory, logging in with HOME=/"
 msgstr "Brak katalogu, logujê z HOME=/"
 
@@ -180,25 +180,25 @@ msgstr "malloc(%d) nie powiod
 msgid "Dialup Password: "
 msgstr "Has³o dostêpu modemowego: "
 
-#: lib/getdef.c:253
+#: lib/getdef.c:276
 msgid "Could not allocate space for config info.\n"
 msgstr "Nie mogê przydzieliæ miejsca dla informacji o konfiguracji.\n"
 
 #.
 #. * Item was never found.
 #.
-#: lib/getdef.c:307
+#: lib/getdef.c:330
 #, c-format
 msgid "configuration error - unknown item '%s' (notify administrator)\n"
 msgstr ""
 "b³±d w konfiguracji - nieznana pozycja '%s' (powiadom administratora)\n"
 
-#: lib/getdef.c:394
+#: lib/getdef.c:417
 #, c-format
 msgid "error - lookup '%s' failed\n"
 msgstr "b³±d - wyszukiwanie '%s' niepowiod³o siê\n"
 
-#: lib/getdef.c:402
+#: lib/getdef.c:425
 #, c-format
 msgid "%s not found\n"
 msgstr "%s nie znaleziony\n"
@@ -207,7 +207,7 @@ msgstr "%s nie znaleziony\n"
 #. * get the password from her, and set the salt for
 #. * the decryption from the group file.
 #.
-#: lib/pwauth.c:54 src/newgrp.c:305
+#: lib/pwauth.c:54 src/newgrp.c:348
 msgid "Password: "
 msgstr "Has³o: "
 
@@ -218,118 +218,113 @@ msgstr "Has
 
 #: lib/pwauth.c:270
 msgid "(Echo on) "
-msgstr ""
+msgstr "(Echo on) "
 
 #: lib/strerror.c:20
 #, c-format
 msgid "Unknown error %d"
 msgstr "Nieznany b³±d %d"
 
-#: src/chage.c:162
+#: src/chage.c:116
 #, c-format
 msgid ""
-"Usage: %s [ -l ] [ -m min_days ] [ -M max_days ] [ -W warn ]\n"
-"  [ -I inactive ] [ -E expire ] [ -d last_day ] user\n"
+"Usage: %s [-l] [-m min_days] [-M max_days] [-W warn]\n"
+"\t[-I inactive] [-E expire] [-d last_day] user\n"
 msgstr ""
-"U¿ycie: %s [ -l ] [ -m min_dni ] [ -M maks_dni ] [ -W ostrze¿ ]\n"
-"  [ -I nieaktywne ] [ -E utrata_wa¿no¶ci ] [ -d ostatni_dzieñ ] u¿ytkownik\n"
+"U¿ycie: %s [-l] [-m min_dni] [-M maks_dni] [-W ostrze¿]\n"
+"\t[-I nieaktywne] [-E utrata_wa¿no¶ci] [-d ostatni_dzieñ] u¿ytkownik\n"
 
-#: src/chage.c:164
+#: src/chage.c:122
 #, c-format
-msgid "Usage: %s [ -l ] [ -m min_days ] [ -M max_days ] [ -d last_day ] user\n"
+msgid "Usage: %s [-l] [-m min_days] [-M max_days] [-d last_day] user\n"
 msgstr ""
-"U¿ycie: %s [ -l ] [ -m min_dni ] [ -M maks_dni ] [ -d ostatni_dzieñ ] "
-"u¿ytkownik\n"
+"U¿ycie: %s [-l] [-m min_dni] [-M maks_dni] [-d ostatni_dzieñ] u¿ytkownik\n"
 
-#: src/chage.c:199
+#: src/chage.c:157
+#, fuzzy
 msgid ""
-"Enter the new value, or press return for the default\n"
-"\n"
-msgstr ""
-"Wpisz now± warto¶æ lub wci¶nij return by przyj±c warto¶æ domy¶ln±\n"
+"Enter the new value, or press ENTER for the default\n"
 "\n"
+msgstr "Wpisz now± warto¶æ lub wci¶nij ENTER by przyj±c warto¶æ standardow±\n"
 
-#: src/chage.c:202
+#: src/chage.c:160
 msgid "Minimum Password Age"
 msgstr "Minimalny wiek has³a"
 
-#: src/chage.c:207
+#: src/chage.c:166
 msgid "Maximum Password Age"
 msgstr "Maksymalny wiek has³a"
 
-#: src/chage.c:213
+#: src/chage.c:174
 msgid "Last Password Change (YYYY-MM-DD)"
 msgstr "Ostatnia zmiana has³a (RRRR-MM-DD)"
 
-#: src/chage.c:222
+#: src/chage.c:183
 msgid "Password Expiration Warning"
 msgstr "Ostrze¿enie o utracie wa¿no¶ci has³a"
 
-#: src/chage.c:227
+#: src/chage.c:189
 msgid "Password Inactive"
 msgstr "Has³o nieaktywne"
 
-#: src/chage.c:233
+#: src/chage.c:197
 msgid "Account Expiration Date (YYYY-MM-DD)"
 msgstr "Data utraty wa¿no¶ci konta (RRRR-MM-DD)"
 
 #.
 #. * 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.
+#. * 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.
 #.
-#: src/chage.c:287
+#: src/chage.c:248
 #, c-format
 msgid "Minimum:\t%ld\n"
 msgstr "Minimum:\t%ld\n"
 
-#: src/chage.c:288
+#: src/chage.c:249
 #, c-format
 msgid "Maximum:\t%ld\n"
 msgstr "Maksimim:\t%ld\n"
 
-#: src/chage.c:290
+#: src/chage.c:251
 #, c-format
 msgid "Warning:\t%ld\n"
 msgstr "Ostrze¿enie:\t%ld\n"
 
-#: src/chage.c:291
+#: src/chage.c:252
 #, c-format
 msgid "Inactive:\t%ld\n"
 msgstr "Nieaktywne:\t%ld\n"
 
 #.
-#. * 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.
+#. * 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.
 #.
-#: src/chage.c:300
+#: src/chage.c:260
 msgid "Last Change:\t\t"
 msgstr "Ostatnia zmiana:\t\t"
 
-#: src/chage.c:302 src/chage.c:316 src/chage.c:333 src/chage.c:346
+#: src/chage.c:262 src/chage.c:276 src/chage.c:293 src/chage.c:306
 msgid "Never\n"
 msgstr "Nigdy\n"
 
 #.
-#. * The password expiration date is determined from the last
-#. * change date plus the number of days the password is valid
-#. * for.
+#. * The password expiration date is determined from the last change
+#. * date plus the number of days the password is valid for.
 #.
-#: src/chage.c:314
+#: src/chage.c:273
 msgid "Password Expires:\t"
 msgstr "Has³o traci wa¿no¶æ:\t"
 
 #.
-#. * 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.
+#. * 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.
 #.
-#: src/chage.c:330
+#: src/chage.c:290
 #, fuzzy
 msgid "Password Inactive:\t"
 msgstr "Has³o nieaktywne:\t"
@@ -338,582 +333,585 @@ msgstr "Has
 #. * The account will expire on the given date regardless of the
 #. * password expiring or not.
 #.
-#: src/chage.c:344
+#: src/chage.c:304
 #, fuzzy
 msgid "Account Expires:\t"
 msgstr "Has³o traci wa¿no¶æ:\t"
 
-#: src/chage.c:453 src/chpasswd.c:139 src/groupadd.c:536 src/groupdel.c:322
-#: src/groupmod.c:522 src/newusers.c:389 src/useradd.c:1721 src/userdel.c:738
-#: src/usermod.c:1687
-#, fuzzy, c-format
-msgid "%s: PAM authentication failed\n"
-msgstr "%s: b³±d podczas dodawania metody uwierzytelniania\n"
-
-#: src/chage.c:536
+#: src/chage.c:468
 #, c-format
 msgid "%s: do not include \"l\" with other flags\n"
 msgstr "%s: nie ³±cz \"l\" z innymi flagami\n"
 
-#: src/chage.c:548 src/chage.c:660 src/login.c:532
+#: src/chage.c:481 src/chage.c:652 src/login.c:516
 #, c-format
 msgid "%s: permission denied\n"
 msgstr "%s: odmowa dostêpu\n"
 
-#: src/chage.c:560 src/chpasswd.c:157
+#: src/chage.c:512 src/chpasswd.c:139 src/groupadd.c:529 src/groupdel.c:322
+#: src/groupmod.c:520 src/newusers.c:381 src/useradd.c:1754 src/userdel.c:717
+#: src/usermod.c:1732
+#, fuzzy, c-format
+msgid "%s: PAM authentication failed\n"
+msgstr "%s: b³±d podczas dodawania metody uwierzytelniania\n"
+
+#: src/chage.c:533 src/chpasswd.c:157
 #, c-format
 msgid "%s: can't lock password file\n"
 msgstr "%s: nie mogê zablokowaæ pliku z has³ami\n"
 
-#: src/chage.c:566 src/chpasswd.c:161
+#: src/chage.c:544 src/chpasswd.c:162
 #, c-format
 msgid "%s: can't open password file\n"
 msgstr "%s: nie mogê otworzyæ pliku z has³ami\n"
 
-#: src/chage.c:573
+#: src/chage.c:552
 #, c-format
 msgid "%s: unknown user: %s\n"
 msgstr "%s: nieznany u¿ytkownik: %s\n"
 
-#: src/chage.c:592
-#, c-format
-msgid "%s: can't lock shadow password file\n"
+#: src/chage.c:571
+#, fuzzy, c-format
+msgid "%s: can't lock shadow password file"
 msgstr "%s: nie mogê zablokowaæ pliku z ukrytymi has³ami\n"
 
-#: src/chage.c:599
-#, c-format
-msgid "%s: can't open shadow password file\n"
+#: src/chage.c:579
+#, fuzzy, c-format
+msgid "%s: can't open shadow password file"
 msgstr "%s: nie mogê otworzyæ pliku z ukrytymi has³ami\n"
 
-#: src/chage.c:681
+#: src/chage.c:674
 #, c-format
 msgid "Changing the aging information for %s\n"
 msgstr "Zmieniam informacjê o u¿ytkowniku %s\n"
 
-#: src/chage.c:683
+#: src/chage.c:677
 #, c-format
 msgid "%s: error changing fields\n"
 msgstr "%s: b³±d podczas zmieniania pól\n"
 
-#: src/chage.c:710 src/chage.c:773 src/pwunconv.c:174
+#: src/chage.c:705 src/chage.c:771 src/pwunconv.c:174
 #, c-format
 msgid "%s: can't update password file\n"
 msgstr "%s: nie mogê zaktualizowaæ pliku z has³ami\n"
 
-#: src/chage.c:740 src/pwunconv.c:169
+#: src/chage.c:737 src/pwunconv.c:168
 #, c-format
 msgid "%s: can't update shadow password file\n"
 msgstr "%s: nie mogê zaktualizowaæ pliku z ukrytymi has³ami\n"
 
-#: src/chage.c:789 src/chage.c:804 src/chfn.c:570 src/chsh.c:409
-#: src/passwd.c:825 src/passwd.c:926
+#: src/chage.c:789 src/chage.c:805 src/chfn.c:570 src/chsh.c:382
+#: src/passwd.c:747 src/passwd.c:859
 msgid "Error updating the DBM password entry.\n"
 msgstr "B³±d podczas aktualizacki bazy hase³ DBM.\n"
 
-#: src/chage.c:821
+#: src/chage.c:823
 #, c-format
 msgid "%s: can't rewrite shadow password file\n"
 msgstr "%s: nie mogê przepisaæ pliku z ukrytymi has³ami\n"
 
-#: src/chage.c:835
+#: src/chage.c:838
 #, c-format
 msgid "%s: can't rewrite password file\n"
 msgstr "%s: nie mogê przepisaæ pliku z has³ami\n"
 
-#: src/chage.c:853 src/chpasswd.c:333 src/groupadd.c:595 src/groupdel.c:409
-#: src/groupmod.c:606 src/newusers.c:625 src/useradd.c:1830 src/userdel.c:903
-#: src/usermod.c:1765
+#: src/chage.c:857 src/chpasswd.c:343 src/groupadd.c:590 src/groupdel.c:409
+#: src/groupmod.c:604 src/newusers.c:628 src/useradd.c:1869 src/userdel.c:849
+#: src/usermod.c:1811
 #, fuzzy, c-format
 msgid "%s: PAM chauthtok failed\n"
 msgstr "%s: nie mogê usun±c blokady z pliku\n"
 
-#: src/chage.c:905
-#, c-format
-msgid "%s: no aging information present\n"
-msgstr "%s: brak informacji\n"
-
-#: src/chfn.c:107
-#, c-format
+#: src/chfn.c:83
+#, fuzzy, c-format
 msgid ""
-"Usage: %s [ -f full_name ] [ -r room_no ] [ -w work_ph ]\n"
-"\t[ -h home_ph ] [ -o other ] [ user ]\n"
+"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"
+"U¿ycie: %s [-f imiê_nazwisko ] [-r nr_pokoju ] [-w tel_praca ]\n"
+"\t[-h tel_dom ] [-o inne ] [u¿ytkownik ]\n"
 
-#: src/chfn.c:111
-#, c-format
-msgid ""
-"Usage: %s [ -f full_name ] [ -r room_no ] [ -w work_ph ] [ -h home_ph ]\n"
+#: src/chfn.c:88
+#, fuzzy, 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 "
+"U¿ycie: %s [-f imiê_nazwisko ] [-r nr_pokoju ] [-w tel_praca ] [-h "
 "tel_dom ]\n"
 
-#: src/chfn.c:163 src/chsh.c:119
-msgid "Enter the new value, or press return for the default\n"
-msgstr "Wpisz now± warto¶æ lub wci¶nij return by przyj±c warto¶æ standardow±\n"
+#: src/chfn.c:139
+#, fuzzy
+msgid "Enter the new value, or press ENTER for the default\n"
+msgstr ""
+"Wpisz now± warto¶æ lub wci¶nij ENTER by przyj±c warto¶æ domy¶ln±\n"
+"\n"
 
-#: src/chfn.c:166
+#: src/chfn.c:142
 msgid "Full Name"
 msgstr "Imiê i nazwisko"
 
-#: src/chfn.c:168
+#: src/chfn.c:144
 #, c-format
 msgid "\tFull Name: %s\n"
 msgstr "\tImiê i nazwisko: %s\n"
 
-#: src/chfn.c:171
+#: src/chfn.c:147
 msgid "Room Number"
 msgstr "Numer pokoju"
 
-#: src/chfn.c:173
+#: src/chfn.c:149
 #, c-format
 msgid "\tRoom Number: %s\n"
 msgstr "\tNumer pokoju: %s\n"
 
-#: src/chfn.c:176
+#: src/chfn.c:152
 msgid "Work Phone"
 msgstr "Telefon do pracy"
 
-#: src/chfn.c:178
+#: src/chfn.c:154
 #, c-format
 msgid "\tWork Phone: %s\n"
 msgstr "\tTelefon do pracy: %s\n"
 
-#: src/chfn.c:181
+#: src/chfn.c:157
 msgid "Home Phone"
 msgstr "Telefon domowy"
 
-#: src/chfn.c:183
+#: src/chfn.c:159
 #, c-format
 msgid "\tHome Phone: %s\n"
 msgstr "\tTelefon domowy: %s\n"
 
-#: src/chfn.c:186
+#: src/chfn.c:162
 msgid "Other"
 msgstr "Inne"
 
-#: src/chfn.c:298 src/chfn.c:306 src/chfn.c:314 src/chfn.c:322 src/chfn.c:330
-#: src/chfn.c:391 src/passwd.c:1226
+#: src/chfn.c:271 src/chfn.c:281 src/chfn.c:291 src/chfn.c:301 src/chfn.c:311
+#: src/chfn.c:379 src/passwd.c:1115
 #, c-format
 msgid "%s: Permission denied.\n"
 msgstr "%s: Brak praw dostêpu.\n"
 
-#: src/chfn.c:351 src/chsh.c:224 src/passwd.c:1277
+#: src/chfn.c:332 src/chsh.c:190 src/passwd.c:1165
 #, c-format
 msgid "%s: Unknown user %s\n"
 msgstr "%s: Nieznany u¿ytkownik %s\n"
 
-#: src/chfn.c:357 src/chsh.c:232 src/passwd.c:1207
+#: src/chfn.c:341 src/chsh.c:198 src/passwd.c:1096
 #, c-format
 msgid "%s: Cannot determine your user name.\n"
 msgstr "%s: Nie mogê ustaliæ twojej nazwy u¿ytkownika.\n"
 
-#: src/chfn.c:373 src/chsh.c:250
+#: src/chfn.c:358 src/chsh.c:215
 #, c-format
 msgid "%s: cannot change user `%s' on NIS client.\n"
 msgstr "%s: nie mogê zmieniæ u¿ytkownika `%s' na kliencie NIS.\n"
 
-#: src/chfn.c:378 src/chsh.c:257
+#: src/chfn.c:366 src/chsh.c:223
 #, c-format
 msgid "%s: `%s' is the NIS master for this client.\n"
 msgstr "%s: `%s' jest nadrzêdnym serwerm NIS dla tego klienta.\n"
 
-#: src/chfn.c:453
+#: src/chfn.c:441
 #, c-format
 msgid "Changing the user information for %s\n"
 msgstr "Zmieniam informacjê o u¿ytkowniku %s\n"
 
-#: src/chfn.c:462
+#: src/chfn.c:450
 #, c-format
 msgid "%s: invalid name: \"%s\"\n"
 msgstr "%s: nieprawid³owa nazwa: \"%s\"\n"
 
-#: src/chfn.c:467
+#: src/chfn.c:456
 #, c-format
 msgid "%s: invalid room number: \"%s\"\n"
 msgstr "%s: nieprawid³owy numer pokoju: \"%s\"\n"
 
-#: src/chfn.c:472
+#: src/chfn.c:462
 #, c-format
 msgid "%s: invalid work phone: \"%s\"\n"
 msgstr "%s: nieprawid³owy numer telefonu do pracy: \"%s\"\n"
 
-#: src/chfn.c:477
+#: src/chfn.c:468
 #, c-format
 msgid "%s: invalid home phone: \"%s\"\n"
 msgstr "%s: nieprawid³owy numer telefonu domowego: \"%s\"\n"
 
-#: src/chfn.c:482
+#: src/chfn.c:475
 #, c-format
 msgid "%s: \"%s\" contains illegal characters\n"
 msgstr "%s: \"%s\" zawiera nieprawid³owe znaki\n"
 
-#: src/chfn.c:494
+#: src/chfn.c:488
 #, c-format
 msgid "%s: fields too long\n"
 msgstr "%s: pola zbyt d³ugie\n"
 
-#: src/chfn.c:509 src/chsh.c:347 src/gpasswd.c:582 src/passwd.c:1388
+#: src/chfn.c:504 src/chsh.c:316 src/gpasswd.c:570 src/passwd.c:1277
 msgid "Cannot change ID to root.\n"
 msgstr "Nie mogê zmieniæ ID na root.\n"
 
-#: src/chfn.c:522 src/chsh.c:361 src/passwd.c:735 src/passwd.c:880
+#: src/chfn.c:519 src/chsh.c:331 src/passwd.c:656 src/passwd.c:811
 msgid "Cannot lock the password file; try again later.\n"
 msgstr "Nie mogê zablokowaæ pliku z has³ami; spróbuj pó¼niej.\n"
 
-#: src/chfn.c:528 src/chsh.c:367 src/passwd.c:740 src/passwd.c:885
+#: src/chfn.c:525 src/chsh.c:337 src/passwd.c:661 src/passwd.c:816
 msgid "Cannot open the password file.\n"
 msgstr "Nie mogê otworzyæ pliku z has³ami.\n"
 
-#: src/chfn.c:545 src/chsh.c:382 src/passwd.c:746 src/usermod.c:1320
+#: src/chfn.c:542 src/chsh.c:352 src/passwd.c:667 src/usermod.c:1348
 #, c-format
 msgid "%s: %s not found in /etc/passwd\n"
 msgstr "%s: %s nie znaleziony w /etc/passwd\n"
 
-#: src/chfn.c:562 src/chsh.c:401 src/passwd.c:819 src/passwd.c:920
-#: src/passwd.c:960
+#: src/chfn.c:561 src/chsh.c:373 src/passwd.c:740 src/passwd.c:852
 msgid "Error updating the password entry.\n"
 msgstr "B³±d podczas aktualizacji wpisu do bazy hase³.\n"
 
-#: src/chfn.c:585 src/chsh.c:424 src/passwd.c:832 src/passwd.c:933
+#: src/chfn.c:585 src/chsh.c:397 src/passwd.c:755 src/passwd.c:867
 msgid "Cannot commit password file changes.\n"
 msgstr "Wprowadzenie zmian do pliku passwd jest niemo¿liwe.\n"
 
-#: src/chfn.c:592 src/chsh.c:431
+#: src/chfn.c:592 src/chsh.c:404
 msgid "Cannot unlock the password file.\n"
 msgstr "Nie mogê usun±c blokady z pliku z has³ami.\n"
 
-#: src/chpasswd.c:69
+#: src/chpasswd.c:66
 #, c-format
 msgid "usage: %s [-e]\n"
 msgstr "u¿ycie: %s [-e]\n"
 
-#: src/chpasswd.c:169 src/pwconv.c:104
+#: src/chpasswd.c:171 src/pwconv.c:94
 #, c-format
 msgid "%s: can't lock shadow file\n"
 msgstr "%s: nie mogê zablokowaæ pliku z ukrytymi has³ami\n"
 
-#: src/chpasswd.c:174 src/gpasswd.c:608 src/pwconv.c:109 src/pwunconv.c:109
-#: src/pwunconv.c:114
+#: src/chpasswd.c:177 src/gpasswd.c:596 src/pwconv.c:99 src/pwunconv.c:103
+#: src/pwunconv.c:108
 #, c-format
 msgid "%s: can't open shadow file\n"
 msgstr "%s: nie mogê otworzyæ pliku z ukrytymi has³ami\n"
 
-#: src/chpasswd.c:196 src/newusers.c:465
+#: src/chpasswd.c:200 src/newusers.c:460
 #, c-format
 msgid "%s: line %d: line too long\n"
 msgstr "%s: linia %d: linia zbyt d³uga\n"
 
-#: src/chpasswd.c:216
+#: src/chpasswd.c:220
 #, c-format
 msgid "%s: line %d: missing new password\n"
 msgstr "%s: linia %d: brakuje nowego has³a\n"
 
-#: src/chpasswd.c:232
+#: src/chpasswd.c:237
 #, c-format
 msgid "%s: line %d: unknown user %s\n"
 msgstr "%s: linia %d: nieznany u¿ytkownik %s\n"
 
-#: src/chpasswd.c:284
+#: src/chpasswd.c:290
 #, c-format
 msgid "%s: line %d: cannot update password entry\n"
 msgstr "%s: linia %d: nie mogê zaktualizowaæ wpisu do bazy hase³\n"
 
-#: src/chpasswd.c:300 src/newusers.c:585
+#: src/chpasswd.c:307 src/newusers.c:588
 #, c-format
 msgid "%s: error detected, changes ignored\n"
 msgstr "%s: wykryto b³±d, zignorowano modyfikacje\n"
 
-#: src/chpasswd.c:311
+#: src/chpasswd.c:319
 #, c-format
 msgid "%s: error updating shadow file\n"
 msgstr "%s: b³±d podczas aktualizacji pliku z ukrytymi has³ami\n"
 
-#: src/chpasswd.c:319
+#: src/chpasswd.c:328
 #, c-format
 msgid "%s: error updating password file\n"
 msgstr "%s: b³±d podczas aktualizacji pliku z has³ami\n"
 
-#: src/chsh.c:105
-#, c-format
-msgid "Usage: %s [ -s shell ] [ name ]\n"
-msgstr "U¿ycie: %s [ -s pow³oka ] [ nazwa ]\n"
+#: src/chsh.c:75
+#, fuzzy, c-format
+msgid "Usage: %s [-s shell] [name]\n"
+msgstr "U¿ycie: %s [-s pow³oka ] [nazwa ]\n"
 
-#: src/chsh.c:120
+#: src/chsh.c:89
+#, fuzzy
+msgid "Enter the new value, or press return for the default\n"
+msgstr ""
+"Wpisz now± warto¶æ lub wci¶nij ENTER by przyj±c warto¶æ domy¶ln±\n"
+"\n"
+
+#: src/chsh.c:90
 msgid "Login Shell"
 msgstr "Pow³oka logowania"
 
-#: src/chsh.c:273 src/chsh.c:286
+#: src/chsh.c:239 src/chsh.c:253
 #, c-format
 msgid "You may not change the shell for %s.\n"
 msgstr "Nie mo¿esz zmieniaæ pow³oki dla %s.\n"
 
-#: src/chsh.c:315
+#: src/chsh.c:282
 #, c-format
 msgid "Changing the login shell for %s\n"
 msgstr "Zmieniam pow³okê logowania dla %s\n"
 
-#: src/chsh.c:327
+#: src/chsh.c:294
 #, c-format
 msgid "%s: Invalid entry: %s\n"
 msgstr "%s: Nieprawid³owy wpis: %s\n"
 
-#: src/chsh.c:332
+#: src/chsh.c:301
 #, c-format
 msgid "%s is an invalid shell.\n"
 msgstr "%s jest nieprawid³ow± pow³ok±.\n"
 
-#: src/dpasswd.c:69
-#, c-format
-msgid "Usage: %s [ -(a|d) ] shell\n"
-msgstr "U¿ycie: %s [ -(a|d) ] pow³oka\n"
+#: src/dpasswd.c:52
+#, fuzzy, c-format
+msgid "Usage: %s [-(a|d)] shell\n"
+msgstr "U¿ycie: %s [-(a|d) ] pow³oka\n"
 
-#: src/dpasswd.c:134
+#: src/dpasswd.c:115
 msgid "Shell password: "
 msgstr "Has³o pow³oki: "
 
-#: src/dpasswd.c:140
+#: src/dpasswd.c:121
 msgid "re-enter Shell password: "
 msgstr "Wpisz ponownie has³o pow³oki: "
 
-#: src/dpasswd.c:147
+#: src/dpasswd.c:129
 #, c-format
 msgid "%s: Passwords do not match, try again.\n"
 msgstr "%s: Has³a nie pasuj±, spróbuj ponownie.\n"
 
-#: src/dpasswd.c:167
+#: src/dpasswd.c:149
 #, c-format
 msgid "%s: can't create %s"
 msgstr "%s: nie mogê utworzyæ %s"
 
-#: src/dpasswd.c:172
+#: src/dpasswd.c:155
 #, c-format
 msgid "%s: can't open %s"
 msgstr "%s: nie mogê otworzyæ %s"
 
-#: src/dpasswd.c:200
+#: src/dpasswd.c:183
 #, c-format
 msgid "%s: Shell %s not found.\n"
 msgstr "%s: Pow³oka %s nie znaleziona.\n"
 
-#: src/expiry.c:84
-msgid "Usage: expiry { -f | -c }\n"
+#: src/expiry.c:59
+#, fuzzy
+msgid "Usage: expiry {-f|-c}\n"
 msgstr "U¿ycie: expiry { -f | -c }\n"
 
-#: src/expiry.c:137
+#: src/expiry.c:113
 #, c-format
 msgid "%s: WARNING!  Must be set-UID root!\n"
 msgstr "%s: OSTRZE¯ENIE! Program musi posiadaæ SUID root!\n"
 
-#: src/expiry.c:148
+#: src/expiry.c:124
 #, c-format
 msgid "%s: unknown user\n"
 msgstr "%s: nieznany u¿ytkownik\n"
 
-#: src/faillog.c:79
+#: src/faillog.c:77
 #, c-format
 msgid "usage: %s [-a|-u user] [-m max] [-r] [-t days] [-l locksecs]\n"
 msgstr "u¿ycie: %s [-a|-u u¿ytkownik] [-m maks] [-r] [-t dni] [-l bloksek]\n"
 
-#: src/faillog.c:134 src/lastlog.c:103
+#: src/faillog.c:131 src/lastlog.c:96
 #, c-format
 msgid "Unknown User: %s\n"
 msgstr "Nieznany u¿ytkownik: %s\n"
 
-#: src/faillog.c:215
+#: src/faillog.c:212
 msgid "Username   Failures  Maximum  Latest\n"
 msgstr "U¿ytkownik Niepowodzenia Maksymalnie Ostatnio\n"
 
-#: src/faillog.c:232
+#: src/faillog.c:229
 #, c-format
 msgid "  %s on %s"
 msgstr "  %s na %s"
 
-#: src/faillog.c:236
+#: src/faillog.c:233
 #, c-format
 msgid " [%lds left]"
 msgstr " [%lds pozosta³o]"
 
-#: src/faillog.c:239
+#: src/faillog.c:237
 #, c-format
 msgid " [%lds lock]"
 msgstr " [%lds blokada]"
 
-#: src/gpasswd.c:89
+#: src/gpasswd.c:78
 #, c-format
 msgid "usage: %s [-r|-R] group\n"
 msgstr "u¿ycie: %s [-r|-R] grupa\n"
 
-#: src/gpasswd.c:90
+#: src/gpasswd.c:79
 #, c-format
 msgid "       %s [-a user] group\n"
 msgstr "       %s [-a u¿ytkownik] grupa\n"
 
-#: src/gpasswd.c:91
+#: src/gpasswd.c:80
 #, c-format
 msgid "       %s [-d user] group\n"
 msgstr "       %s [-d u¿ytkownik] grupa\n"
 
-#: src/gpasswd.c:93
+#: src/gpasswd.c:83
 #, c-format
 msgid "       %s [-A user,...] [-M user,...] group\n"
 msgstr "       %s [-A u¿ytkownik,...] [-M u¿ytkownik,...] grupa\n"
 
-#: src/gpasswd.c:96
+#: src/gpasswd.c:85
 #, c-format
 msgid "       %s [-M user,...] group\n"
 msgstr "       %s [-M u¿ytkownik,...] grupa\n"
 
-#: src/gpasswd.c:160 src/gpasswd.c:245
+#: src/gpasswd.c:146 src/gpasswd.c:230
 #, c-format
 msgid "%s: unknown user %s\n"
 msgstr "%s: nieznany u¿ytkownik %s\n"
 
-#: src/gpasswd.c:172
+#: src/gpasswd.c:157
 msgid "Permission denied.\n"
 msgstr "Dostêp zabroniony.\n"
 
-#: src/gpasswd.c:257
+#: src/gpasswd.c:243
 #, c-format
 msgid "%s: shadow group passwords required for -A\n"
 msgstr "%s: plik z ukrytymi has³ami grup wymagany dla -A\n"
 
-#: src/gpasswd.c:308
+#: src/gpasswd.c:294
 msgid "Who are you?\n"
 msgstr "Kim jeste¶?\n"
 
-#: src/gpasswd.c:328 src/newgrp.c:251
+#: src/gpasswd.c:313 src/newgrp.c:297
 #, c-format
 msgid "unknown group: %s\n"
 msgstr "nieznana grupa: %s\n"
 
-#: src/gpasswd.c:436
+#: src/gpasswd.c:422
 #, c-format
 msgid "Adding user %s to group %s\n"
 msgstr "Dodajê nowego u¿ytkownika %s do grupy %s\n"
 
-#: src/gpasswd.c:453
+#: src/gpasswd.c:440
 #, c-format
 msgid "Removing user %s from group %s\n"
 msgstr "Usuwam u¿ytkownika %s z grupy %s\n"
 
-#: src/gpasswd.c:466
+#: src/gpasswd.c:454
 #, c-format
 msgid "%s: unknown member %s\n"
 msgstr "%s: nieznany cz³onek %s\n"
 
-#: src/gpasswd.c:513
+#: src/gpasswd.c:501
 #, c-format
 msgid "%s: Not a tty\n"
 msgstr "%s: To nie tty\n"
 
 #.
-#. * 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.
+#. * 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.
 #.
-#: src/gpasswd.c:535
+#: src/gpasswd.c:522
 #, c-format
 msgid "Changing the password for group %s\n"
 msgstr "Zmieniam has³o dla grupy %s\n"
 
-#: src/gpasswd.c:538
+#: src/gpasswd.c:525
 msgid "New Password: "
 msgstr "Nowe has³o: "
 
-#: src/gpasswd.c:543 src/passwd.c:422
+#: src/gpasswd.c:530 src/passwd.c:365
 msgid "Re-enter new password: "
 msgstr "Wpisz has³o ponownie: "
 
-#: src/gpasswd.c:555
+#: src/gpasswd.c:542
 msgid "They don't match; try again"
 msgstr "Nie pasuj±; spróbuj ponownie"
 
-#: src/gpasswd.c:559
+#: src/gpasswd.c:546
 #, c-format
 msgid "%s: Try again later\n"
 msgstr "%s: Spróbuj ponownie pó¼niej\n"
 
-#: src/gpasswd.c:590
+#: src/gpasswd.c:578
 #, c-format
 msgid "%s: can't get lock\n"
 msgstr "%s: nie mogê zablokowaæ\n"
 
-#: src/gpasswd.c:596
+#: src/gpasswd.c:584
 #, c-format
 msgid "%s: can't get shadow lock\n"
 msgstr "%s: nie mogê zablokowaæ pliku z ukrytymi has³ami\n"
 
-#: src/gpasswd.c:602
+#: src/gpasswd.c:590
 #, c-format
 msgid "%s: can't open file\n"
 msgstr "%s: nie mogê otworzyæ pliku\n"
 
-#: src/gpasswd.c:614
+#: src/gpasswd.c:602
 #, c-format
 msgid "%s: can't update entry\n"
 msgstr "%s: nie mogê zaktualizowaæ wpisu\n"
 
-#: src/gpasswd.c:620
+#: src/gpasswd.c:608
 #, c-format
 msgid "%s: can't update shadow entry\n"
 msgstr "%s: nie mogê zaktualizowaæ wpisu do pliku z ukrytymi has³ami\n"
 
-#: src/gpasswd.c:626
+#: src/gpasswd.c:615
 #, c-format
 msgid "%s: can't re-write file\n"
 msgstr "%s: nie mogê przepisaæ pliku\n"
 
-#: src/gpasswd.c:632
+#: src/gpasswd.c:621
 #, c-format
 msgid "%s: can't re-write shadow file\n"
 msgstr "%s: nie mogê przepisaæ pliku z ukrytymi has³ami\n"
 
-#: src/gpasswd.c:640
+#: src/gpasswd.c:630
 #, c-format
 msgid "%s: can't unlock file\n"
 msgstr "%s: nie mogê usun±c blokady z pliku\n"
 
-#: src/gpasswd.c:645
+#: src/gpasswd.c:635
 #, c-format
 msgid "%s: can't update DBM files\n"
 msgstr "%s: nie mogê zaktualizwoaæ plików DBM\n"
 
-#: src/gpasswd.c:652
+#: src/gpasswd.c:642
 #, c-format
 msgid "%s: can't update DBM shadow files\n"
 msgstr "%s: nie mogê zaktualizowaæ pliku DBM z ukrytymi has³ami\n"
 
-#: src/groupadd.c:111
+#: src/groupadd.c:101
 msgid "usage: groupadd [-g gid [-o]] group\n"
 msgstr "u¿ycie: groupadd [-g gid [-o]] grupa\n"
 
-#: src/groupadd.c:179 src/groupadd.c:202 src/groupmod.c:189 src/groupmod.c:236
-#: src/useradd.c:949 src/usermod.c:546 src/usermod.c:682
+#: src/groupadd.c:167 src/groupadd.c:192 src/groupmod.c:179 src/groupmod.c:228
+#: src/useradd.c:970 src/usermod.c:552 src/usermod.c:695
 #, c-format
 msgid "%s: error adding new group entry\n"
 msgstr "%s: b³±d podczas dodawania nowej grupy\n"
 
-#: src/groupadd.c:189 src/groupadd.c:212 src/groupmod.c:205 src/useradd.c:960
-#: src/usermod.c:558 src/usermod.c:694
+#: src/groupadd.c:178 src/groupadd.c:203 src/groupmod.c:197 src/useradd.c:981
+#: src/usermod.c:564 src/usermod.c:708
 #, c-format
 msgid "%s: cannot add new dbm group entry\n"
 msgstr "%s: nie mogê dodaæ nowego wpisu do bazy dbm grup\n"
 
-#: src/groupadd.c:264 src/useradd.c:1014
+#: src/groupadd.c:255 src/useradd.c:1034
 #, c-format
 msgid "%s: name %s is not unique\n"
 msgstr "%s: nazwa %s nie jest niepowtarzalny\n"
 
-#: src/groupadd.c:279
-#, c-format
-msgid "%s: gid %ld is not unique\n"
-msgstr "%s: gid %ld nie jest niepowtarzalny\n"
+#: src/groupadd.c:270
+#, fuzzy, c-format
+msgid "%s: gid %u is not unique\n"
+msgstr "%s: uid %ld nie jest niepowtarzalny\n"
 
-#: src/groupadd.c:303
+#: src/groupadd.c:294
 #, c-format
 msgid "%s: can't get unique gid\n"
 msgstr "%s: nie mogê uzyskaæ niepowtarzalnego gid\n"
@@ -921,54 +919,54 @@ msgstr "%s: nie mog
 #.
 #. * All invalid group names land here.
 #.
-#: src/groupadd.c:327 src/groupmod.c:347
+#: src/groupadd.c:317 src/groupmod.c:341
 #, c-format
 msgid "%s: %s is a not a valid group name\n"
 msgstr "%s: %s: nie jest prawid³ow± nazw± grupy\n"
 
-#: src/groupadd.c:356 src/groupmod.c:373
+#: src/groupadd.c:346 src/groupmod.c:366
 #, c-format
 msgid "%s: invalid group %s\n"
 msgstr "%s: nieprawid³owa grupa %s\n"
 
-#: src/groupadd.c:373 src/useradd.c:1290
+#: src/groupadd.c:363 src/useradd.c:1313
 #, c-format
 msgid "%s: -O requires NAME=VALUE\n"
 msgstr "%s: -O wymaga ZMIENNA=WARTO¦Æ\n"
 
-#: src/groupadd.c:418 src/groupdel.c:173 src/groupmod.c:409 src/useradd.c:1399
-#: src/userdel.c:309 src/usermod.c:570
+#: src/groupadd.c:407 src/groupdel.c:173 src/groupmod.c:401 src/useradd.c:1428
+#: src/userdel.c:312 src/usermod.c:576
 #, c-format
 msgid "%s: cannot rewrite group file\n"
 msgstr "%s: nie mogê przepisaæ pliku z grupami\n"
 
-#: src/groupadd.c:424 src/groupdel.c:179 src/groupmod.c:415 src/useradd.c:1407
-#: src/userdel.c:315 src/usermod.c:707
+#: src/groupadd.c:415 src/groupdel.c:179 src/groupmod.c:409 src/useradd.c:1437
+#: src/userdel.c:319 src/usermod.c:722
 #, c-format
 msgid "%s: cannot rewrite shadow group file\n"
 msgstr "%s: nie mogê przepisaæ pliku z ukrytymi grupami\n"
 
-#: src/groupadd.c:443 src/groupdel.c:198 src/groupmod.c:434 src/userdel.c:395
+#: src/groupadd.c:433 src/groupdel.c:198 src/groupmod.c:427 src/userdel.c:403
 #, c-format
 msgid "%s: unable to lock group file\n"
 msgstr "%s: nie mogê zablokowaæ pliku z grupami\n"
 
-#: src/groupadd.c:447 src/groupdel.c:202 src/groupmod.c:438
+#: src/groupadd.c:438 src/groupdel.c:202 src/groupmod.c:432
 #, c-format
 msgid "%s: unable to open group file\n"
 msgstr "%s: nie mogê otworzyæ pliku z grupami\n"
 
-#: src/groupadd.c:452 src/groupdel.c:207 src/groupmod.c:443 src/userdel.c:404
+#: src/groupadd.c:445 src/groupdel.c:207 src/groupmod.c:439 src/userdel.c:414
 #, c-format
 msgid "%s: unable to lock shadow group file\n"
 msgstr "%s: nie mogê zablokowaæ pliku z ukrytymi grupami\n"
 
-#: src/groupadd.c:457 src/groupdel.c:212 src/groupmod.c:448
+#: src/groupadd.c:451 src/groupdel.c:212 src/groupmod.c:445
 #, c-format
 msgid "%s: unable to open shadow group file\n"
 msgstr "%s: nie mogê otworzyæ pliku z ukrytymi grupami\n"
 
-#: src/groupadd.c:568
+#: src/groupadd.c:562
 #, c-format
 msgid "%s: group %s exists\n"
 msgstr "%s: grupa %s istnieje\n"
@@ -977,12 +975,12 @@ msgstr "%s: grupa %s istnieje\n"
 msgid "usage: groupdel group\n"
 msgstr "u¿ycie: groupdel grupa\n"
 
-#: src/groupdel.c:110 src/groupmod.c:193 src/groupmod.c:240
+#: src/groupdel.c:110 src/groupmod.c:184 src/groupmod.c:233
 #, c-format
 msgid "%s: error removing group entry\n"
 msgstr "%s: b³±d podczas usuwania grupy\n"
 
-#: src/groupdel.c:122 src/groupmod.c:212
+#: src/groupdel.c:122 src/groupmod.c:204
 #, c-format
 msgid "%s: error removing group dbm entry\n"
 msgstr "%s: b³±d podczas usuwania wpisu dbm o grupie\n"
@@ -992,7 +990,7 @@ msgstr "%s: b
 msgid "%s: error removing shadow group entry\n"
 msgstr "%s: b³±d podczas usuwania wpisu o ukrytej grupie\n"
 
-#: src/groupdel.c:150 src/groupmod.c:258
+#: src/groupdel.c:150 src/groupmod.c:254
 #, c-format
 msgid "%s: error removing shadow group dbm entry\n"
 msgstr "%s: b³±d podczas usuwania wpisu dbm z pliku ukrytych grup\n"
@@ -1005,130 +1003,130 @@ msgstr "%s: b
 msgid "%s: cannot remove user's primary group.\n"
 msgstr "%s: nie mogê usun±æ podstawowej grupy u¿ytkowników.\n"
 
-#: src/groupdel.c:355 src/groupmod.c:551
+#: src/groupdel.c:355 src/groupmod.c:550
 #, c-format
 msgid "%s: group %s does not exist\n"
 msgstr "%s: grupa %s nie isnieje\n"
 
-#: src/groupdel.c:369 src/groupmod.c:567
+#: src/groupdel.c:369 src/groupmod.c:566
 #, c-format
 msgid "%s: group %s is a NIS group\n"
 msgstr "%s: grupa %s jest grup± NIS\n"
 
-#: src/groupdel.c:375 src/groupmod.c:573 src/userdel.c:811 src/usermod.c:1023
+#: src/groupdel.c:375 src/groupmod.c:571 src/userdel.c:776 src/usermod.c:1045
 #, c-format
 msgid "%s: %s is the NIS master\n"
 msgstr "%s: %s jest g³ównym serwerem NIS\n"
 
-#: src/groupmems.c:92
+#: src/groupmems.c:95
 msgid "Member already exists\n"
 msgstr ""
 
-#: src/groupmems.c:121
+#: src/groupmems.c:125
 msgid "Member to remove could not be found\n"
 msgstr ""
 
-#: src/groupmems.c:151
+#: src/groupmems.c:158
 msgid "usage: groupmems -a username | -d username | -D | -l [-g groupname]\n"
-msgstr ""
+msgstr "u¿ycie groupmems -a u¿ytkownik | -d u¿ytkownik | -D | -l [-g grupa]\n"
 
-#: src/groupmems.c:191
+#: src/groupmems.c:201
 msgid "Only root can add members to different groups\n"
 msgstr ""
 
-#: src/groupmems.c:196
+#: src/groupmems.c:206
 msgid "Group access is required\n"
 msgstr ""
 
-#: src/groupmems.c:199
+#: src/groupmems.c:210
 msgid "Not primary owner of current group\n"
 msgstr ""
 
-#: src/groupmems.c:204
+#: src/groupmems.c:215
 #, fuzzy
 msgid "Unable to lock group file\n"
 msgstr "%s: nie mogê zablokowaæ pliku z grupami\n"
 
-#: src/groupmems.c:209
+#: src/groupmems.c:220
 #, fuzzy
 msgid "Unable to open group file\n"
 msgstr "%s: nie mogê otworzyæ pliku z grupami\n"
 
-#: src/groupmems.c:229
+#: src/groupmems.c:240
 #, fuzzy
 msgid "Cannot close group file\n"
 msgstr "%s: nie mogê otworzyæ pliku z grupami\n"
 
-#: src/groupmod.c:111
+#: src/groupmod.c:103
 msgid "usage: groupmod [-g gid [-o]] [-n name] group\n"
 msgstr "u¿ycie: groupmod [-g gid [-o]] [-n nazwa] grupa\n"
 
-#: src/groupmod.c:171
+#: src/groupmod.c:161
 #, fuzzy, c-format
 msgid "%s: %s not found in /etc/group\n"
 msgstr "%s: %s nie znaleziony w /etc/passwd\n"
 
-#: src/groupmod.c:252
+#: src/groupmod.c:247
 #, c-format
 msgid "%s: cannot add new dbm shadow group entry\n"
 msgstr "%s: nie mogê dodaæ nowego wpisu dbm do pliku z ukrytymi grupami\n"
 
-#: src/groupmod.c:305
-#, c-format
-msgid "%s: %ld is not a unique gid\n"
+#: src/groupmod.c:300
+#, fuzzy, c-format
+msgid "%s: %u is not a unique gid\n"
 msgstr "%s: %ld nie jest niepowtarzalnym gid\n"
 
-#: src/groupmod.c:336
+#: src/groupmod.c:330
 #, c-format
 msgid "%s: %s is not a unique name\n"
 msgstr "%s: %s nie jest niepowtarzaln± nazw±\n"
 
-#: src/groups.c:62
+#: src/groups.c:59
 #, c-format
 msgid "unknown user %s\n"
 msgstr "nieznany u¿ytkownik %s\n"
 
-#: src/grpck.c:98
+#: src/grpck.c:87
 #, fuzzy, c-format
-msgid "Usage: %s [ -sr ] [ group [ gshadow ] ]\n"
-msgstr "U¿ycie: %s [ -r ] [ grupa [ gshadow ] ]\n"
+msgid "Usage: %s [-r] [-s] [group [gshadow]]\n"
+msgstr "U¿ycie: %s [-r] [-s] [grupa [gshadow ] ]\n"
 
-#: src/grpck.c:100
+#: src/grpck.c:90
 #, fuzzy, c-format
-msgid "Usage: %s [ -sr ] [ group ]\n"
-msgstr "U¿ycie: %s [ -r ] [ grupa ]\n"
+msgid "Usage: %s [-r] [-s] [group]\n"
+msgstr "U¿ycie: %s [-r] [-s] [grupa ]\n"
 
-#: src/grpck.c:119 src/pwck.c:119
+#: src/grpck.c:108 src/pwck.c:108
 msgid "No"
 msgstr "Nie"
 
-#: src/grpck.c:204 src/pwck.c:186
+#: src/grpck.c:192 src/pwck.c:175
 #, c-format
 msgid "%s: -s and -r are incompatibile\n"
-msgstr ""
+msgstr "%s: -s i -r s± niekompatybilne\n"
 
-#: src/grpck.c:244 src/grpck.c:252 src/pwck.c:226 src/pwck.c:235
+#: src/grpck.c:232 src/grpck.c:242 src/pwck.c:215 src/pwck.c:225
 #, c-format
 msgid "%s: cannot lock file %s\n"
 msgstr "%s: nie mogê zablokowaæ pliku %s\n"
 
-#: src/grpck.c:267 src/grpck.c:275 src/mkpasswd.c:216 src/pwck.c:251
-#: src/pwck.c:260
+#: src/grpck.c:259 src/grpck.c:268 src/mkpasswd.c:202 src/pwck.c:242
+#: src/pwck.c:251
 #, c-format
 msgid "%s: cannot open file %s\n"
 msgstr "%s: nie mogê otworzyæ pliku %s\n"
 
 #.
-#. * Tell the user this entire line is bogus and
-#. * ask them to delete it.
+#. * Tell the user this entire line is bogus and ask
+#. * them to delete it.
 #.
-#: src/grpck.c:317
+#: src/grpck.c:311
 msgid "invalid group file entry\n"
 msgstr "nieprawid³owy wpis do pliku grup\n"
 
-#: src/grpck.c:318 src/grpck.c:381 src/grpck.c:473 src/grpck.c:536
-#: src/grpck.c:553 src/pwck.c:305 src/pwck.c:367 src/pwck.c:474 src/pwck.c:536
-#: src/pwck.c:560
+#: src/grpck.c:312 src/grpck.c:375 src/grpck.c:458 src/grpck.c:521
+#: src/grpck.c:538 src/pwck.c:296 src/pwck.c:358 src/pwck.c:457 src/pwck.c:519
+#: src/pwck.c:543
 #, c-format
 msgid "delete line `%s'? "
 msgstr "usun±c liniê `%s'? "
@@ -1137,35 +1135,30 @@ msgstr "usun
 #. * Tell the user this entry is a duplicate of
 #. * another and ask them to delete it.
 #.
-#: src/grpck.c:380
+#: src/grpck.c:374
 msgid "duplicate group entry\n"
 msgstr "duplikat wpisu grup\n"
 
-#: src/grpck.c:397
+#: src/grpck.c:391
 #, c-format
 msgid "invalid group name `%s'\n"
 msgstr "nieprawid³owa nazwa grupy `%s'\n"
 
-#: src/grpck.c:407
-#, c-format
-msgid "group %s: bad GID (%d)\n"
-msgstr "grupa %s: z³y GID (%d)\n"
-
-#: src/grpck.c:433
+#: src/grpck.c:418
 #, c-format
 msgid "group %s: no user %s\n"
 msgstr "grupa %s: nie ma u¿ytkownika %s\n"
 
-#: src/grpck.c:435 src/grpck.c:604
+#: src/grpck.c:420 src/grpck.c:590
 #, c-format
 msgid "delete member `%s'? "
 msgstr "skasowaæ cz³onka `%s'? "
 
 #.
-#. * Tell the user this entire line is bogus and
-#. * ask them to delete it.
+#. * Tell the user this entire line is bogus and ask
+#. * them to delete it.
 #.
-#: src/grpck.c:472
+#: src/grpck.c:457
 msgid "invalid shadow group file entry\n"
 msgstr "nieprawid³owy wpis do pliku z ukrytymi has³ami\n"
 
@@ -1173,204 +1166,202 @@ msgstr "nieprawid
 #. * Tell the user this entry is a duplicate of
 #. * another and ask them to delete it.
 #.
-#: src/grpck.c:535
+#: src/grpck.c:520
 msgid "duplicate shadow group entry\n"
 msgstr "duplikuj±cy siê wpis w pliku  ukrytych grup\n"
 
-#: src/grpck.c:552
+#: src/grpck.c:537
 msgid "no matching group file entry\n"
 msgstr "brak pasuj±cego wpisu w pliku grup\n"
 
-#: src/grpck.c:572
+#: src/grpck.c:558
 #, c-format
 msgid "shadow group %s: no administrative user %s\n"
 msgstr "ukryta grupa %s: brak u¿ytkownika administracyjnego %s\n"
 
-#: src/grpck.c:574
+#: src/grpck.c:560
 #, c-format
 msgid "delete administrative member `%s'? "
 msgstr "usun±æ cz³onka administracyjnego `%s'? "
 
-#: src/grpck.c:602
+#: src/grpck.c:588
 #, c-format
 msgid "shadow group %s: no user %s\n"
 msgstr "ukryta grupa %s: nie ma u¿ytkownika %s\n"
 
-#: src/grpck.c:630 src/grpck.c:636 src/pwck.c:592 src/pwck.c:600
+#: src/grpck.c:616 src/grpck.c:622 src/pwck.c:577 src/pwck.c:585
 #, c-format
 msgid "%s: cannot update file %s\n"
 msgstr "%s: nie mogê zaktualizowaæ pliku %s\n"
 
-#: src/grpck.c:660 src/pwck.c:626
+#: src/grpck.c:647 src/pwck.c:612
 #, c-format
 msgid "%s: the files have been updated; run mkpasswd\n"
 msgstr "%s: pliki zosta³y zaktualizowane; uruchom mkpasswd\n"
 
-#: src/grpck.c:661 src/grpck.c:665 src/pwck.c:627 src/pwck.c:631
+#: src/grpck.c:648 src/grpck.c:652 src/pwck.c:613 src/pwck.c:617
 #, c-format
 msgid "%s: no changes\n"
 msgstr "%s: bez zmian\n"
 
-#: src/grpck.c:664 src/pwck.c:630
+#: src/grpck.c:651 src/pwck.c:616
 #, c-format
 msgid "%s: the files have been updated\n"
 msgstr "%s: pliku zost³y zaktualizowane\n"
 
-#: src/grpconv.c:62 src/grpunconv.c:63
+#: src/grpconv.c:60 src/grpunconv.c:56
 #, c-format
 msgid "%s: can't lock group file\n"
 msgstr "%s: nie mogê zablokowaæ pliku z grupami\n"
 
-#: src/grpconv.c:67 src/grpunconv.c:68
+#: src/grpconv.c:65 src/grpunconv.c:61
 #, c-format
 msgid "%s: can't open group file\n"
 msgstr "%s: nie mogê otworzyæ pliku z grupami\n"
 
-#: src/grpconv.c:72 src/grpunconv.c:73
+#: src/grpconv.c:70 src/grpunconv.c:66
 #, c-format
 msgid "%s: can't lock shadow group file\n"
 msgstr "%s: nie mogê zablokowaæ pliku z przes³oniêtymi grupami\n"
 
-#: src/grpconv.c:77 src/grpunconv.c:78
+#: src/grpconv.c:76 src/grpunconv.c:72
 #, c-format
 msgid "%s: can't open shadow group file\n"
 msgstr "%s: nie mogê otworzyæ pliku z przes³oniêtymi grupami\n"
 
-#.
-#. * This shouldn't happen (the entry exists) but...
-#.
-#: src/grpconv.c:93
+#: src/grpconv.c:94
 #, c-format
 msgid "%s: can't remove shadow group %s\n"
 msgstr "%s: nie mogê usun±æ ukrytej grupy %s\n"
 
-#: src/grpconv.c:134 src/pwconv.c:160
+#: src/grpconv.c:138 src/pwconv.c:153
 #, c-format
 msgid "%s: can't update shadow entry for %s\n"
 msgstr "%s: nie mogê zaktualizowaæ wpisu ukrytej grupy dla %s\n"
 
-#: src/grpconv.c:143 src/grpunconv.c:94
+#: src/grpconv.c:148 src/grpunconv.c:91
 #, c-format
 msgid "%s: can't update entry for group %s\n"
 msgstr "%s: nie mogê zaktualizowaæ wpisu dla grupy %s\n"
 
-#: src/grpconv.c:150 src/grpunconv.c:102
+#: src/grpconv.c:155 src/grpunconv.c:99
 #, c-format
 msgid "%s: can't update shadow group file\n"
 msgstr "%s: nie mogê zaktualizowaæ pliku z ukrytymi grupami\n"
 
-#: src/grpconv.c:154 src/grpunconv.c:107
+#: src/grpconv.c:160 src/grpunconv.c:105
 #, c-format
 msgid "%s: can't update group file\n"
 msgstr "%s: nie mogê zaktualizowaæ pliku z grupami\n"
 
-#: src/grpconv.c:169 src/grpunconv.c:128
+#: src/grpconv.c:175 src/grpunconv.c:127
 #, c-format
 msgid "%s: not configured for shadow group support.\n"
 msgstr "%s: nie skonfigurowany dla wsparcia ukrytych grup.\n"
 
-#: src/grpunconv.c:112
+#: src/grpunconv.c:110
 #, c-format
 msgid "%s: can't delete shadow group file\n"
 msgstr "%s: nie mogê skasowaæ pliku z ukrytymi grupami\n"
 
-#: src/id.c:56
-msgid "usage: id [ -a ]\n"
-msgstr "u¿ycie: id [ -a ]\n"
+#: src/id.c:53
+#, fuzzy
+msgid "usage: id [-a]\n"
+msgstr "u¿ycie: id [-a ]\n"
 
-#: src/id.c:58
+#: src/id.c:55
 msgid "usage: id\n"
 msgstr "u¿ycie: id\n"
 
-#: src/id.c:127
-#, c-format
-msgid "uid=%d(%s)"
+#: src/id.c:123
+#, fuzzy, c-format
+msgid "uid=%u(%s)"
 msgstr "uid=%d(%s)"
 
-#: src/id.c:129
-#, c-format
-msgid "uid=%d"
+#: src/id.c:125
+#, fuzzy, c-format
+msgid "uid=%u"
 msgstr "uid=%d"
 
-#: src/id.c:133
-#, c-format
-msgid " gid=%d(%s)"
+#: src/id.c:129
+#, fuzzy, c-format
+msgid " gid=%u(%s)"
 msgstr " gid=%d(%s)"
 
-#: src/id.c:135
-#, c-format
-msgid " gid=%d"
+#: src/id.c:131
+#, fuzzy, c-format
+msgid " gid=%u"
 msgstr " gid=%d"
 
-#: src/id.c:145
-#, c-format
-msgid " euid=%d(%s)"
+#: src/id.c:141
+#, fuzzy, c-format
+msgid " euid=%u(%s)"
 msgstr " euid=%d(%s)"
 
-#: src/id.c:147
-#, c-format
-msgid " euid=%d"
+#: src/id.c:143
+#, fuzzy, c-format
+msgid " euid=%u"
 msgstr " euid=%d"
 
-#: src/id.c:152
-#, c-format
-msgid " egid=%d(%s)"
+#: src/id.c:148
+#, fuzzy, c-format
+msgid " egid=%u(%s)"
 msgstr " egid=%d(%s)"
 
-#: src/id.c:154
-#, c-format
-msgid " egid=%d"
+#: src/id.c:150
+#, fuzzy, c-format
+msgid " egid=%u"
 msgstr " egid=%d"
 
 #.
-#. * Start off the group message.  It will be of the format
+#. * Start off the group message. It will be of the format
 #. *
-#. *   groups=###(aaa),###(aaa),###(aaa)
+#. *      groups=###(aaa),###(aaa),###(aaa)
 #. *
 #. * where "###" is a numerical value and "aaa" is the
 #. * corresponding name for each respective numerical value.
 #.
-#: src/id.c:175
+#: src/id.c:169
 msgid " groups="
 msgstr " grupy="
 
-#: src/lastlog.c:116 src/lastlog.c:120
+#: src/lastlog.c:110 src/lastlog.c:116
 #, c-format
 msgid "Usage: %s [<-u|--login> login-name] [<-t|--time> days] [<-h|--help>]\n"
 msgstr ""
 
-#: src/lastlog.c:184
+#: src/lastlog.c:181
 msgid "Username         Port     From             Latest\n"
 msgstr "U¿ytkownik       Port     Z                Ostatnio\n"
 
-#: src/lastlog.c:186
+#: src/lastlog.c:183
 msgid "Username                Port     Latest\n"
 msgstr "U¿ytkownik             Port     Ostatnio\n"
 
-#: src/lastlog.c:200
+#: src/lastlog.c:197
 msgid "**Never logged in**"
 msgstr "**Nigdy nie zalogowany**"
 
-#: src/login.c:201
+#: src/login.c:183
 #, c-format
 msgid "usage: %s [-p] [name]\n"
 msgstr "u¿ycie: %s [-p] [nazwa]\n"
 
-#: src/login.c:204
+#: src/login.c:186
 #, c-format
 msgid "       %s [-p] [-h host] [-f name]\n"
 msgstr "       %s [-p] [-h host] [-f nazwa]\n"
 
-#: src/login.c:206
+#: src/login.c:188
 #, c-format
 msgid "       %s [-p] -r host\n"
 msgstr "       %s [-p] -r host\n"
 
-#: src/login.c:289
+#: src/login.c:272
 msgid "Invalid login time\n"
 msgstr "Nieprawid³owy czas logowania\n"
 
-#: src/login.c:344
+#: src/login.c:327
 msgid ""
 "\n"
 "System closed for routine maintenance\n"
@@ -1378,7 +1369,7 @@ msgstr ""
 "\n"
 "System zamkniêty do rutynowej konserwacji.\n"
 
-#: src/login.c:354
+#: src/login.c:338
 msgid ""
 "\n"
 "[Disconnect bypassed -- root login allowed.]\n"
@@ -1386,7 +1377,7 @@ msgstr ""
 "\n"
 "[Roz³±czenie pominiête -- zezwolenie na logowanie siê root-a.]\n"
 
-#: src/login.c:393
+#: src/login.c:375
 #, c-format
 msgid ""
 "\n"
@@ -1395,17 +1386,17 @@ msgstr ""
 "\n"
 "Limit czasu logowania przekroczony po %d sekundach.\n"
 
-#: src/login.c:695
+#: src/login.c:687
 #, c-format
 msgid " on `%.100s' from `%.200s'"
 msgstr " na `%s.100s' z `%.200s'"
 
-#: src/login.c:697
+#: src/login.c:691
 #, c-format
 msgid " on `%.100s'"
 msgstr " na `%.100s'"
 
-#: src/login.c:837
+#: src/login.c:850
 #, c-format
 msgid ""
 "\n"
@@ -1414,238 +1405,234 @@ msgstr ""
 "\n"
 "%s login: "
 
-#: src/login.c:839
+#: src/login.c:853
 msgid "login: "
 msgstr "login: "
 
-#: src/login.c:1029 src/sulogin.c:231
+#: src/login.c:1069 src/sulogin.c:233
 msgid "Login incorrect"
 msgstr "Nieprawid³owe logowanie"
 
-#: src/login.c:1217
+#: src/login.c:1263
 msgid "Warning: login re-enabled after temporary lockout.\n"
 msgstr "Ostrze¿enie: logowanie ponownie odblokowanie po czasowej blokadzie.\n"
 
-#: src/login.c:1227
+#: src/login.c:1276
 #, c-format
 msgid "Last login: %s on %s"
 msgstr "Ostatnie logowanie: %s na %s"
 
-#: src/login.c:1230
+#: src/login.c:1279
 #, c-format
 msgid "Last login: %.19s on %s"
 msgstr "Ostatnie logowanie: %s na %s"
 
-#: src/login.c:1235
+#: src/login.c:1285
 #, c-format
 msgid " from %.*s"
 msgstr " z %.*s"
 
-#: src/login.c:1307
+#: src/login.c:1362
 msgid "Starting rad_login\n"
 msgstr "Startujê rad_login\n"
 
-#: src/mkpasswd.c:49
+#: src/mkpasswd.c:47
 #, c-format
 msgid "%s: no DBM database on system - no action performed\n"
 msgstr ""
 "%s: nie ma bazy DBM na tym systemie - ¿adna akcja nie zosta³a podjêta\n"
 
-#: src/mkpasswd.c:74 src/mkpasswd.c:382
-#, c-format
-msgid "Usage: %s [ -vf ] [ -p|g|sp|sg ] file\n"
-msgstr "U¿ycie: %s [ -vf ] [ -p|g|sp|sg ] plik\n"
-
-#: src/mkpasswd.c:76 src/mkpasswd.c:384
-#, c-format
-msgid "Usage: %s [ -vf ] [ -p|g|sp ] file\n"
-msgstr "U¿ycie: %s [ -vf ] [ -p|g|sp ] plik\n"
-
-#: src/mkpasswd.c:79 src/mkpasswd.c:387
-#, c-format
-msgid "Usage: %s [ -vf ] [ -p|g ] file\n"
-msgstr "U¿ycie: %s [ -vf ] [ -p|g ] plik\n"
-
-#: src/mkpasswd.c:245 src/mkpasswd.c:249
+#: src/mkpasswd.c:232 src/mkpasswd.c:237
 #, c-format
 msgid "%s: cannot overwrite file %s\n"
 msgstr "%s: nie mogê nadpisaæ pliku %s\n"
 
-#: src/mkpasswd.c:263
+#: src/mkpasswd.c:252
 #, c-format
 msgid "%s: cannot open DBM files for %s\n"
 msgstr "%s: nie mogê otworzyæ plików DBM dla %s\n"
 
-#: src/mkpasswd.c:296
+#: src/mkpasswd.c:287
 #, c-format
 msgid "%s: the beginning with "
 msgstr "%s: rozpoczyna siê od "
 
-#: src/mkpasswd.c:296
+#: src/mkpasswd.c:288
 #, fuzzy
 msgid " is too long\n"
 msgstr "%s: pola zbyt d³ugie\n"
 
-#: src/mkpasswd.c:321
+#: src/mkpasswd.c:315
 #, c-format
 msgid "%s: error parsing line \"%s\"\n"
 msgstr "%s: b³±d podczas przetwarzania lini \"%s\"\n"
 
-#: src/mkpasswd.c:326 src/mkpasswd.c:328 src/mkpasswd.c:330 src/mkpasswd.c:332
+#: src/mkpasswd.c:323 src/mkpasswd.c:328 src/mkpasswd.c:333 src/mkpasswd.c:338
 msgid "adding record for name "
 msgstr "dodajê rekord do nazwy "
 
-#: src/mkpasswd.c:326 src/mkpasswd.c:328 src/mkpasswd.c:330 src/mkpasswd.c:332
-#: src/mkpasswd.c:336 src/mkpasswd.c:341 src/mkpasswd.c:345 src/mkpasswd.c:349
+#: src/mkpasswd.c:324 src/mkpasswd.c:329 src/mkpasswd.c:334 src/mkpasswd.c:339
+#: src/mkpasswd.c:345 src/mkpasswd.c:351 src/mkpasswd.c:356 src/mkpasswd.c:361
 msgid "\n"
-msgstr ""
+msgstr "\n"
 
-#: src/mkpasswd.c:336 src/mkpasswd.c:341 src/mkpasswd.c:345 src/mkpasswd.c:349
+#: src/mkpasswd.c:344 src/mkpasswd.c:350 src/mkpasswd.c:355 src/mkpasswd.c:360
 #, c-format
 msgid "%s: error adding record for "
 msgstr "%s: b³±d podczas dodawania rekordu dla "
 
-#: src/mkpasswd.c:367
+#: src/mkpasswd.c:378
 #, c-format
 msgid "added %d entries, longest was %d\n"
 msgstr "dodano %d wpisów, najd³u¿szy by³ %d\n"
 
-#: src/newgrp.c:66
-msgid "usage: newgrp [ - ] [ group ]\n"
-msgstr "u¿ycie: newgrp [ - ] [ grupa ]\n"
+#: src/mkpasswd.c:392
+#, fuzzy, c-format
+msgid "Usage: %s [-vf] [-p|g|sp|sg] file\n"
+msgstr "U¿ycie: %s [-vf ] [-p|g|sp|sg ] plik\n"
+
+#: src/mkpasswd.c:395
+#, fuzzy, c-format
+msgid "Usage: %s [-vf] [-p|g|sp] file\n"
+msgstr "U¿ycie: %s [-vf ] [-p|g|sp ] plik\n"
 
-#: src/newgrp.c:68
+#: src/mkpasswd.c:398
+#, fuzzy, c-format
+msgid "Usage: %s [-vf] [-p|g] file\n"
+msgstr "U¿ycie: %s [-vf ] [-p|g ] plik\n"
+
+#: src/newgrp.c:61
 #, fuzzy
-msgid "usage: sg group [[-c] command ]\n"
-msgstr "u¿ycie: sg grupa [ komenda ]\n"
+msgid "usage: newgrp [-] [group]\n"
+msgstr "u¿ycie: newgrp [- ] [grupa ]\n"
 
-#: src/newgrp.c:125
-#, c-format
-msgid "unknown uid: %d\n"
+#: src/newgrp.c:63
+#, fuzzy
+msgid "usage: sg group [[-c] command]\n"
+msgstr "u¿ycie: sg grupa [komenda ]\n"
+
+#: src/newgrp.c:136
+#, fuzzy, c-format
+msgid "unknown uid: %u\n"
 msgstr "nieznany uid: %d\n"
 
-#: src/newgrp.c:201
-#, c-format
-msgid "unknown gid: %ld\n"
+#: src/newgrp.c:219
+#, fuzzy, c-format
+msgid "unknown gid: %lu\n"
 msgstr "nieznany gid: %ld\n"
 
-#: src/newgrp.c:245
-#, c-format
-msgid "unknown gid: %d\n"
-msgstr "nieznany gid: %d\n"
-
-#: src/newgrp.c:323 src/newgrp.c:332
+#: src/newgrp.c:365 src/newgrp.c:374
 msgid "Sorry.\n"
 msgstr "Wybacz.\n"
 
-#: src/newgrp.c:364
+#: src/newgrp.c:472
 msgid "too many groups\n"
 msgstr "zbyt wiele grup\n"
 
-#: src/newusers.c:82
-#, c-format
-msgid "Usage: %s [ input ]\n"
-msgstr "U¿ycie: %s [ wej¶cie ]\n"
+#: src/newusers.c:78
+#, fuzzy, c-format
+msgid "Usage: %s [input]\n"
+msgstr "U¿ycie: %s [wej¶cie ]\n"
 
-#: src/newusers.c:414
+#: src/newusers.c:407
 #, c-format
 msgid "%s: can't lock /etc/passwd.\n"
 msgstr "%s: nie mogê zablokowaæ /etc/passwd.\n"
 
-#: src/newusers.c:425
+#: src/newusers.c:419
 #, c-format
 msgid "%s: can't lock files, try again later\n"
 msgstr "%s: nie mogê zablokowaæ plików, spróbuj pó¼niej\n"
 
-#: src/newusers.c:440
+#: src/newusers.c:435
 #, c-format
 msgid "%s: can't open files\n"
 msgstr "%s: nie mogê otworzyæ plików\n"
 
-#: src/newusers.c:485
+#: src/newusers.c:480
 #, c-format
 msgid "%s: line %d: invalid line\n"
 msgstr "%s: linia %d: nieprawid³owa linia\n"
 
-#: src/newusers.c:503
+#: src/newusers.c:499
 #, c-format
 msgid "%s: line %d: can't create GID\n"
 msgstr "%s: linia %d: nie mogê utworzyæ GID\n"
 
-#: src/newusers.c:519
+#: src/newusers.c:515
 #, c-format
 msgid "%s: line %d: can't create UID\n"
 msgstr "%s: linia %d: nie mogê utworzyæ UID\n"
 
-#: src/newusers.c:531
+#: src/newusers.c:528
 #, c-format
 msgid "%s: line %d: cannot find user %s\n"
 msgstr "%s: linia %d: nie mogê znale¶æ u¿ytkownika %s\n"
 
-#: src/newusers.c:539
+#: src/newusers.c:537
 #, c-format
 msgid "%s: line %d: can't update password\n"
 msgstr "%s: linia %d: nie mogê zaktualizowaæ pliku z has³ami\n"
 
-#: src/newusers.c:556
+#: src/newusers.c:555
 #, c-format
 msgid "%s: line %d: mkdir failed\n"
 msgstr "%s: linia %d: mkdir nie powiod³o siê\n"
 
-#: src/newusers.c:560
+#: src/newusers.c:561
 #, c-format
 msgid "%s: line %d: chown failed\n"
 msgstr "%s: linia %d: chown nie powiod³o siê\n"
 
-#: src/newusers.c:569
+#: src/newusers.c:571
 #, c-format
 msgid "%s: line %d: can't update entry\n"
 msgstr "%s: linia %d: nie mogê zaktualizowaæ wpisu\n"
 
-#: src/newusers.c:600
+#: src/newusers.c:603
 #, c-format
 msgid "%s: error updating files\n"
 msgstr "%s: b³±d podczas aktualizowania plików\n"
 
-#: src/passwd.c:239
-#, c-format
-msgid "usage: %s [ -f | -s ] [ name ]\n"
-msgstr "u¿ycie: %s [ -f | -s ] [ nazwa ]\n"
+#: src/passwd.c:174
+#, fuzzy, c-format
+msgid "usage: %s [-f|-s] [name]\n"
+msgstr "u¿ycie: %s [-f|-s ] [nazwa ]\n"
 
-#: src/passwd.c:242
-#, c-format
-msgid "       %s [ -x max ] [ -n min ] [ -w warn ] [ -i inact ] name\n"
-msgstr "       %s [ -x maks ] [ -n min ] [ -w ostrz ] [ -i nieakty ] nazwa\n"
+#: src/passwd.c:178
+#, fuzzy, c-format
+msgid "       %s [-x max] [-n min] [-w warn] [-i inact] name\n"
+msgstr "       %s [-x maks ] [-n min ] [-w ostrz ] [-i nieakty ] nazwa\n"
 
-#: src/passwd.c:245
-#, c-format
-msgid "       %s { -l | -u | -d | -S | -e } name\n"
+#: src/passwd.c:180
+#, fuzzy, c-format
+msgid "       %s {-l|-u|-d|-S|-e} name\n"
 msgstr "       %s { -l | -u | -d | -S | -e } nazwa\n"
 
-#: src/passwd.c:347
+#: src/passwd.c:283
 #, c-format
 msgid "User %s has a TCFS key, his old password is required.\n"
 msgstr "U¿ytkownik %s posiada klucz TCFS, jego stare has³o jest wymagane.\n"
 
-#: src/passwd.c:348
+#: src/passwd.c:286
 msgid "You can use -t option to force the change.\n"
 msgstr "Nie mo¿esz u¿ywaæ opcji -t by wymusiæ zmianê.\n"
 
-#: src/passwd.c:354
+#: src/passwd.c:292
 msgid "Old password: "
 msgstr "Stare has³o: "
 
-#: src/passwd.c:361
+#: src/passwd.c:301
 #, c-format
 msgid "Incorrect password for `%s'\n"
 msgstr "Nieprawid³owe has³o `%s'\n"
 
-#: src/passwd.c:374
+#: src/passwd.c:314
 #, c-format
 msgid "Warning: user %s has a TCFS key.\n"
 msgstr "Ostrze¿enie: u¿ytkownik %s posiada klucz TCFS.\n"
 
-#: src/passwd.c:392
+#: src/passwd.c:333
 #, c-format
 msgid ""
 "Enter the new password (minimum of %d, maximum of %d characters)\n"
@@ -1654,15 +1641,15 @@ 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"
 
-#: src/passwd.c:399
+#: src/passwd.c:339
 msgid "New password: "
 msgstr "Nowe has³o: "
 
-#: src/passwd.c:409
+#: src/passwd.c:350
 msgid "Try again.\n"
 msgstr "Spróbuj ponownie.\n"
 
-#: src/passwd.c:418
+#: src/passwd.c:361
 msgid ""
 "\n"
 "Warning: weak password (enter it again to use it anyway).\n"
@@ -1670,90 +1657,90 @@ msgstr ""
 "\n"
 "Ostrze¿enie: s³abe has³o (jednak wpisz je ponowie je¶li chcesz go u¿yæ).\n"
 
-#: src/passwd.c:427
+#: src/passwd.c:371
 msgid "They don't match; try again.\n"
 msgstr "Nie pasuj±; spróbuj ponownie.\n"
 
-#: src/passwd.c:512 src/passwd.c:528
+#: src/passwd.c:451 src/passwd.c:469
 #, c-format
 msgid "The password for %s cannot be changed.\n"
 msgstr "Has³o dla %s nie mo¿e byæ zmienione.\n"
 
-#: src/passwd.c:556
+#: src/passwd.c:494
 #, c-format
 msgid "Sorry, the password for %s cannot be changed yet.\n"
 msgstr "Wybacz, has³o dla %s nie mo¿e byæ jeszcze zmienione.\n"
 
-#: src/passwd.c:693
+#: src/passwd.c:614
 #, c-format
 msgid "%s: out of memory\n"
 msgstr "%s: brak pamiêci\n"
 
-#: src/passwd.c:845
+#: src/passwd.c:769
 msgid "Cannot lock the TCFS key database; try again later\n"
 msgstr "Nie mogê zablokowaæ bazy kluczy TCFS; spróbuj ponownie\n"
 
-#: src/passwd.c:851
+#: src/passwd.c:777
 msgid "Cannot open the TCFS key database.\n"
 msgstr "Nie mogê otworzyæ bazy kluczy TCFS.\n"
 
-#: src/passwd.c:857
+#: src/passwd.c:785
 msgid "Error updating the TCFS key database.\n"
 msgstr "B³±d podczas aktualizacji bazy kluczy TCFS.\n"
 
-#: src/passwd.c:862
+#: src/passwd.c:792
 msgid "Cannot commit TCFS changes.\n"
 msgstr "Nie mogê potwierdziæ zmian TCFS.\n"
 
-#: src/passwd.c:1069
+#: src/passwd.c:975
 #, c-format
 msgid "%s: Cannot execute %s"
 msgstr "%s: Nie mogê wykonaæ %s"
 
-#: src/passwd.c:1176
+#: src/passwd.c:1077
 #, c-format
 msgid "%s: repository %s not supported\n"
 msgstr "%s: ropozytorium %s nie jest obs³ugiwane\n"
 
-#: src/passwd.c:1263
+#: src/passwd.c:1152
 #, c-format
 msgid "%s: Permission denied\n"
 msgstr "%s: Dostêp zabroniony\n"
 
-#: src/passwd.c:1287
+#: src/passwd.c:1176
 #, c-format
 msgid "You may not change the password for %s.\n"
 msgstr "Nie mo¿esz zmieniaæ has³a dla %s.\n"
 
-#: src/passwd.c:1352
+#: src/passwd.c:1242
 #, c-format
 msgid "Changing password for %s\n"
 msgstr "Zmieniam has³o dla %s\n"
 
-#: src/passwd.c:1356
+#: src/passwd.c:1246
 #, c-format
 msgid "The password for %s is unchanged.\n"
 msgstr "Has³o dla %s pozostaje niezmienione.\n"
 
-#: src/passwd.c:1412
+#: src/passwd.c:1297
 msgid "Password changed.\n"
 msgstr "Has³o zmienione.\n"
 
-#: src/pwck.c:98
+#: src/pwck.c:87
 #, fuzzy, c-format
-msgid "Usage: %s [ -sqr ] [ passwd [ shadow ] ]\n"
-msgstr "U¿ycie: %s [ -qr ] [ has³o [ shadow ] ]\n"
+msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+msgstr "U¿ycie: %s [-q] [-r] [-s] [has³o [shadow ] ]\n"
 
-#: src/pwck.c:100
+#: src/pwck.c:90
 #, fuzzy, c-format
-msgid "Usage: %s [ -sqr ] [ passwd ]\n"
-msgstr "U¿ycie: %s [ -qr ] [ has³o ]\n"
+msgid "Usage: %s [-q] [-r] [-s] [passwd]\n"
+msgstr "U¿ycie: %s [-q] [-r] [-s] [has³o ]\n"
 
 #.
-#. * Tell the user this entire line is bogus and
-#. * ask them to delete it.
+#. * Tell the user this entire line is bogus and ask
+#. * them to delete it.
 #.
-#: src/pwck.c:304
+#: src/pwck.c:295
 msgid "invalid password file entry\n"
 msgstr "nieprawid³owy wpis do pliku z has³ami\n"
 
@@ -1761,32 +1748,24 @@ msgstr "nieprawid
 #. * Tell the user this entry is a duplicate of
 #. * another and ask them to delete it.
 #.
-#: src/pwck.c:366
+#: src/pwck.c:357
 msgid "duplicate password entry\n"
 msgstr "duplikuj±cy siê wpis w pliku z has³ami\n"
 
-#: src/pwck.c:382
+#: src/pwck.c:373
 #, c-format
 msgid "invalid user name `%s'\n"
 msgstr "nieprawid³owa nazwa u¿ytkownika `%s'\n"
 
-#: src/pwck.c:392
-#, c-format
-msgid "user %s: bad UID (%d)\n"
-msgstr "u¿ytkownik %s: z³y UID (%d)\n"
-
 #.
 #. * No primary group, just give a warning
 #.
-#: src/pwck.c:407
-#, c-format
-msgid "user %s: no group %d\n"
+#: src/pwck.c:388
+#, fuzzy, c-format
+msgid "user %s: no group %u\n"
 msgstr "u¿ytkownik %s: brak grupy %d\n"
 
-#.
-#. * Home directory doesn't exist, give a warning
-#.
-#: src/pwck.c:422
+#: src/pwck.c:404
 #, c-format
 msgid "user %s: directory %s does not exist\n"
 msgstr "u¿ytkownik %s: katalog %s nie istnieje\n"
@@ -1794,16 +1773,16 @@ msgstr "u
 #.
 #. * Login shell doesn't exist, give a warning
 #.
-#: src/pwck.c:437
+#: src/pwck.c:420
 #, c-format
 msgid "user %s: program %s does not exist\n"
 msgstr "u¿ytkownik %s: program %s nie istnieje\n"
 
 #.
-#. * Tell the user this entire line is bogus and
-#. * ask them to delete it.
+#. * Tell the user this entire line is bogus and ask
+#. * them to delete it.
 #.
-#: src/pwck.c:473
+#: src/pwck.c:456
 msgid "invalid shadow password file entry\n"
 msgstr "nieprawid³owy wpis w pliku z has³ami\n"
 
@@ -1811,7 +1790,7 @@ msgstr "nieprawid
 #. * Tell the user this entry is a duplicate of
 #. * another and ask them to delete it.
 #.
-#: src/pwck.c:535
+#: src/pwck.c:518
 msgid "duplicate shadow password entry\n"
 msgstr "duplikuj±cy siê wpis w pliku z ukrytymi has³ami\n"
 
@@ -1819,70 +1798,70 @@ msgstr "duplikuj
 #. * Tell the user this entry has no matching
 #. * /etc/passwd entry and ask them to delete it.
 #.
-#: src/pwck.c:559
+#: src/pwck.c:542
 msgid "no matching password file entry\n"
 msgstr "brak pasuj±cego wpisu w pliku z has³ami\n"
 
-#: src/pwck.c:576
+#: src/pwck.c:560
 #, 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"
 
-#: src/pwconv.c:94 src/pwunconv.c:99
+#: src/pwconv.c:84 src/pwunconv.c:93
 #, c-format
 msgid "%s: can't lock passwd file\n"
 msgstr "%s: nie mogê zablokowaæ pliku z has³ami\n"
 
-#: src/pwconv.c:99 src/pwunconv.c:104
+#: src/pwconv.c:89 src/pwunconv.c:98
 #, c-format
 msgid "%s: can't open passwd file\n"
 msgstr "%s: nie mogê otworzyæ pliku z has³ami\n"
 
-#: src/pwconv.c:126
+#: src/pwconv.c:117
 #, c-format
 msgid "%s: can't remove shadow entry for %s\n"
 msgstr "%s: nie mogê usun±æ wpisu z pliku z ukrytymi has³ami dla %s\n"
 
-#: src/pwconv.c:169
+#: src/pwconv.c:163
 #, c-format
 msgid "%s: can't update passwd entry for %s\n"
 msgstr "%s: nie mogê zaktualizowaæ wpisu do pliku z has³ami dla %s\n"
 
-#: src/pwconv.c:176
+#: src/pwconv.c:170
 #, c-format
 msgid "%s: can't update shadow file\n"
 msgstr "%s: nie mogê zaktualizowaæ pliku z ukrytymi has³ami\n"
 
-#: src/pwconv.c:180
+#: src/pwconv.c:175
 #, c-format
 msgid "%s: can't update passwd file\n"
 msgstr "%s: nie mogê zaktualizowaæ pliku z has³ami\n"
 
-#: src/pwunconv.c:53
+#: src/pwunconv.c:50
 #, c-format
 msgid "%s: Shadow passwords are not configured.\n"
 msgstr "%s: Przes³oniête has³a nie s± skonfigurowane.\n"
 
-#: src/pwunconv.c:162
+#: src/pwunconv.c:160
 #, c-format
 msgid "%s: can't update entry for user %s\n"
 msgstr "%s: nie mogê zaktualizowaæ wpisu dla u¿ytkownika %s\n"
 
-#: src/pwunconv.c:179
+#: src/pwunconv.c:181
 #, c-format
 msgid "%s: can't delete shadow password file\n"
 msgstr "%s: nie mogê skasowaæ pliku z ukrytymi has³ami\n"
 
-#: src/su.c:140
+#: src/su.c:133
 msgid "Sorry."
 msgstr "Wybacz."
 
-#: src/su.c:222
+#: src/su.c:216
 #, c-format
 msgid "%s: must be run from a terminal\n"
 msgstr "%s: musisz uruchamiaæ z terminala\n"
 
-#: src/su.c:310
+#: src/su.c:306
 #, c-format
 msgid "%s: pam_start: error %d\n"
 msgstr "%s: pam_start: b³±d %d\n"
@@ -1892,18 +1871,17 @@ msgstr "%s: pam_start: b
 msgid "Unknown id: %s\n"
 msgstr "Nieznany id: %s\n"
 
-#. access denied (-1) or unexpected value
-#: src/su.c:371 src/su.c:386
+#: src/su.c:373 src/su.c:390
 #, c-format
 msgid "You are not authorized to su %s\n"
 msgstr "Nie masz autoryzacji by u¿ywaæ su %s\n"
 
 #. require own password
-#: src/su.c:382
+#: src/su.c:385
 msgid "(Enter your own password.)"
 msgstr "(Wpisz swoje w³asne has³o.)"
 
-#: src/su.c:413
+#: src/su.c:419
 #, c-format
 msgid ""
 "%s: %s\n"
@@ -1912,28 +1890,23 @@ msgstr ""
 "%s: %s\n"
 "(Zignorowano)\n"
 
-#: src/su.c:615
+#: src/su.c:626
 msgid "No shell\n"
 msgstr "Brak pow³oki\n"
 
 #. must be a password file!
-#: src/sulogin.c:136
+#: src/sulogin.c:132
 msgid "No password file\n"
 msgstr "Brak pliku z has³ami\n"
 
 #.
 #. * Fail secure
 #.
-#: src/sulogin.c:178
+#: src/sulogin.c:174
 msgid "No password entry for 'root'\n"
 msgstr "Brak wpisu do bazy hase³ dla 'root'\n"
 
-#.
-#. * Here we prompt for the root password, or if no password is
-#. * given we just exit.
-#.
-#. get a password for root
-#: src/sulogin.c:192
+#: src/sulogin.c:190
 msgid ""
 "\n"
 "Type control-d to proceed with normal startup,\n"
@@ -1944,7 +1917,7 @@ msgstr ""
 "(lub podaj has³o root-a by przej¶æ do trybu utrzymania systemu):"
 
 #. make new environment active
-#: src/sulogin.c:241
+#: src/sulogin.c:243
 msgid "Entering System Maintenance Mode\n"
 msgstr "Wchodzê w tryb utrzymania systemu\n"
 
@@ -1953,507 +1926,507 @@ msgstr "Wchodz
 msgid "%s: rebuild the group database\n"
 msgstr "%s: przebuduj bazê grup\n"
 
-#: src/useradd.c:258
+#: src/useradd.c:260
 #, c-format
 msgid "%s: rebuild the shadow group database\n"
 msgstr "%s: przebuduj bazê przes³oniêtych hase³\n"
 
-#: src/useradd.c:295 src/usermod.c:974
+#: src/useradd.c:295 src/useradd.c:309 src/usermod.c:981 src/usermod.c:995
 #, c-format
 msgid "%s: invalid numeric argument `%s'\n"
 msgstr "%s: nieprawid³owy argument numeryczny `%s'\n"
 
-#: src/useradd.c:351
+#: src/useradd.c:365
 #, c-format
 msgid "%s: unknown gid %s\n"
 msgstr "%s: nieznany gid %s\n"
 
-#: src/useradd.c:358 src/useradd.c:660 src/useradd.c:1246 src/usermod.c:261
-#: src/usermod.c:1105
+#: src/useradd.c:373 src/useradd.c:676 src/useradd.c:1269 src/usermod.c:260
+#: src/usermod.c:1128
 #, c-format
 msgid "%s: unknown group %s\n"
 msgstr "%s: nieznana grupa %s\n"
 
-#: src/useradd.c:426
-#, c-format
-msgid "group=%s,%ld  basedir=%s  skel=%s\n"
+#: src/useradd.c:440
+#, fuzzy, c-format
+msgid "group=%s,%u  basedir=%s  skel=%s\n"
 msgstr "grupa=%s,%ld kat_baz=%s  skel=%s\n"
 
-#: src/useradd.c:429
+#: src/useradd.c:444
 #, c-format
 msgid "shell=%s  "
 msgstr "pow³oka=%s  "
 
-#: src/useradd.c:431
+#: src/useradd.c:446
 #, c-format
 msgid "inactive=%ld  expire=%s"
 msgstr "nieaktywne=%ld  wyga¶niêcie=%s"
 
-#: src/useradd.c:435
-#, c-format
-msgid "GROUP=%ld\n"
+#: src/useradd.c:450
+#, fuzzy, c-format
+msgid "GROUP=%u\n"
 msgstr "GRUPA=%ld\n"
 
-#: src/useradd.c:436
+#: src/useradd.c:451
 #, c-format
 msgid "HOME=%s\n"
 msgstr "KAT_DOM=%s\n"
 
-#: src/useradd.c:438
+#: src/useradd.c:453
 #, c-format
 msgid "INACTIVE=%ld\n"
 msgstr "NIEAKTYWNE=%ld\n"
 
-#: src/useradd.c:439
+#: src/useradd.c:454
 #, c-format
 msgid "EXPIRE=%s\n"
 msgstr "WYGA¦NIÊCIE=%s\n"
 
-#: src/useradd.c:441
+#: src/useradd.c:456
 #, c-format
 msgid "SHELL=%s\n"
 msgstr "POW£OKA=%s\n"
 
-#: src/useradd.c:442
+#: src/useradd.c:457
 #, c-format
 msgid "SKEL=%s\n"
 msgstr "SKEL=%s\n"
 
-#: src/useradd.c:482
+#: src/useradd.c:498
 #, c-format
 msgid "%s: cannot create new defaults file\n"
 msgstr "%s: nie mogê utworzyæ nowego pliku ze standardowymi ustawieniami\n"
 
-#: src/useradd.c:488
+#: src/useradd.c:503
 #, fuzzy, c-format
 msgid "%s: cannot open new defaults file\n"
 msgstr "%s: nie mogê utworzyæ nowego pliku ze standardowymi ustawieniami\n"
 
-#: src/useradd.c:582 src/useradd.c:593
+#: src/useradd.c:596 src/useradd.c:608
 #, c-format
 msgid "%s: rename: %s"
 msgstr "%s: zmiana nazwy: %s"
 
-#: src/useradd.c:680 src/usermod.c:281
+#: src/useradd.c:697 src/usermod.c:281
 #, c-format
 msgid "%s: group `%s' is a NIS group.\n"
 msgstr "%s: grupa `%s' jest grup± NIS.\n"
 
-#: src/useradd.c:688 src/usermod.c:289
+#: src/useradd.c:706 src/usermod.c:290
 #, c-format
 msgid "%s: too many groups specified (max %d).\n"
 msgstr "%s: podano zbyt wiele grup (maks %d).\n"
 
-#: src/useradd.c:720 src/usermod.c:321
+#: src/useradd.c:738 src/usermod.c:322
 #, c-format
 msgid "usage: %s\t[-u uid [-o]] [-g group] [-G group,...] \n"
 msgstr "u¿ycie: %s\t[-u uid [-o]] [-g grupa] [-G grupa,...] \n"
 
-#: src/useradd.c:723
+#: src/useradd.c:742
 msgid "\t\t[-d home] [-s shell] [-c comment] [-m [-k template]]\n"
 msgstr "\t\t[-d kat_dom] [-s pow³oka] [-c komentarz] [-m [-k wzór]]\n"
 
-#: src/useradd.c:726 src/usermod.c:327
+#: src/useradd.c:745 src/usermod.c:329
 msgid "[-f inactive] [-e expire ] "
 msgstr "[-f nieaktywne] [-e utrata_wa¿no¶ci ]"
 
-#: src/useradd.c:729
+#: src/useradd.c:748
 msgid "[-A program] "
 msgstr "[-A program] "
 
-#: src/useradd.c:731
+#: src/useradd.c:750
 msgid "[-p passwd] name\n"
 msgstr "[-p has³o] nazwa\n"
 
-#: src/useradd.c:733
+#: src/useradd.c:753
 #, c-format
 msgid "       %s\t-D [-g group] [-b base] [-s shell]\n"
 msgstr "       %s\t-D [-g grupa] [-b baza] [-s pow³oka]\n"
 
-#: src/useradd.c:736
+#: src/useradd.c:756
 msgid "\t\t[-f inactive] [-e expire ]\n"
 msgstr "\t\t[-f nieaktywne] [-e utrata_wa¿no¶ci ]\n"
 
-#: src/useradd.c:833 src/usermod.c:479
+#: src/useradd.c:850 src/usermod.c:480
 #, c-format
 msgid "%s: error locking group file\n"
 msgstr "%s: b³±d podczas blokowania pliku z grupami\n"
 
-#: src/useradd.c:837 src/usermod.c:484
+#: src/useradd.c:855 src/usermod.c:486
 #, c-format
 msgid "%s: error opening group file\n"
 msgstr "%s: b³±d podczas otwierania pliku z grupami\n"
 
-#: src/useradd.c:842 src/usermod.c:591
+#: src/useradd.c:862 src/usermod.c:597
 #, c-format
 msgid "%s: error locking shadow group file\n"
 msgstr "%s: b³±d podczas blokowania pliku z ukrytymi has³ami\n"
 
-#: src/useradd.c:847 src/usermod.c:597
+#: src/useradd.c:867 src/usermod.c:603
 #, c-format
 msgid "%s: error opening shadow group file\n"
 msgstr "%s: b³±d podczas otwierania pliku z ukrytymi grupami\n"
 
-#: src/useradd.c:1019
-#, c-format
-msgid "%s: uid %d is not unique\n"
-msgstr "%s: uid %d nie jest niepowtarzalny\n"
+#: src/useradd.c:1039
+#, fuzzy, c-format
+msgid "%s: uid %u is not unique\n"
+msgstr "%s: uid %ld nie jest niepowtarzalny\n"
 
-#: src/useradd.c:1049
+#: src/useradd.c:1069
 #, c-format
 msgid "%s: can't get unique uid\n"
 msgstr "%s: nie mogê uzyskaæ niepowtarzalnego uid\n"
 
-#: src/useradd.c:1157 src/useradd.c:1301 src/usermod.c:1053 src/usermod.c:1064
-#: src/usermod.c:1074 src/usermod.c:1120 src/usermod.c:1164
+#: src/useradd.c:1174 src/useradd.c:1325 src/usermod.c:1075 src/usermod.c:1086
+#: src/usermod.c:1096 src/usermod.c:1143 src/usermod.c:1187
 #, c-format
 msgid "%s: invalid field `%s'\n"
 msgstr "%s: nieprawid³owe pole `%s'\n"
 
-#: src/useradd.c:1171
+#: src/useradd.c:1189
 #, c-format
 msgid "%s: invalid base directory `%s'\n"
 msgstr "%s: nieprawid³owy katalog bazowy `%s'\n"
 
-#: src/useradd.c:1181
+#: src/useradd.c:1199
 #, c-format
 msgid "%s: invalid comment `%s'\n"
 msgstr "%s: nieprawid³owy komentarz `%s'\n"
 
-#: src/useradd.c:1191
+#: src/useradd.c:1210
 #, c-format
 msgid "%s: invalid home directory `%s'\n"
 msgstr "%s: nieprawid³owy katalog domowy `%s'\n"
 
-#: src/useradd.c:1209 src/usermod.c:1087
+#: src/useradd.c:1229 src/usermod.c:1110
 #, c-format
 msgid "%s: invalid date `%s'\n"
 msgstr "%s: nieprawid³owa data `%s'\n"
 
-#: src/useradd.c:1221
+#: src/useradd.c:1242
 #, c-format
 msgid "%s: shadow passwords required for -e\n"
 msgstr "%s: ukryte has³a wymagane dla -e\n"
 
-#: src/useradd.c:1236
+#: src/useradd.c:1258
 #, c-format
 msgid "%s: shadow passwords required for -f\n"
 msgstr "%s: ukryte has³a wymagane dla -f\n"
 
-#: src/useradd.c:1310
+#: src/useradd.c:1336
 #, c-format
 msgid "%s: invalid shell `%s'\n"
 msgstr "%s: nieprawid³owa pow³oka `%s'\n"
 
-#: src/useradd.c:1351
+#: src/useradd.c:1377
 #, c-format
 msgid "%s: invalid user name `%s'\n"
 msgstr "%s: nieprawid³owa nazwa u¿ytkownika `%s'\n"
 
-#: src/useradd.c:1387 src/userdel.c:298 src/usermod.c:1232
+#: src/useradd.c:1413 src/userdel.c:298 src/usermod.c:1255
 #, c-format
 msgid "%s: cannot rewrite password file\n"
 msgstr "%s: nie mogê przepisaæ pliku z has³ami\n"
 
-#: src/useradd.c:1392 src/userdel.c:301 src/usermod.c:1237
+#: src/useradd.c:1420 src/userdel.c:303 src/usermod.c:1262
 #, c-format
 msgid "%s: cannot rewrite shadow password file\n"
 msgstr "%s: nie mogê przepisaæ pliku z ukrytymi has³ami\n"
 
-#: src/useradd.c:1432 src/userdel.c:365 src/usermod.c:1272
+#: src/useradd.c:1461 src/userdel.c:367 src/usermod.c:1296
 #, c-format
 msgid "%s: unable to lock password file\n"
 msgstr "%s: nie mogê zablokowaæ pliku z has³ami\n"
 
-#: src/useradd.c:1436 src/userdel.c:369 src/usermod.c:1276
+#: src/useradd.c:1466 src/userdel.c:372 src/usermod.c:1301
 #, c-format
 msgid "%s: unable to open password file\n"
 msgstr "%s: nie mogê otworzyæ pliku z has³ami\n"
 
-#: src/useradd.c:1442 src/userdel.c:374 src/usermod.c:1281
+#: src/useradd.c:1474 src/userdel.c:379 src/usermod.c:1308
 #, c-format
 msgid "%s: cannot lock shadow password file\n"
 msgstr "%s: nie mogê zablokowaæ pliku z ukrytymi has³ami\n"
 
-#: src/useradd.c:1448 src/userdel.c:379 src/usermod.c:1286
+#: src/useradd.c:1481 src/userdel.c:385 src/usermod.c:1314
 #, c-format
 msgid "%s: cannot open shadow password file\n"
 msgstr "%s: nie mogê otworzyæ pliku z ukrytymi has³ami\n"
 
-#: src/useradd.c:1547 src/usermod.c:1373
+#: src/useradd.c:1580 src/usermod.c:1405
 #, c-format
 msgid "%s: error adding authentication method\n"
 msgstr "%s: b³±d podczas dodawania metody uwierzytelniania\n"
 
-#: src/useradd.c:1570
+#: src/useradd.c:1604
 #, c-format
 msgid "%s: error adding new password entry\n"
 msgstr "%s: b³±d podczas dodawania nowego wpisu do pliku z has³ami\n"
 
-#: src/useradd.c:1585
+#: src/useradd.c:1618
 #, c-format
 msgid "%s: error updating password dbm entry\n"
 msgstr "%s: b³±d podczas aktualizacji wpisu dbm do pliku z has³ami\n"
 
-#: src/useradd.c:1601 src/usermod.c:1432
+#: src/useradd.c:1634 src/usermod.c:1471
 #, c-format
 msgid "%s: error adding new shadow password entry\n"
 msgstr "%s: b³±d podczas dodawania nowego wpisu do pliku z ukrytymi has³ami\n"
 
-#: src/useradd.c:1617 src/usermod.c:1447
+#: src/useradd.c:1650 src/usermod.c:1488
 #, c-format
 msgid "%s: error updating shadow passwd dbm entry\n"
 msgstr "%s: b³±d podczas aktualizacji wpisu dbm do pliku z ukrytymi has³ami\n"
 
-#: src/useradd.c:1649
+#: src/useradd.c:1682
 #, c-format
 msgid "%s: cannot create directory %s\n"
 msgstr "%s: nie mogê utworzyæ katalogu %s\n"
 
-#: src/useradd.c:1772 src/usermod.c:1210
+#: src/useradd.c:1806 src/usermod.c:1233
 #, c-format
 msgid "%s: user %s exists\n"
 msgstr "%s: u¿ytkownik %s istnieje\n"
 
-#: src/useradd.c:1784
+#: src/useradd.c:1821
 #, c-format
 msgid ""
 "%s: group %s exists - if you want to add this user to that group, use -g.\n"
 msgstr ""
 
-#: src/useradd.c:1815
+#: src/useradd.c:1854
 #, c-format
 msgid "%s: warning: CREATE_HOME not supported, please use -m instead.\n"
 msgstr ""
 
-#: src/userdel.c:133
+#: src/userdel.c:129
 #, c-format
 msgid "usage: %s [-r] name\n"
 msgstr "u¿ycie: %s [-r] nazwa\n"
 
-#: src/userdel.c:184 src/userdel.c:266
+#: src/userdel.c:181 src/userdel.c:267
 #, c-format
 msgid "%s: error updating group entry\n"
 msgstr "%s: b³±d podczas aktualizacji wpisu grupy\n"
 
-#: src/userdel.c:194 src/userdel.c:275
+#: src/userdel.c:191 src/userdel.c:276
 #, c-format
 msgid "%s: cannot update dbm group entry\n"
 msgstr "%s: nie mogê zaktualizowaæ wpisu dbm do pliku z grupami\n"
 
-#: src/userdel.c:221
+#: src/userdel.c:219
 #, fuzzy, c-format
 msgid "%s: cannot remove dbm group entry\n"
 msgstr "%s: nie mogê zaktualizowaæ wpisu dbm do pliku z grupami\n"
 
-#: src/userdel.c:306
+#: src/userdel.c:308
 #, c-format
 msgid "%s: cannot rewrite TCFS key file\n"
 msgstr "%s: nie mogê przepisaæ pliku klucza TCFS\n"
 
-#: src/userdel.c:386
+#: src/userdel.c:392
 #, c-format
 msgid "%s: cannot lock TCFS key file\n"
 msgstr "%s: nie mogê zablokowaæ pliku klucza TCFS\n"
 
-#: src/userdel.c:390
+#: src/userdel.c:397
 #, c-format
 msgid "%s: cannot open TCFS key file\n"
 msgstr "%s: nie mogê otworzyæ pliku klucza TCFS\n"
 
-#: src/userdel.c:399
+#: src/userdel.c:408
 #, c-format
 msgid "%s: cannot open group file\n"
 msgstr "%s: nie mogê otworzyæ pliku z grupami\n"
 
-#: src/userdel.c:409
+#: src/userdel.c:419
 #, c-format
 msgid "%s: cannot open shadow group file\n"
 msgstr "%s: nie mogê otworzyæ pliku z przes³oniêtymi grupami\n"
 
-#: src/userdel.c:440 src/userdel.c:455
+#: src/userdel.c:451 src/userdel.c:468
 #, c-format
 msgid "%s: error deleting authentication\n"
 msgstr "%s: b³±d podczas usuwania informacji uwierzytelniaj±cej\n"
 
-#: src/userdel.c:464
+#: src/userdel.c:479
 #, c-format
 msgid "%s: error deleting password entry\n"
 msgstr "%s: b³±d podczas usuwania wpisu do pliku z has³ami\n"
 
-#: src/userdel.c:467
+#: src/userdel.c:485
 #, c-format
 msgid "%s: error deleting shadow password entry\n"
 msgstr "%s: b³±d podczas usuwania wpisu do pliku z ukrytymi has³ami\n"
 
-#: src/userdel.c:476
+#: src/userdel.c:496
 #, c-format
 msgid "%s: error deleting TCFS entry\n"
 msgstr "%s: b³±d podczas usuwania wpisu TCFS\n"
 
-#: src/userdel.c:489
+#: src/userdel.c:510
 #, c-format
 msgid "%s: error deleting password dbm entry\n"
 msgstr "%s: b³±d podczas usuwania wpisu dbm do pliku z has³ami\n"
 
-#: src/userdel.c:508
+#: src/userdel.c:533
 #, c-format
 msgid "%s: error deleting shadow passwd dbm entry\n"
 msgstr "%s: b³±d podczas usuwania wpisy dbm z pliku z ukrytymi has³ami\n"
 
-#: src/userdel.c:549
+#: src/userdel.c:569
 #, c-format
 msgid "%s: user %s is currently logged in\n"
 msgstr "%s: u¿ytkownik %s jest aktualnie zalogowany\n"
 
-#: src/userdel.c:666
+#: src/userdel.c:659
 #, c-format
 msgid "%s: warning: %s not owned by %s, not removing\n"
 msgstr "%s: ostrze¿enie: w³a¶cicielem %s nie jest %s, nie usuwam\n"
 
-#: src/userdel.c:672
+#: src/userdel.c:666
 #, c-format
 msgid "%s: warning: can't remove "
 msgstr "%s: ostrze¿enie: nie mogê usun±æ "
 
-#: src/userdel.c:791 src/usermod.c:1001
+#: src/userdel.c:758 src/usermod.c:1023
 #, c-format
 msgid "%s: user %s does not exist\n"
 msgstr "%s: u¿ytkownik %s nie istnieje\n"
 
-#: src/userdel.c:805 src/usermod.c:1017
+#: src/userdel.c:770 src/usermod.c:1039
 #, c-format
 msgid "%s: user %s is a NIS user\n"
 msgstr "%s: u¿ytkownik %s jest u¿ytkownikiem NIS\n"
 
-#: src/userdel.c:842
+#: src/userdel.c:799
 #, c-format
 msgid "%s: %s not owned by %s, not removing\n"
 msgstr "%s: w³a¶cicielem %s nie jest %s, nie usuwam\n"
 
-#: src/userdel.c:865
+#: src/userdel.c:818
 #, c-format
 msgid "%s: not removing directory %s (would remove home of user %s)\n"
 msgstr "%s: nie usuwam katalogu %s (would remove home of user %s)\n"
 
-#: src/userdel.c:878
+#: src/userdel.c:830
 #, c-format
 msgid "%s: error removing directory %s\n"
 msgstr "%s: b³±d podczas usuwania katalogu %s\n"
 
-#: src/usermod.c:324
+#: src/usermod.c:326
 msgid "\t\t[-d home [-m]] [-s shell] [-c comment] [-l new_name]\n"
 msgstr "\t\t[-d kat_dom [-m]] [-s pow³oka] [-c komentarz] [-l nowa_nazwa]\n"
 
-#: src/usermod.c:330
+#: src/usermod.c:332
 msgid "[-A {DEFAULT|program},... ] "
 msgstr "[-A {DEFAULT|program},... ] "
 
-#: src/usermod.c:332
+#: src/usermod.c:334
 #, fuzzy
 msgid "[-p passwd] [-L|-U] name\n"
 msgstr "[-p has³o] nazwa\n"
 
-#: src/usermod.c:511
+#: src/usermod.c:514
 #, c-format
 msgid "%s: out of memory in update_group\n"
 msgstr "%s: zabrak³o pamiêci w pdate_group\n"
 
-#: src/usermod.c:634
+#: src/usermod.c:641
 #, c-format
 msgid "%s: out of memory in update_gshadow\n"
 msgstr "%s: zabrak³o pamiêci w update_gshadow\n"
 
-#: src/usermod.c:1187
+#: src/usermod.c:1210
 #, c-format
 msgid "%s: no flags given\n"
 msgstr "%s: nie podano flag\n"
 
-#: src/usermod.c:1194
+#: src/usermod.c:1217
 #, c-format
 msgid "%s: shadow passwords required for -e and -f\n"
 msgstr "%s: ukryte has³a wymagane dla -e i -f\n"
 
-#: src/usermod.c:1215
-#, c-format
-msgid "%s: uid %ld is not unique\n"
+#: src/usermod.c:1239
+#, fuzzy, c-format
+msgid "%s: uid %lu is not unique\n"
 msgstr "%s: uid %ld nie jest niepowtarzalny\n"
 
-#: src/usermod.c:1363
+#: src/usermod.c:1392
 #, c-format
 msgid "%s: error deleting authentication method\n"
 msgstr "%s: b³±d podczas usuwania metody uwierzytelniania\n"
 
-#: src/usermod.c:1383
+#: src/usermod.c:1418
 #, c-format
 msgid "%s: error changing authentication method\n"
 msgstr "%s: b³±d podczas zmiany metody uwierzytelniania\n"
 
-#: src/usermod.c:1400
+#: src/usermod.c:1436
 #, c-format
 msgid "%s: error changing password entry\n"
 msgstr "%s: b³±d podczas zmiany wpisu w pliku z has³ami\n"
 
-#: src/usermod.c:1406
+#: src/usermod.c:1442
 #, c-format
 msgid "%s: error removing password entry\n"
 msgstr "%s: b³±d podczas usuwania wpisu z pliku z has³ami\n"
 
-#: src/usermod.c:1414
+#: src/usermod.c:1451
 #, c-format
 msgid "%s: error adding password dbm entry\n"
 msgstr "%s: b³±d podczas dodawania wpisu dbm do pliku z has³ami\n"
 
-#: src/usermod.c:1421
+#: src/usermod.c:1459
 #, c-format
 msgid "%s: error removing passwd dbm entry\n"
 msgstr "%s: b³±d podczas usuwania wpisu dbm z pliku z has³ami\n"
 
-#: src/usermod.c:1438
+#: src/usermod.c:1478
 #, c-format
 msgid "%s: error removing shadow password entry\n"
 msgstr "%s: b³±d podczas usuwania wpisu z pliku z ukrytymi has³ami\n"
 
-#: src/usermod.c:1453
+#: src/usermod.c:1495
 #, c-format
 msgid "%s: error removing shadow passwd dbm entry\n"
 msgstr "%s: b³±d podczas usuwania wpisu dbm z pliku z ukrytymi has³ami\n"
 
-#: src/usermod.c:1484
+#: src/usermod.c:1524
 #, c-format
 msgid "%s: directory %s exists\n"
 msgstr "%s: katalog %s isnieje\n"
 
-#: src/usermod.c:1491
+#: src/usermod.c:1533
 #, c-format
 msgid "%s: can't create %s\n"
 msgstr "%s: nie mogê utworzyæ %s\n"
 
-#: src/usermod.c:1497
+#: src/usermod.c:1539
 #, c-format
 msgid "%s: can't chown %s\n"
 msgstr "%s: nie mogê zmieniæ w³a¶ciciela %s\n"
 
-#: src/usermod.c:1513
+#: src/usermod.c:1556
 #, c-format
 msgid "%s: cannot rename directory %s to %s\n"
 msgstr "%s: nie mogê zmieniæ nazwy katalogu z %s na %s\n"
 
 #. better leave it alone
-#: src/usermod.c:1610
+#: src/usermod.c:1653
 #, c-format
 msgid "%s: warning: %s not owned by %s\n"
 msgstr "%s: ostrze¿enie: w³a¶cicielem %s nie jest %s\n"
 
-#: src/usermod.c:1616
+#: src/usermod.c:1659
 msgid "failed to change mailbox owner"
 msgstr "nie powiod³a siê zmiana w³a¶ciciela skrzynki pocztowej"
 
-#: src/usermod.c:1623
+#: src/usermod.c:1667
 msgid "failed to rename mailbox"
 msgstr "zmiana nazwy skrzynki pocztowej nie powiod³a siê"
 
-#: src/vipw.c:102
+#: src/vipw.c:104
 #, c-format
 msgid ""
 "\n"
@@ -2462,21 +2435,21 @@ msgstr ""
 "\n"
 "%s: %s jest niezmieniony\n"
 
-#: src/vipw.c:127
+#: src/vipw.c:132
 #, fuzzy
 msgid "Couldn't lock file"
 msgstr "%s: nie mogê usun±c blokady z pliku\n"
 
-#: src/vipw.c:134
+#: src/vipw.c:141
 msgid "Couldn't make backup"
-msgstr ""
+msgstr "Nie mo¿na wykonaæ kopii zapasowej"
 
-#: src/vipw.c:187
+#: src/vipw.c:206
 #, c-format
 msgid "%s: can't restore %s: %s (your changes are in %s)\n"
 msgstr "%s: nie mogê odzyskaæ %s: %s (twoje zmiany s± w %s)\n"
 
-#: src/vipw.c:226
+#: src/vipw.c:244
 msgid ""
 "Usage:\n"
 "`vipw' edits /etc/passwd        `vipw -s' edits /etc/shadow\n"
@@ -2486,6 +2459,25 @@ msgstr ""
 "`vipw' edytuje /etc/passwd      `vipw -s' edytuje /etc/shadow\n"
 "`vigr' edytuje /etc/group       `vigr -s' edytuje /etc/gshadow\n"
 
+#~ msgid "%s: gid %ld is not unique\n"
+#~ msgstr "%s: gid %ld nie jest niepowtarzalny\n"
+
+#, fuzzy
+#~ msgid "unknown gid: %u\n"
+#~ msgstr "nieznany gid: %d\n"
+
+#~ msgid "%s: uid %d is not unique\n"
+#~ msgstr "%s: uid %d nie jest niepowtarzalny\n"
+
+#~ msgid "user %s: bad UID (%d)\n"
+#~ msgstr "u¿ytkownik %s: z³y UID (%d)\n"
+
+#~ msgid "%s: no aging information present\n"
+#~ msgstr "%s: brak informacji\n"
+
+#~ msgid "group %s: bad GID (%d)\n"
+#~ msgstr "grupa %s: z³y GID (%d)\n"
+
 #~ msgid "%s: permission denied (shell).\n"
 #~ msgstr "%s: dostêp zabroniony (pow³oka).\n"
 
index b8e289b34a1f1514bef783bb7ead5f11b0d7c8d7..cd2a7560af2f44c26c6a9ecef8f55c0ce4960dde 100644 (file)
@@ -6,7 +6,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
-"POT-Creation-Date: 2001-09-08 07:36+0200\n"
+"POT-Creation-Date: 2002-01-06 16:13+0100\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"
@@ -23,36 +23,36 @@ msgstr ""
 msgid "Warning: too many groups\n"
 msgstr ""
 
-#: libmisc/age.c:104
+#: libmisc/age.c:77
 msgid "Your password has expired."
 msgstr ""
 
-#: libmisc/age.c:107
+#: libmisc/age.c:80
 msgid "Your password is inactive."
 msgstr ""
 
-#: libmisc/age.c:110
+#: libmisc/age.c:83
 msgid "Your login has expired."
 msgstr ""
 
-#: libmisc/age.c:127
+#: libmisc/age.c:96
 msgid "  Contact the system administrator.\n"
 msgstr ""
 
-#: libmisc/age.c:130
+#: libmisc/age.c:99
 msgid "  Choose a new password.\n"
 msgstr ""
 
-#: libmisc/age.c:228
+#: libmisc/age.c:176
 #, c-format
 msgid "Your password will expire in %ld days.\n"
 msgstr ""
 
-#: libmisc/age.c:230
+#: libmisc/age.c:178
 msgid "Your password will expire tomorrow.\n"
 msgstr ""
 
-#: libmisc/age.c:232
+#: libmisc/age.c:180
 msgid "Your password will expire today.\n"
 msgstr ""
 
@@ -109,7 +109,7 @@ msgstr ""
 msgid "You have mail."
 msgstr ""
 
-#: libmisc/obscure.c:281 src/passwd.c:309
+#: libmisc/obscure.c:281 src/passwd.c:244
 #, c-format
 msgid "Bad password: %s.  "
 msgstr ""
@@ -124,12 +124,12 @@ msgstr ""
 msgid "passwd: %s\n"
 msgstr ""
 
-#: libmisc/setupenv.c:205
+#: libmisc/setupenv.c:211
 #, c-format
 msgid "Unable to cd to \"%s\"\n"
 msgstr ""
 
-#: libmisc/setupenv.c:213
+#: libmisc/setupenv.c:219
 msgid "No directory, logging in with HOME=/"
 msgstr ""
 
@@ -179,24 +179,24 @@ msgstr ""
 msgid "Dialup Password: "
 msgstr ""
 
-#: lib/getdef.c:253
+#: lib/getdef.c:276
 msgid "Could not allocate space for config info.\n"
 msgstr ""
 
 #.
 #. * Item was never found.
 #.
-#: lib/getdef.c:307
+#: lib/getdef.c:330
 #, c-format
 msgid "configuration error - unknown item '%s' (notify administrator)\n"
 msgstr ""
 
-#: lib/getdef.c:394
+#: lib/getdef.c:417
 #, c-format
 msgid "error - lookup '%s' failed\n"
 msgstr ""
 
-#: lib/getdef.c:402
+#: lib/getdef.c:425
 #, c-format
 msgid "%s not found\n"
 msgstr ""
@@ -205,7 +205,7 @@ msgstr ""
 #. * get the password from her, and set the salt for
 #. * the decryption from the group file.
 #.
-#: lib/pwauth.c:54 src/newgrp.c:305
+#: lib/pwauth.c:54 src/newgrp.c:348
 msgid "Password: "
 msgstr ""
 
@@ -223,105 +223,102 @@ msgstr ""
 msgid "Unknown error %d"
 msgstr ""
 
-#: src/chage.c:162
+#: src/chage.c:116
 #, c-format
 msgid ""
-"Usage: %s [ -l ] [ -m min_days ] [ -M max_days ] [ -W warn ]\n"
-"  [ -I inactive ] [ -E expire ] [ -d last_day ] user\n"
+"Usage: %s [-l] [-m min_days] [-M max_days] [-W warn]\n"
+"\t[-I inactive] [-E expire] [-d last_day] user\n"
 msgstr ""
 
-#: src/chage.c:164
+#: src/chage.c:122
 #, c-format
-msgid "Usage: %s [ -l ] [ -m min_days ] [ -M max_days ] [ -d last_day ] user\n"
+msgid "Usage: %s [-l] [-m min_days] [-M max_days] [-d last_day] user\n"
 msgstr ""
 
-#: src/chage.c:199
+#: src/chage.c:157
 msgid ""
-"Enter the new value, or press return for the default\n"
+"Enter the new value, or press ENTER for the default\n"
 "\n"
 msgstr ""
 
-#: src/chage.c:202
+#: src/chage.c:160
 msgid "Minimum Password Age"
 msgstr ""
 
-#: src/chage.c:207
+#: src/chage.c:166
 msgid "Maximum Password Age"
 msgstr ""
 
-#: src/chage.c:213
+#: src/chage.c:174
 msgid "Last Password Change (YYYY-MM-DD)"
 msgstr ""
 
-#: src/chage.c:222
+#: src/chage.c:183
 msgid "Password Expiration Warning"
 msgstr ""
 
-#: src/chage.c:227
+#: src/chage.c:189
 msgid "Password Inactive"
 msgstr ""
 
-#: src/chage.c:233
+#: src/chage.c:197
 msgid "Account Expiration Date (YYYY-MM-DD)"
 msgstr ""
 
 #.
 #. * 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.
+#. * 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.
 #.
-#: src/chage.c:287
+#: src/chage.c:248
 #, c-format
 msgid "Minimum:\t%ld\n"
 msgstr ""
 
-#: src/chage.c:288
+#: src/chage.c:249
 #, c-format
 msgid "Maximum:\t%ld\n"
 msgstr ""
 
-#: src/chage.c:290
+#: src/chage.c:251
 #, c-format
 msgid "Warning:\t%ld\n"
 msgstr ""
 
-#: src/chage.c:291
+#: src/chage.c:252
 #, c-format
 msgid "Inactive:\t%ld\n"
 msgstr ""
 
 #.
-#. * 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.
+#. * 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.
 #.
-#: src/chage.c:300
+#: src/chage.c:260
 msgid "Last Change:\t\t"
 msgstr ""
 
-#: src/chage.c:302 src/chage.c:316 src/chage.c:333 src/chage.c:346
+#: src/chage.c:262 src/chage.c:276 src/chage.c:293 src/chage.c:306
 msgid "Never\n"
 msgstr ""
 
 #.
-#. * The password expiration date is determined from the last
-#. * change date plus the number of days the password is valid
-#. * for.
+#. * The password expiration date is determined from the last change
+#. * date plus the number of days the password is valid for.
 #.
-#: src/chage.c:314
+#: src/chage.c:273
 msgid "Password Expires:\t"
 msgstr ""
 
 #.
-#. * 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.
+#. * 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.
 #.
-#: src/chage.c:330
+#: src/chage.c:290
 msgid "Password Inactive:\t"
 msgstr ""
 
@@ -329,577 +326,573 @@ msgstr ""
 #. * The account will expire on the given date regardless of the
 #. * password expiring or not.
 #.
-#: src/chage.c:344
+#: src/chage.c:304
 msgid "Account Expires:\t"
 msgstr ""
 
-#: src/chage.c:453 src/chpasswd.c:139 src/groupadd.c:536 src/groupdel.c:322
-#: src/groupmod.c:522 src/newusers.c:389 src/useradd.c:1721 src/userdel.c:738
-#: src/usermod.c:1687
+#: src/chage.c:468
 #, c-format
-msgid "%s: PAM authentication failed\n"
+msgid "%s: do not include \"l\" with other flags\n"
 msgstr ""
 
-#: src/chage.c:536
+#: src/chage.c:481 src/chage.c:652 src/login.c:516
 #, c-format
-msgid "%s: do not include \"l\" with other flags\n"
+msgid "%s: permission denied\n"
 msgstr ""
 
-#: src/chage.c:548 src/chage.c:660 src/login.c:532
+#: src/chage.c:512 src/chpasswd.c:139 src/groupadd.c:529 src/groupdel.c:322
+#: src/groupmod.c:520 src/newusers.c:381 src/useradd.c:1754 src/userdel.c:717
+#: src/usermod.c:1732
 #, c-format
-msgid "%s: permission denied\n"
+msgid "%s: PAM authentication failed\n"
 msgstr ""
 
-#: src/chage.c:560 src/chpasswd.c:157
+#: src/chage.c:533 src/chpasswd.c:157
 #, c-format
 msgid "%s: can't lock password file\n"
 msgstr ""
 
-#: src/chage.c:566 src/chpasswd.c:161
+#: src/chage.c:544 src/chpasswd.c:162
 #, c-format
 msgid "%s: can't open password file\n"
 msgstr ""
 
-#: src/chage.c:573
+#: src/chage.c:552
 #, c-format
 msgid "%s: unknown user: %s\n"
 msgstr ""
 
-#: src/chage.c:592
+#: src/chage.c:571
 #, c-format
-msgid "%s: can't lock shadow password file\n"
+msgid "%s: can't lock shadow password file"
 msgstr ""
 
-#: src/chage.c:599
+#: src/chage.c:579
 #, c-format
-msgid "%s: can't open shadow password file\n"
+msgid "%s: can't open shadow password file"
 msgstr ""
 
-#: src/chage.c:681
+#: src/chage.c:674
 #, c-format
 msgid "Changing the aging information for %s\n"
 msgstr ""
 
-#: src/chage.c:683
+#: src/chage.c:677
 #, c-format
 msgid "%s: error changing fields\n"
 msgstr ""
 
-#: src/chage.c:710 src/chage.c:773 src/pwunconv.c:174
+#: src/chage.c:705 src/chage.c:771 src/pwunconv.c:174
 #, c-format
 msgid "%s: can't update password file\n"
 msgstr ""
 
-#: src/chage.c:740 src/pwunconv.c:169
+#: src/chage.c:737 src/pwunconv.c:168
 #, c-format
 msgid "%s: can't update shadow password file\n"
 msgstr ""
 
-#: src/chage.c:789 src/chage.c:804 src/chfn.c:570 src/chsh.c:409
-#: src/passwd.c:825 src/passwd.c:926
+#: src/chage.c:789 src/chage.c:805 src/chfn.c:570 src/chsh.c:382
+#: src/passwd.c:747 src/passwd.c:859
 msgid "Error updating the DBM password entry.\n"
 msgstr ""
 
-#: src/chage.c:821
+#: src/chage.c:823
 #, c-format
 msgid "%s: can't rewrite shadow password file\n"
 msgstr ""
 
-#: src/chage.c:835
+#: src/chage.c:838
 #, c-format
 msgid "%s: can't rewrite password file\n"
 msgstr ""
 
-#: src/chage.c:853 src/chpasswd.c:333 src/groupadd.c:595 src/groupdel.c:409
-#: src/groupmod.c:606 src/newusers.c:625 src/useradd.c:1830 src/userdel.c:903
-#: src/usermod.c:1765
+#: src/chage.c:857 src/chpasswd.c:343 src/groupadd.c:590 src/groupdel.c:409
+#: src/groupmod.c:604 src/newusers.c:628 src/useradd.c:1869 src/userdel.c:849
+#: src/usermod.c:1811
 #, c-format
 msgid "%s: PAM chauthtok failed\n"
 msgstr ""
 
-#: src/chage.c:905
-#, c-format
-msgid "%s: no aging information present\n"
-msgstr ""
-
-#: src/chfn.c:107
+#: src/chfn.c:83
 #, c-format
 msgid ""
-"Usage: %s [ -f full_name ] [ -r room_no ] [ -w work_ph ]\n"
-"\t[ -h home_ph ] [ -o other ] [ user ]\n"
+"Usage: %s [-f full_name] [-r room_no] [-w work_ph]\n"
+"\t[-h home_ph] [-o other] [user]\n"
 msgstr ""
 
-#: src/chfn.c:111
+#: src/chfn.c:88
 #, c-format
-msgid ""
-"Usage: %s [ -f full_name ] [ -r room_no ] [ -w work_ph ] [ -h home_ph ]\n"
+msgid "Usage: %s [-f full_name] [-r room_no] [-w work_ph] [-h home_ph]\n"
 msgstr ""
 
-#: src/chfn.c:163 src/chsh.c:119
-msgid "Enter the new value, or press return for the default\n"
+#: src/chfn.c:139
+msgid "Enter the new value, or press ENTER for the default\n"
 msgstr ""
 
-#: src/chfn.c:166
+#: src/chfn.c:142
 msgid "Full Name"
 msgstr ""
 
-#: src/chfn.c:168
+#: src/chfn.c:144
 #, c-format
 msgid "\tFull Name: %s\n"
 msgstr ""
 
-#: src/chfn.c:171
+#: src/chfn.c:147
 msgid "Room Number"
 msgstr ""
 
-#: src/chfn.c:173
+#: src/chfn.c:149
 #, c-format
 msgid "\tRoom Number: %s\n"
 msgstr ""
 
-#: src/chfn.c:176
+#: src/chfn.c:152
 msgid "Work Phone"
 msgstr ""
 
-#: src/chfn.c:178
+#: src/chfn.c:154
 #, c-format
 msgid "\tWork Phone: %s\n"
 msgstr ""
 
-#: src/chfn.c:181
+#: src/chfn.c:157
 msgid "Home Phone"
 msgstr ""
 
-#: src/chfn.c:183
+#: src/chfn.c:159
 #, c-format
 msgid "\tHome Phone: %s\n"
 msgstr ""
 
-#: src/chfn.c:186
+#: src/chfn.c:162
 msgid "Other"
 msgstr ""
 
-#: src/chfn.c:298 src/chfn.c:306 src/chfn.c:314 src/chfn.c:322 src/chfn.c:330
-#: src/chfn.c:391 src/passwd.c:1226
+#: src/chfn.c:271 src/chfn.c:281 src/chfn.c:291 src/chfn.c:301 src/chfn.c:311
+#: src/chfn.c:379 src/passwd.c:1115
 #, c-format
 msgid "%s: Permission denied.\n"
 msgstr ""
 
-#: src/chfn.c:351 src/chsh.c:224 src/passwd.c:1277
+#: src/chfn.c:332 src/chsh.c:190 src/passwd.c:1165
 #, c-format
 msgid "%s: Unknown user %s\n"
 msgstr ""
 
-#: src/chfn.c:357 src/chsh.c:232 src/passwd.c:1207
+#: src/chfn.c:341 src/chsh.c:198 src/passwd.c:1096
 #, c-format
 msgid "%s: Cannot determine your user name.\n"
 msgstr ""
 
-#: src/chfn.c:373 src/chsh.c:250
+#: src/chfn.c:358 src/chsh.c:215
 #, c-format
 msgid "%s: cannot change user `%s' on NIS client.\n"
 msgstr ""
 
-#: src/chfn.c:378 src/chsh.c:257
+#: src/chfn.c:366 src/chsh.c:223
 #, c-format
 msgid "%s: `%s' is the NIS master for this client.\n"
 msgstr ""
 
-#: src/chfn.c:453
+#: src/chfn.c:441
 #, c-format
 msgid "Changing the user information for %s\n"
 msgstr ""
 
-#: src/chfn.c:462
+#: src/chfn.c:450
 #, c-format
 msgid "%s: invalid name: \"%s\"\n"
 msgstr ""
 
-#: src/chfn.c:467
+#: src/chfn.c:456
 #, c-format
 msgid "%s: invalid room number: \"%s\"\n"
 msgstr ""
 
-#: src/chfn.c:472
+#: src/chfn.c:462
 #, c-format
 msgid "%s: invalid work phone: \"%s\"\n"
 msgstr ""
 
-#: src/chfn.c:477
+#: src/chfn.c:468
 #, c-format
 msgid "%s: invalid home phone: \"%s\"\n"
 msgstr ""
 
-#: src/chfn.c:482
+#: src/chfn.c:475
 #, c-format
 msgid "%s: \"%s\" contains illegal characters\n"
 msgstr ""
 
-#: src/chfn.c:494
+#: src/chfn.c:488
 #, c-format
 msgid "%s: fields too long\n"
 msgstr ""
 
-#: src/chfn.c:509 src/chsh.c:347 src/gpasswd.c:582 src/passwd.c:1388
+#: src/chfn.c:504 src/chsh.c:316 src/gpasswd.c:570 src/passwd.c:1277
 msgid "Cannot change ID to root.\n"
 msgstr ""
 
-#: src/chfn.c:522 src/chsh.c:361 src/passwd.c:735 src/passwd.c:880
+#: src/chfn.c:519 src/chsh.c:331 src/passwd.c:656 src/passwd.c:811
 msgid "Cannot lock the password file; try again later.\n"
 msgstr ""
 
-#: src/chfn.c:528 src/chsh.c:367 src/passwd.c:740 src/passwd.c:885
+#: src/chfn.c:525 src/chsh.c:337 src/passwd.c:661 src/passwd.c:816
 msgid "Cannot open the password file.\n"
 msgstr ""
 
-#: src/chfn.c:545 src/chsh.c:382 src/passwd.c:746 src/usermod.c:1320
+#: src/chfn.c:542 src/chsh.c:352 src/passwd.c:667 src/usermod.c:1348
 #, c-format
 msgid "%s: %s not found in /etc/passwd\n"
 msgstr ""
 
-#: src/chfn.c:562 src/chsh.c:401 src/passwd.c:819 src/passwd.c:920
-#: src/passwd.c:960
+#: src/chfn.c:561 src/chsh.c:373 src/passwd.c:740 src/passwd.c:852
 msgid "Error updating the password entry.\n"
 msgstr ""
 
-#: src/chfn.c:585 src/chsh.c:424 src/passwd.c:832 src/passwd.c:933
+#: src/chfn.c:585 src/chsh.c:397 src/passwd.c:755 src/passwd.c:867
 msgid "Cannot commit password file changes.\n"
 msgstr ""
 
-#: src/chfn.c:592 src/chsh.c:431
+#: src/chfn.c:592 src/chsh.c:404
 msgid "Cannot unlock the password file.\n"
 msgstr ""
 
-#: src/chpasswd.c:69
+#: src/chpasswd.c:66
 #, c-format
 msgid "usage: %s [-e]\n"
 msgstr ""
 
-#: src/chpasswd.c:169 src/pwconv.c:104
+#: src/chpasswd.c:171 src/pwconv.c:94
 #, c-format
 msgid "%s: can't lock shadow file\n"
 msgstr ""
 
-#: src/chpasswd.c:174 src/gpasswd.c:608 src/pwconv.c:109 src/pwunconv.c:109
-#: src/pwunconv.c:114
+#: src/chpasswd.c:177 src/gpasswd.c:596 src/pwconv.c:99 src/pwunconv.c:103
+#: src/pwunconv.c:108
 #, c-format
 msgid "%s: can't open shadow file\n"
 msgstr ""
 
-#: src/chpasswd.c:196 src/newusers.c:465
+#: src/chpasswd.c:200 src/newusers.c:460
 #, c-format
 msgid "%s: line %d: line too long\n"
 msgstr ""
 
-#: src/chpasswd.c:216
+#: src/chpasswd.c:220
 #, c-format
 msgid "%s: line %d: missing new password\n"
 msgstr ""
 
-#: src/chpasswd.c:232
+#: src/chpasswd.c:237
 #, c-format
 msgid "%s: line %d: unknown user %s\n"
 msgstr ""
 
-#: src/chpasswd.c:284
+#: src/chpasswd.c:290
 #, c-format
 msgid "%s: line %d: cannot update password entry\n"
 msgstr ""
 
-#: src/chpasswd.c:300 src/newusers.c:585
+#: src/chpasswd.c:307 src/newusers.c:588
 #, c-format
 msgid "%s: error detected, changes ignored\n"
 msgstr ""
 
-#: src/chpasswd.c:311
+#: src/chpasswd.c:319
 #, c-format
 msgid "%s: error updating shadow file\n"
 msgstr ""
 
-#: src/chpasswd.c:319
+#: src/chpasswd.c:328
 #, c-format
 msgid "%s: error updating password file\n"
 msgstr ""
 
-#: src/chsh.c:105
+#: src/chsh.c:75
 #, c-format
-msgid "Usage: %s [ -s shell ] [ name ]\n"
+msgid "Usage: %s [-s shell] [name]\n"
+msgstr ""
+
+#: src/chsh.c:89
+msgid "Enter the new value, or press return for the default\n"
 msgstr ""
 
-#: src/chsh.c:120
+#: src/chsh.c:90
 msgid "Login Shell"
 msgstr ""
 
-#: src/chsh.c:273 src/chsh.c:286
+#: src/chsh.c:239 src/chsh.c:253
 #, c-format
 msgid "You may not change the shell for %s.\n"
 msgstr ""
 
-#: src/chsh.c:315
+#: src/chsh.c:282
 #, c-format
 msgid "Changing the login shell for %s\n"
 msgstr ""
 
-#: src/chsh.c:327
+#: src/chsh.c:294
 #, c-format
 msgid "%s: Invalid entry: %s\n"
 msgstr ""
 
-#: src/chsh.c:332
+#: src/chsh.c:301
 #, c-format
 msgid "%s is an invalid shell.\n"
 msgstr ""
 
-#: src/dpasswd.c:69
+#: src/dpasswd.c:52
 #, c-format
-msgid "Usage: %s [ -(a|d) ] shell\n"
+msgid "Usage: %s [-(a|d)] shell\n"
 msgstr ""
 
-#: src/dpasswd.c:134
+#: src/dpasswd.c:115
 msgid "Shell password: "
 msgstr ""
 
-#: src/dpasswd.c:140
+#: src/dpasswd.c:121
 msgid "re-enter Shell password: "
 msgstr ""
 
-#: src/dpasswd.c:147
+#: src/dpasswd.c:129
 #, c-format
 msgid "%s: Passwords do not match, try again.\n"
 msgstr ""
 
-#: src/dpasswd.c:167
+#: src/dpasswd.c:149
 #, c-format
 msgid "%s: can't create %s"
 msgstr ""
 
-#: src/dpasswd.c:172
+#: src/dpasswd.c:155
 #, c-format
 msgid "%s: can't open %s"
 msgstr ""
 
-#: src/dpasswd.c:200
+#: src/dpasswd.c:183
 #, c-format
 msgid "%s: Shell %s not found.\n"
 msgstr ""
 
-#: src/expiry.c:84
-msgid "Usage: expiry { -f | -c }\n"
+#: src/expiry.c:59
+msgid "Usage: expiry {-f|-c}\n"
 msgstr ""
 
-#: src/expiry.c:137
+#: src/expiry.c:113
 #, c-format
 msgid "%s: WARNING!  Must be set-UID root!\n"
 msgstr ""
 
-#: src/expiry.c:148
+#: src/expiry.c:124
 #, c-format
 msgid "%s: unknown user\n"
 msgstr ""
 
-#: src/faillog.c:79
+#: src/faillog.c:77
 #, c-format
 msgid "usage: %s [-a|-u user] [-m max] [-r] [-t days] [-l locksecs]\n"
 msgstr ""
 
-#: src/faillog.c:134 src/lastlog.c:103
+#: src/faillog.c:131 src/lastlog.c:96
 #, c-format
 msgid "Unknown User: %s\n"
 msgstr ""
 
-#: src/faillog.c:215
+#: src/faillog.c:212
 msgid "Username   Failures  Maximum  Latest\n"
 msgstr ""
 
-#: src/faillog.c:232
+#: src/faillog.c:229
 #, c-format
 msgid "  %s on %s"
 msgstr ""
 
-#: src/faillog.c:236
+#: src/faillog.c:233
 #, c-format
 msgid " [%lds left]"
 msgstr ""
 
-#: src/faillog.c:239
+#: src/faillog.c:237
 #, c-format
 msgid " [%lds lock]"
 msgstr ""
 
-#: src/gpasswd.c:89
+#: src/gpasswd.c:78
 #, c-format
 msgid "usage: %s [-r|-R] group\n"
 msgstr ""
 
-#: src/gpasswd.c:90
+#: src/gpasswd.c:79
 #, c-format
 msgid "       %s [-a user] group\n"
 msgstr ""
 
-#: src/gpasswd.c:91
+#: src/gpasswd.c:80
 #, c-format
 msgid "       %s [-d user] group\n"
 msgstr ""
 
-#: src/gpasswd.c:93
+#: src/gpasswd.c:83
 #, c-format
 msgid "       %s [-A user,...] [-M user,...] group\n"
 msgstr ""
 
-#: src/gpasswd.c:96
+#: src/gpasswd.c:85
 #, c-format
 msgid "       %s [-M user,...] group\n"
 msgstr ""
 
-#: src/gpasswd.c:160 src/gpasswd.c:245
+#: src/gpasswd.c:146 src/gpasswd.c:230
 #, c-format
 msgid "%s: unknown user %s\n"
 msgstr ""
 
-#: src/gpasswd.c:172
+#: src/gpasswd.c:157
 msgid "Permission denied.\n"
 msgstr ""
 
-#: src/gpasswd.c:257
+#: src/gpasswd.c:243
 #, c-format
 msgid "%s: shadow group passwords required for -A\n"
 msgstr ""
 
-#: src/gpasswd.c:308
+#: src/gpasswd.c:294
 msgid "Who are you?\n"
 msgstr ""
 
-#: src/gpasswd.c:328 src/newgrp.c:251
+#: src/gpasswd.c:313 src/newgrp.c:297
 #, c-format
 msgid "unknown group: %s\n"
 msgstr ""
 
-#: src/gpasswd.c:436
+#: src/gpasswd.c:422
 #, c-format
 msgid "Adding user %s to group %s\n"
 msgstr ""
 
-#: src/gpasswd.c:453
+#: src/gpasswd.c:440
 #, c-format
 msgid "Removing user %s from group %s\n"
 msgstr ""
 
-#: src/gpasswd.c:466
+#: src/gpasswd.c:454
 #, c-format
 msgid "%s: unknown member %s\n"
 msgstr ""
 
-#: src/gpasswd.c:513
+#: src/gpasswd.c:501
 #, c-format
 msgid "%s: Not a tty\n"
 msgstr ""
 
 #.
-#. * 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.
+#. * 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.
 #.
-#: src/gpasswd.c:535
+#: src/gpasswd.c:522
 #, c-format
 msgid "Changing the password for group %s\n"
 msgstr ""
 
-#: src/gpasswd.c:538
+#: src/gpasswd.c:525
 msgid "New Password: "
 msgstr ""
 
-#: src/gpasswd.c:543 src/passwd.c:422
+#: src/gpasswd.c:530 src/passwd.c:365
 msgid "Re-enter new password: "
 msgstr ""
 
-#: src/gpasswd.c:555
+#: src/gpasswd.c:542
 msgid "They don't match; try again"
 msgstr ""
 
-#: src/gpasswd.c:559
+#: src/gpasswd.c:546
 #, c-format
 msgid "%s: Try again later\n"
 msgstr ""
 
-#: src/gpasswd.c:590
+#: src/gpasswd.c:578
 #, c-format
 msgid "%s: can't get lock\n"
 msgstr ""
 
-#: src/gpasswd.c:596
+#: src/gpasswd.c:584
 #, c-format
 msgid "%s: can't get shadow lock\n"
 msgstr ""
 
-#: src/gpasswd.c:602
+#: src/gpasswd.c:590
 #, c-format
 msgid "%s: can't open file\n"
 msgstr ""
 
-#: src/gpasswd.c:614
+#: src/gpasswd.c:602
 #, c-format
 msgid "%s: can't update entry\n"
 msgstr ""
 
-#: src/gpasswd.c:620
+#: src/gpasswd.c:608
 #, c-format
 msgid "%s: can't update shadow entry\n"
 msgstr ""
 
-#: src/gpasswd.c:626
+#: src/gpasswd.c:615
 #, c-format
 msgid "%s: can't re-write file\n"
 msgstr ""
 
-#: src/gpasswd.c:632
+#: src/gpasswd.c:621
 #, c-format
 msgid "%s: can't re-write shadow file\n"
 msgstr ""
 
-#: src/gpasswd.c:640
+#: src/gpasswd.c:630
 #, c-format
 msgid "%s: can't unlock file\n"
 msgstr ""
 
-#: src/gpasswd.c:645
+#: src/gpasswd.c:635
 #, c-format
 msgid "%s: can't update DBM files\n"
 msgstr ""
 
-#: src/gpasswd.c:652
+#: src/gpasswd.c:642
 #, c-format
 msgid "%s: can't update DBM shadow files\n"
 msgstr ""
 
-#: src/groupadd.c:111
+#: src/groupadd.c:101
 msgid "usage: groupadd [-g gid [-o]] group\n"
 msgstr ""
 
-#: src/groupadd.c:179 src/groupadd.c:202 src/groupmod.c:189 src/groupmod.c:236
-#: src/useradd.c:949 src/usermod.c:546 src/usermod.c:682
+#: src/groupadd.c:167 src/groupadd.c:192 src/groupmod.c:179 src/groupmod.c:228
+#: src/useradd.c:970 src/usermod.c:552 src/usermod.c:695
 #, c-format
 msgid "%s: error adding new group entry\n"
 msgstr ""
 
-#: src/groupadd.c:189 src/groupadd.c:212 src/groupmod.c:205 src/useradd.c:960
-#: src/usermod.c:558 src/usermod.c:694
+#: src/groupadd.c:178 src/groupadd.c:203 src/groupmod.c:197 src/useradd.c:981
+#: src/usermod.c:564 src/usermod.c:708
 #, c-format
 msgid "%s: cannot add new dbm group entry\n"
 msgstr ""
 
-#: src/groupadd.c:264 src/useradd.c:1014
+#: src/groupadd.c:255 src/useradd.c:1034
 #, c-format
 msgid "%s: name %s is not unique\n"
 msgstr ""
 
-#: src/groupadd.c:279
+#: src/groupadd.c:270
 #, c-format
-msgid "%s: gid %ld is not unique\n"
+msgid "%s: gid %u is not unique\n"
 msgstr ""
 
-#: src/groupadd.c:303
+#: src/groupadd.c:294
 #, c-format
 msgid "%s: can't get unique gid\n"
 msgstr ""
@@ -907,54 +900,54 @@ msgstr ""
 #.
 #. * All invalid group names land here.
 #.
-#: src/groupadd.c:327 src/groupmod.c:347
+#: src/groupadd.c:317 src/groupmod.c:341
 #, c-format
 msgid "%s: %s is a not a valid group name\n"
 msgstr ""
 
-#: src/groupadd.c:356 src/groupmod.c:373
+#: src/groupadd.c:346 src/groupmod.c:366
 #, c-format
 msgid "%s: invalid group %s\n"
 msgstr ""
 
-#: src/groupadd.c:373 src/useradd.c:1290
+#: src/groupadd.c:363 src/useradd.c:1313
 #, c-format
 msgid "%s: -O requires NAME=VALUE\n"
 msgstr ""
 
-#: src/groupadd.c:418 src/groupdel.c:173 src/groupmod.c:409 src/useradd.c:1399
-#: src/userdel.c:309 src/usermod.c:570
+#: src/groupadd.c:407 src/groupdel.c:173 src/groupmod.c:401 src/useradd.c:1428
+#: src/userdel.c:312 src/usermod.c:576
 #, c-format
 msgid "%s: cannot rewrite group file\n"
 msgstr ""
 
-#: src/groupadd.c:424 src/groupdel.c:179 src/groupmod.c:415 src/useradd.c:1407
-#: src/userdel.c:315 src/usermod.c:707
+#: src/groupadd.c:415 src/groupdel.c:179 src/groupmod.c:409 src/useradd.c:1437
+#: src/userdel.c:319 src/usermod.c:722
 #, c-format
 msgid "%s: cannot rewrite shadow group file\n"
 msgstr ""
 
-#: src/groupadd.c:443 src/groupdel.c:198 src/groupmod.c:434 src/userdel.c:395
+#: src/groupadd.c:433 src/groupdel.c:198 src/groupmod.c:427 src/userdel.c:403
 #, c-format
 msgid "%s: unable to lock group file\n"
 msgstr ""
 
-#: src/groupadd.c:447 src/groupdel.c:202 src/groupmod.c:438
+#: src/groupadd.c:438 src/groupdel.c:202 src/groupmod.c:432
 #, c-format
 msgid "%s: unable to open group file\n"
 msgstr ""
 
-#: src/groupadd.c:452 src/groupdel.c:207 src/groupmod.c:443 src/userdel.c:404
+#: src/groupadd.c:445 src/groupdel.c:207 src/groupmod.c:439 src/userdel.c:414
 #, c-format
 msgid "%s: unable to lock shadow group file\n"
 msgstr ""
 
-#: src/groupadd.c:457 src/groupdel.c:212 src/groupmod.c:448
+#: src/groupadd.c:451 src/groupdel.c:212 src/groupmod.c:445
 #, c-format
 msgid "%s: unable to open shadow group file\n"
 msgstr ""
 
-#: src/groupadd.c:568
+#: src/groupadd.c:562
 #, c-format
 msgid "%s: group %s exists\n"
 msgstr ""
@@ -963,12 +956,12 @@ msgstr ""
 msgid "usage: groupdel group\n"
 msgstr ""
 
-#: src/groupdel.c:110 src/groupmod.c:193 src/groupmod.c:240
+#: src/groupdel.c:110 src/groupmod.c:184 src/groupmod.c:233
 #, c-format
 msgid "%s: error removing group entry\n"
 msgstr ""
 
-#: src/groupdel.c:122 src/groupmod.c:212
+#: src/groupdel.c:122 src/groupmod.c:204
 #, c-format
 msgid "%s: error removing group dbm entry\n"
 msgstr ""
@@ -978,7 +971,7 @@ msgstr ""
 msgid "%s: error removing shadow group entry\n"
 msgstr ""
 
-#: src/groupdel.c:150 src/groupmod.c:258
+#: src/groupdel.c:150 src/groupmod.c:254
 #, c-format
 msgid "%s: error removing shadow group dbm entry\n"
 msgstr ""
@@ -991,127 +984,127 @@ msgstr ""
 msgid "%s: cannot remove user's primary group.\n"
 msgstr ""
 
-#: src/groupdel.c:355 src/groupmod.c:551
+#: src/groupdel.c:355 src/groupmod.c:550
 #, c-format
 msgid "%s: group %s does not exist\n"
 msgstr ""
 
-#: src/groupdel.c:369 src/groupmod.c:567
+#: src/groupdel.c:369 src/groupmod.c:566
 #, c-format
 msgid "%s: group %s is a NIS group\n"
 msgstr ""
 
-#: src/groupdel.c:375 src/groupmod.c:573 src/userdel.c:811 src/usermod.c:1023
+#: src/groupdel.c:375 src/groupmod.c:571 src/userdel.c:776 src/usermod.c:1045
 #, c-format
 msgid "%s: %s is the NIS master\n"
 msgstr ""
 
-#: src/groupmems.c:92
+#: src/groupmems.c:95
 msgid "Member already exists\n"
 msgstr ""
 
-#: src/groupmems.c:121
+#: src/groupmems.c:125
 msgid "Member to remove could not be found\n"
 msgstr ""
 
-#: src/groupmems.c:151
+#: src/groupmems.c:158
 msgid "usage: groupmems -a username | -d username | -D | -l [-g groupname]\n"
 msgstr ""
 
-#: src/groupmems.c:191
+#: src/groupmems.c:201
 msgid "Only root can add members to different groups\n"
 msgstr ""
 
-#: src/groupmems.c:196
+#: src/groupmems.c:206
 msgid "Group access is required\n"
 msgstr ""
 
-#: src/groupmems.c:199
+#: src/groupmems.c:210
 msgid "Not primary owner of current group\n"
 msgstr ""
 
-#: src/groupmems.c:204
+#: src/groupmems.c:215
 msgid "Unable to lock group file\n"
 msgstr ""
 
-#: src/groupmems.c:209
+#: src/groupmems.c:220
 msgid "Unable to open group file\n"
 msgstr ""
 
-#: src/groupmems.c:229
+#: src/groupmems.c:240
 msgid "Cannot close group file\n"
 msgstr ""
 
-#: src/groupmod.c:111
+#: src/groupmod.c:103
 msgid "usage: groupmod [-g gid [-o]] [-n name] group\n"
 msgstr ""
 
-#: src/groupmod.c:171
+#: src/groupmod.c:161
 #, c-format
 msgid "%s: %s not found in /etc/group\n"
 msgstr ""
 
-#: src/groupmod.c:252
+#: src/groupmod.c:247
 #, c-format
 msgid "%s: cannot add new dbm shadow group entry\n"
 msgstr ""
 
-#: src/groupmod.c:305
+#: src/groupmod.c:300
 #, c-format
-msgid "%s: %ld is not a unique gid\n"
+msgid "%s: %u is not a unique gid\n"
 msgstr ""
 
-#: src/groupmod.c:336
+#: src/groupmod.c:330
 #, c-format
 msgid "%s: %s is not a unique name\n"
 msgstr ""
 
-#: src/groups.c:62
+#: src/groups.c:59
 #, c-format
 msgid "unknown user %s\n"
 msgstr ""
 
-#: src/grpck.c:98
+#: src/grpck.c:87
 #, c-format
-msgid "Usage: %s [ -sr ] [ group [ gshadow ] ]\n"
+msgid "Usage: %s [-r] [-s] [group [gshadow]]\n"
 msgstr ""
 
-#: src/grpck.c:100
+#: src/grpck.c:90
 #, c-format
-msgid "Usage: %s [ -sr ] [ group ]\n"
+msgid "Usage: %s [-r] [-s] [group]\n"
 msgstr ""
 
-#: src/grpck.c:119 src/pwck.c:119
+#: src/grpck.c:108 src/pwck.c:108
 msgid "No"
 msgstr ""
 
-#: src/grpck.c:204 src/pwck.c:186
+#: src/grpck.c:192 src/pwck.c:175
 #, c-format
 msgid "%s: -s and -r are incompatibile\n"
 msgstr ""
 
-#: src/grpck.c:244 src/grpck.c:252 src/pwck.c:226 src/pwck.c:235
+#: src/grpck.c:232 src/grpck.c:242 src/pwck.c:215 src/pwck.c:225
 #, c-format
 msgid "%s: cannot lock file %s\n"
 msgstr ""
 
-#: src/grpck.c:267 src/grpck.c:275 src/mkpasswd.c:216 src/pwck.c:251
-#: src/pwck.c:260
+#: src/grpck.c:259 src/grpck.c:268 src/mkpasswd.c:202 src/pwck.c:242
+#: src/pwck.c:251
 #, c-format
 msgid "%s: cannot open file %s\n"
 msgstr ""
 
 #.
-#. * Tell the user this entire line is bogus and
-#. * ask them to delete it.
+#. * Tell the user this entire line is bogus and ask
+#. * them to delete it.
 #.
-#: src/grpck.c:317
+#: src/grpck.c:311
 msgid "invalid group file entry\n"
 msgstr ""
 
-#: src/grpck.c:318 src/grpck.c:381 src/grpck.c:473 src/grpck.c:536
-#: src/grpck.c:553 src/pwck.c:305 src/pwck.c:367 src/pwck.c:474 src/pwck.c:536
-#: src/pwck.c:560
+#: src/grpck.c:312 src/grpck.c:375 src/grpck.c:458 src/grpck.c:521
+#: src/grpck.c:538 src/pwck.c:296 src/pwck.c:358 src/pwck.c:457 src/pwck.c:519
+#: src/pwck.c:543
 #, c-format
 msgid "delete line `%s'? "
 msgstr ""
@@ -1120,35 +1113,30 @@ msgstr ""
 #. * Tell the user this entry is a duplicate of
 #. * another and ask them to delete it.
 #.
-#: src/grpck.c:380
+#: src/grpck.c:374
 msgid "duplicate group entry\n"
 msgstr ""
 
-#: src/grpck.c:397
+#: src/grpck.c:391
 #, c-format
 msgid "invalid group name `%s'\n"
 msgstr ""
 
-#: src/grpck.c:407
-#, c-format
-msgid "group %s: bad GID (%d)\n"
-msgstr ""
-
-#: src/grpck.c:433
+#: src/grpck.c:418
 #, c-format
 msgid "group %s: no user %s\n"
 msgstr ""
 
-#: src/grpck.c:435 src/grpck.c:604
+#: src/grpck.c:420 src/grpck.c:590
 #, c-format
 msgid "delete member `%s'? "
 msgstr ""
 
 #.
-#. * Tell the user this entire line is bogus and
-#. * ask them to delete it.
+#. * Tell the user this entire line is bogus and ask
+#. * them to delete it.
 #.
-#: src/grpck.c:472
+#: src/grpck.c:457
 msgid "invalid shadow group file entry\n"
 msgstr ""
 
@@ -1156,572 +1144,564 @@ msgstr ""
 #. * Tell the user this entry is a duplicate of
 #. * another and ask them to delete it.
 #.
-#: src/grpck.c:535
+#: src/grpck.c:520
 msgid "duplicate shadow group entry\n"
 msgstr ""
 
-#: src/grpck.c:552
+#: src/grpck.c:537
 msgid "no matching group file entry\n"
 msgstr ""
 
-#: src/grpck.c:572
+#: src/grpck.c:558
 #, c-format
 msgid "shadow group %s: no administrative user %s\n"
 msgstr ""
 
-#: src/grpck.c:574
+#: src/grpck.c:560
 #, c-format
 msgid "delete administrative member `%s'? "
 msgstr ""
 
-#: src/grpck.c:602
+#: src/grpck.c:588
 #, c-format
 msgid "shadow group %s: no user %s\n"
 msgstr ""
 
-#: src/grpck.c:630 src/grpck.c:636 src/pwck.c:592 src/pwck.c:600
+#: src/grpck.c:616 src/grpck.c:622 src/pwck.c:577 src/pwck.c:585
 #, c-format
 msgid "%s: cannot update file %s\n"
 msgstr ""
 
-#: src/grpck.c:660 src/pwck.c:626
+#: src/grpck.c:647 src/pwck.c:612
 #, c-format
 msgid "%s: the files have been updated; run mkpasswd\n"
 msgstr ""
 
-#: src/grpck.c:661 src/grpck.c:665 src/pwck.c:627 src/pwck.c:631
+#: src/grpck.c:648 src/grpck.c:652 src/pwck.c:613 src/pwck.c:617
 #, c-format
 msgid "%s: no changes\n"
 msgstr ""
 
-#: src/grpck.c:664 src/pwck.c:630
+#: src/grpck.c:651 src/pwck.c:616
 #, c-format
 msgid "%s: the files have been updated\n"
 msgstr ""
 
-#: src/grpconv.c:62 src/grpunconv.c:63
+#: src/grpconv.c:60 src/grpunconv.c:56
 #, c-format
 msgid "%s: can't lock group file\n"
 msgstr ""
 
-#: src/grpconv.c:67 src/grpunconv.c:68
+#: src/grpconv.c:65 src/grpunconv.c:61
 #, c-format
 msgid "%s: can't open group file\n"
 msgstr ""
 
-#: src/grpconv.c:72 src/grpunconv.c:73
+#: src/grpconv.c:70 src/grpunconv.c:66
 #, c-format
 msgid "%s: can't lock shadow group file\n"
 msgstr ""
 
-#: src/grpconv.c:77 src/grpunconv.c:78
+#: src/grpconv.c:76 src/grpunconv.c:72
 #, c-format
 msgid "%s: can't open shadow group file\n"
 msgstr ""
 
-#.
-#. * This shouldn't happen (the entry exists) but...
-#.
-#: src/grpconv.c:93
+#: src/grpconv.c:94
 #, c-format
 msgid "%s: can't remove shadow group %s\n"
 msgstr ""
 
-#: src/grpconv.c:134 src/pwconv.c:160
+#: src/grpconv.c:138 src/pwconv.c:153
 #, c-format
 msgid "%s: can't update shadow entry for %s\n"
 msgstr ""
 
-#: src/grpconv.c:143 src/grpunconv.c:94
+#: src/grpconv.c:148 src/grpunconv.c:91
 #, c-format
 msgid "%s: can't update entry for group %s\n"
 msgstr ""
 
-#: src/grpconv.c:150 src/grpunconv.c:102
+#: src/grpconv.c:155 src/grpunconv.c:99
 #, c-format
 msgid "%s: can't update shadow group file\n"
 msgstr ""
 
-#: src/grpconv.c:154 src/grpunconv.c:107
+#: src/grpconv.c:160 src/grpunconv.c:105
 #, c-format
 msgid "%s: can't update group file\n"
 msgstr ""
 
-#: src/grpconv.c:169 src/grpunconv.c:128
+#: src/grpconv.c:175 src/grpunconv.c:127
 #, c-format
 msgid "%s: not configured for shadow group support.\n"
 msgstr ""
 
-#: src/grpunconv.c:112
+#: src/grpunconv.c:110
 #, c-format
 msgid "%s: can't delete shadow group file\n"
 msgstr ""
 
-#: src/id.c:56
-msgid "usage: id [ -a ]\n"
+#: src/id.c:53
+msgid "usage: id [-a]\n"
 msgstr ""
 
-#: src/id.c:58
+#: src/id.c:55
 msgid "usage: id\n"
 msgstr ""
 
-#: src/id.c:127
+#: src/id.c:123
 #, c-format
-msgid "uid=%d(%s)"
+msgid "uid=%u(%s)"
 msgstr ""
 
-#: src/id.c:129
+#: src/id.c:125
 #, c-format
-msgid "uid=%d"
+msgid "uid=%u"
 msgstr ""
 
-#: src/id.c:133
+#: src/id.c:129
 #, c-format
-msgid " gid=%d(%s)"
+msgid " gid=%u(%s)"
 msgstr ""
 
-#: src/id.c:135
+#: src/id.c:131
 #, c-format
-msgid " gid=%d"
+msgid " gid=%u"
 msgstr ""
 
-#: src/id.c:145
+#: src/id.c:141
 #, c-format
-msgid " euid=%d(%s)"
+msgid " euid=%u(%s)"
 msgstr ""
 
-#: src/id.c:147
+#: src/id.c:143
 #, c-format
-msgid " euid=%d"
+msgid " euid=%u"
 msgstr ""
 
-#: src/id.c:152
+#: src/id.c:148
 #, c-format
-msgid " egid=%d(%s)"
+msgid " egid=%u(%s)"
 msgstr ""
 
-#: src/id.c:154
+#: src/id.c:150
 #, c-format
-msgid " egid=%d"
+msgid " egid=%u"
 msgstr ""
 
 #.
-#. * Start off the group message.  It will be of the format
+#. * Start off the group message. It will be of the format
 #. *
-#. *   groups=###(aaa),###(aaa),###(aaa)
+#. *      groups=###(aaa),###(aaa),###(aaa)
 #. *
 #. * where "###" is a numerical value and "aaa" is the
 #. * corresponding name for each respective numerical value.
 #.
-#: src/id.c:175
+#: src/id.c:169
 msgid " groups="
 msgstr ""
 
-#: src/lastlog.c:116 src/lastlog.c:120
+#: src/lastlog.c:110 src/lastlog.c:116
 #, c-format
 msgid "Usage: %s [<-u|--login> login-name] [<-t|--time> days] [<-h|--help>]\n"
 msgstr ""
 
-#: src/lastlog.c:184
+#: src/lastlog.c:181
 msgid "Username         Port     From             Latest\n"
 msgstr ""
 
-#: src/lastlog.c:186
+#: src/lastlog.c:183
 msgid "Username                Port     Latest\n"
 msgstr ""
 
-#: src/lastlog.c:200
+#: src/lastlog.c:197
 msgid "**Never logged in**"
 msgstr ""
 
-#: src/login.c:201
+#: src/login.c:183
 #, c-format
 msgid "usage: %s [-p] [name]\n"
 msgstr ""
 
-#: src/login.c:204
+#: src/login.c:186
 #, c-format
 msgid "       %s [-p] [-h host] [-f name]\n"
 msgstr ""
 
-#: src/login.c:206
+#: src/login.c:188
 #, c-format
 msgid "       %s [-p] -r host\n"
 msgstr ""
 
-#: src/login.c:289
+#: src/login.c:272
 msgid "Invalid login time\n"
 msgstr ""
 
-#: src/login.c:344
+#: src/login.c:327
 msgid ""
 "\n"
 "System closed for routine maintenance\n"
 msgstr ""
 
-#: src/login.c:354
+#: src/login.c:338
 msgid ""
 "\n"
 "[Disconnect bypassed -- root login allowed.]\n"
 msgstr ""
 
-#: src/login.c:393
+#: src/login.c:375
 #, c-format
 msgid ""
 "\n"
 "Login timed out after %d seconds.\n"
 msgstr ""
 
-#: src/login.c:695
+#: src/login.c:687
 #, c-format
 msgid " on `%.100s' from `%.200s'"
 msgstr ""
 
-#: src/login.c:697
+#: src/login.c:691
 #, c-format
 msgid " on `%.100s'"
 msgstr ""
 
-#: src/login.c:837
+#: src/login.c:850
 #, c-format
 msgid ""
 "\n"
 "%s login: "
 msgstr ""
 
-#: src/login.c:839
+#: src/login.c:853
 msgid "login: "
 msgstr ""
 
-#: src/login.c:1029 src/sulogin.c:231
+#: src/login.c:1069 src/sulogin.c:233
 msgid "Login incorrect"
 msgstr ""
 
-#: src/login.c:1217
+#: src/login.c:1263
 msgid "Warning: login re-enabled after temporary lockout.\n"
 msgstr ""
 
-#: src/login.c:1227
+#: src/login.c:1276
 #, c-format
 msgid "Last login: %s on %s"
 msgstr ""
 
-#: src/login.c:1230
+#: src/login.c:1279
 #, c-format
 msgid "Last login: %.19s on %s"
 msgstr ""
 
-#: src/login.c:1235
+#: src/login.c:1285
 #, c-format
 msgid " from %.*s"
 msgstr ""
 
-#: src/login.c:1307
+#: src/login.c:1362
 msgid "Starting rad_login\n"
 msgstr ""
 
-#: src/mkpasswd.c:49
+#: src/mkpasswd.c:47
 #, c-format
 msgid "%s: no DBM database on system - no action performed\n"
 msgstr ""
 
-#: src/mkpasswd.c:74 src/mkpasswd.c:382
-#, c-format
-msgid "Usage: %s [ -vf ] [ -p|g|sp|sg ] file\n"
-msgstr ""
-
-#: src/mkpasswd.c:76 src/mkpasswd.c:384
-#, c-format
-msgid "Usage: %s [ -vf ] [ -p|g|sp ] file\n"
-msgstr ""
-
-#: src/mkpasswd.c:79 src/mkpasswd.c:387
-#, c-format
-msgid "Usage: %s [ -vf ] [ -p|g ] file\n"
-msgstr ""
-
-#: src/mkpasswd.c:245 src/mkpasswd.c:249
+#: src/mkpasswd.c:232 src/mkpasswd.c:237
 #, c-format
 msgid "%s: cannot overwrite file %s\n"
 msgstr ""
 
-#: src/mkpasswd.c:263
+#: src/mkpasswd.c:252
 #, c-format
 msgid "%s: cannot open DBM files for %s\n"
 msgstr ""
 
-#: src/mkpasswd.c:296
+#: src/mkpasswd.c:287
 #, c-format
 msgid "%s: the beginning with "
 msgstr ""
 
-#: src/mkpasswd.c:296
+#: src/mkpasswd.c:288
 msgid " is too long\n"
 msgstr ""
 
-#: src/mkpasswd.c:321
+#: src/mkpasswd.c:315
 #, c-format
 msgid "%s: error parsing line \"%s\"\n"
 msgstr ""
 
-#: src/mkpasswd.c:326 src/mkpasswd.c:328 src/mkpasswd.c:330 src/mkpasswd.c:332
+#: src/mkpasswd.c:323 src/mkpasswd.c:328 src/mkpasswd.c:333 src/mkpasswd.c:338
 msgid "adding record for name "
 msgstr ""
 
-#: src/mkpasswd.c:326 src/mkpasswd.c:328 src/mkpasswd.c:330 src/mkpasswd.c:332
-#: src/mkpasswd.c:336 src/mkpasswd.c:341 src/mkpasswd.c:345 src/mkpasswd.c:349
+#: src/mkpasswd.c:324 src/mkpasswd.c:329 src/mkpasswd.c:334 src/mkpasswd.c:339
+#: src/mkpasswd.c:345 src/mkpasswd.c:351 src/mkpasswd.c:356 src/mkpasswd.c:361
 msgid "\n"
 msgstr ""
 
-#: src/mkpasswd.c:336 src/mkpasswd.c:341 src/mkpasswd.c:345 src/mkpasswd.c:349
+#: src/mkpasswd.c:344 src/mkpasswd.c:350 src/mkpasswd.c:355 src/mkpasswd.c:360
 #, c-format
 msgid "%s: error adding record for "
 msgstr ""
 
-#: src/mkpasswd.c:367
+#: src/mkpasswd.c:378
 #, c-format
 msgid "added %d entries, longest was %d\n"
 msgstr ""
 
-#: src/newgrp.c:66
-msgid "usage: newgrp [ - ] [ group ]\n"
+#: src/mkpasswd.c:392
+#, c-format
+msgid "Usage: %s [-vf] [-p|g|sp|sg] file\n"
 msgstr ""
 
-#: src/newgrp.c:68
-msgid "usage: sg group [[-c] command ]\n"
+#: src/mkpasswd.c:395
+#, c-format
+msgid "Usage: %s [-vf] [-p|g|sp] file\n"
 msgstr ""
 
-#: src/newgrp.c:125
+#: src/mkpasswd.c:398
 #, c-format
-msgid "unknown uid: %d\n"
+msgid "Usage: %s [-vf] [-p|g] file\n"
+msgstr ""
+
+#: src/newgrp.c:61
+msgid "usage: newgrp [-] [group]\n"
+msgstr ""
+
+#: src/newgrp.c:63
+msgid "usage: sg group [[-c] command]\n"
 msgstr ""
 
-#: src/newgrp.c:201
+#: src/newgrp.c:136
 #, c-format
-msgid "unknown gid: %ld\n"
+msgid "unknown uid: %u\n"
 msgstr ""
 
-#: src/newgrp.c:245
+#: src/newgrp.c:219
 #, c-format
-msgid "unknown gid: %d\n"
+msgid "unknown gid: %lu\n"
 msgstr ""
 
-#: src/newgrp.c:323 src/newgrp.c:332
+#: src/newgrp.c:365 src/newgrp.c:374
 msgid "Sorry.\n"
 msgstr ""
 
-#: src/newgrp.c:364
+#: src/newgrp.c:472
 msgid "too many groups\n"
 msgstr ""
 
-#: src/newusers.c:82
+#: src/newusers.c:78
 #, c-format
-msgid "Usage: %s [ input ]\n"
+msgid "Usage: %s [input]\n"
 msgstr ""
 
-#: src/newusers.c:414
+#: src/newusers.c:407
 #, c-format
 msgid "%s: can't lock /etc/passwd.\n"
 msgstr ""
 
-#: src/newusers.c:425
+#: src/newusers.c:419
 #, c-format
 msgid "%s: can't lock files, try again later\n"
 msgstr ""
 
-#: src/newusers.c:440
+#: src/newusers.c:435
 #, c-format
 msgid "%s: can't open files\n"
 msgstr ""
 
-#: src/newusers.c:485
+#: src/newusers.c:480
 #, c-format
 msgid "%s: line %d: invalid line\n"
 msgstr ""
 
-#: src/newusers.c:503
+#: src/newusers.c:499
 #, c-format
 msgid "%s: line %d: can't create GID\n"
 msgstr ""
 
-#: src/newusers.c:519
+#: src/newusers.c:515
 #, c-format
 msgid "%s: line %d: can't create UID\n"
 msgstr ""
 
-#: src/newusers.c:531
+#: src/newusers.c:528
 #, c-format
 msgid "%s: line %d: cannot find user %s\n"
 msgstr ""
 
-#: src/newusers.c:539
+#: src/newusers.c:537
 #, c-format
 msgid "%s: line %d: can't update password\n"
 msgstr ""
 
-#: src/newusers.c:556
+#: src/newusers.c:555
 #, c-format
 msgid "%s: line %d: mkdir failed\n"
 msgstr ""
 
-#: src/newusers.c:560
+#: src/newusers.c:561
 #, c-format
 msgid "%s: line %d: chown failed\n"
 msgstr ""
 
-#: src/newusers.c:569
+#: src/newusers.c:571
 #, c-format
 msgid "%s: line %d: can't update entry\n"
 msgstr ""
 
-#: src/newusers.c:600
+#: src/newusers.c:603
 #, c-format
 msgid "%s: error updating files\n"
 msgstr ""
 
-#: src/passwd.c:239
+#: src/passwd.c:174
 #, c-format
-msgid "usage: %s [ -f | -s ] [ name ]\n"
+msgid "usage: %s [-f|-s] [name]\n"
 msgstr ""
 
-#: src/passwd.c:242
+#: src/passwd.c:178
 #, c-format
-msgid "       %s [ -x max ] [ -n min ] [ -w warn ] [ -i inact ] name\n"
+msgid "       %s [-x max] [-n min] [-w warn] [-i inact] name\n"
 msgstr ""
 
-#: src/passwd.c:245
+#: src/passwd.c:180
 #, c-format
-msgid "       %s { -l | -u | -d | -S | -e } name\n"
+msgid "       %s {-l|-u|-d|-S|-e} name\n"
 msgstr ""
 
-#: src/passwd.c:347
+#: src/passwd.c:283
 #, c-format
 msgid "User %s has a TCFS key, his old password is required.\n"
 msgstr ""
 
-#: src/passwd.c:348
+#: src/passwd.c:286
 msgid "You can use -t option to force the change.\n"
 msgstr ""
 
-#: src/passwd.c:354
+#: src/passwd.c:292
 msgid "Old password: "
 msgstr ""
 
-#: src/passwd.c:361
+#: src/passwd.c:301
 #, c-format
 msgid "Incorrect password for `%s'\n"
 msgstr ""
 
-#: src/passwd.c:374
+#: src/passwd.c:314
 #, c-format
 msgid "Warning: user %s has a TCFS key.\n"
 msgstr ""
 
-#: src/passwd.c:392
+#: src/passwd.c:333
 #, 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 ""
 
-#: src/passwd.c:399
+#: src/passwd.c:339
 msgid "New password: "
 msgstr ""
 
-#: src/passwd.c:409
+#: src/passwd.c:350
 msgid "Try again.\n"
 msgstr ""
 
-#: src/passwd.c:418
+#: src/passwd.c:361
 msgid ""
 "\n"
 "Warning: weak password (enter it again to use it anyway).\n"
 msgstr ""
 
-#: src/passwd.c:427
+#: src/passwd.c:371
 msgid "They don't match; try again.\n"
 msgstr ""
 
-#: src/passwd.c:512 src/passwd.c:528
+#: src/passwd.c:451 src/passwd.c:469
 #, c-format
 msgid "The password for %s cannot be changed.\n"
 msgstr ""
 
-#: src/passwd.c:556
+#: src/passwd.c:494
 #, c-format
 msgid "Sorry, the password for %s cannot be changed yet.\n"
 msgstr ""
 
-#: src/passwd.c:693
+#: src/passwd.c:614
 #, c-format
 msgid "%s: out of memory\n"
 msgstr ""
 
-#: src/passwd.c:845
+#: src/passwd.c:769
 msgid "Cannot lock the TCFS key database; try again later\n"
 msgstr ""
 
-#: src/passwd.c:851
+#: src/passwd.c:777
 msgid "Cannot open the TCFS key database.\n"
 msgstr ""
 
-#: src/passwd.c:857
+#: src/passwd.c:785
 msgid "Error updating the TCFS key database.\n"
 msgstr ""
 
-#: src/passwd.c:862
+#: src/passwd.c:792
 msgid "Cannot commit TCFS changes.\n"
 msgstr ""
 
-#: src/passwd.c:1069
+#: src/passwd.c:975
 #, c-format
 msgid "%s: Cannot execute %s"
 msgstr ""
 
-#: src/passwd.c:1176
+#: src/passwd.c:1077
 #, c-format
 msgid "%s: repository %s not supported\n"
 msgstr ""
 
-#: src/passwd.c:1263
+#: src/passwd.c:1152
 #, c-format
 msgid "%s: Permission denied\n"
 msgstr ""
 
-#: src/passwd.c:1287
+#: src/passwd.c:1176
 #, c-format
 msgid "You may not change the password for %s.\n"
 msgstr ""
 
-#: src/passwd.c:1352
+#: src/passwd.c:1242
 #, c-format
 msgid "Changing password for %s\n"
 msgstr ""
 
-#: src/passwd.c:1356
+#: src/passwd.c:1246
 #, c-format
 msgid "The password for %s is unchanged.\n"
 msgstr ""
 
-#: src/passwd.c:1412
+#: src/passwd.c:1297
 msgid "Password changed.\n"
 msgstr ""
 
-#: src/pwck.c:98
+#: src/pwck.c:87
 #, c-format
-msgid "Usage: %s [ -sqr ] [ passwd [ shadow ] ]\n"
+msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
 msgstr ""
 
-#: src/pwck.c:100
+#: src/pwck.c:90
 #, c-format
-msgid "Usage: %s [ -sqr ] [ passwd ]\n"
+msgid "Usage: %s [-q] [-r] [-s] [passwd]\n"
 msgstr ""
 
 #.
-#. * Tell the user this entire line is bogus and
-#. * ask them to delete it.
+#. * Tell the user this entire line is bogus and ask
+#. * them to delete it.
 #.
-#: src/pwck.c:304
+#: src/pwck.c:295
 msgid "invalid password file entry\n"
 msgstr ""
 
@@ -1729,32 +1709,24 @@ msgstr ""
 #. * Tell the user this entry is a duplicate of
 #. * another and ask them to delete it.
 #.
-#: src/pwck.c:366
+#: src/pwck.c:357
 msgid "duplicate password entry\n"
 msgstr ""
 
-#: src/pwck.c:382
+#: src/pwck.c:373
 #, c-format
 msgid "invalid user name `%s'\n"
 msgstr ""
 
-#: src/pwck.c:392
-#, c-format
-msgid "user %s: bad UID (%d)\n"
-msgstr ""
-
 #.
 #. * No primary group, just give a warning
 #.
-#: src/pwck.c:407
+#: src/pwck.c:388
 #, c-format
-msgid "user %s: no group %d\n"
+msgid "user %s: no group %u\n"
 msgstr ""
 
-#.
-#. * Home directory doesn't exist, give a warning
-#.
-#: src/pwck.c:422
+#: src/pwck.c:404
 #, c-format
 msgid "user %s: directory %s does not exist\n"
 msgstr ""
@@ -1762,16 +1734,16 @@ msgstr ""
 #.
 #. * Login shell doesn't exist, give a warning
 #.
-#: src/pwck.c:437
+#: src/pwck.c:420
 #, c-format
 msgid "user %s: program %s does not exist\n"
 msgstr ""
 
 #.
-#. * Tell the user this entire line is bogus and
-#. * ask them to delete it.
+#. * Tell the user this entire line is bogus and ask
+#. * them to delete it.
 #.
-#: src/pwck.c:473
+#: src/pwck.c:456
 msgid "invalid shadow password file entry\n"
 msgstr ""
 
@@ -1779,7 +1751,7 @@ msgstr ""
 #. * Tell the user this entry is a duplicate of
 #. * another and ask them to delete it.
 #.
-#: src/pwck.c:535
+#: src/pwck.c:518
 msgid "duplicate shadow password entry\n"
 msgstr ""
 
@@ -1787,70 +1759,70 @@ msgstr ""
 #. * Tell the user this entry has no matching
 #. * /etc/passwd entry and ask them to delete it.
 #.
-#: src/pwck.c:559
+#: src/pwck.c:542
 msgid "no matching password file entry\n"
 msgstr ""
 
-#: src/pwck.c:576
+#: src/pwck.c:560
 #, c-format
 msgid "user %s: last password change in the future\n"
 msgstr ""
 
-#: src/pwconv.c:94 src/pwunconv.c:99
+#: src/pwconv.c:84 src/pwunconv.c:93
 #, c-format
 msgid "%s: can't lock passwd file\n"
 msgstr ""
 
-#: src/pwconv.c:99 src/pwunconv.c:104
+#: src/pwconv.c:89 src/pwunconv.c:98
 #, c-format
 msgid "%s: can't open passwd file\n"
 msgstr ""
 
-#: src/pwconv.c:126
+#: src/pwconv.c:117
 #, c-format
 msgid "%s: can't remove shadow entry for %s\n"
 msgstr ""
 
-#: src/pwconv.c:169
+#: src/pwconv.c:163
 #, c-format
 msgid "%s: can't update passwd entry for %s\n"
 msgstr ""
 
-#: src/pwconv.c:176
+#: src/pwconv.c:170
 #, c-format
 msgid "%s: can't update shadow file\n"
 msgstr ""
 
-#: src/pwconv.c:180
+#: src/pwconv.c:175
 #, c-format
 msgid "%s: can't update passwd file\n"
 msgstr ""
 
-#: src/pwunconv.c:53
+#: src/pwunconv.c:50
 #, c-format
 msgid "%s: Shadow passwords are not configured.\n"
 msgstr ""
 
-#: src/pwunconv.c:162
+#: src/pwunconv.c:160
 #, c-format
 msgid "%s: can't update entry for user %s\n"
 msgstr ""
 
-#: src/pwunconv.c:179
+#: src/pwunconv.c:181
 #, c-format
 msgid "%s: can't delete shadow password file\n"
 msgstr ""
 
-#: src/su.c:140
+#: src/su.c:133
 msgid "Sorry."
 msgstr ""
 
-#: src/su.c:222
+#: src/su.c:216
 #, c-format
 msgid "%s: must be run from a terminal\n"
 msgstr ""
 
-#: src/su.c:310
+#: src/su.c:306
 #, c-format
 msgid "%s: pam_start: error %d\n"
 msgstr ""
@@ -1860,46 +1832,40 @@ msgstr ""
 msgid "Unknown id: %s\n"
 msgstr ""
 
-#. access denied (-1) or unexpected value
-#: src/su.c:371 src/su.c:386
+#: src/su.c:373 src/su.c:390
 #, c-format
 msgid "You are not authorized to su %s\n"
 msgstr ""
 
 #. require own password
-#: src/su.c:382
+#: src/su.c:385
 msgid "(Enter your own password.)"
 msgstr ""
 
-#: src/su.c:413
+#: src/su.c:419
 #, c-format
 msgid ""
 "%s: %s\n"
 "(Ignored)\n"
 msgstr ""
 
-#: src/su.c:615
+#: src/su.c:626
 msgid "No shell\n"
 msgstr ""
 
 #. must be a password file!
-#: src/sulogin.c:136
+#: src/sulogin.c:132
 msgid "No password file\n"
 msgstr ""
 
 #.
 #. * Fail secure
 #.
-#: src/sulogin.c:178
+#: src/sulogin.c:174
 msgid "No password entry for 'root'\n"
 msgstr ""
 
-#.
-#. * Here we prompt for the root password, or if no password is
-#. * given we just exit.
-#.
-#. get a password for root
-#: src/sulogin.c:192
+#: src/sulogin.c:190
 msgid ""
 "\n"
 "Type control-d to proceed with normal startup,\n"
@@ -1907,7 +1873,7 @@ msgid ""
 msgstr ""
 
 #. make new environment active
-#: src/sulogin.c:241
+#: src/sulogin.c:243
 msgid "Entering System Maintenance Mode\n"
 msgstr ""
 
@@ -1916,526 +1882,526 @@ msgstr ""
 msgid "%s: rebuild the group database\n"
 msgstr ""
 
-#: src/useradd.c:258
+#: src/useradd.c:260
 #, c-format
 msgid "%s: rebuild the shadow group database\n"
 msgstr ""
 
-#: src/useradd.c:295 src/usermod.c:974
+#: src/useradd.c:295 src/useradd.c:309 src/usermod.c:981 src/usermod.c:995
 #, c-format
 msgid "%s: invalid numeric argument `%s'\n"
 msgstr ""
 
-#: src/useradd.c:351
+#: src/useradd.c:365
 #, c-format
 msgid "%s: unknown gid %s\n"
 msgstr ""
 
-#: src/useradd.c:358 src/useradd.c:660 src/useradd.c:1246 src/usermod.c:261
-#: src/usermod.c:1105
+#: src/useradd.c:373 src/useradd.c:676 src/useradd.c:1269 src/usermod.c:260
+#: src/usermod.c:1128
 #, c-format
 msgid "%s: unknown group %s\n"
 msgstr ""
 
-#: src/useradd.c:426
+#: src/useradd.c:440
 #, c-format
-msgid "group=%s,%ld  basedir=%s  skel=%s\n"
+msgid "group=%s,%u  basedir=%s  skel=%s\n"
 msgstr ""
 
-#: src/useradd.c:429
+#: src/useradd.c:444
 #, c-format
 msgid "shell=%s  "
 msgstr ""
 
-#: src/useradd.c:431
+#: src/useradd.c:446
 #, c-format
 msgid "inactive=%ld  expire=%s"
 msgstr ""
 
-#: src/useradd.c:435
+#: src/useradd.c:450
 #, c-format
-msgid "GROUP=%ld\n"
+msgid "GROUP=%u\n"
 msgstr ""
 
-#: src/useradd.c:436
+#: src/useradd.c:451
 #, c-format
 msgid "HOME=%s\n"
 msgstr ""
 
-#: src/useradd.c:438
+#: src/useradd.c:453
 #, c-format
 msgid "INACTIVE=%ld\n"
 msgstr ""
 
-#: src/useradd.c:439
+#: src/useradd.c:454
 #, c-format
 msgid "EXPIRE=%s\n"
 msgstr ""
 
-#: src/useradd.c:441
+#: src/useradd.c:456
 #, c-format
 msgid "SHELL=%s\n"
 msgstr ""
 
-#: src/useradd.c:442
+#: src/useradd.c:457
 #, c-format
 msgid "SKEL=%s\n"
 msgstr ""
 
-#: src/useradd.c:482
+#: src/useradd.c:498
 #, c-format
 msgid "%s: cannot create new defaults file\n"
 msgstr ""
 
-#: src/useradd.c:488
+#: src/useradd.c:503
 #, c-format
 msgid "%s: cannot open new defaults file\n"
 msgstr ""
 
-#: src/useradd.c:582 src/useradd.c:593
+#: src/useradd.c:596 src/useradd.c:608
 #, c-format
 msgid "%s: rename: %s"
 msgstr ""
 
-#: src/useradd.c:680 src/usermod.c:281
+#: src/useradd.c:697 src/usermod.c:281
 #, c-format
 msgid "%s: group `%s' is a NIS group.\n"
 msgstr ""
 
-#: src/useradd.c:688 src/usermod.c:289
+#: src/useradd.c:706 src/usermod.c:290
 #, c-format
 msgid "%s: too many groups specified (max %d).\n"
 msgstr ""
 
-#: src/useradd.c:720 src/usermod.c:321
+#: src/useradd.c:738 src/usermod.c:322
 #, c-format
 msgid "usage: %s\t[-u uid [-o]] [-g group] [-G group,...] \n"
 msgstr ""
 
-#: src/useradd.c:723
+#: src/useradd.c:742
 msgid "\t\t[-d home] [-s shell] [-c comment] [-m [-k template]]\n"
 msgstr ""
 
-#: src/useradd.c:726 src/usermod.c:327
+#: src/useradd.c:745 src/usermod.c:329
 msgid "[-f inactive] [-e expire ] "
 msgstr ""
 
-#: src/useradd.c:729
+#: src/useradd.c:748
 msgid "[-A program] "
 msgstr ""
 
-#: src/useradd.c:731
+#: src/useradd.c:750
 msgid "[-p passwd] name\n"
 msgstr ""
 
-#: src/useradd.c:733
+#: src/useradd.c:753
 #, c-format
 msgid "       %s\t-D [-g group] [-b base] [-s shell]\n"
 msgstr ""
 
-#: src/useradd.c:736
+#: src/useradd.c:756
 msgid "\t\t[-f inactive] [-e expire ]\n"
 msgstr ""
 
-#: src/useradd.c:833 src/usermod.c:479
+#: src/useradd.c:850 src/usermod.c:480
 #, c-format
 msgid "%s: error locking group file\n"
 msgstr ""
 
-#: src/useradd.c:837 src/usermod.c:484
+#: src/useradd.c:855 src/usermod.c:486
 #, c-format
 msgid "%s: error opening group file\n"
 msgstr ""
 
-#: src/useradd.c:842 src/usermod.c:591
+#: src/useradd.c:862 src/usermod.c:597
 #, c-format
 msgid "%s: error locking shadow group file\n"
 msgstr ""
 
-#: src/useradd.c:847 src/usermod.c:597
+#: src/useradd.c:867 src/usermod.c:603
 #, c-format
 msgid "%s: error opening shadow group file\n"
 msgstr ""
 
-#: src/useradd.c:1019
+#: src/useradd.c:1039
 #, c-format
-msgid "%s: uid %d is not unique\n"
+msgid "%s: uid %u is not unique\n"
 msgstr ""
 
-#: src/useradd.c:1049
+#: src/useradd.c:1069
 #, c-format
 msgid "%s: can't get unique uid\n"
 msgstr ""
 
-#: src/useradd.c:1157 src/useradd.c:1301 src/usermod.c:1053 src/usermod.c:1064
-#: src/usermod.c:1074 src/usermod.c:1120 src/usermod.c:1164
+#: src/useradd.c:1174 src/useradd.c:1325 src/usermod.c:1075 src/usermod.c:1086
+#: src/usermod.c:1096 src/usermod.c:1143 src/usermod.c:1187
 #, c-format
 msgid "%s: invalid field `%s'\n"
 msgstr ""
 
-#: src/useradd.c:1171
+#: src/useradd.c:1189
 #, c-format
 msgid "%s: invalid base directory `%s'\n"
 msgstr ""
 
-#: src/useradd.c:1181
+#: src/useradd.c:1199
 #, c-format
 msgid "%s: invalid comment `%s'\n"
 msgstr ""
 
-#: src/useradd.c:1191
+#: src/useradd.c:1210
 #, c-format
 msgid "%s: invalid home directory `%s'\n"
 msgstr ""
 
-#: src/useradd.c:1209 src/usermod.c:1087
+#: src/useradd.c:1229 src/usermod.c:1110
 #, c-format
 msgid "%s: invalid date `%s'\n"
 msgstr ""
 
-#: src/useradd.c:1221
+#: src/useradd.c:1242
 #, c-format
 msgid "%s: shadow passwords required for -e\n"
 msgstr ""
 
-#: src/useradd.c:1236
+#: src/useradd.c:1258
 #, c-format
 msgid "%s: shadow passwords required for -f\n"
 msgstr ""
 
-#: src/useradd.c:1310
+#: src/useradd.c:1336
 #, c-format
 msgid "%s: invalid shell `%s'\n"
 msgstr ""
 
-#: src/useradd.c:1351
+#: src/useradd.c:1377
 #, c-format
 msgid "%s: invalid user name `%s'\n"
 msgstr ""
 
-#: src/useradd.c:1387 src/userdel.c:298 src/usermod.c:1232
+#: src/useradd.c:1413 src/userdel.c:298 src/usermod.c:1255
 #, c-format
 msgid "%s: cannot rewrite password file\n"
 msgstr ""
 
-#: src/useradd.c:1392 src/userdel.c:301 src/usermod.c:1237
+#: src/useradd.c:1420 src/userdel.c:303 src/usermod.c:1262
 #, c-format
 msgid "%s: cannot rewrite shadow password file\n"
 msgstr ""
 
-#: src/useradd.c:1432 src/userdel.c:365 src/usermod.c:1272
+#: src/useradd.c:1461 src/userdel.c:367 src/usermod.c:1296
 #, c-format
 msgid "%s: unable to lock password file\n"
 msgstr ""
 
-#: src/useradd.c:1436 src/userdel.c:369 src/usermod.c:1276
+#: src/useradd.c:1466 src/userdel.c:372 src/usermod.c:1301
 #, c-format
 msgid "%s: unable to open password file\n"
 msgstr ""
 
-#: src/useradd.c:1442 src/userdel.c:374 src/usermod.c:1281
+#: src/useradd.c:1474 src/userdel.c:379 src/usermod.c:1308
 #, c-format
 msgid "%s: cannot lock shadow password file\n"
 msgstr ""
 
-#: src/useradd.c:1448 src/userdel.c:379 src/usermod.c:1286
+#: src/useradd.c:1481 src/userdel.c:385 src/usermod.c:1314
 #, c-format
 msgid "%s: cannot open shadow password file\n"
 msgstr ""
 
-#: src/useradd.c:1547 src/usermod.c:1373
+#: src/useradd.c:1580 src/usermod.c:1405
 #, c-format
 msgid "%s: error adding authentication method\n"
 msgstr ""
 
-#: src/useradd.c:1570
+#: src/useradd.c:1604
 #, c-format
 msgid "%s: error adding new password entry\n"
 msgstr ""
 
-#: src/useradd.c:1585
+#: src/useradd.c:1618
 #, c-format
 msgid "%s: error updating password dbm entry\n"
 msgstr ""
 
-#: src/useradd.c:1601 src/usermod.c:1432
+#: src/useradd.c:1634 src/usermod.c:1471
 #, c-format
 msgid "%s: error adding new shadow password entry\n"
 msgstr ""
 
-#: src/useradd.c:1617 src/usermod.c:1447
+#: src/useradd.c:1650 src/usermod.c:1488
 #, c-format
 msgid "%s: error updating shadow passwd dbm entry\n"
 msgstr ""
 
-#: src/useradd.c:1649
+#: src/useradd.c:1682
 #, c-format
 msgid "%s: cannot create directory %s\n"
 msgstr ""
 
-#: src/useradd.c:1772 src/usermod.c:1210
+#: src/useradd.c:1806 src/usermod.c:1233
 #, c-format
 msgid "%s: user %s exists\n"
 msgstr ""
 
-#: src/useradd.c:1784
+#: src/useradd.c:1821
 #, c-format
 msgid ""
 "%s: group %s exists - if you want to add this user to that group, use -g.\n"
 msgstr ""
 
-#: src/useradd.c:1815
+#: src/useradd.c:1854
 #, c-format
 msgid "%s: warning: CREATE_HOME not supported, please use -m instead.\n"
 msgstr ""
 
-#: src/userdel.c:133
+#: src/userdel.c:129
 #, c-format
 msgid "usage: %s [-r] name\n"
 msgstr ""
 
-#: src/userdel.c:184 src/userdel.c:266
+#: src/userdel.c:181 src/userdel.c:267
 #, c-format
 msgid "%s: error updating group entry\n"
 msgstr ""
 
-#: src/userdel.c:194 src/userdel.c:275
+#: src/userdel.c:191 src/userdel.c:276
 #, c-format
 msgid "%s: cannot update dbm group entry\n"
 msgstr ""
 
-#: src/userdel.c:221
+#: src/userdel.c:219
 #, c-format
 msgid "%s: cannot remove dbm group entry\n"
 msgstr ""
 
-#: src/userdel.c:306
+#: src/userdel.c:308
 #, c-format
 msgid "%s: cannot rewrite TCFS key file\n"
 msgstr ""
 
-#: src/userdel.c:386
+#: src/userdel.c:392
 #, c-format
 msgid "%s: cannot lock TCFS key file\n"
 msgstr ""
 
-#: src/userdel.c:390
+#: src/userdel.c:397
 #, c-format
 msgid "%s: cannot open TCFS key file\n"
 msgstr ""
 
-#: src/userdel.c:399
+#: src/userdel.c:408
 #, c-format
 msgid "%s: cannot open group file\n"
 msgstr ""
 
-#: src/userdel.c:409
+#: src/userdel.c:419
 #, c-format
 msgid "%s: cannot open shadow group file\n"
 msgstr ""
 
-#: src/userdel.c:440 src/userdel.c:455
+#: src/userdel.c:451 src/userdel.c:468
 #, c-format
 msgid "%s: error deleting authentication\n"
 msgstr ""
 
-#: src/userdel.c:464
+#: src/userdel.c:479
 #, c-format
 msgid "%s: error deleting password entry\n"
 msgstr ""
 
-#: src/userdel.c:467
+#: src/userdel.c:485
 #, c-format
 msgid "%s: error deleting shadow password entry\n"
 msgstr ""
 
-#: src/userdel.c:476
+#: src/userdel.c:496
 #, c-format
 msgid "%s: error deleting TCFS entry\n"
 msgstr ""
 
-#: src/userdel.c:489
+#: src/userdel.c:510
 #, c-format
 msgid "%s: error deleting password dbm entry\n"
 msgstr ""
 
-#: src/userdel.c:508
+#: src/userdel.c:533
 #, c-format
 msgid "%s: error deleting shadow passwd dbm entry\n"
 msgstr ""
 
-#: src/userdel.c:549
+#: src/userdel.c:569
 #, c-format
 msgid "%s: user %s is currently logged in\n"
 msgstr ""
 
-#: src/userdel.c:666
+#: src/userdel.c:659
 #, c-format
 msgid "%s: warning: %s not owned by %s, not removing\n"
 msgstr ""
 
-#: src/userdel.c:672
+#: src/userdel.c:666
 #, c-format
 msgid "%s: warning: can't remove "
 msgstr ""
 
-#: src/userdel.c:791 src/usermod.c:1001
+#: src/userdel.c:758 src/usermod.c:1023
 #, c-format
 msgid "%s: user %s does not exist\n"
 msgstr ""
 
-#: src/userdel.c:805 src/usermod.c:1017
+#: src/userdel.c:770 src/usermod.c:1039
 #, c-format
 msgid "%s: user %s is a NIS user\n"
 msgstr ""
 
-#: src/userdel.c:842
+#: src/userdel.c:799
 #, c-format
 msgid "%s: %s not owned by %s, not removing\n"
 msgstr ""
 
-#: src/userdel.c:865
+#: src/userdel.c:818
 #, c-format
 msgid "%s: not removing directory %s (would remove home of user %s)\n"
 msgstr ""
 
-#: src/userdel.c:878
+#: src/userdel.c:830
 #, c-format
 msgid "%s: error removing directory %s\n"
 msgstr ""
 
-#: src/usermod.c:324
+#: src/usermod.c:326
 msgid "\t\t[-d home [-m]] [-s shell] [-c comment] [-l new_name]\n"
 msgstr ""
 
-#: src/usermod.c:330
+#: src/usermod.c:332
 msgid "[-A {DEFAULT|program},... ] "
 msgstr ""
 
-#: src/usermod.c:332
+#: src/usermod.c:334
 msgid "[-p passwd] [-L|-U] name\n"
 msgstr ""
 
-#: src/usermod.c:511
+#: src/usermod.c:514
 #, c-format
 msgid "%s: out of memory in update_group\n"
 msgstr ""
 
-#: src/usermod.c:634
+#: src/usermod.c:641
 #, c-format
 msgid "%s: out of memory in update_gshadow\n"
 msgstr ""
 
-#: src/usermod.c:1187
+#: src/usermod.c:1210
 #, c-format
 msgid "%s: no flags given\n"
 msgstr ""
 
-#: src/usermod.c:1194
+#: src/usermod.c:1217
 #, c-format
 msgid "%s: shadow passwords required for -e and -f\n"
 msgstr ""
 
-#: src/usermod.c:1215
+#: src/usermod.c:1239
 #, c-format
-msgid "%s: uid %ld is not unique\n"
+msgid "%s: uid %lu is not unique\n"
 msgstr ""
 
-#: src/usermod.c:1363
+#: src/usermod.c:1392
 #, c-format
 msgid "%s: error deleting authentication method\n"
 msgstr ""
 
-#: src/usermod.c:1383
+#: src/usermod.c:1418
 #, c-format
 msgid "%s: error changing authentication method\n"
 msgstr ""
 
-#: src/usermod.c:1400
+#: src/usermod.c:1436
 #, c-format
 msgid "%s: error changing password entry\n"
 msgstr ""
 
-#: src/usermod.c:1406
+#: src/usermod.c:1442
 #, c-format
 msgid "%s: error removing password entry\n"
 msgstr ""
 
-#: src/usermod.c:1414
+#: src/usermod.c:1451
 #, c-format
 msgid "%s: error adding password dbm entry\n"
 msgstr ""
 
-#: src/usermod.c:1421
+#: src/usermod.c:1459
 #, c-format
 msgid "%s: error removing passwd dbm entry\n"
 msgstr ""
 
-#: src/usermod.c:1438
+#: src/usermod.c:1478
 #, c-format
 msgid "%s: error removing shadow password entry\n"
 msgstr ""
 
-#: src/usermod.c:1453
+#: src/usermod.c:1495
 #, c-format
 msgid "%s: error removing shadow passwd dbm entry\n"
 msgstr ""
 
-#: src/usermod.c:1484
+#: src/usermod.c:1524
 #, c-format
 msgid "%s: directory %s exists\n"
 msgstr ""
 
-#: src/usermod.c:1491
+#: src/usermod.c:1533
 #, c-format
 msgid "%s: can't create %s\n"
 msgstr ""
 
-#: src/usermod.c:1497
+#: src/usermod.c:1539
 #, c-format
 msgid "%s: can't chown %s\n"
 msgstr ""
 
-#: src/usermod.c:1513
+#: src/usermod.c:1556
 #, c-format
 msgid "%s: cannot rename directory %s to %s\n"
 msgstr ""
 
 #. better leave it alone
-#: src/usermod.c:1610
+#: src/usermod.c:1653
 #, c-format
 msgid "%s: warning: %s not owned by %s\n"
 msgstr ""
 
-#: src/usermod.c:1616
+#: src/usermod.c:1659
 msgid "failed to change mailbox owner"
 msgstr ""
 
-#: src/usermod.c:1623
+#: src/usermod.c:1667
 msgid "failed to rename mailbox"
 msgstr ""
 
-#: src/vipw.c:102
+#: src/vipw.c:104
 #, c-format
 msgid ""
 "\n"
 "%s: %s is unchanged\n"
 msgstr ""
 
-#: src/vipw.c:127
+#: src/vipw.c:132
 msgid "Couldn't lock file"
 msgstr ""
 
-#: src/vipw.c:134
+#: src/vipw.c:141
 msgid "Couldn't make backup"
 msgstr ""
 
-#: src/vipw.c:187
+#: src/vipw.c:206
 #, c-format
 msgid "%s: can't restore %s: %s (your changes are in %s)\n"
 msgstr ""
 
-#: src/vipw.c:226
+#: src/vipw.c:244
 msgid ""
 "Usage:\n"
 "`vipw' edits /etc/passwd        `vipw -s' edits /etc/shadow\n"
index 27340790d95ee36d185f2875f6acf33359711512..ab45c48ae8bfdc94671b7c797fa6f7783ee194b9 100644 (file)
Binary files a/po/sv.gmo and b/po/sv.gmo differ
index 26c2f8bcb6d00cba42099f76b5048967f9b22575..cc896ae839a889e436b3bcbe473bfb8c05bfce81 100644 (file)
--- a/po/sv.po
+++ b/po/sv.po
@@ -6,7 +6,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: shadow 19990709\n"
-"POT-Creation-Date: 2001-09-08 07:36+0200\n"
+"POT-Creation-Date: 2002-01-06 16:13+0100\n"
 "PO-Revision-Date: 1999-08-16 21:20+0100\n"
 "Last-Translator: Kristoffer Brånemyr <ztion@swipnet.se>\n"
 "Language-Team: sv <sv@li.org>\n"
@@ -23,36 +23,36 @@ msgstr "Varning: ok
 msgid "Warning: too many groups\n"
 msgstr "Varning: för många grupper\n"
 
-#: libmisc/age.c:104
+#: libmisc/age.c:77
 msgid "Your password has expired."
 msgstr "Ditt lösenord har upphört"
 
-#: libmisc/age.c:107
+#: libmisc/age.c:80
 msgid "Your password is inactive."
 msgstr "Ditt lösenord är inaktivt"
 
-#: libmisc/age.c:110
+#: libmisc/age.c:83
 msgid "Your login has expired."
 msgstr "Din användare har upphört."
 
-#: libmisc/age.c:127
+#: libmisc/age.c:96
 msgid "  Contact the system administrator.\n"
 msgstr "  Kontakta systemoperatören.\n"
 
-#: libmisc/age.c:130
+#: libmisc/age.c:99
 msgid "  Choose a new password.\n"
 msgstr "  Välj ett nytt lösenord.\n"
 
-#: libmisc/age.c:228
+#: libmisc/age.c:176
 #, c-format
 msgid "Your password will expire in %ld days.\n"
 msgstr "Ditt lösenord upphör om %ld dagar.\n"
 
-#: libmisc/age.c:230
+#: libmisc/age.c:178
 msgid "Your password will expire tomorrow.\n"
 msgstr "Ditt lösenord upphör imorgon.\n"
 
-#: libmisc/age.c:232
+#: libmisc/age.c:180
 msgid "Your password will expire today.\n"
 msgstr "Ditt lösenord upphör idag.\n"
 
@@ -110,7 +110,7 @@ msgstr "Ingen post."
 msgid "You have mail."
 msgstr "Du har post."
 
-#: libmisc/obscure.c:281 src/passwd.c:309
+#: libmisc/obscure.c:281 src/passwd.c:244
 #, c-format
 msgid "Bad password: %s.  "
 msgstr "Felaktigt lösenord: %s.  "
@@ -125,12 +125,12 @@ msgstr "passwd: pam_start() misslyckades, fel %d\n"
 msgid "passwd: %s\n"
 msgstr "passwd: %s\n"
 
-#: libmisc/setupenv.c:205
+#: libmisc/setupenv.c:211
 #, c-format
 msgid "Unable to cd to \"%s\"\n"
 msgstr "Kunde inte byta aktuell katalog till \"%s\"\n"
 
-#: libmisc/setupenv.c:213
+#: libmisc/setupenv.c:219
 msgid "No directory, logging in with HOME=/"
 msgstr "Ingen hemkatalog, loggar in med HOME=/"
 
@@ -180,24 +180,24 @@ msgstr "malloc(%d) misslyckades\n"
 msgid "Dialup Password: "
 msgstr "Uppringningslösenord: "
 
-#: lib/getdef.c:253
+#: lib/getdef.c:276
 msgid "Could not allocate space for config info.\n"
 msgstr "Kunde inte allokera rum för konfigureringsinformation.\n"
 
 #.
 #. * Item was never found.
 #.
-#: lib/getdef.c:307
+#: lib/getdef.c:330
 #, c-format
 msgid "configuration error - unknown item '%s' (notify administrator)\n"
 msgstr "konfigurerings fel - okänt object \"%s\" (meddela systemoperatören)\n"
 
-#: lib/getdef.c:394
+#: lib/getdef.c:417
 #, c-format
 msgid "error - lookup '%s' failed\n"
 msgstr "fel - kunde inte hitta \"%s\"\n"
 
-#: lib/getdef.c:402
+#: lib/getdef.c:425
 #, c-format
 msgid "%s not found\n"
 msgstr "%s hittades inte\n"
@@ -206,7 +206,7 @@ msgstr "%s hittades inte\n"
 #. * get the password from her, and set the salt for
 #. * the decryption from the group file.
 #.
-#: lib/pwauth.c:54 src/newgrp.c:305
+#: lib/pwauth.c:54 src/newgrp.c:348
 msgid "Password: "
 msgstr "Lösenord: "
 
@@ -224,111 +224,107 @@ msgstr ""
 msgid "Unknown error %d"
 msgstr "Okänt fel %d"
 
-#: src/chage.c:162
+#: src/chage.c:116
 #, c-format
 msgid ""
-"Usage: %s [ -l ] [ -m min_days ] [ -M max_days ] [ -W warn ]\n"
-"  [ -I inactive ] [ -E expire ] [ -d last_day ] user\n"
+"Usage: %s [-l] [-m min_days] [-M max_days] [-W warn]\n"
+"\t[-I inactive] [-E expire] [-d last_day] user\n"
 msgstr ""
-"Användning: %s [ -l ] [ -m min_dagar ] [ -M max_dagar ] [ -W varna ]\n"
-"  [ -I inaktiv ] [ -E utgång ] [ -d senaste_dag ] användare\n"
+"Användning: %s [-l] [-m min_dagar] [-M max_dagar] [-W varna]\n"
+"\t[-I inaktiv] [-E utgång] [-d senaste_dag] användare\n"
 
-#: src/chage.c:164
+#: src/chage.c:122
 #, c-format
-msgid "Usage: %s [ -l ] [ -m min_days ] [ -M max_days ] [ -d last_day ] user\n"
+msgid "Usage: %s [-l] [-m min_days] [-M max_days] [-d last_day] user\n"
 msgstr ""
-"Användning: %s [ -l ] [ -m min_dagar ] [ -M max_dagar ] [ -d senaste_dag ] "
+"Användning: %s [-l] [-m min_dagar] [-M max_dagar] [-d senaste_dag] "
 "användare\n"
 
-#: src/chage.c:199
+#: src/chage.c:157
+#, fuzzy
 msgid ""
-"Enter the new value, or press return for the default\n"
-"\n"
-msgstr ""
-"Skriv in det nya värdet, eller tryck på return för standardvärdet\n"
+"Enter the new value, or press ENTER for the default\n"
 "\n"
+msgstr "Skriv in det nya värdet, eller tryck ENTER för standardvärdet\n"
 
-#: src/chage.c:202
+#: src/chage.c:160
 msgid "Minimum Password Age"
 msgstr "Minsta lösenordsålder"
 
-#: src/chage.c:207
+#: src/chage.c:166
 msgid "Maximum Password Age"
 msgstr "Högsta lösenordsålder"
 
-#: src/chage.c:213
+#: src/chage.c:174
 msgid "Last Password Change (YYYY-MM-DD)"
 msgstr "Senaste lösenordsändring (ÅÅÅÅ-MM-DD)"
 
-#: src/chage.c:222
+#: src/chage.c:183
 msgid "Password Expiration Warning"
 msgstr "Lösenords upphörningsvarning"
 
-#: src/chage.c:227
+#: src/chage.c:189
 msgid "Password Inactive"
 msgstr "Lösenord inaktivt"
 
-#: src/chage.c:233
+#: src/chage.c:197
 msgid "Account Expiration Date (YYYY-MM-DD)"
 msgstr "Kontot upphör (ÅÅÅÅ-MM-DD)"
 
 #.
 #. * 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.
+#. * 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.
 #.
-#: src/chage.c:287
+#: src/chage.c:248
 #, c-format
 msgid "Minimum:\t%ld\n"
 msgstr "Minst:\t%ld\n"
 
-#: src/chage.c:288
+#: src/chage.c:249
 #, c-format
 msgid "Maximum:\t%ld\n"
 msgstr "Högst:\t%ld\n"
 
-#: src/chage.c:290
+#: src/chage.c:251
 #, c-format
 msgid "Warning:\t%ld\n"
 msgstr "Varning:\t%ld\n"
 
-#: src/chage.c:291
+#: src/chage.c:252
 #, c-format
 msgid "Inactive:\t%ld\n"
 msgstr "Inaktivt:\t%ld\n"
 
 #.
-#. * 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.
+#. * 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.
 #.
-#: src/chage.c:300
+#: src/chage.c:260
 msgid "Last Change:\t\t"
 msgstr "Senaste ändring:\t\t"
 
-#: src/chage.c:302 src/chage.c:316 src/chage.c:333 src/chage.c:346
+#: src/chage.c:262 src/chage.c:276 src/chage.c:293 src/chage.c:306
 msgid "Never\n"
 msgstr "Aldrig\n"
 
 #.
-#. * The password expiration date is determined from the last
-#. * change date plus the number of days the password is valid
-#. * for.
+#. * The password expiration date is determined from the last change
+#. * date plus the number of days the password is valid for.
 #.
-#: src/chage.c:314
+#: src/chage.c:273
 msgid "Password Expires:\t"
 msgstr "Lösenordet upphör:\t"
 
 #.
-#. * 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.
+#. * 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.
 #.
-#: src/chage.c:330
+#: src/chage.c:290
 #, fuzzy
 msgid "Password Inactive:\t"
 msgstr "Lösenord inaktivt"
@@ -337,583 +333,586 @@ msgstr "L
 #. * The account will expire on the given date regardless of the
 #. * password expiring or not.
 #.
-#: src/chage.c:344
+#: src/chage.c:304
 #, fuzzy
 msgid "Account Expires:\t"
 msgstr "Lösenordet upphör:\t"
 
-#: src/chage.c:453 src/chpasswd.c:139 src/groupadd.c:536 src/groupdel.c:322
-#: src/groupmod.c:522 src/newusers.c:389 src/useradd.c:1721 src/userdel.c:738
-#: src/usermod.c:1687
-#, fuzzy, c-format
-msgid "%s: PAM authentication failed\n"
-msgstr "%s: fel under tillägning av metod för äkthetsbevisning\n"
-
-#: src/chage.c:536
+#: src/chage.c:468
 #, c-format
 msgid "%s: do not include \"l\" with other flags\n"
 msgstr "%s: inkludera inte \"l\" tillsammands med andra flaggor\n"
 
-#: src/chage.c:548 src/chage.c:660 src/login.c:532
+#: src/chage.c:481 src/chage.c:652 src/login.c:516
 #, c-format
 msgid "%s: permission denied\n"
 msgstr "%s: tillåtelse nekas\n"
 
-#: src/chage.c:560 src/chpasswd.c:157
+#: src/chage.c:512 src/chpasswd.c:139 src/groupadd.c:529 src/groupdel.c:322
+#: src/groupmod.c:520 src/newusers.c:381 src/useradd.c:1754 src/userdel.c:717
+#: src/usermod.c:1732
+#, fuzzy, c-format
+msgid "%s: PAM authentication failed\n"
+msgstr "%s: fel under tillägning av metod för äkthetsbevisning\n"
+
+#: src/chage.c:533 src/chpasswd.c:157
 #, c-format
 msgid "%s: can't lock password file\n"
 msgstr "%s: kan inte låsa lösenordsfilen\n"
 
-#: src/chage.c:566 src/chpasswd.c:161
+#: src/chage.c:544 src/chpasswd.c:162
 #, c-format
 msgid "%s: can't open password file\n"
 msgstr "%s: kan inte öppna lösenordsfilen\n"
 
-#: src/chage.c:573
+#: src/chage.c:552
 #, c-format
 msgid "%s: unknown user: %s\n"
 msgstr "%s: okänd användare: %s\n"
 
-#: src/chage.c:592
-#, c-format
-msgid "%s: can't lock shadow password file\n"
+#: src/chage.c:571
+#, fuzzy, c-format
+msgid "%s: can't lock shadow password file"
 msgstr "%s: kan inte låsa skugglösenordsfilen\n"
 
-#: src/chage.c:599
-#, c-format
-msgid "%s: can't open shadow password file\n"
+#: src/chage.c:579
+#, fuzzy, c-format
+msgid "%s: can't open shadow password file"
 msgstr "%s: kan inte öppna skugglösenordsfilen\n"
 
-#: src/chage.c:681
+#: src/chage.c:674
 #, c-format
 msgid "Changing the aging information for %s\n"
 msgstr "Ändrar åldringsinformation för %s\n"
 
-#: src/chage.c:683
+#: src/chage.c:677
 #, c-format
 msgid "%s: error changing fields\n"
 msgstr "%s: fel uppstod under byte av fält\n"
 
-#: src/chage.c:710 src/chage.c:773 src/pwunconv.c:174
+#: src/chage.c:705 src/chage.c:771 src/pwunconv.c:174
 #, c-format
 msgid "%s: can't update password file\n"
 msgstr "%s: kan inte uppdatera lösenordsfilen\n"
 
-#: src/chage.c:740 src/pwunconv.c:169
+#: src/chage.c:737 src/pwunconv.c:168
 #, c-format
 msgid "%s: can't update shadow password file\n"
 msgstr "%s: kan inte uppdatera skugglösenordsfilen\n"
 
-#: src/chage.c:789 src/chage.c:804 src/chfn.c:570 src/chsh.c:409
-#: src/passwd.c:825 src/passwd.c:926
+#: src/chage.c:789 src/chage.c:805 src/chfn.c:570 src/chsh.c:382
+#: src/passwd.c:747 src/passwd.c:859
 msgid "Error updating the DBM password entry.\n"
 msgstr "Fel under uppdatering av DBM-lösenordsnoteringen.\n"
 
-#: src/chage.c:821
+#: src/chage.c:823
 #, c-format
 msgid "%s: can't rewrite shadow password file\n"
 msgstr "%s: kan inte skriva om skugglösenordsfilen\n"
 
-#: src/chage.c:835
+#: src/chage.c:838
 #, c-format
 msgid "%s: can't rewrite password file\n"
 msgstr "%s: kan inte skriva om lösenordsfilen\n"
 
-#: src/chage.c:853 src/chpasswd.c:333 src/groupadd.c:595 src/groupdel.c:409
-#: src/groupmod.c:606 src/newusers.c:625 src/useradd.c:1830 src/userdel.c:903
-#: src/usermod.c:1765
+#: src/chage.c:857 src/chpasswd.c:343 src/groupadd.c:590 src/groupdel.c:409
+#: src/groupmod.c:604 src/newusers.c:628 src/useradd.c:1869 src/userdel.c:849
+#: src/usermod.c:1811
 #, fuzzy, c-format
 msgid "%s: PAM chauthtok failed\n"
 msgstr "%s: kan inte låsa upp filen\n"
 
-#: src/chage.c:905
-#, c-format
-msgid "%s: no aging information present\n"
-msgstr "%s: ingen åldringsinformation finns tillgänglig\n"
-
-#: src/chfn.c:107
+#: src/chfn.c:83
 #, c-format
 msgid ""
-"Usage: %s [ -f full_name ] [ -r room_no ] [ -w work_ph ]\n"
-"\t[ -h home_ph ] [ -o other ] [ user ]\n"
+"Usage: %s [-f full_name] [-r room_no] [-w work_ph]\n"
+"\t[-h home_ph] [-o other] [user]\n"
 msgstr ""
-"%s [ -f hela_namnet ] [ -r rumsnummer ] [ -w arbetstele ]\n"
-"\t[ -h hemtele ] [ -o övrigt ] [ användare ]\n"
+"%s [-f hela_namnet] [-r rumsnummer] [-w arbetstele]\n"
+"\t[-h hemtele] [-o övrigt] [användare]\n"
 
-#: src/chfn.c:111
+#: src/chfn.c:88
 #, c-format
-msgid ""
-"Usage: %s [ -f full_name ] [ -r room_no ] [ -w work_ph ] [ -h home_ph ]\n"
+msgid "Usage: %s [-f full_name] [-r room_no] [-w work_ph] [-h home_ph]\n"
 msgstr ""
-"Användning: %s [ -f hela_namnet ] [ -r rumsnummer ] [ -w arbetstele ] [ -h "
-"hemtele ]\n"
+"Användning: %s [-f hela_namnet] [-r rumsnummer] [-w arbetstele] [-h "
+"hemtele]\n"
 
-#: src/chfn.c:163 src/chsh.c:119
-msgid "Enter the new value, or press return for the default\n"
-msgstr "Skriv in det nya värdet, eller tryck return för standardvärdet\n"
+#: src/chfn.c:139
+#, fuzzy
+msgid "Enter the new value, or press ENTER for the default\n"
+msgstr ""
+"Skriv in det nya värdet, eller tryck på ENTER för standardvärdet\n"
+"\n"
 
-#: src/chfn.c:166
+#: src/chfn.c:142
 msgid "Full Name"
 msgstr "Hela namnet"
 
-#: src/chfn.c:168
+#: src/chfn.c:144
 #, c-format
 msgid "\tFull Name: %s\n"
 msgstr "\tHela namnet: %s\n"
 
-#: src/chfn.c:171
+#: src/chfn.c:147
 msgid "Room Number"
 msgstr "Rumsnummer"
 
-#: src/chfn.c:173
+#: src/chfn.c:149
 #, c-format
 msgid "\tRoom Number: %s\n"
 msgstr "\tRumsnummer: %s\n"
 
-#: src/chfn.c:176
+#: src/chfn.c:152
 msgid "Work Phone"
 msgstr "Arbetstelefonnummer"
 
-#: src/chfn.c:178
+#: src/chfn.c:154
 #, c-format
 msgid "\tWork Phone: %s\n"
 msgstr "\tArbetstelefonnummer: %s\n"
 
-#: src/chfn.c:181
+#: src/chfn.c:157
 msgid "Home Phone"
 msgstr "Hemtelefonnummer"
 
-#: src/chfn.c:183
+#: src/chfn.c:159
 #, c-format
 msgid "\tHome Phone: %s\n"
 msgstr "\tHemtelefonnummer: %s\n"
 
-#: src/chfn.c:186
+#: src/chfn.c:162
 msgid "Other"
 msgstr "Övrigt"
 
-#: src/chfn.c:298 src/chfn.c:306 src/chfn.c:314 src/chfn.c:322 src/chfn.c:330
-#: src/chfn.c:391 src/passwd.c:1226
+#: src/chfn.c:271 src/chfn.c:281 src/chfn.c:291 src/chfn.c:301 src/chfn.c:311
+#: src/chfn.c:379 src/passwd.c:1115
 #, c-format
 msgid "%s: Permission denied.\n"
 msgstr "%s: Tillåtelse nekas.\n"
 
-#: src/chfn.c:351 src/chsh.c:224 src/passwd.c:1277
+#: src/chfn.c:332 src/chsh.c:190 src/passwd.c:1165
 #, c-format
 msgid "%s: Unknown user %s\n"
 msgstr "%s: Okänd användare %s\n"
 
-#: src/chfn.c:357 src/chsh.c:232 src/passwd.c:1207
+#: src/chfn.c:341 src/chsh.c:198 src/passwd.c:1096
 #, c-format
 msgid "%s: Cannot determine your user name.\n"
 msgstr "%s: Kan inte avgöra ditt användarnamn.\n"
 
-#: src/chfn.c:373 src/chsh.c:250
+#: src/chfn.c:358 src/chsh.c:215
 #, c-format
 msgid "%s: cannot change user `%s' on NIS client.\n"
 msgstr "%s: kan inte ändra användare \"%s\" på NIS-klienten.\n"
 
-#: src/chfn.c:378 src/chsh.c:257
+#: src/chfn.c:366 src/chsh.c:223
 #, c-format
 msgid "%s: `%s' is the NIS master for this client.\n"
 msgstr "%s: \"%s\" är NIS-mästare för denna klient.\n"
 
-#: src/chfn.c:453
+#: src/chfn.c:441
 #, c-format
 msgid "Changing the user information for %s\n"
 msgstr "Ändrar användarinformation för %s\n"
 
-#: src/chfn.c:462
+#: src/chfn.c:450
 #, c-format
 msgid "%s: invalid name: \"%s\"\n"
 msgstr "%s: felaktigt namn: \"%s\"\n"
 
-#: src/chfn.c:467
+#: src/chfn.c:456
 #, c-format
 msgid "%s: invalid room number: \"%s\"\n"
 msgstr "%s: felaktigt rumsnummer: \"%s\"\n"
 
-#: src/chfn.c:472
+#: src/chfn.c:462
 #, c-format
 msgid "%s: invalid work phone: \"%s\"\n"
 msgstr "%s: felaktigt arbetstelefonnummer: \"%s\"\n"
 
-#: src/chfn.c:477
+#: src/chfn.c:468
 #, c-format
 msgid "%s: invalid home phone: \"%s\"\n"
 msgstr "%s: felaktigt hemtelefonnummer: \"%s\"\n"
 
-#: src/chfn.c:482
+#: src/chfn.c:475
 #, c-format
 msgid "%s: \"%s\" contains illegal characters\n"
 msgstr "%s: \"%s\" innehåller otillåtna tecken\n"
 
-#: src/chfn.c:494
+#: src/chfn.c:488
 #, c-format
 msgid "%s: fields too long\n"
 msgstr "%s: för långa fält\n"
 
-#: src/chfn.c:509 src/chsh.c:347 src/gpasswd.c:582 src/passwd.c:1388
+#: src/chfn.c:504 src/chsh.c:316 src/gpasswd.c:570 src/passwd.c:1277
 msgid "Cannot change ID to root.\n"
 msgstr "Kan inte ändra ID till root.\n"
 
-#: src/chfn.c:522 src/chsh.c:361 src/passwd.c:735 src/passwd.c:880
+#: src/chfn.c:519 src/chsh.c:331 src/passwd.c:656 src/passwd.c:811
 msgid "Cannot lock the password file; try again later.\n"
 msgstr "Kan inte låsa lösenordsfilen; försök igen senare.\n"
 
-#: src/chfn.c:528 src/chsh.c:367 src/passwd.c:740 src/passwd.c:885
+#: src/chfn.c:525 src/chsh.c:337 src/passwd.c:661 src/passwd.c:816
 msgid "Cannot open the password file.\n"
 msgstr "Kan inte öppna lösenordsfilen.\n"
 
-#: src/chfn.c:545 src/chsh.c:382 src/passwd.c:746 src/usermod.c:1320
+#: src/chfn.c:542 src/chsh.c:352 src/passwd.c:667 src/usermod.c:1348
 #, c-format
 msgid "%s: %s not found in /etc/passwd\n"
 msgstr "%s: %s hittades inte i /etc/passwd\n"
 
-#: src/chfn.c:562 src/chsh.c:401 src/passwd.c:819 src/passwd.c:920
-#: src/passwd.c:960
+#: src/chfn.c:561 src/chsh.c:373 src/passwd.c:740 src/passwd.c:852
 msgid "Error updating the password entry.\n"
 msgstr "Fel under uppdatering av lösenordsnoteringen.\n"
 
-#: src/chfn.c:585 src/chsh.c:424 src/passwd.c:832 src/passwd.c:933
+#: src/chfn.c:585 src/chsh.c:397 src/passwd.c:755 src/passwd.c:867
 msgid "Cannot commit password file changes.\n"
 msgstr "Kan inte genomföra ändringar i lösenordsfilen.\n"
 
-#: src/chfn.c:592 src/chsh.c:431
+#: src/chfn.c:592 src/chsh.c:404
 msgid "Cannot unlock the password file.\n"
 msgstr "Kan inte låsa upp lösenordsfilen.\n"
 
-#: src/chpasswd.c:69
+#: src/chpasswd.c:66
 #, c-format
 msgid "usage: %s [-e]\n"
 msgstr "Användning: %s [-e]\n"
 
-#: src/chpasswd.c:169 src/pwconv.c:104
+#: src/chpasswd.c:171 src/pwconv.c:94
 #, c-format
 msgid "%s: can't lock shadow file\n"
 msgstr "%s: kan inte låsa skuggfilen\n"
 
-#: src/chpasswd.c:174 src/gpasswd.c:608 src/pwconv.c:109 src/pwunconv.c:109
-#: src/pwunconv.c:114
+#: src/chpasswd.c:177 src/gpasswd.c:596 src/pwconv.c:99 src/pwunconv.c:103
+#: src/pwunconv.c:108
 #, c-format
 msgid "%s: can't open shadow file\n"
 msgstr "%s: kan inte öppna skuggfilen\n"
 
-#: src/chpasswd.c:196 src/newusers.c:465
+#: src/chpasswd.c:200 src/newusers.c:460
 #, c-format
 msgid "%s: line %d: line too long\n"
 msgstr "%s: rad %d: för lång rad\n"
 
-#: src/chpasswd.c:216
+#: src/chpasswd.c:220
 #, c-format
 msgid "%s: line %d: missing new password\n"
 msgstr "%s: rad %d: det nya lösenordet saknas\n"
 
-#: src/chpasswd.c:232
+#: src/chpasswd.c:237
 #, c-format
 msgid "%s: line %d: unknown user %s\n"
 msgstr "%s: rad %d: okänd användare %s\n"
 
-#: src/chpasswd.c:284
+#: src/chpasswd.c:290
 #, c-format
 msgid "%s: line %d: cannot update password entry\n"
 msgstr "%s: rad %d: kan inte uppdatera lösenordsnoteringen\n"
 
-#: src/chpasswd.c:300 src/newusers.c:585
+#: src/chpasswd.c:307 src/newusers.c:588
 #, c-format
 msgid "%s: error detected, changes ignored\n"
 msgstr "%s: fel upptäcktes, ändringarna ignorerades\n"
 
-#: src/chpasswd.c:311
+#: src/chpasswd.c:319
 #, c-format
 msgid "%s: error updating shadow file\n"
 msgstr "%s: fel under uppdatering av skuggfilen\n"
 
-#: src/chpasswd.c:319
+#: src/chpasswd.c:328
 #, c-format
 msgid "%s: error updating password file\n"
 msgstr "%s: fel under uppdatering av lösenordsfilen\n"
 
-#: src/chsh.c:105
+#: src/chsh.c:75
 #, c-format
-msgid "Usage: %s [ -s shell ] [ name ]\n"
-msgstr "Användning: %s [ -s skal ] [ namn ]\n"
+msgid "Usage: %s [-s shell] [name]\n"
+msgstr "Användning: %s [-s skal] [namn]\n"
+
+#: src/chsh.c:89
+#, fuzzy
+msgid "Enter the new value, or press return for the default\n"
+msgstr ""
+"Skriv in det nya värdet, eller tryck på ENTER för standardvärdet\n"
+"\n"
 
-#: src/chsh.c:120
+#: src/chsh.c:90
 msgid "Login Shell"
 msgstr "Inloggningsskal"
 
-#: src/chsh.c:273 src/chsh.c:286
+#: src/chsh.c:239 src/chsh.c:253
 #, c-format
 msgid "You may not change the shell for %s.\n"
 msgstr "Du får inte ändra skal åt %s.\n"
 
-#: src/chsh.c:315
+#: src/chsh.c:282
 #, c-format
 msgid "Changing the login shell for %s\n"
 msgstr "Ändrar inloggningsskal åt %s\n"
 
-#: src/chsh.c:327
+#: src/chsh.c:294
 #, c-format
 msgid "%s: Invalid entry: %s\n"
 msgstr "%s: Felaktig notering: %s\n"
 
-#: src/chsh.c:332
+#: src/chsh.c:301
 #, c-format
 msgid "%s is an invalid shell.\n"
 msgstr "%s är ett felaktigt skal.\n"
 
-#: src/dpasswd.c:69
+#: src/dpasswd.c:52
 #, c-format
-msgid "Usage: %s [ -(a|d) ] shell\n"
-msgstr "Användning: %s [ -(a|d) ] skal\n"
+msgid "Usage: %s [-(a|d)] shell\n"
+msgstr "Användning: %s [-(a|d)] skal\n"
 
-#: src/dpasswd.c:134
+#: src/dpasswd.c:115
 msgid "Shell password: "
 msgstr "Skallösenord: "
 
-#: src/dpasswd.c:140
+#: src/dpasswd.c:121
 msgid "re-enter Shell password: "
 msgstr "skriv in skallösenordet igen: "
 
-#: src/dpasswd.c:147
+#: src/dpasswd.c:129
 #, c-format
 msgid "%s: Passwords do not match, try again.\n"
 msgstr "%s: Lösenorden matchar inte varandra, försök igen.\n"
 
-#: src/dpasswd.c:167
+#: src/dpasswd.c:149
 #, c-format
 msgid "%s: can't create %s"
 msgstr "%s: kan inte skapa %s"
 
-#: src/dpasswd.c:172
+#: src/dpasswd.c:155
 #, c-format
 msgid "%s: can't open %s"
 msgstr "%s: kan inte öppna %s"
 
-#: src/dpasswd.c:200
+#: src/dpasswd.c:183
 #, c-format
 msgid "%s: Shell %s not found.\n"
 msgstr "%s: Hittade inte skalet %s.\n"
 
-#: src/expiry.c:84
-msgid "Usage: expiry { -f | -c }\n"
+#: src/expiry.c:59
+#, fuzzy
+msgid "Usage: expiry {-f|-c}\n"
 msgstr "Användning: expiry { -f | -c }\n"
 
-#: src/expiry.c:137
+#: src/expiry.c:113
 #, c-format
 msgid "%s: WARNING!  Must be set-UID root!\n"
 msgstr "%s: VARNING!  Måste vara set-UID root!\n"
 
-#: src/expiry.c:148
+#: src/expiry.c:124
 #, c-format
 msgid "%s: unknown user\n"
 msgstr "%s: okänd användare\n"
 
-#: src/faillog.c:79
+#: src/faillog.c:77
 #, c-format
 msgid "usage: %s [-a|-u user] [-m max] [-r] [-t days] [-l locksecs]\n"
 msgstr ""
 "Användning: %s [-a|-u användare] [-m högst] [-r] [-t dagar] [-l låssek]\n"
 
-#: src/faillog.c:134 src/lastlog.c:103
+#: src/faillog.c:131 src/lastlog.c:96
 #, c-format
 msgid "Unknown User: %s\n"
 msgstr "Okänd användare: %s\n"
 
-#: src/faillog.c:215
+#: src/faillog.c:212
 msgid "Username   Failures  Maximum  Latest\n"
 msgstr "Användarnamn  Felaktiga inloggningar  Högsta  Senaste\n"
 
-#: src/faillog.c:232
+#: src/faillog.c:229
 #, c-format
 msgid "  %s on %s"
 msgstr "  %s på %s"
 
-#: src/faillog.c:236
+#: src/faillog.c:233
 #, c-format
 msgid " [%lds left]"
 msgstr " [%lds kvar]"
 
-#: src/faillog.c:239
+#: src/faillog.c:237
 #, c-format
 msgid " [%lds lock]"
 msgstr " [%lds låsning]"
 
-#: src/gpasswd.c:89
+#: src/gpasswd.c:78
 #, c-format
 msgid "usage: %s [-r|-R] group\n"
 msgstr "Användning: %s [-r|-R] grupp\n"
 
-#: src/gpasswd.c:90
+#: src/gpasswd.c:79
 #, c-format
 msgid "       %s [-a user] group\n"
 msgstr "       %s [-a användare] grupp\n"
 
-#: src/gpasswd.c:91
+#: src/gpasswd.c:80
 #, c-format
 msgid "       %s [-d user] group\n"
 msgstr "       %s [-d användare] grupp\n"
 
-#: src/gpasswd.c:93
+#: src/gpasswd.c:83
 #, c-format
 msgid "       %s [-A user,...] [-M user,...] group\n"
 msgstr "       %s [-A användare,...] [-M användare,...] grupp\n"
 
-#: src/gpasswd.c:96
+#: src/gpasswd.c:85
 #, c-format
 msgid "       %s [-M user,...] group\n"
 msgstr "       %s [-M användare,...] grupp\n"
 
-#: src/gpasswd.c:160 src/gpasswd.c:245
+#: src/gpasswd.c:146 src/gpasswd.c:230
 #, c-format
 msgid "%s: unknown user %s\n"
 msgstr "%s: okänd användare %s\n"
 
-#: src/gpasswd.c:172
+#: src/gpasswd.c:157
 msgid "Permission denied.\n"
 msgstr "Tillåtelse nekas.\n"
 
-#: src/gpasswd.c:257
+#: src/gpasswd.c:243
 #, c-format
 msgid "%s: shadow group passwords required for -A\n"
 msgstr "%s: skuggrupplösenord krävs för -A\n"
 
-#: src/gpasswd.c:308
+#: src/gpasswd.c:294
 msgid "Who are you?\n"
 msgstr "Vem är du?\n"
 
-#: src/gpasswd.c:328 src/newgrp.c:251
+#: src/gpasswd.c:313 src/newgrp.c:297
 #, c-format
 msgid "unknown group: %s\n"
 msgstr "okänd grupp: %s\n"
 
-#: src/gpasswd.c:436
+#: src/gpasswd.c:422
 #, c-format
 msgid "Adding user %s to group %s\n"
 msgstr "Lägger till användare %s till grupp %s\n"
 
-#: src/gpasswd.c:453
+#: src/gpasswd.c:440
 #, c-format
 msgid "Removing user %s from group %s\n"
 msgstr "Tar bort användare %s från grupp %s\n"
 
-#: src/gpasswd.c:466
+#: src/gpasswd.c:454
 #, c-format
 msgid "%s: unknown member %s\n"
 msgstr "%s: okänd medlem %s\n"
 
-#: src/gpasswd.c:513
+#: src/gpasswd.c:501
 #, c-format
 msgid "%s: Not a tty\n"
 msgstr "%s: Inte en tty\n"
 
 #.
-#. * 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.
+#. * 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.
 #.
-#: src/gpasswd.c:535
+#: src/gpasswd.c:522
 #, c-format
 msgid "Changing the password for group %s\n"
 msgstr "Ändrar lösenordet för grupp %s\n"
 
-#: src/gpasswd.c:538
+#: src/gpasswd.c:525
 msgid "New Password: "
 msgstr "Nytt lösenord: "
 
-#: src/gpasswd.c:543 src/passwd.c:422
+#: src/gpasswd.c:530 src/passwd.c:365
 msgid "Re-enter new password: "
 msgstr "Skriv in det nya lösenordet igen: "
 
-#: src/gpasswd.c:555
+#: src/gpasswd.c:542
 msgid "They don't match; try again"
 msgstr "De matchar inte; försök igen"
 
-#: src/gpasswd.c:559
+#: src/gpasswd.c:546
 #, c-format
 msgid "%s: Try again later\n"
 msgstr "%s: Försök igen senare\n"
 
-#: src/gpasswd.c:590
+#: src/gpasswd.c:578
 #, c-format
 msgid "%s: can't get lock\n"
 msgstr "%s: kan inte låsa\n"
 
-#: src/gpasswd.c:596
+#: src/gpasswd.c:584
 #, c-format
 msgid "%s: can't get shadow lock\n"
 msgstr "%s: kan inte låsa skuggfilen\n"
 
-#: src/gpasswd.c:602
+#: src/gpasswd.c:590
 #, c-format
 msgid "%s: can't open file\n"
 msgstr "%s: kan inte öppna filen\n"
 
-#: src/gpasswd.c:614
+#: src/gpasswd.c:602
 #, c-format
 msgid "%s: can't update entry\n"
 msgstr "%s: kan inte uppdatera noteringen\n"
 
-#: src/gpasswd.c:620
+#: src/gpasswd.c:608
 #, c-format
 msgid "%s: can't update shadow entry\n"
 msgstr "%s: kan inte uppdatera noteringen i skuggfilen\n"
 
-#: src/gpasswd.c:626
+#: src/gpasswd.c:615
 #, c-format
 msgid "%s: can't re-write file\n"
 msgstr "%s: kan inte skriva om filen\n"
 
-#: src/gpasswd.c:632
+#: src/gpasswd.c:621
 #, c-format
 msgid "%s: can't re-write shadow file\n"
 msgstr "%s: kan inte skriva om skuggfilen\n"
 
-#: src/gpasswd.c:640
+#: src/gpasswd.c:630
 #, c-format
 msgid "%s: can't unlock file\n"
 msgstr "%s: kan inte låsa upp filen\n"
 
-#: src/gpasswd.c:645
+#: src/gpasswd.c:635
 #, c-format
 msgid "%s: can't update DBM files\n"
 msgstr "%s: kan inte uppdatera DBM-filer\n"
 
-#: src/gpasswd.c:652
+#: src/gpasswd.c:642
 #, c-format
 msgid "%s: can't update DBM shadow files\n"
 msgstr "%s: kan inte uppdatera DBM-skuggfiler\n"
 
-#: src/groupadd.c:111
+#: src/groupadd.c:101
 msgid "usage: groupadd [-g gid [-o]] group\n"
 msgstr "Användning: groupadd [-g gid [-o]] grupp\n"
 
-#: src/groupadd.c:179 src/groupadd.c:202 src/groupmod.c:189 src/groupmod.c:236
-#: src/useradd.c:949 src/usermod.c:546 src/usermod.c:682
+#: src/groupadd.c:167 src/groupadd.c:192 src/groupmod.c:179 src/groupmod.c:228
+#: src/useradd.c:970 src/usermod.c:552 src/usermod.c:695
 #, c-format
 msgid "%s: error adding new group entry\n"
 msgstr "%s: gick inte att lägga till en ny gruppnotering\n"
 
-#: src/groupadd.c:189 src/groupadd.c:212 src/groupmod.c:205 src/useradd.c:960
-#: src/usermod.c:558 src/usermod.c:694
+#: src/groupadd.c:178 src/groupadd.c:203 src/groupmod.c:197 src/useradd.c:981
+#: src/usermod.c:564 src/usermod.c:708
 #, c-format
 msgid "%s: cannot add new dbm group entry\n"
 msgstr "%s: kan inte lägga till en ny dbm-gruppnotering\n"
 
-#: src/groupadd.c:264 src/useradd.c:1014
+#: src/groupadd.c:255 src/useradd.c:1034
 #, c-format
 msgid "%s: name %s is not unique\n"
 msgstr "%s: namnet %s är inte unikt\n"
 
-#: src/groupadd.c:279
-#, c-format
-msgid "%s: gid %ld is not unique\n"
-msgstr "%s: gid %ld är inte unikt\n"
+#: src/groupadd.c:270
+#, fuzzy, c-format
+msgid "%s: gid %u is not unique\n"
+msgstr "%s: uid %ld är inte unikt\n"
 
-#: src/groupadd.c:303
+#: src/groupadd.c:294
 #, c-format
 msgid "%s: can't get unique gid\n"
 msgstr "%s: kan inte hitta ett unikt gid\n"
@@ -921,54 +920,54 @@ msgstr "%s: kan inte hitta ett unikt gid\n"
 #.
 #. * All invalid group names land here.
 #.
-#: src/groupadd.c:327 src/groupmod.c:347
+#: src/groupadd.c:317 src/groupmod.c:341
 #, c-format
 msgid "%s: %s is a not a valid group name\n"
 msgstr "%s: %s är inte ett giltigt gruppnamn\n"
 
-#: src/groupadd.c:356 src/groupmod.c:373
+#: src/groupadd.c:346 src/groupmod.c:366
 #, c-format
 msgid "%s: invalid group %s\n"
 msgstr "%s: ogiltig grupp %s\n"
 
-#: src/groupadd.c:373 src/useradd.c:1290
+#: src/groupadd.c:363 src/useradd.c:1313
 #, c-format
 msgid "%s: -O requires NAME=VALUE\n"
 msgstr "%s: -O kräver NAME=VÄRDE\n"
 
-#: src/groupadd.c:418 src/groupdel.c:173 src/groupmod.c:409 src/useradd.c:1399
-#: src/userdel.c:309 src/usermod.c:570
+#: src/groupadd.c:407 src/groupdel.c:173 src/groupmod.c:401 src/useradd.c:1428
+#: src/userdel.c:312 src/usermod.c:576
 #, c-format
 msgid "%s: cannot rewrite group file\n"
 msgstr "%s: kan inte skriva om gruppfilen\n"
 
-#: src/groupadd.c:424 src/groupdel.c:179 src/groupmod.c:415 src/useradd.c:1407
-#: src/userdel.c:315 src/usermod.c:707
+#: src/groupadd.c:415 src/groupdel.c:179 src/groupmod.c:409 src/useradd.c:1437
+#: src/userdel.c:319 src/usermod.c:722
 #, c-format
 msgid "%s: cannot rewrite shadow group file\n"
 msgstr "%s: kan inte skriva om skuggruppfilen\n"
 
-#: src/groupadd.c:443 src/groupdel.c:198 src/groupmod.c:434 src/userdel.c:395
+#: src/groupadd.c:433 src/groupdel.c:198 src/groupmod.c:427 src/userdel.c:403
 #, c-format
 msgid "%s: unable to lock group file\n"
 msgstr "%s: kan inte låsa gruppfilen\n"
 
-#: src/groupadd.c:447 src/groupdel.c:202 src/groupmod.c:438
+#: src/groupadd.c:438 src/groupdel.c:202 src/groupmod.c:432
 #, c-format
 msgid "%s: unable to open group file\n"
 msgstr "%s: kan inte öppna gruppfilen\n"
 
-#: src/groupadd.c:452 src/groupdel.c:207 src/groupmod.c:443 src/userdel.c:404
+#: src/groupadd.c:445 src/groupdel.c:207 src/groupmod.c:439 src/userdel.c:414
 #, c-format
 msgid "%s: unable to lock shadow group file\n"
 msgstr "%s: kan inte låsa skuggruppfilen\n"
 
-#: src/groupadd.c:457 src/groupdel.c:212 src/groupmod.c:448
+#: src/groupadd.c:451 src/groupdel.c:212 src/groupmod.c:445
 #, c-format
 msgid "%s: unable to open shadow group file\n"
 msgstr "%s: kan inte öppna skuggruppfilen\n"
 
-#: src/groupadd.c:568
+#: src/groupadd.c:562
 #, c-format
 msgid "%s: group %s exists\n"
 msgstr "%s: grupp %s existerar\n"
@@ -977,12 +976,12 @@ msgstr "%s: grupp %s existerar\n"
 msgid "usage: groupdel group\n"
 msgstr "Användning: groupdel grupp\n"
 
-#: src/groupdel.c:110 src/groupmod.c:193 src/groupmod.c:240
+#: src/groupdel.c:110 src/groupmod.c:184 src/groupmod.c:233
 #, c-format
 msgid "%s: error removing group entry\n"
 msgstr "%s: fel under borttagning av gruppnotering\n"
 
-#: src/groupdel.c:122 src/groupmod.c:212
+#: src/groupdel.c:122 src/groupmod.c:204
 #, c-format
 msgid "%s: error removing group dbm entry\n"
 msgstr "%s: fel under borttagning av dbm-gruppnotering\n"
@@ -992,7 +991,7 @@ msgstr "%s: fel under borttagning av dbm-gruppnotering\n"
 msgid "%s: error removing shadow group entry\n"
 msgstr "%s: fel under borttagning av skuggruppnotering\n"
 
-#: src/groupdel.c:150 src/groupmod.c:258
+#: src/groupdel.c:150 src/groupmod.c:254
 #, c-format
 msgid "%s: error removing shadow group dbm entry\n"
 msgstr "%s: fel under borttagning av dbm-skuggruppnotering\n"
@@ -1005,130 +1004,130 @@ msgstr "%s: fel under borttagning av dbm-skuggruppnotering\n"
 msgid "%s: cannot remove user's primary group.\n"
 msgstr "%s: kan inte ta bort användarens primära grupp.\n"
 
-#: src/groupdel.c:355 src/groupmod.c:551
+#: src/groupdel.c:355 src/groupmod.c:550
 #, c-format
 msgid "%s: group %s does not exist\n"
 msgstr "%s: grupp %s existerar inte\n"
 
-#: src/groupdel.c:369 src/groupmod.c:567
+#: src/groupdel.c:369 src/groupmod.c:566
 #, c-format
 msgid "%s: group %s is a NIS group\n"
 msgstr "%s: grupp %s är en NIS-grupp\n"
 
-#: src/groupdel.c:375 src/groupmod.c:573 src/userdel.c:811 src/usermod.c:1023
+#: src/groupdel.c:375 src/groupmod.c:571 src/userdel.c:776 src/usermod.c:1045
 #, c-format
 msgid "%s: %s is the NIS master\n"
 msgstr "%s: %s är NIS-mästeren\n"
 
-#: src/groupmems.c:92
+#: src/groupmems.c:95
 msgid "Member already exists\n"
 msgstr ""
 
-#: src/groupmems.c:121
+#: src/groupmems.c:125
 msgid "Member to remove could not be found\n"
 msgstr ""
 
-#: src/groupmems.c:151
+#: src/groupmems.c:158
 msgid "usage: groupmems -a username | -d username | -D | -l [-g groupname]\n"
 msgstr ""
 
-#: src/groupmems.c:191
+#: src/groupmems.c:201
 msgid "Only root can add members to different groups\n"
 msgstr ""
 
-#: src/groupmems.c:196
+#: src/groupmems.c:206
 msgid "Group access is required\n"
 msgstr ""
 
-#: src/groupmems.c:199
+#: src/groupmems.c:210
 msgid "Not primary owner of current group\n"
 msgstr ""
 
-#: src/groupmems.c:204
+#: src/groupmems.c:215
 #, fuzzy
 msgid "Unable to lock group file\n"
 msgstr "%s: kan inte låsa gruppfilen\n"
 
-#: src/groupmems.c:209
+#: src/groupmems.c:220
 #, fuzzy
 msgid "Unable to open group file\n"
 msgstr "%s: kan inte öppna gruppfilen\n"
 
-#: src/groupmems.c:229
+#: src/groupmems.c:240
 #, fuzzy
 msgid "Cannot close group file\n"
 msgstr "%s: kan inte öppna gruppfilen\n"
 
-#: src/groupmod.c:111
+#: src/groupmod.c:103
 msgid "usage: groupmod [-g gid [-o]] [-n name] group\n"
 msgstr "Användning: groupmod [-g gid [-o]] [-n namn] grupp\n"
 
-#: src/groupmod.c:171
+#: src/groupmod.c:161
 #, c-format
 msgid "%s: %s not found in /etc/group\n"
 msgstr "%s: %s hittades inte i /etc/group\n"
 
-#: src/groupmod.c:252
+#: src/groupmod.c:247
 #, c-format
 msgid "%s: cannot add new dbm shadow group entry\n"
 msgstr "%s: kunde inte lägga till en ny dbm-skuggruppnotering\n"
 
-#: src/groupmod.c:305
-#, c-format
-msgid "%s: %ld is not a unique gid\n"
+#: src/groupmod.c:300
+#, fuzzy, c-format
+msgid "%s: %u is not a unique gid\n"
 msgstr "%s: %ld är inte ett unikt gid\n"
 
-#: src/groupmod.c:336
+#: src/groupmod.c:330
 #, c-format
 msgid "%s: %s is not a unique name\n"
 msgstr "%s: %s är inte ett unikt namn\n"
 
-#: src/groups.c:62
+#: src/groups.c:59
 #, c-format
 msgid "unknown user %s\n"
 msgstr "okänd användare %s\n"
 
-#: src/grpck.c:98
+#: src/grpck.c:87
 #, fuzzy, c-format
-msgid "Usage: %s [ -sr ] [ group [ gshadow ] ]\n"
-msgstr "Användning: %s [ -r ] [ grupp [ gshadow ] ]\n"
+msgid "Usage: %s [-r] [-s] [group [gshadow]]\n"
+msgstr "Användning: %s [-s][-r] [grupp [gshadow]]\n"
 
-#: src/grpck.c:100
+#: src/grpck.c:90
 #, fuzzy, c-format
-msgid "Usage: %s [ -sr ] [ group ]\n"
-msgstr "Användning: %s [ -r ] [ grupp ]\n"
+msgid "Usage: %s [-r] [-s] [group]\n"
+msgstr "Användning: %s [-s][-r] [grupp]\n"
 
-#: src/grpck.c:119 src/pwck.c:119
+#: src/grpck.c:108 src/pwck.c:108
 msgid "No"
 msgstr "Nej"
 
-#: src/grpck.c:204 src/pwck.c:186
+#: src/grpck.c:192 src/pwck.c:175
 #, c-format
 msgid "%s: -s and -r are incompatibile\n"
 msgstr ""
 
-#: src/grpck.c:244 src/grpck.c:252 src/pwck.c:226 src/pwck.c:235
+#: src/grpck.c:232 src/grpck.c:242 src/pwck.c:215 src/pwck.c:225
 #, c-format
 msgid "%s: cannot lock file %s\n"
 msgstr "%s: kan inte låsa filen %s\n"
 
-#: src/grpck.c:267 src/grpck.c:275 src/mkpasswd.c:216 src/pwck.c:251
-#: src/pwck.c:260
+#: src/grpck.c:259 src/grpck.c:268 src/mkpasswd.c:202 src/pwck.c:242
+#: src/pwck.c:251
 #, c-format
 msgid "%s: cannot open file %s\n"
 msgstr "%s: kan inte öppna filen %s\n"
 
 #.
-#. * Tell the user this entire line is bogus and
-#. * ask them to delete it.
+#. * Tell the user this entire line is bogus and ask
+#. * them to delete it.
 #.
-#: src/grpck.c:317
+#: src/grpck.c:311
 msgid "invalid group file entry\n"
 msgstr "felaktig gruppfilsnotering\n"
 
-#: src/grpck.c:318 src/grpck.c:381 src/grpck.c:473 src/grpck.c:536
-#: src/grpck.c:553 src/pwck.c:305 src/pwck.c:367 src/pwck.c:474 src/pwck.c:536
-#: src/pwck.c:560
+#: src/grpck.c:312 src/grpck.c:375 src/grpck.c:458 src/grpck.c:521
+#: src/grpck.c:538 src/pwck.c:296 src/pwck.c:358 src/pwck.c:457 src/pwck.c:519
+#: src/pwck.c:543
 #, c-format
 msgid "delete line `%s'? "
 msgstr "ta bort rad \"%s\"? "
@@ -1137,35 +1136,30 @@ msgstr "ta bort rad \"%s\"? "
 #. * Tell the user this entry is a duplicate of
 #. * another and ask them to delete it.
 #.
-#: src/grpck.c:380
+#: src/grpck.c:374
 msgid "duplicate group entry\n"
 msgstr "dubblett av gruppnotering\n"
 
-#: src/grpck.c:397
+#: src/grpck.c:391
 #, c-format
 msgid "invalid group name `%s'\n"
 msgstr "ogiltigt gruppnamn \"%s\"\n"
 
-#: src/grpck.c:407
-#, c-format
-msgid "group %s: bad GID (%d)\n"
-msgstr "grupp %s: felaktigt GID (%d)\n"
-
-#: src/grpck.c:433
+#: src/grpck.c:418
 #, c-format
 msgid "group %s: no user %s\n"
 msgstr "grupp %s: användaren %s finns inte\n"
 
-#: src/grpck.c:435 src/grpck.c:604
+#: src/grpck.c:420 src/grpck.c:590
 #, c-format
 msgid "delete member `%s'? "
 msgstr "ta bort medlem \"%s\"? "
 
 #.
-#. * Tell the user this entire line is bogus and
-#. * ask them to delete it.
+#. * Tell the user this entire line is bogus and ask
+#. * them to delete it.
 #.
-#: src/grpck.c:472
+#: src/grpck.c:457
 msgid "invalid shadow group file entry\n"
 msgstr "felaktig skuggruppfilsnotering\n"
 
@@ -1173,204 +1167,201 @@ msgstr "felaktig skuggruppfilsnotering\n"
 #. * Tell the user this entry is a duplicate of
 #. * another and ask them to delete it.
 #.
-#: src/grpck.c:535
+#: src/grpck.c:520
 msgid "duplicate shadow group entry\n"
 msgstr "dubblett av skuggruppfilsnotering\n"
 
-#: src/grpck.c:552
+#: src/grpck.c:537
 msgid "no matching group file entry\n"
 msgstr "inga matchande gruppfilsnoteringar\n"
 
-#: src/grpck.c:572
+#: src/grpck.c:558
 #, c-format
 msgid "shadow group %s: no administrative user %s\n"
 msgstr "skuggrupp %s: finns ingen administrativ användare %s\n"
 
-#: src/grpck.c:574
+#: src/grpck.c:560
 #, c-format
 msgid "delete administrative member `%s'? "
 msgstr "ta bort administrativa medlemmen \"%s\"? "
 
-#: src/grpck.c:602
+#: src/grpck.c:588
 #, c-format
 msgid "shadow group %s: no user %s\n"
 msgstr "skuggrupp %s: finns ingen användare %s\n"
 
-#: src/grpck.c:630 src/grpck.c:636 src/pwck.c:592 src/pwck.c:600
+#: src/grpck.c:616 src/grpck.c:622 src/pwck.c:577 src/pwck.c:585
 #, c-format
 msgid "%s: cannot update file %s\n"
 msgstr "%s: kan inte uppdatera filen %s\n"
 
-#: src/grpck.c:660 src/pwck.c:626
+#: src/grpck.c:647 src/pwck.c:612
 #, c-format
 msgid "%s: the files have been updated; run mkpasswd\n"
 msgstr "%s: filerna är uppdaterade; kör mkpasswd\n"
 
-#: src/grpck.c:661 src/grpck.c:665 src/pwck.c:627 src/pwck.c:631
+#: src/grpck.c:648 src/grpck.c:652 src/pwck.c:613 src/pwck.c:617
 #, c-format
 msgid "%s: no changes\n"
 msgstr "%s: inga ändringar\n"
 
-#: src/grpck.c:664 src/pwck.c:630
+#: src/grpck.c:651 src/pwck.c:616
 #, c-format
 msgid "%s: the files have been updated\n"
 msgstr "%s: filerna är uppdaterade\n"
 
-#: src/grpconv.c:62 src/grpunconv.c:63
+#: src/grpconv.c:60 src/grpunconv.c:56
 #, c-format
 msgid "%s: can't lock group file\n"
 msgstr "%s: kan inte låsa gruppfilen\n"
 
-#: src/grpconv.c:67 src/grpunconv.c:68
+#: src/grpconv.c:65 src/grpunconv.c:61
 #, c-format
 msgid "%s: can't open group file\n"
 msgstr "%s: kan inte öppna gruppfilen\n"
 
-#: src/grpconv.c:72 src/grpunconv.c:73
+#: src/grpconv.c:70 src/grpunconv.c:66
 #, c-format
 msgid "%s: can't lock shadow group file\n"
 msgstr "%s: kan inte låsa skuggruppfilen\n"
 
-#: src/grpconv.c:77 src/grpunconv.c:78
+#: src/grpconv.c:76 src/grpunconv.c:72
 #, c-format
 msgid "%s: can't open shadow group file\n"
 msgstr "%s: kan inte öppna skuggruppfilen\n"
 
-#.
-#. * This shouldn't happen (the entry exists) but...
-#.
-#: src/grpconv.c:93
+#: src/grpconv.c:94
 #, c-format
 msgid "%s: can't remove shadow group %s\n"
 msgstr "%s: kan inte ta bort skuggruppen %s\n"
 
-#: src/grpconv.c:134 src/pwconv.c:160
+#: src/grpconv.c:138 src/pwconv.c:153
 #, c-format
 msgid "%s: can't update shadow entry for %s\n"
 msgstr "%s: kan inte uppdatera skuggnoteringen för %s\n"
 
-#: src/grpconv.c:143 src/grpunconv.c:94
+#: src/grpconv.c:148 src/grpunconv.c:91
 #, c-format
 msgid "%s: can't update entry for group %s\n"
 msgstr "%s: kan inte uppdatera noteringen för gruppen %s\n"
 
-#: src/grpconv.c:150 src/grpunconv.c:102
+#: src/grpconv.c:155 src/grpunconv.c:99
 #, c-format
 msgid "%s: can't update shadow group file\n"
 msgstr "%s: kan inte uppdatera skuggruppfilen\n"
 
-#: src/grpconv.c:154 src/grpunconv.c:107
+#: src/grpconv.c:160 src/grpunconv.c:105
 #, c-format
 msgid "%s: can't update group file\n"
 msgstr "%s: kan inte uppdatera gruppfilen\n"
 
-#: src/grpconv.c:169 src/grpunconv.c:128
+#: src/grpconv.c:175 src/grpunconv.c:127
 #, c-format
 msgid "%s: not configured for shadow group support.\n"
 msgstr "%s: inte konfigurerad med stöd för skuggrupper.\n"
 
-#: src/grpunconv.c:112
+#: src/grpunconv.c:110
 #, c-format
 msgid "%s: can't delete shadow group file\n"
 msgstr "%s: kan inte ta bort skuggruppfilen\n"
 
-#: src/id.c:56
-msgid "usage: id [ -a ]\n"
-msgstr "Användning: id [ -a ]\n"
+#: src/id.c:53
+msgid "usage: id [-a]\n"
+msgstr "Användning: id [-a]\n"
 
-#: src/id.c:58
+#: src/id.c:55
 msgid "usage: id\n"
 msgstr "Användning: id\n"
 
-#: src/id.c:127
-#, c-format
-msgid "uid=%d(%s)"
+#: src/id.c:123
+#, fuzzy, c-format
+msgid "uid=%u(%s)"
 msgstr "uid=%d(%s)"
 
-#: src/id.c:129
-#, c-format
-msgid "uid=%d"
+#: src/id.c:125
+#, fuzzy, c-format
+msgid "uid=%u"
 msgstr "uid=%d"
 
-#: src/id.c:133
-#, c-format
-msgid " gid=%d(%s)"
+#: src/id.c:129
+#, fuzzy, c-format
+msgid " gid=%u(%s)"
 msgstr " gid=%d(%s)"
 
-#: src/id.c:135
-#, c-format
-msgid " gid=%d"
+#: src/id.c:131
+#, fuzzy, c-format
+msgid " gid=%u"
 msgstr " gid=%d"
 
-#: src/id.c:145
-#, c-format
-msgid " euid=%d(%s)"
+#: src/id.c:141
+#, fuzzy, c-format
+msgid " euid=%u(%s)"
 msgstr " euid=%d(%s)"
 
-#: src/id.c:147
-#, c-format
-msgid " euid=%d"
+#: src/id.c:143
+#, fuzzy, c-format
+msgid " euid=%u"
 msgstr " euid=%d"
 
-#: src/id.c:152
-#, c-format
-msgid " egid=%d(%s)"
+#: src/id.c:148
+#, fuzzy, c-format
+msgid " egid=%u(%s)"
 msgstr " egid=%d(%s)"
 
-#: src/id.c:154
-#, c-format
-msgid " egid=%d"
+#: src/id.c:150
+#, fuzzy, c-format
+msgid " egid=%u"
 msgstr " egid=%d"
 
 #.
-#. * Start off the group message.  It will be of the format
+#. * Start off the group message. It will be of the format
 #. *
-#. *   groups=###(aaa),###(aaa),###(aaa)
+#. *      groups=###(aaa),###(aaa),###(aaa)
 #. *
 #. * where "###" is a numerical value and "aaa" is the
 #. * corresponding name for each respective numerical value.
 #.
-#: src/id.c:175
+#: src/id.c:169
 msgid " groups="
 msgstr " grupper="
 
-#: src/lastlog.c:116 src/lastlog.c:120
+#: src/lastlog.c:110 src/lastlog.c:116
 #, c-format
 msgid "Usage: %s [<-u|--login> login-name] [<-t|--time> days] [<-h|--help>]\n"
 msgstr ""
 
-#: src/lastlog.c:184
+#: src/lastlog.c:181
 msgid "Username         Port     From             Latest\n"
 msgstr "Användarnamn     Port     Från             Senaste\n"
 
-#: src/lastlog.c:186
+#: src/lastlog.c:183
 msgid "Username                Port     Latest\n"
 msgstr "Användarnamn            Port     Senaste\n"
 
-#: src/lastlog.c:200
+#: src/lastlog.c:197
 msgid "**Never logged in**"
 msgstr "**Aldrig inloggad**"
 
-#: src/login.c:201
+#: src/login.c:183
 #, c-format
 msgid "usage: %s [-p] [name]\n"
 msgstr "Användning: %s [-p] [namn]\n"
 
-#: src/login.c:204
+#: src/login.c:186
 #, c-format
 msgid "       %s [-p] [-h host] [-f name]\n"
 msgstr "       %s [-p] [-h värd] [-f namn]\n"
 
-#: src/login.c:206
+#: src/login.c:188
 #, c-format
 msgid "       %s [-p] -r host\n"
 msgstr "       %s [-p] -r värd\n"
 
-#: src/login.c:289
+#: src/login.c:272
 msgid "Invalid login time\n"
 msgstr "Felaktig inloggningstid\n"
 
-#: src/login.c:344
+#: src/login.c:327
 msgid ""
 "\n"
 "System closed for routine maintenance\n"
@@ -1378,7 +1369,7 @@ msgstr ""
 "\n"
 "Systemet är stängt för rutinunderhåll\n"
 
-#: src/login.c:354
+#: src/login.c:338
 msgid ""
 "\n"
 "[Disconnect bypassed -- root login allowed.]\n"
@@ -1386,7 +1377,7 @@ msgstr ""
 "\n"
 "[Nerkoppling kringgicks -- root inloggning tillåten.]\n"
 
-#: src/login.c:393
+#: src/login.c:375
 #, c-format
 msgid ""
 "\n"
@@ -1395,17 +1386,17 @@ msgstr ""
 "\n"
 "Inloggningen avbröts efter %d sekunders inaktivitet.\n"
 
-#: src/login.c:695
+#: src/login.c:687
 #, c-format
 msgid " on `%.100s' from `%.200s'"
 msgstr " på \"%.100s\" från \"%.200s\""
 
-#: src/login.c:697
+#: src/login.c:691
 #, c-format
 msgid " on `%.100s'"
 msgstr " på \"%.100s\""
 
-#: src/login.c:837
+#: src/login.c:850
 #, c-format
 msgid ""
 "\n"
@@ -1414,237 +1405,232 @@ msgstr ""
 "\n"
 "%s användare: "
 
-#: src/login.c:839
+#: src/login.c:853
 msgid "login: "
 msgstr "användare: "
 
-#: src/login.c:1029 src/sulogin.c:231
+#: src/login.c:1069 src/sulogin.c:233
 msgid "Login incorrect"
 msgstr "Felaktig inloggning"
 
-#: src/login.c:1217
+#: src/login.c:1263
 msgid "Warning: login re-enabled after temporary lockout.\n"
 msgstr "Varning: inloggning på nytt aktiv efter den temporära utelåsningen.\n"
 
-#: src/login.c:1227
+#: src/login.c:1276
 #, c-format
 msgid "Last login: %s on %s"
 msgstr "Senaste inloggning: %s på %s"
 
-#: src/login.c:1230
+#: src/login.c:1279
 #, c-format
 msgid "Last login: %.19s on %s"
 msgstr "Senaste inloggning: %.19s på %s"
 
-#: src/login.c:1235
+#: src/login.c:1285
 #, c-format
 msgid " from %.*s"
 msgstr " från %.*s"
 
-#: src/login.c:1307
+#: src/login.c:1362
 msgid "Starting rad_login\n"
 msgstr "Startar rad_login\n"
 
-#: src/mkpasswd.c:49
+#: src/mkpasswd.c:47
 #, c-format
 msgid "%s: no DBM database on system - no action performed\n"
 msgstr "%s: ingen DBM-databas på systemet - ingen åtgärd genomfördes\n"
 
-#: src/mkpasswd.c:74 src/mkpasswd.c:382
-#, c-format
-msgid "Usage: %s [ -vf ] [ -p|g|sp|sg ] file\n"
-msgstr "Användning: %s [ -vf ] [ -p|g|sp|sg ] fil\n"
-
-#: src/mkpasswd.c:76 src/mkpasswd.c:384
-#, c-format
-msgid "Usage: %s [ -vf ] [ -p|g|sp ] file\n"
-msgstr "Användning: %s [ -vf ] [ -p|g|sp ] fil\n"
-
-#: src/mkpasswd.c:79 src/mkpasswd.c:387
-#, c-format
-msgid "Usage: %s [ -vf ] [ -p|g ] file\n"
-msgstr "Användning: %s [ -vf ] [ -p|g ] fil\n"
-
-#: src/mkpasswd.c:245 src/mkpasswd.c:249
+#: src/mkpasswd.c:232 src/mkpasswd.c:237
 #, c-format
 msgid "%s: cannot overwrite file %s\n"
 msgstr "%s: kan inte skriva över filen %s\n"
 
-#: src/mkpasswd.c:263
+#: src/mkpasswd.c:252
 #, c-format
 msgid "%s: cannot open DBM files for %s\n"
 msgstr "%s: kan inte öppna DBM-filer för %s\n"
 
-#: src/mkpasswd.c:296
+#: src/mkpasswd.c:287
 #, c-format
 msgid "%s: the beginning with "
 msgstr "%s: början med "
 
-#: src/mkpasswd.c:296
+#: src/mkpasswd.c:288
 #, fuzzy
 msgid " is too long\n"
 msgstr "%s: för långa fält\n"
 
-#: src/mkpasswd.c:321
+#: src/mkpasswd.c:315
 #, c-format
 msgid "%s: error parsing line \"%s\"\n"
 msgstr "%s: fel under analysering av rad \"%s\"\n"
 
-#: src/mkpasswd.c:326 src/mkpasswd.c:328 src/mkpasswd.c:330 src/mkpasswd.c:332
+#: src/mkpasswd.c:323 src/mkpasswd.c:328 src/mkpasswd.c:333 src/mkpasswd.c:338
 msgid "adding record for name "
 msgstr "lägger till notering för namn "
 
-#: src/mkpasswd.c:326 src/mkpasswd.c:328 src/mkpasswd.c:330 src/mkpasswd.c:332
-#: src/mkpasswd.c:336 src/mkpasswd.c:341 src/mkpasswd.c:345 src/mkpasswd.c:349
+#: src/mkpasswd.c:324 src/mkpasswd.c:329 src/mkpasswd.c:334 src/mkpasswd.c:339
+#: src/mkpasswd.c:345 src/mkpasswd.c:351 src/mkpasswd.c:356 src/mkpasswd.c:361
 msgid "\n"
 msgstr ""
 
-#: src/mkpasswd.c:336 src/mkpasswd.c:341 src/mkpasswd.c:345 src/mkpasswd.c:349
+#: src/mkpasswd.c:344 src/mkpasswd.c:350 src/mkpasswd.c:355 src/mkpasswd.c:360
 #, c-format
 msgid "%s: error adding record for "
 msgstr "%s: fel under tillägg av notering för "
 
-#: src/mkpasswd.c:367
+#: src/mkpasswd.c:378
 #, c-format
 msgid "added %d entries, longest was %d\n"
 msgstr "lade till %d noteringar, den längsta var %d\n"
 
-#: src/newgrp.c:66
-msgid "usage: newgrp [ - ] [ group ]\n"
-msgstr "Användning: newgrp [ - ] [ grupp ]\n"
+#: src/mkpasswd.c:392
+#, c-format
+msgid "Usage: %s [-vf] [-p|g|sp|sg] file\n"
+msgstr "Användning: %s [-vf] [-p|g|sp|sg] fil\n"
 
-#: src/newgrp.c:68
-#, fuzzy
-msgid "usage: sg group [[-c] command ]\n"
-msgstr "Användning: sg grupp [ kommando ]\n"
+#: src/mkpasswd.c:395
+#, c-format
+msgid "Usage: %s [-vf] [-p|g|sp] file\n"
+msgstr "Användning: %s [-vf] [-p|g|sp] fil\n"
 
-#: src/newgrp.c:125
+#: src/mkpasswd.c:398
 #, c-format
-msgid "unknown uid: %d\n"
+msgid "Usage: %s [-vf] [-p|g] file\n"
+msgstr "Användning: %s [-vf] [-p|g] fil\n"
+
+#: src/newgrp.c:61
+msgid "usage: newgrp [-] [group]\n"
+msgstr "Användning: newgrp [-] [grupp]\n"
+
+#: src/newgrp.c:63
+#, fuzzy
+msgid "usage: sg group [[-c] command]\n"
+msgstr "Användning: sg grupp [kommando]\n"
+
+#: src/newgrp.c:136
+#, fuzzy, c-format
+msgid "unknown uid: %u\n"
 msgstr "okänt uid: %d\n"
 
-#: src/newgrp.c:201
-#, c-format
-msgid "unknown gid: %ld\n"
+#: src/newgrp.c:219
+#, fuzzy, c-format
+msgid "unknown gid: %lu\n"
 msgstr "okänt gid: %ld\n"
 
-#: src/newgrp.c:245
-#, c-format
-msgid "unknown gid: %d\n"
-msgstr "okänt gid: %d\n"
-
-#: src/newgrp.c:323 src/newgrp.c:332
+#: src/newgrp.c:365 src/newgrp.c:374
 msgid "Sorry.\n"
 msgstr "Tyvärr.\n"
 
-#: src/newgrp.c:364
+#: src/newgrp.c:472
 msgid "too many groups\n"
 msgstr "för många grupper\n"
 
-#: src/newusers.c:82
+#: src/newusers.c:78
 #, c-format
-msgid "Usage: %s [ input ]\n"
-msgstr "Användning: %s [ indata ]\n"
+msgid "Usage: %s [input]\n"
+msgstr "Användning: %s [indata]\n"
 
-#: src/newusers.c:414
+#: src/newusers.c:407
 #, c-format
 msgid "%s: can't lock /etc/passwd.\n"
 msgstr "%s: kan inte låsa /etc/passwd.\n"
 
-#: src/newusers.c:425
+#: src/newusers.c:419
 #, c-format
 msgid "%s: can't lock files, try again later\n"
 msgstr "%s: kan inte låsa filerna, försök igen senare\n"
 
-#: src/newusers.c:440
+#: src/newusers.c:435
 #, c-format
 msgid "%s: can't open files\n"
 msgstr "%s: kan inte öppna filerna\n"
 
-#: src/newusers.c:485
+#: src/newusers.c:480
 #, c-format
 msgid "%s: line %d: invalid line\n"
 msgstr "%s: rad %d: ogiltig rad\n"
 
-#: src/newusers.c:503
+#: src/newusers.c:499
 #, c-format
 msgid "%s: line %d: can't create GID\n"
 msgstr "%s: rad %d: kan inte skapa GID\n"
 
-#: src/newusers.c:519
+#: src/newusers.c:515
 #, c-format
 msgid "%s: line %d: can't create UID\n"
 msgstr "%s: rad %d: kan inte skapa UID\n"
 
-#: src/newusers.c:531
+#: src/newusers.c:528
 #, c-format
 msgid "%s: line %d: cannot find user %s\n"
 msgstr "%s: rad %d: kan inte hitta användaren %s\n"
 
-#: src/newusers.c:539
+#: src/newusers.c:537
 #, c-format
 msgid "%s: line %d: can't update password\n"
 msgstr "%s: rad %d: kan inte uppdatera lösenordet\n"
 
-#: src/newusers.c:556
+#: src/newusers.c:555
 #, c-format
 msgid "%s: line %d: mkdir failed\n"
 msgstr "%s: rad %d: mkdir misslyckades\n"
 
-#: src/newusers.c:560
+#: src/newusers.c:561
 #, c-format
 msgid "%s: line %d: chown failed\n"
 msgstr "%s: rad %d: chown misslyckades\n"
 
-#: src/newusers.c:569
+#: src/newusers.c:571
 #, c-format
 msgid "%s: line %d: can't update entry\n"
 msgstr "%s: rad %d: kan inte uppdatera notering\n"
 
-#: src/newusers.c:600
+#: src/newusers.c:603
 #, c-format
 msgid "%s: error updating files\n"
 msgstr "%s: kunde inte uppdatera filerna\n"
 
-#: src/passwd.c:239
+#: src/passwd.c:174
 #, c-format
-msgid "usage: %s [ -f | -s ] [ name ]\n"
-msgstr "Användning: %s [ -f | -s ] [ namn ]\n"
+msgid "usage: %s [-f|-s] [name]\n"
+msgstr "Användning: %s [-f|-s] [namn]\n"
 
-#: src/passwd.c:242
+#: src/passwd.c:178
 #, c-format
-msgid "       %s [ -x max ] [ -n min ] [ -w warn ] [ -i inact ] name\n"
-msgstr "       %s [ -x högst ] [ -n minst ] [ -w varna ] [ -i inaktiv ] namn\n"
+msgid "       %s [-x max] [-n min] [-w warn] [-i inact] name\n"
+msgstr "       %s [-x högst] [-n minst] [-w varna] [-i inaktiv] namn\n"
 
-#: src/passwd.c:245
+#: src/passwd.c:180
 #, c-format
-msgid "       %s { -l | -u | -d | -S | -e } name\n"
-msgstr "       %s { -l | -u | -d | -S | -e } namn\n"
+msgid "       %s {-l|-u|-d|-S|-e} name\n"
+msgstr "       %s {-l|-u|-d|-S|-e} namn\n"
 
-#: src/passwd.c:347
+#: src/passwd.c:283
 #, c-format
 msgid "User %s has a TCFS key, his old password is required.\n"
 msgstr "Användare %s har en TCFS-nyckel, hans förra lösenord krävs.\n"
 
-#: src/passwd.c:348
+#: src/passwd.c:286
 msgid "You can use -t option to force the change.\n"
 msgstr "Du kan använda flaggan -t för att påtvinga ändringen.\n"
 
-#: src/passwd.c:354
+#: src/passwd.c:292
 msgid "Old password: "
 msgstr "Förra lösenordet: "
 
-#: src/passwd.c:361
+#: src/passwd.c:301
 #, c-format
 msgid "Incorrect password for `%s'\n"
 msgstr "Felaktigt lösenord för \"%s\"\n"
 
-#: src/passwd.c:374
+#: src/passwd.c:314
 #, c-format
 msgid "Warning: user %s has a TCFS key.\n"
 msgstr "Varning: användare %s har en TCFS-nyckel.\n"
 
-#: src/passwd.c:392
+#: src/passwd.c:333
 #, c-format
 msgid ""
 "Enter the new password (minimum of %d, maximum of %d characters)\n"
@@ -1653,15 +1639,15 @@ msgstr ""
 "Skriv in det nya lösenordet (minst %d, högst %d tecken)\n"
 "Var god använd en kombination av versaler, gemener och siffror.\n"
 
-#: src/passwd.c:399
+#: src/passwd.c:339
 msgid "New password: "
 msgstr "Nytt lösenord: "
 
-#: src/passwd.c:409
+#: src/passwd.c:350
 msgid "Try again.\n"
 msgstr "Försök igen.\n"
 
-#: src/passwd.c:418
+#: src/passwd.c:361
 msgid ""
 "\n"
 "Warning: weak password (enter it again to use it anyway).\n"
@@ -1669,90 +1655,90 @@ msgstr ""
 "\n"
 "Varning: svagt lösenord (skriv in det igen för att använda det ändå).\n"
 
-#: src/passwd.c:427
+#: src/passwd.c:371
 msgid "They don't match; try again.\n"
 msgstr "De matchar inte; försök igen.\n"
 
-#: src/passwd.c:512 src/passwd.c:528
+#: src/passwd.c:451 src/passwd.c:469
 #, c-format
 msgid "The password for %s cannot be changed.\n"
 msgstr "Lösenordet för %s kan inte bytas.\n"
 
-#: src/passwd.c:556
+#: src/passwd.c:494
 #, c-format
 msgid "Sorry, the password for %s cannot be changed yet.\n"
 msgstr "Tyvärr, lösenordet för %s kan inte ändras än.\n"
 
-#: src/passwd.c:693
+#: src/passwd.c:614
 #, c-format
 msgid "%s: out of memory\n"
 msgstr "%s: slut på minne\n"
 
-#: src/passwd.c:845
+#: src/passwd.c:769
 msgid "Cannot lock the TCFS key database; try again later\n"
 msgstr "Kan inte låsa TCFS-nyckeldatabasen; försök igen senare\n"
 
-#: src/passwd.c:851
+#: src/passwd.c:777
 msgid "Cannot open the TCFS key database.\n"
 msgstr "Kan inte öppna TCFS-nyckeldatabasen.\n"
 
-#: src/passwd.c:857
+#: src/passwd.c:785
 msgid "Error updating the TCFS key database.\n"
 msgstr "Fel under uppdatering av TCFS-nyckeldatabasen.\n"
 
-#: src/passwd.c:862
+#: src/passwd.c:792
 msgid "Cannot commit TCFS changes.\n"
 msgstr "Kan inte utföra TCFS ändringar.\n"
 
-#: src/passwd.c:1069
+#: src/passwd.c:975
 #, c-format
 msgid "%s: Cannot execute %s"
 msgstr "%s: Kan inte starta %s"
 
-#: src/passwd.c:1176
+#: src/passwd.c:1077
 #, c-format
 msgid "%s: repository %s not supported\n"
 msgstr "%s: förvaringsplatsen %s stöds ej\n"
 
-#: src/passwd.c:1263
+#: src/passwd.c:1152
 #, c-format
 msgid "%s: Permission denied\n"
 msgstr "%s: Tillåtelse nekas\n"
 
-#: src/passwd.c:1287
+#: src/passwd.c:1176
 #, c-format
 msgid "You may not change the password for %s.\n"
 msgstr "Du får inte ändra lösenordet för %s.\n"
 
-#: src/passwd.c:1352
+#: src/passwd.c:1242
 #, c-format
 msgid "Changing password for %s\n"
 msgstr "Ändrar lösenord för %s\n"
 
-#: src/passwd.c:1356
+#: src/passwd.c:1246
 #, c-format
 msgid "The password for %s is unchanged.\n"
 msgstr "Lösenordet för %s är oförändrat.\n"
 
-#: src/passwd.c:1412
+#: src/passwd.c:1297
 msgid "Password changed.\n"
 msgstr "Lösenordet ändrat.\n"
 
-#: src/pwck.c:98
+#: src/pwck.c:87
 #, fuzzy, c-format
-msgid "Usage: %s [ -sqr ] [ passwd [ shadow ] ]\n"
-msgstr "Användning: %s [ -qr ] [ passwd [ shadow ] ]\n"
+msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+msgstr "Användning: %s [-qr] [passwd [shadow]]\n"
 
-#: src/pwck.c:100
+#: src/pwck.c:90
 #, fuzzy, c-format
-msgid "Usage: %s [ -sqr ] [ passwd ]\n"
-msgstr "Användning: %s [ -qr ] [ passwd ]\n"
+msgid "Usage: %s [-q] [-r] [-s] [passwd]\n"
+msgstr "Användning: %s [-qr] [passwd]\n"
 
 #.
-#. * Tell the user this entire line is bogus and
-#. * ask them to delete it.
+#. * Tell the user this entire line is bogus and ask
+#. * them to delete it.
 #.
-#: src/pwck.c:304
+#: src/pwck.c:295
 msgid "invalid password file entry\n"
 msgstr "felaktig notering i lösenordsfilen\n"
 
@@ -1760,32 +1746,24 @@ msgstr "felaktig notering i l
 #. * Tell the user this entry is a duplicate of
 #. * another and ask them to delete it.
 #.
-#: src/pwck.c:366
+#: src/pwck.c:357
 msgid "duplicate password entry\n"
 msgstr "dubblett av lösenords notering\n"
 
-#: src/pwck.c:382
+#: src/pwck.c:373
 #, c-format
 msgid "invalid user name `%s'\n"
 msgstr "ogiltigt användarnamn \"%s\"\n"
 
-#: src/pwck.c:392
-#, c-format
-msgid "user %s: bad UID (%d)\n"
-msgstr "användare %s: felaktigt UID (%d)\n"
-
 #.
 #. * No primary group, just give a warning
 #.
-#: src/pwck.c:407
-#, c-format
-msgid "user %s: no group %d\n"
+#: src/pwck.c:388
+#, fuzzy, c-format
+msgid "user %s: no group %u\n"
 msgstr "användare %s: ingen grupp %d\n"
 
-#.
-#. * Home directory doesn't exist, give a warning
-#.
-#: src/pwck.c:422
+#: src/pwck.c:404
 #, c-format
 msgid "user %s: directory %s does not exist\n"
 msgstr "användare %s: katalogen %s finns inte\n"
@@ -1793,16 +1771,16 @@ msgstr "anv
 #.
 #. * Login shell doesn't exist, give a warning
 #.
-#: src/pwck.c:437
+#: src/pwck.c:420
 #, c-format
 msgid "user %s: program %s does not exist\n"
 msgstr "användare %s: programmet %s finns inte\n"
 
 #.
-#. * Tell the user this entire line is bogus and
-#. * ask them to delete it.
+#. * Tell the user this entire line is bogus and ask
+#. * them to delete it.
 #.
-#: src/pwck.c:473
+#: src/pwck.c:456
 msgid "invalid shadow password file entry\n"
 msgstr "felaktig notering i skugglösenordsfilen\n"
 
@@ -1810,7 +1788,7 @@ msgstr "felaktig notering i skuggl
 #. * Tell the user this entry is a duplicate of
 #. * another and ask them to delete it.
 #.
-#: src/pwck.c:535
+#: src/pwck.c:518
 msgid "duplicate shadow password entry\n"
 msgstr "dubblett av notering i skugglösenordsfilen\n"
 
@@ -1818,70 +1796,70 @@ msgstr "dubblett av notering i skuggl
 #. * Tell the user this entry has no matching
 #. * /etc/passwd entry and ask them to delete it.
 #.
-#: src/pwck.c:559
+#: src/pwck.c:542
 msgid "no matching password file entry\n"
 msgstr "ingen matchande notering i lösenordsfilen\n"
 
-#: src/pwck.c:576
+#: src/pwck.c:560
 #, c-format
 msgid "user %s: last password change in the future\n"
 msgstr "användare %s: senaste lösenordsändring i framtiden\n"
 
-#: src/pwconv.c:94 src/pwunconv.c:99
+#: src/pwconv.c:84 src/pwunconv.c:93
 #, c-format
 msgid "%s: can't lock passwd file\n"
 msgstr "%s: kan inte låsa lösenordsfilen\n"
 
-#: src/pwconv.c:99 src/pwunconv.c:104
+#: src/pwconv.c:89 src/pwunconv.c:98
 #, c-format
 msgid "%s: can't open passwd file\n"
 msgstr "%s: kan inte öppna lösenordsfilen\n"
 
-#: src/pwconv.c:126
+#: src/pwconv.c:117
 #, c-format
 msgid "%s: can't remove shadow entry for %s\n"
 msgstr "%s: kan inte ta bort notering i skugglösenordsfilen för %s\n"
 
-#: src/pwconv.c:169
+#: src/pwconv.c:163
 #, c-format
 msgid "%s: can't update passwd entry for %s\n"
 msgstr "%s: kan inte uppdatera noteringen i lösenordsfilen för %s\n"
 
-#: src/pwconv.c:176
+#: src/pwconv.c:170
 #, c-format
 msgid "%s: can't update shadow file\n"
 msgstr "%s: kan inte uppdatera skuggfilen\n"
 
-#: src/pwconv.c:180
+#: src/pwconv.c:175
 #, c-format
 msgid "%s: can't update passwd file\n"
 msgstr "%s: kan inte uppdatera lösenordsfilen\n"
 
-#: src/pwunconv.c:53
+#: src/pwunconv.c:50
 #, c-format
 msgid "%s: Shadow passwords are not configured.\n"
 msgstr "%s: Shadowlösenord är inte konfigurerade.\n"
 
-#: src/pwunconv.c:162
+#: src/pwunconv.c:160
 #, c-format
 msgid "%s: can't update entry for user %s\n"
 msgstr "%s: kan inte uppdatera noteringen för användaren %s\n"
 
-#: src/pwunconv.c:179
+#: src/pwunconv.c:181
 #, c-format
 msgid "%s: can't delete shadow password file\n"
 msgstr "%s: kan inte ta bort skugglösenordsfilen\n"
 
-#: src/su.c:140
+#: src/su.c:133
 msgid "Sorry."
 msgstr "Tyvärr."
 
-#: src/su.c:222
+#: src/su.c:216
 #, c-format
 msgid "%s: must be run from a terminal\n"
 msgstr "%s: måste köras från en terminal\n"
 
-#: src/su.c:310
+#: src/su.c:306
 #, c-format
 msgid "%s: pam_start: error %d\n"
 msgstr "%s: pam_start: fel %d\n"
@@ -1891,18 +1869,17 @@ msgstr "%s: pam_start: fel %d\n"
 msgid "Unknown id: %s\n"
 msgstr "Okänt id: %s\n"
 
-#. access denied (-1) or unexpected value
-#: src/su.c:371 src/su.c:386
+#: src/su.c:373 src/su.c:390
 #, c-format
 msgid "You are not authorized to su %s\n"
 msgstr "Du har inte tillåtelse att köra su till %s\n"
 
 #. require own password
-#: src/su.c:382
+#: src/su.c:385
 msgid "(Enter your own password.)"
 msgstr "(Skriv in ditt eget lösenord.)"
 
-#: src/su.c:413
+#: src/su.c:419
 #, c-format
 msgid ""
 "%s: %s\n"
@@ -1911,28 +1888,23 @@ msgstr ""
 "%s: %s\n"
 "(Ignorerad)\n"
 
-#: src/su.c:615
+#: src/su.c:626
 msgid "No shell\n"
 msgstr "Inget skal\n"
 
 #. must be a password file!
-#: src/sulogin.c:136
+#: src/sulogin.c:132
 msgid "No password file\n"
 msgstr "Ingen lösenordsfil\n"
 
 #.
 #. * Fail secure
 #.
-#: src/sulogin.c:178
+#: src/sulogin.c:174
 msgid "No password entry for 'root'\n"
 msgstr "Ingen lösenordsnotering för \"root\"\n"
 
-#.
-#. * Here we prompt for the root password, or if no password is
-#. * given we just exit.
-#.
-#. get a password for root
-#: src/sulogin.c:192
+#: src/sulogin.c:190
 msgid ""
 "\n"
 "Type control-d to proceed with normal startup,\n"
@@ -1943,7 +1915,7 @@ msgstr ""
 "(eller skriv in lösenordet för root för systemunderhåll):"
 
 #. make new environment active
-#: src/sulogin.c:241
+#: src/sulogin.c:243
 msgid "Entering System Maintenance Mode\n"
 msgstr "Går in i systemunderhållsläge\n"
 
@@ -1952,507 +1924,510 @@ msgstr "G
 msgid "%s: rebuild the group database\n"
 msgstr "%s: bygg om gruppdatabasen\n"
 
-#: src/useradd.c:258
+#: src/useradd.c:260
 #, c-format
 msgid "%s: rebuild the shadow group database\n"
 msgstr "%s: bygg om skuggruppdatabasen\n"
 
-#: src/useradd.c:295 src/usermod.c:974
+#: src/useradd.c:295 src/useradd.c:309 src/usermod.c:981 src/usermod.c:995
 #, c-format
 msgid "%s: invalid numeric argument `%s'\n"
 msgstr "%s: ogiltigt numeriskt argument \"%s\"\n"
 
-#: src/useradd.c:351
+#: src/useradd.c:365
 #, c-format
 msgid "%s: unknown gid %s\n"
 msgstr "%s: okänt gid %s\n"
 
-#: src/useradd.c:358 src/useradd.c:660 src/useradd.c:1246 src/usermod.c:261
-#: src/usermod.c:1105
+#: src/useradd.c:373 src/useradd.c:676 src/useradd.c:1269 src/usermod.c:260
+#: src/usermod.c:1128
 #, c-format
 msgid "%s: unknown group %s\n"
 msgstr "%s: okänd grupp %s\n"
 
-#: src/useradd.c:426
-#, c-format
-msgid "group=%s,%ld  basedir=%s  skel=%s\n"
+#: src/useradd.c:440
+#, fuzzy, c-format
+msgid "group=%s,%u  basedir=%s  skel=%s\n"
 msgstr "grupp=%s,%ld  baskatalog=%s  skel=%s\n"
 
-#: src/useradd.c:429
+#: src/useradd.c:444
 #, c-format
 msgid "shell=%s  "
 msgstr "skal=%s  "
 
-#: src/useradd.c:431
+#: src/useradd.c:446
 #, c-format
 msgid "inactive=%ld  expire=%s"
 msgstr "inaktiv=%ld  upphör=%s"
 
-#: src/useradd.c:435
-#, c-format
-msgid "GROUP=%ld\n"
+#: src/useradd.c:450
+#, fuzzy, c-format
+msgid "GROUP=%u\n"
 msgstr "GRUPP=%ld\n"
 
-#: src/useradd.c:436
+#: src/useradd.c:451
 #, c-format
 msgid "HOME=%s\n"
 msgstr "HEM=%s\n"
 
-#: src/useradd.c:438
+#: src/useradd.c:453
 #, c-format
 msgid "INACTIVE=%ld\n"
 msgstr "INAKTIV=%ld\n"
 
-#: src/useradd.c:439
+#: src/useradd.c:454
 #, c-format
 msgid "EXPIRE=%s\n"
 msgstr "UPPHÖR=%s\n"
 
-#: src/useradd.c:441
+#: src/useradd.c:456
 #, c-format
 msgid "SHELL=%s\n"
 msgstr "SKAL=%s\n"
 
-#: src/useradd.c:442
+#: src/useradd.c:457
 #, c-format
 msgid "SKEL=%s\n"
 msgstr "SKEL=%s\n"
 
-#: src/useradd.c:482
+#: src/useradd.c:498
 #, c-format
 msgid "%s: cannot create new defaults file\n"
 msgstr "%s: kan inte skapa en ny standardfil\n"
 
-#: src/useradd.c:488
+#: src/useradd.c:503
 #, fuzzy, c-format
 msgid "%s: cannot open new defaults file\n"
 msgstr "%s: kan inte skapa en ny standardfil\n"
 
-#: src/useradd.c:582 src/useradd.c:593
+#: src/useradd.c:596 src/useradd.c:608
 #, c-format
 msgid "%s: rename: %s"
 msgstr "%s: rename: %s"
 
-#: src/useradd.c:680 src/usermod.c:281
+#: src/useradd.c:697 src/usermod.c:281
 #, c-format
 msgid "%s: group `%s' is a NIS group.\n"
 msgstr "%s: grupp \"%s\" är en NIS-grupp.\n"
 
-#: src/useradd.c:688 src/usermod.c:289
+#: src/useradd.c:706 src/usermod.c:290
 #, c-format
 msgid "%s: too many groups specified (max %d).\n"
 msgstr "%s: för många grupper speciferade (max %d).\n"
 
-#: src/useradd.c:720 src/usermod.c:321
+#: src/useradd.c:738 src/usermod.c:322
 #, c-format
 msgid "usage: %s\t[-u uid [-o]] [-g group] [-G group,...] \n"
 msgstr "Användning: %s\t[-u uid [-o]] [-g grupp] [-G grupp,...] \n"
 
-#: src/useradd.c:723
+#: src/useradd.c:742
 msgid "\t\t[-d home] [-s shell] [-c comment] [-m [-k template]]\n"
 msgstr "\t\t[-d hem] [-s skal] [-c kommentar] [-m [-k mall]]\n"
 
-#: src/useradd.c:726 src/usermod.c:327
+#: src/useradd.c:745 src/usermod.c:329
+#, fuzzy
 msgid "[-f inactive] [-e expire ] "
-msgstr "[-f inaktiv] [-e upphör ] "
+msgstr "[-f inaktiv] [-e upphör] "
 
-#: src/useradd.c:729
+#: src/useradd.c:748
 msgid "[-A program] "
 msgstr "[-A program] "
 
-#: src/useradd.c:731
+#: src/useradd.c:750
 msgid "[-p passwd] name\n"
 msgstr "[-p passwd] namn\n"
 
-#: src/useradd.c:733
+#: src/useradd.c:753
 #, c-format
 msgid "       %s\t-D [-g group] [-b base] [-s shell]\n"
 msgstr "       %s\t-D [-g grupp] [-b bas] [-s skal]\n"
 
-#: src/useradd.c:736
+#: src/useradd.c:756
+#, fuzzy
 msgid "\t\t[-f inactive] [-e expire ]\n"
-msgstr "\t\t[-f inaktiv] [-e utgång ]\n"
+msgstr "\t\t[-f inaktiv] [-e utgång]\n"
 
-#: src/useradd.c:833 src/usermod.c:479
+#: src/useradd.c:850 src/usermod.c:480
 #, c-format
 msgid "%s: error locking group file\n"
 msgstr "%s: fel under låsning av gruppfilen\n"
 
-#: src/useradd.c:837 src/usermod.c:484
+#: src/useradd.c:855 src/usermod.c:486
 #, c-format
 msgid "%s: error opening group file\n"
 msgstr "%s: fel under öppning av gruppfilen\n"
 
-#: src/useradd.c:842 src/usermod.c:591
+#: src/useradd.c:862 src/usermod.c:597
 #, c-format
 msgid "%s: error locking shadow group file\n"
 msgstr "%s: fel under låsning av skuggruppfilen\n"
 
-#: src/useradd.c:847 src/usermod.c:597
+#: src/useradd.c:867 src/usermod.c:603
 #, c-format
 msgid "%s: error opening shadow group file\n"
 msgstr "%s: fel under öppning av skuggruppfilen\n"
 
-#: src/useradd.c:1019
-#, c-format
-msgid "%s: uid %d is not unique\n"
-msgstr "%s: uid %d är inte unikt\n"
+#: src/useradd.c:1039
+#, fuzzy, c-format
+msgid "%s: uid %u is not unique\n"
+msgstr "%s: uid %ld är inte unikt\n"
 
-#: src/useradd.c:1049
+#: src/useradd.c:1069
 #, c-format
 msgid "%s: can't get unique uid\n"
 msgstr "%s: kan inte hitta ett unikt uid\n"
 
-#: src/useradd.c:1157 src/useradd.c:1301 src/usermod.c:1053 src/usermod.c:1064
-#: src/usermod.c:1074 src/usermod.c:1120 src/usermod.c:1164
+#: src/useradd.c:1174 src/useradd.c:1325 src/usermod.c:1075 src/usermod.c:1086
+#: src/usermod.c:1096 src/usermod.c:1143 src/usermod.c:1187
 #, c-format
 msgid "%s: invalid field `%s'\n"
 msgstr "%s: felaktigt fält \"%s\"\n"
 
-#: src/useradd.c:1171
+#: src/useradd.c:1189
 #, c-format
 msgid "%s: invalid base directory `%s'\n"
 msgstr "%s: felaktig baskatalog \"%s\"\n"
 
-#: src/useradd.c:1181
+#: src/useradd.c:1199
 #, c-format
 msgid "%s: invalid comment `%s'\n"
 msgstr "%s: felaktig kommentar \"%s\"\n"
 
-#: src/useradd.c:1191
+#: src/useradd.c:1210
 #, c-format
 msgid "%s: invalid home directory `%s'\n"
 msgstr "%s: felaktig hemkatalog \"%s\"\n"
 
-#: src/useradd.c:1209 src/usermod.c:1087
+#: src/useradd.c:1229 src/usermod.c:1110
 #, c-format
 msgid "%s: invalid date `%s'\n"
 msgstr "%s: felaktigt datum \"%s\"\n"
 
-#: src/useradd.c:1221
+#: src/useradd.c:1242
 #, c-format
 msgid "%s: shadow passwords required for -e\n"
 msgstr "%s: skugglösenord krävs för -e\n"
 
-#: src/useradd.c:1236
+#: src/useradd.c:1258
 #, c-format
 msgid "%s: shadow passwords required for -f\n"
 msgstr "%s: skugglösenord krävs för -f\n"
 
-#: src/useradd.c:1310
+#: src/useradd.c:1336
 #, c-format
 msgid "%s: invalid shell `%s'\n"
 msgstr "%s: felaktigt skal \"%s\"\n"
 
-#: src/useradd.c:1351
+#: src/useradd.c:1377
 #, c-format
 msgid "%s: invalid user name `%s'\n"
 msgstr "%s: felaktigt användar namn \"%s\"\n"
 
-#: src/useradd.c:1387 src/userdel.c:298 src/usermod.c:1232
+#: src/useradd.c:1413 src/userdel.c:298 src/usermod.c:1255
 #, c-format
 msgid "%s: cannot rewrite password file\n"
 msgstr "%s: kan inte skriva om lösenordsfilen\n"
 
-#: src/useradd.c:1392 src/userdel.c:301 src/usermod.c:1237
+#: src/useradd.c:1420 src/userdel.c:303 src/usermod.c:1262
 #, c-format
 msgid "%s: cannot rewrite shadow password file\n"
 msgstr "%s: kan inte skriva om skugglösenordsfilen\n"
 
-#: src/useradd.c:1432 src/userdel.c:365 src/usermod.c:1272
+#: src/useradd.c:1461 src/userdel.c:367 src/usermod.c:1296
 #, c-format
 msgid "%s: unable to lock password file\n"
 msgstr "%s: kan inte låsa lösenordsfilen\n"
 
-#: src/useradd.c:1436 src/userdel.c:369 src/usermod.c:1276
+#: src/useradd.c:1466 src/userdel.c:372 src/usermod.c:1301
 #, c-format
 msgid "%s: unable to open password file\n"
 msgstr "%s: kan inte öppna lösenordsfilen\n"
 
-#: src/useradd.c:1442 src/userdel.c:374 src/usermod.c:1281
+#: src/useradd.c:1474 src/userdel.c:379 src/usermod.c:1308
 #, c-format
 msgid "%s: cannot lock shadow password file\n"
 msgstr "%s: kan inte låsa skugglösenordsfilen\n"
 
-#: src/useradd.c:1448 src/userdel.c:379 src/usermod.c:1286
+#: src/useradd.c:1481 src/userdel.c:385 src/usermod.c:1314
 #, c-format
 msgid "%s: cannot open shadow password file\n"
 msgstr "%s: kan inte öppna skugglösenordsfilen\n"
 
-#: src/useradd.c:1547 src/usermod.c:1373
+#: src/useradd.c:1580 src/usermod.c:1405
 #, c-format
 msgid "%s: error adding authentication method\n"
 msgstr "%s: fel under tillägning av metod för äkthetsbevisning\n"
 
-#: src/useradd.c:1570
+#: src/useradd.c:1604
 #, c-format
 msgid "%s: error adding new password entry\n"
 msgstr "%s: fel under tilläggning av ny lösenordsnotering\n"
 
-#: src/useradd.c:1585
+#: src/useradd.c:1618
 #, c-format
 msgid "%s: error updating password dbm entry\n"
 msgstr "%s: fel under uppdatering av dbm-lösenordsnotering\n"
 
-#: src/useradd.c:1601 src/usermod.c:1432
+#: src/useradd.c:1634 src/usermod.c:1471
 #, c-format
 msgid "%s: error adding new shadow password entry\n"
 msgstr "%s: fel under tilläggning av ny skugglösenordsnotering\n"
 
-#: src/useradd.c:1617 src/usermod.c:1447
+#: src/useradd.c:1650 src/usermod.c:1488
 #, c-format
 msgid "%s: error updating shadow passwd dbm entry\n"
 msgstr "%s: fel under uppdatering av dbm-skugglösenordsnotering\n"
 
-#: src/useradd.c:1649
+#: src/useradd.c:1682
 #, c-format
 msgid "%s: cannot create directory %s\n"
 msgstr "%s: kan inte skapa katalog %s\n"
 
-#: src/useradd.c:1772 src/usermod.c:1210
+#: src/useradd.c:1806 src/usermod.c:1233
 #, c-format
 msgid "%s: user %s exists\n"
 msgstr "%s: användare %s existerar\n"
 
-#: src/useradd.c:1784
+#: src/useradd.c:1821
 #, c-format
 msgid ""
 "%s: group %s exists - if you want to add this user to that group, use -g.\n"
 msgstr ""
 
-#: src/useradd.c:1815
+#: src/useradd.c:1854
 #, c-format
 msgid "%s: warning: CREATE_HOME not supported, please use -m instead.\n"
 msgstr "%s: varning: CREATE_HOME stöds inte, använd -m istället.\n"
 
-#: src/userdel.c:133
+#: src/userdel.c:129
 #, c-format
 msgid "usage: %s [-r] name\n"
 msgstr "Användning: %s [-r] namn\n"
 
-#: src/userdel.c:184 src/userdel.c:266
+#: src/userdel.c:181 src/userdel.c:267
 #, c-format
 msgid "%s: error updating group entry\n"
 msgstr "%s: fel under uppdatering av gruppnotering\n"
 
-#: src/userdel.c:194 src/userdel.c:275
+#: src/userdel.c:191 src/userdel.c:276
 #, c-format
 msgid "%s: cannot update dbm group entry\n"
 msgstr "%s: kan inte uppdatera dbm-gruppnotering\n"
 
-#: src/userdel.c:221
+#: src/userdel.c:219
 #, fuzzy, c-format
 msgid "%s: cannot remove dbm group entry\n"
 msgstr "%s: kan inte uppdatera dbm-gruppnotering\n"
 
-#: src/userdel.c:306
+#: src/userdel.c:308
 #, c-format
 msgid "%s: cannot rewrite TCFS key file\n"
 msgstr "%s: kan inte skriva om TCFS-nyckelfilen\n"
 
-#: src/userdel.c:386
+#: src/userdel.c:392
 #, c-format
 msgid "%s: cannot lock TCFS key file\n"
 msgstr "%s: kan inte låsa TCFS-nyckelfilen\n"
 
-#: src/userdel.c:390
+#: src/userdel.c:397
 #, c-format
 msgid "%s: cannot open TCFS key file\n"
 msgstr "%s: kan inte öppna TCFS-nyckelfilen\n"
 
-#: src/userdel.c:399
+#: src/userdel.c:408
 #, c-format
 msgid "%s: cannot open group file\n"
 msgstr "%s: kan inte öppna gruppfilen\n"
 
-#: src/userdel.c:409
+#: src/userdel.c:419
 #, c-format
 msgid "%s: cannot open shadow group file\n"
 msgstr "%s: kan inte öppna skuggruppfilen\n"
 
-#: src/userdel.c:440 src/userdel.c:455
+#: src/userdel.c:451 src/userdel.c:468
 #, c-format
 msgid "%s: error deleting authentication\n"
 msgstr "%s: fel under borttagning av metod för äkthetsbevisning\n"
 
-#: src/userdel.c:464
+#: src/userdel.c:479
 #, c-format
 msgid "%s: error deleting password entry\n"
 msgstr "%s: fel under borttagning av lösenordsnotering\n"
 
-#: src/userdel.c:467
+#: src/userdel.c:485
 #, c-format
 msgid "%s: error deleting shadow password entry\n"
 msgstr "%s: fel under borttagning av skugglösenordsnotering\n"
 
-#: src/userdel.c:476
+#: src/userdel.c:496
 #, c-format
 msgid "%s: error deleting TCFS entry\n"
 msgstr "%s: fel under borttagning av TCFS-notering\n"
 
-#: src/userdel.c:489
+#: src/userdel.c:510
 #, c-format
 msgid "%s: error deleting password dbm entry\n"
 msgstr "%s: fel under borttagning av dbm-lösenordsnotering\n"
 
-#: src/userdel.c:508
+#: src/userdel.c:533
 #, c-format
 msgid "%s: error deleting shadow passwd dbm entry\n"
 msgstr "%s: fel under borttagning av dbm-skugglösenordsnotering\n"
 
-#: src/userdel.c:549
+#: src/userdel.c:569
 #, c-format
 msgid "%s: user %s is currently logged in\n"
 msgstr "%s: användare %s är inloggad\n"
 
-#: src/userdel.c:666
+#: src/userdel.c:659
 #, c-format
 msgid "%s: warning: %s not owned by %s, not removing\n"
 msgstr "%s: varning: %s ägs inte av %s, tar inte bort\n"
 
-#: src/userdel.c:672
+#: src/userdel.c:666
 #, c-format
 msgid "%s: warning: can't remove "
 msgstr "%s: varning: kan inte ta bort "
 
-#: src/userdel.c:791 src/usermod.c:1001
+#: src/userdel.c:758 src/usermod.c:1023
 #, c-format
 msgid "%s: user %s does not exist\n"
 msgstr "%s: användare %s finns inte\n"
 
-#: src/userdel.c:805 src/usermod.c:1017
+#: src/userdel.c:770 src/usermod.c:1039
 #, c-format
 msgid "%s: user %s is a NIS user\n"
 msgstr "%s: användare %s är en NIS-användare\n"
 
-#: src/userdel.c:842
+#: src/userdel.c:799
 #, c-format
 msgid "%s: %s not owned by %s, not removing\n"
 msgstr "%s: %s ägs inte av %s, tar inte bort\n"
 
-#: src/userdel.c:865
+#: src/userdel.c:818
 #, 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 hemkatalogen för %s)\n"
 
-#: src/userdel.c:878
+#: src/userdel.c:830
 #, c-format
 msgid "%s: error removing directory %s\n"
 msgstr "%s: fel under borttagning av katalogen %s\n"
 
-#: src/usermod.c:324
+#: src/usermod.c:326
 msgid "\t\t[-d home [-m]] [-s shell] [-c comment] [-l new_name]\n"
 msgstr "\t\t[-d hem [-m]] [-s skal] [-c kommentar] [-l nytt_namn]\n"
 
-#: src/usermod.c:330
+#: src/usermod.c:332
+#, fuzzy
 msgid "[-A {DEFAULT|program},... ] "
-msgstr "[-A {DEFAULT|program},... ] "
+msgstr "[-A {DEFAULT|program},...] "
 
-#: src/usermod.c:332
+#: src/usermod.c:334
 #, fuzzy
 msgid "[-p passwd] [-L|-U] name\n"
 msgstr "[-p passwd] namn\n"
 
-#: src/usermod.c:511
+#: src/usermod.c:514
 #, c-format
 msgid "%s: out of memory in update_group\n"
 msgstr "%s: slut på minne i update_group\n"
 
-#: src/usermod.c:634
+#: src/usermod.c:641
 #, c-format
 msgid "%s: out of memory in update_gshadow\n"
 msgstr "%s: slut på minne i update_gshadow\n"
 
-#: src/usermod.c:1187
+#: src/usermod.c:1210
 #, c-format
 msgid "%s: no flags given\n"
 msgstr "%s: inga flaggor givna\n"
 
-#: src/usermod.c:1194
+#: src/usermod.c:1217
 #, c-format
 msgid "%s: shadow passwords required for -e and -f\n"
 msgstr "%s: skugglösenord krävs för -e och -f\n"
 
-#: src/usermod.c:1215
-#, c-format
-msgid "%s: uid %ld is not unique\n"
+#: src/usermod.c:1239
+#, fuzzy, c-format
+msgid "%s: uid %lu is not unique\n"
 msgstr "%s: uid %ld är inte unikt\n"
 
-#: src/usermod.c:1363
+#: src/usermod.c:1392
 #, c-format
 msgid "%s: error deleting authentication method\n"
 msgstr "%s: fel under borttagning av metod för äkthetsbevisning\n"
 
-#: src/usermod.c:1383
+#: src/usermod.c:1418
 #, c-format
 msgid "%s: error changing authentication method\n"
 msgstr "%s: fel under ändring av metod för äkthetsbevisning\n"
 
-#: src/usermod.c:1400
+#: src/usermod.c:1436
 #, c-format
 msgid "%s: error changing password entry\n"
 msgstr "%s: fel under ändring av lösenordsnotering\n"
 
-#: src/usermod.c:1406
+#: src/usermod.c:1442
 #, c-format
 msgid "%s: error removing password entry\n"
 msgstr "%s: fel under borttagning av lösenordsnotering\n"
 
-#: src/usermod.c:1414
+#: src/usermod.c:1451
 #, c-format
 msgid "%s: error adding password dbm entry\n"
 msgstr "%s: fel under tilläggning av dbm-lösenordsnotering\n"
 
-#: src/usermod.c:1421
+#: src/usermod.c:1459
 #, c-format
 msgid "%s: error removing passwd dbm entry\n"
 msgstr "%s: fel under borttagning av dbm-lösenordsnotering\n"
 
-#: src/usermod.c:1438
+#: src/usermod.c:1478
 #, c-format
 msgid "%s: error removing shadow password entry\n"
 msgstr "%s: fel under borttagning av skugglösenordsnotering\n"
 
-#: src/usermod.c:1453
+#: src/usermod.c:1495
 #, c-format
 msgid "%s: error removing shadow passwd dbm entry\n"
 msgstr "%s: fel under borttagning av dbm-skugglösenordsnotering\n"
 
-#: src/usermod.c:1484
+#: src/usermod.c:1524
 #, c-format
 msgid "%s: directory %s exists\n"
 msgstr "%s: katalogen %s existerar\n"
 
-#: src/usermod.c:1491
+#: src/usermod.c:1533
 #, c-format
 msgid "%s: can't create %s\n"
 msgstr "%s: kan inte skapa %s\n"
 
-#: src/usermod.c:1497
+#: src/usermod.c:1539
 #, c-format
 msgid "%s: can't chown %s\n"
 msgstr "%s: kan inte byta ägare på %s\n"
 
-#: src/usermod.c:1513
+#: src/usermod.c:1556
 #, c-format
 msgid "%s: cannot rename directory %s to %s\n"
 msgstr "%s: kan inte byta namn på katalogen %s till %s\n"
 
 #. better leave it alone
-#: src/usermod.c:1610
+#: src/usermod.c:1653
 #, c-format
 msgid "%s: warning: %s not owned by %s\n"
 msgstr "%s: varning: %s ägs inte av %s\n"
 
-#: src/usermod.c:1616
+#: src/usermod.c:1659
 msgid "failed to change mailbox owner"
 msgstr "kunde inte byta ägare av brevlådan"
 
-#: src/usermod.c:1623
+#: src/usermod.c:1667
 msgid "failed to rename mailbox"
 msgstr "kunde inte byta namn på brevlådan"
 
-#: src/vipw.c:102
+#: src/vipw.c:104
 #, c-format
 msgid ""
 "\n"
@@ -2461,20 +2436,20 @@ msgstr ""
 "\n"
 "%s: %s är oförändrad\n"
 
-#: src/vipw.c:127
+#: src/vipw.c:132
 msgid "Couldn't lock file"
 msgstr "Kunde inte låsa filen"
 
-#: src/vipw.c:134
+#: src/vipw.c:141
 msgid "Couldn't make backup"
 msgstr "Kunde inte göra en backup"
 
-#: src/vipw.c:187
+#: src/vipw.c:206
 #, 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 är i %s)\n"
 
-#: src/vipw.c:226
+#: src/vipw.c:244
 msgid ""
 "Usage:\n"
 "`vipw' edits /etc/passwd        `vipw -s' edits /etc/shadow\n"
@@ -2484,5 +2459,24 @@ msgstr ""
 "\"vipw\" editerar /etc/passwd   \"vipw -w\" editerar /etc/shadow\n"
 "\"vipg\" editerar /etc/group    \"vipg -w\" editerar /etc/gshadow\n"
 
+#~ msgid "%s: gid %ld is not unique\n"
+#~ msgstr "%s: gid %ld är inte unikt\n"
+
+#, fuzzy
+#~ msgid "unknown gid: %u\n"
+#~ msgstr "okänt gid: %d\n"
+
+#~ msgid "%s: uid %d is not unique\n"
+#~ msgstr "%s: uid %d är inte unikt\n"
+
+#~ msgid "user %s: bad UID (%d)\n"
+#~ msgstr "användare %s: felaktigt UID (%d)\n"
+
+#~ msgid "%s: no aging information present\n"
+#~ msgstr "%s: ingen åldringsinformation finns tillgänglig\n"
+
+#~ msgid "group %s: bad GID (%d)\n"
+#~ msgstr "grupp %s: felaktigt GID (%d)\n"
+
 #~ msgid "%s: permission denied (shell).\n"
 #~ msgstr "%s: tillåtelse nekas (skal).\n"
index e37984270ebea6b07b966ae263113782ebe4c109..3db16d1d0f849255ce14f396202024e366c23b50 100644 (file)
Binary files a/po/uk.gmo and b/po/uk.gmo differ
index 18153c477a19e843c766ab7b19160257f7aae485..59b06ad1dddec2125b0e4ce1fc99a8f94fcc72e7 100644 (file)
--- a/po/uk.po
+++ b/po/uk.po
@@ -4,7 +4,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: shadow-20001016\n"
-"POT-Creation-Date: 2001-09-08 07:36+0200\n"
+"POT-Creation-Date: 2002-01-06 16:13+0100\n"
 "PO-Revision-Date: 2001-08-04 19:45+0200\n"
 "Last-Translator: Roman Festchook <roma@orta.zt.ua>\n"
 "Language-Team: Roman Festchook <roma@orta.zt.ua>\n"
@@ -21,36 +21,36 @@ msgstr "
 msgid "Warning: too many groups\n"
 msgstr "úÁÓÔÅÒÅÖÅÎÎÑ: ÚÁÎÁÄÔÏ ÂÁÇÁÔÏ ÇÒÕÐ\n"
 
-#: libmisc/age.c:104
+#: libmisc/age.c:77
 msgid "Your password has expired."
 msgstr "÷ÁÛ ÐÁÒÏÌØ ÐÒÏÓÔÒÏÞÅÎÏ."
 
-#: libmisc/age.c:107
+#: libmisc/age.c:80
 msgid "Your password is inactive."
 msgstr "÷ÁÛ ÐÁÒÏÌØ ¤ ÎÅÁËÔÉ×ÎÉÍ."
 
-#: libmisc/age.c:110
+#: libmisc/age.c:83
 msgid "Your login has expired."
 msgstr "÷ÁÛ ÌÏǦΠÐÒÏÓÔÒÏÞÅÎÏ."
 
-#: libmisc/age.c:127
+#: libmisc/age.c:96
 msgid "  Contact the system administrator.\n"
 msgstr "  ú'×ÑÖ¦ÔØÓÑ Ú ÓÉÓÔÅÍÎÉÍ ÁÄͦΦÓÔÒÁÔÏÒÏÍ.\n"
 
-#: libmisc/age.c:130
+#: libmisc/age.c:99
 msgid "  Choose a new password.\n"
 msgstr "  ÷ÉÂÅÒ¦ÔØ ÎÏ×ÉÊ ÐÁÒÏÌØ.\n"
 
-#: libmisc/age.c:228
+#: libmisc/age.c:176
 #, c-format
 msgid "Your password will expire in %ld days.\n"
 msgstr "÷ÁÛ ÐÁÒÏÌØ ÂÕÄÅ ÐÒÏÓÔÏÒÏÞÅÎÏ ÚÁ %ld ÄΦ×.\n"
 
-#: libmisc/age.c:230
+#: libmisc/age.c:178
 msgid "Your password will expire tomorrow.\n"
 msgstr "÷ÁÛ ÐÁÒÏÌØ ÂÕÄÅ ÐÒÏÓÔÒÏÞÅÎÏ ÚÁ×ÔÒÁ.\n"
 
-#: libmisc/age.c:232
+#: libmisc/age.c:180
 msgid "Your password will expire today.\n"
 msgstr "÷ÁÛ ÐÁÒÏÌØ ÂÕÄÅ ÐÒÏÓÔÒÏÞÅÎÏ ÓØÏÇÏÄΦ.\n"
 
@@ -107,7 +107,7 @@ msgstr "
 msgid "You have mail."
 msgstr "÷É ÍÁ¤ÔÅ ÐÏÞÔÕ."
 
-#: libmisc/obscure.c:281 src/passwd.c:309
+#: libmisc/obscure.c:281 src/passwd.c:244
 #, c-format
 msgid "Bad password: %s.  "
 msgstr "ðÏÇÁÎÉÊ ÐÁÒÏÌØ: %s.  "
@@ -122,12 +122,12 @@ msgstr "passwd: pam_start() 
 msgid "passwd: %s\n"
 msgstr "passwd: %s\n"
 
-#: libmisc/setupenv.c:205
+#: libmisc/setupenv.c:211
 #, c-format
 msgid "Unable to cd to \"%s\"\n"
 msgstr "îÅ ÍÏÖÕ ÐÅÒÅÊÔÉ ÄÏ ÔÅËÉ \"%s\"\n"
 
-#: libmisc/setupenv.c:213
+#: libmisc/setupenv.c:219
 msgid "No directory, logging in with HOME=/"
 msgstr "îÅÍÁ ÔÅËÉ, ×¦ÄËÒÉ×Á¤ÍÏ ÓÅÓÓ¦À Ú HOME=/"
 
@@ -177,25 +177,25 @@ msgstr "malloc(%d) 
 msgid "Dialup Password: "
 msgstr "ðÁÒÏÌØ ÎÁ ÍÏÄÅÍΊЦÄËÌÀÞÅÎÎÑ: "
 
-#: lib/getdef.c:253
+#: lib/getdef.c:276
 msgid "Could not allocate space for config info.\n"
 msgstr "îÅ ÍÏÖÕ ×ÉĦÌÉÔÉ ÒÅÓÕÒÓÉ ÄÌÑ ËÏÎÆ¦ÇÕÒÁæÊÎÉÈ ÄÁÎÎÉÈ.\n"
 
 #.
 #. * Item was never found.
 #.
-#: lib/getdef.c:307
+#: lib/getdef.c:330
 #, c-format
 msgid "configuration error - unknown item '%s' (notify administrator)\n"
 msgstr ""
 "ÐÏÍÉÌËÁ Õ ËÏÎÆ¦ÇÕÒÁæ§ - ÎÅצÄÏÍÁ ÐÏÚÉæѠ'%s' (ÐÏצÄÏÍÔÅ ÁÄͦΦÓÔÒÁÔÏÒÁ)\n"
 
-#: lib/getdef.c:394
+#: lib/getdef.c:417
 #, c-format
 msgid "error - lookup '%s' failed\n"
 msgstr "ÐÏÍÉÌËÁ - ÐÏÛÕË '%s' ÎÅ ×ÉËÏÎÁÎÏ\n"
 
-#: lib/getdef.c:402
+#: lib/getdef.c:425
 #, c-format
 msgid "%s not found\n"
 msgstr "%s ÎÅ ÚÎÁÊÄÅÎÏ\n"
@@ -204,7 +204,7 @@ msgstr "%s 
 #. * get the password from her, and set the salt for
 #. * the decryption from the group file.
 #.
-#: lib/pwauth.c:54 src/newgrp.c:305
+#: lib/pwauth.c:54 src/newgrp.c:348
 msgid "Password: "
 msgstr "ðÁÒÏÌØ: "
 
@@ -222,112 +222,108 @@ msgstr ""
 msgid "Unknown error %d"
 msgstr "îÅצÄÏÍÁ ÐÏÍÉÌËÁ %d"
 
-#: src/chage.c:162
+#: src/chage.c:116
 #, c-format
 msgid ""
-"Usage: %s [ -l ] [ -m min_days ] [ -M max_days ] [ -W warn ]\n"
-"  [ -I inactive ] [ -E expire ] [ -d last_day ] user\n"
+"Usage: %s [-l] [-m min_days] [-M max_days] [-W warn]\n"
+"\t[-I inactive] [-E expire] [-d last_day] user\n"
 msgstr ""
-"÷ÉËÏÒÉÓÔÏ×ÕÊÔÅ: %s [ -l ] [ -m Í¦Î_ÄΦנ] [ -M ÍÁËÓ_ÄΦנ] [ -W "
-"ÚÁÓÔÅÒÅÖÅÎÎÑ ]\n"
-"  [ -I ÎÅÁËÔÉ×ΦÓÔØ ] [ -E ÐÒÏÓÔÒÏÞÅÎÎÏ ] [ -d ÏÓÔÁÎΦÊ_ÄÅÎØ ] ËÏÒÉÓÔÕ×ÁÞ\n"
+"÷ÉËÏÒÉÓÔÏ×ÕÊÔÅ: %s [-l] [-m Í¦Î_ÄΦ×] [-M ÍÁËÓ_ÄΦ×] [-W ÚÁÓÔÅÒÅÖÅÎÎÑ]\n"
+"\t[-I ÎÅÁËÔÉ×ΦÓÔØ] [-E ÐÒÏÓÔÒÏÞÅÎÎÏ] [-d ÏÓÔÁÎΦÊ_ÄÅÎØ] ËÏÒÉÓÔÕ×ÁÞ\n"
 
-#: src/chage.c:164
+#: src/chage.c:122
 #, c-format
-msgid "Usage: %s [ -l ] [ -m min_days ] [ -M max_days ] [ -d last_day ] user\n"
+msgid "Usage: %s [-l] [-m min_days] [-M max_days] [-d last_day] user\n"
 msgstr ""
-"÷ÉËÏÒÉÓÔÏ×ÕÊÔÅ: %s [ -l ] [ -m Í¦Î_ÄΦנ] [ -M ÍÁËÓ_ÄΦנ] [ -d "
-"ÏÓÔÁÎΦÊ_ÄÅÎØ ] ËÏÒÉÓÔÕ×ÁÞ\n"
+"÷ÉËÏÒÉÓÔÏ×ÕÊÔÅ: %s [-l] [-m Í¦Î_ÄΦ×] [-M ÍÁËÓ_ÄΦ×] [-d ÏÓÔÁÎΦÊ_ÄÅÎØ] "
+"ËÏÒÉÓÔÕ×ÁÞ\n"
 
-#: src/chage.c:199
+#: src/chage.c:157
+#, fuzzy
 msgid ""
-"Enter the new value, or press return for the default\n"
+"Enter the new value, or press ENTER for the default\n"
 "\n"
 msgstr ""
-"÷×ÅÄ¦ÔØ ÎÏ×Å ÚÎÁÞÅÎÎÑ, ÁÂÏ ÎÁÖÍ¦ÔØ Enter, ÄÌÑ ÚÎÁÞÅÎÎÑ ÐÏ ÚÁÍÏ×ÞÕ×ÁÎÎÀ\n"
-"\n"
+"÷×ÅÄ¦ÔØ ÎÏ×Å ÚÎÁÞÅÎÎÑ, ÁÂÏ ÎÁÖÍ¦ÔØ ENTER ÄÌÑ ÚÎÁÞÅÎÎÑ ÐÏ ÚÁÍÏ×ÞÕ×ÁÎÎÀ\n"
 
-#: src/chage.c:202
+#: src/chage.c:160
 msgid "Minimum Password Age"
 msgstr "í¦Î¦ÍÁÌØÎÉʠצˠÐÁÒÏÌÑ"
 
-#: src/chage.c:207
+#: src/chage.c:166
 msgid "Maximum Password Age"
 msgstr "íÁËÓ¦ÍÁÌØÎÉʠצˠÐÁÒÏÌÑ"
 
-#: src/chage.c:213
+#: src/chage.c:174
 msgid "Last Password Change (YYYY-MM-DD)"
 msgstr "ïÓÔÁÎÎÑ ÚͦÎÁ ÐÁÒÏÌÑ (òòòò-íí-ää)"
 
-#: src/chage.c:222
+#: src/chage.c:183
 msgid "Password Expiration Warning"
 msgstr "úÁÓÔÅÒÅÖÅÎÎÑ ÐÒÏ ÐÒÏÓÔÒÏÞÅÎÎÑ ÐÁÒÏÌÑ"
 
-#: src/chage.c:227
+#: src/chage.c:189
 msgid "Password Inactive"
 msgstr "ðÁÒÏÌØ ÎÅÁËÔÉ×ÎÉÊ"
 
-#: src/chage.c:233
+#: src/chage.c:197
 msgid "Account Expiration Date (YYYY-MM-DD)"
 msgstr "äÁÔÁ ÐÒÏÓÔÒÏÞÅÎÎÑ ÒÁÈÕÎËÕ (òòòò-íí-ää)"
 
 #.
 #. * 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.
+#. * 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.
 #.
-#: src/chage.c:287
+#: src/chage.c:248
 #, c-format
 msgid "Minimum:\t%ld\n"
 msgstr "í¦Î¦ÍÕÍ:\t%ld\n"
 
-#: src/chage.c:288
+#: src/chage.c:249
 #, c-format
 msgid "Maximum:\t%ld\n"
 msgstr "íÁËÓ¦ÍÕÍ:\t%ld\n"
 
-#: src/chage.c:290
+#: src/chage.c:251
 #, c-format
 msgid "Warning:\t%ld\n"
 msgstr "úÁÓÔÅÒÅÖÅÎÎÑ:\t%ld\n"
 
-#: src/chage.c:291
+#: src/chage.c:252
 #, c-format
 msgid "Inactive:\t%ld\n"
 msgstr "îÅÁËÔÉ×ÎÉÊ:\t%ld\n"
 
 #.
-#. * 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.
+#. * 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.
 #.
-#: src/chage.c:300
+#: src/chage.c:260
 msgid "Last Change:\t\t"
 msgstr "ïÓÔÁÎÎÑ ÚͦÎÁ:\t\t"
 
-#: src/chage.c:302 src/chage.c:316 src/chage.c:333 src/chage.c:346
+#: src/chage.c:262 src/chage.c:276 src/chage.c:293 src/chage.c:306
 msgid "Never\n"
 msgstr "î¦ËÏÌÉ\n"
 
 #.
-#. * The password expiration date is determined from the last
-#. * change date plus the number of days the password is valid
-#. * for.
+#. * The password expiration date is determined from the last change
+#. * date plus the number of days the password is valid for.
 #.
-#: src/chage.c:314
+#: src/chage.c:273
 msgid "Password Expires:\t"
 msgstr "ðÁÒÏÌØ ÐÒÏÓÔÒÏÞÅÎÎÏ:\t"
 
 #.
-#. * 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.
+#. * 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.
 #.
-#: src/chage.c:330
+#: src/chage.c:290
 #, fuzzy
 msgid "Password Inactive:\t"
 msgstr "ðÁÒÏÌØ ÎÅÁËÔÉ×ÎÉÊ:\t"
@@ -336,588 +332,587 @@ msgstr "
 #. * The account will expire on the given date regardless of the
 #. * password expiring or not.
 #.
-#: src/chage.c:344
+#: src/chage.c:304
 #, fuzzy
 msgid "Account Expires:\t"
 msgstr "òÁÈÕÎÏË ÐÒÏÓÔÒÏÞÅÎÏ:\t"
 
-#: src/chage.c:453 src/chpasswd.c:139 src/groupadd.c:536 src/groupdel.c:322
-#: src/groupmod.c:522 src/newusers.c:389 src/useradd.c:1721 src/userdel.c:738
-#: src/usermod.c:1687
-#, fuzzy, c-format
-msgid "%s: PAM authentication failed\n"
-msgstr "%s: PAM ÁÕÔÅÎÔÉÆ¦ËÁæѠÎÅ ÐÒÏÊÛÌÁ\n"
-
-#: src/chage.c:536
+#: src/chage.c:468
 #, c-format
 msgid "%s: do not include \"l\" with other flags\n"
 msgstr "%s: ÎÅ ×ÉËÏÒÉÓÔÏ×ÕÊÔÅ \"l\" Ú ¦ÎÛ¦ÍÉ ÆÌÁÇÁÍÉ\n"
 
-#: src/chage.c:548 src/chage.c:660 src/login.c:532
+#: src/chage.c:481 src/chage.c:652 src/login.c:516
 #, c-format
 msgid "%s: permission denied\n"
 msgstr "%s: Õ ÄÏÓÔÕЦ ×¦ÄÍÏ×ÌÅÎÏ\n"
 
-#: src/chage.c:560 src/chpasswd.c:157
+#: src/chage.c:512 src/chpasswd.c:139 src/groupadd.c:529 src/groupdel.c:322
+#: src/groupmod.c:520 src/newusers.c:381 src/useradd.c:1754 src/userdel.c:717
+#: src/usermod.c:1732
+#, fuzzy, c-format
+msgid "%s: PAM authentication failed\n"
+msgstr "%s: PAM ÁÕÔÅÎÔÉÆ¦ËÁæѠÎÅ ÐÒÏÊÛÌÁ\n"
+
+#: src/chage.c:533 src/chpasswd.c:157
 #, c-format
 msgid "%s: can't lock password file\n"
 msgstr "%s: ÎÅ ÍÏÖÕ ÚÁÂÌÏËÕ×ÁÔÉ ÆÁÊÌ ÐÁÒÏÌÅÊ\n"
 
-#: src/chage.c:566 src/chpasswd.c:161
+#: src/chage.c:544 src/chpasswd.c:162
 #, c-format
 msgid "%s: can't open password file\n"
 msgstr "%s: ÎÅ ÍÏÖՠצÄËÒÉÔÉ ÆÁÊÌ ÐÁÒÏÌÅÊ\n"
 
-#: src/chage.c:573
+#: src/chage.c:552
 #, c-format
 msgid "%s: unknown user: %s\n"
 msgstr "%s: ÎÅצÄÏÍÉÊ ËÏÒÉÓÔÕ×ÁÞ: %s\n"
 
-#: src/chage.c:592
-#, c-format
-msgid "%s: can't lock shadow password file\n"
+#: src/chage.c:571
+#, fuzzy, c-format
+msgid "%s: can't lock shadow password file"
 msgstr "%s: ÎÅ ÍÏÖÕ ÚÁÂÌÏËÕ×ÁÔÉ ÆÁÊÌ ÐÒÉÈÏ×ÁÎÉÈ ÐÁÒÏÌÅÊ\n"
 
-#: src/chage.c:599
-#, c-format
-msgid "%s: can't open shadow password file\n"
+#: src/chage.c:579
+#, fuzzy, c-format
+msgid "%s: can't open shadow password file"
 msgstr "%s: ÎÅ ÍÏÖՠצÄËÒÉÔÉ ÆÁÊÌ ÐÒÉÈÏ×ÁÎÉÈ ÐÁÒÏÌÅÊ\n"
 
-#: src/chage.c:681
+#: src/chage.c:674
 #, c-format
 msgid "Changing the aging information for %s\n"
 msgstr "úͦÎÀÀ ×¦ËÏ×Õ ¦ÎÆÏÒÍÁæÀ ÄÌÑ %s\n"
 
-#: src/chage.c:683
+#: src/chage.c:677
 #, c-format
 msgid "%s: error changing fields\n"
 msgstr "%s: ÐÏÍÉÌËÁ ÚÁͦÎÉ ÐÏÌÑ\n"
 
-#: src/chage.c:710 src/chage.c:773 src/pwunconv.c:174
+#: src/chage.c:705 src/chage.c:771 src/pwunconv.c:174
 #, c-format
 msgid "%s: can't update password file\n"
 msgstr "%s: ÎÅ ÍÏÖÕ ÏÎÏ×ÉÔÉ ÆÁÊÌ ÐÁÒÏÌÅÊ\n"
 
-#: src/chage.c:740 src/pwunconv.c:169
+#: src/chage.c:737 src/pwunconv.c:168
 #, c-format
 msgid "%s: can't update shadow password file\n"
 msgstr "%s: ÎÅ ÍÏÖÕ ÏÎÏ×ÉÔÉ ÆÁÊÌ ÐÒÉÈÏ×ÁÎÉÈ ÐÁÒÏÌÅÊ\n"
 
-#: src/chage.c:789 src/chage.c:804 src/chfn.c:570 src/chsh.c:409
-#: src/passwd.c:825 src/passwd.c:926
+#: src/chage.c:789 src/chage.c:805 src/chfn.c:570 src/chsh.c:382
+#: src/passwd.c:747 src/passwd.c:859
 msgid "Error updating the DBM password entry.\n"
 msgstr "ðÏÍÉÌËÁ ÏÎÏ×ÌÅÎÎÑ ÚÁÐÉÓÕ ÐÁÒÏÌÑ Õ DBM.\n"
 
-#: src/chage.c:821
+#: src/chage.c:823
 #, c-format
 msgid "%s: can't rewrite shadow password file\n"
 msgstr "%s: ÎÅ ÍÏÖÕ ÐÅÒÅÐÉÓÁÔÉ ÆÁÊÌ ÐÒÉÈÏ×ÁÎÉÈ ÐÁÒÏÌÅÊ\n"
 
-#: src/chage.c:835
+#: src/chage.c:838
 #, c-format
 msgid "%s: can't rewrite password file\n"
 msgstr "%s: ÎÅ ÍÏÖÕ ÐÅÒÅÐÉÓÁÔÉ ÆÁÊÌ ÐÁÒÏÌÅÊ\n"
 
-#: src/chage.c:853 src/chpasswd.c:333 src/groupadd.c:595 src/groupdel.c:409
-#: src/groupmod.c:606 src/newusers.c:625 src/useradd.c:1830 src/userdel.c:903
-#: src/usermod.c:1765
+#: src/chage.c:857 src/chpasswd.c:343 src/groupadd.c:590 src/groupdel.c:409
+#: src/groupmod.c:604 src/newusers.c:628 src/useradd.c:1869 src/userdel.c:849
+#: src/usermod.c:1811
 #, fuzzy, c-format
 msgid "%s: PAM chauthtok failed\n"
 msgstr "%s: ÎÅ ÍÏÖÕ ÒÁÚÂÌÏËÕ×ÁÔÉ ÆÁÊÌ\n"
 
-#: src/chage.c:905
-#, c-format
-msgid "%s: no aging information present\n"
-msgstr "%s: ÎÅÍÁ¤ ¦ÎÆÏÒÍÁæ§ ÐÒϠצË\n"
-
-#: src/chfn.c:107
+#: src/chfn.c:83
 #, c-format
 msgid ""
-"Usage: %s [ -f full_name ] [ -r room_no ] [ -w work_ph ]\n"
-"\t[ -h home_ph ] [ -o other ] [ user ]\n"
+"Usage: %s [-f full_name] [-r room_no] [-w work_ph]\n"
+"\t[-h home_ph] [-o other] [user]\n"
 msgstr ""
-"÷ÉËÏÒÉÓÔÏ×ÕÊÔ¤: %s [ -f ÐÏ×ÎÅ_¦Í'Ñ ] [ -r ÎÏÍÅÒ_˦ÍÎÁÔÉ ]\n"
-"\t[ -w ÒÏÂÏÞ¦Ê_ÔÅÌÅÆÏΠ]\n"
-" [ -h ÄÏÍÁÛΦÊ_ÔÅÌÅÆÏΠ] [ -o ¦ÎÛÅ ]\n"
-"\t[ ËÏÒÉÓÔÕ×ÁÞ ]\n"
+"÷ÉËÏÒÉÓÔÏ×ÕÊÔ¤: %s [-f ÐÏ×ÎÅ_¦Í'Ñ] [-r ÎÏÍÅÒ_˦ÍÎÁÔÉ] [-w ÒÏÂÏÞ¦Ê_ÔÅÌÅÆÏÎ]\n"
+"\t[-h ÄÏÍÁÛΦÊ_ÔÅÌÅÆÏÎ] [-o ¦ÎÛÅ] [ËÏÒÉÓÔÕ×ÁÞ]\n"
 
-#: src/chfn.c:111
+#: src/chfn.c:88
 #, c-format
-msgid ""
-"Usage: %s [ -f full_name ] [ -r room_no ] [ -w work_ph ] [ -h home_ph ]\n"
+msgid "Usage: %s [-f full_name] [-r room_no] [-w work_ph] [-h home_ph]\n"
 msgstr ""
-"÷ÉËÏÒÉÓÔÏ×ÕÊÔÅ: %s [ -f ÐÏ×ÎÅ_¦Í'Ñ ] [ -r ÎÏÍÅÒ_˦ÍÎÁÔÉ ]\n"
-"\t[ -w ÒÏÂÏÞ¦Ê_ÔÅÌÅÆÏΠ]\n"
-" [ -h ÄÏÍÁÛΦÊ_ÔÅÌÅÆÏΠ]\n"
+"÷ÉËÏÒÉÓÔÏ×ÕÊÔÅ: %s [-f ÐÏ×ÎÅ_¦Í'Ñ] [-r ÎÏÍÅÒ_˦ÍÎÁÔÉ]\n"
+"\t[-w ÒÏÂÏÞ¦Ê_ÔÅÌÅÆÏÎ] [-h ÄÏÍÁÛΦÊ_ÔÅÌÅÆÏÎ]\n"
 
-#: src/chfn.c:163 src/chsh.c:119
-msgid "Enter the new value, or press return for the default\n"
+#: src/chfn.c:139
+#, fuzzy
+msgid "Enter the new value, or press ENTER for the default\n"
 msgstr ""
-"÷×ÅÄ¦ÔØ ÎÏ×Å ÚÎÁÞÅÎÎÑ, ÁÂÏ ÎÁÖÍ¦ÔØ Enter ÄÌÑ ÚÎÁÞÅÎÎÑ ÐÏ ÚÁÍÏ×ÞÕ×ÁÎÎÀ\n"
+"÷×ÅÄ¦ÔØ ÎÏ×Å ÚÎÁÞÅÎÎÑ, ÁÂÏ ÎÁÖÍ¦ÔØ ENTER, ÄÌÑ ÚÎÁÞÅÎÎÑ ÐÏ ÚÁÍÏ×ÞÕ×ÁÎÎÀ\n"
+"\n"
 
-#: src/chfn.c:166
+#: src/chfn.c:142
 msgid "Full Name"
 msgstr "ðÏ×ÎÅ ¦Í'Ñ"
 
-#: src/chfn.c:168
+#: src/chfn.c:144
 #, c-format
 msgid "\tFull Name: %s\n"
 msgstr "\tðÏ×ÎÅ ¦Í'Ñ: %s\n"
 
-#: src/chfn.c:171
+#: src/chfn.c:147
 msgid "Room Number"
 msgstr "îÏÍÅҠ˦ÍÎÁÔÉ"
 
-#: src/chfn.c:173
+#: src/chfn.c:149
 #, c-format
 msgid "\tRoom Number: %s\n"
 msgstr "\tîÏÍÅҠ˦ÍÎÁÔÉ: %s\n"
 
-#: src/chfn.c:176
+#: src/chfn.c:152
 msgid "Work Phone"
 msgstr "òÏÂÏަʠÔÅÌÅÆÏÎ"
 
-#: src/chfn.c:178
+#: src/chfn.c:154
 #, c-format
 msgid "\tWork Phone: %s\n"
 msgstr "\tòÏÂÏަʠÔÅÌÅÆÏÎ: %s\n"
 
-#: src/chfn.c:181
+#: src/chfn.c:157
 msgid "Home Phone"
 msgstr "äÏÍÁÛΦʠÔÅÌÅÆÏÎ"
 
-#: src/chfn.c:183
+#: src/chfn.c:159
 #, c-format
 msgid "\tHome Phone: %s\n"
 msgstr "\täÏÍÁÛΦʠÔÅÌÅÆÏÎ: %s\n"
 
-#: src/chfn.c:186
+#: src/chfn.c:162
 msgid "Other"
 msgstr "¶ÎÛÅ"
 
-#: src/chfn.c:298 src/chfn.c:306 src/chfn.c:314 src/chfn.c:322 src/chfn.c:330
-#: src/chfn.c:391 src/passwd.c:1226
+#: src/chfn.c:271 src/chfn.c:281 src/chfn.c:291 src/chfn.c:301 src/chfn.c:311
+#: src/chfn.c:379 src/passwd.c:1115
 #, c-format
 msgid "%s: Permission denied.\n"
 msgstr "%s: õ ÄÏÓÔÕЦ ×¦ÄÍÏ×ÌÅÎÏ.\n"
 
-#: src/chfn.c:351 src/chsh.c:224 src/passwd.c:1277
+#: src/chfn.c:332 src/chsh.c:190 src/passwd.c:1165
 #, c-format
 msgid "%s: Unknown user %s\n"
 msgstr "%s: îÅצÄÏÍÉÊ ËÏÒÉÓÔÕ×ÁÞ %s\n"
 
-#: src/chfn.c:357 src/chsh.c:232 src/passwd.c:1207
+#: src/chfn.c:341 src/chsh.c:198 src/passwd.c:1096
 #, c-format
 msgid "%s: Cannot determine your user name.\n"
 msgstr "%s: îÅ ÍÏÖÕ ×ÉÚÎÁÞÉÔÉ ×ÁÛÅ ¦Í'Ñ ËÏÒÉÓÔÕ×ÁÞÁ.\n"
 
-#: src/chfn.c:373 src/chsh.c:250
+#: src/chfn.c:358 src/chsh.c:215
 #, c-format
 msgid "%s: cannot change user `%s' on NIS client.\n"
 msgstr "%s: ÎÅ ÍÏÖÕ ÚͦÎÉÔÉ ËÏÒÉÓÔÕ×ÁÞÁ `%s' Õ Ë̦¤ÎÔ¦ NIS.\n"
 
-#: src/chfn.c:378 src/chsh.c:257
+#: src/chfn.c:366 src/chsh.c:223
 #, c-format
 msgid "%s: `%s' is the NIS master for this client.\n"
 msgstr "%s: `%s' ¤ NIS ÓÅÒ×ÅÒ ÄÌÑ ÃØÏÇÏ Ë̦¤ÎÔÁ.\n"
 
-#: src/chfn.c:453
+#: src/chfn.c:441
 #, c-format
 msgid "Changing the user information for %s\n"
 msgstr "úͦÎÁ ¦ÎÆÏÒÍÁæ§ ÐÒÏ ËÏÒÉÓÔÕ×ÁÞÁ %s\n"
 
-#: src/chfn.c:462
+#: src/chfn.c:450
 #, c-format
 msgid "%s: invalid name: \"%s\"\n"
 msgstr "%s: ÎÅצÒÎÅ ¦Í'Ñ: \"%s\"\n"
 
-#: src/chfn.c:467
+#: src/chfn.c:456
 #, c-format
 msgid "%s: invalid room number: \"%s\"\n"
 msgstr "%s: ÎÅצÒÎÉÊ ÎÏÍÅҠ˦ÍÎÁÔÉ: \"%s\"\n"
 
-#: src/chfn.c:472
+#: src/chfn.c:462
 #, c-format
 msgid "%s: invalid work phone: \"%s\"\n"
 msgstr "%s: ÎÅצÒÎÉÊ ÒÏÂÏÞÉÊ ÔÅÌÅÆÏÎ: \"%s\"\n"
 
-#: src/chfn.c:477
+#: src/chfn.c:468
 #, c-format
 msgid "%s: invalid home phone: \"%s\"\n"
 msgstr "%s: ÎÅצÒÎÉÊ ÄÏÍÁÛΦʠÔÅÌÅÆÏÎ: \"%s\"\n"
 
-#: src/chfn.c:482
+#: src/chfn.c:475
 #, c-format
 msgid "%s: \"%s\" contains illegal characters\n"
 msgstr "%s: \"%s\" ×ËÌÀÞÁ¤ ÚÁÂÏÒÏÎÅΦ ÓÉÍ×ÏÌÉ\n"
 
-#: src/chfn.c:494
+#: src/chfn.c:488
 #, c-format
 msgid "%s: fields too long\n"
 msgstr "%s: ÐÏÌÑ ÚÁÎÁÄÔÏ ÄÏ×Ǧ\n"
 
-#: src/chfn.c:509 src/chsh.c:347 src/gpasswd.c:582 src/passwd.c:1388
+#: src/chfn.c:504 src/chsh.c:316 src/gpasswd.c:570 src/passwd.c:1277
 msgid "Cannot change ID to root.\n"
 msgstr "îÅ ÍÏÖÕ ÚͦÎÉÔÉ ID ÎÁ root.\n"
 
-#: src/chfn.c:522 src/chsh.c:361 src/passwd.c:735 src/passwd.c:880
+#: src/chfn.c:519 src/chsh.c:331 src/passwd.c:656 src/passwd.c:811
 msgid "Cannot lock the password file; try again later.\n"
 msgstr "îÅ ÍÏÖÕ ÂÌÏËÕ×ÁÔÉ ÆÁÊÌ ÐÁÒÏÌÅÊ; ÓÐÒÏÂÕÊÔŠЦÚΦÛÅ.\n"
 
-#: src/chfn.c:528 src/chsh.c:367 src/passwd.c:740 src/passwd.c:885
+#: src/chfn.c:525 src/chsh.c:337 src/passwd.c:661 src/passwd.c:816
 msgid "Cannot open the password file.\n"
 msgstr "îÅ ÍÏÖՠצÄËÒÉÔÉ ÆÁÊÌ ÐÁÒÏÌÅÊ.\n"
 
-#: src/chfn.c:545 src/chsh.c:382 src/passwd.c:746 src/usermod.c:1320
+#: src/chfn.c:542 src/chsh.c:352 src/passwd.c:667 src/usermod.c:1348
 #, c-format
 msgid "%s: %s not found in /etc/passwd\n"
 msgstr "%s: %s ÎÅ ÚÎÁÊÄÅÎÏ Õ /etc/passwd\n"
 
-#: src/chfn.c:562 src/chsh.c:401 src/passwd.c:819 src/passwd.c:920
-#: src/passwd.c:960
+#: src/chfn.c:561 src/chsh.c:373 src/passwd.c:740 src/passwd.c:852
 msgid "Error updating the password entry.\n"
 msgstr "îÅ ÍÏÖÕ ÏÎÏ×ÉÔÉ ÚÁÐÉÓ Õ ÆÁÊ̦ ÐÁÒÏÌÅÊ.\n"
 
-#: src/chfn.c:585 src/chsh.c:424 src/passwd.c:832 src/passwd.c:933
+#: src/chfn.c:585 src/chsh.c:397 src/passwd.c:755 src/passwd.c:867
 msgid "Cannot commit password file changes.\n"
 msgstr "îÅ ÍÏÖÕ ÚÁÐÉÓÁÔÉ ÚͦÎÉ ÄÏ ÆÁÊÌÕ ÐÁÒÏÌÅÊ.\n"
 
-#: src/chfn.c:592 src/chsh.c:431
+#: src/chfn.c:592 src/chsh.c:404
 msgid "Cannot unlock the password file.\n"
 msgstr "îÅ ÍÏÖÕ ÒÁÚÂÌÏËÕ×ÁÔÉ ÆÁÊÌ ÐÁÒÏÌÅÊ.\n"
 
-#: src/chpasswd.c:69
+#: src/chpasswd.c:66
 #, c-format
 msgid "usage: %s [-e]\n"
 msgstr "×ÉËÏÒÉÓÔÏ×ÕÊÔÅ: %s [-e]\n"
 
-#: src/chpasswd.c:169 src/pwconv.c:104
+#: src/chpasswd.c:171 src/pwconv.c:94
 #, c-format
 msgid "%s: can't lock shadow file\n"
 msgstr "%s: ÎÅ ÍÏÖÕ ÚÁÂÌÏËÕ×ÁÔÉ ÆÁÊÌ Ú ÐÒÉÈÏ×ÁÎÉÍÉ ÐÁÒÏÌÑÍÉ\n"
 
-#: src/chpasswd.c:174 src/gpasswd.c:608 src/pwconv.c:109 src/pwunconv.c:109
-#: src/pwunconv.c:114
+#: src/chpasswd.c:177 src/gpasswd.c:596 src/pwconv.c:99 src/pwunconv.c:103
+#: src/pwunconv.c:108
 #, c-format
 msgid "%s: can't open shadow file\n"
 msgstr "%s: ÎÅ ÍÏÖՠצÄËÒÉÔÉ ÆÁÊÌ Ú ÐÒÉÈÏ×ÁÎÉÍÉ ÐÁÒÏÌÑÍÉ\n"
 
-#: src/chpasswd.c:196 src/newusers.c:465
+#: src/chpasswd.c:200 src/newusers.c:460
 #, c-format
 msgid "%s: line %d: line too long\n"
 msgstr "%s: ÒÑÄÏË %d: ÒÑÄÏË ÚÁÎÁÄÔÏ ÄÏ×ÇÉÊ\n"
 
-#: src/chpasswd.c:216
+#: src/chpasswd.c:220
 #, c-format
 msgid "%s: line %d: missing new password\n"
 msgstr "%s: ÒÑÄÏË %d: ÂÒÁËÕ¤ ÎÏ×ÏÇÏ ÐÁÒÏÌÑ\n"
 
-#: src/chpasswd.c:232
+#: src/chpasswd.c:237
 #, c-format
 msgid "%s: line %d: unknown user %s\n"
 msgstr "%s: ÒÑÄÏË %d: ÎÅצÄÏÍÉÊ ËÏÒÉÓÔÕ×ÁÞ %s\n"
 
-#: src/chpasswd.c:284
+#: src/chpasswd.c:290
 #, c-format
 msgid "%s: line %d: cannot update password entry\n"
 msgstr "%s: ÒÑÄÏË %d: ÎÅ ÍÏÖÕ ÏÎÏ×ÉÔÉ ÚÁÐÉÓ Õ ÂÁÚ¦ ÐÁÒÏÌÅÊ\n"
 
-#: src/chpasswd.c:300 src/newusers.c:585
+#: src/chpasswd.c:307 src/newusers.c:588
 #, c-format
 msgid "%s: error detected, changes ignored\n"
 msgstr "%s: ×ÉÑ×ÌÅÎÏ ÐÏÍÉÌËÕ, ÚͦÎÉ ¦ÇÎÏÒÕÀÔØÓÑ\n"
 
-#: src/chpasswd.c:311
+#: src/chpasswd.c:319
 #, c-format
 msgid "%s: error updating shadow file\n"
 msgstr "%s: ÐÏÍÉÌËÁ ÏÎÏ×ÌÅÎÎÑ ÆÁÊÌÕ Ú ÐÒÉÈÏ×ÁÎÉÍÉ ÐÁÒÏÌÑÍÉ\n"
 
-#: src/chpasswd.c:319
+#: src/chpasswd.c:328
 #, c-format
 msgid "%s: error updating password file\n"
 msgstr "%s: ÐÏÍÉÌËÁ ÏÎÏ×ÌÅÎÎÑ ÆÁÊÌÕ Ú ÐÁÒÏÌÑÍÉ\n"
 
-#: src/chsh.c:105
+#: src/chsh.c:75
 #, c-format
-msgid "Usage: %s [ -s shell ] [ name ]\n"
-msgstr "÷ÉËÏÒÉÓÔÏ×ÕÊÔÅ: %s [ -s shell ] [ ¦Í'Ñ ]\n"
+msgid "Usage: %s [-s shell] [name]\n"
+msgstr "÷ÉËÏÒÉÓÔÏ×ÕÊÔÅ: %s [-s shell] [¦Í'Ñ]\n"
+
+#: src/chsh.c:89
+#, fuzzy
+msgid "Enter the new value, or press return for the default\n"
+msgstr ""
+"÷×ÅÄ¦ÔØ ÎÏ×Å ÚÎÁÞÅÎÎÑ, ÁÂÏ ÎÁÖÍ¦ÔØ ENTER, ÄÌÑ ÚÎÁÞÅÎÎÑ ÐÏ ÚÁÍÏ×ÞÕ×ÁÎÎÀ\n"
+"\n"
 
-#: src/chsh.c:120
+#: src/chsh.c:90
 msgid "Login Shell"
 msgstr "Login Shell"
 
-#: src/chsh.c:273 src/chsh.c:286
+#: src/chsh.c:239 src/chsh.c:253
 #, c-format
 msgid "You may not change the shell for %s.\n"
 msgstr "îÅ ÍÏÖÎÁ ÚͦÎÉÔÉ shell ÄÌÑ %s.\n"
 
-#: src/chsh.c:315
+#: src/chsh.c:282
 #, c-format
 msgid "Changing the login shell for %s\n"
 msgstr "úͦÎÀÀ shell ÄÌÑ %s\n"
 
-#: src/chsh.c:327
+#: src/chsh.c:294
 #, c-format
 msgid "%s: Invalid entry: %s\n"
 msgstr "%s: îÅצÒÎÉÊ ÚÁÐÉÓ: %s\n"
 
-#: src/chsh.c:332
+#: src/chsh.c:301
 #, c-format
 msgid "%s is an invalid shell.\n"
 msgstr "%s ¤ ÎÅצÒÎÉÊ shell.\n"
 
-#: src/dpasswd.c:69
+#: src/dpasswd.c:52
 #, c-format
-msgid "Usage: %s [ -(a|d) ] shell\n"
-msgstr "÷ÉËÏÒÉÓÔÏ×ÕÊÔÅ: %s [ -(a|d) ] shell\n"
+msgid "Usage: %s [-(a|d)] shell\n"
+msgstr "÷ÉËÏÒÉÓÔÏ×ÕÊÔÅ: %s [-(a|d)] shell\n"
 
-#: src/dpasswd.c:134
+#: src/dpasswd.c:115
 msgid "Shell password: "
 msgstr "Shell ÐÁÒÏÌØ: "
 
-#: src/dpasswd.c:140
+#: src/dpasswd.c:121
 msgid "re-enter Shell password: "
 msgstr "ðÏ×ÔÏÒ¦ÔØ ÐÁÒÏÌØ ÄÌÑ shell: "
 
-#: src/dpasswd.c:147
+#: src/dpasswd.c:129
 #, c-format
 msgid "%s: Passwords do not match, try again.\n"
 msgstr "%s: ðÁÒÏÌØ ÎÅ ÓЦ×ÐÁÄÁ¤, ÓÐÒÏÂÕÊÔÅ ÚÎÏ×Õ.\n"
 
-#: src/dpasswd.c:167
+#: src/dpasswd.c:149
 #, c-format
 msgid "%s: can't create %s"
 msgstr "%s: ÎÅ ÍÏÖÕ ÓÔ×ÏÒÉÔÉ %s"
 
-#: src/dpasswd.c:172
+#: src/dpasswd.c:155
 #, c-format
 msgid "%s: can't open %s"
 msgstr "%s: ÎÅ ÍÏÖՠצÄËÒÉÔÉ %s"
 
-#: src/dpasswd.c:200
+#: src/dpasswd.c:183
 #, c-format
 msgid "%s: Shell %s not found.\n"
 msgstr "%s: Shell %s ÎÅ ÚÎÁÊÄÅÎÏ.\n"
 
-#: src/expiry.c:84
-msgid "Usage: expiry { -f | -c }\n"
+#: src/expiry.c:59
+#, fuzzy
+msgid "Usage: expiry {-f|-c}\n"
 msgstr "÷ÉËÏÒÉÓÔÏ×ÕÊÔÅ: expiry { -f | -c }\n"
 
-#: src/expiry.c:137
+#: src/expiry.c:113
 #, c-format
 msgid "%s: WARNING!  Must be set-UID root!\n"
 msgstr "%s: úáóôåòåöåîîñ! ðÒÏÇÒÁÍÁ ÐÏ×ÉÎÁ ÂÕÔÉ SUID root!\n"
 
-#: src/expiry.c:148
+#: src/expiry.c:124
 #, c-format
 msgid "%s: unknown user\n"
 msgstr "%s: ÎÅצÄÏÍÉÊ ËÏÒÉÓÔÕ×ÁÞ\n"
 
-#: src/faillog.c:79
+#: src/faillog.c:77
 #, c-format
 msgid "usage: %s [-a|-u user] [-m max] [-r] [-t days] [-l locksecs]\n"
 msgstr ""
 "×ÉËÏÒÉÓÔÏ×ÕÊÔÅ: %s [-a|-u ËÏÒÉÓÔÕ×ÁÞ] [-m ÍÁËÓ] [-r] [-t ÄΦ×] [-l ÌÏË_ÓÅË]\n"
 
-#: src/faillog.c:134 src/lastlog.c:103
+#: src/faillog.c:131 src/lastlog.c:96
 #, c-format
 msgid "Unknown User: %s\n"
 msgstr "îÅצÄÏÍÉÊ ËÏÒÉÓÔÕ×ÁÞ: %s\n"
 
-#: src/faillog.c:215
+#: src/faillog.c:212
 #, fuzzy
 msgid "Username   Failures  Maximum  Latest\n"
 msgstr "ëÏÒÉÓÔÕ×ÁÞ ðÏÍÉÌÏË   íÁËÓ¦ÍÕÍ ïÓÔÁÎÎÑ\n"
 
-#: src/faillog.c:232
+#: src/faillog.c:229
 #, c-format
 msgid "  %s on %s"
 msgstr "  %s ÎÁ %s"
 
-#: src/faillog.c:236
+#: src/faillog.c:233
 #, c-format
 msgid " [%lds left]"
 msgstr " [%lds ÚÁÌÉÛÉÌÏÓØ]"
 
-#: src/faillog.c:239
+#: src/faillog.c:237
 #, c-format
 msgid " [%lds lock]"
 msgstr " [%lds ÂÌÏËÏ×ÁÎÏ]"
 
-#: src/gpasswd.c:89
+#: src/gpasswd.c:78
 #, c-format
 msgid "usage: %s [-r|-R] group\n"
 msgstr "×ÉËÏÒÉÓÔÏ×ÕÊÔÅ: %s [-r|-R] ÇÒÕÐÁ\n"
 
-#: src/gpasswd.c:90
+#: src/gpasswd.c:79
 #, c-format
 msgid "       %s [-a user] group\n"
 msgstr "       %s [-a ËÏÒÉÓÔÕ×ÁÞ] ÇÒÕÐÁ\n"
 
-#: src/gpasswd.c:91
+#: src/gpasswd.c:80
 #, c-format
 msgid "       %s [-d user] group\n"
 msgstr "       %s [-d ËÏÒÉÓÔÕ×ÁÞ] ÇÒÕÐÁ\n"
 
-#: src/gpasswd.c:93
+#: src/gpasswd.c:83
 #, c-format
 msgid "       %s [-A user,...] [-M user,...] group\n"
 msgstr "       %s [-A ËÏÒÉÓÔÕ×ÁÞ,...] [-M ËÏÒÉÓÔÕ×ÁÞ,...] ÇÒÕÐÁ\n"
 
-#: src/gpasswd.c:96
+#: src/gpasswd.c:85
 #, c-format
 msgid "       %s [-M user,...] group\n"
 msgstr "       %s [-M ËÏÒÉÓÔÕ×ÁÞ,...] ÇÒÕÐÁ\n"
 
-#: src/gpasswd.c:160 src/gpasswd.c:245
+#: src/gpasswd.c:146 src/gpasswd.c:230
 #, c-format
 msgid "%s: unknown user %s\n"
 msgstr "%s: ÎÅצÄÏÍÉÊ ËÏÒÉÓÔÕ×ÁÞ %s\n"
 
-#: src/gpasswd.c:172
+#: src/gpasswd.c:157
 msgid "Permission denied.\n"
 msgstr "äÏÓÔÕРÚÁÂÏÒÏÎÅÎÏ.\n"
 
-#: src/gpasswd.c:257
+#: src/gpasswd.c:243
 #, c-format
 msgid "%s: shadow group passwords required for -A\n"
 msgstr "%s: ÐÒÉÈÏ×ÁΦ ÐÁÒÏ̦ ÇÒÕРÐÏÔÒ¦ÂΦ ÄÌÑ -A\n"
 
-#: src/gpasswd.c:308
+#: src/gpasswd.c:294
 msgid "Who are you?\n"
 msgstr "÷É ÈÔÏ?\n"
 
-#: src/gpasswd.c:328 src/newgrp.c:251
+#: src/gpasswd.c:313 src/newgrp.c:297
 #, c-format
 msgid "unknown group: %s\n"
 msgstr "ÎÅצÄÏÍÁ ÇÒÕÐÁ: %s\n"
 
-#: src/gpasswd.c:436
+#: src/gpasswd.c:422
 #, c-format
 msgid "Adding user %s to group %s\n"
 msgstr "äÏÄÁÎÏ ÎÏ×ÏÇÏ ËÏÒÉÓÔÕ×ÁÞÁ %s ÄÏ ÇÒÕÐÉ %s\n"
 
-#: src/gpasswd.c:453
+#: src/gpasswd.c:440
 #, c-format
 msgid "Removing user %s from group %s\n"
 msgstr "÷ÉÄÁÌÅÎÏ ËÏÒÉÓÔÕ×ÁÞÁ %s Ú ÇÒÕÐÉ %s\n"
 
-#: src/gpasswd.c:466
+#: src/gpasswd.c:454
 #, c-format
 msgid "%s: unknown member %s\n"
 msgstr "%s: ÎÅצÄÏÍÉÊ ÞÌÅΠ%s\n"
 
-#: src/gpasswd.c:513
+#: src/gpasswd.c:501
 #, c-format
 msgid "%s: Not a tty\n"
 msgstr "%s: îÅ ¤ tty\n"
 
 #.
-#. * 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.
+#. * 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.
 #.
-#: src/gpasswd.c:535
+#: src/gpasswd.c:522
 #, c-format
 msgid "Changing the password for group %s\n"
 msgstr "úͦÎÁ ÐÁÒÏÌÑ ÄÌÑ ÇÒÕÐÉ %s\n"
 
-#: src/gpasswd.c:538
+#: src/gpasswd.c:525
 msgid "New Password: "
 msgstr "îÏ×ÉÊ ÐÁÒÏÌØ: "
 
-#: src/gpasswd.c:543 src/passwd.c:422
+#: src/gpasswd.c:530 src/passwd.c:365
 msgid "Re-enter new password: "
 msgstr "ðÏ×ÔÏÒ¦ÔØ ÎÏ×ÉÊ ÐÁÒÏÌØ: "
 
-#: src/gpasswd.c:555
+#: src/gpasswd.c:542
 msgid "They don't match; try again"
 msgstr "ÎÅ ÓЦ×ÐÁÄÁ¤; ÓÐÒÏÂÕÊÔÅ ÚÎÏ×Õ"
 
-#: src/gpasswd.c:559
+#: src/gpasswd.c:546
 #, c-format
 msgid "%s: Try again later\n"
 msgstr "%s: óÐÒÏÂÕÊÔÅ ÚÎÏ×ՠЦÚΦÛÅ\n"
 
-#: src/gpasswd.c:590
+#: src/gpasswd.c:578
 #, c-format
 msgid "%s: can't get lock\n"
 msgstr "%s: ÎÅ ÍÏÖÕ ÚÁÂÌÏËÕ×ÁÔÉ\n"
 
-#: src/gpasswd.c:596
+#: src/gpasswd.c:584
 #, c-format
 msgid "%s: can't get shadow lock\n"
 msgstr "%s: ÎÅ ÍÏÖÕ ÚÁÂÌÏËÕ×ÁÔÉ ÂÁÚÕ ÐÒÉÈÏ×ÁÎÉÊ ÐÁÒÏÌÅÊ\n"
 
-#: src/gpasswd.c:602
+#: src/gpasswd.c:590
 #, c-format
 msgid "%s: can't open file\n"
 msgstr "%s: ÎÅ ÍÏÖՠצÄËÒÉÔÉ ÆÁÊÌ\n"
 
-#: src/gpasswd.c:614
+#: src/gpasswd.c:602
 #, c-format
 msgid "%s: can't update entry\n"
 msgstr "%s: ÎÅ ÍÏÖÕ ÏÎÏ×ÉÔÉ ÚÁÐÉÓ\n"
 
-#: src/gpasswd.c:620
+#: src/gpasswd.c:608
 #, c-format
 msgid "%s: can't update shadow entry\n"
 msgstr "%s: ÎÅ ÍÏÖÕ ÏÎÏ×ÉÔÉ ÚÁÐÉÓ Õ ÂÁÚ¦ ÐÒÉÈÏ×ÁÎÉÈ ÐÁÒÏÌÅÊ\n"
 
-#: src/gpasswd.c:626
+#: src/gpasswd.c:615
 #, c-format
 msgid "%s: can't re-write file\n"
 msgstr "%s: ÎÅ ÍÏÖÕ ÐÅÒÅÐÉÓÁÔÉ ÆÁÊÌ\n"
 
-#: src/gpasswd.c:632
+#: src/gpasswd.c:621
 #, c-format
 msgid "%s: can't re-write shadow file\n"
 msgstr "%s: ÎÅ ÍÏÖÕ ÐÅÒÅÐÉÓÁÔÉ ÆÁÊÌ ÐÒÉÈÏ×ÁÎÉÊ ÐÁÒÏÌÅÊ\n"
 
-#: src/gpasswd.c:640
+#: src/gpasswd.c:630
 #, c-format
 msgid "%s: can't unlock file\n"
 msgstr "%s: ÎÅ ÍÏÖÕ ÒÁÚÂÌÏËÕ×ÁÔÉ ÆÁÊÌ\n"
 
-#: src/gpasswd.c:645
+#: src/gpasswd.c:635
 #, c-format
 msgid "%s: can't update DBM files\n"
 msgstr "%s: ÎÅ ÍÏÖÕ ÏÎÏ×ÉÔÉ DBM ÆÁÊÌ\n"
 
-#: src/gpasswd.c:652
+#: src/gpasswd.c:642
 #, c-format
 msgid "%s: can't update DBM shadow files\n"
 msgstr "%s: ÎÅ ÍÏÖÕ ÏÎÏ×ÉÔÉ DBM ÆÁÊÌ Ú ÐÒÉÈÏ×ÁÎÉÍÉ ÐÁÒÏÌÑÍÉ\n"
 
-#: src/groupadd.c:111
+#: src/groupadd.c:101
 msgid "usage: groupadd [-g gid [-o]] group\n"
 msgstr "×ÉËÏÒÉÓÔÏ×ÕÊÔÅ: groupadd [-g gid [-o]] ÇÒÕÐÁ\n"
 
-#: src/groupadd.c:179 src/groupadd.c:202 src/groupmod.c:189 src/groupmod.c:236
-#: src/useradd.c:949 src/usermod.c:546 src/usermod.c:682
+#: src/groupadd.c:167 src/groupadd.c:192 src/groupmod.c:179 src/groupmod.c:228
+#: src/useradd.c:970 src/usermod.c:552 src/usermod.c:695
 #, c-format
 msgid "%s: error adding new group entry\n"
 msgstr "%s: ÐÏÍÉÌËÁ ÄÏÄÁÎÎÑ ÎÏ×ÏÇÏ ÚÁÐÉÓÕ Õ ÆÁÊÌ ÇÒÕÐ\n"
 
-#: src/groupadd.c:189 src/groupadd.c:212 src/groupmod.c:205 src/useradd.c:960
-#: src/usermod.c:558 src/usermod.c:694
+#: src/groupadd.c:178 src/groupadd.c:203 src/groupmod.c:197 src/useradd.c:981
+#: src/usermod.c:564 src/usermod.c:708
 #, c-format
 msgid "%s: cannot add new dbm group entry\n"
 msgstr "%s: ÐÏÍÉÌËÁ ÄÏÄÁÎÎÑ ÎÏ×ÏÇÏ ÚÁÐÉÓÕ Õ ÆÁÊÌ ÇÒÕРdbm\n"
 
-#: src/groupadd.c:264 src/useradd.c:1014
+#: src/groupadd.c:255 src/useradd.c:1034
 #, c-format
 msgid "%s: name %s is not unique\n"
 msgstr "%s: ¦Í'Ñ %s ÎÅ ¤ ÕΦËÁÌØÎÉÍ\n"
 
-#: src/groupadd.c:279
-#, c-format
-msgid "%s: gid %ld is not unique\n"
-msgstr "%s: gid %ld ÎÅ ¤ ÕΦËÁÌØÎÉÍ\n"
+#: src/groupadd.c:270
+#, fuzzy, c-format
+msgid "%s: gid %u is not unique\n"
+msgstr "%s: uid %ld ÎÅ ¤ ÕΦËÁÌØÎÉÍ\n"
 
-#: src/groupadd.c:303
+#: src/groupadd.c:294
 #, c-format
 msgid "%s: can't get unique gid\n"
 msgstr "%s: ÎÅ ÍÏÖÕ ÏÔÒÉÍÁÔÉ ÕΦËÁÌØÎÉÊ gid\n"
@@ -925,54 +920,54 @@ msgstr "%s: 
 #.
 #. * All invalid group names land here.
 #.
-#: src/groupadd.c:327 src/groupmod.c:347
+#: src/groupadd.c:317 src/groupmod.c:341
 #, c-format
 msgid "%s: %s is a not a valid group name\n"
 msgstr "%s: %s: ÔÏ ÎÅ ¤ ×¦ÒÎÅ ¦Í'Ñ ÇÒÕÐÉ\n"
 
-#: src/groupadd.c:356 src/groupmod.c:373
+#: src/groupadd.c:346 src/groupmod.c:366
 #, c-format
 msgid "%s: invalid group %s\n"
 msgstr "%s: ÎÅצÒÎÁ ÇÒÕÐÁ %s\n"
 
-#: src/groupadd.c:373 src/useradd.c:1290
+#: src/groupadd.c:363 src/useradd.c:1313
 #, c-format
 msgid "%s: -O requires NAME=VALUE\n"
 msgstr "%s: -O ×ÉÍÁÇÁ¤ úí¶îîá=úîáþåîîñ\n"
 
-#: src/groupadd.c:418 src/groupdel.c:173 src/groupmod.c:409 src/useradd.c:1399
-#: src/userdel.c:309 src/usermod.c:570
+#: src/groupadd.c:407 src/groupdel.c:173 src/groupmod.c:401 src/useradd.c:1428
+#: src/userdel.c:312 src/usermod.c:576
 #, c-format
 msgid "%s: cannot rewrite group file\n"
 msgstr "%s: ÎÅ ÍÏÖÕ ÐÅÒÅÐÉÓÁÔÉ ÆÁÊÌ ÇÒÕÐ\n"
 
-#: src/groupadd.c:424 src/groupdel.c:179 src/groupmod.c:415 src/useradd.c:1407
-#: src/userdel.c:315 src/usermod.c:707
+#: src/groupadd.c:415 src/groupdel.c:179 src/groupmod.c:409 src/useradd.c:1437
+#: src/userdel.c:319 src/usermod.c:722
 #, c-format
 msgid "%s: cannot rewrite shadow group file\n"
 msgstr "%s: ÎÅ ÍÏÖÕ ÐÅÒÅÐÉÓÁÔÉ ÆÁÊÌ ÐÒÉÈÏ×ÁÎÉÈ ÇÒÕÐ\n"
 
-#: src/groupadd.c:443 src/groupdel.c:198 src/groupmod.c:434 src/userdel.c:395
+#: src/groupadd.c:433 src/groupdel.c:198 src/groupmod.c:427 src/userdel.c:403
 #, c-format
 msgid "%s: unable to lock group file\n"
 msgstr "%s: ÎÅ ÍÏÖÕ ÚÁÂÌÏËÕ×ÁÔÉ ÆÁÊÌ ÇÒÕÐ\n"
 
-#: src/groupadd.c:447 src/groupdel.c:202 src/groupmod.c:438
+#: src/groupadd.c:438 src/groupdel.c:202 src/groupmod.c:432
 #, c-format
 msgid "%s: unable to open group file\n"
 msgstr "%s: ÎÅ ÍÏÖՠצÄËÒÉÔÉ ÆÁÊÌ ÇÒÕÐ\n"
 
-#: src/groupadd.c:452 src/groupdel.c:207 src/groupmod.c:443 src/userdel.c:404
+#: src/groupadd.c:445 src/groupdel.c:207 src/groupmod.c:439 src/userdel.c:414
 #, c-format
 msgid "%s: unable to lock shadow group file\n"
 msgstr "%s: ÎÅ ÍÏÖÕ ÂÌÏËÕ×ÁÔÉ ÆÁÊÌ ÐÒÉÈÏ×ÁÎÉÈ ÇÒÕÐ\n"
 
-#: src/groupadd.c:457 src/groupdel.c:212 src/groupmod.c:448
+#: src/groupadd.c:451 src/groupdel.c:212 src/groupmod.c:445
 #, c-format
 msgid "%s: unable to open shadow group file\n"
 msgstr "%s: ÎÅ ÍÏÖՠצÄËÒÉÔÉ ÆÁÊÌ ÐÒÉÈÏ×ÁÎÉÈ ÇÒÕÐ\n"
 
-#: src/groupadd.c:568
+#: src/groupadd.c:562
 #, c-format
 msgid "%s: group %s exists\n"
 msgstr "%s: ÇÒÕÐÁ %s ¦ÓÎÕ¤\n"
@@ -981,12 +976,12 @@ msgstr "%s: 
 msgid "usage: groupdel group\n"
 msgstr "×ÉËÏÒÉÓÔÏ×ÕÊÔÅ: groupdel ÇÒÕÐÁ\n"
 
-#: src/groupdel.c:110 src/groupmod.c:193 src/groupmod.c:240
+#: src/groupdel.c:110 src/groupmod.c:184 src/groupmod.c:233
 #, c-format
 msgid "%s: error removing group entry\n"
 msgstr "%s: ÐÏÍÉÌËÁ ×¦ÄÁÌÅÎÎÑ ÚÁÐÉÓÕ Ú ÂÁÚÉ ÇÒÕÐ\n"
 
-#: src/groupdel.c:122 src/groupmod.c:212
+#: src/groupdel.c:122 src/groupmod.c:204
 #, c-format
 msgid "%s: error removing group dbm entry\n"
 msgstr "%s: ÐÏÍÉÌËÁ ×¦ÄÁÌÅÎÎÑ ÚÁÐÉÓÕ Ú ÂÁÚÉ ÇÒÕРdbm\n"
@@ -996,7 +991,7 @@ msgstr "%s: 
 msgid "%s: error removing shadow group entry\n"
 msgstr "%s: ÐÏÍÉÌËÁ ×¦ÄÁÌÅÎÎÑ ÚÁÐÉÓÕ Ú ÂÁÚÉ ÐÒÉÈÏ×ÁÎÉÈ ÇÒÕÐ\n"
 
-#: src/groupdel.c:150 src/groupmod.c:258
+#: src/groupdel.c:150 src/groupmod.c:254
 #, c-format
 msgid "%s: error removing shadow group dbm entry\n"
 msgstr "%s: ÐÏÍÉÌËÁ ×¦ÄÁÌÅÎÎÑ ÚÁÐÉÓÕ Ú ÂÁÚÉ ÐÒÉÈÏ×ÁÎÉÈ ÇÒÕРdbm\n"
@@ -1009,130 +1004,130 @@ msgstr "%s: 
 msgid "%s: cannot remove user's primary group.\n"
 msgstr "%s: ÎÅ ÍÏÖÕ ×ÉÄÁÌÉÔÉ ÇÏÌÏ×ÎÕ ÇÒÕÐÕ ËÏÒÉÓÔÕ×ÁÞÁ.\n"
 
-#: src/groupdel.c:355 src/groupmod.c:551
+#: src/groupdel.c:355 src/groupmod.c:550
 #, c-format
 msgid "%s: group %s does not exist\n"
 msgstr "%s: ÇÒÕÐÁ %s ÎÅ ¦ÓÎÕ¤\n"
 
-#: src/groupdel.c:369 src/groupmod.c:567
+#: src/groupdel.c:369 src/groupmod.c:566
 #, c-format
 msgid "%s: group %s is a NIS group\n"
 msgstr "%s: ÇÒÕÐÁ %s ¤ ÇÒÕÐÏÀ NIS\n"
 
-#: src/groupdel.c:375 src/groupmod.c:573 src/userdel.c:811 src/usermod.c:1023
+#: src/groupdel.c:375 src/groupmod.c:571 src/userdel.c:776 src/usermod.c:1045
 #, c-format
 msgid "%s: %s is the NIS master\n"
 msgstr "%s: %s ¤ ÓÅÒ×ÅÒ NIS\n"
 
-#: src/groupmems.c:92
+#: src/groupmems.c:95
 msgid "Member already exists\n"
 msgstr ""
 
-#: src/groupmems.c:121
+#: src/groupmems.c:125
 msgid "Member to remove could not be found\n"
 msgstr ""
 
-#: src/groupmems.c:151
+#: src/groupmems.c:158
 msgid "usage: groupmems -a username | -d username | -D | -l [-g groupname]\n"
 msgstr ""
 
-#: src/groupmems.c:191
+#: src/groupmems.c:201
 msgid "Only root can add members to different groups\n"
 msgstr ""
 
-#: src/groupmems.c:196
+#: src/groupmems.c:206
 msgid "Group access is required\n"
 msgstr ""
 
-#: src/groupmems.c:199
+#: src/groupmems.c:210
 msgid "Not primary owner of current group\n"
 msgstr ""
 
-#: src/groupmems.c:204
+#: src/groupmems.c:215
 #, fuzzy
 msgid "Unable to lock group file\n"
 msgstr "%s: ÎÅ ÍÏÖÕ ÚÁÂÌÏËÕ×ÁÔÉ ÆÁÊÌ ÇÒÕÐ\n"
 
-#: src/groupmems.c:209
+#: src/groupmems.c:220
 #, fuzzy
 msgid "Unable to open group file\n"
 msgstr "%s: ÎÅ ÍÏÖՠצÄËÒÉÔÉ ÆÁÊÌ ÇÒÕÐ\n"
 
-#: src/groupmems.c:229
+#: src/groupmems.c:240
 #, fuzzy
 msgid "Cannot close group file\n"
 msgstr "%s: ÎÅ ÍÏÖՠצÄËÒÉÔÉ ÆÁÊÌ ÇÒÕÐ\n"
 
-#: src/groupmod.c:111
+#: src/groupmod.c:103
 msgid "usage: groupmod [-g gid [-o]] [-n name] group\n"
 msgstr "×ÉËÏÒÉÓÔÏ×ÕÊÔÅ: groupmod [-g gid [-o]] [-n ¦Í'Ñ] ÇÒÕÐÁ\n"
 
-#: src/groupmod.c:171
+#: src/groupmod.c:161
 #, fuzzy, c-format
 msgid "%s: %s not found in /etc/group\n"
 msgstr "%s: %s ÎÅ ÚÎÁÊÄÅÎÏ Õ /etc/passwd\n"
 
-#: src/groupmod.c:252
+#: src/groupmod.c:247
 #, c-format
 msgid "%s: cannot add new dbm shadow group entry\n"
 msgstr "%s: ÎÅ ÍÏÖÕ ÄÏÄÁÔÉ ÚÁÐÉÓ Õ ÂÁÚÕ ÐÒÉÈÏ×ÁÎÉÈ ÇÒÕРdbm\n"
 
-#: src/groupmod.c:305
-#, c-format
-msgid "%s: %ld is not a unique gid\n"
+#: src/groupmod.c:300
+#, fuzzy, c-format
+msgid "%s: %u is not a unique gid\n"
 msgstr "%s: %ld ÎÅ ¤ ÕΦËÁÌØÎÉÊ gid\n"
 
-#: src/groupmod.c:336
+#: src/groupmod.c:330
 #, c-format
 msgid "%s: %s is not a unique name\n"
 msgstr "%s: %s ÎÅ ¤ ÕΦËÁÌØÎÅ ¦Í'Ñ\n"
 
-#: src/groups.c:62
+#: src/groups.c:59
 #, c-format
 msgid "unknown user %s\n"
 msgstr "ÎÅצÄÏÍÉÊ ËÏÒÉÓÔÕ×ÁÞ %s\n"
 
-#: src/grpck.c:98
+#: src/grpck.c:87
 #, fuzzy, c-format
-msgid "Usage: %s [ -sr ] [ group [ gshadow ] ]\n"
-msgstr "÷ÉËÏÒÉÓÔÏ×ÕÊÔÅ: %s [ -r ] [ ÇÒÕÐÁ [ gshadow ] ]\n"
+msgid "Usage: %s [-r] [-s] [group [gshadow]]\n"
+msgstr "÷ÉËÏÒÉÓÔÏ×ÕÊÔÅ: %s [-r] [-s] [ÇÒÕÐÁ [gshadow]]\n"
 
-#: src/grpck.c:100
+#: src/grpck.c:90
 #, fuzzy, c-format
-msgid "Usage: %s [ -sr ] [ group ]\n"
-msgstr "÷ÉËÏÒÉÓÔÏ×ÕÊÔÅ: %s [ -r ] [ ÇÒÕÐÁ ]\n"
+msgid "Usage: %s [-r] [-s] [group]\n"
+msgstr "÷ÉËÏÒÉÓÔÏ×ÕÊÔÅ: %s [-r] [-s] [ÇÒÕÐÁ]\n"
 
-#: src/grpck.c:119 src/pwck.c:119
+#: src/grpck.c:108 src/pwck.c:108
 msgid "No"
 msgstr "î¦"
 
-#: src/grpck.c:204 src/pwck.c:186
+#: src/grpck.c:192 src/pwck.c:175
 #, c-format
 msgid "%s: -s and -r are incompatibile\n"
 msgstr ""
 
-#: src/grpck.c:244 src/grpck.c:252 src/pwck.c:226 src/pwck.c:235
+#: src/grpck.c:232 src/grpck.c:242 src/pwck.c:215 src/pwck.c:225
 #, c-format
 msgid "%s: cannot lock file %s\n"
 msgstr "%s: ÎÅ ÍÏÖÕ ÚÁÂÌÏËÕ×ÁÔÉ ÆÁÊÌ %s\n"
 
-#: src/grpck.c:267 src/grpck.c:275 src/mkpasswd.c:216 src/pwck.c:251
-#: src/pwck.c:260
+#: src/grpck.c:259 src/grpck.c:268 src/mkpasswd.c:202 src/pwck.c:242
+#: src/pwck.c:251
 #, c-format
 msgid "%s: cannot open file %s\n"
 msgstr "%s: ÎÅ ÍÏÖՠצÄËÒÉÔÉ ÆÁÊÌ %s\n"
 
 #.
-#. * Tell the user this entire line is bogus and
-#. * ask them to delete it.
+#. * Tell the user this entire line is bogus and ask
+#. * them to delete it.
 #.
-#: src/grpck.c:317
+#: src/grpck.c:311
 msgid "invalid group file entry\n"
 msgstr "ÎÅצÒÎÉÊ ÚÁÐÉÓ Õ ÆÁÊ̦ ÇÒÕÐ\n"
 
-#: src/grpck.c:318 src/grpck.c:381 src/grpck.c:473 src/grpck.c:536
-#: src/grpck.c:553 src/pwck.c:305 src/pwck.c:367 src/pwck.c:474 src/pwck.c:536
-#: src/pwck.c:560
+#: src/grpck.c:312 src/grpck.c:375 src/grpck.c:458 src/grpck.c:521
+#: src/grpck.c:538 src/pwck.c:296 src/pwck.c:358 src/pwck.c:457 src/pwck.c:519
+#: src/pwck.c:543
 #, c-format
 msgid "delete line `%s'? "
 msgstr "×ÉÄÁÌÉÔÉ ÚÁÐÉÓ `%s'? "
@@ -1141,35 +1136,30 @@ msgstr "
 #. * Tell the user this entry is a duplicate of
 #. * another and ask them to delete it.
 #.
-#: src/grpck.c:380
+#: src/grpck.c:374
 msgid "duplicate group entry\n"
 msgstr "ÐÏ×ÔÏÒÀÀÞÉÓÑ ÚÁÐÉÓÉ Õ ÂÁÚ¦ ÇÒÕÐ\n"
 
-#: src/grpck.c:397
+#: src/grpck.c:391
 #, c-format
 msgid "invalid group name `%s'\n"
 msgstr "ÎÅצÒÎÅ ¦Í'Ñ ÇÒÕÐÉ `%s'\n"
 
-#: src/grpck.c:407
-#, c-format
-msgid "group %s: bad GID (%d)\n"
-msgstr "ÇÒÕÐÁ %s: ÍÁ¤ ÎÅצÒÎÉÊ GID (%d)\n"
-
-#: src/grpck.c:433
+#: src/grpck.c:418
 #, c-format
 msgid "group %s: no user %s\n"
 msgstr "ÇÒÕÐÁ %s: ÎÅ ÍÁ¤ ËÏÒÉÓÔÕ×Áަנ%s\n"
 
-#: src/grpck.c:435 src/grpck.c:604
+#: src/grpck.c:420 src/grpck.c:590
 #, c-format
 msgid "delete member `%s'? "
 msgstr "×ÉÄÁÌÉÔÉ ÞÌÅÎÁ `%s'? "
 
 #.
-#. * Tell the user this entire line is bogus and
-#. * ask them to delete it.
+#. * Tell the user this entire line is bogus and ask
+#. * them to delete it.
 #.
-#: src/grpck.c:472
+#: src/grpck.c:457
 msgid "invalid shadow group file entry\n"
 msgstr "ÎÅצÒÎÉÊ ÚÁÐÉÓ Õ ÆÁÊ̦ ÐÒÉÈÏ×ÁÎÉÈ ÇÒÕÐ\n"
 
@@ -1177,204 +1167,201 @@ msgstr "
 #. * Tell the user this entry is a duplicate of
 #. * another and ask them to delete it.
 #.
-#: src/grpck.c:535
+#: src/grpck.c:520
 msgid "duplicate shadow group entry\n"
 msgstr "ÐÏ×ÔÏÒÀÀÞÉÊÓÑ ÚÁÐÉÓ Õ ÆÁÊ̦ ÐÒÉÈÏ×ÁÎÉÈ ÇÒÕÐ\n"
 
-#: src/grpck.c:552
+#: src/grpck.c:537
 msgid "no matching group file entry\n"
 msgstr "צÄÓÕÔΦʠצÄÐÏצÄÎÉÊ ÚÁÐÉÓ Õ ÆÁÊ̦ ÇÒÕÐ\n"
 
-#: src/grpck.c:572
+#: src/grpck.c:558
 #, c-format
 msgid "shadow group %s: no administrative user %s\n"
 msgstr "ÐÒÉÈÏ×ÁÎÁ ÇÒÕÐÁ %s: ÎÅ ÍÁ¤ ÁÄͦΦÓÔÒÁÔÏÒÁ %s\n"
 
-#: src/grpck.c:574
+#: src/grpck.c:560
 #, c-format
 msgid "delete administrative member `%s'? "
 msgstr "×ÉÄÁÌÉÔÉ ÁÄͦΦÓÔÒÁÔÏÒÁ `%s'? "
 
-#: src/grpck.c:602
+#: src/grpck.c:588
 #, c-format
 msgid "shadow group %s: no user %s\n"
 msgstr "ÐÒÉÈÏ×ÁÎÁ ÇÒÕÐÁ %s: ÎÅ ÍÁ¤ ËÏÒÉÓÔÕ×Áަנ%s\n"
 
-#: src/grpck.c:630 src/grpck.c:636 src/pwck.c:592 src/pwck.c:600
+#: src/grpck.c:616 src/grpck.c:622 src/pwck.c:577 src/pwck.c:585
 #, c-format
 msgid "%s: cannot update file %s\n"
 msgstr "%s: ÎÅ ÍÏÖÕ ÏÎÏ×ÉÔÉ ÆÁÊÌ %s\n"
 
-#: src/grpck.c:660 src/pwck.c:626
+#: src/grpck.c:647 src/pwck.c:612
 #, c-format
 msgid "%s: the files have been updated; run mkpasswd\n"
 msgstr "%s: ÆÁÊÌÉ ÂÕÌÏ ÏÎÏ×ÌÅÎÏ; ×ÉËÏÎÁÊÔÅ mkpasswd\n"
 
-#: src/grpck.c:661 src/grpck.c:665 src/pwck.c:627 src/pwck.c:631
+#: src/grpck.c:648 src/grpck.c:652 src/pwck.c:613 src/pwck.c:617
 #, c-format
 msgid "%s: no changes\n"
 msgstr "%s: ÂÅÚ ÚͦÎ\n"
 
-#: src/grpck.c:664 src/pwck.c:630
+#: src/grpck.c:651 src/pwck.c:616
 #, c-format
 msgid "%s: the files have been updated\n"
 msgstr "%s: ÆÁÊÌÉ ÂÕÌÏ ÏÎÏ×ÌÅÎÏ\n"
 
-#: src/grpconv.c:62 src/grpunconv.c:63
+#: src/grpconv.c:60 src/grpunconv.c:56
 #, c-format
 msgid "%s: can't lock group file\n"
 msgstr "%s: ÎÅ ÍÏÖÕ ÂÌÏËÕ×ÁÔÉ ÆÁÊÌ ÇÒÕÐ\n"
 
-#: src/grpconv.c:67 src/grpunconv.c:68
+#: src/grpconv.c:65 src/grpunconv.c:61
 #, c-format
 msgid "%s: can't open group file\n"
 msgstr "%s: ÎÅ ÍÏÖՠצÄËÒÉÔÉ ÆÁÊÌ ÇÒÕÐ\n"
 
-#: src/grpconv.c:72 src/grpunconv.c:73
+#: src/grpconv.c:70 src/grpunconv.c:66
 #, c-format
 msgid "%s: can't lock shadow group file\n"
 msgstr "%s: ÎÅ ÍÏÖÕ ÂÌÏËÕ×ÁÔÉ ÆÁÊÌ ÐÒÉÈÏ×ÁÎÉÈ ÇÒÕÐ\n"
 
-#: src/grpconv.c:77 src/grpunconv.c:78
+#: src/grpconv.c:76 src/grpunconv.c:72
 #, c-format
 msgid "%s: can't open shadow group file\n"
 msgstr "%s: ÎÅ ÍÏÖՠצÄËÒÉÔÉ ÆÁÊÌ ÐÒÉÈÏ×ÁÎÉÈ ÇÒÕÐ\n"
 
-#.
-#. * This shouldn't happen (the entry exists) but...
-#.
-#: src/grpconv.c:93
+#: src/grpconv.c:94
 #, c-format
 msgid "%s: can't remove shadow group %s\n"
 msgstr "%s: ÎÅ ÍÏÖÕ ×ÉÄÁÌÉÔÉ ÐÒÉÈÏ×ÁÎÕ ÇÒÕÐÕ %s\n"
 
-#: src/grpconv.c:134 src/pwconv.c:160
+#: src/grpconv.c:138 src/pwconv.c:153
 #, c-format
 msgid "%s: can't update shadow entry for %s\n"
 msgstr "%s: ÎÅ ÍÏÖÕ ÏÎÏ×ÉÔÉ ÐÒÉÈÏ×ÁÎÉÊ ÚÁÐÉÓ ÄÌÑ %s\n"
 
-#: src/grpconv.c:143 src/grpunconv.c:94
+#: src/grpconv.c:148 src/grpunconv.c:91
 #, c-format
 msgid "%s: can't update entry for group %s\n"
 msgstr "%s: ÎÅ ÍÏÖÕ ÏÎÏ×ÉÔÉ ÚÁÐÉÓ ÄÌÑ ÇÒÕÐÉ %s\n"
 
-#: src/grpconv.c:150 src/grpunconv.c:102
+#: src/grpconv.c:155 src/grpunconv.c:99
 #, c-format
 msgid "%s: can't update shadow group file\n"
 msgstr "%s: ÎÅ ÍÏÖÕ ÏÎÏ×ÉÔÉ ÆÁÊÌ ÐÒÉÈÏ×ÁÎÉÈ ÇÒÕÐ\n"
 
-#: src/grpconv.c:154 src/grpunconv.c:107
+#: src/grpconv.c:160 src/grpunconv.c:105
 #, c-format
 msgid "%s: can't update group file\n"
 msgstr "%s: ÎÅ ÍÏÖÕ ÏÎÏ×ÉÔÉ ÆÁÊÌ ÇÒÕÐ\n"
 
-#: src/grpconv.c:169 src/grpunconv.c:128
+#: src/grpconv.c:175 src/grpunconv.c:127
 #, c-format
 msgid "%s: not configured for shadow group support.\n"
 msgstr "%s: ÎÅ ÚËÏÎÆ¦ÇÕÒÏ×ÁÎÏ ÄÌѠЦÄÔÒÉÍËÉ ÐÒÉÈÏ×ÁÎÉÈ ÇÒÕÐ.\n"
 
-#: src/grpunconv.c:112
+#: src/grpunconv.c:110
 #, c-format
 msgid "%s: can't delete shadow group file\n"
 msgstr "%s: ÎÅ ÍÏÖÕ ×ÉÄÁÌÉÔÉ ÆÁÊÌ ÐÒÉÈÏ×ÁÎÉÈ ÇÒÕÐ\n"
 
-#: src/id.c:56
-msgid "usage: id [ -a ]\n"
-msgstr "×ÉËÏÒÉÓÔÏ×ÕÊÔÅ: id [ -a ]\n"
+#: src/id.c:53
+msgid "usage: id [-a]\n"
+msgstr "×ÉËÏÒÉÓÔÏ×ÕÊÔÅ: id [-a]\n"
 
-#: src/id.c:58
+#: src/id.c:55
 msgid "usage: id\n"
 msgstr "×ÉËÏÒÉÓÔÏ×ÕÊÔÅ: id\n"
 
-#: src/id.c:127
-#, c-format
-msgid "uid=%d(%s)"
+#: src/id.c:123
+#, fuzzy, c-format
+msgid "uid=%u(%s)"
 msgstr "uid=%d(%s)"
 
-#: src/id.c:129
-#, c-format
-msgid "uid=%d"
+#: src/id.c:125
+#, fuzzy, c-format
+msgid "uid=%u"
 msgstr "uid=%d"
 
-#: src/id.c:133
-#, c-format
-msgid " gid=%d(%s)"
+#: src/id.c:129
+#, fuzzy, c-format
+msgid " gid=%u(%s)"
 msgstr " gid=%d(%s)"
 
-#: src/id.c:135
-#, c-format
-msgid " gid=%d"
+#: src/id.c:131
+#, fuzzy, c-format
+msgid " gid=%u"
 msgstr " gid=%d"
 
-#: src/id.c:145
-#, c-format
-msgid " euid=%d(%s)"
+#: src/id.c:141
+#, fuzzy, c-format
+msgid " euid=%u(%s)"
 msgstr " euid=%d(%s)"
 
-#: src/id.c:147
-#, c-format
-msgid " euid=%d"
+#: src/id.c:143
+#, fuzzy, c-format
+msgid " euid=%u"
 msgstr " euid=%d"
 
-#: src/id.c:152
-#, c-format
-msgid " egid=%d(%s)"
+#: src/id.c:148
+#, fuzzy, c-format
+msgid " egid=%u(%s)"
 msgstr " egid=%d(%s)"
 
-#: src/id.c:154
-#, c-format
-msgid " egid=%d"
+#: src/id.c:150
+#, fuzzy, c-format
+msgid " egid=%u"
 msgstr " egid=%d"
 
 #.
-#. * Start off the group message.  It will be of the format
+#. * Start off the group message. It will be of the format
 #. *
-#. *   groups=###(aaa),###(aaa),###(aaa)
+#. *      groups=###(aaa),###(aaa),###(aaa)
 #. *
 #. * where "###" is a numerical value and "aaa" is the
 #. * corresponding name for each respective numerical value.
 #.
-#: src/id.c:175
+#: src/id.c:169
 msgid " groups="
 msgstr " ÇÒÕÐÉ="
 
-#: src/lastlog.c:116 src/lastlog.c:120
+#: src/lastlog.c:110 src/lastlog.c:116
 #, c-format
 msgid "Usage: %s [<-u|--login> login-name] [<-t|--time> days] [<-h|--help>]\n"
 msgstr ""
 
-#: src/lastlog.c:184
+#: src/lastlog.c:181
 msgid "Username         Port     From             Latest\n"
 msgstr "ëÏÒÉÓÔÕ×ÁÞ       ëÏÎÓÏÌØ  úצÄËÉ           ïÓÔÁÎΦʠ×ȦÄ\n"
 
-#: src/lastlog.c:186
+#: src/lastlog.c:183
 msgid "Username                Port     Latest\n"
 msgstr "ëÏÒÉÓÔÕ×ÁÞ             ðÏÒÔ     ïÓÔÁÎΦʠ×ȦÄ\n"
 
-#: src/lastlog.c:200
+#: src/lastlog.c:197
 msgid "**Never logged in**"
 msgstr "**î¦ËÏÌÉ ÎÅ ×ÈÏÄÉ×**"
 
-#: src/login.c:201
+#: src/login.c:183
 #, c-format
 msgid "usage: %s [-p] [name]\n"
 msgstr "×ÉËÏÒÉÓÔÏ×ÕÊÔÅ: %s [-p] [¦Í'Ñ]\n"
 
-#: src/login.c:204
+#: src/login.c:186
 #, c-format
 msgid "       %s [-p] [-h host] [-f name]\n"
 msgstr "       %s [-p] [-h ÈÏÓÔ] [-f ¦Í'Ñ]\n"
 
-#: src/login.c:206
+#: src/login.c:188
 #, c-format
 msgid "       %s [-p] -r host\n"
 msgstr "       %s [-p] -r ÈÏÓÔ\n"
 
-#: src/login.c:289
+#: src/login.c:272
 msgid "Invalid login time\n"
 msgstr "îÅצÒÎÉÊ ÞÁÓ ÄÌÑ ×ÈÏÄÕ\n"
 
-#: src/login.c:344
+#: src/login.c:327
 msgid ""
 "\n"
 "System closed for routine maintenance\n"
@@ -1382,7 +1369,7 @@ msgstr ""
 "\n"
 "óÉÓÔÅÍÕ ÚÁËÒÉÔÏ ÄÌÑ ÐÒÏÆ¦ÌÁËÔÉËÉ.\n"
 
-#: src/login.c:354
+#: src/login.c:338
 msgid ""
 "\n"
 "[Disconnect bypassed -- root login allowed.]\n"
@@ -1390,7 +1377,7 @@ msgstr ""
 "\n"
 "[ðÒÏÊÛÌϠצÄËÌÀÞÅÎÎÑ -- ÄÏÚ×ÏÌÅÎÏ ÌÉÛÅ ×ȦĠroot-a.]\n"
 
-#: src/login.c:393
+#: src/login.c:375
 #, c-format
 msgid ""
 "\n"
@@ -1399,17 +1386,17 @@ msgstr ""
 "\n"
 "þÁÓ ÌÏǦÎÕ ×ÉÞÅÒÐÁÎÏ ÚÁ %d ÓÅËÕÎÄ.\n"
 
-#: src/login.c:695
+#: src/login.c:687
 #, c-format
 msgid " on `%.100s' from `%.200s'"
 msgstr " ÎÁ `%s.100s' Ú `%.200s'"
 
-#: src/login.c:697
+#: src/login.c:691
 #, c-format
 msgid " on `%.100s'"
 msgstr " ÎÁ `%.100s'"
 
-#: src/login.c:837
+#: src/login.c:850
 #, c-format
 msgid ""
 "\n"
@@ -1418,238 +1405,232 @@ msgstr ""
 "\n"
 "%s login: "
 
-#: src/login.c:839
+#: src/login.c:853
 msgid "login: "
 msgstr "login: "
 
-#: src/login.c:1029 src/sulogin.c:231
+#: src/login.c:1069 src/sulogin.c:233
 msgid "Login incorrect"
 msgstr "îÅצÒÎÉÊ ÌÏǦÎ"
 
-#: src/login.c:1217
+#: src/login.c:1263
 msgid "Warning: login re-enabled after temporary lockout.\n"
 msgstr "úÁÓÔÅÒÅÖÅÎÎÑ: login ÐÏÎÏ×ÌÅÎϠЦÓÌÑ ÔÉÍÞÁÓÏ×ÏÇÏ ÂÌÏËÕ×ÁÎÎÑ.\n"
 
-#: src/login.c:1227
+#: src/login.c:1276
 #, c-format
 msgid "Last login: %s on %s"
 msgstr "ïÓÔÁÎΦʠ×ȦĠנÓÉÓÔÅÍÕ: %s ÎÁ %s"
 
-#: src/login.c:1230
+#: src/login.c:1279
 #, c-format
 msgid "Last login: %.19s on %s"
 msgstr "ïÓÔÁÎΦʠ×ȦĠנÓÉÓÔÅÍÕ: %s ÎÁ %s"
 
-#: src/login.c:1235
+#: src/login.c:1285
 #, c-format
 msgid " from %.*s"
 msgstr " Ú %.*s"
 
-#: src/login.c:1307
+#: src/login.c:1362
 msgid "Starting rad_login\n"
 msgstr "óÔÁÒÔÕ¤ÍÏ rad_login\n"
 
-#: src/mkpasswd.c:49
+#: src/mkpasswd.c:47
 #, c-format
 msgid "%s: no DBM database on system - no action performed\n"
 msgstr "%s: ÎÅ ÍÁ¤ DBM ÂÁÚÉ ÄÁÎÎÉÈ Õ ÓÉÓÔÅͦ - Î¦ÑËÉȠĦʠÎÅ ×ÉËÏÎÁÎÏ\n"
 
-#: src/mkpasswd.c:74 src/mkpasswd.c:382
-#, c-format
-msgid "Usage: %s [ -vf ] [ -p|g|sp|sg ] file\n"
-msgstr "÷ÉËÏÒÉÓÔÏ×ÕÊÔÅ: %s [ -vf ] [ -p|g|sp|sg ] ÆÁÊÌ\n"
-
-#: src/mkpasswd.c:76 src/mkpasswd.c:384
-#, c-format
-msgid "Usage: %s [ -vf ] [ -p|g|sp ] file\n"
-msgstr "÷ÉËÏÒÉÓÔÏ×ÕÊÔÅ: %s [ -vf ] [ -p|g|sp ] ÆÁÊÌ\n"
-
-#: src/mkpasswd.c:79 src/mkpasswd.c:387
-#, c-format
-msgid "Usage: %s [ -vf ] [ -p|g ] file\n"
-msgstr "÷ÉËÏÒÉÓÔÏ×ÕÊÔÅ: %s [ -vf ] [ -p|g ] ÆÁÊÌ\n"
-
-#: src/mkpasswd.c:245 src/mkpasswd.c:249
+#: src/mkpasswd.c:232 src/mkpasswd.c:237
 #, c-format
 msgid "%s: cannot overwrite file %s\n"
 msgstr "%s: ÎÅ ÍÏÖÕ ÐÅÒÅÚÁÐÉÓÁÔÉ ÆÁÊÌ %s\n"
 
-#: src/mkpasswd.c:263
+#: src/mkpasswd.c:252
 #, c-format
 msgid "%s: cannot open DBM files for %s\n"
 msgstr "%s: ÎÅ ÍÏÖՠצÄËÒÉÔÉ ÆÁÊÌÉ DBM ÄÌÑ %s\n"
 
-#: src/mkpasswd.c:296
+#: src/mkpasswd.c:287
 #, c-format
 msgid "%s: the beginning with "
 msgstr "%s: ÒÏÚÐÏÞÉÎÁ¤ÍÏ Ú "
 
-#: src/mkpasswd.c:296
+#: src/mkpasswd.c:288
 #, fuzzy
 msgid " is too long\n"
 msgstr "%s: ÐÏÌÑ ÚÁÎÁÄÔÏ ÄÏ×Ǧ\n"
 
-#: src/mkpasswd.c:321
+#: src/mkpasswd.c:315
 #, c-format
 msgid "%s: error parsing line \"%s\"\n"
 msgstr "%s: ÐÏÍÉÌËÁ ÏÂÒÏÂËÉ ÒÑÄËÕ \"%s\"\n"
 
-#: src/mkpasswd.c:326 src/mkpasswd.c:328 src/mkpasswd.c:330 src/mkpasswd.c:332
+#: src/mkpasswd.c:323 src/mkpasswd.c:328 src/mkpasswd.c:333 src/mkpasswd.c:338
 msgid "adding record for name "
 msgstr "ÄÏÄÁÎÏ ÚÁÐÉÓ ÄÌÑ ¦ÍÅΦ "
 
-#: src/mkpasswd.c:326 src/mkpasswd.c:328 src/mkpasswd.c:330 src/mkpasswd.c:332
-#: src/mkpasswd.c:336 src/mkpasswd.c:341 src/mkpasswd.c:345 src/mkpasswd.c:349
+#: src/mkpasswd.c:324 src/mkpasswd.c:329 src/mkpasswd.c:334 src/mkpasswd.c:339
+#: src/mkpasswd.c:345 src/mkpasswd.c:351 src/mkpasswd.c:356 src/mkpasswd.c:361
 msgid "\n"
 msgstr ""
 
-#: src/mkpasswd.c:336 src/mkpasswd.c:341 src/mkpasswd.c:345 src/mkpasswd.c:349
+#: src/mkpasswd.c:344 src/mkpasswd.c:350 src/mkpasswd.c:355 src/mkpasswd.c:360
 #, c-format
 msgid "%s: error adding record for "
 msgstr "%s: ÐÏÍÉÌËÁ ÄÏÄÁÎÎÑ ÚÁÐÉÓÕ "
 
-#: src/mkpasswd.c:367
+#: src/mkpasswd.c:378
 #, c-format
 msgid "added %d entries, longest was %d\n"
 msgstr "ÄÏÄÁÎÏ %d ÚÁÐÉÓ¦×, ÄÏ×ÖÉÎÏÀ %d\n"
 
-#: src/newgrp.c:66
-msgid "usage: newgrp [ - ] [ group ]\n"
-msgstr "×ÉËÏÒÉÓÔÏ×ÕÊÔÅ: newgrp [ - ] [ ÇÒÕÐÁ ]\n"
+#: src/mkpasswd.c:392
+#, c-format
+msgid "Usage: %s [-vf] [-p|g|sp|sg] file\n"
+msgstr "÷ÉËÏÒÉÓÔÏ×ÕÊÔÅ: %s [-vf] [-p|g|sp|sg] ÆÁÊÌ\n"
 
-#: src/newgrp.c:68
-#, fuzzy
-msgid "usage: sg group [[-c] command ]\n"
-msgstr "×ÉËÏÒÉÓÔÏ×ÕÊÔÅ: sg ÇÒÕÐÁ [ ËÏÍÁÎÄÁ ]\n"
+#: src/mkpasswd.c:395
+#, c-format
+msgid "Usage: %s [-vf] [-p|g|sp] file\n"
+msgstr "÷ÉËÏÒÉÓÔÏ×ÕÊÔÅ: %s [-vf] [-p|g|sp] ÆÁÊÌ\n"
 
-#: src/newgrp.c:125
+#: src/mkpasswd.c:398
 #, c-format
-msgid "unknown uid: %d\n"
+msgid "Usage: %s [-vf] [-p|g] file\n"
+msgstr "÷ÉËÏÒÉÓÔÏ×ÕÊÔÅ: %s [-vf] [-p|g] ÆÁÊÌ\n"
+
+#: src/newgrp.c:61
+msgid "usage: newgrp [-] [group]\n"
+msgstr "×ÉËÏÒÉÓÔÏ×ÕÊÔÅ: newgrp [-] [ÇÒÕÐÁ]\n"
+
+#: src/newgrp.c:63
+#, fuzzy
+msgid "usage: sg group [[-c] command]\n"
+msgstr "×ÉËÏÒÉÓÔÏ×ÕÊÔÅ: sg ÇÒÕÐÁ [ËÏÍÁÎÄÁ]\n"
+
+#: src/newgrp.c:136
+#, fuzzy, c-format
+msgid "unknown uid: %u\n"
 msgstr "ÎÅצÄÏÍÉÊ uid: %d\n"
 
-#: src/newgrp.c:201
-#, c-format
-msgid "unknown gid: %ld\n"
+#: src/newgrp.c:219
+#, fuzzy, c-format
+msgid "unknown gid: %lu\n"
 msgstr "ÎÅצÄÏÍÉÊ gid: %ld\n"
 
-#: src/newgrp.c:245
-#, c-format
-msgid "unknown gid: %d\n"
-msgstr "ÎÅצÄÏÍÉÊ gid: %d\n"
-
-#: src/newgrp.c:323 src/newgrp.c:332
+#: src/newgrp.c:365 src/newgrp.c:374
 msgid "Sorry.\n"
 msgstr "÷ÉÂÁÞÔÅ.\n"
 
-#: src/newgrp.c:364
+#: src/newgrp.c:472
 msgid "too many groups\n"
 msgstr "ÚÁÎÁÄÔÏ ÂÁÇÁÔÏ ÇÒÕÐ\n"
 
-#: src/newusers.c:82
+#: src/newusers.c:78
 #, c-format
-msgid "Usage: %s [ input ]\n"
-msgstr "÷ÉËÏÒÉÓÔÏ×ÕÊÔÅ: %s [ input ]\n"
+msgid "Usage: %s [input]\n"
+msgstr "÷ÉËÏÒÉÓÔÏ×ÕÊÔÅ: %s [input]\n"
 
-#: src/newusers.c:414
+#: src/newusers.c:407
 #, c-format
 msgid "%s: can't lock /etc/passwd.\n"
 msgstr "%s: ÎÅ ÍÏÖÕ ÂÌÏËÕ×ÁÔÉ /etc/passwd.\n"
 
-#: src/newusers.c:425
+#: src/newusers.c:419
 #, c-format
 msgid "%s: can't lock files, try again later\n"
 msgstr "%s: ÎÅ ÍÏÖÕ ÂÌÏËÕ×ÁÔÉ ÆÁÊÌÉ, ÓÐÒÏÂÕÊÔŠЦÚΦÛÅ\n"
 
-#: src/newusers.c:440
+#: src/newusers.c:435
 #, c-format
 msgid "%s: can't open files\n"
 msgstr "%s: ÎÅ ÍÏÖՠצÄËÒÉÔÉ ÆÁÊÌ\n"
 
-#: src/newusers.c:485
+#: src/newusers.c:480
 #, c-format
 msgid "%s: line %d: invalid line\n"
 msgstr "%s: ÒÑÄÏË %d: ÎÅצÒÎÉÊ ÒÑÄÏË\n"
 
-#: src/newusers.c:503
+#: src/newusers.c:499
 #, c-format
 msgid "%s: line %d: can't create GID\n"
 msgstr "%s: ÒÑÄÏË %d: ÎÅ ÍÏÖÕ ÓÔ×ÏÒÉÔÉ GID\n"
 
-#: src/newusers.c:519
+#: src/newusers.c:515
 #, c-format
 msgid "%s: line %d: can't create UID\n"
 msgstr "%s: ÒÑÄÏË %d: ÎÅ ÍÏÖÕ ÓÔ×ÏÒÉÔÉ UID\n"
 
-#: src/newusers.c:531
+#: src/newusers.c:528
 #, c-format
 msgid "%s: line %d: cannot find user %s\n"
 msgstr "%s: ÒÑÄÏË %d: ÎÅ ÍÏÖÕ ÚÎÁÊÔÉ ËÏÒÉÓÔÕ×ÁÞÁ %s\n"
 
-#: src/newusers.c:539
+#: src/newusers.c:537
 #, c-format
 msgid "%s: line %d: can't update password\n"
 msgstr "%s: ÒÑÄÏË %d: ÎÅ ÍÏÖÕ ÏÎÏ×ÉÔÉ ÐÁÒÏÌØ\n"
 
-#: src/newusers.c:556
+#: src/newusers.c:555
 #, c-format
 msgid "%s: line %d: mkdir failed\n"
 msgstr "%s: ÒÑÄÏË %d: mkdir ÎÅ ×ÉËÏÎÁ×ÓÑ\n"
 
-#: src/newusers.c:560
+#: src/newusers.c:561
 #, c-format
 msgid "%s: line %d: chown failed\n"
 msgstr "%s: ÒÑÄÏË %d: chown ÎÅ ×ÉËÏÎÁ×ÓÑ\n"
 
-#: src/newusers.c:569
+#: src/newusers.c:571
 #, c-format
 msgid "%s: line %d: can't update entry\n"
 msgstr "%s: ÒÑÄÏË %d: ÎÅ ÍÏÖÕ ÏÎÏ×ÉÔÉ ÚÁÐÉÓ\n"
 
-#: src/newusers.c:600
+#: src/newusers.c:603
 #, c-format
 msgid "%s: error updating files\n"
 msgstr "%s: ÐÏÍÉÌËÁ ÏÎÏ×ÌÅÎÎÑ ÆÁÊÌÕ\n"
 
-#: src/passwd.c:239
+#: src/passwd.c:174
 #, c-format
-msgid "usage: %s [ -f | -s ] [ name ]\n"
-msgstr "×ÉËÏÒÉÓÔÏ×ÕÊÔÅ: %s [ -f | -s ] [ ¦Í'Ñ ]\n"
+msgid "usage: %s [-f|-s] [name]\n"
+msgstr "×ÉËÏÒÉÓÔÏ×ÕÊÔÅ: %s [-f|-s] [¦Í'Ñ]\n"
 
-#: src/passwd.c:242
+#: src/passwd.c:178
 #, c-format
-msgid "       %s [ -x max ] [ -n min ] [ -w warn ] [ -i inact ] name\n"
-msgstr ""
-"       %s [ -x ÍÁËÓ ] [ -n ÍÉΠ] [ -w ÚÁÓÔÅÒÅÖÅÎÎÑ ] [ -i ÎÅÁËÔÉ×ÎÉÊ ] ¦Í'Ñ\n"
+msgid "       %s [-x max] [-n min] [-w warn] [-i inact] name\n"
+msgstr "       %s [-x ÍÁËÓ] [-n ÍÉÎ] [-w ÚÁÓÔÅÒÅÖÅÎÎÑ] [-i ÎÅÁËÔÉ×ÎÉÊ] ¦Í'Ñ\n"
 
-#: src/passwd.c:245
-#, c-format
-msgid "       %s { -l | -u | -d | -S | -e } name\n"
+#: src/passwd.c:180
+#, fuzzy, c-format
+msgid "       %s {-l|-u|-d|-S|-e} name\n"
 msgstr "       %s { -l | -u | -d | -S | -e } ¦Í'Ñ\n"
 
-#: src/passwd.c:347
+#: src/passwd.c:283
 #, c-format
 msgid "User %s has a TCFS key, his old password is required.\n"
 msgstr "ëÏÒÉÓÔÕ×ÁÞ %s ÍÁ¤ TCFS ËÌÀÞ, ÐÏÔÒ¦ÂÅΠÊÏÇÏ ÓÔÁÒÉÊ ÐÁÒÏÌØ.\n"
 
-#: src/passwd.c:348
+#: src/passwd.c:286
 msgid "You can use -t option to force the change.\n"
 msgstr "÷É ÍÁ¤ÔÅ ÚÍÏÇÕ ×ÉËÏÒÉÓÔÏ×Õ×ÁÔÉ ËÌÀÞ -t ÄÌÑ ÐÒÉÓËÏÒÅÎÎÑ ÚͦÎ.\n"
 
-#: src/passwd.c:354
+#: src/passwd.c:292
 msgid "Old password: "
 msgstr "óÔÁÒÉÊ ÐÁÒÏÌØ: "
 
-#: src/passwd.c:361
+#: src/passwd.c:301
 #, c-format
 msgid "Incorrect password for `%s'\n"
 msgstr "îÅצÒÎÉÊ ÐÁÒÏÌØ ÄÌÑ `%s'\n"
 
-#: src/passwd.c:374
+#: src/passwd.c:314
 #, c-format
 msgid "Warning: user %s has a TCFS key.\n"
 msgstr "úÁÓÔÅÒÅÖÅÎÎÑ: ËÏÒÉÓÔÕ×ÁÞ %s ÍÁ¤ TCFS ËÌÀÞ.\n"
 
-#: src/passwd.c:392
+#: src/passwd.c:333
 #, c-format
 msgid ""
 "Enter the new password (minimum of %d, maximum of %d characters)\n"
@@ -1658,15 +1639,15 @@ msgstr ""
 "÷×ÅÄ¦ÔØ ÎÏ×ÉÊ ÐÁÒÏÌØ (צĠ%d ÄÏ %d ÚÎÁ˦×)\n"
 "úͦÛÕÊÔÅ ×ÅÌÉ˦ ÔÁ ÍÁ̦ Ì¦ÔÅÒÉ ÔÁ ÃÉÆÒÉ.\n"
 
-#: src/passwd.c:399
+#: src/passwd.c:339
 msgid "New password: "
 msgstr "îÏ×ÉÊ ÐÁÒÏÌØ: "
 
-#: src/passwd.c:409
+#: src/passwd.c:350
 msgid "Try again.\n"
 msgstr "óÐÒÏÂÕÊ ÝÅ.\n"
 
-#: src/passwd.c:418
+#: src/passwd.c:361
 msgid ""
 "\n"
 "Warning: weak password (enter it again to use it anyway).\n"
@@ -1675,90 +1656,90 @@ msgstr ""
 "úÁÓÔÅÒÅÖÅÎÎÑ: ðÏÇÁÎÉÊ ÐÁÒÏÌØ (××ÅÄ¦ÔØ ÊÏÇÏ ÚÎÏ×Õ, ÑËÝÏ ×ÓÅ ÏÄÎÏ ÂÁÖÁ¤ÔÅ ÊÏÇÏ "
 "×ÉËÏÒÉÓÔÏ×Õ×ÁÔÉ).\n"
 
-#: src/passwd.c:427
+#: src/passwd.c:371
 msgid "They don't match; try again.\n"
 msgstr "îÅ ÓЦ×ÐÁÄÁ¤; ÓÐÒÏÂÕÊÔÅ ÚÎÏ×Õ.\n"
 
-#: src/passwd.c:512 src/passwd.c:528
+#: src/passwd.c:451 src/passwd.c:469
 #, c-format
 msgid "The password for %s cannot be changed.\n"
 msgstr "ðÁÒÏÌØ ÄÌÑ %s ÎÅ ÍÏÖÅ ÂÕÔÉ ÚͦÎÅÎÉÊ.\n"
 
-#: src/passwd.c:556
+#: src/passwd.c:494
 #, c-format
 msgid "Sorry, the password for %s cannot be changed yet.\n"
 msgstr "÷ÉÂÁÞÔÅ, ÐÁÒÏÌØ ÄÌÑ %s ÎÇÅ ÍÏÖÅ ÂÕÔÉ ÚͦÎÅÎÏ ÚÁÒÁÚ.\n"
 
-#: src/passwd.c:693
+#: src/passwd.c:614
 #, c-format
 msgid "%s: out of memory\n"
 msgstr "%s: ÂÒÁË ÐÁÍ'ÑÔ¦\n"
 
-#: src/passwd.c:845
+#: src/passwd.c:769
 msgid "Cannot lock the TCFS key database; try again later\n"
 msgstr "îÅ ÍÏÖÕ ÂÌÏËÕ×ÁÔÉ ÂÁÚÕ ËÌÀÞÅÊ TCFS; ÓÐÒÏÂÕÊÔŠЦÚΦÛÅ\n"
 
-#: src/passwd.c:851
+#: src/passwd.c:777
 msgid "Cannot open the TCFS key database.\n"
 msgstr "îÅ ÍÏÖՠצÄËÒÉÔÉ ÂÁÚÕ ËÌÀÞÅÊ TCFS.\n"
 
-#: src/passwd.c:857
+#: src/passwd.c:785
 msgid "Error updating the TCFS key database.\n"
 msgstr "îÅ ÍÏÖÕ ÏÎÏ×ÉÔÉ ÂÁÚÕ ËÌÀÞÅÊ TCFS.\n"
 
-#: src/passwd.c:862
+#: src/passwd.c:792
 msgid "Cannot commit TCFS changes.\n"
 msgstr "îÅ ÍÏÖÕ ×ÎÅÓÔÉ ÚͦÎÉ Õ ÂÁÚÕ ËÌÀÞÅÊ TCFS.\n"
 
-#: src/passwd.c:1069
+#: src/passwd.c:975
 #, c-format
 msgid "%s: Cannot execute %s"
 msgstr "%s: îÅ ÍÏÖÕ ×ÉËÏÎÁÔÉ %s"
 
-#: src/passwd.c:1176
+#: src/passwd.c:1077
 #, c-format
 msgid "%s: repository %s not supported\n"
 msgstr "%s: ÒÅÐÏÚÉÔÏҦʠ%s ÎŠЦÄÔÒÉÍÕ¤ÔØÓÑ\n"
 
-#: src/passwd.c:1263
+#: src/passwd.c:1152
 #, c-format
 msgid "%s: Permission denied\n"
 msgstr "%s: äÏÓÔÕРÚÁÂÏÒÏÎÅÎÏ\n"
 
-#: src/passwd.c:1287
+#: src/passwd.c:1176
 #, c-format
 msgid "You may not change the password for %s.\n"
 msgstr "÷É ÎÅ ÍÏÖÅÔÅ ÚͦÎÉÔÉ ÐÁÒÏÌØ ÄÌÑ %s.\n"
 
-#: src/passwd.c:1352
+#: src/passwd.c:1242
 #, c-format
 msgid "Changing password for %s\n"
 msgstr "úͦÎÁ ÐÁÒÏÌÑ ÄÌÑ %s\n"
 
-#: src/passwd.c:1356
+#: src/passwd.c:1246
 #, c-format
 msgid "The password for %s is unchanged.\n"
 msgstr "ðÁÒÏÌØ ÄÌÑ %s ÎÅ ÚͦÎÅÎÏ.\n"
 
-#: src/passwd.c:1412
+#: src/passwd.c:1297
 msgid "Password changed.\n"
 msgstr "ðÁÒÏÌØ ÚͦÎÅÎÏ.\n"
 
-#: src/pwck.c:98
+#: src/pwck.c:87
 #, fuzzy, c-format
-msgid "Usage: %s [ -sqr ] [ passwd [ shadow ] ]\n"
-msgstr "÷ÉËÏÒÉÓÔÏ×ÕÊÔÅ: %s [ -qr ] [ ÐÁÒÏÌØ [ shadow ] ]\n"
+msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+msgstr "÷ÉËÏÒÉÓÔÏ×ÕÊÔÅ: %s [-q] [-r] [-s] [ÐÁÒÏÌØ [shadow]]\n"
 
-#: src/pwck.c:100
+#: src/pwck.c:90
 #, fuzzy, c-format
-msgid "Usage: %s [ -sqr ] [ passwd ]\n"
-msgstr "÷ÉËÏÒÉÓÔÏ×ÕÊÔÅ: %s [ -qr ] [ ÐÁÒÏÌØ ]\n"
+msgid "Usage: %s [-q] [-r] [-s] [passwd]\n"
+msgstr "÷ÉËÏÒÉÓÔÏ×ÕÊÔÅ: %s [-q] [-r] [-s] [ÐÁÒÏÌØ]\n"
 
 #.
-#. * Tell the user this entire line is bogus and
-#. * ask them to delete it.
+#. * Tell the user this entire line is bogus and ask
+#. * them to delete it.
 #.
-#: src/pwck.c:304
+#: src/pwck.c:295
 msgid "invalid password file entry\n"
 msgstr "ÎÅצÒÎÉÊ ÚÁÐÉÓ Õ ÆÁÊ̦ ÐÁÒÏÌÅÊ\n"
 
@@ -1766,32 +1747,24 @@ msgstr "
 #. * Tell the user this entry is a duplicate of
 #. * another and ask them to delete it.
 #.
-#: src/pwck.c:366
+#: src/pwck.c:357
 msgid "duplicate password entry\n"
 msgstr "ÄÕÂÌÀÀÞÉÊ ÚÁÐÉÓ Õ ÆÁÊ̦ ÐÁÒÏÌÅÊ\n"
 
-#: src/pwck.c:382
+#: src/pwck.c:373
 #, c-format
 msgid "invalid user name `%s'\n"
 msgstr "ÎÅצÒÎÅ ¦Í'Ñ ËÏÒÉÓÔÕ×ÁÞÁ `%s'\n"
 
-#: src/pwck.c:392
-#, c-format
-msgid "user %s: bad UID (%d)\n"
-msgstr "ËÏÒÉÓÔÕ×ÁÞ %s: ÐÏÇÁÎÉÊ UID (%d)\n"
-
 #.
 #. * No primary group, just give a warning
 #.
-#: src/pwck.c:407
-#, c-format
-msgid "user %s: no group %d\n"
+#: src/pwck.c:388
+#, fuzzy, c-format
+msgid "user %s: no group %u\n"
 msgstr "ËÏÒÉÓÔÕ×ÁÞ %s: ÎÅ ÍÁ¤ ÇÒÕÐÉ %d\n"
 
-#.
-#. * Home directory doesn't exist, give a warning
-#.
-#: src/pwck.c:422
+#: src/pwck.c:404
 #, c-format
 msgid "user %s: directory %s does not exist\n"
 msgstr "ËÏÒÉÓÔÕ×ÁÞ %s: ÔÅËÁ %s ÎÅ ¦ÓÎÕ¤\n"
@@ -1799,16 +1772,16 @@ msgstr "
 #.
 #. * Login shell doesn't exist, give a warning
 #.
-#: src/pwck.c:437
+#: src/pwck.c:420
 #, c-format
 msgid "user %s: program %s does not exist\n"
 msgstr "ËÏÒÉÓÔÕ×ÁÞ %s: ÐÒÏÇÒÁÍÁ %s ÎÅ ¦ÓÎÕ¤\n"
 
 #.
-#. * Tell the user this entire line is bogus and
-#. * ask them to delete it.
+#. * Tell the user this entire line is bogus and ask
+#. * them to delete it.
 #.
-#: src/pwck.c:473
+#: src/pwck.c:456
 msgid "invalid shadow password file entry\n"
 msgstr "ÎÅצÒÎÉÊ ÚÁÐÉÓ Õ ÆÁÊ̦ ÐÒÉÈÏ×ÁÎÉÈ ÐÁÒÏÌÅÊ\n"
 
@@ -1816,7 +1789,7 @@ msgstr "
 #. * Tell the user this entry is a duplicate of
 #. * another and ask them to delete it.
 #.
-#: src/pwck.c:535
+#: src/pwck.c:518
 msgid "duplicate shadow password entry\n"
 msgstr "ÄÕÂÌÀÀÞÉÊ ÚÁÐÉÓ Õ ÆÁÊ̦ ÐÒÉÈÏ×ÁÎÉÈ ÐÁÒÏÌÅÊ\n"
 
@@ -1824,70 +1797,70 @@ msgstr "
 #. * Tell the user this entry has no matching
 #. * /etc/passwd entry and ask them to delete it.
 #.
-#: src/pwck.c:559
+#: src/pwck.c:542
 msgid "no matching password file entry\n"
 msgstr "צÄÓÕÔΦʠצÄÐÏצÄÎÉÊ ÚÁÐÉÓ Õ ÆÁÊ̦ ÐÁÒÏÌÅÊ\n"
 
-#: src/pwck.c:576
+#: src/pwck.c:560
 #, c-format
 msgid "user %s: last password change in the future\n"
 msgstr "ËÏÒÉÓÔÕ×ÁÞ %s: ÏÓÔÁÎÎÑ ÚͦÎÁ ÐÁÒÏÌÑ Õ ÍÁÊÂÕÔÎØÏÍÕ\n"
 
-#: src/pwconv.c:94 src/pwunconv.c:99
+#: src/pwconv.c:84 src/pwunconv.c:93
 #, c-format
 msgid "%s: can't lock passwd file\n"
 msgstr "%s: ÎÅ ÍÏÖÕ ÂÌÏËÕ×ÁÔÉ ÆÁÊÌ ÐÁÒÏÌÅÊ\n"
 
-#: src/pwconv.c:99 src/pwunconv.c:104
+#: src/pwconv.c:89 src/pwunconv.c:98
 #, c-format
 msgid "%s: can't open passwd file\n"
 msgstr "%s: ÎÅ ÍÏÖՠצÄËÒÉÔÉ ÆÁÊÌ ÐÁÒÏÌÅÊ\n"
 
-#: src/pwconv.c:126
+#: src/pwconv.c:117
 #, c-format
 msgid "%s: can't remove shadow entry for %s\n"
 msgstr "%s: ÎÅ ÍÏÖՠצÄÁÌÉÔÉ ÚÁÐÉÓ Õ ÆÁÊ̦ ÐÒÉÈÏ×ÁÎÉÈ ÐÁÒÏÌÅÊ ÄÌÑ %s\n"
 
-#: src/pwconv.c:169
+#: src/pwconv.c:163
 #, c-format
 msgid "%s: can't update passwd entry for %s\n"
 msgstr "%s: ÎÅ ÍÏÖÕ ÏÎÏ×ÉÔÉ ÚÁÐÉÓ Õ ÆÁÊ̦ ÐÁÒÏÌÅÊ ÄÌÑ %s\n"
 
-#: src/pwconv.c:176
+#: src/pwconv.c:170
 #, c-format
 msgid "%s: can't update shadow file\n"
 msgstr "%s: ÎÅ ÍÏÖÕ ÏÎÏ×ÉÔÉ ÆÁÊÌ ÐÒÉÈÏ×ÁÎÉÈ ÐÁÒÏÌÅÊ\n"
 
-#: src/pwconv.c:180
+#: src/pwconv.c:175
 #, c-format
 msgid "%s: can't update passwd file\n"
 msgstr "%s: ÎÅ ÍÏÖÕ ÏÎÏ×ÉÔÉ ÆÁÊÌ ÐÁÒÏÌÅÊ\n"
 
-#: src/pwunconv.c:53
+#: src/pwunconv.c:50
 #, c-format
 msgid "%s: Shadow passwords are not configured.\n"
 msgstr "%s: ðÒÉÈÏ×ÁΦ ÐÁÒÏ̦ ÎÅ ÚËÏÎÆ¦ÇÕÒÏ×ÁÎÏ.\n"
 
-#: src/pwunconv.c:162
+#: src/pwunconv.c:160
 #, c-format
 msgid "%s: can't update entry for user %s\n"
 msgstr "%s: ÎÅ ÍÏÖÕ ÏÎÏ×ÉÔÉ ÚÁÐÉÓ ÄÌÑ ËÏÒÉÓÔÕ×ÁÞÁ %s\n"
 
-#: src/pwunconv.c:179
+#: src/pwunconv.c:181
 #, c-format
 msgid "%s: can't delete shadow password file\n"
 msgstr "%s: ÎÅ ÍÏÖÕ ×ÉÄÁÌÉÔÉ ÆÁÊÌ ÐÒÉÈÏ×ÁÎÉÈ ÐÁÒÏÌÅÊ\n"
 
-#: src/su.c:140
+#: src/su.c:133
 msgid "Sorry."
 msgstr "÷ÉÂÁÞÔÅ."
 
-#: src/su.c:222
+#: src/su.c:216
 #, c-format
 msgid "%s: must be run from a terminal\n"
 msgstr "%s: ÐÏ×ÉÎÏ ÂÕÔÉ ÚÁÐÕÝÅÎÏ Ú ÔÅÒͦÎÁÌÕ\n"
 
-#: src/su.c:310
+#: src/su.c:306
 #, c-format
 msgid "%s: pam_start: error %d\n"
 msgstr "%s: pam_start: ÐÏÍÉÌËÁ %d\n"
@@ -1897,18 +1870,17 @@ msgstr "%s: pam_start: 
 msgid "Unknown id: %s\n"
 msgstr "îÅצÄÏÍÉÊ id: %s\n"
 
-#. access denied (-1) or unexpected value
-#: src/su.c:371 src/su.c:386
+#: src/su.c:373 src/su.c:390
 #, c-format
 msgid "You are not authorized to su %s\n"
 msgstr "÷É ÎÅ Á×ÔÏÒÉÚÏ×ÁΦ ÄÌÑ su %s\n"
 
 #. require own password
-#: src/su.c:382
+#: src/su.c:385
 msgid "(Enter your own password.)"
 msgstr "(÷×ÅÄ¦ÔØ ×ÁÛ ÐÁÒÏÌØ.)"
 
-#: src/su.c:413
+#: src/su.c:419
 #, c-format
 msgid ""
 "%s: %s\n"
@@ -1917,28 +1889,23 @@ msgstr ""
 "%s: %s\n"
 "(¶ÇÎÏÒÕÀ)\n"
 
-#: src/su.c:615
+#: src/su.c:626
 msgid "No shell\n"
 msgstr "îÅÍÁ¤ shell\n"
 
 #. must be a password file!
-#: src/sulogin.c:136
+#: src/sulogin.c:132
 msgid "No password file\n"
 msgstr "îÅÍÁ¤ ÆÁÊÌÁ ÐÁÒÏÌÅÊ\n"
 
 #.
 #. * Fail secure
 #.
-#: src/sulogin.c:178
+#: src/sulogin.c:174
 msgid "No password entry for 'root'\n"
 msgstr "âÒÁËÕ¤ ÚÁÐÉÓÕ Õ ÂÁÚ¦ ÐÁÒÏÌÅÊ ÄÌÑ 'root'\n"
 
-#.
-#. * Here we prompt for the root password, or if no password is
-#. * given we just exit.
-#.
-#. get a password for root
-#: src/sulogin.c:192
+#: src/sulogin.c:190
 msgid ""
 "\n"
 "Type control-d to proceed with normal startup,\n"
@@ -1949,7 +1916,7 @@ msgstr ""
 "(ÁÂÏ ××ÅÄ¦ÔØ ÐÁÒÏÌØ ÁÄͦΦÓÔÒÁÔÏÒÁ ÄÌѠצÄÎÏ×ÌÅÎÎÑ ÓÉÓÔÅÍÉ):"
 
 #. make new environment active
-#: src/sulogin.c:241
+#: src/sulogin.c:243
 msgid "Entering System Maintenance Mode\n"
 msgstr "÷ÈÏÄÉÍÏ Õ ÒÅÖÉ͠צÄÎÏ×ÌÅÎÎÑ ÓÉÓÔÅÍÉ\n"
 
@@ -1958,269 +1925,271 @@ msgstr "
 msgid "%s: rebuild the group database\n"
 msgstr "%s: ÐÅÒÅÓÔÒÏÀÀ ÂÁÚÕ ÇÒÕÐ\n"
 
-#: src/useradd.c:258
+#: src/useradd.c:260
 #, c-format
 msgid "%s: rebuild the shadow group database\n"
 msgstr "%s: ÐÅÒÅÓÔÒÏÀÀ ÂÁÚÕ ÐÒÉÈÏ×ÁÎÉÈ ÇÒÕÐ\n"
 
-#: src/useradd.c:295 src/usermod.c:974
+#: src/useradd.c:295 src/useradd.c:309 src/usermod.c:981 src/usermod.c:995
 #, c-format
 msgid "%s: invalid numeric argument `%s'\n"
 msgstr "%s: ÎÅצÒÎÉÊ ÞÉÓÌÏ×ÉÊ ÁÒÇÕÍÅÎÔ `%s'\n"
 
-#: src/useradd.c:351
+#: src/useradd.c:365
 #, c-format
 msgid "%s: unknown gid %s\n"
 msgstr "%s: ÎÅצÄÏÍÉÊ gid %s\n"
 
-#: src/useradd.c:358 src/useradd.c:660 src/useradd.c:1246 src/usermod.c:261
-#: src/usermod.c:1105
+#: src/useradd.c:373 src/useradd.c:676 src/useradd.c:1269 src/usermod.c:260
+#: src/usermod.c:1128
 #, c-format
 msgid "%s: unknown group %s\n"
 msgstr "%s: ÎÅצÄÏÍÁ ÇÒÕÐÁ %s\n"
 
-#: src/useradd.c:426
-#, c-format
-msgid "group=%s,%ld  basedir=%s  skel=%s\n"
+#: src/useradd.c:440
+#, fuzzy, c-format
+msgid "group=%s,%u  basedir=%s  skel=%s\n"
 msgstr "ÇÒÕÐÁ=%s,%ld ÇÏÌÏ×ÎÁ_ÔÅËÁ=%s  skel=%s\n"
 
-#: src/useradd.c:429
+#: src/useradd.c:444
 #, c-format
 msgid "shell=%s  "
 msgstr "shell=%s  "
 
-#: src/useradd.c:431
+#: src/useradd.c:446
 #, c-format
 msgid "inactive=%ld  expire=%s"
 msgstr "ÎÅÁËÔÉ×ÎÉÊ=%ld  ÐÒÏÓÔÏÒÏÞÅÎÉÊ=%s"
 
-#: src/useradd.c:435
-#, c-format
-msgid "GROUP=%ld\n"
+#: src/useradd.c:450
+#, fuzzy, c-format
+msgid "GROUP=%u\n"
 msgstr "çòõðá=%ld\n"
 
-#: src/useradd.c:436
+#: src/useradd.c:451
 #, c-format
 msgid "HOME=%s\n"
 msgstr "äïíáûîñ_ôåëá=%s\n"
 
-#: src/useradd.c:438
+#: src/useradd.c:453
 #, c-format
 msgid "INACTIVE=%ld\n"
 msgstr "îåáëôé÷îéê=%ld\n"
 
-#: src/useradd.c:439
+#: src/useradd.c:454
 #, c-format
 msgid "EXPIRE=%s\n"
 msgstr "ðòïóôòïþåîéê=%s\n"
 
-#: src/useradd.c:441
+#: src/useradd.c:456
 #, c-format
 msgid "SHELL=%s\n"
 msgstr "SHELL=%s\n"
 
-#: src/useradd.c:442
+#: src/useradd.c:457
 #, c-format
 msgid "SKEL=%s\n"
 msgstr "SKEL=%s\n"
 
-#: src/useradd.c:482
+#: src/useradd.c:498
 #, c-format
 msgid "%s: cannot create new defaults file\n"
 msgstr "%s: ÎÅ ÍÏÖÕ ÓÔ×ÏÒÉÔÉ ÎÏ×ÉÊ ÆÁÊÌ ¦Ú ÚÎÁÞÅÎÎÑÍÉ ÐÏ ÚÁÍÏ×ÞÅ×ÁÎÎÀ\n"
 
-#: src/useradd.c:488
+#: src/useradd.c:503
 #, fuzzy, c-format
 msgid "%s: cannot open new defaults file\n"
 msgstr "%s: ÎÅ ÍÏÖÕ ÓÔ×ÏÒÉÔÉ ÎÏ×ÉÊ ÆÁÊÌ ¦Ú ÚÎÁÞÅÎÎÑÍÉ ÐÏ ÚÁÍÏ×ÞÅ×ÁÎÎÀ\n"
 
-#: src/useradd.c:582 src/useradd.c:593
+#: src/useradd.c:596 src/useradd.c:608
 #, c-format
 msgid "%s: rename: %s"
 msgstr "%s: ÐÅÒÅÊÍÅÎÕ×ÁÎÎÑ: %s"
 
-#: src/useradd.c:680 src/usermod.c:281
+#: src/useradd.c:697 src/usermod.c:281
 #, c-format
 msgid "%s: group `%s' is a NIS group.\n"
 msgstr "%s: ÇÒÕÐÁ `%s' ¤ ÇÒÕÐÏÀ NIS.\n"
 
-#: src/useradd.c:688 src/usermod.c:289
+#: src/useradd.c:706 src/usermod.c:290
 #, c-format
 msgid "%s: too many groups specified (max %d).\n"
 msgstr "%s: ÚÁÎÁÄÔÏ ÂÁÇÁÔÏ ÇÒÕР×ËÁÚÁÎÎÏ (ÍÁËÓ %d).\n"
 
-#: src/useradd.c:720 src/usermod.c:321
+#: src/useradd.c:738 src/usermod.c:322
 #, c-format
 msgid "usage: %s\t[-u uid [-o]] [-g group] [-G group,...] \n"
 msgstr "×ÉËÏÒÉÓÔÏ×ÕÊÔÅ: %s\t[-u uid [-o]] [-g ÇÒÕÐÁ] [-G ÇÒÕÐÁ,...] \n"
 
-#: src/useradd.c:723
+#: src/useradd.c:742
 msgid "\t\t[-d home] [-s shell] [-c comment] [-m [-k template]]\n"
 msgstr "\t\t[-d ÄÏÍÁÛÎÑ_ÔÅËÁ] [-s shell] [-c ËÏÍÅÎÔÁÒ] [-m [-k wzór]]\n"
 
-#: src/useradd.c:726 src/usermod.c:327
+#: src/useradd.c:745 src/usermod.c:329
+#, fuzzy
 msgid "[-f inactive] [-e expire ] "
-msgstr "[-f ÎÅÁËÔÉ×ÎÉÊ] [-e ÐÒÏÓÔÒÏÞÅÎÉÊ ]"
+msgstr "[-f ÎÅÁËÔÉ×ÎÉÊ] [-e ÐÒÏÓÔÒÏÞÅÎÉÊ]"
 
-#: src/useradd.c:729
+#: src/useradd.c:748
 msgid "[-A program] "
 msgstr "[-A ÐÒÏÇÒÁÍÁ] "
 
-#: src/useradd.c:731
+#: src/useradd.c:750
 msgid "[-p passwd] name\n"
 msgstr "[-p ÐÁÒÏÌØ] ¦Í'Ñ\n"
 
-#: src/useradd.c:733
+#: src/useradd.c:753
 #, c-format
 msgid "       %s\t-D [-g group] [-b base] [-s shell]\n"
 msgstr "       %s\t-D [-g ÇÒÕÐÁ] [-b ÂÁÚÏ×Á_ÔÅËÁ] [-s shell]\n"
 
-#: src/useradd.c:736
+#: src/useradd.c:756
+#, fuzzy
 msgid "\t\t[-f inactive] [-e expire ]\n"
-msgstr "\t\t[-f ÎÅÁËÔÉ×ÎÉÊ] [-e ÐÒÏÓÔÒÏÞÅÎÉÊ ]\n"
+msgstr "\t\t[-f ÎÅÁËÔÉ×ÎÉÊ] [-e ÐÒÏÓÔÒÏÞÅÎÉÊ]\n"
 
-#: src/useradd.c:833 src/usermod.c:479
+#: src/useradd.c:850 src/usermod.c:480
 #, c-format
 msgid "%s: error locking group file\n"
 msgstr "%s: ÎÅ ÍÏÖÕ ÚÁÂÌÏËÕ×ÁÔÉ ÆÁÊÌ ÇÒÕÐ\n"
 
-#: src/useradd.c:837 src/usermod.c:484
+#: src/useradd.c:855 src/usermod.c:486
 #, c-format
 msgid "%s: error opening group file\n"
 msgstr "%s: ÎÅ ÍÏÖՠצÄËÒÉÔÉ ÆÁÊÌ ÇÒÕÐ\n"
 
-#: src/useradd.c:842 src/usermod.c:591
+#: src/useradd.c:862 src/usermod.c:597
 #, c-format
 msgid "%s: error locking shadow group file\n"
 msgstr "%s: ÎÅ ÍÏÖÕ ÚÁÂÌÏËÕ×ÁÔÉ ÆÁÊÌ ÐÒÉÈÏ×ÁÎÉÈ ÇÒÕÐ\n"
 
-#: src/useradd.c:847 src/usermod.c:597
+#: src/useradd.c:867 src/usermod.c:603
 #, c-format
 msgid "%s: error opening shadow group file\n"
 msgstr "%s: ÎÅ ÍÏÖՠצÄËÒÉÔÉ ÆÁÊÌ ÐÒÉÈÏ×ÁÎÉÈ ÇÒÕÐ\n"
 
-#: src/useradd.c:1019
-#, c-format
-msgid "%s: uid %d is not unique\n"
-msgstr "%s: uid %d ÎÅ ¤ ÕΦËÁÌØÎÉÍ\n"
+#: src/useradd.c:1039
+#, fuzzy, c-format
+msgid "%s: uid %u is not unique\n"
+msgstr "%s: uid %ld ÎÅ ¤ ÕΦËÁÌØÎÉÍ\n"
 
-#: src/useradd.c:1049
+#: src/useradd.c:1069
 #, c-format
 msgid "%s: can't get unique uid\n"
 msgstr "%s: ÎÅ ÍÏÖÕ ÏÔÒÉÍÁÔÉ ÕΦËÁÌØÎ¦Ê uid\n"
 
-#: src/useradd.c:1157 src/useradd.c:1301 src/usermod.c:1053 src/usermod.c:1064
-#: src/usermod.c:1074 src/usermod.c:1120 src/usermod.c:1164
+#: src/useradd.c:1174 src/useradd.c:1325 src/usermod.c:1075 src/usermod.c:1086
+#: src/usermod.c:1096 src/usermod.c:1143 src/usermod.c:1187
 #, c-format
 msgid "%s: invalid field `%s'\n"
 msgstr "%s: ÎÅצÒÎÅ ÐÏÌÅ `%s'\n"
 
-#: src/useradd.c:1171
+#: src/useradd.c:1189
 #, c-format
 msgid "%s: invalid base directory `%s'\n"
 msgstr "%s: ÎÅצÒÎÁ ÂÁÚÏ×Á ÔÅËÁ `%s'\n"
 
-#: src/useradd.c:1181
+#: src/useradd.c:1199
 #, c-format
 msgid "%s: invalid comment `%s'\n"
 msgstr "%s: ÎÅצÒÎÉÊ ËÏÍÅÎÔÁÒ `%s'\n"
 
-#: src/useradd.c:1191
+#: src/useradd.c:1210
 #, c-format
 msgid "%s: invalid home directory `%s'\n"
 msgstr "%s: ÎÅצÒÎÁ ÄÏÍÁÛÎÑ ÔÅËÁ `%s'\n"
 
-#: src/useradd.c:1209 src/usermod.c:1087
+#: src/useradd.c:1229 src/usermod.c:1110
 #, c-format
 msgid "%s: invalid date `%s'\n"
 msgstr "%s: ÎÅצÒÎÁ ÄÁÔÁ `%s'\n"
 
-#: src/useradd.c:1221
+#: src/useradd.c:1242
 #, c-format
 msgid "%s: shadow passwords required for -e\n"
 msgstr "%s: ÐÒÉÈÏ×ÁΦ ÐÁÒÏ̦ ÐÏÔÒ¦ÂΦ ÄÌÑ -e\n"
 
-#: src/useradd.c:1236
+#: src/useradd.c:1258
 #, c-format
 msgid "%s: shadow passwords required for -f\n"
 msgstr "%s: ÐÒÉÈÏ×ÁΦ ÐÁÒÏ̦ ÐÏÔÒ¦ÂΦ ÄÌÑ -f\n"
 
-#: src/useradd.c:1310
+#: src/useradd.c:1336
 #, c-format
 msgid "%s: invalid shell `%s'\n"
 msgstr "%s: ÎÅצÒÎÉÊ shell `%s'\n"
 
-#: src/useradd.c:1351
+#: src/useradd.c:1377
 #, c-format
 msgid "%s: invalid user name `%s'\n"
 msgstr "%s: ÎÅצÒÎÅ ¦Í'Ñ ËÏÒÉÓÔÕ×ÁÞÁ `%s'\n"
 
-#: src/useradd.c:1387 src/userdel.c:298 src/usermod.c:1232
+#: src/useradd.c:1413 src/userdel.c:298 src/usermod.c:1255
 #, c-format
 msgid "%s: cannot rewrite password file\n"
 msgstr "%s: ÎÅ ÍÏÖÕ ÐÅÒÅÐÉÓÁÔÉ ÆÁÊÌ ÐÁÒÏÌÅÊ\n"
 
-#: src/useradd.c:1392 src/userdel.c:301 src/usermod.c:1237
+#: src/useradd.c:1420 src/userdel.c:303 src/usermod.c:1262
 #, c-format
 msgid "%s: cannot rewrite shadow password file\n"
 msgstr "%s: ÎÅ ÍÏÖÕ ÐÅÒÅÐÉÓÁÔÉ ÆÁÊÌ ÐÒÉÈÏ×ÁÎÉÈ ÐÁÒÏÌÅÊ\n"
 
-#: src/useradd.c:1432 src/userdel.c:365 src/usermod.c:1272
+#: src/useradd.c:1461 src/userdel.c:367 src/usermod.c:1296
 #, c-format
 msgid "%s: unable to lock password file\n"
 msgstr "%s: ÎÅ ÍÏÖÕ ÂÌÏËÕ×ÁÔÉ ÆÁÊÌ ÐÁÒÏÌÅÊ\n"
 
-#: src/useradd.c:1436 src/userdel.c:369 src/usermod.c:1276
+#: src/useradd.c:1466 src/userdel.c:372 src/usermod.c:1301
 #, c-format
 msgid "%s: unable to open password file\n"
 msgstr "%s: ÎÅ ÍÏÖՠצÄËÒÉÔÉ ÆÁÊÌ ÐÁÒÏÌÅÊ\n"
 
-#: src/useradd.c:1442 src/userdel.c:374 src/usermod.c:1281
+#: src/useradd.c:1474 src/userdel.c:379 src/usermod.c:1308
 #, c-format
 msgid "%s: cannot lock shadow password file\n"
 msgstr "%s: ÎÅ ÍÏÖÕ ÂÌÏËÕ×ÁÔÉ ÆÁÊÌ ÐÒÉÈÏ×ÁÎÉÈ ÐÁÒÏÌÅÊ\n"
 
-#: src/useradd.c:1448 src/userdel.c:379 src/usermod.c:1286
+#: src/useradd.c:1481 src/userdel.c:385 src/usermod.c:1314
 #, c-format
 msgid "%s: cannot open shadow password file\n"
 msgstr "%s: ÎÅ ÍÏÖՠצÄËÒÉÔÉ ÆÁÊÌ ÐÒÉÈÏ×ÁÎÉÈ ÐÁÒÏÌÅÊ\n"
 
-#: src/useradd.c:1547 src/usermod.c:1373
+#: src/useradd.c:1580 src/usermod.c:1405
 #, c-format
 msgid "%s: error adding authentication method\n"
 msgstr "%s: ÐÏÍÉÌËÁ ÄÏÄÁÎÎÑ ÍÅÔÏÄÕ ÁÕÔÅÎÔÉÆ¦ËÁæ§\n"
 
-#: src/useradd.c:1570
+#: src/useradd.c:1604
 #, c-format
 msgid "%s: error adding new password entry\n"
 msgstr "%s: ÐÏÍÉÌËÁ ÄÏÄÁÎÎÑ ÎÏ×ÏÇÏ ÚÁÐÉÓÕ Õ ÂÁÚÕ ÐÁÒÏÌÅÊ\n"
 
-#: src/useradd.c:1585
+#: src/useradd.c:1618
 #, c-format
 msgid "%s: error updating password dbm entry\n"
 msgstr "%s: ÐÏÍÉÌËÁ ÏÎÏ×ÌÅÎÎÑ ÚÁÐÉÓÕ Õ ÂÁÚ¦ ÐÁÒÏÌÅÊ dbm\n"
 
-#: src/useradd.c:1601 src/usermod.c:1432
+#: src/useradd.c:1634 src/usermod.c:1471
 #, c-format
 msgid "%s: error adding new shadow password entry\n"
 msgstr "%s: ÐÏÍÉÌËÁ ÄÏÄÁÎÎÑ ÎÏ×ÏÇÏ ÚÁÐÉÓÕ Õ ÂÁÚÕ ÐÒÉÈÏ×ÁÎÉÈ ÐÁÒÏÌÅÊ\n"
 
-#: src/useradd.c:1617 src/usermod.c:1447
+#: src/useradd.c:1650 src/usermod.c:1488
 #, c-format
 msgid "%s: error updating shadow passwd dbm entry\n"
 msgstr "%s: ÐÏÍÉÌËÁ ÏÎÏ×ÌÅÎÎÑ ÚÁÐÉÓÕ Õ ÂÁÚ¦ ÐÒÉÈÏ×ÁÎÉÈ ÐÁÒÏÌÅÊ dbm\n"
 
-#: src/useradd.c:1649
+#: src/useradd.c:1682
 #, c-format
 msgid "%s: cannot create directory %s\n"
 msgstr "%s: ÎÅ ÍÏÖÕ ÓÔ×ÏÒÉÔÉ ÔÅËÕ %s\n"
 
-#: src/useradd.c:1772 src/usermod.c:1210
+#: src/useradd.c:1806 src/usermod.c:1233
 #, c-format
 msgid "%s: user %s exists\n"
 msgstr "%s: ËÏÒÉÓÔÕ×ÁÞ %s ¦ÓÎÕ¤\n"
 
-#: src/useradd.c:1784
+#: src/useradd.c:1821
 #, c-format
 msgid ""
 "%s: group %s exists - if you want to add this user to that group, use -g.\n"
@@ -2228,239 +2197,240 @@ msgstr ""
 "%s: ÇÒÕÐÁ %s ¦ÓÎÕ¤ - ÑËÝÏ ×É ÂÁÖÁ¤ÔÅ ÄÏÄÁÔÉ ËÏÒÉÓÔÕ×ÁÞÁ ÄϠ椧 ÇÒÕÐÉ, "
 "×ÉËÏÒÉÓÔÏ×ÕÊÔÅ -g.\n"
 
-#: src/useradd.c:1815
+#: src/useradd.c:1854
 #, c-format
 msgid "%s: warning: CREATE_HOME not supported, please use -m instead.\n"
 msgstr "%s: ÚÁÓÔÅÒÅÖÅÎÎÑ: CREATE_HOME ÎŠЦÄÔÒÉÍÕ¤ÔØÓÑ, ËÏÒÉÓÔÕÊÔÅÓØ -m.\n"
 
-#: src/userdel.c:133
+#: src/userdel.c:129
 #, c-format
 msgid "usage: %s [-r] name\n"
 msgstr "×ÉËÏÒÉÓÔÏ×ÕÊÔÅ: %s [-r] ¦Í'Ñ\n"
 
-#: src/userdel.c:184 src/userdel.c:266
+#: src/userdel.c:181 src/userdel.c:267
 #, c-format
 msgid "%s: error updating group entry\n"
 msgstr "%s: ÐÏÍÉÌËÁ ÏÎÏ×ÌÅÎÎÑ ÚÁÐÉÓÕ Õ ÂÁÚ¦ ÇÒÕÐ\n"
 
-#: src/userdel.c:194 src/userdel.c:275
+#: src/userdel.c:191 src/userdel.c:276
 #, c-format
 msgid "%s: cannot update dbm group entry\n"
 msgstr "%s: ÐÏÍÉÌËÁ ÏÎÏ×ÌÅÎÎÑ ÚÁÐÉÓÕ Õ ÂÁÚ¦ ÇÒÕРdbm\n"
 
-#: src/userdel.c:221
+#: src/userdel.c:219
 #, fuzzy, c-format
 msgid "%s: cannot remove dbm group entry\n"
 msgstr "%s: ÐÏÍÉÌËÁ ×ÉÄÁÌÅÎÎÑ ÚÁÐÉÓÕ Õ ÂÁÚ¦ ÇÒÕРdbm\n"
 
-#: src/userdel.c:306
+#: src/userdel.c:308
 #, c-format
 msgid "%s: cannot rewrite TCFS key file\n"
 msgstr "%s: ÎÅ ÍÏÖÕ ÐÅÒÅÐÉÓÁÔÉ ÆÁÊÌ ËÌÀÞÅÊ TCFS\n"
 
-#: src/userdel.c:386
+#: src/userdel.c:392
 #, c-format
 msgid "%s: cannot lock TCFS key file\n"
 msgstr "%s: ÎÅ ÍÏÖÕ ÂÌÏËÕ×ÁÔÉ ÆÁÊÌ ËÌÀÞÅÊ TCFS\n"
 
-#: src/userdel.c:390
+#: src/userdel.c:397
 #, c-format
 msgid "%s: cannot open TCFS key file\n"
 msgstr "%s: ÎÅ ÍÏÖՠצÄËÒÉÔÉ ÆÁÊÌ ËÌÀÞÅÊ TCFS\n"
 
-#: src/userdel.c:399
+#: src/userdel.c:408
 #, c-format
 msgid "%s: cannot open group file\n"
 msgstr "%s: ÎÅ ÍÏÖՠצÄËÒÉÔÉ ÆÁÊÌ ÇÒÕÐ\n"
 
-#: src/userdel.c:409
+#: src/userdel.c:419
 #, c-format
 msgid "%s: cannot open shadow group file\n"
 msgstr "%s: ÎÅ ÍÏÖՠצÄËÒÉÔÉ ÆÁÊÌ ÐÒÉÈÏ×ÁÎÉÈ ÇÒÕÐ\n"
 
-#: src/userdel.c:440 src/userdel.c:455
+#: src/userdel.c:451 src/userdel.c:468
 #, c-format
 msgid "%s: error deleting authentication\n"
 msgstr "%s: ÐÏÍÉÌËÁ ×ÉÄÁÌÅÎÎÑ ÍÅÔÏÄÕ ÁÕÔÅÎÔÉÆ¦ËÁæ§\n"
 
-#: src/userdel.c:464
+#: src/userdel.c:479
 #, c-format
 msgid "%s: error deleting password entry\n"
 msgstr "%s: ÐÏÍÉÌËÁ ×ÉÄÁÌÅÎÎÑ ÚÁÐÉÓÕ Ú ÂÁÚÉ ÐÁÒÏÌÅÊ\n"
 
-#: src/userdel.c:467
+#: src/userdel.c:485
 #, c-format
 msgid "%s: error deleting shadow password entry\n"
 msgstr "%s: ÐÏÍÉÌËÁ ×ÉÄÁÌÅÎÎÑ ÚÁÐÉÓÕ Ú ÂÁÚÉ ÐÒÉÈÏ×ÁÎÉÈ ÐÁÒÏÌÅÊ\n"
 
-#: src/userdel.c:476
+#: src/userdel.c:496
 #, c-format
 msgid "%s: error deleting TCFS entry\n"
 msgstr "%s: ÐÏÍÉÌËÁ ×ÉÄÁÌÅÎÎÑ ÚÁÐÉÓÕ Ú ÂÁÚÉ TCFS\n"
 
-#: src/userdel.c:489
+#: src/userdel.c:510
 #, c-format
 msgid "%s: error deleting password dbm entry\n"
 msgstr "%s: ÐÏÍÉÌËÁ ×ÉÄÁÌÅÎÎÑ ÚÁÐÉÓÕ dbm Ú ÂÁÚÉ ÐÁÒÏÌÅÊ\n"
 
-#: src/userdel.c:508
+#: src/userdel.c:533
 #, c-format
 msgid "%s: error deleting shadow passwd dbm entry\n"
 msgstr "%s: ÐÏÍÉÌËÁ ×ÉÄÁÌÅÎÎÑ ÚÁÐÉÓÕ dbm Ú ÂÁÚÉ ÐÒÉÈÏ×ÁÎÉÈ ÐÁÒÏÌÅÊ\n"
 
-#: src/userdel.c:549
+#: src/userdel.c:569
 #, c-format
 msgid "%s: user %s is currently logged in\n"
 msgstr "%s: ËÏÒÉÓÔÕ×ÁÞ %s ÎÁ ÄÁÎÎÉÊ ÍÏÍÅÎÔ Õ ÓÉÓÔÅͦ\n"
 
-#: src/userdel.c:666
+#: src/userdel.c:659
 #, c-format
 msgid "%s: warning: %s not owned by %s, not removing\n"
 msgstr "%s: ÚÁÓÔÅÒÅÖÅÎÎÑ: %s ÎÅ ÎÁÌÅÖÉÔØ %s, ÎÅ ×ÉÄÁÌÅÎÏ\n"
 
-#: src/userdel.c:672
+#: src/userdel.c:666
 #, c-format
 msgid "%s: warning: can't remove "
 msgstr "%s: ÚÁÓÔÅÒÅÖÅÎÎÑ: ÎÅ ÍÏÖÕ ×ÉÄÁÌÉÔÉ "
 
-#: src/userdel.c:791 src/usermod.c:1001
+#: src/userdel.c:758 src/usermod.c:1023
 #, c-format
 msgid "%s: user %s does not exist\n"
 msgstr "%s: ËÏÒÉÔÓÔÕ×ÁÞ %s ÎÅ ¦ÓÎÕ¤\n"
 
-#: src/userdel.c:805 src/usermod.c:1017
+#: src/userdel.c:770 src/usermod.c:1039
 #, c-format
 msgid "%s: user %s is a NIS user\n"
 msgstr "%s: ËÏÒÉÓÔÕ×ÁÞ %s ¤ ËÏÒÉÓÔÕ×ÁÞ NIS\n"
 
-#: src/userdel.c:842
+#: src/userdel.c:799
 #, c-format
 msgid "%s: %s not owned by %s, not removing\n"
 msgstr "%s: %s ÎÅ ÎÁÌÅÖÉÔØ %s, ÎÅ ×ÉÄÁÌÅÎÏ\n"
 
-#: src/userdel.c:865
+#: src/userdel.c:818
 #, c-format
 msgid "%s: not removing directory %s (would remove home of user %s)\n"
 msgstr "%s: ÎÅ ×ÉÄÁÌÅÎÏ ÔÅËÕ %s (ÍÏÖÎÁ ×ÉÄÁÌÉÔÉ ÄÏÍÁÛÎÀ ÔÅËÕ ËÏÒÉÓÔÕ×ÁÞÁ %s)\n"
 
-#: src/userdel.c:878
+#: src/userdel.c:830
 #, c-format
 msgid "%s: error removing directory %s\n"
 msgstr "%s: ÐÏÍÉÌËÁ ×ÉÄÁÌÅÎÎÑ ÔÅËÉ %s\n"
 
-#: src/usermod.c:324
+#: src/usermod.c:326
 msgid "\t\t[-d home [-m]] [-s shell] [-c comment] [-l new_name]\n"
 msgstr "\t\t[-d ÄÏÍÁÛÎÑ_ÔÅËÁ [-m]] [-s shell] [-c ËÏÍÅÎÔÁÒ] [-l ÎÏ×Å_¦Í'Ñ]\n"
 
-#: src/usermod.c:330
+#: src/usermod.c:332
+#, fuzzy
 msgid "[-A {DEFAULT|program},... ] "
-msgstr "[-A {DEFAULT|program},... ] "
+msgstr "[-A {DEFAULT|program},...] "
 
-#: src/usermod.c:332
+#: src/usermod.c:334
 #, fuzzy
 msgid "[-p passwd] [-L|-U] name\n"
 msgstr "[-p ÐÁÒÏÌØ] ¦Í'Ñ\n"
 
-#: src/usermod.c:511
+#: src/usermod.c:514
 #, c-format
 msgid "%s: out of memory in update_group\n"
 msgstr "%s: ÂÒÁËÕ¤ ÐÁÍÑÔ¦ Õ pdate_group\n"
 
-#: src/usermod.c:634
+#: src/usermod.c:641
 #, c-format
 msgid "%s: out of memory in update_gshadow\n"
 msgstr "%s: ÂÒÁËÕ¤ ÐÁÍÑÔ¦ Õ update_gshadow\n"
 
-#: src/usermod.c:1187
+#: src/usermod.c:1210
 #, c-format
 msgid "%s: no flags given\n"
 msgstr "%s: ÎÅ ÐÏÄÁÎÏ ÆÌÁǦ×\n"
 
-#: src/usermod.c:1194
+#: src/usermod.c:1217
 #, c-format
 msgid "%s: shadow passwords required for -e and -f\n"
 msgstr "%s: ÐÒÉÈÏ×ÁΦ ÐÁÒÏ̦ ÐÏÔÒ¦ÂΦ ÄÌÑ -e ¦ -f\n"
 
-#: src/usermod.c:1215
-#, c-format
-msgid "%s: uid %ld is not unique\n"
+#: src/usermod.c:1239
+#, fuzzy, c-format
+msgid "%s: uid %lu is not unique\n"
 msgstr "%s: uid %ld ÎÅ ¤ ÕΦËÁÌØÎÉÍ\n"
 
-#: src/usermod.c:1363
+#: src/usermod.c:1392
 #, c-format
 msgid "%s: error deleting authentication method\n"
 msgstr "%s: ÐÏÍÉÌËÁ ×ÉÄÁÌÅÎÎÑ ÍÅÔÏÄÕ ÁÕÔÅÎÔÉÆ¦ËÁæ§\n"
 
-#: src/usermod.c:1383
+#: src/usermod.c:1418
 #, c-format
 msgid "%s: error changing authentication method\n"
 msgstr "%s: ÐÏÍÉÌËÁ ÚÁͦÎÉ ÍÅÔÏÄÕ ÁÕÔÅÎÔÉÆ¦ËÁæ§\n"
 
-#: src/usermod.c:1400
+#: src/usermod.c:1436
 #, c-format
 msgid "%s: error changing password entry\n"
 msgstr "%s: ÐÏÍÉÌËÁ ÚͦÎÉ ÚÁÐÉÓÕ × ÂÁÚ¦ ÐÁÒÏÌÅÊ\n"
 
-#: src/usermod.c:1406
+#: src/usermod.c:1442
 #, c-format
 msgid "%s: error removing password entry\n"
 msgstr "%s: ÐÏÍÉÌËÁ ×ÉÄÁÌÅÎÎÑ ÚÁÐÉÓÕ Ú ÂÁÚÉ ÐÁÒÏÌÅÊ\n"
 
-#: src/usermod.c:1414
+#: src/usermod.c:1451
 #, c-format
 msgid "%s: error adding password dbm entry\n"
 msgstr "%s: ÐÏÍÉÌËÁ ÄÏÄÁÎÎÑ ÚÁÐÉÓÕ dbm Õ ÂÁÚÕ ÐÒÉÈÏ×ÁÎÉÈ ÐÁÒÏÌÅÊ\n"
 
-#: src/usermod.c:1421
+#: src/usermod.c:1459
 #, c-format
 msgid "%s: error removing passwd dbm entry\n"
 msgstr "%s: ÐÏÍÉÌËÁ ×ÉÄÁÌÅÎÎÑ ÚÁÐÉÓÕ dbm Ú ÂÁÚÉ ÐÁÒÏÌÅÊ\n"
 
-#: src/usermod.c:1438
+#: src/usermod.c:1478
 #, c-format
 msgid "%s: error removing shadow password entry\n"
 msgstr "%s: ÐÏÍÉÌËÁ ×ÉÄÁÌÅÎÎÑ ÚÁÐÉÓÕ Ú ÂÁÚÉ ÐÒÉÈÏ×ÁÎÉÈ ÐÁÒÏÌÅÊ\n"
 
-#: src/usermod.c:1453
+#: src/usermod.c:1495
 #, c-format
 msgid "%s: error removing shadow passwd dbm entry\n"
 msgstr "%s: ÐÏÍÉÌËÁ ×ÉÄÁÌÅÎÎÑ ÚÁÐÉÓÕ dbm Ú ÂÁÚÉ ÐÒÉÈÏ×ÁÎÉÈ ÐÁÒÏÌÅÊ\n"
 
-#: src/usermod.c:1484
+#: src/usermod.c:1524
 #, c-format
 msgid "%s: directory %s exists\n"
 msgstr "%s: ÔÅËÁ %s ¦ÓÎÕ¤\n"
 
-#: src/usermod.c:1491
+#: src/usermod.c:1533
 #, c-format
 msgid "%s: can't create %s\n"
 msgstr "%s: ÎÅ ÍÏÖÕ ÓÔ×ÏÒÉÔÉ %s\n"
 
-#: src/usermod.c:1497
+#: src/usermod.c:1539
 #, c-format
 msgid "%s: can't chown %s\n"
 msgstr "%s: ÎÅ ÍÏÖÕ ÚͦÎÉÔÉ ×ÏÌÏÄÁÒÑ %s\n"
 
-#: src/usermod.c:1513
+#: src/usermod.c:1556
 #, c-format
 msgid "%s: cannot rename directory %s to %s\n"
 msgstr "%s: ÎÅ ÍÏÖÕ ÐÅÒÅÊÍÅÎÕ×ÁÔÉ ÔÅËÕ Ú %s ÎÁ %s\n"
 
 #. better leave it alone
-#: src/usermod.c:1610
+#: src/usermod.c:1653
 #, c-format
 msgid "%s: warning: %s not owned by %s\n"
 msgstr "%s: ÚÁÓÔÅÒÅÖÅÎÎÑ: %s ÎÅ ÎÁÌÅÖÉÔØ %s\n"
 
-#: src/usermod.c:1616
+#: src/usermod.c:1659
 msgid "failed to change mailbox owner"
 msgstr "ÎÅ ÍÏÖÕ ÚͦÎÉÔÉ ×ÏÌÏÄÁÒÑ ÐÏÛÔÏ×ϧ ÓËÒÉÎØËÉ"
 
-#: src/usermod.c:1623
+#: src/usermod.c:1667
 msgid "failed to rename mailbox"
 msgstr "ÎÅ ÍÏÖÕ ÐÅÒÅÊÍÅÎÕ×ÁÔÉ ÐÏÛÔÏ×Õ ÓËÒÉÎØËÕ"
 
-#: src/vipw.c:102
+#: src/vipw.c:104
 #, c-format
 msgid ""
 "\n"
@@ -2469,21 +2439,21 @@ msgstr ""
 "\n"
 "%s: %s ¤ ÎÅÚͦÎÅÎÉÊ\n"
 
-#: src/vipw.c:127
+#: src/vipw.c:132
 #, fuzzy
 msgid "Couldn't lock file"
 msgstr "%s: îÅ ÍÏÖÕ ÂÌÏËÕ×ÁÔÉ ÆÁÊÌ\n"
 
-#: src/vipw.c:134
+#: src/vipw.c:141
 msgid "Couldn't make backup"
 msgstr "îÅ ÍÏÖÕ ÚÒÏÂÉÔÉ ÒÅÚÅÒ×ÎÕ ËÏЦÀ"
 
-#: src/vipw.c:187
+#: src/vipw.c:206
 #, c-format
 msgid "%s: can't restore %s: %s (your changes are in %s)\n"
 msgstr "%s: ÎÅ ÍÏÖՠצÄÎÏ×ÉÔÉ %s: %s (×ÁÛ¦ ÚͦÎÉ Õ %s)\n"
 
-#: src/vipw.c:226
+#: src/vipw.c:244
 msgid ""
 "Usage:\n"
 "`vipw' edits /etc/passwd        `vipw -s' edits /etc/shadow\n"
@@ -2493,6 +2463,25 @@ msgstr ""
 "`vipw' ÒÅÄÁÇÕ¤ /etc/passwd      `vipw -s' ÒÅÄÁÇÕ¤ /etc/shadow\n"
 "`vigr' ÒÅÄÁÇÕ¤ /etc/group       `vigr -s' ÒÅÄÁÇÕ¤ /etc/gshadow\n"
 
+#~ msgid "%s: gid %ld is not unique\n"
+#~ msgstr "%s: gid %ld ÎÅ ¤ ÕΦËÁÌØÎÉÍ\n"
+
+#, fuzzy
+#~ msgid "unknown gid: %u\n"
+#~ msgstr "ÎÅצÄÏÍÉÊ gid: %d\n"
+
+#~ msgid "%s: uid %d is not unique\n"
+#~ msgstr "%s: uid %d ÎÅ ¤ ÕΦËÁÌØÎÉÍ\n"
+
+#~ msgid "user %s: bad UID (%d)\n"
+#~ msgstr "ËÏÒÉÓÔÕ×ÁÞ %s: ÐÏÇÁÎÉÊ UID (%d)\n"
+
+#~ msgid "%s: no aging information present\n"
+#~ msgstr "%s: ÎÅÍÁ¤ ¦ÎÆÏÒÍÁæ§ ÐÒϠצË\n"
+
+#~ msgid "group %s: bad GID (%d)\n"
+#~ msgstr "ÇÒÕÐÁ %s: ÍÁ¤ ÎÅצÒÎÉÊ GID (%d)\n"
+
 #~ msgid "%s: permission denied (shell).\n"
 #~ msgstr "%s: ÄÏÓÔÕРÚÁÂÏÒÏÎÅÎÏ (shell).\n"
 
index 9a6c4bd69487fb0546091b87ecbe36144fbfe8ea..55370cf1736189d376ce4b013173fd40d9226789 100644 (file)
@@ -29,8 +29,7 @@ usbin_PROGRAMS = chpasswd dpasswd groupadd groupdel groupmod \
 
 noinst_PROGRAMS = id sulogin
 
-# id and groups are from gnu, sulogin from sysvinit,
-# also suid programs are installed by hand.
+# id and groups are from gnu, sulogin from sysvinit
 
 suidbins = su
 suidubins = chage chfn chsh expiry gpasswd newgrp passwd
@@ -54,6 +53,8 @@ userdel_LDADD  = $(LDADD) $(LIBPAM)
 usermod_LDADD  = $(LDADD) $(LIBPAM)
 
 install-exec-hook:
+       $(LN_S) newgrp  $(DESTDIR)$(bindir)/sg
+       $(LN_S) vigr    $(DESTDIR)$(bindir)/vipw
        for i in $(suidbins); do \
                chmod 4755 $(DESTDIR)$(bindir)/$$i; \
        done
@@ -62,5 +63,3 @@ install-data-hook:
        for i in $(suidubins); do \
                chmod 4755 $(DESTDIR)$(ubindir)/$$i; \
        done
-       rm -f $(DESTDIR)$(ubindir)/sg
-       ln -s newgrp $(DESTDIR)$(ubindir)/sg
index ad3b843596f0913eb2e6bd8e403ebeed3a1e9576..744a27887a7da56974a45a9dbfebc0e5b564c5f5 100644 (file)
@@ -140,8 +140,7 @@ usbin_PROGRAMS = chpasswd dpasswd groupadd groupdel groupmod \
 noinst_PROGRAMS = id sulogin
 
 
-# id and groups are from gnu, sulogin from sysvinit,
-# also suid programs are installed by hand.
+# id and groups are from gnu, sulogin from sysvinit
 suidbins = su
 suidubins = chage chfn chsh expiry gpasswd newgrp passwd
 
@@ -795,6 +794,8 @@ uninstall-am: uninstall-binPROGRAMS uninstall-info-am \
 
 
 install-exec-hook:
+       $(LN_S) newgrp  $(DESTDIR)$(bindir)/sg
+       $(LN_S) vigr    $(DESTDIR)$(bindir)/vipw
        for i in $(suidbins); do \
                chmod 4755 $(DESTDIR)$(bindir)/$$i; \
        done
@@ -803,8 +804,6 @@ install-data-hook:
        for i in $(suidubins); do \
                chmod 4755 $(DESTDIR)$(ubindir)/$$i; \
        done
-       rm -f $(DESTDIR)$(ubindir)/sg
-       ln -s newgrp $(DESTDIR)$(ubindir)/sg
 # 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:
index 7932356bf67f46755d5fe5dfe40c330b81e92fed..bea066c923a67dd2f094005a88ed1831aea07db6 100644 (file)
@@ -17,7 +17,7 @@
  * 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
+ * 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)
@@ -30,8 +30,7 @@
 #include <config.h>
 
 #include "rcsid.h"
-RCSID(PKG_VER "$Id: chage.c,v 1.19 2000/10/09 18:39:50 kloczek Exp $")
-
+RCSID (PKG_VER "$Id: chage.c,v 1.27 2002/01/05 15:41:43 kloczek Exp $")
 #include <sys/types.h>
 #include <stdio.h>
 #include <fcntl.h>
@@ -40,54 +39,34 @@ RCSID(PKG_VER "$Id: chage.c,v 1.19 2000/10/09 18:39:50 kloczek Exp $")
 #include <time.h>
 #include "prototypes.h"
 #include "defines.h"
-
-#include <pwd.h>
-
 #ifdef USE_PAM
 #include <security/pam_appl.h>
 #include <security/pam_misc.h>
+#endif                         /* USE_PAM */
 #include <pwd.h>
-#endif /* USE_PAM */
-
 /*
- * chage depends on some form of aging being present.  It makes no sense
- * to have a program that has no input.
+ * Global variables
  */
+static char *Prog;
 
-#ifdef SHADOWPWD
-#ifndef        AGING
-#define        AGING
-#endif /* AGING */
-#else  /* !SHADOWPWD */
-#if !defined(ATT_AGE) && defined(AGING)
-#undef AGING
-#endif /* !ATT_AGE && AGING */
-#endif /* SHADOWPWD */
-
-static char    *Prog;
-static int amroot;
+static int locks;
 
-#ifdef AGING   /*{*/
+static long mindays;
+static long maxdays;
+static long lastday;
 
-/*
- * Global variables
- */
-
-static long    mindays;
-static long    maxdays;
-static long    lastday;
 #ifdef SHADOWPWD
-static long    warndays;
-static long    inactdays;
-static long    expdays;
+static long warndays;
+static long inactdays;
+static long expdays;
 #endif
 
 /*
  * External identifiers
  */
 
-extern long    a64l();
-extern char    *l64a();
+extern long a64l ();
+extern char *l64a ();
 
 #include "pwio.h"
 
@@ -95,56 +74,31 @@ extern      char    *l64a();
 #include "shadowio.h"
 #endif
 
-extern int     optind;
-extern char    *optarg;
 #ifdef NDBM
-extern int     pw_dbm_mode;
+extern int pw_dbm_mode;
+
 #ifdef SHADOWPWD
-extern int     sp_dbm_mode;
+extern int sp_dbm_mode;
 #endif
 #endif
 
-/*
- * #defines for messages.  This facilitates foreign language conversion
- * since all messages are defined right here.
- */
-
-/*
- * xgettext doesn't like #defines, so now we only leave untranslated
- * messages here.  -MM
- */
-
-#define        AGE_CHANGED     "changed password expiry for %s\n"
-#define        LOCK_FAIL       "failed locking %s\n"
-#define        OPEN_FAIL       "failed opening %s\n"
-#define        WRITE_FAIL      "failed updating %s\n"
-#define        CLOSE_FAIL      "failed rewriting %s\n"
-
 #define        EPOCH           "1969-12-31"
 
-#ifdef SHADOWPWD
-#define        DBMERROR2       "error updating DBM shadow entry.\n"
-#else
-#define        DBMERROR2       "error updating DBM passwd entry.\n"
-#endif
-
 /* local function prototypes */
-static void usage(void);
-static void date_to_str(char *, size_t, time_t);
-static int new_fields(void);
-static void print_date(time_t);
-static void list_fields(void);
-static void cleanup(int);
-
+static void usage (void);
+static void date_to_str (char *, size_t, time_t);
+static int new_fields (void);
+static void print_date (time_t);
+static void list_fields (void);
+static void cleanup (int);
 
 /*
  * isnum - determine whether or not a string is a number
  */
-int
-isnum(const char *s)
+int isnum (const char *s)
 {
        while (*s) {
-               if (!isdigit(*s))
+               if (!isdigit (*s))
                        return 0;
                s++;
        }
@@ -155,62 +109,69 @@ isnum(const char *s)
  * usage - print command line syntax and exit
  */
 
-static void
-usage(void)
+static void usage (void)
 {
 #ifdef SHADOWPWD
-   fprintf(stderr, _("Usage: %s [ -l ] [ -m min_days ] [ -M max_days ] [ -W warn ]\n  [ -I inactive ] [ -E expire ] [ -d last_day ] user\n"), Prog);
+       fprintf (stderr,
+                _("Usage: %s [-l] [-m min_days] [-M max_days] [-W warn]\n"
+                  "\t[-I inactive] [-E expire] [-d last_day] user\n"),
+                Prog);
 #else
-   fprintf(stderr, _("Usage: %s [ -l ] [ -m min_days ] [ -M max_days ] [ -d last_day ] user\n"), Prog);
+       fprintf (stderr,
+                _
+                ("Usage: %s [-l] [-m min_days] [-M max_days] [-d last_day] user\n"),
+                Prog);
 #endif
-       exit(1);
+       exit (1);
 }
 
-static void
-date_to_str(char *buf, size_t maxsize, time_t date)
+static void date_to_str (char *buf, size_t maxsize, time_t date)
 {
        struct tm *tp;
 
-       tp = gmtime(&date);
+       tp = gmtime (&date);
 #ifdef HAVE_STRFTIME
-       strftime(buf, maxsize, "%Y-%m-%d", tp);
+       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 */
+       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
+ * 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
+ * any other negative value is an error. very large positive values will
  * be handled elsewhere.
  */
 
-static int
-new_fields(void)
+static int new_fields (void)
 {
-       char    buf[200];
-       char    *cp;
+       char buf[200];
+       char *cp;
 
-       printf(_("Enter the new value, or press return for the default\n\n"));
+       printf (_
+               ("Enter the new value, or press ENTER for the default\n\n"));
 
-       snprintf(buf, sizeof buf, "%ld", mindays);
-       change_field(buf, sizeof buf, _("Minimum Password Age"));
-       if (((mindays = strtol (buf, &cp, 10)) == 0 && *cp) || mindays < -1)
+       snprintf (buf, sizeof buf, "%ld", mindays);
+       change_field (buf, sizeof buf, _("Minimum Password Age"));
+       if (((mindays = strtol (buf, &cp, 10)) == 0 && *cp)
+           || mindays < -1)
                return 0;
 
-       snprintf(buf, sizeof buf, "%ld", maxdays);
-       change_field(buf, sizeof buf, _("Maximum Password Age"));
-       if (((maxdays = strtol (buf, &cp, 10)) == 0 && *cp) || maxdays < -1)
+       snprintf (buf, sizeof buf, "%ld", maxdays);
+       change_field (buf, sizeof buf, _("Maximum Password Age"));
+       if (((maxdays = strtol (buf, &cp, 10)) == 0 && *cp)
+           || maxdays < -1)
                return 0;
 
-       date_to_str(buf, sizeof buf, lastday * SCALE);
+       date_to_str (buf, sizeof buf, lastday * SCALE);
 
-       change_field(buf, sizeof buf, _("Last Password Change (YYYY-MM-DD)"));
+       change_field (buf, sizeof buf,
+                     _("Last Password Change (YYYY-MM-DD)"));
 
        if (strcmp (buf, EPOCH) == 0)
                lastday = -1;
@@ -218,59 +179,60 @@ new_fields(void)
                return 0;
 
 #ifdef SHADOWPWD
-       snprintf(buf, sizeof buf, "%ld", warndays);
+       snprintf (buf, sizeof buf, "%ld", warndays);
        change_field (buf, sizeof buf, _("Password Expiration Warning"));
-       if (((warndays = strtol (buf, &cp, 10)) == 0 && *cp) || warndays < -1)
+       if (((warndays = strtol (buf, &cp, 10)) == 0 && *cp)
+           || warndays < -1)
                return 0;
 
-       snprintf(buf, sizeof buf, "%ld", inactdays);
-       change_field(buf, sizeof buf, _("Password Inactive"));
-       if (((inactdays = strtol (buf, &cp, 10)) == 0 && *cp) || inactdays < -1)
+       snprintf (buf, sizeof buf, "%ld", inactdays);
+       change_field (buf, sizeof buf, _("Password Inactive"));
+       if (((inactdays = strtol (buf, &cp, 10)) == 0 && *cp)
+           || inactdays < -1)
                return 0;
 
-       date_to_str(buf, sizeof buf, expdays * SCALE);
+       date_to_str (buf, sizeof buf, expdays * SCALE);
 
-       change_field(buf, sizeof buf, _("Account Expiration Date (YYYY-MM-DD)"));
+       change_field (buf, sizeof buf,
+                     _("Account Expiration Date (YYYY-MM-DD)"));
 
        if (strcmp (buf, EPOCH) == 0)
                expdays = -1;
        else if ((expdays = strtoday (buf)) == -1)
                return 0;
-#endif /* SHADOWPWD */
+#endif                         /* SHADOWPWD */
 
        return 1;
 }
 
-static void
-print_date(time_t date)
+static void print_date (time_t date)
 {
 #ifdef HAVE_STRFTIME
        struct tm *tp;
        char buf[80];
 
-       tp = gmtime(&date);
-       strftime(buf, sizeof buf, "%b %d, %Y", tp);
-       puts(buf);
+       tp = gmtime (&date);
+       strftime (buf, sizeof buf, "%b %d, %Y", tp);
+       puts (buf);
 #else
        struct tm *tp;
        char *cp;
 
-       tp = gmtime(&date);
-       cp = asctime(tp);
-       printf("%6.6s, %4.4s\n", cp + 4, cp + 20);
+       tp = gmtime (&date);
+       cp = asctime (tp);
+       printf ("%6.6s, %4.4s\n", cp + 4, cp + 20);
 #endif
 }
 
 /*
  * list_fields - display the current values of the expiration fields
  *
- * display the password age information from the password fields.  date
+ * 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)
+static void list_fields (void)
 {
        long changed = 0;
        long expires;
@@ -278,62 +240,60 @@ list_fields(void)
        /*
         * 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.
+        * 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:\t%ld\n"), mindays);
-       printf(_("Maximum:\t%ld\n"), maxdays);
+       printf (_("Minimum:\t%ld\n"), mindays);
+       printf (_("Maximum:\t%ld\n"), maxdays);
 #ifdef SHADOWPWD
-       printf(_("Warning:\t%ld\n"), warndays);
-       printf(_("Inactive:\t%ld\n"), inactdays);
+       printf (_("Warning:\t%ld\n"), warndays);
+       printf (_("Inactive:\t%ld\n"), inactdays);
 #endif
 
        /*
-        * 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.
+        * 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.
         */
 
-       printf(_("Last Change:\t\t"));
+       printf (_("Last Change:\t\t"));
        if (lastday <= 0) {
-               printf(_("Never\n"));
+               printf (_("Never\n"));
        } else {
                changed = lastday * SCALE;
-               print_date(changed);
+               print_date (changed);
        }
 
        /*
-        * The password expiration date is determined from the last
-        * change date plus the number of days the password is valid
-        * for.
+        * The password expiration date is determined from the last change
+        * date plus the number of days the password is valid for.
         */
 
-       printf(_("Password Expires:\t"));
-       if (lastday <= 0 || maxdays >= 10000*(DAY/SCALE) || maxdays <= 0) {
+       printf (_("Password Expires:\t"));
+       if (lastday <= 0 || maxdays >= 10000 * (DAY / SCALE)
+           || maxdays <= 0) {
                printf (_("Never\n"));
        } else {
                expires = changed + maxdays * SCALE;
-               print_date(expires);
+               print_date (expires);
        }
 
 #ifdef SHADOWPWD
        /*
-        * 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.
+        * 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.
         */
 
-       printf(_("Password Inactive:\t"));
+       printf (_("Password Inactive:\t"));
        if (lastday <= 0 || inactdays <= 0 ||
-                       maxdays >= 10000*(DAY/SCALE) || maxdays <= 0) {
+           maxdays >= 10000 * (DAY / SCALE) || maxdays <= 0) {
                printf (_("Never\n"));
        } else {
                expires = changed + (maxdays + inactdays) * SCALE;
-               print_date(expires);
+               print_date (expires);
        }
 
        /*
@@ -341,22 +301,22 @@ list_fields(void)
         * password expiring or not.
         */
 
-       printf(_("Account Expires:\t"));
+       printf (_("Account Expires:\t"));
        if (expdays <= 0) {
                printf (_("Never\n"));
        } else {
                expires = expdays * SCALE;
-               print_date(expires);
+               print_date (expires);
        }
 #endif
 }
 
 #ifdef USE_PAM
 static struct pam_conv conv = {
-    misc_conv,
-    NULL
+       misc_conv,
+       NULL
 };
-#endif /* USE_PAM */
+#endif                         /* USE_PAM */
 
 /*
  * chage - change a user's password aging information
@@ -375,87 +335,58 @@ static struct pam_conv conv = {
  *
  *     (*) requires root permission to execute.
  *
- *     All of the time fields are entered in the internal format
- *     which is either seconds or days.
+ *     All of the time fields are entered in the internal format which is
+ *     either seconds or days.
  *
- *     The options -W, -I and -E all depend on the SHADOWPWD
- *     macro being defined.
+ *     The options -W, -I and -E all depend on the SHADOWPWD macro being
+ *     defined.
  */
 
-int
-main(int argc, char **argv)
+int main (int argc, char **argv)
 {
-       int     flag;
-       int     lflg = 0;
-       int     mflg = 0;
-       int     Mflg = 0;
-       int     dflg = 0;
+       int flag;
+       int lflg = 0;
+       int mflg = 0;
+       int Mflg = 0;
+       int dflg = 0;
+
 #ifdef SHADOWPWD
-       int     Wflg = 0;
-       int     Iflg = 0;
-       int     Eflg = 0;
+       int Wflg = 0;
+       int Iflg = 0;
+       int Eflg = 0;
        const struct spwd *sp;
        struct spwd spwd;
 #else
-       char    new_age[5];
+       char new_age[5];
 #endif
        uid_t ruid;
+       int amroot, pwrw;
        const struct passwd *pw;
        struct passwd pwent;
-       char    name[BUFSIZ];
+       char name[BUFSIZ];
+
 #ifdef USE_PAM
        pam_handle_t *pamh = NULL;
        struct passwd *pampw;
        int retval;
 #endif
 
-       sanitize_env();
-       setlocale(LC_ALL, "");
-       bindtextdomain(PACKAGE, LOCALEDIR);
-       textdomain(PACKAGE);
+       sanitize_env ();
+       setlocale (LC_ALL, "");
+       bindtextdomain (PACKAGE, LOCALEDIR);
+       textdomain (PACKAGE);
 
-       ruid = getuid();
+       ruid = getuid ();
        amroot = (ruid == 0);
 
        /*
         * Get the program name so that error messages can use it.
         */
 
-       Prog = Basename(argv[0]);
+       Prog = Basename (argv[0]);
 
-#ifdef USE_PAM
-       retval = PAM_SUCCESS;
-
-       pampw = getpwuid(getuid());
-       if (pampw == NULL) {
-               retval = PAM_USER_UNKNOWN;
-       }
+       OPENLOG ("chage");
 
-       if (retval == PAM_SUCCESS) {
-               retval = pam_start("chage", pampw->pw_name, &conv, &pamh);
-       }
-
-       if (retval == PAM_SUCCESS) {
-               retval = pam_authenticate(pamh, 0);
-               if (retval != PAM_SUCCESS) {
-                       pam_end(pamh, retval);
-               }
-       }
-
-       if (retval == PAM_SUCCESS) {
-               retval = pam_acct_mgmt(pamh, 0);
-               if (retval != PAM_SUCCESS) {
-                       pam_end(pamh, retval);
-               }
-       }
-
-       if (retval != PAM_SUCCESS) {
-               fprintf (stderr, _("%s: PAM authentication failed\n"), Prog);
-               exit (1);
-       }
-#endif /* USE_PAM */
-
-       OPENLOG("chage");
 #ifdef NDBM
 #ifdef SHADOWPWD
        sp_dbm_mode = O_RDWR;
@@ -464,11 +395,11 @@ main(int argc, char **argv)
 #endif
 
        /*
-        * Parse the flags.  The difference between password file
-        * formats includes the number of fields, and whether the
-        * dates are entered as days or weeks.  Shadow password
-        * file info =must= be entered in days, while regular
-        * password file info =must= be entered in weeks.
+        * Parse the flags. The difference between password file formats
+        * includes the number of fields, and whether the dates are entered
+        * as days or weeks. Shadow password file info =must= be entered in
+        * days, while regular password file info =must= be entered in
+        * weeks.
         */
 
 #ifdef SHADOWPWD
@@ -476,52 +407,52 @@ main(int argc, char **argv)
 #else
 #define FLAGS "lm:M:d:"
 #endif
-       while ((flag = getopt(argc, argv, FLAGS)) != EOF) {
+       while ((flag = getopt (argc, argv, FLAGS)) != EOF) {
 #undef FLAGS
                switch (flag) {
-                       case 'l':
-                               lflg++;
-                               break;
-                       case 'm':
-                               mflg++;
-                               mindays = strtol (optarg, 0, 10);
-                               break;
-                       case 'M':
-                               Mflg++;
-                               maxdays = strtol (optarg, 0, 10);
-                               break;
-                       case 'd':
-                               dflg++;
-                               if (!isnum(optarg))
-                                       lastday = strtoday (optarg);
-                               else
-                                       lastday = strtol (optarg, 0, 10);
-                               break;
+               case 'l':
+                       lflg++;
+                       break;
+               case 'm':
+                       mflg++;
+                       mindays = strtol (optarg, 0, 10);
+                       break;
+               case 'M':
+                       Mflg++;
+                       maxdays = strtol (optarg, 0, 10);
+                       break;
+               case 'd':
+                       dflg++;
+                       if (!isnum (optarg))
+                               lastday = strtoday (optarg);
+                       else
+                               lastday = strtol (optarg, 0, 10);
+                       break;
 #ifdef SHADOWPWD
-                       case 'W':
-                               Wflg++;
-                               warndays = strtol (optarg, 0, 10);
-                               break;
-                       case 'I':
-                               Iflg++;
-                               inactdays = strtol (optarg, 0, 10);
-                               break;
-                       case 'E':
-                               Eflg++;
-                               if (!isnum(optarg))
-                                       expdays = strtoday (optarg);
-                               else
-                                       expdays = strtol (optarg, 0, 10);
-                               break;
+               case 'W':
+                       Wflg++;
+                       warndays = strtol (optarg, 0, 10);
+                       break;
+               case 'I':
+                       Iflg++;
+                       inactdays = strtol (optarg, 0, 10);
+                       break;
+               case 'E':
+                       Eflg++;
+                       if (!isnum (optarg))
+                               expdays = strtoday (optarg);
+                       else
+                               expdays = strtol (optarg, 0, 10);
+                       break;
 #endif
-                       default:
-                               usage ();
+               default:
+                       usage ();
                }
        }
 
        /*
-        * Make certain the flags do not conflict and that there is
-        * a user name on the command line.
+        * Make certain the flags do not conflict and that there is a user
+        * name on the command line.
         */
 
        if (argc != optind + 1)
@@ -533,200 +464,265 @@ main(int argc, char **argv)
        if (lflg && (mflg || Mflg || dflg))
 #endif
        {
-               fprintf (stderr, _("%s: do not include \"l\" with other flags\n"), Prog);
-               closelog();
+               fprintf (stderr,
+                        _("%s: do not include \"l\" with other flags\n"),
+                        Prog);
+               closelog ();
                usage ();
        }
 
        /*
-        * An unprivileged user can ask for their own aging information,
-        * but only root can change it, or list another user's aging
+        * 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);
-               closelog();
+               closelog ();
                exit (1);
        }
+#ifdef USE_PAM
+       retval = PAM_SUCCESS;
+
+       pampw = getpwuid (getuid ());
+       if (pampw == NULL) {
+               retval = PAM_USER_UNKNOWN;
+       }
+
+       if (retval == PAM_SUCCESS) {
+               retval = pam_start ("chage", pampw->pw_name, &conv, &pamh);
+       }
+
+       if (retval == PAM_SUCCESS) {
+               retval = pam_authenticate (pamh, 0);
+               if (retval != PAM_SUCCESS) {
+                       pam_end (pamh, retval);
+               }
+       }
+
+       if (retval == PAM_SUCCESS) {
+               retval = pam_acct_mgmt (pamh, 0);
+               if (retval != PAM_SUCCESS) {
+                       pam_end (pamh, retval);
+               }
+       }
+
+       if (retval != PAM_SUCCESS) {
+               fprintf (stderr, _("%s: PAM authentication failed\n"),
+                        Prog);
+               exit (1);
+       }
+
+       OPENLOG ("chage");
+#endif                         /* USE_PAM */
 
        /*
-        * 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.
+        * We use locks for read-write accesses only (locks implies amroot,
+        * but amroot doesn't imply locks).
         */
-       /* We don't lock the password file if we are not root */
-       if (amroot && !pw_lock()) {
-               fprintf(stderr, _("%s: can't lock password file\n"), Prog);
-               SYSLOG((LOG_ERR, LOCK_FAIL, PASSWD_FILE));
-               closelog();
-               exit(1);
-       }
-       if (!pw_open((!amroot || lflg) ? O_RDONLY:O_RDWR)) {
-               fprintf(stderr, _("%s: can't open password file\n"), Prog);
-               cleanup(1);
-               SYSLOG((LOG_ERR, OPEN_FAIL, PASSWD_FILE));
-               closelog();
-               exit(1);
-       }
-       if (!(pw = pw_locate(argv[optind]))) {
-               fprintf(stderr, _("%s: unknown user: %s\n"), Prog, argv[optind]);
-               cleanup(1);
-               closelog();
-               exit(1);
+       locks = !lflg;
+
+       /*
+        * 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.
+        */
+#ifndef SHADOWPWD
+       if (locks && !pw_lock ()) {
+               fprintf (stderr, _("%s: can't lock password file\n"),
+                        Prog);
+               SYSLOG ((LOG_ERR, "failed locking %s", PASSWD_FILE));
+               closelog ();
+               exit (1);
+       }
+       pwrw = locks;
+#else
+       pwrw = 0;
+#endif
+       if (!pw_open (pwrw ? O_RDWR : O_RDONLY)) {
+               fprintf (stderr, _("%s: can't open password file\n"),
+                        Prog);
+               cleanup (1);
+               SYSLOG ((LOG_ERR, "failed opening %s", PASSWD_FILE));
+               closelog ();
+               exit (1);
+       }
+       if (!(pw = pw_locate (argv[optind]))) {
+               fprintf (stderr, _("%s: unknown user: %s\n"), Prog,
+                        argv[optind]);
+               cleanup (1);
+               closelog ();
+               exit (1);
        }
 
        pwent = *pw;
-       STRFCPY(name, pwent.pw_name);
+       STRFCPY (name, pwent.pw_name);
 
 #ifdef SHADOWPWD
        /*
-        * 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.
+        * 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.
         */
-       /* We don't lock the shadow file if we are not root */
-       if (amroot && !spw_lock()) {
-               fprintf(stderr, _("%s: can't lock shadow password file\n"), Prog);
-               cleanup(1);
-               SYSLOG((LOG_ERR, LOCK_FAIL, SHADOW_FILE));
-               closelog();
-               exit(1);
+       if (locks && !spw_lock ()) {
+               fprintf (stderr,
+                        _("%s: can't lock shadow password file"), Prog);
+               cleanup (1);
+               SYSLOG ((LOG_ERR, "failed locking %s", SHADOW_FILE));
+               closelog ();
+               exit (1);
        }
-       if (!spw_open((!amroot || lflg) ? O_RDONLY : O_RDWR)) {
-               fprintf(stderr, _("%s: can't open shadow password file\n"), Prog);
-               cleanup(2);
-               SYSLOG((LOG_ERR, OPEN_FAIL, SHADOW_FILE));
-               closelog();
-               exit(1);
+       if (!spw_open (locks ? O_RDWR : O_RDONLY)) {
+               fprintf (stderr,
+                        _("%s: can't open shadow password file"), Prog);
+               cleanup (2);
+               SYSLOG ((LOG_ERR, "failed opening %s", SHADOW_FILE));
+               closelog ();
+               exit (1);
+       }
+
+       if (lflg && (setgid (getgid ()) || setuid (ruid))) {
+               fprintf (stderr, "%s: failed to drop privileges (%s)\n",
+                        Prog, strerror (errno));
+               exit (1);
        }
 
-       sp = spw_locate(argv[optind]);
+       sp = spw_locate (argv[optind]);
 
        /*
-        * Set the fields that aren't being set from the command line
-        * from the password file.
+        * Set the fields that aren't being set from the command line from
+        * the password file.
         */
 
        if (sp) {
                spwd = *sp;
 
-               if (! Mflg)
+               if (!Mflg)
                        maxdays = spwd.sp_max;
-               if (! mflg)
+               if (!mflg)
                        mindays = spwd.sp_min;
-               if (! dflg)
+               if (!dflg)
                        lastday = spwd.sp_lstchg;
-               if (! Wflg)
+               if (!Wflg)
                        warndays = spwd.sp_warn;
-               if (! Iflg)
+               if (!Iflg)
                        inactdays = spwd.sp_inact;
-               if (! Eflg)
+               if (!Eflg)
                        expdays = spwd.sp_expire;
        }
 #ifdef ATT_AGE
        else
-#endif /* ATT_AGE */
-#endif /* SHADOWPWD */
+#endif                         /* ATT_AGE */
+#endif                         /* SHADOWPWD */
 #ifdef ATT_AGE
        {
                if (pwent.pw_age && strlen (pwent.pw_age) >= 2) {
-                       if (! Mflg)
-                               maxdays = c64i (pwent.pw_age[0]) * (WEEK/SCALE);
-                       if (! mflg)
-                               mindays = c64i (pwent.pw_age[1]) * (WEEK/SCALE);
-                       if (! dflg && strlen (pwent.pw_age) == 4)
-                               lastday = a64l (pwent.pw_age+2) * (WEEK/SCALE);
+                       if (!Mflg)
+                               maxdays =
+                                   c64i (pwent.pw_age[0]) * (WEEK /
+                                                             SCALE);
+                       if (!mflg)
+                               mindays =
+                                   c64i (pwent.pw_age[1]) * (WEEK /
+                                                             SCALE);
+                       if (!dflg && strlen (pwent.pw_age) == 4)
+                               lastday =
+                                   a64l (pwent.pw_age +
+                                         2) * (WEEK / SCALE);
                } else {
                        mindays = 0;
-                       maxdays = 10000L * (DAY/SCALE);
+                       maxdays = 10000L * (DAY / SCALE);
                        lastday = -1;
                }
 #ifdef SHADOWPWD
                warndays = inactdays = expdays = -1;
-#endif /* SHADOWPWD */
+#endif                         /* SHADOWPWD */
        }
-#endif /* ATT_AGE */
+#endif                         /* ATT_AGE */
 
        /*
-        * Print out the expiration fields if the user has
-        * requested the list option.
+        * Print out the expiration fields if the user has requested the
+        * list option.
         */
 
        if (lflg) {
                if (!amroot && (ruid != pwent.pw_uid)) {
-                       fprintf(stderr, _("%s: permission denied\n"), Prog);
-                       closelog();
-                       exit(1);
+                       fprintf (stderr, _("%s: permission denied\n"),
+                                Prog);
+                       closelog ();
+                       exit (1);
                }
-               list_fields();
-               cleanup(2);
-               closelog();
-               exit(0);
+               list_fields ();
+               cleanup (2);
+               closelog ();
+               exit (0);
        }
 
        /*
-        * If none of the fields were changed from the command line,
-        * let the user interactively change them.
+        * If none of the fields were changed from the command line, let the
+        * user interactively change them.
         */
 
 #ifdef SHADOWPWD
-       if (! mflg && ! Mflg && ! dflg && ! Wflg && ! Iflg && ! Eflg)
+       if (!mflg && !Mflg && !dflg && !Wflg && !Iflg && !Eflg)
 #else
-       if (! mflg && ! Mflg && ! dflg)
+       if (!mflg && !Mflg && !dflg)
 #endif
        {
-               printf(_("Changing the aging information for %s\n"), name);
-               if (!new_fields()) {
-                       fprintf(stderr, _("%s: error changing fields\n"), Prog);
-                       cleanup(2);
-                       closelog();
-                       exit(1);
+               printf (_("Changing the aging information for %s\n"),
+                       name);
+               if (!new_fields ()) {
+                       fprintf (stderr, _("%s: error changing fields\n"),
+                                Prog);
+                       cleanup (2);
+                       closelog ();
+                       exit (1);
                }
        }
-
 #ifdef SHADOWPWD
        /*
-        * There was no shadow entry.  The new entry will have the
-        * encrypted password transferred from the normal password
-        * file along with the aging information.
+        * 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 (sp == 0) {
                sp = &spwd;
-               memzero(&spwd, sizeof spwd);
+               memzero (&spwd, sizeof spwd);
 
                spwd.sp_namp = xstrdup (pwent.pw_name);
                spwd.sp_pwdp = xstrdup (pwent.pw_passwd);
                spwd.sp_flag = -1;
 
-               pwent.pw_passwd = SHADOW_PASSWD_STRING;  /* XXX warning: const */
+               pwent.pw_passwd = SHADOW_PASSWD_STRING; /* XXX warning: const */
 #ifdef ATT_AGE
                pwent.pw_age = "";
 #endif
-               if (!pw_update(&pwent)) {
-                       fprintf(stderr, _("%s: can't update password file\n"), Prog);
-                       cleanup(2);
-                       SYSLOG((LOG_ERR, WRITE_FAIL, PASSWD_FILE));
-                       closelog();
-                       exit(1);
+               if (!pw_update (&pwent)) {
+                       fprintf (stderr,
+                                _("%s: can't update password file\n"),
+                                Prog);
+                       cleanup (2);
+                       SYSLOG ((LOG_ERR, "failed updating %s",
+                                PASSWD_FILE));
+                       closelog ();
+                       exit (1);
                }
 #ifdef NDBM
                (void) pw_dbm_update (&pwent);
                endpwent ();
 #endif
        }
-#endif /* SHADOWPWD */
+#endif                         /* SHADOWPWD */
 
 #ifdef SHADOWPWD
 
        /*
-        * 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.
+        * 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.
         */
 
        spwd.sp_max = maxdays;
@@ -736,14 +732,16 @@ main(int argc, char **argv)
        spwd.sp_inact = inactdays;
        spwd.sp_expire = expdays;
 
-       if (!spw_update(&spwd)) {
-               fprintf(stderr, _("%s: can't update shadow password file\n"), Prog);
-               cleanup(2);
-               SYSLOG((LOG_ERR, WRITE_FAIL, SHADOW_FILE));
-               closelog();
-               exit(1);
+       if (!spw_update (&spwd)) {
+               fprintf (stderr,
+                        _("%s: can't update shadow password file\n"),
+                        Prog);
+               cleanup (2);
+               SYSLOG ((LOG_ERR, "failed updating %s", SHADOW_FILE));
+               closelog ();
+               exit (1);
        }
-#else  /* !SHADOWPWD */
+#else                          /* !SHADOWPWD */
 
        /*
         * fill in the new_age string with the new values
@@ -769,14 +767,15 @@ main(int argc, char **argv)
        }
        pwent.pw_age = new_age;
 
-       if (!pw_update(&pwent)) {
-               fprintf(stderr, _("%s: can't update password file\n"), Prog);
-               cleanup(2);
-               SYSLOG((LOG_ERR, WRITE_FAIL, PASSWD_FILE));
-               closelog();
-               exit(1);
+       if (!pw_update (&pwent)) {
+               fprintf (stderr, _("%s: can't update password file\n"),
+                        Prog);
+               cleanup (2);
+               SYSLOG ((LOG_ERR, "failed updating %s", PASSWD_FILE));
+               closelog ();
+               exit (1);
        }
-#endif /* SHADOWPWD */
+#endif                         /* SHADOWPWD */
 
 #ifdef NDBM
 #ifdef SHADOWPWD
@@ -785,126 +784,108 @@ main(int argc, char **argv)
         * See if the shadow DBM file exists and try to update it.
         */
 
-       if (sp_dbm_present() && !sp_dbm_update(&spwd)) {
-               fprintf(stderr, _("Error updating the DBM password entry.\n"));
-               cleanup(2);
-               SYSLOG((LOG_ERR, DBMERROR2));
-               closelog();
-               exit(1);
+       if (sp_dbm_present () && !sp_dbm_update (&spwd)) {
+               fprintf (stderr,
+                        _("Error updating the DBM password entry.\n"));
+               cleanup (2);
+               SYSLOG ((LOG_ERR, "error updating DBM passwd entry"));
+               closelog ();
+               exit (1);
        }
-       endspent();
+       endspent ();
 
-#else  /* !SHADOWPWD */
+#else                          /* !SHADOWPWD */
 
        /*
         * See if the password DBM file exists and try to update it.
         */
 
-       if (pw_dbm_present() && !pw_dbm_update(&pwent)) {
-               fprintf(stderr, _("Error updating the DBM password entry.\n"));
-               cleanup(2);
-               SYSLOG((LOG_ERR, DBMERROR2));
-               closelog();
-               exit(1);
+       if (pw_dbm_present () && !pw_dbm_update (&pwent)) {
+               fprintf (stderr,
+                        _("Error updating the DBM password entry.\n"));
+               cleanup (2);
+               SYSLOG ((LOG_ERR, "error updating DBM passwd entry"));
+               closelog ();
+               exit (1);
        }
        endpwent ();
-#endif /* SHADOWPWD */
-#endif /* NDBM */
+#endif                         /* SHADOWPWD */
+#endif                         /* NDBM */
 
 #ifdef SHADOWPWD
        /*
-        * Now close the shadow password file, which will cause all
-        * of the entries to be re-written.
+        * Now close the shadow password file, which will cause all of the
+        * entries to be re-written.
         */
 
-       if (!spw_close()) {
-               fprintf(stderr, _("%s: can't rewrite shadow password file\n"), Prog);
-               cleanup(2);
-               SYSLOG((LOG_ERR, CLOSE_FAIL, SHADOW_FILE));
-               closelog();
-               exit(1);
+       if (!spw_close ()) {
+               fprintf (stderr,
+                        _("%s: can't rewrite shadow password file\n"),
+                        Prog);
+               cleanup (2);
+               SYSLOG ((LOG_ERR, "failed rewriting %s", SHADOW_FILE));
+               closelog ();
+               exit (1);
        }
-#endif /* SHADOWPWD */
+#endif                         /* SHADOWPWD */
 
        /*
-        * Close the password file.  If any entries were modified, the
-        * file will be re-written.
+        * Close the password file. If any entries were modified, the file
+        * will be re-written.
         */
 
-       if (!pw_close()) {
-               fprintf(stderr, _("%s: can't rewrite password file\n"), Prog);
-               cleanup(2);
-               SYSLOG((LOG_ERR, CLOSE_FAIL, PASSWD_FILE));
-               closelog();
-               exit(1);
+       if (!pw_close ()) {
+               fprintf (stderr, _("%s: can't rewrite password file\n"),
+                        Prog);
+               cleanup (2);
+               SYSLOG ((LOG_ERR, "failed rewriting %s", PASSWD_FILE));
+               closelog ();
+               exit (1);
        }
-       cleanup(2);
-       SYSLOG((LOG_INFO, AGE_CHANGED, name));
+       cleanup (2);
+       SYSLOG ((LOG_INFO, "changed password expiry for %s", name));
 #ifdef USE_PAM
        if (!lflg) {
                if (retval == PAM_SUCCESS) {
-                       retval = pam_chauthtok(pamh, 0);
+                       retval = pam_chauthtok (pamh, 0);
                        if (retval != PAM_SUCCESS) {
-                               pam_end(pamh, retval);
+                               pam_end (pamh, retval);
                        }
                }
 
                if (retval != PAM_SUCCESS) {
-                       fprintf (stderr, _("%s: PAM chauthtok failed\n"), Prog);
+                       fprintf (stderr, _("%s: PAM chauthtok failed\n"),
+                                Prog);
                        exit (1);
                }
        }
 
        if (retval == PAM_SUCCESS)
-               pam_end(pamh, PAM_SUCCESS);
-#endif /* USE_PAM */
+               pam_end (pamh, PAM_SUCCESS);
+#endif                         /* USE_PAM */
 
-       closelog();
-       exit(0);
-       /*NOTREACHED*/
-}
+       closelog ();
+       exit (0);
+ /*NOTREACHED*/}
 
 /*
  * cleanup - unlock any locked password files
  */
 
-static void
-cleanup(int state)
+static void cleanup (int state)
 {
        switch (state) {
        case 2:
 #ifdef SHADOWPWD
-               if (amroot)
-                       spw_unlock();
+               if (locks)
+                       spw_unlock ();
 #endif
        case 1:
-               if (amroot)
-                       pw_unlock();
+#ifndef SHADOWPWD
+               if (locks)
+                       pw_unlock ();
+#endif
        case 0:
                break;
        }
 }
-
-#else  /*} !AGING {*/
-
-/*
- * chage - but there is no age info!
- */
-
-int
-main(int argc, char **argv)
-{
-       char    *Prog;
-
-       Prog = Basename(argv[0]);
-
-       setlocale(LC_ALL, "");
-       bindtextdomain(PACKAGE, LOCALEDIR);
-       textdomain(PACKAGE);
-
-       fprintf (stderr, _("%s: no aging information present\n"), Prog);
-       exit(1);
-}
-
-#endif /*} AGING */
-
index 413ff33f2d74dc524ee9efaaf959cc3ef30dd726..ae57e09ddc26087705f07028b231f752b760abe3 100644 (file)
@@ -17,7 +17,7 @@
  * 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
+ * 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)
 #include <config.h>
 
 #include "rcsid.h"
-RCSID(PKG_VER "$Id: chfn.c,v 1.17 2000/09/02 18:40:43 marekm Exp $")
-
+RCSID (PKG_VER "$Id: chfn.c,v 1.20 2002/01/05 15:41:43 kloczek Exp $")
 #include <sys/types.h>
 #include <stdio.h>
 #include <fcntl.h>
 #include <signal.h>
 #include "prototypes.h"
 #include "defines.h"
-
 #include <pwd.h>
 #include "pwio.h"
 #include "getdef.h"
 #include "pwauth.h"
-
 #ifdef HAVE_SHADOW_H
 #include <shadow.h>
 #endif
-
 #ifdef USE_PAM
 #include "pam_defs.h"
 #endif
-
 /*
  * Global variables.
  */
-
 static char *Prog;
 static char fullnm[BUFSIZ];
 static char roomno[BUFSIZ];
@@ -68,84 +62,66 @@ static int amroot;
  * External identifiers
  */
 
-extern int     optind;
-extern char    *optarg;
 #ifdef NDBM
-extern int     pw_dbm_mode;
+extern int pw_dbm_mode;
 #endif
 
-/*
- * #defines for messages.  This facilitates foreign language conversion
- * since all messages are defined right here.
- */
-
-#define WRONGPWD2      "incorrect password for `%s'"
-#define        PWDBUSY2        "can't lock /etc/passwd\n"
-#define        OPNERROR2       "can't open /etc/passwd\n"
-#define        UPDERROR2       "error updating passwd entry\n"
-#define        DBMERROR2       "error updating DBM passwd entry.\n"
-#define        NOTROOT2        "can't setuid(0).\n"
-#define        CLSERROR2       "can't rewrite /etc/passwd.\n"
-#define        UNLKERROR2      "can't unlock /etc/passwd.\n"
-#define        CHGGECOS        "changed user `%s' information.\n"
-
 /* local function prototypes */
-static void usage(void);
-static int may_change_field(int);
-static void new_fields(void);
-static char *copy_field(char *, char *, char *);
+static void usage (void);
+static int may_change_field (int);
+static void new_fields (void);
+static char *copy_field (char *, char *, char *);
 
 /*
  * usage - print command line syntax and exit
  */
 
-static void
-usage(void)
+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);
+               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(1);
+               fprintf (stderr,
+                        _("Usage: %s [-f full_name] [-r room_no] "
+                          "[-w work_ph] [-h home_ph]\n"), Prog);
+       exit (1);
 }
 
 
-static int
-may_change_field(int field)
+static int 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:
+        * 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.
+        * 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
+        * "no" is equivalent to "frwh". Only root can change anything
         * if the string is empty or not defined at all.
         */
        if (amroot)
                return 1;
-       cp = getdef_str("CHFN_RESTRICT");
+       cp = getdef_str ("CHFN_RESTRICT");
        if (!cp)
                cp = "";
-       else if (strcmp(cp, "yes") == 0)
+       else if (strcmp (cp, "yes") == 0)
                cp = "rwh";
-       else if (strcmp(cp, "no") == 0)
+       else if (strcmp (cp, "no") == 0)
                cp = "frwh";
-       if (strchr(cp, field))
+       if (strchr (cp, field))
                return 1;
        return 0;
 }
@@ -153,53 +129,51 @@ may_change_field(int field)
 /*
  * 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.
+ * 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)
+static void new_fields (void)
 {
-       printf(_("Enter the new value, or press return for the default\n"));
+       printf (_
+               ("Enter the new value, or press ENTER for the default\n"));
 
-       if (may_change_field('f'))
-               change_field(fullnm, sizeof fullnm, _("Full Name"));
+       if (may_change_field ('f'))
+               change_field (fullnm, sizeof fullnm, _("Full Name"));
        else
-               printf(_("\tFull Name: %s\n"), fullnm);
+               printf (_("\tFull Name: %s\n"), fullnm);
 
-       if (may_change_field('r'))
-               change_field(roomno, sizeof roomno, _("Room Number"));
+       if (may_change_field ('r'))
+               change_field (roomno, sizeof roomno, _("Room Number"));
        else
-               printf(_("\tRoom Number: %s\n"), roomno);
+               printf (_("\tRoom Number: %s\n"), roomno);
 
-       if (may_change_field('w'))
-               change_field(workph, sizeof workph, _("Work Phone"));
+       if (may_change_field ('w'))
+               change_field (workph, sizeof workph, _("Work Phone"));
        else
-               printf(_("\tWork Phone: %s\n"), workph);
+               printf (_("\tWork Phone: %s\n"), workph);
 
-       if (may_change_field('h'))
-               change_field(homeph, sizeof homeph, _("Home Phone"));
+       if (may_change_field ('h'))
+               change_field (homeph, sizeof homeph, _("Home Phone"));
        else
-               printf(_("\tHome Phone: %s\n"), homeph);
+               printf (_("\tHome Phone: %s\n"), homeph);
 
        if (amroot)
-               change_field(slop, sizeof slop, _("Other"));
+               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.
+ * 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)
+static char *copy_field (char *in, char *out, char *extra)
 {
        char *cp = NULL;
 
@@ -207,7 +181,7 @@ copy_field(char *in, char *out, char *extra)
                if ((cp = strchr (in, ',')))
                        *cp++ = '\0';
 
-               if (! strchr (in, '='))
+               if (!strchr (in, '='))
                        break;
 
                if (extra) {
@@ -228,8 +202,8 @@ copy_field(char *in, char *out, char *extra)
 /*
  * chfn - change a user's password file information
  *
- *     This command controls the GECOS field information in the
- *     password file entry.
+ *     This command controls the GECOS field information in the password
+ *     file entry.
  *
  *     The valid options are
  *
@@ -242,26 +216,25 @@ copy_field(char *in, char *out, char *extra)
  *     (*) requires root permission to execute.
  */
 
-int
-main(int argc, char **argv)
+int main (int argc, char **argv)
 {
-       char    *cp;                    /* temporary character pointer       */
+       char *cp;               /* temporary character pointer       */
        const struct passwd *pw;        /* password file entry               */
-       struct  passwd  pwent;          /* modified password file entry      */
-       char    old_gecos[BUFSIZ];      /* buffer for old GECOS fields       */
-       char    new_gecos[BUFSIZ];      /* buffer for new GECOS fields       */
-       int     flag;                   /* flag currently being processed    */
-       int     fflg = 0;               /* -f - set full name                */
-       int     rflg = 0;               /* -r - set room number              */
-       int     wflg = 0;               /* -w - set work phone number        */
-       int     hflg = 0;               /* -h - set home phone number        */
-       int     oflg = 0;               /* -o - set other information        */
+       struct passwd pwent;    /* modified password file entry      */
+       char old_gecos[BUFSIZ]; /* buffer for old GECOS fields       */
+       char new_gecos[BUFSIZ]; /* buffer for new GECOS fields       */
+       int flag;               /* flag currently being processed    */
+       int fflg = 0;           /* -f - set full name                */
+       int rflg = 0;           /* -r - set room number              */
+       int wflg = 0;           /* -w - set work phone number        */
+       int hflg = 0;           /* -h - set home phone number        */
+       int oflg = 0;           /* -o - set other information        */
        char *user;
 
-       sanitize_env();
-       setlocale(LC_ALL, "");
-       bindtextdomain(PACKAGE, LOCALEDIR);
-       textdomain(PACKAGE);
+       sanitize_env ();
+       setlocale (LC_ALL, "");
+       bindtextdomain (PACKAGE, LOCALEDIR);
+       textdomain (PACKAGE);
 
        /*
         * This command behaves different for root and non-root
@@ -274,164 +247,179 @@ main(int argc, char **argv)
 #endif
 
        /*
-        * Get the program name.  The program name is used as a
+        * Get the program name. The program name is used as a
         * prefix to most error messages.
         */
 
-       Prog = Basename(argv[0]);
+       Prog = Basename (argv[0]);
 
-       OPENLOG("chfn");
+       OPENLOG ("chfn");
 
        /* 
-        * 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.
+        * 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(1);
-                               }
-                               fflg++;
-                               STRFCPY(fullnm, optarg);
-                               break;
-                       case 'r':
-                               if (!may_change_field('r')) {
-                                       fprintf(stderr, _("%s: Permission denied.\n"), Prog);
-                                       exit(1);
-                               }
-                               rflg++;
-                               STRFCPY(roomno, optarg);
-                               break;
-                       case 'w':
-                               if (!may_change_field('w')) {
-                                       fprintf(stderr, _("%s: Permission denied.\n"), Prog);
-                                       exit(1);
-                               }
-                               wflg++;
-                               STRFCPY(workph, optarg);
-                               break;
-                       case 'h':
-                               if (!may_change_field('h')) {
-                                       fprintf(stderr, _("%s: Permission denied.\n"), Prog);
-                                       exit(1);
-                               }
-                               hflg++;
-                               STRFCPY(homeph, optarg);
-                               break;
-                       case 'o':
-                               if (!amroot) {
-                                       fprintf(stderr, _("%s: Permission denied.\n"), Prog);
-                                       exit(1);
-                               }
-                               oflg++;
-                               STRFCPY(slop, optarg);
-                               break;
-                       default:
-                               usage();
+               case 'f':
+                       if (!may_change_field ('f')) {
+                               fprintf (stderr,
+                                        _("%s: Permission denied.\n"),
+                                        Prog);
+                               exit (1);
+                       }
+                       fflg++;
+                       STRFCPY (fullnm, optarg);
+                       break;
+               case 'r':
+                       if (!may_change_field ('r')) {
+                               fprintf (stderr,
+                                        _("%s: Permission denied.\n"),
+                                        Prog);
+                               exit (1);
+                       }
+                       rflg++;
+                       STRFCPY (roomno, optarg);
+                       break;
+               case 'w':
+                       if (!may_change_field ('w')) {
+                               fprintf (stderr,
+                                        _("%s: Permission denied.\n"),
+                                        Prog);
+                               exit (1);
+                       }
+                       wflg++;
+                       STRFCPY (workph, optarg);
+                       break;
+               case 'h':
+                       if (!may_change_field ('h')) {
+                               fprintf (stderr,
+                                        _("%s: Permission denied.\n"),
+                                        Prog);
+                               exit (1);
+                       }
+                       hflg++;
+                       STRFCPY (homeph, optarg);
+                       break;
+               case 'o':
+                       if (!amroot) {
+                               fprintf (stderr,
+                                        _("%s: Permission denied.\n"),
+                                        Prog);
+                               exit (1);
+                       }
+                       oflg++;
+                       STRFCPY (slop, optarg);
+                       break;
+               default:
+                       usage ();
                }
        }
 
        /*
-        * Get the name of the user to check.  It is either
-        * the command line name, or the name getlogin()
-        * returns.
+        * 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 = getpwnam(user);
+               pw = getpwnam (user);
                if (!pw) {
-                       fprintf(stderr, _("%s: Unknown user %s\n"), Prog, user);
-                       exit(1);
+                       fprintf (stderr, _("%s: Unknown user %s\n"), Prog,
+                                user);
+                       exit (1);
                }
        } else {
-               pw = get_my_pwent();
+               pw = get_my_pwent ();
                if (!pw) {
-                       fprintf(stderr, _("%s: Cannot determine your user name.\n"), Prog);
-                       exit(1);
+                       fprintf (stderr,
+                                _
+                                ("%s: Cannot determine your user name.\n"),
+                                Prog);
+                       exit (1);
                }
-               user = xstrdup(pw->pw_name);
+               user = xstrdup (pw->pw_name);
        }
 
 #ifdef USE_NIS
        /*
-        * Now we make sure this is a LOCAL password entry for
-        * this user ...
+        * Now we make sure this is a LOCAL password entry for this user ...
         */
 
        if (__ispwNIS ()) {
-               char    *nis_domain;
-               char    *nis_master;
+               char *nis_domain;
+               char *nis_master;
 
-               fprintf (stderr, _("%s: cannot change user `%s' on NIS client.\n"), Prog, user);
+               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",
+               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);
+                       fprintf (stderr,
+                                _
+                                ("%s: `%s' is the NIS master for this client.\n"),
+                                Prog, nis_master);
                }
                exit (1);
        }
 #endif
 
        /*
-        * Non-privileged users are only allowed to change the
-        * gecos field if the UID of the user matches the current
-        * real UID.
+        * 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()) {
+       if (!amroot && pw->pw_uid != getuid ()) {
                fprintf (stderr, _("%s: Permission denied.\n"), Prog);
-               closelog();
-               exit(1);
+               closelog ();
+               exit (1);
        }
 
        /*
-        * 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
+        * 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");
-       
+       if (!amroot && getdef_bool ("CHFN_AUTH"))
+               passwd_check (pw->pw_name, pw->pw_passwd, "chfn");
+
        /*
-        * Now get the full name.  It is the first comma separated field
-        * in the GECOS field.
+        * Now get the full name. It is the first comma separated field in
+        * the GECOS field.
         */
 
-       STRFCPY(old_gecos, pw->pw_gecos);
-       cp = copy_field (old_gecos, fflg ? (char *) 0:fullnm, slop);
+       STRFCPY (old_gecos, pw->pw_gecos);
+       cp = copy_field (old_gecos, fflg ? (char *) 0 : fullnm, slop);
 
        /*
-        * Now get the room number.  It is the next comma separated field,
+        * Now get the room number. It is the next comma separated field,
         * if there is indeed one.
         */
 
        if (cp)
-               cp = copy_field (cp, rflg ? (char *) 0:roomno, slop);
+               cp = copy_field (cp, rflg ? (char *) 0 : roomno, slop);
 
        /*
-        * Now get the work phone number.  It is the third field.
+        * Now get the work phone number. It is the third field.
         */
 
        if (cp)
-               cp = copy_field (cp, wflg ? (char *) 0:workph, slop);
+               cp = copy_field (cp, wflg ? (char *) 0 : workph, slop);
 
        /*
-        * Now get the home phone number.  It is the fourth field.
+        * Now get the home phone number. It is the fourth field.
         */
 
        if (cp)
-               cp = copy_field (cp, hflg ? (char *) 0:homeph, slop);
+               cp = copy_field (cp, hflg ? (char *) 0 : homeph, slop);
 
        /*
         * Anything left over is "slop".
@@ -445,43 +433,49 @@ main(int argc, char **argv)
        }
 
        /*
-        * If none of the fields were changed from the command line,
-        * let the user interactively change them.
+        * 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();
+               printf (_("Changing the user information for %s\n"), user);
+               new_fields ();
        }
 
        /*
         * Check all of the fields for valid information
         */
 
-       if (valid_field(fullnm, ":,=")) {
-               fprintf(stderr, _("%s: invalid name: \"%s\"\n"), Prog, fullnm);
-               closelog();
-               exit(1);
+       if (valid_field (fullnm, ":,=")) {
+               fprintf (stderr, _("%s: invalid name: \"%s\"\n"), Prog,
+                        fullnm);
+               closelog ();
+               exit (1);
        }
-       if (valid_field(roomno, ":,=")) {
-               fprintf(stderr, _("%s: invalid room number: \"%s\"\n"), Prog, roomno);
-               closelog();
-               exit(1);
+       if (valid_field (roomno, ":,=")) {
+               fprintf (stderr, _("%s: invalid room number: \"%s\"\n"),
+                        Prog, roomno);
+               closelog ();
+               exit (1);
        }
-       if (valid_field(workph, ":,=")) {
-               fprintf(stderr, _("%s: invalid work phone: \"%s\"\n"), Prog, workph);
-               closelog();
-               exit(1);
+       if (valid_field (workph, ":,=")) {
+               fprintf (stderr, _("%s: invalid work phone: \"%s\"\n"),
+                        Prog, workph);
+               closelog ();
+               exit (1);
        }
        if (valid_field (homeph, ":,=")) {
-               fprintf(stderr, _("%s: invalid home phone: \"%s\"\n"), Prog, homeph);
-               closelog();
-               exit(1);
+               fprintf (stderr, _("%s: invalid home phone: \"%s\"\n"),
+                        Prog, homeph);
+               closelog ();
+               exit (1);
        }
-       if (valid_field(slop, ":")) {
-               fprintf(stderr, _("%s: \"%s\" contains illegal characters\n"), Prog, slop);
-               closelog();
-               exit(1);
+       if (valid_field (slop, ":")) {
+               fprintf (stderr,
+                        _("%s: \"%s\" contains illegal characters\n"),
+                        Prog, slop);
+               closelog ();
+               exit (1);
        }
 
        /*
@@ -489,112 +483,118 @@ main(int argc, char **argv)
         * 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);
-               closelog();
-               exit(1);
+       if (strlen (fullnm) + strlen (roomno) + strlen (workph) +
+           strlen (homeph) + strlen (slop) > (unsigned int) 80) {
+               fprintf (stderr, _("%s: fields too long\n"), Prog);
+               closelog ();
+               exit (1);
        }
-       snprintf(new_gecos, sizeof new_gecos, "%s,%s,%s,%s%s%s",
-                fullnm, roomno, workph, homeph, slop[0] ? "," : "", slop);
+       snprintf (new_gecos, sizeof new_gecos, "%s,%s,%s,%s%s%s",
+                 fullnm, roomno, workph, homeph, slop[0] ? "," : "",
+                 slop);
 
        /*
-        * 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.
+        * 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)) {
-               fprintf(stderr, _("Cannot change ID to root.\n"));
-               SYSLOG((LOG_ERR, NOTROOT2));
-               closelog();
-               exit(1);
+       if (setuid (0)) {
+               fprintf (stderr, _("Cannot change ID to root.\n"));
+               SYSLOG ((LOG_ERR, "can't setuid(0)"));
+               closelog ();
+               exit (1);
        }
-       pwd_init();
+       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.
+        * 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()) {
-               fprintf(stderr, _("Cannot lock the password file; try again later.\n"));
-               SYSLOG((LOG_WARN, PWDBUSY2));
-               closelog();
-               exit(1);
+       if (!pw_lock ()) {
+               fprintf (stderr,
+                        _
+                        ("Cannot lock the password file; try again later.\n"));
+               SYSLOG ((LOG_WARN, "can't lock /etc/passwd"));
+               closelog ();
+               exit (1);
        }
-       if (!pw_open(O_RDWR)) {
-               fprintf(stderr, _("Cannot open the password file.\n"));
-               pw_unlock();
-               SYSLOG((LOG_ERR, OPNERROR2));
-               closelog();
-               exit(1);
+       if (!pw_open (O_RDWR)) {
+               fprintf (stderr, _("Cannot open the password file.\n"));
+               pw_unlock ();
+               SYSLOG ((LOG_ERR, "can't open /etc/passwd"));
+               closelog ();
+               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
+        * 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);
+       pw = pw_locate (user);
        if (!pw) {
-               pw_unlock();
-               fprintf(stderr,
-                       _("%s: %s not found in /etc/passwd\n"), Prog, user);
-               exit(1);
+               pw_unlock ();
+               fprintf (stderr,
+                        _("%s: %s not found in /etc/passwd\n"), Prog,
+                        user);
+               exit (1);
        }
 
        /*
-        * Make a copy of the entry, then change the gecos field.  The other
+        * Make a copy of the entry, then change the gecos field. The other
         * fields remain unchanged.
         */
        pwent = *pw;
        pwent.pw_gecos = new_gecos;
 
        /*
-        * Update the passwd file entry.  If there is a DBM file,
-        * update that entry as well.
+        * Update the passwd file entry. If there is a DBM file, update that
+        * entry as well.
         */
 
-       if (!pw_update(&pwent)) {
-               fprintf(stderr, _("Error updating the password entry.\n"));
-               pw_unlock();
-               SYSLOG((LOG_ERR, UPDERROR2));
-               closelog();
-               exit(1);
+       if (!pw_update (&pwent)) {
+               fprintf (stderr,
+                        _("Error updating the password entry.\n"));
+               pw_unlock ();
+               SYSLOG ((LOG_ERR, "error updating passwd entry"));
+               closelog ();
+               exit (1);
        }
 #ifdef NDBM
-       if (pw_dbm_present() && !pw_dbm_update(&pwent)) {
-               fprintf(stderr, _("Error updating the DBM password entry.\n"));
+       if (pw_dbm_present () && !pw_dbm_update (&pwent)) {
+               fprintf (stderr,
+                        _("Error updating the DBM password entry.\n"));
                pw_unlock ();
-               SYSLOG((LOG_ERR, DBMERROR2));
-               closelog();
-               exit(1);
+               SYSLOG ((LOG_ERR, "error updating DBM passwd entry"));
+               closelog ();
+               exit (1);
        }
-       endpwent();
+       endpwent ();
 #endif
 
        /*
-        * Changes have all been made, so commit them and unlock the
-        * file.
+        * Changes have all been made, so commit them and unlock the file.
         */
 
-       if (!pw_close()) {
-               fprintf(stderr, _("Cannot commit password file changes.\n"));
-               pw_unlock();
-               SYSLOG((LOG_ERR, CLSERROR2));
-               closelog();
-               exit(1);
+       if (!pw_close ()) {
+               fprintf (stderr,
+                        _("Cannot commit password file changes.\n"));
+               pw_unlock ();
+               SYSLOG ((LOG_ERR, "can't rewrite /etc/passwd"));
+               closelog ();
+               exit (1);
        }
-       if (!pw_unlock()) {
-               fprintf(stderr, _("Cannot unlock the password file.\n"));
-               SYSLOG((LOG_ERR, UNLKERROR2));
-               closelog();
-               exit(1);
+       if (!pw_unlock ()) {
+               fprintf (stderr, _("Cannot unlock the password file.\n"));
+               SYSLOG ((LOG_ERR, "can't unlock /etc/passwd"));
+               closelog ();
+               exit (1);
        }
-       SYSLOG((LOG_INFO, CHGGECOS, user));
-       closelog();
+       SYSLOG ((LOG_INFO, "changed user `%s' information", user));
+       closelog ();
        exit (0);
 }
index a423fd491b1acfaa19a2216dbf443234ba51690f..0f9400b0c34c85d6f6e55ec3fb12bc87c269a2cb 100644 (file)
@@ -17,7 +17,7 @@
  * 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
+ * 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)
@@ -30,8 +30,7 @@
 #include <config.h>
 
 #include "rcsid.h"
-RCSID(PKG_VER "$Id: chpasswd.c,v 1.13 2001/01/25 10:36:07 kloczek Exp $")
-
+RCSID (PKG_VER "$Id: chpasswd.c,v 1.14 2002/01/05 15:41:43 kloczek Exp $")
 #include <stdio.h>
 #include "prototypes.h"
 #include "defines.h"
@@ -41,151 +40,156 @@ RCSID(PKG_VER "$Id: chpasswd.c,v 1.13 2001/01/25 10:36:07 kloczek Exp $")
 #ifdef SHADOWPWD
 #include "shadowio.h"
 #endif
-
 #ifdef USE_PAM
 #include <security/pam_appl.h>
 #include <security/pam_misc.h>
 #include <pwd.h>
-#endif /* USE_PAM */
-
+#endif                         /* USE_PAM */
 static char *Prog;
 static int eflg = 0;
+
 #ifdef SHADOWPWD
 static int is_shadow_pwd;
 #endif
 
-extern char    *l64a();
+extern char *l64a ();
 
 /* local function prototypes */
-static void usage(void);
+static void usage (void);
 
 /*
  * usage - display usage message and exit
  */
 
-static void
-usage(void)
+static void usage (void)
 {
-       fprintf(stderr, _("usage: %s [-e]\n"), Prog);
-       exit(1);
+       fprintf (stderr, _("usage: %s [-e]\n"), Prog);
+       exit (1);
 }
 
 #ifdef USE_PAM
 static struct pam_conv conv = {
-    misc_conv,
-    NULL
+       misc_conv,
+       NULL
 };
-#endif /* USE_PAM */
+#endif                         /* USE_PAM */
 
-int
-main(int argc, char **argv)
+int main (int argc, char **argv)
 {
-       char    buf[BUFSIZ];
-       char    *name;
-       char    *newpwd;
-       char    *cp;
+       char buf[BUFSIZ];
+       char *name;
+       char *newpwd;
+       char *cp;
+
 #ifdef SHADOWPWD
        const struct spwd *sp;
-       struct  spwd    newsp;
+       struct spwd newsp;
 #endif
        const struct passwd *pw;
-       struct  passwd  newpw;
+       struct passwd newpw;
+
 #ifdef ATT_AGE
-       char    newage[5];
+       char newage[5];
 #endif
-       int     errors = 0;
-       int     line = 0;
-       long    now = time ((long *) 0) / (24L*3600L);
+       int errors = 0;
+       int line = 0;
+       long now = time ((long *) 0) / (24L * 3600L);
        int ok;
+
 #ifdef USE_PAM
        pam_handle_t *pamh = NULL;
        struct passwd *pampw;
        int retval;
 #endif
 
-       Prog = Basename(argv[0]);
+       Prog = Basename (argv[0]);
 
-       setlocale(LC_ALL, "");
-       bindtextdomain(PACKAGE, LOCALEDIR);
-       textdomain(PACKAGE);
+       setlocale (LC_ALL, "");
+       bindtextdomain (PACKAGE, LOCALEDIR);
+       textdomain (PACKAGE);
 
 #ifdef USE_PAM
        retval = PAM_SUCCESS;
 
-       pampw = getpwuid(getuid());
+       pampw = getpwuid (getuid ());
        if (pampw == NULL) {
                retval = PAM_USER_UNKNOWN;
        }
 
        if (retval == PAM_SUCCESS) {
-               retval = pam_start("shadow", pampw->pw_name, &conv, &pamh);
+               retval =
+                   pam_start ("shadow", pampw->pw_name, &conv, &pamh);
        }
 
        if (retval == PAM_SUCCESS) {
-               retval = pam_authenticate(pamh, 0);
+               retval = pam_authenticate (pamh, 0);
                if (retval != PAM_SUCCESS) {
-                       pam_end(pamh, retval);
+                       pam_end (pamh, retval);
                }
        }
 
        if (retval == PAM_SUCCESS) {
-               retval = pam_acct_mgmt(pamh, 0);
+               retval = pam_acct_mgmt (pamh, 0);
                if (retval != PAM_SUCCESS) {
-                       pam_end(pamh, retval);
+                       pam_end (pamh, retval);
                }
        }
 
        if (retval != PAM_SUCCESS) {
-               fprintf (stderr, _("%s: PAM authentication failed\n"), Prog);
+               fprintf (stderr, _("%s: PAM authentication failed\n"),
+                        Prog);
                exit (1);
        }
-#endif /* USE_PAM */
+#endif                         /* USE_PAM */
 
        /* XXX - use getopt() */
-       if (!(argc == 1 || (argc == 2 && !strcmp(argv[1], "-e"))))
-               usage();
+       if (!(argc == 1 || (argc == 2 && !strcmp (argv[1], "-e"))))
+               usage ();
        if (argc == 2)
                eflg = 1;
 
        /*
-        * Lock the password file and open it for reading.  This will
-        * bring all of the entries into memory where they may be
-        * updated.
+        * Lock the password file and open it for reading. This will bring
+        * all of the entries into memory where they may be updated.
         */
 
-       if (!pw_lock()) {
-               fprintf(stderr, _("%s: can't lock password file\n"), Prog);
-               exit(1);
+       if (!pw_lock ()) {
+               fprintf (stderr, _("%s: can't lock password file\n"),
+                        Prog);
+               exit (1);
        }
-       if (! pw_open (O_RDWR)) {
-               fprintf(stderr, _("%s: can't open password file\n"), Prog);
-               pw_unlock();
-               exit(1);
+       if (!pw_open (O_RDWR)) {
+               fprintf (stderr, _("%s: can't open password file\n"),
+                        Prog);
+               pw_unlock ();
+               exit (1);
        }
 #ifdef SHADOWPWD
-       is_shadow_pwd = spw_file_present();
+       is_shadow_pwd = spw_file_present ();
        if (is_shadow_pwd) {
-               if (!spw_lock()) {
-                       fprintf(stderr, _("%s: can't lock shadow file\n"), Prog);
-                       pw_unlock();
-                       exit(1);
+               if (!spw_lock ()) {
+                       fprintf (stderr, _("%s: can't lock shadow file\n"),
+                                Prog);
+                       pw_unlock ();
+                       exit (1);
                }
-               if (!spw_open(O_RDWR)) {
-                       fprintf(stderr, _("%s: can't open shadow file\n"), Prog);
-                       pw_unlock();
-                       spw_unlock();
-                       exit(1);
+               if (!spw_open (O_RDWR)) {
+                       fprintf (stderr, _("%s: can't open shadow file\n"),
+                                Prog);
+                       pw_unlock ();
+                       spw_unlock ();
+                       exit (1);
                }
        }
 #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.
+        * 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, sizeof buf, stdin) != (char *) 0) {
@@ -193,59 +197,59 @@ main(int argc, char **argv)
                if ((cp = strrchr (buf, '\n'))) {
                        *cp = '\0';
                } else {
-                       fprintf(stderr, _("%s: line %d: line too long\n"),
-                               Prog, line);
+                       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.
+                * 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;
                if ((cp = strchr (name, ':'))) {
                        *cp++ = '\0';
                } else {
-                       fprintf(stderr, _("%s: line %d: missing new password\n"),
-                               Prog, line);
+                       fprintf (stderr,
+                                _("%s: line %d: missing new password\n"),
+                                Prog, line);
                        errors++;
                        continue;
                }
                newpwd = cp;
                if (!eflg)
-                       cp = pw_encrypt(newpwd, crypt_make_salt());
+                       cp = pw_encrypt (newpwd, crypt_make_salt ());
 
                /*
-                * Get the password file entry for this user.  The user
-                * must already exist.
+                * Get the password file entry for this user. The user must
+                * already exist.
                 */
 
-               pw = pw_locate(name);
+               pw = pw_locate (name);
                if (!pw) {
-                       fprintf (stderr, _("%s: line %d: unknown user %s\n"),
-                               Prog, line, name);
+                       fprintf (stderr,
+                                _("%s: line %d: unknown user %s\n"), Prog,
+                                line, name);
                        errors++;
                        continue;
                }
-
 #ifdef SHADOWPWD
                if (is_shadow_pwd)
-                       sp = spw_locate(name);
+                       sp = spw_locate (name);
                else
                        sp = NULL;
 #endif
 
                /*
-                * 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.
+                * 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.
                 */
 
 #ifdef SHADOWPWD
@@ -260,72 +264,78 @@ main(int argc, char **argv)
                        newpw.pw_passwd = cp;
 #ifdef ATT_AGE
                        if (newpw.pw_age[0]) {
-                               strcpy(newage, newpw.pw_age);
-                               strcpy(newage + 2, l64a(now / 7));
+                               strcpy (newage, newpw.pw_age);
+                               strcpy (newage + 2, l64a (now / 7));
                                newpw.pw_age = newage;
                        }
 #endif
                }
 
                /* 
-                * 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.
+                * 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.
                 */
 
 #ifdef SHADOWPWD
                if (sp)
-                       ok = spw_update(&newsp);
+                       ok = spw_update (&newsp);
                else
 #endif
-                       ok = pw_update(&newpw);
+                       ok = pw_update (&newpw);
 
                if (!ok) {
-                       fprintf(stderr, _("%s: line %d: cannot update password entry\n"),
-                               Prog, line);
+                       fprintf (stderr,
+                                _
+                                ("%s: line %d: cannot update password 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.
+        * 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 (errors) {
-               fprintf(stderr, _("%s: error detected, changes ignored\n"), Prog);
+               fprintf (stderr,
+                        _("%s: error detected, changes ignored\n"), Prog);
 #ifdef SHADOWPWD
                if (is_shadow_pwd)
-                       spw_unlock();
+                       spw_unlock ();
 #endif
-               pw_unlock();
-               exit(1);
+               pw_unlock ();
+               exit (1);
        }
 #ifdef SHADOWPWD
        if (is_shadow_pwd) {
-               if (!spw_close()) {
-                       fprintf(stderr, _("%s: error updating shadow file\n"), Prog);
-                       pw_unlock();
-                       exit(1);
+               if (!spw_close ()) {
+                       fprintf (stderr,
+                                _("%s: error updating shadow file\n"),
+                                Prog);
+                       pw_unlock ();
+                       exit (1);
                }
-               spw_unlock();
+               spw_unlock ();
        }
 #endif
-       if (!pw_close()) {
-               fprintf(stderr, _("%s: error updating password file\n"), Prog);
-               exit(1);
+       if (!pw_close ()) {
+               fprintf (stderr, _("%s: error updating password file\n"),
+                        Prog);
+               exit (1);
        }
-       pw_unlock();
+       pw_unlock ();
 
 #ifdef USE_PAM
        if (retval == PAM_SUCCESS) {
-               retval = pam_chauthtok(pamh, 0);
+               retval = pam_chauthtok (pamh, 0);
                if (retval != PAM_SUCCESS) {
-                       pam_end(pamh, retval);
+                       pam_end (pamh, retval);
                }
        }
 
@@ -335,8 +345,8 @@ main(int argc, char **argv)
        }
 
        if (retval == PAM_SUCCESS)
-               pam_end(pamh, PAM_SUCCESS);
-#endif /* USE_PAM */
+               pam_end (pamh, PAM_SUCCESS);
+#endif                         /* USE_PAM */
 
        return (0);
 }
index fa4a72736414df5e1cb787108d5b8813ed540811..54636095c39e6d4b75c1d8e55ded6af4a5f2bf90 100644 (file)
@@ -17,7 +17,7 @@
  * 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
+ * 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)
 #include <config.h>
 
 #include "rcsid.h"
-RCSID(PKG_VER "$Id: chsh.c,v 1.17 2000/09/02 18:40:43 marekm Exp $")
-
+RCSID (PKG_VER "$Id: chsh.c,v 1.20 2002/01/05 15:41:43 kloczek Exp $")
 #include <sys/types.h>
 #include <stdio.h>
 #include <fcntl.h>
 #include <signal.h>
 #include "prototypes.h"
 #include "defines.h"
-
 #include <pwd.h>
 #include "pwio.h"
 #include "getdef.h"
 #include "pwauth.h"
-
 #ifdef HAVE_SHADOW_H
 #include <shadow.h>
 #endif
-
 #ifdef USE_PAM
 #include "pam_defs.h"
 #endif
-
 #ifndef SHELLS_FILE
 #define SHELLS_FILE "/etc/shells"
 #endif
+/* global variables */
+static char *Prog;             /* Program name */
+static int amroot;             /* Real UID is root */
+static char loginsh[BUFSIZ];   /* Name of new login shell */
 
-/*
- * Global variables.
- */
-
-static char *Prog;                     /* Program name */
-static int amroot;                             /* Real UID is root */
-static char loginsh[BUFSIZ];           /* Name of new login shell */
+/* external identifiers */
 
-/*
- * External identifiers
- */
-
-extern int     optind;
-extern char    *optarg;
 #ifdef NDBM
-extern int     pw_dbm_mode;
+extern int pw_dbm_mode;
 #endif
 
-/*
- * #defines for messages.  This facilitates foreign language conversion
- * since all messages are defined right here.
- */
-
-#define WRONGPWD2      "incorrect password for `%s'"
-#define        NOPERM2         "can't change shell for `%s'\n"
-#define        PWDBUSY2        "can't lock /etc/passwd\n"
-#define        OPNERROR2       "can't open /etc/passwd\n"
-#define        UPDERROR2       "error updating passwd entry\n"
-#define        DBMERROR2       "error updating DBM passwd entry.\n"
-#define        NOTROOT2        "can't setuid(0).\n"
-#define        CLSERROR2       "can't rewrite /etc/passwd.\n"
-#define        UNLKERROR2      "can't unlock /etc/passwd.\n"
-#define        CHGSHELL        "changed user `%s' shell to `%s'\n"
-
 /* local function prototypes */
-static void usage(void);
-static void new_fields(void);
-static int restricted_shell(const char *);
+static void usage (void);
+static void new_fields (void);
+static int restricted_shell (const char *);
 
 /*
  * usage - print command line syntax and exit
  */
 
-static void
-usage(void)
+static void usage (void)
 {
-       fprintf(stderr, _("Usage: %s [ -s shell ] [ name ]\n"), Prog);
-       exit(1);
+       fprintf (stderr, _("Usage: %s [-s shell] [name]\n"), Prog);
+       exit (1);
 }
 
 /*
@@ -113,11 +83,11 @@ usage(void)
  * response, or leave it alone if nothing was entered.
  */
 
-static void
-new_fields(void)
+static void new_fields (void)
 {
-       printf(_("Enter the new value, or press return for the default\n"));
-       change_field(loginsh, sizeof loginsh, _("Login Shell"));
+       printf (_
+               ("Enter the new value, or press return for the default\n"));
+       change_field (loginsh, sizeof loginsh, _("Login Shell"));
 }
 
 /*
@@ -127,20 +97,19 @@ new_fields(void)
  * considered to be restricted.
  */
 
-static int
-restricted_shell(const char *sh)
+static int restricted_shell (const char *sh)
 {
 #if 0
-       char *cp = Basename((char *) sh);
+       char *cp = Basename ((char *) sh);
+
        return *cp == 'r' || *cp == 'R';
 #else
        /*
-        * 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
+        * 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 !check_shell(sh);
+       return !check_shell (sh);
 #endif
 }
 
@@ -148,28 +117,26 @@ restricted_shell(const char *sh)
 /*
  * 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.
+ *     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)
+int main (int argc, char **argv)
 {
-       char    *user;                  /* User name                         */
-       int     flag;                   /* Current command line flag         */
-       int     sflg = 0;               /* -s - set shell from command line  */
+       char *user;             /* User name                         */
+       int flag;               /* Current command line flag         */
+       int sflg = 0;           /* -s - set shell from command line  */
        const struct passwd *pw;        /* Password entry from /etc/passwd   */
-       struct  passwd  pwent;          /* New password entry                */
+       struct passwd pwent;    /* New password entry                */
 
-       sanitize_env();
+       sanitize_env ();
 
-       setlocale(LC_ALL, "");
-       bindtextdomain(PACKAGE, LOCALEDIR);
-       textdomain(PACKAGE);
+       setlocale (LC_ALL, "");
+       bindtextdomain (PACKAGE, LOCALEDIR);
+       textdomain (PACKAGE);
 
        /*
-        * This command behaves different for root and non-root
-        * users.
+        * This command behaves different for root and non-root users.
         */
 
        amroot = getuid () == 0;
@@ -178,13 +145,13 @@ main(int argc, char **argv)
 #endif
 
        /*
-        * Get the program name.  The program name is used as a
-        * prefix to most error messages.
+        * Get the program name. The program name is used as a prefix to
+        * most error messages.
         */
 
-       Prog = Basename(argv[0]);
+       Prog = Basename (argv[0]);
 
-       OPENLOG("chsh");
+       OPENLOG ("chsh");
 
        /*
         * There is only one option, but use getopt() anyway to
@@ -193,180 +160,183 @@ main(int argc, char **argv)
 
        while ((flag = getopt (argc, argv, "s:")) != EOF) {
                switch (flag) {
-                       case 's':
-                               sflg++;
-                               STRFCPY(loginsh, optarg);
-                               break;
-                       default:
-                               usage ();
+               case 's':
+                       sflg++;
+                       STRFCPY (loginsh, optarg);
+                       break;
+               default:
+                       usage ();
                }
        }
 
        /*
-        * There should be only one remaining argument at most
-        * and it should be the user's name.
+        * There should be only one remaining argument at most and it should
+        * be the user's name.
         */
 
        if (argc > optind + 1)
                usage ();
 
        /*
-        * Get the name of the user to check.  It is either
-        * the command line name, or the name getlogin()
-        * returns.
+        * 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 = getpwnam(user);
+               pw = getpwnam (user);
                if (!pw) {
-                       fprintf(stderr,
-                               _("%s: Unknown user %s\n"),
-                               Prog, user);
-                       exit(1);
+                       fprintf (stderr,
+                                _("%s: Unknown user %s\n"), Prog, user);
+                       exit (1);
                }
        } else {
-               pw = get_my_pwent();
+               pw = get_my_pwent ();
                if (!pw) {
-                       fprintf(stderr,
-                               _("%s: Cannot determine your user name.\n"),
-                               Prog);
-                       exit(1);
+                       fprintf (stderr,
+                                _
+                                ("%s: Cannot determine your user name.\n"),
+                                Prog);
+                       exit (1);
                }
-               user = xstrdup(pw->pw_name);
+               user = xstrdup (pw->pw_name);
        }
 
 #ifdef USE_NIS
        /*
-        * Now we make sure this is a LOCAL password entry for
-        * this user ...
+        * Now we make sure this is a LOCAL password entry for this user ...
         */
 
        if (__ispwNIS ()) {
-               char    *nis_domain;
-               char    *nis_master;
+               char *nis_domain;
+               char *nis_master;
 
-               fprintf(stderr,
-                       _("%s: cannot change user `%s' on NIS client.\n"),
-                       Prog, user);
+               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",
+               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);
+                       fprintf (stderr,
+                                _
+                                ("%s: `%s' is the NIS master for this client.\n"),
+                                Prog, nis_master);
                }
                exit (1);
        }
 #endif
 
        /*
-        * Non-privileged users are only allowed to change the
-        * shell if the UID of the user matches the current
-        * real UID.
+        * 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, NOPERM2, user));
-               closelog();
-               fprintf(stderr, _("You may not change the shell for %s.\n"),
-                       user);
-               exit(1);
+       if (!amroot && pw->pw_uid != getuid ()) {
+               SYSLOG ((LOG_WARN, "can't change shell for `%s'", user));
+               closelog ();
+               fprintf (stderr,
+                        _("You may not change the shell for %s.\n"),
+                        user);
+               exit (1);
        }
 
        /*
-        * Non-privileged users are only allowed to change the
-        * shell if it is not a restricted one.
+        * Non-privileged users are only allowed to change the shell if it
+        * is not a restricted one.
         */
 
-       if (! amroot && restricted_shell(pw->pw_shell)) {
-               SYSLOG((LOG_WARN, NOPERM2, user));
-               closelog();
-               fprintf(stderr, _("You may not change the shell for %s.\n"),
-                       user);
-               exit(1);
+       if (!amroot && restricted_shell (pw->pw_shell)) {
+               SYSLOG ((LOG_WARN, "can't change shell for `%s'", user));
+               closelog ();
+               fprintf (stderr,
+                        _("You may not change the shell for %s.\n"),
+                        user);
+               exit (1);
        }
 
        /*
-       * 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
-       */
+          * 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, "chsh");
+       if (!amroot && getdef_bool ("CHFN_AUTH"))
+               passwd_check (pw->pw_name, pw->pw_passwd, "chsh");
 
        /*
-        * Now get the login shell.  Either get it from the password
+        * 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 (!sflg)
+               STRFCPY (loginsh, pw->pw_shell);
 
        /*
-        * If the login shell was not set on the command line,
-        * let the user interactively change it.
+        * 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();
+       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
+        * 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, ":,=")) {
-               fprintf(stderr, _("%s: Invalid entry: %s\n"), Prog, loginsh);
-               closelog();
-               exit(1);
+               fprintf (stderr, _("%s: Invalid entry: %s\n"), Prog,
+                        loginsh);
+               closelog ();
+               exit (1);
        }
-       if (!amroot && (!check_shell(loginsh) || access(loginsh, X_OK) != 0)) {
-               fprintf(stderr, _("%s is an invalid shell.\n"), loginsh);
-               closelog();
-               exit(1);
+       if (!amroot
+           && (!check_shell (loginsh) || access (loginsh, X_OK) != 0)) {
+               fprintf (stderr, _("%s is an invalid shell.\n"), loginsh);
+               closelog ();
+               exit (1);
        }
 
        /*
         * 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
+        * to root to protect against unexpected signals. Any
         * keyboard signals are set to be ignored.
         */
 
-       if (setuid(0)) {
-               SYSLOG((LOG_ERR, NOTROOT2));
-               closelog();
+       if (setuid (0)) {
+               SYSLOG ((LOG_ERR, "can't setuid(0)"));
+               closelog ();
                fprintf (stderr, _("Cannot change ID to root.\n"));
-               exit(1);
+               exit (1);
        }
-       pwd_init();
+       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.
+        * the password file. Get a lock on the file and open it.
         */
 
-       if (!pw_lock()) {
-               SYSLOG((LOG_WARN, PWDBUSY2));
-               closelog();
-               fprintf(stderr,
-                       _("Cannot lock the password file; try again later.\n"));
-               exit(1);
+       if (!pw_lock ()) {
+               SYSLOG ((LOG_WARN, "can't lock /etc/passwd"));
+               closelog ();
+               fprintf (stderr,
+                        _
+                        ("Cannot lock the password file; try again later.\n"));
+               exit (1);
        }
-       if (! pw_open (O_RDWR)) {
-               SYSLOG((LOG_ERR, OPNERROR2));
-               closelog();
-               fprintf(stderr, _("Cannot open the password file.\n"));
-               pw_unlock();
-               exit(1);
+       if (!pw_open (O_RDWR)) {
+               SYSLOG ((LOG_ERR, "can't open /etc/passwd"));
+               closelog ();
+               fprintf (stderr, _("Cannot open the password file.\n"));
+               pw_unlock ();
+               exit (1);
        }
 
        /*
@@ -375,63 +345,67 @@ main(int argc, char **argv)
         * contain the shadow password if (despite the warnings) someone
         * enables AUTOSHADOW (or SHADOW_COMPAT in libc).  --marekm
         */
-       pw = pw_locate(user);
+       pw = pw_locate (user);
        if (!pw) {
-               pw_unlock();
-               fprintf(stderr,
-                       _("%s: %s not found in /etc/passwd\n"), Prog, user);
-               exit(1);
+               pw_unlock ();
+               fprintf (stderr,
+                        _("%s: %s not found in /etc/passwd\n"), Prog,
+                        user);
+               exit (1);
        }
 
        /*
-        * Make a copy of the entry, then change the shell field.  The other
+        * Make a copy of the entry, then change the shell field. The other
         * fields remain unchanged.
         */
        pwent = *pw;
        pwent.pw_shell = loginsh;
 
        /*
-        * Update the passwd file entry.  If there is a DBM file,
-        * update that entry as well.
+        * Update the passwd file entry. If there is a DBM file, update
+        * that entry as well.
         */
 
-       if (!pw_update(&pwent)) {
-               SYSLOG((LOG_ERR, UPDERROR2));
-               closelog();
-               fprintf(stderr, _("Error updating the password entry.\n"));
-               pw_unlock();
-               exit(1);
+       if (!pw_update (&pwent)) {
+               SYSLOG ((LOG_ERR, "error updating passwd entry"));
+               closelog ();
+               fprintf (stderr,
+                        _("Error updating the password entry.\n"));
+               pw_unlock ();
+               exit (1);
        }
 #ifdef NDBM
-       if (pw_dbm_present() && ! pw_dbm_update (&pwent)) {
-               SYSLOG((LOG_ERR, DBMERROR2));
-               closelog();
-               fprintf (stderr, _("Error updating the DBM password entry.\n"));
-               pw_unlock();
-               exit(1);
+       if (pw_dbm_present () && !pw_dbm_update (&pwent)) {
+               SYSLOG ((LOG_ERR, "error updating DBM passwd entry"));
+               closelog ();
+               fprintf (stderr,
+                        _("Error updating the DBM password entry.\n"));
+               pw_unlock ();
+               exit (1);
        }
-       endpwent();
+       endpwent ();
 #endif
 
        /*
-        * Changes have all been made, so commit them and unlock the
-        * file.
+        * Changes have all been made, so commit them and unlock the file.
         */
 
-       if (!pw_close()) {
-               SYSLOG((LOG_ERR, CLSERROR2));
-               closelog();
-               fprintf(stderr, _("Cannot commit password file changes.\n"));
-               pw_unlock();
-               exit(1);
+       if (!pw_close ()) {
+               SYSLOG ((LOG_ERR, "can't rewrite /etc/passwd"));
+               closelog ();
+               fprintf (stderr,
+                        _("Cannot commit password file changes.\n"));
+               pw_unlock ();
+               exit (1);
        }
-       if (!pw_unlock()) {
-               SYSLOG((LOG_ERR, UNLKERROR2));
-               closelog();
-               fprintf(stderr, _("Cannot unlock the password file.\n"));
-               exit(1);
+       if (!pw_unlock ()) {
+               SYSLOG ((LOG_ERR, "can't unlock /etc/passwd"));
+               closelog ();
+               fprintf (stderr, _("Cannot unlock the password file.\n"));
+               exit (1);
        }
-       SYSLOG((LOG_INFO, CHGSHELL, user, loginsh));
-       closelog();
+       SYSLOG ((LOG_INFO, "changed user `%s' shell to `%s'", user,
+                loginsh));
+       closelog ();
        exit (0);
 }
index 6de5ea20557b1b21801ec0b61156f79d891243d7..4e65dbebbe93c3d889e40950a23038a9398963ba 100644 (file)
@@ -17,7 +17,7 @@
  * 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
+ * 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)
@@ -30,8 +30,7 @@
 #include <config.h>
 
 #include "rcsid.h"
-RCSID(PKG_VER "$Id: dpasswd.c,v 1.12 2000/09/02 18:40:43 marekm Exp $")
-
+RCSID (PKG_VER "$Id: dpasswd.c,v 1.15 2002/01/05 15:41:43 kloczek Exp $")
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <stdio.h>
@@ -40,76 +39,59 @@ RCSID(PKG_VER "$Id: dpasswd.c,v 1.12 2000/09/02 18:40:43 marekm Exp $")
 #include "prototypes.h"
 #include "defines.h"
 #include "dialup.h"
-
 #define        DTMP    "/etc/d_passwd.tmp"
-
-/*
- * Prompts and messages go here.
- */
-
-#define        DIALCHG         "changed password for %s\n"
-#define        DIALADD         "added password for %s\n"
-#define        DIALREM         "removed password for %s\n"
-
 static int aflg = 0;
 static int dflg = 0;
 static char *Prog;
 
-extern int optind;
-extern char *optarg;
-
-extern char *getpass();
-
 /* local function prototypes */
-static void usage(void);
+static void usage (void);
 
-static void
-usage(void)
+static void usage (void)
 {
-       fprintf(stderr, _("Usage: %s [ -(a|d) ] shell\n"), Prog);
-       exit(1);
+       fprintf (stderr, _("Usage: %s [-(a|d)] shell\n"), Prog);
+       exit (1);
 }
 
-int
-main(int argc, char **argv)
+int main (int argc, char **argv)
 {
-       struct  dialup  *dial;
-       struct  dialup  dent;
-       struct  stat    sb;
-       FILE    *fp;
-       char    *sh = 0;
-       char    *cp;
-       char    pass[BUFSIZ];
-       int     fd;
-       int     found = 0;
-       int     opt;
+       struct dialup *dial;
+       struct dialup dent;
+       struct stat sb;
+       FILE *fp;
+       char *sh = 0;
+       char *cp;
+       char pass[BUFSIZ];
+       int fd;
+       int found = 0;
+       int opt;
 
-       Prog = Basename(argv[0]);
+       Prog = Basename (argv[0]);
 
-       setlocale(LC_ALL, "");
-       bindtextdomain(PACKAGE, LOCALEDIR);
-       textdomain(PACKAGE);
+       setlocale (LC_ALL, "");
+       bindtextdomain (PACKAGE, LOCALEDIR);
+       textdomain (PACKAGE);
 
-       OPENLOG(Prog);
+       OPENLOG (Prog);
 
        while ((opt = getopt (argc, argv, "a:d:")) != EOF) {
                switch (opt) {
-                       case 'a':
-                               aflg++;
-                               sh = optarg;
-                               break;
-                       case 'd':
-                               dflg++;
-                               sh = optarg;
-                               break;
-                       default:
-                               usage ();
+               case 'a':
+                       aflg++;
+                       sh = optarg;
+                       break;
+               case 'd':
+                       dflg++;
+                       sh = optarg;
+                       break;
+               default:
+                       usage ();
                }
        }
-       if (! aflg && ! dflg)
+       if (!aflg && !dflg)
                aflg++;
 
-       if (! sh) {
+       if (!sh) {
                if (optind >= argc)
                        usage ();
                else
@@ -120,65 +102,67 @@ main(int argc, char **argv)
 
        /*
         * Add a new shell to the password file, or update an existing
-        * entry.  Begin by getting an encrypted password for this
-        * shell.
+        * entry. Begin by getting an encrypted password for this shell.
         */
 
        if (aflg) {
-               int     tries = 3;
+               int tries = 3;
 
                dent.du_shell = sh;
-               dent.du_passwd = "";  /* XXX warning: const */
+               dent.du_passwd = "";    /* XXX warning: const */
 
-again:
-               if (! (cp = getpass(_("Shell password: "))))
+             again:
+               if (!(cp = getpass (_("Shell password: "))))
                        exit (1);
 
-               STRFCPY(pass, cp);
-               strzero(cp);
+               STRFCPY (pass, cp);
+               strzero (cp);
 
-               if (! (cp = getpass(_("re-enter Shell password: "))))
+               if (!(cp = getpass (_("re-enter Shell password: "))))
                        exit (1);
 
                if (strcmp (pass, cp)) {
-                       strzero(pass);
-                       strzero(cp);
-                       fprintf(stderr,
-                               _("%s: Passwords do not match, try again.\n"),
-                               Prog);
+                       strzero (pass);
+                       strzero (cp);
+                       fprintf (stderr,
+                                _
+                                ("%s: Passwords do not match, try again.\n"),
+                                Prog);
 
                        if (--tries)
                                goto again;
 
-                       exit(1);
+                       exit (1);
                }
-               strzero(cp);
-               dent.du_passwd = pw_encrypt(pass, crypt_make_salt());
-               strzero(pass);
+               strzero (cp);
+               dent.du_passwd = pw_encrypt (pass, crypt_make_salt ());
+               strzero (pass);
        }
 
        /*
         * Create the temporary file for the updated dialup password
-        * information to be placed into.  Turn it into a (FILE *)
-        * for use by putduent().
+        * information to be placed into. Turn it into a (FILE *) for use by
+        * putduent().
         */
 
-       if ((fd = open (DTMP, O_CREAT|O_EXCL|O_RDWR, 0600)) < 0) {
-               snprintf(pass, sizeof pass, _("%s: can't create %s"), Prog, DTMP);
+       if ((fd = open (DTMP, O_CREAT | O_EXCL | O_RDWR, 0600)) < 0) {
+               snprintf (pass, sizeof pass, _("%s: can't create %s"),
+                         Prog, DTMP);
                perror (pass);
                exit (1);
        }
-       if (! (fp = fdopen (fd, "r+"))) {
-               snprintf(pass, sizeof pass, _("%s: can't open %s"), Prog, DTMP);
+       if (!(fp = fdopen (fd, "r+"))) {
+               snprintf (pass, sizeof pass, _("%s: can't open %s"), Prog,
+                         DTMP);
                perror (pass);
                unlink (DTMP);
                exit (1);
        }
 
        /*
-        * Scan the dialup password file for the named entry,
-        * copying out other entries along the way.  Copying
-        * stops when a match is found or the file runs out.
+        * Scan the dialup password file for the named entry, copying out
+        * other entries along the way. Copying stops when a match is found
+        * or the file runs out.
         */
 
        while ((dial = getduent ())) {
@@ -191,13 +175,12 @@ again:
        }
 
        /*
-        * To delete the entry, just don't copy it.  To update
-        * the entry, output the modified version - works with
-        * new entries as well.
+        * To delete the entry, just don't copy it. To update the entry,
+        * output the modified version - works with new entries as well.
         */
 
-       if (dflg && ! found) {
-               fprintf(stderr, _("%s: Shell %s not found.\n"), Prog, sh);
+       if (dflg && !found) {
+               fprintf (stderr, _("%s: Shell %s not found.\n"), Prog, sh);
                goto failure;
        }
        if (aflg)
@@ -205,9 +188,8 @@ again:
                        goto failure;
 
        /*
-        * Now copy out the remaining entries.  Flush and close the
-        * new file before doing anything nasty to the existing
-        * file.
+        * Now copy out the remaining entries. Flush and close the new file
+        * before doing anything nasty to the existing file.
         */
 
 
@@ -221,16 +203,16 @@ again:
        fclose (fp);
 
        /*
-        * If the original file did not exist, we must create a new
-        * file with owner "root" and mode 400.  Otherwise we copy
-        * the modes from the existing file to the new file.
+        * If the original file did not exist, we must create a new file
+        * with owner "root" and mode 400. Otherwise we copy the modes from
+        * the existing file to the new file.
         *
         * After this is done the new file will replace the old file.
         */
 
-       pwd_init();
+       pwd_init ();
 
-       if (! stat (DIALPWD, &sb)) {
+       if (!stat (DIALPWD, &sb)) {
                chown (DTMP, sb.st_uid, sb.st_gid);
                chmod (DTMP, sb.st_mode);
                unlink (DIALPWD);
@@ -238,22 +220,22 @@ again:
                chown (DTMP, 0, 0);
                chmod (DTMP, 0400);
        }
-       if (! link (DTMP, DIALPWD))
+       if (!link (DTMP, DIALPWD))
                unlink (DTMP);
 
-       if (aflg && ! found)
-               SYSLOG((LOG_INFO, DIALADD, sh));
+       if (aflg && !found)
+               SYSLOG ((LOG_INFO, "added password for %s", sh));
        else if (aflg && found)
-               SYSLOG((LOG_INFO, DIALCHG, sh));
+               SYSLOG ((LOG_INFO, "changed password for %s", sh));
        else if (dflg)
-               SYSLOG((LOG_INFO, DIALREM, sh));
+               SYSLOG ((LOG_INFO, "removed password for %s", sh));
 
-       closelog();
+       closelog ();
        sync ();
        exit (0);
 
-failure:
+      failure:
        unlink (DTMP);
-       closelog();
+       closelog ();
        exit (1);
 }
index b8d09b50e99ca5e191edd28b608c5c46c836eac0..aaa507fedf4da6bcf363ad52830c3b1a0d266926 100644 (file)
@@ -17,7 +17,7 @@
  * 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
+ * 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)
 #include <config.h>
 
 #include "rcsid.h"
-RCSID(PKG_VER "$Id: expiry.c,v 1.9 2000/08/26 18:27:18 marekm Exp $")
-
+RCSID (PKG_VER "$Id: expiry.c,v 1.12 2002/01/05 15:41:43 kloczek Exp $")
 #include <sys/types.h>
 #include <signal.h>
 #include <stdio.h>
 #include "prototypes.h"
 #include "defines.h"
 #include <pwd.h>
-
-#ifndef        AGING
-#if defined(HAVE_USERSEC_H) || defined(SHADOWPWD)
-#define        AGING   1
-#endif
-#endif
-
-
-#if !defined(SHADOWPWD) && !defined(AGING) /*{*/
-
-/*
- * Not much to do here ...
- */
-
-int
-main(int argc, char **argv)
-{
-       exit (0);
-}
-
-#else  /*} AGING || SHADOWPWD {*/
-
 /* local function prototypes */
-static RETSIGTYPE catch(int);
-static void usage(void);
+static RETSIGTYPE catch (int);
+static void usage (void);
 
 /*
  * catch - signal catcher
  */
 
-static RETSIGTYPE
-catch(int sig)
+static RETSIGTYPE catch (int sig)
 {
        exit (10);
 }
@@ -78,31 +54,29 @@ catch(int sig)
  * usage - print syntax message and exit
  */
 
-static void
-usage(void)
+static void usage (void)
 {
-       fprintf(stderr, _("Usage: expiry { -f | -c }\n"));
-       exit(10);
+       fprintf (stderr, _("Usage: expiry {-f|-c}\n"));
+       exit (10);
 }
 
 /* 
  * expiry - check and enforce password expiration policy
  *
- *     expiry checks (-c) the current password expiraction and
- *     forces (-f) changes when required.  It is callable as a
- *     normal user command.
+ *     expiry checks (-c) the current password expiraction and forces (-f)
+ *     changes when required. It is callable as a normal user command.
  */
 
-int
-main(int argc, char **argv)
+int main (int argc, char **argv)
 {
-       struct  passwd  *pwd;
+       struct passwd *pwd;
+
 #ifdef SHADOWPWD
-       struct  spwd    *spwd;
+       struct spwd *spwd;
 #endif
        char *Prog = argv[0];
 
-       sanitize_env();
+       sanitize_env ();
 
        /* 
         * Start by disabling all of the keyboard signals.
@@ -116,27 +90,29 @@ main(int argc, char **argv)
 #endif
 
        /*
-        * expiry takes one of two arguments.  The default action
-        * is to give the usage message.
+        * expiry takes one of two arguments. The default action is to give
+        * the usage message.
         */
 
-       setlocale(LC_ALL, "");
-       bindtextdomain(PACKAGE, LOCALEDIR);
-       textdomain(PACKAGE);
+       setlocale (LC_ALL, "");
+       bindtextdomain (PACKAGE, LOCALEDIR);
+       textdomain (PACKAGE);
 
-       if (argc != 2 || (strcmp (argv[1], "-f")  && strcmp (argv[1], "-c")))
+       if (argc != 2
+           || (strcmp (argv[1], "-f") && strcmp (argv[1], "-c")))
                usage ();
 
-#if 0  /* could be setgid shadow with /etc/shadow mode 0640 */
+#if 0                          /* could be setgid shadow with /etc/shadow mode 0640 */
        /*
-        * Make sure I am root.  Can't open /etc/shadow without root
+        * Make sure I am root. Can't open /etc/shadow without root
         * authority.
         */
 
        if (geteuid () != 0) {
-               fprintf(stderr, _("%s: WARNING!  Must be set-UID root!\n"),
-                       argv[0]);
-               exit(10);
+               fprintf (stderr,
+                        _("%s: WARNING!  Must be set-UID root!\n"),
+                        argv[0]);
+               exit (10);
        }
 #endif
 
@@ -144,12 +120,12 @@ main(int argc, char **argv)
         * Get user entries for /etc/passwd and /etc/shadow
         */
 
-       if (!(pwd = get_my_pwent())) {
-               fprintf(stderr, _("%s: unknown user\n"), Prog);
-               exit(10);
+       if (!(pwd = get_my_pwent ())) {
+               fprintf (stderr, _("%s: unknown user\n"), Prog);
+               exit (10);
        }
 #ifdef SHADOWPWD
-       spwd = getspnam(pwd->pw_name);
+       spwd = getspnam (pwd->pw_name);
 #endif
 
        /*
@@ -169,7 +145,7 @@ main(int argc, char **argv)
 #endif
 
                /*
-                * Exit with status indicating state of account --
+                * Exit with status indicating state of account.
                 */
 
 #ifdef SHADOWPWD
@@ -186,10 +162,9 @@ main(int argc, char **argv)
        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.
+                * 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.
                 */
 
 #ifdef SHADOWPWD
@@ -207,4 +182,3 @@ main(int argc, char **argv)
        usage ();
        exit (1);
 }
-#endif /*}*/
index beb418ba370845a3cdb2d24666b379333c8b238e..fb5987a9fcc6970641dff826a5a0eef678440b00 100644 (file)
@@ -17,7 +17,7 @@
  * 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
+ * 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)
@@ -30,8 +30,7 @@
 #include <config.h>
 
 #include "rcsid.h"
-RCSID(PKG_VER "$Id: faillog.c,v 1.10 2000/08/26 18:27:18 marekm Exp $")
-
+RCSID (PKG_VER "$Id: faillog.c,v 1.11 2002/01/05 15:41:43 kloczek Exp $")
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <stdio.h>
@@ -40,242 +39,239 @@ RCSID(PKG_VER "$Id: faillog.c,v 1.10 2000/08/26 18:27:18 marekm Exp $")
 #include "prototypes.h"
 #include "defines.h"
 #include "faillog.h"
-
-static char *Prog;     /* program name */
-static FILE *fail;     /* failure file stream */
-static uid_t user;     /* one single user, specified on command line */
-static int days;       /* number of days to consider for print command */
-static time_t seconds; /* that number of days in seconds */
+static char *Prog;             /* program name */
+static FILE *fail;             /* failure file stream */
+static uid_t user;             /* one single user, specified on command line */
+static int days;               /* number of days to consider for print command */
+static time_t seconds;         /* that number of days in seconds */
 
 static int
      aflg = 0,       /* set if all users are to be printed always */
      uflg = 0,       /* set if user is a valid user id */
      tflg = 0;       /* print is restricted to most recent days */
aflg = 0,                     /* set if all users are to be printed always */
uflg = 0,                     /* set if user is a valid user id */
tflg = 0;                     /* print is restricted to most recent days */
 
 static struct stat statbuf;    /* fstat buffer for file size */
 
 #if !defined(UNISTD_H) && !defined(STDLIB_H)
-extern char    *optarg;
+extern char *optarg;
 #endif
 
 #define        NOW     (time((time_t *) 0))
 
 /* local function prototypes */
-static void usage(void);
-static void print(void);
-static void print_one(const struct faillog *, uid_t);
-static void reset(void);
-static int reset_one(uid_t);
-static void setmax(int);
-static void setmax_one(uid_t, int);
-static void set_locktime(long);
-static void set_locktime_one(uid_t, long);
-
-
-static void
-usage(void)
+static void usage (void);
+static void print (void);
+static void print_one (const struct faillog *, uid_t);
+static void reset (void);
+static int reset_one (uid_t);
+static void setmax (int);
+static void setmax_one (uid_t, int);
+static void set_locktime (long);
+static void set_locktime_one (uid_t, long);
+
+
+static void usage (void)
 {
-       fprintf(stderr,
-               _("usage: %s [-a|-u user] [-m max] [-r] [-t days] [-l locksecs]\n"),
-               Prog);
-       exit(1);
+       fprintf (stderr,
+                _
+                ("usage: %s [-a|-u user] [-m max] [-r] [-t days] [-l locksecs]\n"),
+                Prog);
+       exit (1);
 }
 
-int
-main(int argc, char **argv)
+int main (int argc, char **argv)
 {
        int c, anyflag = 0;
        struct passwd *pwent;
 
-       Prog = Basename(argv[0]);
+       Prog = Basename (argv[0]);
 
-       setlocale(LC_ALL, "");
-       bindtextdomain(PACKAGE, LOCALEDIR);
-       textdomain(PACKAGE);
+       setlocale (LC_ALL, "");
+       bindtextdomain (PACKAGE, LOCALEDIR);
+       textdomain (PACKAGE);
 
        /* try to open for read/write, if that fails - read only */
 
-       fail = fopen(FAILLOG_FILE, "r+");
+       fail = fopen (FAILLOG_FILE, "r+");
        if (!fail)
-               fail = fopen(FAILLOG_FILE, "r");
+               fail = fopen (FAILLOG_FILE, "r");
        if (!fail) {
-               perror(FAILLOG_FILE);
-               exit(1);
+               perror (FAILLOG_FILE);
+               exit (1);
        }
-       while ((c = getopt(argc, argv, "al:m:pru:t:")) != EOF) {
+       while ((c = getopt (argc, argv, "al:m:pru:t:")) != EOF) {
                switch (c) {
-                       case 'a':
-                               aflg++;
-                               if (uflg)
-                                       usage();
-                               break;
-                       case 'l':
-                               set_locktime((long) atoi(optarg));
-                               anyflag++;
-                               break;
-                       case 'm':
-                               setmax(atoi(optarg));
-                               anyflag++;
-                               break;
-                       case 'p':
-                               print();
-                               anyflag++;
-                               break;
-                       case 'r':
-                               reset();
-                               anyflag++;
-                               break;
-                       case 'u':
-                               if (aflg)
-                                       usage();
-
-                               pwent = getpwnam(optarg);
-                               if (!pwent) {
-                                       fprintf(stderr, _("Unknown User: %s\n"), optarg);
-                                       exit(1);
-                               }
-                               uflg++;
-                               user = pwent->pw_uid;
-                               break;
-                       case 't':
-                               days = atoi(optarg);
-                               seconds = days * DAY;
-                               tflg++;
-                               break;
-                       default:
-                               usage();
+               case 'a':
+                       aflg++;
+                       if (uflg)
+                               usage ();
+                       break;
+               case 'l':
+                       set_locktime ((long) atoi (optarg));
+                       anyflag++;
+                       break;
+               case 'm':
+                       setmax (atoi (optarg));
+                       anyflag++;
+                       break;
+               case 'p':
+                       print ();
+                       anyflag++;
+                       break;
+               case 'r':
+                       reset ();
+                       anyflag++;
+                       break;
+               case 'u':
+                       if (aflg)
+                               usage ();
+
+                       pwent = getpwnam (optarg);
+                       if (!pwent) {
+                               fprintf (stderr, _("Unknown User: %s\n"),
+                                        optarg);
+                               exit (1);
+                       }
+                       uflg++;
+                       user = pwent->pw_uid;
+                       break;
+               case 't':
+                       days = atoi (optarg);
+                       seconds = days * DAY;
+                       tflg++;
+                       break;
+               default:
+                       usage ();
                }
        }
        /* no flags implies -a -p (= print information for all users)  */
        if (!(anyflag || aflg || tflg || uflg))
                aflg++;
        /* (-a or -t days or -u user) and no other flags implies -p
-               (= print information for selected users) */
+          (= print information for selected users) */
        if (!anyflag && (aflg || tflg || uflg))
-               print();
-       fclose(fail);
+               print ();
+       fclose (fail);
        return 0;
-       /*NOTREACHED*/
-}
+ /*NOTREACHED*/}
 
-static void
-print(void)
+static void print (void)
 {
-       uid_t   uid;
-       off_t   offset;
-       struct  faillog faillog;
+       uid_t uid;
+       off_t offset;
+       struct faillog faillog;
 
        if (uflg) {
                offset = user * sizeof faillog;
-               if (fstat(fileno(fail), &statbuf)) {
-                       perror(FAILLOG_FILE);
+               if (fstat (fileno (fail), &statbuf)) {
+                       perror (FAILLOG_FILE);
                        return;
                }
                if (offset >= statbuf.st_size)
                        return;
 
-               fseek(fail, (off_t) user * sizeof faillog, SEEK_SET);
-               if (fread((char *) &faillog, sizeof faillog, 1, fail) == 1)
-                       print_one(&faillog, user);
+               fseek (fail, (off_t) user * sizeof faillog, SEEK_SET);
+               if (fread ((char *) &faillog, sizeof faillog, 1, fail) ==
+                   1)
+                       print_one (&faillog, user);
                else
-                       perror(FAILLOG_FILE);
+                       perror (FAILLOG_FILE);
        } else {
                for (uid = 0;
-                       fread((char *) &faillog, sizeof faillog, 1, fail) == 1;
-                               uid++) {
+                    fread ((char *) &faillog, sizeof faillog, 1,
+                           fail) == 1; uid++) {
 
                        if (aflg == 0 && faillog.fail_cnt == 0)
                                continue;
 
                        if (aflg == 0 && tflg &&
-                                       NOW - faillog.fail_time > seconds)
+                           NOW - faillog.fail_time > seconds)
                                continue;
 
                        if (aflg && faillog.fail_time == 0)
                                continue;
 
-                       print_one(&faillog, uid);
+                       print_one (&faillog, uid);
                }
        }
 }
 
-static void
-print_one(const struct faillog *fl, uid_t uid)
+static void print_one (const struct faillog *fl, uid_t uid)
 {
-       static  int     once;
-       char    *cp;
-       struct  tm      *tm;
+       static int once;
+       char *cp;
+       struct tm *tm;
        time_t now;
-       struct  passwd  *pwent;
+       struct passwd *pwent;
+
 #ifdef HAVE_STRFTIME
        char ptime[80];
 #endif
 
        if (!once) {
-               printf(_("Username   Failures  Maximum  Latest\n"));
+               printf (_("Username   Failures  Maximum  Latest\n"));
                once++;
        }
-       pwent = getpwuid(uid);
-       time(&now);
-       tm = localtime(&fl->fail_time);
+       pwent = getpwuid (uid);
+       time (&now);
+       tm = localtime (&fl->fail_time);
 #ifdef HAVE_STRFTIME
-       strftime(ptime, sizeof(ptime), "%a %b %e %H:%M:%S %z %Y",tm);
+       strftime (ptime, sizeof (ptime), "%a %b %e %H:%M:%S %z %Y", tm);
        cp = ptime;
 #else
-       cp = asctime(tm);
+       cp = asctime (tm);
        cp[24] = '\0';
 #endif
        if (pwent) {
-               printf("%-12s   %4d     %4d",
+               printf ("%-12s   %4d     %4d",
                        pwent->pw_name, fl->fail_cnt, fl->fail_max);
                if (fl->fail_time) {
-                   printf(_("  %s on %s"), cp, fl->fail_line);
-                   if (fl->fail_locktime) {
-                       if (fl->fail_time + fl->fail_locktime > now
-                           && fl->fail_cnt)
-                               printf(_(" [%lds left]"),
-                                   fl->fail_time + fl->fail_locktime - now);
-                       else
-                               printf(_(" [%lds lock]"), fl->fail_locktime);
-                   }
+                       printf (_("  %s on %s"), cp, fl->fail_line);
+                       if (fl->fail_locktime) {
+                               if (fl->fail_time + fl->fail_locktime > now
+                                   && fl->fail_cnt)
+                                       printf (_(" [%lds left]"),
+                                               fl->fail_time +
+                                               fl->fail_locktime - now);
+                               else
+                                       printf (_(" [%lds lock]"),
+                                               fl->fail_locktime);
+                       }
                }
-               putchar('\n');
+               putchar ('\n');
        }
 }
 
-static void
-reset(void)
+static void reset (void)
 {
        uid_t uid;
 
        if (uflg)
-               reset_one(user);
+               reset_one (user);
        else
-               for (uid = 0; reset_one(uid); uid++)
-                       ;
+               for (uid = 0; reset_one (uid); uid++);
 }
 
-static int
-reset_one(uid_t uid)
+static int reset_one (uid_t uid)
 {
-       off_t   offset;
-       struct  faillog faillog;
+       off_t offset;
+       struct faillog faillog;
 
        offset = uid * sizeof faillog;
-       if (fstat(fileno(fail), &statbuf)) {
-               perror(FAILLOG_FILE);
+       if (fstat (fileno (fail), &statbuf)) {
+               perror (FAILLOG_FILE);
                return 0;
        }
        if (offset >= statbuf.st_size)
                return 0;
 
-       if (fseek(fail, offset, SEEK_SET) != 0) {
-               perror(FAILLOG_FILE);
+       if (fseek (fail, offset, SEEK_SET) != 0) {
+               perror (FAILLOG_FILE);
                return 0;
        }
-       if (fread((char *) &faillog, sizeof faillog, 1, fail) != 1) {
-               if (!feof(fail))
-                       perror(FAILLOG_FILE);
+       if (fread ((char *) &faillog, sizeof faillog, 1, fail) != 1) {
+               if (!feof (fail))
+                       perror (FAILLOG_FILE);
 
                return 0;
        }
@@ -284,96 +280,92 @@ reset_one(uid_t uid)
 
        faillog.fail_cnt = 0;
 
-       if (fseek(fail, offset, SEEK_SET) == 0
-               && fwrite((char *) &faillog, sizeof faillog, 1, fail) == 1) {
-               fflush(fail);
+       if (fseek (fail, offset, SEEK_SET) == 0
+           && fwrite ((char *) &faillog, sizeof faillog, 1, fail) == 1) {
+               fflush (fail);
                return 1;
        } else {
-               perror(FAILLOG_FILE);
+               perror (FAILLOG_FILE);
        }
        return 0;
 }
 
-static void
-setmax(int max)
+static void setmax (int max)
 {
-       struct  passwd  *pwent;
+       struct passwd *pwent;
 
        if (uflg) {
-               setmax_one(user, max);
+               setmax_one (user, max);
        } else {
-               setpwent();
-               while ((pwent = getpwent()))
-                       setmax_one(pwent->pw_uid, max);
+               setpwent ();
+               while ((pwent = getpwent ()))
+                       setmax_one (pwent->pw_uid, max);
        }
 }
 
-static void
-setmax_one(uid_t uid, int max)
+static void setmax_one (uid_t uid, int max)
 {
-       off_t   offset;
-       struct  faillog faillog;
+       off_t offset;
+       struct faillog faillog;
 
        offset = uid * sizeof faillog;
 
-       if (fseek(fail, offset, SEEK_SET) != 0) {
-               perror(FAILLOG_FILE);
+       if (fseek (fail, offset, SEEK_SET) != 0) {
+               perror (FAILLOG_FILE);
                return;
        }
-       if (fread((char *) &faillog, sizeof faillog, 1, fail) != 1) {
-               if (!feof(fail))
-                       perror(FAILLOG_FILE);
-               memzero(&faillog, sizeof faillog);
+       if (fread ((char *) &faillog, sizeof faillog, 1, fail) != 1) {
+               if (!feof (fail))
+                       perror (FAILLOG_FILE);
+               memzero (&faillog, sizeof faillog);
        }
        faillog.fail_max = max;
 
-       if (fseek(fail, offset, SEEK_SET) == 0
-               && fwrite((char *) &faillog, sizeof faillog, 1, fail) == 1)
-               fflush(fail);
+       if (fseek (fail, offset, SEEK_SET) == 0
+           && fwrite ((char *) &faillog, sizeof faillog, 1, fail) == 1)
+               fflush (fail);
        else
-               perror(FAILLOG_FILE);
+               perror (FAILLOG_FILE);
 }
 
 /*
  * XXX - this needs to be written properly some day, right now it is
  * a quick cut-and-paste hack from the above two functions.  --marekm
  */
-static void
-set_locktime(long locktime)
+static void set_locktime (long locktime)
 {
-       struct  passwd  *pwent;
+       struct passwd *pwent;
 
        if (uflg) {
-               set_locktime_one(user, locktime);
+               set_locktime_one (user, locktime);
        } else {
-               setpwent();
-               while ((pwent = getpwent()))
-                       set_locktime_one(pwent->pw_uid, locktime);
+               setpwent ();
+               while ((pwent = getpwent ()))
+                       set_locktime_one (pwent->pw_uid, locktime);
        }
 }
 
-static void
-set_locktime_one(uid_t uid, long locktime)
+static void set_locktime_one (uid_t uid, long locktime)
 {
-       off_t   offset;
-       struct  faillog faillog;
+       off_t offset;
+       struct faillog faillog;
 
        offset = uid * sizeof faillog;
 
-       if (fseek(fail, offset, SEEK_SET) != 0) {
-               perror(FAILLOG_FILE);
+       if (fseek (fail, offset, SEEK_SET) != 0) {
+               perror (FAILLOG_FILE);
                return;
        }
-       if (fread((char *) &faillog, sizeof faillog, 1, fail) != 1) {
-               if (!feof(fail))
-                       perror(FAILLOG_FILE);
-               memzero(&faillog, sizeof faillog);
+       if (fread ((char *) &faillog, sizeof faillog, 1, fail) != 1) {
+               if (!feof (fail))
+                       perror (FAILLOG_FILE);
+               memzero (&faillog, sizeof faillog);
        }
        faillog.fail_locktime = locktime;
 
-       if (fseek(fail, offset, SEEK_SET) == 0
-               && fwrite((char *) &faillog, sizeof faillog, 1, fail) == 1)
-               fflush(fail);
+       if (fseek (fail, offset, SEEK_SET) == 0
+           && fwrite ((char *) &faillog, sizeof faillog, 1, fail) == 1)
+               fflush (fail);
        else
-               perror(FAILLOG_FILE);
+               perror (FAILLOG_FILE);
 }
index d1bb023ca8fa238025b06354add24507675e3fce..ee862c74ecdc5aeb9249ad210f8a4d06689137e7 100644 (file)
@@ -17,7 +17,7 @@
  * 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
+ * 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)
@@ -30,8 +30,7 @@
 #include <config.h>
 
 #include "rcsid.h"
-RCSID(PKG_VER "$Id: gpasswd.c,v 1.17 2000/09/02 18:40:43 marekm Exp $")
-
+RCSID (PKG_VER "$Id: gpasswd.c,v 1.19 2002/01/05 15:41:43 kloczek Exp $")
 #include <sys/types.h>
 #include <stdio.h>
 #include <pwd.h>
@@ -39,61 +38,51 @@ RCSID(PKG_VER "$Id: gpasswd.c,v 1.17 2000/09/02 18:40:43 marekm Exp $")
 #include <fcntl.h>
 #include <signal.h>
 #include <errno.h>
-
 #include "prototypes.h"
 #include "defines.h"
-
 #include "groupio.h"
 #ifdef SHADOWGRP
 #include "sgroupio.h"
 #endif
-
 static char *Prog;
+
 #ifdef SHADOWGRP
 static int is_shadowgrp;
 #endif
 
 static int
-       aflg = 0,
-       Aflg = 0,
-       dflg = 0,
-       Mflg = 0,
-       rflg = 0,
-       Rflg = 0;
+ aflg = 0, Aflg = 0, dflg = 0, Mflg = 0, rflg = 0, Rflg = 0;
 
 #ifndef        RETRIES
 #define        RETRIES 3
 #endif
 
-extern int optind;
-extern char *optarg;
 #ifdef NDBM
 #ifdef SHADOWGRP
-extern int     sg_dbm_mode;
+extern int sg_dbm_mode;
 #endif
-extern int     gr_dbm_mode;
+extern int gr_dbm_mode;
 #endif
 
 /* local function prototypes */
-static void usage(void);
-static RETSIGTYPE die(int);
-static int check_list(const char *);
+static void usage (void);
+static RETSIGTYPE die (int);
+static int check_list (const char *);
 
 /*
  * usage - display usage message
  */
 
-static void
-usage(void)
+static void usage (void)
 {
-       fprintf(stderr, _("usage: %s [-r|-R] group\n"), Prog);
-       fprintf(stderr, _("       %s [-a user] group\n"), Prog);
-       fprintf(stderr, _("       %s [-d user] group\n"), Prog);
+       fprintf (stderr, _("usage: %s [-r|-R] group\n"), Prog);
+       fprintf (stderr, _("       %s [-a user] group\n"), Prog);
+       fprintf (stderr, _("       %s [-d user] group\n"), Prog);
 #ifdef SHADOWGRP
-       fprintf(stderr, _("       %s [-A user,...] [-M user,...] group\n"),
-               Prog);
+       fprintf (stderr,
+                _("       %s [-A user,...] [-M user,...] group\n"), Prog);
 #else
-       fprintf(stderr, _("       %s [-M user,...] group\n"), Prog);
+       fprintf (stderr, _("       %s [-M user,...] group\n"), Prog);
 #endif
        exit (1);
 }
@@ -101,21 +90,19 @@ usage(void)
 /*
  * 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.
+ *     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 RETSIGTYPE die (int killed)
 {
        static TERMIO sgtty;
 
        if (killed)
-               STTY(0, &sgtty);
+               STTY (0, &sgtty);
        else
-               GTTY(0, &sgtty);
+               GTTY (0, &sgtty);
 
        if (killed) {
                putchar ('\n');
@@ -131,34 +118,33 @@ die(int killed)
  *     that each listed name exists.
  */
 
-static int
-check_list(const char *users)
+static int check_list (const char *users)
 {
        const char *start, *end;
        char username[32];
-       int     errors = 0;
-       int     len;
+       int errors = 0;
+       int len;
 
        for (start = users; start && *start; start = end) {
                if ((end = strchr (start, ','))) {
                        len = end - start;
                        end++;
                } else {
-                       len = strlen(start);
+                       len = strlen (start);
                }
 
-               if (len > sizeof(username) - 1)
-                       len = sizeof(username) - 1;
-               strncpy(username, start, len);
+               if (len > sizeof (username) - 1)
+                       len = sizeof (username) - 1;
+               strncpy (username, start, len);
                username[len] = '\0';
 
                /*
                 * This user must exist.
                 */
 
-               if (!getpwnam(username)) {
-                       fprintf(stderr, _("%s: unknown user %s\n"),
-                               Prog, username);
+               if (!getpwnam (username)) {
+                       fprintf (stderr, _("%s: unknown user %s\n"),
+                                Prog, username);
                        errors++;
                }
        }
@@ -166,13 +152,11 @@ check_list(const char *users)
 }
 
 
-static void
-failure(void)
+static void failure (void)
 {
-       fprintf(stderr, _("Permission denied.\n"));
-       exit(1);
-       /*NOTREACHED*/
-}
+       fprintf (stderr, _("Permission denied.\n"));
+       exit (1);
+ /*NOTREACHED*/}
 
 
 /*
@@ -186,19 +170,19 @@ failure(void)
  *     -M user,...     make list of users the group members
  */
 
-int
-main(int argc, char **argv)
+int main (int argc, char **argv)
 {
-       int     flag;
-       char    *cp;
-       int     amroot;
-       int     retries;
+       int flag;
+       char *cp;
+       int amroot;
+       int retries;
        struct group *gr = NULL;
-       struct  group   grent;
+       struct group grent;
        static char pass[BUFSIZ];
+
 #ifdef SHADOWGRP
        struct sgrp *sg = NULL;
-       struct  sgrp    sgent;
+       struct sgrp sgent;
        char *admins = NULL;
 #endif
        struct passwd *pw = NULL;
@@ -207,17 +191,17 @@ main(int argc, char **argv)
        char *group = NULL;
        char *members = NULL;
 
-       sanitize_env();
-       setlocale(LC_ALL, "");
-       bindtextdomain(PACKAGE, LOCALEDIR);
-       textdomain(PACKAGE);
+       sanitize_env ();
+       setlocale (LC_ALL, "");
+       bindtextdomain (PACKAGE, LOCALEDIR);
+       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 interfer with this command.
+        * 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 interfer
+        * with this command.
         */
 
        amroot = getuid () == 0;
@@ -228,39 +212,41 @@ main(int argc, char **argv)
        gr_dbm_mode = O_RDWR;
 #endif
 
-       Prog = Basename(argv[0]);
+       Prog = Basename (argv[0]);
 
-       OPENLOG("gpasswd");
-       setbuf(stdout, NULL);
-       setbuf(stderr, NULL);
+       OPENLOG ("gpasswd");
+       setbuf (stdout, NULL);
+       setbuf (stderr, NULL);
 
 #ifdef SHADOWGRP
-       is_shadowgrp = sgr_file_present();
+       is_shadowgrp = sgr_file_present ();
 #endif
        while ((flag = getopt (argc, argv, "a:d:grRA:M:")) != EOF) {
                switch (flag) {
                case 'a':       /* add a user */
                        user = optarg;
-                       if (!getpwnam(user)) {
-                               fprintf(stderr, _("%s: unknown user %s\n"),
-                                       Prog, user);
-                               exit(1);
+                       if (!getpwnam (user)) {
+                               fprintf (stderr,
+                                        _("%s: unknown user %s\n"), Prog,
+                                        user);
+                               exit (1);
                        }
                        aflg++;
                        break;
 #ifdef SHADOWGRP
                case 'A':
                        if (!amroot)
-                               failure();
+                               failure ();
                        if (!is_shadowgrp) {
-                               fprintf(stderr,
-                                       _("%s: shadow group passwords required for -A\n"),
-                                       Prog);
-                               exit(2);
+                               fprintf (stderr,
+                                        _
+                                        ("%s: shadow group passwords required for -A\n"),
+                                        Prog);
+                               exit (2);
                        }
                        admins = optarg;
-                       if (check_list(admins))
-                               exit(1);
+                       if (check_list (admins))
+                               exit (1);
                        Aflg++;
                        break;
 #endif
@@ -272,10 +258,10 @@ main(int argc, char **argv)
                        break;
                case 'M':
                        if (!amroot)
-                               failure();
+                               failure ();
                        members = optarg;
-                       if (check_list(members))
-                               exit(1);
+                       if (check_list (members))
+                               exit (1);
                        Mflg++;
                        break;
                case 'r':       /* remove group password */
@@ -285,7 +271,7 @@ main(int argc, char **argv)
                        Rflg++;
                        break;
                default:
-                       usage();
+                       usage ();
                }
        }
 
@@ -297,61 +283,60 @@ main(int argc, char **argv)
                usage ();
 
        /*
-        * 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.
+        * 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();
+       pw = get_my_pwent ();
        if (!pw) {
-               fprintf(stderr, _("Who are you?\n"));
-               exit(1);
+               fprintf (stderr, _("Who are you?\n"));
+               exit (1);
        }
-       myname = xstrdup(pw->pw_name);
+       myname = xstrdup (pw->pw_name);
 
        /*
-        * Get the name of the group that is being affected.  The group
-        * entry will be completely replicated so it may be modified
-        * later on.
+        * Get the name of the group that is being affected. The group entry
+        * will be completely replicated so it may be modified later on.
         */
 
        /*
-        * XXX - should get the entry using gr_locate() and modify
-        * that, getgrnam() could give us a NIS group.  --marekm
+        * XXX - should get the entry using gr_locate() and modify that,
+        * getgrnam() could give us a NIS group.  --marekm
         */
 
-       if (! (group = argv[optind]))
+       if (!(group = argv[optind]))
                usage ();
 
-       if (! (gr = getgrnam (group))) {
+       if (!(gr = getgrnam (group))) {
                fprintf (stderr, _("unknown group: %s\n"), group);
                exit (1);
        }
        grent = *gr;
-       grent.gr_name = xstrdup(gr->gr_name);
-       grent.gr_passwd = xstrdup(gr->gr_passwd);
+       grent.gr_name = xstrdup (gr->gr_name);
+       grent.gr_passwd = xstrdup (gr->gr_passwd);
 
-       grent.gr_mem = dup_list(gr->gr_mem);
+       grent.gr_mem = dup_list (gr->gr_mem);
 #ifdef SHADOWGRP
        if ((sg = getsgnam (group))) {
                sgent = *sg;
-               sgent.sg_name = xstrdup(sg->sg_name);
-               sgent.sg_passwd = xstrdup(sg->sg_passwd);
+               sgent.sg_name = xstrdup (sg->sg_name);
+               sgent.sg_passwd = xstrdup (sg->sg_passwd);
 
-               sgent.sg_mem = dup_list(sg->sg_mem);
-               sgent.sg_adm = dup_list(sg->sg_adm);
+               sgent.sg_mem = dup_list (sg->sg_mem);
+               sgent.sg_adm = dup_list (sg->sg_adm);
        } else {
-               sgent.sg_name = xstrdup(group);
+               sgent.sg_name = xstrdup (group);
                sgent.sg_passwd = grent.gr_passwd;
-               grent.gr_passwd = "!";  /* XXX warning: const */
+               grent.gr_passwd = "!";  /* XXX warning: const */
 
-               sgent.sg_mem = dup_list(grent.gr_mem);
+               sgent.sg_mem = dup_list (grent.gr_mem);
 
-               sgent.sg_adm = (char **) xmalloc(sizeof(char *) * 2);
+               sgent.sg_adm = (char **) xmalloc (sizeof (char *) * 2);
 #ifdef FIRST_MEMBER_IS_ADMIN
                if (sgent.sg_mem[0]) {
-                       sgent.sg_adm[0] = xstrdup(sgent.sg_mem[0]);
+                       sgent.sg_adm[0] = xstrdup (sgent.sg_mem[0]);
                        sgent.sg_adm[1] = 0;
                } else
 #endif
@@ -361,160 +346,163 @@ main(int argc, char **argv)
        }
 
        /*
-        * 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.
+        * 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(sgent.sg_adm, myname))
-               failure();
-#else  /* ! SHADOWGRP */
+       if (!amroot && !is_on_list (sgent.sg_adm, myname))
+               failure ();
+#else                          /* ! SHADOWGRP */
 
 #ifdef FIRST_MEMBER_IS_ADMIN
        /*
-        * The policy here for changing a group is that 1) you must bes
-        * 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.
+        * The policy here for changing a group is that 1) you must bes 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.
         */
 
-       if (! amroot) {
+       if (!amroot) {
                if (grent.gr_mem[0] == (char *) 0)
-                       failure();
+                       failure ();
 
-               if (strcmp(grent.gr_mem[0], myname) != 0)
-                       failure();
+               if (strcmp (grent.gr_mem[0], myname) != 0)
+                       failure ();
        }
 #else
        /*
-        * 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
+        * 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)
-               failure();
+               failure ();
 #endif
 
-#endif /* SHADOWGRP */
+#endif                         /* SHADOWGRP */
 
        /*
-        * Removing a password is straight forward.  Just set the
-        * password field to a "".
+        * Removing a password is straight forward. Just set the password
+        * field to a "".
         */
 
        if (rflg) {
-               grent.gr_passwd = "";  /* XXX warning: const */
+               grent.gr_passwd = "";   /* XXX warning: const */
 #ifdef SHADOWGRP
-               sgent.sg_passwd = "";  /* XXX warning: const */
+               sgent.sg_passwd = "";   /* XXX warning: const */
 #endif
-               SYSLOG((LOG_INFO, "remove password from group %s by %s\n", group, myname));
+               SYSLOG ((LOG_INFO, "remove password from group %s by %s",
+                        group, myname));
                goto output;
        } else if (Rflg) {
                /*
-                * Same thing for restricting the group.  Set the password
+                * Same thing for restricting the group. Set the password
                 * field to "!".
                 */
 
-               grent.gr_passwd = "!";  /* XXX warning: const */
+               grent.gr_passwd = "!";  /* XXX warning: const */
 #ifdef SHADOWGRP
-               sgent.sg_passwd = "!";  /* XXX warning: const */
+               sgent.sg_passwd = "!";  /* XXX warning: const */
 #endif
-               SYSLOG((LOG_INFO, "restrict access to group %s by %s\n", group, myname));
+               SYSLOG ((LOG_INFO, "restrict access to group %s by %s",
+                        group, myname));
                goto output;
        }
 
        /*
-        * Adding a member to a member list is pretty straightforward
-        * as well.  Call the appropriate routine and split.
+        * 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);
+               printf (_("Adding user %s to group %s\n"), user, group);
                grent.gr_mem = add_list (grent.gr_mem, user);
 #ifdef SHADOWGRP
                sgent.sg_mem = add_list (sgent.sg_mem, user);
 #endif
-               SYSLOG((LOG_INFO, "add member %s to group %s by %s\n", user, group, myname));
+               SYSLOG ((LOG_INFO, "add member %s to group %s by %s", user,
+                        group, myname));
                goto output;
        }
 
        /*
-        * Removing a member from the member list is the same deal
-        * as adding one, except the routine is different.
+        * Removing a member from the member list is the same deal as adding
+        * one, except the routine is different.
         */
 
        if (dflg) {
-               int     removed = 0;
+               int removed = 0;
 
-               printf(_("Removing user %s from group %s\n"), user, group);
+               printf (_("Removing user %s from group %s\n"), user,
+                       group);
 
-               if (is_on_list(grent.gr_mem, user)) {
+               if (is_on_list (grent.gr_mem, user)) {
                        removed = 1;
                        grent.gr_mem = del_list (grent.gr_mem, user);
                }
 #ifdef SHADOWGRP
-               if (is_on_list(sgent.sg_mem, user)) {
+               if (is_on_list (sgent.sg_mem, user)) {
                        removed = 1;
                        sgent.sg_mem = del_list (sgent.sg_mem, user);
                }
 #endif
-               if (! removed) {
-                       fprintf(stderr, _("%s: unknown member %s\n"),
-                               Prog, user);
+               if (!removed) {
+                       fprintf (stderr, _("%s: unknown member %s\n"),
+                                Prog, user);
                        exit (1);
                }
-               SYSLOG((LOG_INFO, "remove member %s from group %s by %s\n",
-                       user, group, myname));
+               SYSLOG ((LOG_INFO, "remove member %s from group %s by %s",
+                        user, group, myname));
                goto output;
        }
-
 #ifdef SHADOWGRP
        /*
-        * Replacing the entire list of administators is simple.  Check the
-        * list to make sure everyone is a real user.  Then slap the new
-        * list in place.
+        * Replacing the entire list of administators is simple. Check the
+        * list to make sure everyone is a real user. Then slap the new list
+        * in place.
         */
 
        if (Aflg) {
-               SYSLOG((LOG_INFO, "set administrators of %s to %s\n",
-                               group, admins));
-               sgent.sg_adm = comma_to_list(admins);
+               SYSLOG ((LOG_INFO, "set administrators of %s to %s",
+                        group, admins));
+               sgent.sg_adm = comma_to_list (admins);
                if (!Mflg)
                        goto output;
        }
 #endif
 
        /*
-        * 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.
+        * 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) {
-               SYSLOG((LOG_INFO,"set members of %s to %s\n",group,members));
+               SYSLOG ((LOG_INFO, "set members of %s to %s", group,
+                        members));
 #ifdef SHADOWGRP
-               sgent.sg_mem = comma_to_list(members);
+               sgent.sg_mem = comma_to_list (members);
 #endif
-               grent.gr_mem = comma_to_list(members);
+               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 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) || ! isatty (1)) {
-               fprintf(stderr, _("%s: Not a tty\n"), Prog);
+       if (!isatty (0) || !isatty (1)) {
+               fprintf (stderr, _("%s: Not a tty\n"), Prog);
                exit (1);
        }
 
-       die (0);                        /* save tty modes */
+       die (0);                /* save tty modes */
 
        signal (SIGHUP, die);
        signal (SIGINT, die);
@@ -525,137 +513,140 @@ main(int argc, char **argv)
 #endif
 
        /*
-        * 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.
+        * 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);
+       printf (_("Changing the password for group %s\n"), group);
 
        for (retries = 0; retries < RETRIES; retries++) {
-               if (! (cp = getpass(_("New Password: "))))
+               if (!(cp = getpass (_("New Password: "))))
                        exit (1);
 
-               STRFCPY(pass, cp);
-               strzero(cp);
-               if (! (cp = getpass (_("Re-enter new password: "))))
+               STRFCPY (pass, cp);
+               strzero (cp);
+               if (!(cp = getpass (_("Re-enter new password: "))))
                        exit (1);
 
-               if (strcmp(pass, cp) == 0) {
-                       strzero(cp);
+               if (strcmp (pass, cp) == 0) {
+                       strzero (cp);
                        break;
                }
 
-               strzero(cp);
-               memzero(pass, sizeof pass);
+               strzero (cp);
+               memzero (pass, sizeof pass);
 
                if (retries + 1 < RETRIES)
-                       puts(_("They don't match; try again"));
+                       puts (_("They don't match; try again"));
        }
 
        if (retries == RETRIES) {
-               fprintf(stderr, _("%s: Try again later\n"), Prog);
-               exit(1);
+               fprintf (stderr, _("%s: Try again later\n"), Prog);
+               exit (1);
        }
 
-       cp = pw_encrypt(pass, crypt_make_salt());
-       memzero(pass, sizeof pass);
+       cp = pw_encrypt (pass, crypt_make_salt ());
+       memzero (pass, sizeof pass);
 #ifdef SHADOWGRP
        if (is_shadowgrp)
                sgent.sg_passwd = cp;
        else
 #endif
-       grent.gr_passwd = cp;
-       SYSLOG((LOG_INFO, "change the password for group %s by %s\n", group, myname));
+               grent.gr_passwd = cp;
+       SYSLOG ((LOG_INFO, "change the password for group %s by %s", group,
+                myname));
 
        /*
-        * 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.
+        * 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)) {
-               fprintf(stderr, _("Cannot change ID to root.\n"));
-               SYSLOG((LOG_ERR, "can't setuid(0)"));
-               closelog();
-               exit(1);
+      output:
+       if (setuid (0)) {
+               fprintf (stderr, _("Cannot change ID to root.\n"));
+               SYSLOG ((LOG_ERR, "can't setuid(0)"));
+               closelog ();
+               exit (1);
        }
-       pwd_init();
+       pwd_init ();
 
-       if (! gr_lock ()) {
-               fprintf(stderr, _("%s: can't get lock\n"), Prog);
-               SYSLOG((LOG_WARN, "failed to get lock for /etc/group\n"));
+       if (!gr_lock ()) {
+               fprintf (stderr, _("%s: can't get lock\n"), Prog);
+               SYSLOG ((LOG_WARN, "failed to get lock for /etc/group"));
                exit (1);
        }
 #ifdef SHADOWGRP
-       if (is_shadowgrp && ! sgr_lock ()) {
-               fprintf(stderr, _("%s: can't get shadow lock\n"), Prog);
-               SYSLOG((LOG_WARN, "failed to get lock for /etc/gshadow\n"));
+       if (is_shadowgrp && !sgr_lock ()) {
+               fprintf (stderr, _("%s: can't get shadow lock\n"), Prog);
+               SYSLOG ((LOG_WARN, "failed to get lock for /etc/gshadow"));
                exit (1);
        }
 #endif
-       if (! gr_open (O_RDWR)) {
-               fprintf(stderr, _("%s: can't open file\n"), Prog);
-               SYSLOG((LOG_WARN, "cannot open /etc/group\n"));
+       if (!gr_open (O_RDWR)) {
+               fprintf (stderr, _("%s: can't open file\n"), Prog);
+               SYSLOG ((LOG_WARN, "cannot open /etc/group"));
                exit (1);
        }
 #ifdef SHADOWGRP
-       if (is_shadowgrp && ! sgr_open (O_RDWR)) {
-               fprintf(stderr, _("%s: can't open shadow file\n"), Prog);
-               SYSLOG((LOG_WARN, "cannot open /etc/gshadow\n"));
+       if (is_shadowgrp && !sgr_open (O_RDWR)) {
+               fprintf (stderr, _("%s: can't open shadow file\n"), Prog);
+               SYSLOG ((LOG_WARN, "cannot open /etc/gshadow"));
                exit (1);
        }
 #endif
-       if (! gr_update (&grent)) {
-               fprintf(stderr, _("%s: can't update entry\n"), Prog);
-               SYSLOG((LOG_WARN, "cannot update /etc/group\n"));
+       if (!gr_update (&grent)) {
+               fprintf (stderr, _("%s: can't update entry\n"), Prog);
+               SYSLOG ((LOG_WARN, "cannot update /etc/group"));
                exit (1);
        }
 #ifdef SHADOWGRP
-       if (is_shadowgrp && ! sgr_update (&sgent)) {
-               fprintf(stderr, _("%s: can't update shadow entry\n"), Prog);
-               SYSLOG((LOG_WARN, "cannot update /etc/gshadow\n"));
+       if (is_shadowgrp && !sgr_update (&sgent)) {
+               fprintf (stderr, _("%s: can't update shadow entry\n"),
+                        Prog);
+               SYSLOG ((LOG_WARN, "cannot update /etc/gshadow"));
                exit (1);
        }
 #endif
-       if (! gr_close ()) {
-               fprintf(stderr, _("%s: can't re-write file\n"), Prog);
-               SYSLOG((LOG_WARN, "cannot re-write /etc/group\n"));
+       if (!gr_close ()) {
+               fprintf (stderr, _("%s: can't re-write file\n"), Prog);
+               SYSLOG ((LOG_WARN, "cannot re-write /etc/group"));
                exit (1);
        }
 #ifdef SHADOWGRP
-       if (is_shadowgrp && ! sgr_close ()) {
-               fprintf(stderr, _("%s: can't re-write shadow file\n"), Prog);
-               SYSLOG((LOG_WARN, "cannot re-write /etc/gshadow\n"));
+       if (is_shadowgrp && !sgr_close ()) {
+               fprintf (stderr, _("%s: can't re-write shadow file\n"),
+                        Prog);
+               SYSLOG ((LOG_WARN, "cannot re-write /etc/gshadow"));
                exit (1);
        }
        if (is_shadowgrp)
                sgr_unlock ();
 #endif
-       if (! gr_unlock ()) {
-               fprintf(stderr, _("%s: can't unlock file\n"), Prog);
+       if (!gr_unlock ()) {
+               fprintf (stderr, _("%s: can't unlock file\n"), Prog);
                exit (1);
        }
 #ifdef NDBM
-       if (gr_dbm_present() && ! gr_dbm_update (&grent)) {
-               fprintf(stderr, _("%s: can't update DBM files\n"), Prog);
-               SYSLOG((LOG_WARN, "cannot update /etc/group DBM files\n"));
+       if (gr_dbm_present () && !gr_dbm_update (&grent)) {
+               fprintf (stderr, _("%s: can't update DBM files\n"), Prog);
+               SYSLOG ((LOG_WARN, "cannot update /etc/group DBM files"));
                exit (1);
        }
        endgrent ();
 #ifdef SHADOWGRP
-       if (is_shadowgrp && sg_dbm_present() && ! sg_dbm_update (&sgent)) {
-               fprintf(stderr, _("%s: can't update DBM shadow files\n"), Prog);
-               SYSLOG((LOG_WARN, "cannot update /etc/gshadow DBM files\n"));
+       if (is_shadowgrp && sg_dbm_present () && !sg_dbm_update (&sgent)) {
+               fprintf (stderr, _("%s: can't update DBM shadow files\n"),
+                        Prog);
+               SYSLOG ((LOG_WARN,
+                        "cannot update /etc/gshadow DBM files"));
                exit (1);
        }
        endsgent ();
 #endif
 #endif
        exit (0);
-       /*NOTREACHED*/
-}
+ /*NOTREACHED*/}
index b1e77c087dff5c4649ba0c1494b5b35d9d82c3fe..6719fd3d82377e88215750dac79478d3aefd0843 100644 (file)
@@ -17,7 +17,7 @@
  * 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
+ * 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)
 #include <config.h>
 
 #include "rcsid.h"
-RCSID(PKG_VER "$Id: groupadd.c,v 1.18 2000/10/09 19:02:20 kloczek Exp $")
-
+RCSID (PKG_VER "$Id: groupadd.c,v 1.22 2002/01/06 14:09:07 kloczek Exp $")
 #include <sys/types.h>
 #include <stdio.h>
 #include <grp.h>
 #include <ctype.h>
 #include <fcntl.h>
-
 #include "defines.h"
 #include "prototypes.h"
 #include "chkname.h"
-
 #include "getdef.h"
-
 #include "groupio.h"
-
 #ifdef SHADOWGRP
 #include "sgroupio.h"
-
 #ifdef USE_PAM
 #include <security/pam_appl.h>
 #include <security/pam_misc.h>
 #include <pwd.h>
-#endif /* USE_PAM */
-
+#endif                         /* USE_PAM */
 static int is_shadow_grp;
 #endif
 
@@ -69,62 +62,58 @@ static int is_shadow_grp;
 #define E_NAME_IN_USE  9       /* group name nut unique */
 #define E_GRP_UPDATE   10      /* can't update group file */
 
-static char    *group_name;
-static gid_t   group_id;
+static char *group_name;
+static gid_t group_id;
 static char *empty_list = NULL;
 
-static char    *Prog;
+static char *Prog;
 
-static int oflg = 0; /* permit non-unique group ID to be specified with -g */
-static int gflg = 0; /* ID value for the new group */
-static int fflg = 0; /* if group already exists, do nothing and exit(0) */
+static int oflg = 0;           /* permit non-unique group ID to be specified with -g */
+static int gflg = 0;           /* ID value for the new group */
+static int fflg = 0;           /* if group already exists, do nothing and exit(0) */
 
 #ifdef NDBM
-extern int     gr_dbm_mode;
-extern int     sg_dbm_mode;
+extern int gr_dbm_mode;
+extern int sg_dbm_mode;
 #endif
 
-extern int optind;
-extern char *optarg;
-
 /* local function prototypes */
-static void usage(void);
-static void new_grent(struct group *);
+static void usage (void);
+static void new_grent (struct group *);
+
 #ifdef SHADOWGRP
-static void new_sgent(struct sgrp *);
+static void new_sgent (struct sgrp *);
 #endif
-static void grp_update(void);
-static void find_new_gid(void);
-static void check_new_name(void);
-static void process_flags(int, char **);
-static void close_files(void);
-static void open_files(void);
-static void fail_exit(int);
+static void grp_update (void);
+static void find_new_gid (void);
+static void check_new_name (void);
+static void process_flags (int, char **);
+static void close_files (void);
+static void open_files (void);
+static void fail_exit (int);
 
 /*
  * usage - display usage message and exit
  */
 
-static void
-usage(void)
+static void usage (void)
 {
-       fprintf(stderr, _("usage: groupadd [-g gid [-o]] group\n"));
-       exit(E_USAGE);
+       fprintf (stderr, _("usage: groupadd [-g gid [-o]] group\n"));
+       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.
+ *     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)
+static void new_grent (struct group *grent)
 {
-       memzero(grent, sizeof *grent);
+       memzero (grent, sizeof *grent);
        grent->gr_name = group_name;
-       grent->gr_passwd = SHADOW_PASSWD_STRING;  /* XXX warning: const */
+       grent->gr_passwd = SHADOW_PASSWD_STRING;        /* XXX warning: const */
        grent->gr_gid = group_id;
        grent->gr_mem = &empty_list;
 }
@@ -133,20 +122,19 @@ new_grent(struct group *grent)
 /*
  * 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.
+ *     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)
+static void new_sgent (struct sgrp *sgent)
 {
-       memzero(sgent, sizeof *sgent);
+       memzero (sgent, sizeof *sgent);
        sgent->sg_name = group_name;
-       sgent->sg_passwd = "!";  /* XXX warning: const */
+       sgent->sg_passwd = "!"; /* XXX warning: const */
        sgent->sg_adm = &empty_list;
        sgent->sg_mem = &empty_list;
 }
-#endif /* SHADOWGRP */
+#endif                         /* SHADOWGRP */
 
 /*
  * grp_update - add new group file entries
@@ -154,13 +142,13 @@ new_sgent(struct sgrp *sgent)
  *     grp_update() writes the new records to the group files.
  */
 
-static void
-grp_update(void)
+static void grp_update (void)
 {
-       struct  group   grp;
+       struct group grp;
+
 #ifdef SHADOWGRP
-       struct  sgrp    sgrp;
-#endif /* SHADOWGRP */
+       struct sgrp sgrp;
+#endif                         /* SHADOWGRP */
 
        /*
         * Create the initial entries for this new group.
@@ -169,15 +157,16 @@ grp_update(void)
        new_grent (&grp);
 #ifdef SHADOWGRP
        new_sgent (&sgrp);
-#endif /* SHADOWGRP */
+#endif                         /* SHADOWGRP */
 
        /*
         * Write out the new group file entry.
         */
 
-       if (! gr_update (&grp)) {
-               fprintf(stderr, _("%s: error adding new group entry\n"), Prog);
-               fail_exit(E_GRP_UPDATE);
+       if (!gr_update (&grp)) {
+               fprintf (stderr, _("%s: error adding new group entry\n"),
+                        Prog);
+               fail_exit (E_GRP_UPDATE);
        }
 #ifdef NDBM
 
@@ -185,12 +174,13 @@ grp_update(void)
         * Update the DBM group file with the new entry as well.
         */
 
-       if (gr_dbm_present() && ! gr_dbm_update (&grp)) {
-               fprintf(stderr, _("%s: cannot add new dbm group entry\n"), Prog);
-               fail_exit(E_GRP_UPDATE);
+       if (gr_dbm_present () && !gr_dbm_update (&grp)) {
+               fprintf (stderr, _("%s: cannot add new dbm group entry\n"),
+                        Prog);
+               fail_exit (E_GRP_UPDATE);
        }
        endgrent ();
-#endif /* NDBM */
+#endif                         /* NDBM */
 
 #ifdef SHADOWGRP
 
@@ -198,9 +188,10 @@ grp_update(void)
         * Write out the new shadow group entries as well.
         */
 
-       if (is_shadow_grp && ! sgr_update (&sgrp)) {
-               fprintf(stderr, _("%s: error adding new group entry\n"), Prog);
-               fail_exit(E_GRP_UPDATE);
+       if (is_shadow_grp && !sgr_update (&sgrp)) {
+               fprintf (stderr, _("%s: error adding new group entry\n"),
+                        Prog);
+               fail_exit (E_GRP_UPDATE);
        }
 #ifdef NDBM
 
@@ -208,15 +199,16 @@ grp_update(void)
         * Update the DBM group file with the new entry as well.
         */
 
-       if (is_shadow_grp && sg_dbm_present() && ! sg_dbm_update (&sgrp)) {
-               fprintf(stderr, _("%s: cannot add new dbm group entry\n"), Prog);
-               fail_exit(E_GRP_UPDATE);
+       if (is_shadow_grp && sg_dbm_present () && !sg_dbm_update (&sgrp)) {
+               fprintf (stderr, _("%s: cannot add new dbm group entry\n"),
+                        Prog);
+               fail_exit (E_GRP_UPDATE);
        }
        endsgent ();
-#endif /* NDBM */
-#endif /* SHADOWGRP */
-       SYSLOG((LOG_INFO, "new group: name=%s, gid=%d\n",
-               group_name, group_id));
+#endif                         /* NDBM */
+#endif                         /* SHADOWGRP */
+       SYSLOG ((LOG_INFO, "new group: name=%s, gid=%u",
+                group_name, (unsigned int)group_id));
 }
 
 /*
@@ -227,60 +219,59 @@ grp_update(void)
  *     uniqueness.
  */
 
-static void
-find_new_gid(void)
+static void find_new_gid (void)
 {
        const struct group *grp;
        gid_t gid_min, gid_max;
 
-       gid_min = getdef_num("GID_MIN", 100);
-       gid_max = getdef_num("GID_MAX", 60000);
+       gid_min = getdef_unum ("GID_MIN", 100);
+       gid_max = getdef_unum ("GID_MAX", 60000);
 
        /*
         * Start with some GID value if the user didn't provide us with
         * one already.
         */
 
-       if (! gflg)
+       if (!gflg)
                group_id = gid_min;
 
        /*
-        * Search the entire group file, either looking for this
-        * GID (if the user specified one with -g) or looking for the
-        * largest unused value.
+        * Search the entire group file, either looking for this GID (if the
+        * user specified one with -g) or looking for the largest unused
+        * value.
         */
 
 #ifdef NO_GETGRENT
-       gr_rewind();
-       while ((grp = gr_next())) {
+       gr_rewind ();
+       while ((grp = gr_next ())) {
 #else
-       setgrent();
-       while ((grp = getgrent())) {
+       setgrent ();
+       while ((grp = getgrent ())) {
 #endif
-               if (strcmp(group_name, grp->gr_name) == 0) {
+               if (strcmp (group_name, grp->gr_name) == 0) {
                        if (fflg) {
-                               fail_exit(E_SUCCESS);
+                               fail_exit (E_SUCCESS);
                        }
-                       fprintf(stderr, _("%s: name %s is not unique\n"),
-                               Prog, group_name);
-                       fail_exit(E_NAME_IN_USE);
+                       fprintf (stderr, _("%s: name %s is not unique\n"),
+                                Prog, group_name);
+                       fail_exit (E_NAME_IN_USE);
                }
                if (gflg && group_id == grp->gr_gid) {
                        if (fflg) {
                                /* turn off -g and search again */
                                gflg = 0;
 #ifdef NO_GETGRENT
-                               gr_rewind();
+                               gr_rewind ();
 #else
-                               setgrent();
+                               setgrent ();
 #endif
                                continue;
                        }
-                       fprintf(stderr, _("%s: gid %ld is not unique\n"),
-                               Prog, (long) group_id);
-                       fail_exit(E_GID_IN_USE);
+                       fprintf (stderr, _("%s: gid %u is not unique\n"),
+                                Prog, (unsigned int) group_id);
+                       fail_exit (E_GID_IN_USE);
                }
-               if (! gflg && grp->gr_gid >= group_id) {
+               if (!gflg && grp->gr_gid >= group_id) {
                        if (grp->gr_gid > gid_max)
                                continue;
                        group_id = grp->gr_gid + 1;
@@ -289,20 +280,20 @@ find_new_gid(void)
        if (!gflg && group_id == gid_max + 1) {
                for (group_id = gid_min; group_id < gid_max; group_id++) {
 #ifdef NO_GETGRENT
-                       gr_rewind();
-                       while ((grp = gr_next()) && grp->gr_gid != group_id)
-                               ;
+                       gr_rewind ();
+                       while ((grp = gr_next ())
+                              && grp->gr_gid != group_id);
                        if (!grp)
                                break;
 #else
-                       if (!getgrgid(group_id))
+                       if (!getgrgid (group_id))
                                break;
 #endif
                }
                if (group_id == gid_max) {
-                       fprintf(stderr, _("%s: can't get unique gid\n"),
-                               Prog);
-                       fail_exit(E_GID_IN_USE);
+                       fprintf (stderr, _("%s: can't get unique gid\n"),
+                                Prog);
+                       fail_exit (E_GID_IN_USE);
                }
        }
 }
@@ -310,52 +301,51 @@ find_new_gid(void)
 /*
  * check_new_name - check the new name for validity
  *
- *     check_new_name() insures that the new name doesn't contain
- *     any illegal characters.
+ *     check_new_name() insures that the new name doesn't contain any
+ *     illegal characters.
  */
 
-static void
-check_new_name(void)
+static void check_new_name (void)
 {
-       if (check_group_name(group_name))
+       if (check_group_name (group_name))
                return;
 
        /*
         * All invalid group names land here.
         */
 
-       fprintf(stderr, _("%s: %s is a not a valid group name\n"),
-               Prog, group_name);
+       fprintf (stderr, _("%s: %s is a not a valid group name\n"),
+                Prog, group_name);
 
-       exit(E_BAD_ARG);
+       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.
+ *     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)
+static void process_flags (int argc, char **argv)
 {
        char *cp;
        int arg;
 
-       while ((arg = getopt(argc, argv, "og:O:f")) != EOF) {
+       while ((arg = getopt (argc, argv, "og:O:f")) != EOF) {
                switch (arg) {
                case 'g':
                        gflg++;
-                       if (! isdigit (optarg[0]))
+                       if (!isdigit (optarg[0]))
                                usage ();
 
-                       group_id = strtol(optarg, &cp, 10);
+                       group_id = strtoul (optarg, &cp, 10);
                        if (*cp != '\0') {
-                               fprintf(stderr, _("%s: invalid group %s\n"),
-                                       Prog, optarg);
-                               fail_exit(E_BAD_ARG);
+                               fprintf (stderr,
+                                        _("%s: invalid group %s\n"), Prog,
+                                        optarg);
+                               fail_exit (E_BAD_ARG);
                        }
                        break;
                case 'o':
@@ -367,67 +357,68 @@ process_flags(int argc, char **argv)
                         * example: -O GID_MIN=100 -O GID_MAX=499
                         * note: -O GID_MIN=10,GID_MAX=499 doesn't work yet
                         */
-                       cp = strchr(optarg, '=');
+                       cp = strchr (optarg, '=');
                        if (!cp) {
-                               fprintf(stderr,
-                                       _("%s: -O requires NAME=VALUE\n"),
-                                       Prog);
-                               exit(E_BAD_ARG);
+                               fprintf (stderr,
+                                        _("%s: -O requires NAME=VALUE\n"),
+                                        Prog);
+                               exit (E_BAD_ARG);
                        }
                        /* terminate name, point to value */
                        *cp++ = '\0';
-                       if (putdef_str(optarg, cp) < 0)
-                               exit(E_BAD_ARG);
+                       if (putdef_str (optarg, cp) < 0)
+                               exit (E_BAD_ARG);
                        break;
                case 'f':
                        /*
                         * "force" - do nothing, just exit(0), if the
-                        * specified group already exists.  With -g, if
+                        * 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.
+                        * (unique) gid (turn off -g). Based on the RedHat's
+                        * patch from shadow-utils-970616-9.
                         */
                        fflg++;
                        break;
                default:
-                       usage();
+                       usage ();
                }
        }
 
        if (oflg && !gflg)
-               usage();
+               usage ();
 
        if (optind != argc - 1)
-               usage();
+               usage ();
 
        group_name = argv[argc - 1];
-       check_new_name();
+       check_new_name ();
 }
 
 /*
  * 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.
+ *     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)
+static void close_files (void)
 {
-       if (!gr_close()) {
-               fprintf(stderr, _("%s: cannot rewrite group file\n"), Prog);
-               fail_exit(E_GRP_UPDATE);
+       if (!gr_close ()) {
+               fprintf (stderr, _("%s: cannot rewrite group file\n"),
+                        Prog);
+               fail_exit (E_GRP_UPDATE);
        }
-       gr_unlock();
+       gr_unlock ();
 #ifdef SHADOWGRP
-       if (is_shadow_grp && !sgr_close()) {
-               fprintf(stderr, _("%s: cannot rewrite shadow group file\n"),
-                       Prog);
-               fail_exit(E_GRP_UPDATE);
+       if (is_shadow_grp && !sgr_close ()) {
+               fprintf (stderr,
+                        _("%s: cannot rewrite shadow group file\n"),
+                        Prog);
+               fail_exit (E_GRP_UPDATE);
        }
        if (is_shadow_grp)
                sgr_unlock ();
-#endif /* SHADOWGRP */
+#endif                         /* SHADOWGRP */
 }
 
 /*
@@ -436,37 +427,39 @@ close_files(void)
  *     open_files() opens the two group files.
  */
 
-static void
-open_files(void)
+static void open_files (void)
 {
-       if (! gr_lock ()) {
-               fprintf(stderr, _("%s: unable to lock group file\n"), Prog);
-               exit(E_GRP_UPDATE);
+       if (!gr_lock ()) {
+               fprintf (stderr, _("%s: unable to lock group file\n"),
+                        Prog);
+               exit (E_GRP_UPDATE);
        }
-       if (! gr_open (O_RDWR)) {
-               fprintf(stderr, _("%s: unable to open group file\n"), Prog);
-               fail_exit(E_GRP_UPDATE);
+       if (!gr_open (O_RDWR)) {
+               fprintf (stderr, _("%s: unable to open group file\n"),
+                        Prog);
+               fail_exit (E_GRP_UPDATE);
        }
 #ifdef SHADOWGRP
-       if (is_shadow_grp && ! sgr_lock ()) {
-               fprintf(stderr, _("%s: unable to lock shadow group file\n"),
-                       Prog);
-               fail_exit(E_GRP_UPDATE);
+       if (is_shadow_grp && !sgr_lock ()) {
+               fprintf (stderr,
+                        _("%s: unable to lock shadow group file\n"),
+                        Prog);
+               fail_exit (E_GRP_UPDATE);
        }
-       if (is_shadow_grp && ! sgr_open (O_RDWR)) {
-               fprintf(stderr, _("%s: unable to open shadow group file\n"),
-                       Prog);
-               fail_exit(E_GRP_UPDATE);
+       if (is_shadow_grp && !sgr_open (O_RDWR)) {
+               fprintf (stderr,
+                        _("%s: unable to open shadow group file\n"),
+                        Prog);
+               fail_exit (E_GRP_UPDATE);
        }
-#endif /* SHADOWGRP */
+#endif                         /* SHADOWGRP */
 }
 
 /*
  * fail_exit - exit with an error code after unlocking files
  */
 
-static void
-fail_exit(int code)
+static void fail_exit (int code)
 {
        (void) gr_unlock ();
 #ifdef SHADOWGRP
@@ -478,17 +471,16 @@ fail_exit(int code)
 
 #ifdef USE_PAM
 static struct pam_conv conv = {
-    misc_conv,
-    NULL
+       misc_conv,
+       NULL
 };
-#endif /* USE_PAM */
+#endif                         /* USE_PAM */
 
 /*
  * main - groupadd command
  */
 
-int
-main(int argc, char **argv)
+int main (int argc, char **argv)
 {
 #ifdef USE_PAM
        pam_handle_t *pamh = NULL;
@@ -500,73 +492,76 @@ main(int argc, char **argv)
         * Get my name so that I can use it to report errors.
         */
 
-       Prog = Basename(argv[0]);
+       Prog = Basename (argv[0]);
 
-       setlocale(LC_ALL, "");
-       bindtextdomain(PACKAGE, LOCALEDIR);
-       textdomain(PACKAGE);
+       setlocale (LC_ALL, "");
+       bindtextdomain (PACKAGE, LOCALEDIR);
+       textdomain (PACKAGE);
 
 #ifdef USE_PAM
        retval = PAM_SUCCESS;
 
-       pampw = getpwuid(getuid());
+       pampw = getpwuid (getuid ());
        if (pampw == NULL) {
                retval = PAM_USER_UNKNOWN;
        }
 
        if (retval == PAM_SUCCESS) {
-               retval = pam_start("shadow", pampw->pw_name, &conv, &pamh);
+               retval =
+                   pam_start ("shadow", pampw->pw_name, &conv, &pamh);
        }
 
        if (retval == PAM_SUCCESS) {
-               retval = pam_authenticate(pamh, 0);
+               retval = pam_authenticate (pamh, 0);
                if (retval != PAM_SUCCESS) {
-                       pam_end(pamh, retval);
+                       pam_end (pamh, retval);
                }
        }
 
        if (retval == PAM_SUCCESS) {
-               retval = pam_acct_mgmt(pamh, 0);
+               retval = pam_acct_mgmt (pamh, 0);
                if (retval != PAM_SUCCESS) {
-                       pam_end(pamh, retval);
+                       pam_end (pamh, retval);
                }
        }
 
        if (retval != PAM_SUCCESS) {
-               fprintf (stderr, _("%s: PAM authentication failed\n"), Prog);
+               fprintf (stderr, _("%s: PAM authentication failed\n"),
+                        Prog);
                exit (1);
        }
-#endif /* USE_PAM */
+#endif                         /* USE_PAM */
 
-       OPENLOG(Prog);
+       OPENLOG (Prog);
 
 #ifdef SHADOWGRP
-       is_shadow_grp = sgr_file_present();
+       is_shadow_grp = sgr_file_present ();
 #endif
 
        /*
-        * The open routines for the DBM files don't use read-write
-        * as the mode, so we have to clue them in.
+        * The open routines for the DBM files don't use read-write as the
+        * mode, so we have to clue them in.
         */
 
 #ifdef NDBM
        gr_dbm_mode = O_RDWR;
 #ifdef SHADOWGRP
        sg_dbm_mode = O_RDWR;
-#endif /* SHADOWGRP */
-#endif /* NDBM */
-       process_flags(argc, argv);
+#endif                         /* SHADOWGRP */
+#endif                         /* NDBM */
+       process_flags (argc, argv);
 
        /*
         * Start with a quick check to see if the group exists.
         */
 
-       if (getgrnam(group_name)) {
+       if (getgrnam (group_name)) {
                if (fflg) {
-                       exit(E_SUCCESS);
+                       exit (E_SUCCESS);
                }
-               fprintf(stderr, _("%s: group %s exists\n"), Prog, group_name);
-               exit(E_NAME_IN_USE);
+               fprintf (stderr, _("%s: group %s exists\n"), Prog,
+                        group_name);
+               exit (E_NAME_IN_USE);
        }
 
        /*
@@ -574,20 +569,20 @@ main(int argc, char **argv)
         * then close and update the files.
         */
 
-       open_files();
+       open_files ();
 
        if (!gflg || !oflg)
-               find_new_gid();
+               find_new_gid ();
 
-       grp_update();
+       grp_update ();
 
-       close_files();
+       close_files ();
 
 #ifdef USE_PAM
        if (retval == PAM_SUCCESS) {
-               retval = pam_chauthtok(pamh, 0);
+               retval = pam_chauthtok (pamh, 0);
                if (retval != PAM_SUCCESS) {
-                       pam_end(pamh, retval);
+                       pam_end (pamh, retval);
                }
        }
 
@@ -597,8 +592,7 @@ main(int argc, char **argv)
        }
 
        if (retval == PAM_SUCCESS)
-               pam_end(pamh, PAM_SUCCESS);
-#endif /* USE_PAM */
-       exit(E_SUCCESS);
-       /*NOTREACHED*/
-}
+               pam_end (pamh, PAM_SUCCESS);
+#endif                         /* USE_PAM */
+       exit (E_SUCCESS);
+ /*NOTREACHED*/}
index bc1417e0a0e90c76b10f3478622dc3f37aeec85d..0c071da2ba6eb7d9da721f54a48b0252651c20ac 100644 (file)
@@ -17,7 +17,7 @@
  * 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
+ * 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)
 #include <config.h>
 
 #include "rcsid.h"
-RCSID(PKG_VER "$Id: groupmod.c,v 1.16 2000/10/09 19:02:20 kloczek Exp $")
-
+RCSID (PKG_VER "$Id: groupmod.c,v 1.19 2002/01/05 15:41:43 kloczek Exp $")
 #include <sys/types.h>
 #include <stdio.h>
 #include <grp.h>
 #include <ctype.h>
 #include <fcntl.h>
-
 #ifdef USE_PAM
 #include <security/pam_appl.h>
 #include <security/pam_misc.h>
 #include <pwd.h>
-#endif /* USE_PAM */
-
+#endif                         /* USE_PAM */
 #include "prototypes.h"
 #include "chkname.h"
 #include "defines.h"
-
 #include "groupio.h"
-
 #ifdef SHADOWGRP
 #include "sgroupio.h"
-
 static int is_shadow_grp;
 #endif
 
@@ -68,59 +62,56 @@ static int is_shadow_grp;
 #define E_NAME_IN_USE  9       /* group name already in use */
 #define E_GRP_UPDATE   10      /* can't update group file */
 
-static char    *group_name;
-static char    *group_newname;
-static gid_t   group_id;
-static gid_t   group_newid;
+static char *group_name;
+static char *group_newname;
+static gid_t group_id;
+static gid_t group_newid;
 
-static char    *Prog;
+static char *Prog;
 
 static int
      oflg = 0, /* permit non-unique group ID to be specified with -g */
      gflg = 0, /* new ID value for the group */
      nflg = 0; /* a new name has been specified for the group */
oflg = 0,                     /* permit non-unique group ID to be specified with -g */
gflg = 0,                     /* new ID value for the group */
nflg = 0;                     /* a new name has been specified for the group */
 
 #ifdef NDBM
-extern int     gr_dbm_mode;
-extern int     sg_dbm_mode;
+extern int gr_dbm_mode;
+extern int sg_dbm_mode;
 #endif
 
-extern int optind;
-extern char *optarg;
-
 /* local function prototypes */
-static void usage(void);
-static void new_grent(struct group *);
+static void usage (void);
+static void new_grent (struct group *);
+
 #ifdef SHADOWGRP
-static void new_sgent(struct sgrp *);
+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 close_files(void);
-static void open_files(void);
+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 close_files (void);
+static void open_files (void);
 
 /*
  * usage - display usage message and exit
  */
 
-static void
-usage(void)
+static void usage (void)
 {
-       fprintf(stderr, _("usage: groupmod [-g gid [-o]] [-n name] group\n"));
-       exit(E_USAGE);
+       fprintf (stderr,
+                _("usage: groupmod [-g gid [-o]] [-n name] group\n"));
+       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.
+ *     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)
+static void new_grent (struct group *grent)
 {
        if (nflg)
                grent->gr_name = xstrdup (group_newname);
@@ -133,17 +124,16 @@ new_grent(struct group *grent)
 /*
  * 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.
+ *     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)
+static void new_sgent (struct sgrp *sgent)
 {
        if (nflg)
                sgent->sg_name = xstrdup (group_newname);
 }
-#endif /* SHADOWGRP */
+#endif                         /* SHADOWGRP */
 
 /*
  * grp_update - update group file entries
@@ -151,47 +141,49 @@ new_sgent(struct sgrp *sgent)
  *     grp_update() writes the new records to the group files.
  */
 
-static void
-grp_update(void)
+static void grp_update (void)
 {
        struct group grp;
        const struct group *ogrp;
+
 #ifdef SHADOWGRP
        struct sgrp sgrp;
        const struct sgrp *osgrp = NULL;
-#endif /* SHADOWGRP */
+#endif                         /* SHADOWGRP */
 
        /*
         * Get the current settings for this group.
         */
 
-       ogrp = gr_locate(group_name);
+       ogrp = gr_locate (group_name);
        if (!ogrp) {
-               fprintf(stderr,
-                       _("%s: %s not found in /etc/group\n"),
-                       Prog, group_name);
-               exit(E_GRP_UPDATE);
+               fprintf (stderr,
+                        _("%s: %s not found in /etc/group\n"),
+                        Prog, group_name);
+               exit (E_GRP_UPDATE);
        }
        grp = *ogrp;
        new_grent (&grp);
 #ifdef SHADOWGRP
-       if (is_shadow_grp && (osgrp = sgr_locate(group_name))) {
+       if (is_shadow_grp && (osgrp = sgr_locate (group_name))) {
                sgrp = *osgrp;
                new_sgent (&sgrp);
        }
-#endif /* SHADOWGRP */
+#endif                         /* SHADOWGRP */
 
        /*
         * Write out the new group file entry.
         */
 
-       if (!gr_update(&grp)) {
-               fprintf(stderr, _("%s: error adding new group entry\n"), Prog);
-               exit(E_GRP_UPDATE);
+       if (!gr_update (&grp)) {
+               fprintf (stderr, _("%s: error adding new group entry\n"),
+                        Prog);
+               exit (E_GRP_UPDATE);
        }
-       if (nflg && !gr_remove(group_name)) {
-               fprintf(stderr, _("%s: error removing group entry\n"), Prog);
-               exit(E_GRP_UPDATE);
+       if (nflg && !gr_remove (group_name)) {
+               fprintf (stderr, _("%s: error removing group entry\n"),
+                        Prog);
+               exit (E_GRP_UPDATE);
        }
 #ifdef NDBM
 
@@ -199,46 +191,48 @@ grp_update(void)
         * Update the DBM group file with the new entry as well.
         */
 
-       if (gr_dbm_present()) {
-               if (!gr_dbm_update(&grp)) {
-                       fprintf(stderr,
-                               _("%s: cannot add new dbm group entry\n"),
-                               Prog);
-                       exit(E_GRP_UPDATE);
+       if (gr_dbm_present ()) {
+               if (!gr_dbm_update (&grp)) {
+                       fprintf (stderr,
+                                _("%s: cannot add new dbm group entry\n"),
+                                Prog);
+                       exit (E_GRP_UPDATE);
                }
-               if (nflg && (ogrp = getgrnam(group_name)) &&
-                               !gr_dbm_remove(ogrp)) {
-                       fprintf(stderr,
-                               _("%s: error removing group dbm entry\n"),
-                               Prog);
-                       exit(E_GRP_UPDATE);
+               if (nflg && (ogrp = getgrnam (group_name)) &&
+                   !gr_dbm_remove (ogrp)) {
+                       fprintf (stderr,
+                                _("%s: error removing group dbm entry\n"),
+                                Prog);
+                       exit (E_GRP_UPDATE);
                }
                endgrent ();
        }
-#endif /* NDBM */
+#endif                         /* NDBM */
 
 #ifdef SHADOWGRP
 
        /*
-        * Make sure there was a shadow entry to begin with.  Skip
-        * down to "out" if there wasn't.  Can't just return because
-        * there might be some syslogging to do.
+        * Make sure there was a shadow entry to begin with. Skip down to
+        * "out" if there wasn't. Can't just return because there might be
+        * some syslogging to do.
         */
 
-       if (! osgrp)
+       if (!osgrp)
                goto out;
 
        /*
         * Write out the new shadow group entries as well.
         */
 
-       if (!sgr_update(&sgrp)) {
-               fprintf(stderr, _("%s: error adding new group entry\n"), Prog);
-               exit(E_GRP_UPDATE);
+       if (!sgr_update (&sgrp)) {
+               fprintf (stderr, _("%s: error adding new group entry\n"),
+                        Prog);
+               exit (E_GRP_UPDATE);
        }
-       if (nflg && !sgr_remove(group_name)) {
-               fprintf(stderr, _("%s: error removing group entry\n"), Prog);
-               exit(E_GRP_UPDATE);
+       if (nflg && !sgr_remove (group_name)) {
+               fprintf (stderr, _("%s: error removing group entry\n"),
+                        Prog);
+               exit (E_GRP_UPDATE);
        }
 #ifdef NDBM
 
@@ -246,32 +240,34 @@ grp_update(void)
         * Update the DBM shadow group file with the new entry as well.
         */
 
-       if (sg_dbm_present()) {
-               if (!sg_dbm_update(&sgrp)) {
-                       fprintf(stderr,
-                               _("%s: cannot add new dbm shadow group entry\n"),
-                               Prog);
-                       exit(E_GRP_UPDATE);
+       if (sg_dbm_present ()) {
+               if (!sg_dbm_update (&sgrp)) {
+                       fprintf (stderr,
+                                _
+                                ("%s: cannot add new dbm shadow group entry\n"),
+                                Prog);
+                       exit (E_GRP_UPDATE);
                }
-               if (nflg && ! sg_dbm_remove (group_name)) {
+               if (nflg && !sg_dbm_remove (group_name)) {
                        fprintf (stderr,
-                               _("%s: error removing shadow group dbm entry\n"),
-                               Prog);
-                       exit(E_GRP_UPDATE);
+                                _
+                                ("%s: error removing shadow group dbm entry\n"),
+                                Prog);
+                       exit (E_GRP_UPDATE);
                }
                endsgent ();
        }
-#endif /* NDBM */
-out:
-#endif /* SHADOWGRP */
+#endif                         /* NDBM */
+      out:
+#endif                         /* SHADOWGRP */
 
        if (nflg)
-               SYSLOG((LOG_INFO, "change group `%s' to `%s'\n",
-                       group_name, group_newname));
+               SYSLOG ((LOG_INFO, "change group `%s' to `%s'",
+                        group_name, group_newname));
 
        if (gflg)
-               SYSLOG((LOG_INFO, "change gid for `%s' to %d\n",
-                       nflg ? group_newname:group_name, group_newid));
+               SYSLOG ((LOG_INFO, "change gid for `%s' to %u",
+                        nflg ? group_newname : group_name, group_newid));
 }
 
 /*
@@ -280,13 +276,12 @@ out:
  *     check_new_gid() insures that the new GID value is unique.
  */
 
-static void
-check_new_gid(void)
+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.
+        * 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) {
@@ -294,48 +289,47 @@ check_new_gid(void)
                return;
        }
 
-       if (oflg || ! getgrgid (group_newid))
+       if (oflg || !getgrgid (group_newid))
                return;
 
        /*
         * Tell the user what they did wrong.
         */
 
-       fprintf(stderr,
-               _("%s: %ld is not a unique gid\n"),
-               Prog, (long) group_newid);
-       exit(E_GID_IN_USE);
+       fprintf (stderr,
+                _("%s: %u is not a unique gid\n"), Prog, 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.
+ *     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)
+static void check_new_name (void)
 {
        /*
         * Make sure they are actually changing the name.
         */
 
-       if (strcmp(group_name, group_newname) == 0) {
+       if (strcmp (group_name, group_newname) == 0) {
                nflg = 0;
                return;
        }
 
-       if (check_group_name(group_newname)) {
+       if (check_group_name (group_newname)) {
 
                /*
                 * If the entry is found, too bad.
                 */
 
-               if (getgrnam(group_newname)) {
-                       fprintf(stderr, _("%s: %s is not a unique name\n"),
-                               Prog, group_newname);
-                       exit(E_NAME_IN_USE);
+               if (getgrnam (group_newname)) {
+                       fprintf (stderr,
+                                _("%s: %s is not a unique name\n"), Prog,
+                                group_newname);
+                       exit (E_NAME_IN_USE);
                }
                return;
        }
@@ -344,53 +338,52 @@ check_new_name(void)
         * All invalid group names land here.
         */
 
-       fprintf(stderr, _("%s: %s is a not a valid group name\n"),
-               Prog, group_newname);
-       exit(E_BAD_ARG);
+       fprintf (stderr, _("%s: %s is a not a valid group name\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.
+ *     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)
+static void process_flags (int argc, char **argv)
 {
-       char    *end;
-       int     arg;
+       char *end;
+       int arg;
 
        while ((arg = getopt (argc, argv, "og:n:")) != EOF) {
                switch (arg) {
-                       case 'g':
-                               gflg++;
-                               group_newid = strtol(optarg, &end, 10);
-                               if (*end != '\0') {
-                                       fprintf(stderr,
-                                               _("%s: invalid group %s\n"),
-                                               Prog, optarg);
-                                       exit(E_BAD_ARG);
-                               }
-                               break;
-                       case 'n':
-                               nflg++;
-                               group_newname = optarg;
-                               break;
-                       case 'o':
-                               oflg++;
-                               break;
-                       default:
-                               usage ();
+               case 'g':
+                       gflg++;
+                       group_newid = strtoul (optarg, &end, 10);
+                       if (*end != '\0') {
+                               fprintf (stderr,
+                                        _("%s: invalid group %s\n"),
+                                        Prog, optarg);
+                               exit (E_BAD_ARG);
+                       }
+                       break;
+               case 'n':
+                       nflg++;
+                       group_newname = optarg;
+                       break;
+               case 'o':
+                       oflg++;
+                       break;
+               default:
+                       usage ();
                }
        }
        if (oflg && !gflg)
-               usage();
+               usage ();
 
        if (optind != argc - 1)
-               usage();
+               usage ();
 
        group_name = argv[argc - 1];
 }
@@ -398,27 +391,28 @@ process_flags(int argc, char **argv)
 /*
  * 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.
+ *     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)
+static void close_files (void)
 {
-       if (!gr_close()) {
-               fprintf(stderr, _("%s: cannot rewrite group file\n"), Prog);
-               exit(E_GRP_UPDATE);
+       if (!gr_close ()) {
+               fprintf (stderr, _("%s: cannot rewrite group file\n"),
+                        Prog);
+               exit (E_GRP_UPDATE);
        }
-       gr_unlock();
+       gr_unlock ();
 #ifdef SHADOWGRP
-       if (is_shadow_grp && !sgr_close()) {
-               fprintf(stderr, _("%s: cannot rewrite shadow group file\n"),
-                       Prog);
-               exit(E_GRP_UPDATE);
+       if (is_shadow_grp && !sgr_close ()) {
+               fprintf (stderr,
+                        _("%s: cannot rewrite shadow group file\n"),
+                        Prog);
+               exit (E_GRP_UPDATE);
        }
        if (is_shadow_grp)
                sgr_unlock ();
-#endif /* SHADOWGRP */
+#endif                         /* SHADOWGRP */
 }
 
 /*
@@ -427,37 +421,40 @@ close_files(void)
  *     open_files() opens the two group files.
  */
 
-static void
-open_files(void)
+static void open_files (void)
 {
-       if (!gr_lock()) {
-               fprintf(stderr, _("%s: unable to lock group file\n"), Prog);
-               exit(E_GRP_UPDATE);
+       if (!gr_lock ()) {
+               fprintf (stderr, _("%s: unable to lock group file\n"),
+                        Prog);
+               exit (E_GRP_UPDATE);
        }
-       if (!gr_open(O_RDWR)) {
-               fprintf(stderr, _("%s: unable to open group file\n"), Prog);
-               exit(E_GRP_UPDATE);
+       if (!gr_open (O_RDWR)) {
+               fprintf (stderr, _("%s: unable to open group file\n"),
+                        Prog);
+               exit (E_GRP_UPDATE);
        }
 #ifdef SHADOWGRP
-       if (is_shadow_grp && !sgr_lock()) {
-               fprintf(stderr, _("%s: unable to lock shadow group file\n"),
-                       Prog);
-               exit(E_GRP_UPDATE);
+       if (is_shadow_grp && !sgr_lock ()) {
+               fprintf (stderr,
+                        _("%s: unable to lock shadow group file\n"),
+                        Prog);
+               exit (E_GRP_UPDATE);
        }
-       if (is_shadow_grp && !sgr_open(O_RDWR)) {
-               fprintf(stderr, _("%s: unable to open shadow group file\n"),
-                       Prog);
-               exit(E_GRP_UPDATE);
+       if (is_shadow_grp && !sgr_open (O_RDWR)) {
+               fprintf (stderr,
+                        _("%s: unable to open shadow group file\n"),
+                        Prog);
+               exit (E_GRP_UPDATE);
        }
-#endif /* SHADOWGRP */
+#endif                         /* SHADOWGRP */
 }
 
 #ifdef USE_PAM
 static struct pam_conv conv = {
-    misc_conv,
-    NULL
+       misc_conv,
+       NULL
 };
-#endif /* USE_PAM */
+#endif                         /* USE_PAM */
 
 /*
  * main - groupmod command
@@ -472,10 +469,10 @@ static struct pam_conv conv = {
  *             -n - specify a new group name
  */
 
-int
-main(int argc, char **argv)
+int main (int argc, char **argv)
 {
-       struct  group   *grp;
+       struct group *grp;
+
 #ifdef USE_PAM
        pam_handle_t *pamh = NULL;
        struct passwd *pampw;
@@ -486,71 +483,73 @@ main(int argc, char **argv)
         * Get my name so that I can use it to report errors.
         */
 
-       Prog = Basename(argv[0]);
+       Prog = Basename (argv[0]);
 
-       setlocale(LC_ALL, "");
-       bindtextdomain(PACKAGE, LOCALEDIR);
-       textdomain(PACKAGE);
+       setlocale (LC_ALL, "");
+       bindtextdomain (PACKAGE, LOCALEDIR);
+       textdomain (PACKAGE);
 
 #ifdef USE_PAM
        retval = PAM_SUCCESS;
 
-       pampw = getpwuid(getuid());
+       pampw = getpwuid (getuid ());
        if (pampw == NULL) {
                retval = PAM_USER_UNKNOWN;
        }
 
        if (retval == PAM_SUCCESS) {
-               retval = pam_start("shadow", pampw->pw_name, &conv, &pamh);
+               retval =
+                   pam_start ("shadow", pampw->pw_name, &conv, &pamh);
        }
 
        if (retval == PAM_SUCCESS) {
-               retval = pam_authenticate(pamh, 0);
+               retval = pam_authenticate (pamh, 0);
                if (retval != PAM_SUCCESS) {
-                       pam_end(pamh, retval);
+                       pam_end (pamh, retval);
                }
        }
 
        if (retval == PAM_SUCCESS) {
-               retval = pam_acct_mgmt(pamh, 0);
+               retval = pam_acct_mgmt (pamh, 0);
                if (retval != PAM_SUCCESS) {
-                       pam_end(pamh, retval);
+                       pam_end (pamh, retval);
                }
        }
 
        if (retval != PAM_SUCCESS) {
-               fprintf (stderr, _("%s: PAM authentication failed\n"), Prog);
+               fprintf (stderr, _("%s: PAM authentication failed\n"),
+                        Prog);
                exit (1);
        }
-#endif /* USE_PAM */
+#endif                         /* USE_PAM */
 
-       OPENLOG(Prog);
+       OPENLOG (Prog);
 
 #ifdef SHADOWGRP
-       is_shadow_grp = sgr_file_present();
+       is_shadow_grp = sgr_file_present ();
 #endif
 
        /*
-        * The open routines for the DBM files don't use read-write
-        * as the mode, so we have to clue them in.
+        * The open routines for the DBM files don't use read-write as the
+        * mode, so we have to clue them in.
         */
 
 #ifdef NDBM
        gr_dbm_mode = O_RDWR;
 #ifdef SHADOWGRP
        sg_dbm_mode = O_RDWR;
-#endif /* SHADOWGRP */
-#endif /* NDBM */
+#endif                         /* SHADOWGRP */
+#endif                         /* NDBM */
        process_flags (argc, argv);
 
        /*
         * Start with a quick check to see if the group exists.
         */
 
-       if (!(grp = getgrnam(group_name))) {
-               fprintf(stderr, _("%s: group %s does not exist\n"),
-                       Prog, group_name);
-               exit(E_NOTFOUND);
+       if (!(grp = getgrnam (group_name))) {
+               fprintf (stderr, _("%s: group %s does not exist\n"),
+                        Prog, group_name);
+               exit (E_NOTFOUND);
        } else
                group_id = grp->gr_gid;
 
@@ -561,19 +560,18 @@ main(int argc, char **argv)
         */
 
        if (__isgrNIS ()) {
-               char    *nis_domain;
-               char    *nis_master;
+               char *nis_domain;
+               char *nis_master;
 
-               fprintf(stderr, _("%s: group %s is a NIS group\n"),
-                       Prog, group_name);
+               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);
+               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);
+               exit (E_NOTFOUND);
        }
 #endif
 
@@ -596,9 +594,9 @@ main(int argc, char **argv)
 
 #ifdef USE_PAM
        if (retval == PAM_SUCCESS) {
-               retval = pam_chauthtok(pamh, 0);
+               retval = pam_chauthtok (pamh, 0);
                if (retval != PAM_SUCCESS) {
-                       pam_end(pamh, retval);
+                       pam_end (pamh, retval);
                }
        }
 
@@ -608,8 +606,7 @@ main(int argc, char **argv)
        }
 
        if (retval == PAM_SUCCESS)
-               pam_end(pamh, PAM_SUCCESS);
-#endif /* USE_PAM */
-       exit(E_SUCCESS);
-       /*NOTREACHED*/
-}
+               pam_end (pamh, PAM_SUCCESS);
+#endif                         /* USE_PAM */
+       exit (E_SUCCESS);
+ /*NOTREACHED*/}
index 68c82f2242f5fe3c09f0b487ac86a699902e6d29..529e201554e108e72f3ca7818ea75b64a9bbd5f7 100644 (file)
@@ -17,7 +17,7 @@
  * 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
+ * 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)
 #include <config.h>
 
 #include "rcsid.h"
-RCSID(PKG_VER "$Id: groups.c,v 1.7 2001/09/01 04:19:16 kloczek Exp $")
-
+RCSID (PKG_VER "$Id: groups.c,v 1.8 2002/01/05 15:41:43 kloczek Exp $")
 #include <stdio.h>
 #include <pwd.h>
 #include <grp.h>
 #include "prototypes.h"
 #include "defines.h"
-
 /* local function prototypes */
-static void print_groups(const char *);
+static void print_groups (const char *);
 
 /*
  * 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.
+ *     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)
+static void print_groups (const char *member)
 {
-       int     groups = 0;
-       struct  group   *grp;
-       struct  passwd  *pwd;
-       int     flag = 0;
+       int groups = 0;
+       struct group *grp;
+       struct passwd *pwd;
+       int flag = 0;
 
        setgrent ();
 
-       if ((pwd = getpwnam(member)) == 0) {
-               fprintf(stderr, _("unknown user %s\n"), member);
-               exit(1);
+       if ((pwd = getpwnam (member)) == 0) {
+               fprintf (stderr, _("unknown user %s\n"), member);
+               exit (1);
        }
        while ((grp = getgrent ())) {
-               if (is_on_list(grp->gr_mem, member)) {
+               if (is_on_list (grp->gr_mem, member)) {
                        if (groups++)
                                putchar (' ');
 
@@ -72,7 +69,7 @@ print_groups(const char *member)
                                flag = 1;
                }
        }
-       if (! flag && (grp = getgrgid (pwd->pw_gid))) {
+       if (!flag && (grp = getgrgid (pwd->pw_gid))) {
                if (groups++)
                        putchar (' ');
 
@@ -86,47 +83,47 @@ print_groups(const char *member)
  * groups - print out the groups a process is a member of
  */
 
-int
-main(int argc, char **argv)
+int main (int argc, char **argv)
 {
        long sys_ngroups;
+
 #ifdef HAVE_GETGROUPS
-       int     ngroups;
+       int ngroups;
        GETGROUPS_T *groups;
-       int     pri_grp;
-       int     i;
-       struct  group   *gr;
+       int pri_grp;
+       int i;
+       struct group *gr;
 #else
-       char    *logname;
-       char    *getlogin();
+       char *logname;
+       char *getlogin ();
 #endif
 
-       sys_ngroups=sysconf(_SC_NGROUPS_MAX);
+       sys_ngroups = sysconf (_SC_NGROUPS_MAX);
 #ifdef HAVE_GETGROUPS
-       groups=malloc(sys_ngroups*sizeof(GETGROUPS_T));
+       groups = malloc (sys_ngroups * sizeof (GETGROUPS_T));
 #endif
-       setlocale(LC_ALL, "");
-       bindtextdomain(PACKAGE, LOCALEDIR);
-       textdomain(PACKAGE);
+       setlocale (LC_ALL, "");
+       bindtextdomain (PACKAGE, LOCALEDIR);
+       textdomain (PACKAGE);
 
        if (argc == 1) {
 
                /*
-                * Called with no arguments - give the group set
-                * for the current user.
+                * 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.
+                * 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);
+               ngroups = getgroups (sys_ngroups, groups);
                if (ngroups < 0) {
-                       perror("getgroups");
-                       exit(1);
+                       perror ("getgroups");
+                       exit (1);
                }
 
                /*
@@ -134,7 +131,7 @@ main(int argc, char **argv)
                 */
 
                pri_grp = getegid ();
-               for (i = 0;i < ngroups;i++)
+               for (i = 0; i < ngroups; i++)
                        if (pri_grp == (int) groups[i])
                                break;
 
@@ -142,9 +139,9 @@ main(int argc, char **argv)
                        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.
+                * Print out the name of every group in the current group
+                * set. Unknown groups are printed as their decimal group ID
+                * values.
                 */
 
                if (pri_grp != -1) {
@@ -154,7 +151,7 @@ main(int argc, char **argv)
                                printf ("%d", pri_grp);
                }
 
-               for (i = 0;i < ngroups;i++) {
+               for (i = 0; i < ngroups; i++) {
                        if (i || pri_grp != -1)
                                putchar (' ');
 
@@ -166,8 +163,8 @@ main(int argc, char **argv)
                putchar ('\n');
 #else
                /*
-                * This system does not have the getgroups() system
-                * call, so I must check the groups file directly.
+                * This system does not have the getgroups() system call, so
+                * I must check the groups file directly.
                 */
 
                if ((logname = getlogin ()))
@@ -178,8 +175,8 @@ main(int argc, char **argv)
        } else {
 
                /*
-                * The invoker wanted to know about some other
-                * user.  Use that name to look up the groups instead.
+                * The invoker wanted to know about some other user. Use
+                * that name to look up the groups instead.
                 */
 
                print_groups (argv[1]);
index 1cad547fabe1864a9843eb368270dd4c312c69fb..9952c3b2fe105ea4f5d2d7b50f4bcd9cce5ae9bc 100644 (file)
@@ -17,7 +17,7 @@
  * 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
+ * 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)
 #include <config.h>
 
 #include "rcsid.h"
-RCSID(PKG_VER "$Id: grpck.c,v 1.16 2001/08/18 09:28:16 malekith Exp $")
-
+RCSID (PKG_VER "$Id: grpck.c,v 1.20 2002/01/05 15:41:43 kloczek Exp $")
 #include <stdio.h>
 #include <fcntl.h>
 #include <grp.h>
-
 #include "prototypes.h"
 #include "defines.h"
 #include "chkname.h"
 #include <pwd.h>
-
 #include "commonio.h"
-
 #include "groupio.h"
-extern void __gr_del_entry(const struct commonio_entry *);
-extern struct commonio_entry *__gr_get_head(void);
+extern void __gr_del_entry (const struct commonio_entry *);
+extern struct commonio_entry *__gr_get_head (void);
 
 #ifdef SHADOWGRP
 #include "sgroupio.h"
-extern void __sgr_del_entry(const struct commonio_entry *);
-extern struct commonio_entry *__sgr_get_head(void);
+extern void __sgr_del_entry (const struct commonio_entry *);
+extern struct commonio_entry *__sgr_get_head (void);
 #endif
 
 /*
@@ -64,59 +60,52 @@ extern struct commonio_entry *__sgr_get_head(void);
 #define        E_CANT_LOCK     4
 #define        E_CANT_UPDATE   5
 
-/*
- * Global variables
- */
-
-extern int     optind;
-extern char    *optarg;
-
 /*
  * Local variables
  */
 
 static char *Prog;
 static const char *grp_file = GROUP_FILE;
+
 #ifdef SHADOWGRP
 static const char *sgr_file = SGROUP_FILE;
 #endif
 static int read_only = 0;
 
 /* local function prototypes */
-static void usage(void);
-static int yes_or_no(void);
-static void delete_member(char **, const char *);
+static void usage (void);
+static int yes_or_no (void);
+static void delete_member (char **, const char *);
 
 /*
  * usage - print syntax message and exit
  */
 
-static void
-usage(void)
+static void usage (void)
 {
 #ifdef SHADOWGRP
-       fprintf(stderr, _("Usage: %s [ -sr ] [ group [ gshadow ] ]\n"), Prog);
+       fprintf (stderr, _("Usage: %s [-r] [-s] [group [gshadow]]\n"),
+                Prog);
 #else
-       fprintf(stderr, _("Usage: %s [ -sr ] [ group ]\n"), Prog);
+       fprintf (stderr, _("Usage: %s [-r] [-s] [group]\n"), Prog);
 #endif
-       exit(E_USAGE);
+       exit (E_USAGE);
 }
 
 /*
  * yes_or_no - get answer to question from the user
  */
 
-static int
-yes_or_no(void)
+static int yes_or_no (void)
 {
-       char    buf[80];
+       char buf[80];
 
        /*
         * In read-only mode all questions are answered "no".
         */
 
        if (read_only) {
-               puts(_("No"));
+               puts (_("No"));
                return 0;
        }
 
@@ -124,7 +113,7 @@ yes_or_no(void)
         * Get a line and see what the first character is.
         */
 
-       if (fgets(buf, sizeof buf, stdin))
+       if (fgets (buf, sizeof buf, stdin))
                return buf[0] == 'y' || buf[0] == 'Y';
 
        return 0;
@@ -134,8 +123,7 @@ yes_or_no(void)
  * delete_member - delete an entry in a list of members
  */
 
-static void
-delete_member(char **list, const char *member)
+static void delete_member (char **list, const char *member)
 {
        int i;
 
@@ -152,19 +140,19 @@ delete_member(char **list, const char *member)
  * grpck - verify group file integrity
  */
 
-int
-main(int argc, char **argv)
+int main (int argc, char **argv)
 {
-       int     arg;
-       int     errors = 0;
-       int     deleted = 0;
-       int     i;
-       struct  commonio_entry  *gre, *tgre;
-       struct  group   *grp;
-       int     sort_mode = 0;
+       int arg;
+       int errors = 0;
+       int deleted = 0;
+       int i;
+       struct commonio_entry *gre, *tgre;
+       struct group *grp;
+       int sort_mode = 0;
+
 #ifdef SHADOWGRP
-       struct  commonio_entry  *sge, *tsge;
-       struct  sgrp    *sgr;
+       struct commonio_entry *sge, *tsge;
+       struct sgrp *sgr;
        int is_shadow = 0;
 #endif
 
@@ -172,19 +160,19 @@ main(int argc, char **argv)
         * Get my name so that I can use it to report errors.
         */
 
-       Prog = Basename(argv[0]);
+       Prog = Basename (argv[0]);
 
-       setlocale(LC_ALL, "");
-       bindtextdomain(PACKAGE, LOCALEDIR);
-       textdomain(PACKAGE);
+       setlocale (LC_ALL, "");
+       bindtextdomain (PACKAGE, LOCALEDIR);
+       textdomain (PACKAGE);
 
-       OPENLOG(Prog);
+       OPENLOG (Prog);
 
        /*
         * Parse the command line arguments
         */
 
-       while ((arg = getopt(argc, argv, "qrs")) != EOF) {
+       while ((arg = getopt (argc, argv, "qrs")) != EOF) {
                switch (arg) {
                case 'q':
                        /* quiet - ignored for now */
@@ -196,16 +184,16 @@ main(int argc, char **argv)
                        sort_mode = 1;
                        break;
                default:
-                       usage();
+                       usage ();
                }
        }
 
        if (sort_mode && read_only) {
-               fprintf(stderr, _("%s: -s and -r are incompatibile\n"),
-                       Prog);
-               exit(E_USAGE);
+               fprintf (stderr, _("%s: -s and -r are incompatibile\n"),
+                        Prog);
+               exit (E_USAGE);
        }
-       
+
        /*
         * Make certain we have the right number of arguments
         */
@@ -215,24 +203,24 @@ main(int argc, char **argv)
 #else
        if (optind != argc && optind + 1 != argc)
 #endif
-               usage();
+               usage ();
 
        /*
-        * If there are two left over filenames, use those as the
-        * group and group password filenames.
+        * If there are two left over filenames, use those as the group and
+        * group password filenames.
         */
 
        if (optind != argc) {
                grp_file = argv[optind];
-               gr_name(grp_file);
+               gr_name (grp_file);
        }
 #ifdef SHADOWGRP
        if (optind + 2 == argc) {
                sgr_file = argv[optind + 1];
-               sgr_name(sgr_file);
+               sgr_name (sgr_file);
                is_shadow = 1;
        } else if (optind == argc)
-               is_shadow = sgr_file_present();
+               is_shadow = sgr_file_present ();
 #endif
 
        /*
@@ -240,51 +228,57 @@ main(int argc, char **argv)
         */
 
        if (!read_only) {
-               if (!gr_lock()) {
-                       fprintf(stderr, _("%s: cannot lock file %s\n"), Prog, grp_file);
+               if (!gr_lock ()) {
+                       fprintf (stderr, _("%s: cannot lock file %s\n"),
+                                Prog, grp_file);
                        if (optind == argc)
-                               SYSLOG((LOG_WARN,"cannot lock %s\n",grp_file));
-                       closelog();
-                       exit(E_CANT_LOCK);
+                               SYSLOG ((LOG_WARN, "cannot lock %s",
+                                        grp_file));
+                       closelog ();
+                       exit (E_CANT_LOCK);
                }
 #ifdef SHADOWGRP
-               if (is_shadow && !sgr_lock()) {
-                       fprintf(stderr, _("%s: cannot lock file %s\n"), Prog, sgr_file);
+               if (is_shadow && !sgr_lock ()) {
+                       fprintf (stderr, _("%s: cannot lock file %s\n"),
+                                Prog, sgr_file);
                        if (optind == argc)
-                               SYSLOG((LOG_WARN,"cannot lock %s\n",sgr_file));
-                       closelog();
-                       exit(E_CANT_LOCK);
+                               SYSLOG ((LOG_WARN, "cannot lock %s",
+                                        sgr_file));
+                       closelog ();
+                       exit (E_CANT_LOCK);
                }
 #endif
        }
 
        /*
-        * Open the files.  Use O_RDONLY if we are in read_only mode,
+        * 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)) {
-               fprintf(stderr, _("%s: cannot open file %s\n"), Prog, grp_file);
+       if (!gr_open (read_only ? O_RDONLY : O_RDWR)) {
+               fprintf (stderr, _("%s: cannot open file %s\n"), Prog,
+                        grp_file);
                if (optind == argc)
-                       SYSLOG((LOG_WARN, "cannot open %s\n", grp_file));
-               closelog();
-               exit(E_CANT_OPEN);
+                       SYSLOG ((LOG_WARN, "cannot open %s", grp_file));
+               closelog ();
+               exit (E_CANT_OPEN);
        }
 #ifdef SHADOWGRP
-       if (is_shadow && !sgr_open(read_only ? O_RDONLY : O_RDWR)) {
-               fprintf(stderr, _("%s: cannot open file %s\n"), Prog, sgr_file);
+       if (is_shadow && !sgr_open (read_only ? O_RDONLY : O_RDWR)) {
+               fprintf (stderr, _("%s: cannot open file %s\n"), Prog,
+                        sgr_file);
                if (optind == argc)
-                       SYSLOG((LOG_WARN, "cannot open %s\n", sgr_file));
-               closelog();
-               exit(E_CANT_OPEN);
+                       SYSLOG ((LOG_WARN, "cannot open %s", sgr_file));
+               closelog ();
+               exit (E_CANT_OPEN);
        }
 #endif
 
        if (sort_mode) {
-               gr_sort();
+               gr_sort ();
 #ifdef SHADOWGRP
                if (is_shadow)
-                       sgr_sort();
+                       sgr_sort ();
 #endif
                goto write_and_bye;
        }
@@ -293,7 +287,7 @@ main(int argc, char **argv)
         * Loop through the entire group file.
         */
 
-       for (gre = __gr_get_head(); gre; gre = gre->next) {
+       for (gre = __gr_get_head (); gre; gre = gre->next) {
                /*
                 * Skip all NIS entries.
                 */
@@ -302,42 +296,42 @@ main(int argc, char **argv)
                        continue;
 
                /*
-                * Start with the entries that are completely corrupt.
-                * They have no (struct group) entry because they couldn't
-                * be parsed properly.
+                * Start with the entries that are completely corrupt. They
+                * have no (struct group) entry because they couldn't be
+                * parsed properly.
                 */
 
                if (!gre->eptr) {
 
                        /*
-                        * Tell the user this entire line is bogus and
-                        * ask them to delete it.
+                        * Tell the user this entire line is bogus and ask
+                        * them to delete it.
                         */
 
-                       printf(_("invalid group file entry\n"));
-                       printf(_("delete line `%s'? "), gre->line);
+                       printf (_("invalid group file entry\n"));
+                       printf (_("delete line `%s'? "), gre->line);
                        errors++;
 
                        /*
                         * prompt the user to delete the entry or not
                         */
 
-                       if (!yes_or_no())
+                       if (!yes_or_no ())
                                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.
+                        * 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'\n",
-                               gre->line));
+                     delete_gr:
+                       SYSLOG ((LOG_INFO, "delete group line `%s'",
+                                gre->line));
                        deleted++;
 
-                       __gr_del_entry(gre);
+                       __gr_del_entry (gre);
                        continue;
                }
 
@@ -351,7 +345,7 @@ delete_gr:
                 * Make sure this entry has a unique name.
                 */
 
-               for (tgre = __gr_get_head(); tgre; tgre = tgre->next) {
+               for (tgre = __gr_get_head (); tgre; tgre = tgre->next) {
 
                        const struct group *ent = tgre->eptr;
 
@@ -369,7 +363,7 @@ delete_gr:
                        if (!ent)
                                continue;
 
-                       if (strcmp(grp->gr_name, ent->gr_name) != 0)
+                       if (strcmp (grp->gr_name, ent->gr_name) != 0)
                                continue;
 
                        /*
@@ -377,44 +371,35 @@ delete_gr:
                         * another and ask them to delete it.
                         */
 
-                       puts(_("duplicate group entry\n"));
-                       printf(_("delete line `%s'? "), gre->line);
+                       puts (_("duplicate group entry\n"));
+                       printf (_("delete line `%s'? "), gre->line);
                        errors++;
 
                        /*
                         * prompt the user to delete the entry or not
                         */
 
-                       if (yes_or_no())
+                       if (yes_or_no ())
                                goto delete_gr;
                }
 
                /*
                 * Check for invalid group names.  --marekm
                 */
-               if (!check_group_name(grp->gr_name)) {
-                       errors++;
-                       printf(_("invalid group name `%s'\n"), grp->gr_name);
-               }
-
-               /*
-                * Check for a Slackware bug.  Make sure GID is not -1
-                * (it has special meaning for some syscalls).  --marekm
-                */
-
-               if (grp->gr_gid == (gid_t) -1) {
+               if (!check_group_name (grp->gr_name)) {
                        errors++;
-                       printf(_("group %s: bad GID (%d)\n"),
-                               grp->gr_name, (int) grp->gr_gid);
+                       printf (_("invalid group name `%s'\n"),
+                               grp->gr_name);
                }
 
                /*
                 * 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
+                * groups with no members are returned as groups with one
+                * member "", causing grpck to fail.  --marekm
                 */
 
-               if (grp->gr_mem[0] && !grp->gr_mem[1] && *(grp->gr_mem[0]) == '\0')
+               if (grp->gr_mem[0] && !grp->gr_mem[1]
+                   && *(grp->gr_mem[0]) == '\0')
                        grp->gr_mem[0] = (char *) 0;
 
                /*
@@ -422,27 +407,27 @@ delete_gr:
                 */
 
                for (i = 0; grp->gr_mem[i]; i++) {
-                       if (getpwnam(grp->gr_mem[i]))
+                       if (getpwnam (grp->gr_mem[i]))
                                continue;
                        /*
-                        * Can't find this user.  Remove them
+                        * Can't find this user. Remove them
                         * from the list.
                         */
 
                        errors++;
-                       printf(_("group %s: no user %s\n"),
+                       printf (_("group %s: no user %s\n"),
                                grp->gr_name, grp->gr_mem[i]);
-                       printf(_("delete member `%s'? "), grp->gr_mem[i]);
+                       printf (_("delete member `%s'? "), grp->gr_mem[i]);
 
-                       if (!yes_or_no())
+                       if (!yes_or_no ())
                                continue;
 
-                       SYSLOG((LOG_INFO, "delete member `%s' group `%s'\n",
-                               grp->gr_mem[i], grp->gr_name));
+                       SYSLOG ((LOG_INFO, "delete member `%s' group `%s'",
+                                grp->gr_mem[i], grp->gr_name));
                        deleted++;
-                       delete_member(grp->gr_mem, grp->gr_mem[i]);
+                       delete_member (grp->gr_mem, grp->gr_mem[i]);
                        gre->changed = 1;
-                       __gr_set_changed();
+                       __gr_set_changed ();
                }
        }
 
@@ -454,45 +439,45 @@ delete_gr:
         * Loop through the entire shadow group file.
         */
 
-       for (sge = __sgr_get_head(); sge; sge = sge->next) {
+       for (sge = __sgr_get_head (); 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.
+                * Start with the entries that are completely corrupt. They
+                * have no (struct sgrp) entry because they couldn't be
+                * parsed properly.
                 */
 
                if (!sge->eptr) {
 
                        /*
-                        * Tell the user this entire line is bogus and
-                        * ask them to delete it.
+                        * Tell the user this entire line is bogus and ask
+                        * them to delete it.
                         */
 
-                       printf(_("invalid shadow group file entry\n"));
-                       printf(_("delete line `%s'? "), sge->line);
+                       printf (_("invalid shadow group file entry\n"));
+                       printf (_("delete line `%s'? "), sge->line);
                        errors++;
 
                        /*
                         * prompt the user to delete the entry or not
                         */
 
-                       if (!yes_or_no())
+                       if (!yes_or_no ())
                                continue;
 
                        /*
-                        * All shadow group file deletions wind up here.
+                        * 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.
+                        * 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'\n",
-                               sge->line));
+                     delete_sg:
+                       SYSLOG ((LOG_INFO, "delete shadow line `%s'",
+                                sge->line));
                        deleted++;
 
-                       __sgr_del_entry(sge);
+                       __sgr_del_entry (sge);
                        continue;
                }
 
@@ -506,7 +491,7 @@ delete_sg:
                 * Make sure this entry has a unique name.
                 */
 
-               for (tsge = __sgr_get_head(); tsge; tsge = tsge->next) {
+               for (tsge = __sgr_get_head (); tsge; tsge = tsge->next) {
 
                        const struct sgrp *ent = tsge->eptr;
 
@@ -524,7 +509,7 @@ delete_sg:
                        if (!ent)
                                continue;
 
-                       if (strcmp(sgr->sg_name, ent->sg_name) != 0)
+                       if (strcmp (sgr->sg_name, ent->sg_name) != 0)
                                continue;
 
                        /*
@@ -532,15 +517,15 @@ delete_sg:
                         * another and ask them to delete it.
                         */
 
-                       puts(_("duplicate shadow group entry\n"));
-                       printf(_("delete line `%s'? "), sge->line);
+                       puts (_("duplicate shadow group entry\n"));
+                       printf (_("delete line `%s'? "), sge->line);
                        errors++;
 
                        /*
                         * prompt the user to delete the entry or not
                         */
 
-                       if (yes_or_no())
+                       if (yes_or_no ())
                                goto delete_sg;
                }
 
@@ -548,11 +533,11 @@ delete_sg:
                 * Make sure this entry exists in the /etc/group file.
                 */
 
-               if (!gr_locate(sgr->sg_name)) {
-                       puts(_("no matching group file entry\n"));
-                       printf(_("delete line `%s'? "), sge->line);
+               if (!gr_locate (sgr->sg_name)) {
+                       puts (_("no matching group file entry\n"));
+                       printf (_("delete line `%s'? "), sge->line);
                        errors++;
-                       if (yes_or_no())
+                       if (yes_or_no ())
                                goto delete_sg;
                }
 
@@ -561,28 +546,30 @@ delete_sg:
                 */
 
                for (i = 0; sgr->sg_adm[i]; i++) {
-                       if (getpwnam(sgr->sg_adm[i]))
+                       if (getpwnam (sgr->sg_adm[i]))
                                continue;
                        /*
-                        * Can't find this user.  Remove them
+                        * Can't find this user. Remove them
                         * from the list.
                         */
 
                        errors++;
-                       printf(_("shadow group %s: no administrative user %s\n"),
+                       printf (_
+                               ("shadow group %s: no administrative user %s\n"),
                                sgr->sg_name, sgr->sg_adm[i]);
-                       printf(_("delete administrative member `%s'? "), sgr->sg_adm[i]);
+                       printf (_("delete administrative member `%s'? "),
+                               sgr->sg_adm[i]);
 
-                       if (!yes_or_no())
+                       if (!yes_or_no ())
                                continue;
 
-                       SYSLOG((LOG_INFO,
-                               "delete admin `%s' from shadow group `%s'\n",
-                               sgr->sg_adm[i], sgr->sg_name));
+                       SYSLOG ((LOG_INFO,
+                                "delete admin `%s' from shadow group `%s'",
+                                sgr->sg_adm[i], sgr->sg_name));
                        deleted++;
-                       delete_member(sgr->sg_adm, sgr->sg_adm[i]);
+                       delete_member (sgr->sg_adm, sgr->sg_adm[i]);
                        sge->changed = 1;
-                       __sgr_set_changed();
+                       __sgr_set_changed ();
                }
 
                /*
@@ -590,52 +577,51 @@ delete_sg:
                 */
 
                for (i = 0; sgr->sg_mem[i]; i++) {
-                       if (getpwnam(sgr->sg_mem[i]))
+                       if (getpwnam (sgr->sg_mem[i]))
                                continue;
 
                        /*
-                        * Can't find this user.  Remove them
-                        * from the list.
+                        * Can't find this user. Remove them from the list.
                         */
 
                        errors++;
-                       printf(_("shadow group %s: no user %s\n"),
+                       printf (_("shadow group %s: no user %s\n"),
                                sgr->sg_name, sgr->sg_mem[i]);
-                       printf(_("delete member `%s'? "), sgr->sg_mem[i]);
+                       printf (_("delete member `%s'? "), sgr->sg_mem[i]);
 
-                       if (!yes_or_no())
+                       if (!yes_or_no ())
                                continue;
 
-                       SYSLOG((LOG_INFO,
-                               "delete member `%s' from shadow group `%s'\n",
-                               sgr->sg_mem[i], sgr->sg_name));
+                       SYSLOG ((LOG_INFO,
+                                "delete member `%s' from shadow group `%s'",
+                                sgr->sg_mem[i], sgr->sg_name));
                        deleted++;
-                       delete_member(sgr->sg_mem, sgr->sg_mem[i]);
+                       delete_member (sgr->sg_mem, sgr->sg_mem[i]);
                        sge->changed = 1;
-                       __sgr_set_changed();
+                       __sgr_set_changed ();
                }
        }
 
-shadow_done:
-#endif /* SHADOWGRP */
+      shadow_done:
+#endif                         /* SHADOWGRP */
 
        /*
-        * All done.  If there were no deletions we can just abandon any
+        * All done. If there were no deletions we can just abandon any
         * changes to the files.
         */
 
        if (deleted) {
-write_and_bye:
-               if (!gr_close()) {
-                       fprintf(stderr, _("%s: cannot update file %s\n"),
-                               Prog, grp_file);
-                       exit(E_CANT_UPDATE);
+             write_and_bye:
+               if (!gr_close ()) {
+                       fprintf (stderr, _("%s: cannot update file %s\n"),
+                                Prog, grp_file);
+                       exit (E_CANT_UPDATE);
                }
 #ifdef SHADOWGRP
-               if (is_shadow && !sgr_close()) {
-                       fprintf(stderr, _("%s: cannot update file %s\n"),
-                               Prog, sgr_file);
-                       exit(E_CANT_UPDATE);
+               if (is_shadow && !sgr_close ()) {
+                       fprintf (stderr, _("%s: cannot update file %s\n"),
+                                Prog, sgr_file);
+                       exit (E_CANT_UPDATE);
                }
 #endif
        }
@@ -646,9 +632,9 @@ write_and_bye:
 
 #ifdef SHADOWGRP
        if (is_shadow)
-               sgr_unlock();
+               sgr_unlock ();
 #endif
-       (void) gr_unlock();
+       (void) gr_unlock ();
 
        /*
         * Tell the user what we did and exit.
@@ -656,14 +642,15 @@ write_and_bye:
 
        if (errors)
 #ifdef NDBM
-               printf(deleted ?
-                       _("%s: the files have been updated; run mkpasswd\n") :
-                       _("%s: no changes\n"), Prog);
+               printf (deleted ?
+                       _
+                       ("%s: the files have been updated; run mkpasswd\n")
+                       : _("%s: no changes\n"), Prog);
 #else
-               printf(deleted ?
+               printf (deleted ?
                        _("%s: the files have been updated\n") :
                        _("%s: no changes\n"), Prog);
 #endif
 
-       exit(errors ? E_BAD_ENTRY : E_OKAY);
+       exit (errors ? E_BAD_ENTRY : E_OKAY);
 }
index 8e641fd3a89dfd07b4f32db147710a65d9b94580..300b354c6450819d06fb07444968ee028f9ad832 100644 (file)
@@ -4,8 +4,8 @@
  *
  * Copyright (C) 1996, Marek Michalkiewicz
  * <marekm@i17linuxb.ists.pwr.wroc.pl>
- * This program may be freely used and distributed.  If you improve
- * it, please send me your changes.  Thanks!
+ * This program may be freely used and distributed. If you improve
+ * it, please send me your changes. Thanks!
  */
 
 #include <config.h>
 #include "sgroupio.h"
 
 #include "rcsid.h"
-RCSID(PKG_VER "$Id: grpconv.c,v 1.11 2000/08/26 18:27:18 marekm Exp $")
+RCSID (PKG_VER "$Id: grpconv.c,v 1.12 2002/01/05 15:41:43 kloczek Exp $")
 
 static int group_locked = 0;
 static int gshadow_locked = 0;
 
 /* local function prototypes */
-static void fail_exit(int);
+static void fail_exit (int);
 
-static void
-fail_exit(int status)
+static void fail_exit (int status)
 {
        if (group_locked)
-               gr_unlock();
+               gr_unlock ();
        if (gshadow_locked)
-               sgr_unlock();
-       exit(status);
+               sgr_unlock ();
+       exit (status);
 }
 
-int
-main(int argc, char **argv)
+int main (int argc, char **argv)
 {
        const struct group *gr;
        struct group grent;
@@ -54,45 +52,48 @@ main(int argc, char **argv)
        struct sgrp sgent;
        char *Prog = argv[0];
 
-       setlocale(LC_ALL, "");
-       bindtextdomain(PACKAGE, LOCALEDIR);
-       textdomain(PACKAGE);
+       setlocale (LC_ALL, "");
+       bindtextdomain (PACKAGE, LOCALEDIR);
+       textdomain (PACKAGE);
 
-       if (!gr_lock()) {
-               fprintf(stderr, _("%s: can't lock group file\n"), Prog);
-               fail_exit(5);
+       if (!gr_lock ()) {
+               fprintf (stderr, _("%s: can't lock group file\n"), Prog);
+               fail_exit (5);
        }
        group_locked++;
-       if (!gr_open(O_RDWR)) {
-               fprintf(stderr, _("%s: can't open group file\n"), Prog);
-               fail_exit(1);
+       if (!gr_open (O_RDWR)) {
+               fprintf (stderr, _("%s: can't open group file\n"), Prog);
+               fail_exit (1);
        }
 
-       if (!sgr_lock()) {
-               fprintf(stderr, _("%s: can't lock shadow group file\n"), Prog);
-               fail_exit(5);
+       if (!sgr_lock ()) {
+               fprintf (stderr, _("%s: can't lock shadow group file\n"),
+                        Prog);
+               fail_exit (5);
        }
        gshadow_locked++;
-       if (!sgr_open(O_CREAT | O_RDWR)) {
-               fprintf(stderr, _("%s: can't open shadow group file\n"), Prog);
-               fail_exit(1);
+       if (!sgr_open (O_CREAT | O_RDWR)) {
+               fprintf (stderr, _("%s: can't open shadow group file\n"),
+                        Prog);
+               fail_exit (1);
        }
 
        /*
         * Remove /etc/gshadow entries for groups not in /etc/group.
         */
-       sgr_rewind();
-       while ((sg = sgr_next())) {
-               if (gr_locate(sg->sg_name))
+       sgr_rewind ();
+       while ((sg = sgr_next ())) {
+               if (gr_locate (sg->sg_name))
                        continue;
 
-               if (!sgr_remove(sg->sg_name)) {
+               if (!sgr_remove (sg->sg_name)) {
                        /*
                         * This shouldn't happen (the entry exists) but...
                         */
-                       fprintf(stderr, _("%s: can't remove shadow group %s\n"),
-                               Prog, sg->sg_name);
-                       fail_exit(3);
+                       fprintf (stderr,
+                                _("%s: can't remove shadow group %s\n"),
+                                Prog, sg->sg_name);
+                       fail_exit (3);
                }
        }
 
@@ -100,74 +101,79 @@ main(int argc, char **argv)
         * Update shadow group passwords if non-shadow password is not "x".
         * Add any missing shadow group entries.
         */
-       gr_rewind();
-       while ((gr = gr_next())) {
-               sg = sgr_locate(gr->gr_name);
+       gr_rewind ();
+       while ((gr = gr_next ())) {
+               sg = sgr_locate (gr->gr_name);
                if (sg) {
-#if 0  /* because of sg_mem, but see below */
-                       if (strcmp(gr->gr_passwd, SHADOW_PASSWD_STRING) == 0)
+#if 0                          /* because of sg_mem, but see below */
+                       if (strcmp (gr->gr_passwd, SHADOW_PASSWD_STRING) ==
+                           0)
                                continue;
 #endif
                        /* update existing shadow group entry */
                        sgent = *sg;
-                       if (strcmp(gr->gr_passwd, SHADOW_PASSWD_STRING) != 0)
+                       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);
+                       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?
+                * 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)) {
-                       fprintf(stderr,
-                               _("%s: can't update shadow entry for %s\n"),
-                               Prog, sgent.sg_name);
-                       fail_exit(3);
+               if (!sgr_update (&sgent)) {
+                       fprintf (stderr,
+                                _
+                                ("%s: can't update shadow entry for %s\n"),
+                                Prog, 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)) {
-                       fprintf(stderr,
-                               _("%s: can't update entry for group %s\n"),
-                               Prog, grent.gr_name);
-                       fail_exit(3);
+               grent.gr_passwd = SHADOW_PASSWD_STRING; /* XXX warning: const */
+               if (!gr_update (&grent)) {
+                       fprintf (stderr,
+                                _
+                                ("%s: can't update entry for group %s\n"),
+                                Prog, grent.gr_name);
+                       fail_exit (3);
                }
        }
 
-       if (!sgr_close()) {
-               fprintf(stderr, _("%s: can't update shadow group file\n"), Prog);
-               fail_exit(3);
+       if (!sgr_close ()) {
+               fprintf (stderr, _("%s: can't update shadow group file\n"),
+                        Prog);
+               fail_exit (3);
        }
-       if (!gr_close()) {
-               fprintf(stderr, _("%s: can't update group file\n"), Prog);
-               fail_exit(3);
+       if (!gr_close ()) {
+               fprintf (stderr, _("%s: can't update group file\n"), Prog);
+               fail_exit (3);
        }
-       sgr_unlock();
-       gr_unlock();
+       sgr_unlock ();
+       gr_unlock ();
        return 0;
 }
-#else /* !SHADOWGRP */
-int
-main(int argc, char **argv)
+#else                          /* !SHADOWGRP */
+int main (int argc, char **argv)
 {
-       setlocale(LC_ALL, "");
-       bindtextdomain(PACKAGE, LOCALEDIR);
-       textdomain(PACKAGE);
-
-       fprintf(stderr, _("%s: not configured for shadow group support.\n"),
-               argv[0]);
-       exit(1);
+       setlocale (LC_ALL, "");
+       bindtextdomain (PACKAGE, LOCALEDIR);
+       textdomain (PACKAGE);
+
+       fprintf (stderr,
+                _("%s: not configured for shadow group support.\n"),
+                argv[0]);
+       exit (1);
 }
-#endif /* !SHADOWGRP */
+#endif                         /* !SHADOWGRP */
index 59cb4994b834a580c51b637e73da6fef23074526..4a1e7a11452624f5b84dc2a80cfe623fe3db8797 100644 (file)
  * Copyright (C) 1996, Michael Meskes <meskes@debian.org>
  * using sources from Marek Michalkiewicz
  * <marekm@i17linuxb.ists.pwr.wroc.pl>
- * This program may be freely used and distributed.  If you improve
- * it, please send me your changes.  Thanks!
+ * This program may be freely used and distributed. If you improve
+ * it, please send me your changes. Thanks!
  */
 
 #include <config.h>
 
 #include "rcsid.h"
-RCSID(PKG_VER "$Id: grpunconv.c,v 1.10 2000/08/26 18:27:18 marekm Exp $")
-
+RCSID (PKG_VER "$Id: grpunconv.c,v 1.11 2002/01/05 15:41:43 kloczek Exp $")
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <fcntl.h>
 #include <time.h>
 #include <unistd.h>
-
 #include <grp.h>
 #include "prototypes.h"
-
 #ifdef SHADOWGRP
-
 #include "groupio.h"
 #include "sgroupio.h"
-
 static int group_locked = 0;
 static int gshadow_locked = 0;
 
 /* local function prototypes */
-static void fail_exit(int);
+static void fail_exit (int);
 
-static void
-fail_exit(int status)
+static void fail_exit (int status)
 {
        if (group_locked)
-               gr_unlock();
+               gr_unlock ();
        if (gshadow_locked)
-               sgr_unlock();
-       exit(status);
+               sgr_unlock ();
+       exit (status);
 }
 
-int
-main(int argc, char **argv)
+int main (int argc, char **argv)
 {
        const struct group *gr;
        struct group grent;
        const struct sgrp *sg;
        char *Prog = argv[0];
 
-       setlocale(LC_ALL, "");
-       bindtextdomain(PACKAGE, LOCALEDIR);
-       textdomain(PACKAGE);
+       setlocale (LC_ALL, "");
+       bindtextdomain (PACKAGE, LOCALEDIR);
+       textdomain (PACKAGE);
 
-       if (!sgr_file_present())
-               exit(0);  /* no /etc/gshadow, nothing to do */
+       if (!sgr_file_present ())
+               exit (0);       /* no /etc/gshadow, nothing to do */
 
-       if (!gr_lock()) {
-               fprintf(stderr, _("%s: can't lock group file\n"), Prog);
-               fail_exit(5);
+       if (!gr_lock ()) {
+               fprintf (stderr, _("%s: can't lock group file\n"), Prog);
+               fail_exit (5);
        }
        group_locked++;
-       if (!gr_open(O_RDWR)) {
-               fprintf(stderr, _("%s: can't open group file\n"), Prog);
-               fail_exit(1);
+       if (!gr_open (O_RDWR)) {
+               fprintf (stderr, _("%s: can't open group file\n"), Prog);
+               fail_exit (1);
        }
 
-       if (!sgr_lock()) {
-               fprintf(stderr, _("%s: can't lock shadow group file\n"), Prog);
-               fail_exit(5);
+       if (!sgr_lock ()) {
+               fprintf (stderr, _("%s: can't lock shadow group file\n"),
+                        Prog);
+               fail_exit (5);
        }
        gshadow_locked++;
-       if (!sgr_open(O_RDWR)) {
-               fprintf(stderr, _("%s: can't open shadow group file\n"), Prog);
-               fail_exit(1);
+       if (!sgr_open (O_RDWR)) {
+               fprintf (stderr, _("%s: can't open shadow group file\n"),
+                        Prog);
+               fail_exit (1);
        }
 
        /*
         * Update group passwords if non-shadow password is "x".
         */
-       gr_rewind();
-       while ((gr = gr_next())) {
-               sg = sgr_locate(gr->gr_name);
-               if (sg && strcmp(gr->gr_passwd, SHADOW_PASSWD_STRING) == 0) {
-                       /* add password to /etc/group */
-                       grent = *gr;
+       gr_rewind ();
+       while ((gr = gr_next ())) {
+               sg = sgr_locate (gr->gr_name);
+               if (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)) {
-                               fprintf(stderr,
-                                       _("%s: can't update entry for group %s\n"),
-                                       Prog, grent.gr_name);
-                               fail_exit(3);
+                       if (!gr_update (&grent)) {
+                               fprintf (stderr,
+                                        _
+                                        ("%s: can't update entry for group %s\n"),
+                                        Prog, grent.gr_name);
+                               fail_exit (3);
                        }
                }
        }
 
-       if (!sgr_close()) {
-               fprintf(stderr, _("%s: can't update shadow group file\n"), Prog);
-               fail_exit(3);
+       if (!sgr_close ()) {
+               fprintf (stderr, _("%s: can't update shadow group file\n"),
+                        Prog);
+               fail_exit (3);
        }
 
-       if (!gr_close()) {
-               fprintf(stderr, _("%s: can't update group file\n"), Prog);
-               fail_exit(3);
+       if (!gr_close ()) {
+               fprintf (stderr, _("%s: can't update group file\n"), Prog);
+               fail_exit (3);
        }
 
-       if (unlink(SGROUP_FILE) != 0) {
-               fprintf(stderr, _("%s: can't delete shadow group file\n"), Prog);
-               fail_exit(3);
+       if (unlink (SGROUP_FILE) != 0) {
+               fprintf (stderr, _("%s: can't delete shadow group file\n"),
+                        Prog);
+               fail_exit (3);
        }
 
-       sgr_unlock();
-       gr_unlock();
+       sgr_unlock ();
+       gr_unlock ();
        return 0;
 }
-#else /* !SHADOWGRP */
-int
-main(int argc, char **argv)
+#else                          /* !SHADOWGRP */
+int main (int argc, char **argv)
 {
-       setlocale(LC_ALL, "");
-       bindtextdomain(PACKAGE, LOCALEDIR);
-       textdomain(PACKAGE);
-
-       fprintf(stderr, _("%s: not configured for shadow group support.\n"), argv[0]);
-       exit(1);
+       setlocale (LC_ALL, "");
+       bindtextdomain (PACKAGE, LOCALEDIR);
+       textdomain (PACKAGE);
+
+       fprintf (stderr,
+                _("%s: not configured for shadow group support.\n"),
+                argv[0]);
+       exit (1);
 }
-#endif /* !SHADOWGRP */
+#endif                         /* !SHADOWGRP */
index c33c58cfae611f2e1028de085718f10775400f8e..c5d2e45c5fa3396c0ddf3093ab6114adab3bd92d 100644 (file)
--- a/src/id.c
+++ b/src/id.c
@@ -17,7 +17,7 @@
  * 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
+ * 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)
 /*
  * id - print current process user identification information
  *
- *     Print the current process identifiers.  This includes the
- *     UID, GID, effective-UID and effective-GID.  Optionally print
+ *     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>
 
 #include "rcsid.h"
-RCSID(PKG_VER "$Id: id.c,v 1.7 2001/09/01 04:19:16 kloczek Exp $")
-
+RCSID (PKG_VER "$Id: id.c,v 1.10 2002/01/05 15:41:43 kloczek Exp $")
 #include <sys/types.h>
 #include <stdio.h>
 #include <grp.h>
 #include <pwd.h>
 #include "defines.h"
-
 /* local function prototypes */
-static void usage(void);
+static void usage (void);
 
-static void
-usage(void)
+static void usage (void)
 {
 #ifdef HAVE_GETGROUPS
-       fprintf(stderr, _("usage: id [ -a ]\n"));
+       fprintf (stderr, _("usage: id [-a]\n"));
 #else
-       fprintf(stderr, _("usage: id\n"));
+       fprintf (stderr, _("usage: id\n"));
 #endif
-       exit(1);
+       exit (1);
 }
 
-/*ARGSUSED*/
-int
-main(int argc, char **argv)
+ /*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.
+ * 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;
-       int     aflg = 0;
+       int ngroups;
+       int aflg = 0;
 #endif
-       struct  passwd  *pw;
-       struct  group   *gr;
+       struct passwd *pw;
+       struct group *gr;
 
-       setlocale(LC_ALL, "");
-       bindtextdomain(PACKAGE, LOCALEDIR);
-       textdomain(PACKAGE);
+       setlocale (LC_ALL, "");
+       bindtextdomain (PACKAGE, LOCALEDIR);
+       textdomain (PACKAGE);
 
        /*
         * Dynamically get the maximum number of groups from system, instead
@@ -93,46 +89,46 @@ main(int argc, char **argv)
         * 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);
+       sys_ngroups = sysconf (_SC_NGROUPS_MAX);
 #ifdef HAVE_GETGROUPS
-       groups=malloc(sys_ngroups*sizeof(GETGROUPS_T));
+       groups = malloc (sys_ngroups * sizeof (GETGROUPS_T));
        /*
-        * See if the -a flag has been given to print out the
-        * concurrent group set.
+        * 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"))
-                       usage();
+                       usage ();
                else
                        aflg = 1;
        }
 #else
        if (argc > 1)
-               usage();
+               usage ();
 #endif
 
-       ruid = getuid();
-       euid = geteuid();
-       rgid = getgid();
-       egid = getegid();
+       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.
+        * 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);
+       pw = getpwuid (ruid);
        if (pw)
-               printf(_("uid=%d(%s)"), (int) ruid, pw->pw_name);
+               printf (_("uid=%u(%s)"), ruid, pw->pw_name);
        else
-               printf(_("uid=%d"), (int) ruid);
+               printf (_("uid=%u"), ruid);
 
-       gr = getgrgid(rgid);
+       gr = getgrgid (rgid);
        if (gr)
-               printf(_(" gid=%d(%s)"), (int) rgid, gr->gr_name);
+               printf (_(" gid=%u(%s)"), rgid, gr->gr_name);
        else
-               printf(_(" gid=%d"), (int) rgid);
+               printf (_(" gid=%u"), rgid);
 
        /*
         * Print out the effective user ID and group ID if they are
@@ -140,58 +136,55 @@ main(int argc, char **argv)
         */
 
        if (ruid != euid) {
-               pw = getpwuid(euid);
+               pw = getpwuid (euid);
                if (pw)
-                       printf(_(" euid=%d(%s)"), (int) euid, pw->pw_name);
+                       printf (_(" euid=%u(%s)"), euid, pw->pw_name);
                else
-                       printf(_(" euid=%d"), (int) euid);
+                       printf (_(" euid=%u"), euid);
        }
        if (rgid != egid) {
-               gr = getgrgid(egid);
+               gr = getgrgid (egid);
                if (gr)
-                       printf(_(" egid=%d(%s)"), (int) egid, gr->gr_name);
+                       printf (_(" egid=%u(%s)"), egid, gr->gr_name);
                else
-                       printf(_(" egid=%d"), (int) egid);
+                       printf (_(" egid=%u"), 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.
+        * 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
+                * Start off the group message. It will be of the format
                 *
-                *      groups=###(aaa),###(aaa),###(aaa)
+                *      groups=###(aaa),###(aaa),###(aaa)
                 *
                 * where "###" is a numerical value and "aaa" is the
                 * corresponding name for each respective numerical value.
                 */
 
-               printf(_(" groups="));
+               printf (_(" groups="));
                for (i = 0; i < ngroups; i++) {
                        if (i)
-                               putchar(',');
+                               putchar (',');
 
-                       gr = getgrgid(groups[i]);
+                       gr = getgrgid (groups[i]);
                        if (gr)
-                               printf("%d(%s)", (int) groups[i], gr->gr_name);
+                               printf ("%u(%s)", groups[i], gr->gr_name);
                        else
-                               printf("%d", (int) groups[i]);
+                               printf ("%u", groups[i]);
                }
        }
-       free(groups);
+       free (groups);
 #endif
 
        /*
         * Finish off the line.
         */
 
-       putchar('\n');
-       exit(0);
-       /*NOTREACHED*/
-}
+       putchar ('\n');
+       exit (0);
+ /*NOTREACHED*/}
index 833e068e1674b40ea770e26eea9a5cd01d8ae120..63409a960bba8c936279d9364407d46912e51844 100644 (file)
@@ -17,7 +17,7 @@
  * 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
+ * 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)
 #include <config.h>
 
 #include "rcsid.h"
-RCSID(PKG_VER "$Id: lastlog.c,v 1.9 2000/11/29 12:50:09 kloczek Exp $")
-
+RCSID (PKG_VER "$Id: lastlog.c,v 1.11 2002/01/05 15:41:43 kloczek Exp $")
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <stdio.h>
 #include <pwd.h>
 #include <time.h>
-
 #include "prototypes.h"
 #include "defines.h"
 #if HAVE_LASTLOG_H
@@ -45,17 +43,15 @@ RCSID(PKG_VER "$Id: lastlog.c,v 1.9 2000/11/29 12:50:09 kloczek Exp $")
 #else
 #include "lastlog_.h"
 #endif
-
 /*
  * Needed for MkLinux DR1/2/2.1 - J.
  */
 #ifndef LASTLOG_FILE
 #define LASTLOG_FILE "/var/log/lastlog"
 #endif
-
 static FILE *lastlogfile;      /* lastlog file stream */
-static off_t user;     /* one single user, specified on command line */
-static int days;       /* number of days to consider for print command */
+static off_t user;             /* one single user, specified on command line */
+static int days;               /* number of days to consider for print command */
 static time_t seconds;         /* that number of days in seconds */
 
 static int uflg = 0;           /* set if user is a valid user id */
@@ -64,79 +60,78 @@ static struct lastlog lastlog;      /* scratch structure to play with ... */
 static struct stat statbuf;    /* fstat buffer for file size */
 static struct passwd *pwent;
 
-#include <getopt.h> 
-static struct option const longopts[] =
-{
-  {"user", required_argument, 0, 'u'},
-  {"time", required_argument, 0, 't'},
-  {"help", no_argument, 0, 'h'},
-  {0, 0, 0, 0}
+#include <getopt.h>
+static struct option const longopts[] = {
+       {"user", required_argument, 0, 'u'},
+       {"time", required_argument, 0, 't'},
+       {"help", no_argument, 0, 'h'},
+       {0, 0, 0, 0}
 };
 
-extern char    *optarg;
-
 #define        NOW     (time ((time_t *) 0))
 
 /* local function prototypes */
-static void print(void);
-static void print_one(const struct passwd *);
+static void print (void);
+static void print_one (const struct passwd *);
 
-int
-main(int argc, char **argv)
+int main (int argc, char **argv)
 {
-       int     c;
+       int c;
 
-       setlocale(LC_ALL, "");
-       bindtextdomain(PACKAGE, LOCALEDIR);
-       textdomain(PACKAGE);
+       setlocale (LC_ALL, "");
+       bindtextdomain (PACKAGE, LOCALEDIR);
+       textdomain (PACKAGE);
 
-       if ((lastlogfile = fopen (LASTLOG_FILE,"r")) == (FILE *) 0) {
+       if ((lastlogfile = fopen (LASTLOG_FILE, "r")) == (FILE *) 0) {
                perror (LASTLOG_FILE);
                exit (1);
        }
-       while ((c = getopt_long (argc, argv, "u:t:h", longopts, NULL)) != -1) {
+       while ((c =
+               getopt_long (argc, argv, "u:t:h", longopts, NULL)) != -1) {
                switch (c) {
-                       case 'u':
-                               pwent = getpwnam (optarg);
-                               if (!pwent) {
-                                       fprintf(stderr,
-                                               _("Unknown User: %s\n"),
-                                               optarg);
-                                       exit (1);
-                               }
-                               uflg++;
-                               user = pwent->pw_uid;
-                               break;
-                       case 't':
-                               days = atoi (optarg);
-                               seconds = days * DAY;
-                               tflg++;
-                               break;
-                       case 'h':
-                               fprintf(stdout, _("Usage: %s [<-u|--login> login-name] [<-t|--time> days] [<-h|--help>]\n"),
-                                       argv[0]);
-                               exit(0);
-                       default:
-                               fprintf(stdout, _("Usage: %s [<-u|--login> login-name] [<-t|--time> days] [<-h|--help>]\n"),
-                                       argv[0]);
-                               exit(1);
+               case 'u':
+                       pwent = getpwnam (optarg);
+                       if (!pwent) {
+                               fprintf (stderr,
+                                        _("Unknown User: %s\n"), optarg);
+                               exit (1);
+                       }
+                       uflg++;
+                       user = pwent->pw_uid;
+                       break;
+               case 't':
+                       days = atoi (optarg);
+                       seconds = days * DAY;
+                       tflg++;
+                       break;
+               case 'h':
+                       fprintf (stdout,
+                                _
+                                ("Usage: %s [<-u|--login> login-name] [<-t|--time> days] [<-h|--help>]\n"),
+                                argv[0]);
+                       exit (0);
+               default:
+                       fprintf (stdout,
+                                _
+                                ("Usage: %s [<-u|--login> login-name] [<-t|--time> days] [<-h|--help>]\n"),
+                                argv[0]);
+                       exit (1);
                }
        }
        print ();
        fclose (lastlogfile);
        exit (0);
-       /*NOTREACHED*/
-}
+ /*NOTREACHED*/}
 
-static void
-print(void)
+static void print (void)
 {
-       off_t   offset;
+       off_t offset;
 
        if (uflg) {
-               offset = (unsigned long) user * sizeof lastlog;
+               offset = (unsigned long) user *sizeof lastlog;
+
                if (fstat (fileno (lastlogfile), &statbuf)) {
-                       perror(LASTLOG_FILE);
+                       perror (LASTLOG_FILE);
                        return;
                }
                if (offset >= statbuf.st_size)
@@ -144,7 +139,7 @@ print(void)
 
                fseek (lastlogfile, offset, SEEK_SET);
                if (fread ((char *) &lastlog, sizeof lastlog, 1,
-                                       lastlogfile) == 1)
+                          lastlogfile) == 1)
                        print_one (pwent);
                else
                        perror (LASTLOG_FILE);
@@ -152,10 +147,11 @@ print(void)
                setpwent ();
                while ((pwent = getpwent ())) {
                        user = pwent->pw_uid;
-                       offset = (unsigned long) user * sizeof lastlog;
+                       offset = (unsigned long) user *sizeof lastlog;
+
                        fseek (lastlogfile, offset, SEEK_SET);
                        if (fread ((char *) &lastlog, sizeof lastlog, 1,
-                                       lastlogfile) != 1)
+                                  lastlogfile) != 1)
                                continue;
 
                        if (tflg && NOW - lastlog.ll_time > seconds)
@@ -166,44 +162,44 @@ print(void)
        }
 }
 
-static void
-print_one(const struct passwd *pw)
+static void print_one (const struct passwd *pw)
 {
-       static  int     once;
-       char    *cp;
-       struct  tm      *tm;
+       static int once;
+       char *cp;
+       struct tm *tm;
+
 #ifdef HAVE_STRFTIME
        char ptime[80];
 #endif
 
-       if (! pw)
+       if (!pw)
                return;
 
-       if (! once) {
+       if (!once) {
 #ifdef HAVE_LL_HOST
-               printf(_("Username         Port     From             Latest\n"));
+               printf (_
+                       ("Username         Port     From             Latest\n"));
 #else
-               printf(_("Username                Port     Latest\n"));
+               printf (_("Username                Port     Latest\n"));
 #endif
                once++;
        }
        tm = localtime (&lastlog.ll_time);
 #ifdef HAVE_STRFTIME
-       strftime(ptime, sizeof(ptime), "%a %b %e %H:%M:%S %z %Y", tm);
+       strftime (ptime, sizeof (ptime), "%a %b %e %H:%M:%S %z %Y", tm);
        cp = ptime;
 #else
        cp = asctime (tm);
        cp[24] = '\0';
 #endif
 
-       if(lastlog.ll_time == (time_t) 0)
+       if (lastlog.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,
                lastlog.ll_line, lastlog.ll_host, cp);
 #else
-       printf ("%-16s\t%-8.8s %s\n", pw->pw_name,
-               lastlog.ll_line, cp);
+       printf ("%-16s\t%-8.8s %s\n", pw->pw_name, lastlog.ll_line, cp);
 #endif
 }
index e63316d018872c7cd82dccf197c81fb0a673b19a..511e66a7a34a265898a004f1c04c5d0ac93ad785 100644 (file)
@@ -17,7 +17,7 @@
  * 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
+ * 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)
@@ -30,8 +30,7 @@
 #include <config.h>
 
 #include "rcsid.h"
-RCSID(PKG_VER "$Id: login.c,v 1.21 2001/06/28 20:47:06 kloczek Exp $")
-
+RCSID (PKG_VER "$Id: login.c,v 1.25 2002/01/05 15:41:43 kloczek Exp $")
 #include "prototypes.h"
 #include "defines.h"
 #include <sys/stat.h>
@@ -45,45 +44,38 @@ RCSID(PKG_VER "$Id: login.c,v 1.21 2001/06/28 20:47:06 kloczek Exp $")
 #include <utmp.h>
 #endif
 #include <signal.h>
-
 #if HAVE_LASTLOG_H
 #include <lastlog.h>
 #else
 #include "lastlog_.h"
 #endif
-
 #include "faillog.h"
 #include "failure.h"
 #include "pwauth.h"
 #include "getdef.h"
 #include "dialchk.h"
-
 #ifdef SVR4_SI86_EUA
 #include <sys/proc.h>
 #include <sys/sysi86.h>
 #endif
-
 #ifdef RADIUS
 /*
  * Support for RADIUS authentication based on a hacked util-linux login
- * source sent to me by Jon Lewis.  Not tested.  You need to link login
+ * source sent to me by Jon Lewis. Not tested. You need to link login
  * with the radauth.c file (not included here - it doesn't have a clear
  * copyright statement, and I don't want to have problems with Debian
  * putting the whole package in non-free because of this).  --marekm
  */
 #include "radlogin.h"
 #endif
-
 #ifdef UT_ADDR
 #include <netdb.h>
 #endif
-
 #ifdef USE_PAM
 #include "pam_defs.h"
-
 static const struct pam_conv conv = {
-        misc_conv,
-        NULL
+       misc_conv,
+       NULL
 };
 
 static pam_handle_t *pamh = NULL;
@@ -96,7 +88,7 @@ static pam_handle_t *pamh = NULL;
 #define PAM_END { retcode = pam_close_session(pamh,0); \
                pam_end(pamh,retcode); }
 
-#endif /* USE_PAM */
+#endif                         /* USE_PAM */
 
 /*
  * Needed for MkLinux DR1/2/2.1 - J.
@@ -107,16 +99,18 @@ static pam_handle_t *pamh = NULL;
 
 const char *hostname = "";
 
-struct passwd  pwent;
+struct passwd pwent;
+
 #if HAVE_UTMPX_H
-struct utmpx   utxent, failent;
-struct utmp    utent;
+struct utmpx utxent, failent;
+struct utmp utent;
 #else
-struct utmp    utent, failent;
+struct utmp utent, failent;
 #endif
-struct lastlog lastlog;
+struct lastlog lastlog;
 static int pflg = 0;
 static int fflg = 0;
+
 #ifdef RLOGIN
 static int rflg = 0;
 #else
@@ -140,17 +134,16 @@ static int timeout;
 extern char **newenvp;
 extern size_t newenvc;
 
-extern void dolastlog(struct lastlog *, const struct passwd *, const char *, const char *);
+extern void dolastlog (struct lastlog *, const struct passwd *,
+                      const char *, const char *);
 
-extern int     optind;
-extern char    *optarg;
-extern char    **environ;
+extern char **environ;
 
 #ifndef USE_PAM
-extern int login_access(const char *, const char *);
+extern int login_access (const char *, const char *);
 #endif
 
-extern void login_fbtab(const char *, uid_t, gid_t);
+extern void login_fbtab (const char *, uid_t, gid_t);
 
 #ifndef        ALARM
 #define        ALARM   60
@@ -160,31 +153,21 @@ extern void login_fbtab(const char *, uid_t, gid_t);
 #define        RETRIES 3
 #endif
 
+#ifndef USE_PAM
 static struct faillog faillog;
-
-#define        NO_SHADOW       "no shadow password for `%s'%s\n"
-#define        BAD_PASSWD      "invalid password for `%s'%s\n"
-#define        BAD_DIALUP      "invalid dialup password for `%s' on `%s'\n"
-#define        BAD_TIME        "invalid login time for `%s'%s\n"
-#define        BAD_ROOT_LOGIN  "ILLEGAL ROOT LOGIN%s\n"
-#define        ROOT_LOGIN      "ROOT LOGIN%s\n"
-#define        FAILURE_CNT     "exceeded failure limit for `%s'%s\n"
-#define REG_LOGIN      "`%s' logged in%s\n"
-#define LOGIN_REFUSED  "LOGIN `%s' REFUSED%s\n"
-#define REENABLED2 \
-       "login `%s' re-enabled after temporary lockout (%d failures).\n"
-#define MANY_FAILS     "REPEATED login failures%s\n"
+#endif
 
 /* local function prototypes */
-static void usage(void);
-static void setup_tty(void);
-static void bad_time_notify(void);
-static void check_flags(int, char * const *);
+static void usage (void);
+static void setup_tty (void);
+static void check_flags (int, char *const *);
+
 #ifndef USE_PAM
-static void check_nologin(void);
+static void bad_time_notify (void);
+static void check_nologin (void);
 #endif
-static void init_env(void);
-static RETSIGTYPE alarm_handler(int);
+static void init_env (void);
+static RETSIGTYPE alarm_handler (int);
 
 /*
  * usage - print login command usage and exit
@@ -195,39 +178,37 @@ static RETSIGTYPE alarm_handler(int);
  * login -f name       (for pre-authenticated login: datakit, xterm, etc.)
  */
 
-static void
-usage(void)
+static void usage (void)
 {
-       fprintf(stderr, _("usage: %s [-p] [name]\n"), Prog);
+       fprintf (stderr, _("usage: %s [-p] [name]\n"), Prog);
        if (!amroot)
-               exit(1);
-       fprintf(stderr, _("       %s [-p] [-h host] [-f name]\n"), Prog);
+               exit (1);
+       fprintf (stderr, _("       %s [-p] [-h host] [-f name]\n"), Prog);
 #ifdef RLOGIN
-       fprintf(stderr, _("       %s [-p] -r host\n"), Prog);
+       fprintf (stderr, _("       %s [-p] -r host\n"), Prog);
 #endif
-       exit(1);
+       exit (1);
 }
 
 
-static void
-setup_tty(void)
+static void setup_tty (void)
 {
        TERMIO termio;
 
-       GTTY(0, &termio);               /* get terminal characteristics */
+       GTTY (0, &termio);      /* get terminal characteristics */
 
        /*
         * Add your favorite terminal modes here ...
         */
 
-       termio.c_lflag |= ISIG|ICANON|ECHO|ECHOE;
+       termio.c_lflag |= ISIG | ICANON | ECHO | ECHOE;
        termio.c_iflag |= ICRNL;
 
 #if defined(ECHOKE) && defined(ECHOCTL)
-       termio.c_lflag |= ECHOKE|ECHOCTL;
+       termio.c_lflag |= ECHOKE | ECHOCTL;
 #endif
 #if defined(ECHOPRT) && defined(NOFLSH) && defined(TOSTOP)
-       termio.c_lflag &= ~(ECHOPRT|NOFLSH|TOSTOP);
+       termio.c_lflag &= ~(ECHOPRT | NOFLSH | TOSTOP);
 #endif
 #ifdef ONLCR
        termio.c_oflag |= ONLCR;
@@ -242,19 +223,21 @@ setup_tty(void)
 
        termio.c_cc[VEOF] = '\04';
        termio.c_cflag &= ~CSIZE;
-       termio.c_cflag |= (PARENB|CS7);
-       termio.c_lflag |= (ISIG|ICANON|ECHO|IEXTEN);
-       termio.c_iflag |= (BRKINT|IGNPAR|ISTRIP|IMAXBEL|ICRNL|IXON);
+       termio.c_cflag |= (PARENB | CS7);
+       termio.c_lflag |= (ISIG | ICANON | ECHO | IEXTEN);
+       termio.c_iflag |=
+           (BRKINT | IGNPAR | ISTRIP | IMAXBEL | ICRNL | IXON);
        termio.c_iflag &= ~IXANY;
-       termio.c_oflag |= (XTABS|OPOST|ONLCR);
+       termio.c_oflag |= (XTABS | OPOST | ONLCR);
 #endif
 #if 0
-       termio.c_cc[VERASE] = getdef_num("ERASECHAR", '\b');
-       termio.c_cc[VKILL] = getdef_num("KILLCHAR", '\025');
+       termio.c_cc[VERASE] = getdef_num ("ERASECHAR", '\b');
+       termio.c_cc[VKILL] = getdef_num ("KILLCHAR", '\025');
 #else
        /* leave these values unchanged if not specified in login.defs */
-       termio.c_cc[VERASE] = getdef_num("ERASECHAR", termio.c_cc[VERASE]);
-       termio.c_cc[VKILL] = getdef_num("KILLCHAR", termio.c_cc[VKILL]);
+       termio.c_cc[VERASE] =
+           getdef_num ("ERASECHAR", termio.c_cc[VERASE]);
+       termio.c_cc[VKILL] = getdef_num ("KILLCHAR", termio.c_cc[VKILL]);
 #endif
 
        /*
@@ -262,69 +245,68 @@ setup_tty(void)
         * effect after the first username login 
         */
 
-       STTY(0, &termio);
+       STTY (0, &termio);
 }
 
 
 /*
  * Tell the user that this is not the right time to login at this tty
  */
-static void
-bad_time_notify(void)
+#ifndef USE_PAM
+static void bad_time_notify (void)
 {
 #ifdef HUP_MESG_FILE
        FILE *mfp;
 
-       if ((mfp = fopen(HUP_MESG_FILE, "r")) != NULL) {
+       if ((mfp = fopen (HUP_MESG_FILE, "r")) != NULL) {
                int c;
 
-               while ((c = fgetc(mfp)) != EOF) {
-                       if (c == '\n')
-                               putchar('\r');
-                       putchar(c);
+               while ((c = fgetc (mfp)) != EOF) {
+                       if (c == '\n')
+                               putchar ('\r');
+                       putchar (c);
                }
-               fclose(mfp);
+               fclose (mfp);
        } else
 #endif
-               printf(_("Invalid login time\n"));
-       fflush(stdout);
+               printf (_("Invalid login time\n"));
+       fflush (stdout);
 }
+#endif
 
 
-static void
-check_flags(int argc, char * const *argv)
+static void check_flags (int argc, char *const *argv)
 {
        int arg;
 
        /*
-        * Check the flags for proper form.  Every argument starting with
-        * "-" must be exactly two characters long.  This closes all the
+        * 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 (argv[arg][0] == '-' && strlen (argv[arg]) > 2)
+                       usage ();
        }
 }
 
 #ifndef USE_PAM
-static void
-check_nologin(void)
+static void check_nologin (void)
 {
        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
+        * 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 (fname != NULL && access(fname, F_OK) == 0) {
-               FILE    *nlfp;
-               int     c;
+       fname = getdef_str ("NOLOGINS_FILE");
+       if (fname != NULL && access (fname, F_OK) == 0) {
+               FILE *nlfp;
+               int c;
 
                /*
                 * Cat the file if it can be opened, otherwise just
@@ -341,28 +323,29 @@ check_nologin(void)
                        fflush (stdout);
                        fclose (nlfp);
                } else
-                       printf(_("\nSystem closed for routine maintenance\n"));
+                       printf (_
+                               ("\nSystem closed for routine maintenance\n"));
                /*
-                * Non-root users must exit.  Root gets the message, but
+                * Non-root users must exit. Root gets the message, but
                 * gets to login.
                 */
 
                if (pwent.pw_uid != 0) {
-                       closelog();
-                       exit(0);
+                       closelog ();
+                       exit (0);
                }
-               printf(_("\n[Disconnect bypassed -- root login allowed.]\n"));
+               printf (_
+                       ("\n[Disconnect bypassed -- root login allowed.]\n"));
        }
 }
-#endif /* !USE_PAM */
+#endif                         /* !USE_PAM */
 
-static void
-init_env(void)
+static void init_env (void)
 {
        char *cp, *tmp;
 
-       if ((tmp = getenv("LANG"))) {
-               addenv("LANG", tmp);
+       if ((tmp = getenv ("LANG"))) {
+               addenv ("LANG", tmp);
        }
 
        /*
@@ -370,28 +353,28 @@ init_env(void)
         * work correctly.
         */
 
-       if ((tmp = getenv("TZ"))) {
-               addenv("TZ", tmp);
-       } else if ((cp = getdef_str("ENV_TZ")))
-               addenv(*cp == '/' ? tz(cp) : cp, NULL);
+       if ((tmp = getenv ("TZ"))) {
+               addenv ("TZ", tmp);
+       } else if ((cp = getdef_str ("ENV_TZ")))
+               addenv (*cp == '/' ? tz (cp) : cp, NULL);
 
        /* 
         * Add the clock frequency so that profiling commands work
         * correctly.
         */
 
-       if ((tmp = getenv("HZ"))) {
-               addenv("HZ", tmp);
-       } else if ((cp = getdef_str("ENV_HZ")))
-               addenv(cp, NULL);
+       if ((tmp = getenv ("HZ"))) {
+               addenv ("HZ", tmp);
+       } else if ((cp = getdef_str ("ENV_HZ")))
+               addenv (cp, NULL);
 }
 
 
-static RETSIGTYPE
-alarm_handler(int sig)
+static RETSIGTYPE alarm_handler (int sig)
 {
-       fprintf(stderr, _("\nLogin timed out after %d seconds.\n"), timeout);
-       exit(0);
+       fprintf (stderr, _("\nLogin timed out after %d seconds.\n"),
+                timeout);
+       exit (0);
 }
 
 
@@ -399,9 +382,9 @@ alarm_handler(int sig)
  * 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
+ *     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
+ *     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.
  *
@@ -413,38 +396,39 @@ alarm_handler(int sig)
  *     -h - the name of the remote host
  */
 
-int
-main(int argc, char **argv)
+int main (int argc, char **argv)
 {
-       char    username[32];
-       char    tty[BUFSIZ];
+       char username[32];
+       char tty[BUFSIZ];
+
 #ifdef RLOGIN
-       char    term[128] = "";
+       char term[128] = "";
 #endif
-#ifdef HAVE_STRFTIME
+#if defined(HAVE_STRFTIME) && !defined(USE_PAM)
        char ptime[80];
 #endif
-       int     reason = PW_LOGIN;
-       int     delay;
-       int     retries;
-       int     failed;
-       int     flag;
-       int     subroot = 0;
-       int     is_console;
+       int reason = PW_LOGIN;
+       int delay;
+       int retries;
+       int failed;
+       int flag;
+       int subroot = 0;
+       int is_console;
        const char *cp;
-       char    *tmp;
-       char    fromhost[512];
-       struct  passwd  *pwd;
-       char    **envp = environ;
+       char *tmp;
+       char fromhost[512];
+       struct passwd *pwd;
+       char **envp = environ;
        static char temp_pw[2];
        static char temp_shell[] = "/bin/sh";
+
 #ifdef USE_PAM
        int retcode;
        pid_t child;
        char *pam_user;
-#endif /* USE_PAM */
-#ifdef SHADOWPWD
-       struct  spwd    *spwd=NULL;
+#endif                         /* USE_PAM */
+#if defined(SHADOWPWD) && !defined(USE_PAM)
+       struct spwd *spwd = NULL;
 #endif
 #ifdef RADIUS
        RAD_USER_DATA rad_user_data;
@@ -466,21 +450,21 @@ main(int argc, char **argv)
         * Some quick initialization.
         */
 
-       sanitize_env();
+       sanitize_env ();
 
-       setlocale(LC_ALL, "");
-       bindtextdomain(PACKAGE, LOCALEDIR);
-       textdomain(PACKAGE);
+       setlocale (LC_ALL, "");
+       bindtextdomain (PACKAGE, LOCALEDIR);
+       textdomain (PACKAGE);
 
-       initenv();
+       initenv ();
 
        username[0] = '\0';
-       amroot = (getuid() == 0);
-       Prog = Basename(argv[0]);
+       amroot = (getuid () == 0);
+       Prog = Basename (argv[0]);
 
-       check_flags(argc, argv);
+       check_flags (argc, argv);
 
-       while ((flag = getopt(argc, argv, "d:f:h:pr:")) != EOF) {
+       while ((flag = getopt (argc, argv, "d:f:h:pr:")) != EOF) {
                switch (flag) {
                case 'p':
                        pflg++;
@@ -491,9 +475,9 @@ main(int argc, char **argv)
                         * (-f root, *not* -froot).  --marekm
                         */
                        if (optarg != argv[optind - 1])
-                               usage();
+                               usage ();
                        fflg++;
-                       STRFCPY(username, optarg);
+                       STRFCPY (username, optarg);
                        break;
 #ifdef RLOGIN
                case 'r':
@@ -511,7 +495,7 @@ main(int argc, char **argv)
                        /* "-d device" ignored for compatibility */
                        break;
                default:
-                       usage();
+                       usage ();
                }
        }
 
@@ -521,7 +505,7 @@ main(int argc, char **argv)
         */
 
        if (rflg && (hflg || fflg))
-               usage();
+               usage ();
 #endif
 
        /*
@@ -529,330 +513,362 @@ main(int argc, char **argv)
         */
 
        if ((rflg || fflg || hflg) && !amroot) {
-               fprintf(stderr, _("%s: permission denied\n"), Prog);
-               exit(1);
+               fprintf (stderr, _("%s: permission denied\n"), Prog);
+               exit (1);
        }
 
-       if (!isatty(0) || !isatty(1) || !isatty(2))
-               exit(1);                /* must be a terminal */
+       if (!isatty (0) || !isatty (1) || !isatty (2))
+               exit (1);       /* must be a terminal */
 
 #if 0
        /*
-        * Get the utmp file entry and get the tty name from it.  The
+        * Get the utmp file entry and get the tty name from it. The
         * current process ID must match the process ID in the utmp
         * file if there are no additional flags on the command line.
         */
-       checkutmp(!rflg && !fflg && !hflg);
+       checkutmp (!rflg && !fflg && !hflg);
 #else
        /*
         * Be picky if run by normal users (possible if installed setuid
-        * root), but not if run by root.  This way it still allows logins
+        * 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
         */
-       checkutmp(!amroot);
+       checkutmp (!amroot);
 #endif
-       STRFCPY(tty, utent.ut_line);
-       is_console = console(tty);
+       STRFCPY (tty, utent.ut_line);
+       is_console = console (tty);
 
        if (rflg || hflg) {
 #ifdef UT_ADDR
                struct hostent *he;
 
                /*
-                * Fill in the ut_addr field (remote login IP address).
-                * XXX - login from util-linux does it, but this is not
-                * the right place to do it.  The program that starts
-                * login (telnetd, rlogind) knows the IP address, so it
-                * should create the utmp entry and fill in ut_addr.
-                * gethostbyname() is not 100% reliable (the remote host
-                * may be unknown, etc.).  --marekm
+                * Fill in the ut_addr field (remote login IP address). XXX
+                * - login from util-linux does it, but this is not the
+                * right place to do it. The program that starts login
+                * (telnetd, rlogind) knows the IP address, so it should
+                * create the utmp entry and fill in ut_addr. 
+                * gethostbyname() is not 100% reliable (the remote host may
+                * be unknown, etc.).  --marekm
                 */
-               if ((he = gethostbyname(hostname))) {
-                       utent.ut_addr = *((int32_t *)(he->h_addr_list[0]));
+               if ((he = gethostbyname (hostname))) {
+                       utent.ut_addr =
+                           *((int32_t *) (he->h_addr_list[0]));
 #endif
 #ifdef UT_HOST
-               strncpy(utent.ut_host, hostname, sizeof(utent.ut_host));
+                       strncpy (utent.ut_host, hostname,
+                                sizeof (utent.ut_host));
 #endif
 #if HAVE_UTMPX_H
-               strncpy(utxent.ut_host, hostname, sizeof(utxent.ut_host));
+                       strncpy (utxent.ut_host, hostname,
+                                sizeof (utxent.ut_host));
 #endif
+                       /*
+                        * Add remote hostname to the environment. I think
+                        * (not sure) I saw it once on Irix.  --marekm
+                        */
+                       addenv ("REMOTEHOST", hostname);
+               }
+#ifdef __linux__
                /*
-                * Add remote hostname to the environment.  I think
-                * (not sure) I saw it once on Irix.  --marekm
+                * workaround for init/getty leaving junk in ut_host at least in
+                * some version of RedHat.  --marekm
                 */
-               addenv("REMOTEHOST", hostname);
-       }
-#ifdef __linux__ 
-/* workaround for init/getty leaving junk in ut_host at least in some
-   version of RedHat.  --marekm */
-       else if (amroot)
-               memzero(utent.ut_host, sizeof utent.ut_host);
-#endif
-       if (hflg && fflg) {
-               reason = PW_RLOGIN;
-               preauth_flag++;
-       }
+               else if (amroot)
+                       memzero (utent.ut_host, sizeof utent.ut_host);
+#endif
+               if (hflg && fflg) {
+                       reason = PW_RLOGIN;
+                       preauth_flag++;
+               }
 #ifdef RLOGIN
-       if (rflg && do_rlogin(hostname, username, sizeof username, term, sizeof term))
-               preauth_flag++;
+               if (rflg
+                   && do_rlogin (hostname, username, sizeof username,
+                                 term, sizeof term))
+                       preauth_flag++;
 #endif
 
-       OPENLOG("login");
+               OPENLOG ("login");
 
-       setup_tty();
+               setup_tty ();
 
-       umask(getdef_num("UMASK", 077));
+               umask (getdef_num ("UMASK", 077));
 
-       {
-               /* 
-                * 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.
-                */
+               {
+                       /* 
+                        * 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);
+                       long limit = getdef_long ("ULIMIT", -1L);
 
-               if (limit != -1)
-                       set_filesize_limit(limit);
-       }
+                       if (limit != -1)
+                               set_filesize_limit (limit);
+               }
 
-       /*
-        * The entire environment will be preserved if the -p flag
-        * is used.
-        */
+               /*
+                * The entire environment will be preserved if the -p flag
+                * is used.
+                */
 
-       if (pflg)
-               while (*envp)           /* add inherited environment, */
-                       addenv(*envp++, NULL); /* some variables change later */
+               if (pflg)
+                       while (*envp)   /* add inherited environment, */
+                               addenv (*envp++, NULL); /* some variables change later */
 
 #ifdef RLOGIN
-       if (term[0] != '\0')
-               addenv("TERM", term);
-       else
+               if (term[0] != '\0')
+                       addenv ("TERM", term);
+               else
 #endif
-       /* preserve TERM from getty */
-       if (!pflg && (tmp = getenv("TERM")))
-               addenv("TERM", tmp);
+                       /* preserve TERM from getty */
+               if (!pflg && (tmp = getenv ("TERM")))
+                       addenv ("TERM", tmp);
 
-       init_env();
+               init_env ();
 
-       if (optind < argc) {            /* get the user name */
-               if (rflg || fflg)
-                       usage();
+               if (optind < argc) {    /* get the user name */
+                       if (rflg || fflg)
+                               usage ();
 
 #ifdef SVR4
-               /*
-                * The "-h" option can't be used with a command-line username,
-                * because telnetd invokes us as: login -h host TERM=...
-                */
+                       /*
+                        * The "-h" option can't be used with a command-line username,
+                        * because telnetd invokes us as: login -h host TERM=...
+                        */
 
-               if (! hflg)
+                       if (!hflg)
 #endif
-               {
-                       STRFCPY(username, argv[optind]);
-                       strzero(argv[optind]);
-                       ++optind;
+                       {
+                               STRFCPY (username, argv[optind]);
+                               strzero (argv[optind]);
+                               ++optind;
+                       }
                }
-       }
 #ifdef SVR4
-       /*
-        * check whether ttymon has done the prompt for us already
-        */
+               /*
+                * check whether ttymon has done the prompt for us already
+                */
 
-       {
-           char *ttymon_prompt;
+               {
+                       char *ttymon_prompt;
 
-           if ((ttymon_prompt = getenv("TTYPROMPT")) != NULL &&
-                   (*ttymon_prompt != 0)) {
-               /* read name, without prompt */
-               login_prompt((char *)0, username, sizeof username);
-           }
-       }
-#endif /* SVR4 */
-       if (optind < argc)              /* now set command line variables */
-                   set_env(argc - optind, &argv[optind]);
+                       if ((ttymon_prompt = getenv ("TTYPROMPT")) != NULL
+                           && (*ttymon_prompt != 0)) {
+                               /* read name, without prompt */
+                               login_prompt ((char *) 0, username,
+                                             sizeof username);
+                       }
+               }
+#endif                         /* SVR4 */
+               if (optind < argc)      /* now set command line variables */
+                       set_env (argc - optind, &argv[optind]);
 
-       if (rflg || hflg)
-               cp = hostname;
-       else
+               if (rflg || hflg)
+                       cp = hostname;
+               else
 #ifdef UT_HOST
-       if (utent.ut_host[0])
-               cp = utent.ut_host;
-       else
+               if (utent.ut_host[0])
+                       cp = utent.ut_host;
+               else
 #endif
 #if HAVE_UTMPX_H
-       if (utxent.ut_host[0])
-               cp = utxent.ut_host;
-       else
+               if (utxent.ut_host[0])
+                       cp = utxent.ut_host;
+               else
 #endif
-               cp = "";
+                       cp = "";
 
-       if (*cp)
-               snprintf(fromhost, sizeof fromhost,
-                       _(" on `%.100s' from `%.200s'"), tty, cp);
-       else
-               snprintf(fromhost, sizeof fromhost, _(" on `%.100s'"), tty);
+               if (*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 */
-       signal(SIGALRM, alarm_handler);
-       timeout = getdef_num("LOGIN_TIMEOUT", ALARM);
-       if (timeout > 0)
-               alarm(timeout);
+             top:
+               /* only allow ALARM sec. for login */
+               signal (SIGALRM, alarm_handler);
+               timeout = getdef_num ("LOGIN_TIMEOUT", ALARM);
+               if (timeout > 0)
+                       alarm (timeout);
 
-       environ = newenvp;              /* make new environment active */
-       delay = getdef_num("FAIL_DELAY", 1);
-       retries = getdef_num("LOGIN_RETRIES", RETRIES);
+               environ = newenvp;      /* make new environment active */
+               delay = getdef_num ("FAIL_DELAY", 1);
+               retries = getdef_num ("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.  */
-       retcode = pam_set_item(pamh, PAM_RHOST, hostname);
-       PAM_FAIL_CHECK;
-       retcode = pam_set_item(pamh, PAM_TTY, tty);
-       PAM_FAIL_CHECK;
-#ifdef HAVE_PAM_FAIL_DELAY
-       retcode = pam_fail_delay(pamh, 1000000*delay);
-       PAM_FAIL_CHECK;
-#endif
-       /* if fflg == 1, then the user has already been authenticated */
-       if (!fflg || (getuid() != 0)) {
-               int failcount = 0;
-               char hostn[256];
-               char login_prompt[256]; /* That's one hell of a prompt :) */
-
-               /* Make the login prompt look like we want it */
-               if (!gethostname(hostn, sizeof(hostn)))
-                       snprintf(login_prompt, sizeof(login_prompt),
-                                "%s login: ", hostn);
-               else
-                       snprintf(login_prompt, sizeof(login_prompt),
-                                "login: ");
-
-               retcode = pam_set_item(pamh, PAM_USER_PROMPT, login_prompt);
+               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.
+                */
+               retcode = pam_set_item (pamh, PAM_RHOST, hostname);
+               PAM_FAIL_CHECK;
+               retcode = pam_set_item (pamh, PAM_TTY, tty);
                PAM_FAIL_CHECK;
-
-               /* if we didn't get a user on the command line,
-                  set it to NULL */
-               pam_get_item(pamh, PAM_USER, (const void **) &pam_user);
-               if (pam_user[0] == '\0')
-                       pam_set_item(pamh, PAM_USER, NULL);
-
-               /* 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? */
-
-               retcode = pam_authenticate(pamh, 0);
-               while ((failcount++ < retries) &&
-                      ((retcode == PAM_AUTH_ERR) ||
-                       (retcode == PAM_USER_UNKNOWN) ||
-                       (retcode == PAM_CRED_INSUFFICIENT) ||
-                       (retcode == PAM_AUTHINFO_UNAVAIL))) {
-                       pam_get_item(pamh, PAM_USER, (const void **) &pam_user);
-                       syslog(LOG_NOTICE,"FAILED LOGIN %d FROM %s FOR %s, %s",
-                               failcount, hostname, pam_user,
-                               pam_strerror(pamh, retcode));
 #ifdef HAVE_PAM_FAIL_DELAY
-                       pam_fail_delay(pamh, 1000000*delay);
+               retcode = pam_fail_delay (pamh, 1000000 * delay);
+               PAM_FAIL_CHECK;
 #endif
-                       fprintf(stderr, "Login incorrect\n\n");
-                       pam_set_item(pamh, PAM_USER, NULL);
-                       retcode = pam_authenticate(pamh, 0);
-               }
+               /* if fflg == 1, then the user has already been authenticated */
+               if (!fflg || (getuid () != 0)) {
+                       int failcount = 0;
+                       char hostn[256];
+                       char login_prompt[256]; /* That's one hell of a prompt :) */
+
+                       /* Make the login prompt look like we want it */
+                       if (!gethostname (hostn, sizeof (hostn)))
+                               snprintf (login_prompt,
+                                         sizeof (login_prompt),
+                                         "%s login: ", hostn);
+                       else
+                               snprintf (login_prompt,
+                                         sizeof (login_prompt),
+                                         "login: ");
+
+                       retcode =
+                           pam_set_item (pamh, PAM_USER_PROMPT,
+                                         login_prompt);
+                       PAM_FAIL_CHECK;
+
+                       /* if we didn't get a user on the command line,
+                          set it to NULL */
+                       pam_get_item (pamh, PAM_USER,
+                                     (const void **) &pam_user);
+                       if (pam_user[0] == '\0')
+                               pam_set_item (pamh, PAM_USER, NULL);
 
-               if (retcode != PAM_SUCCESS) {
-                       pam_get_item(pamh, PAM_USER, (const void **) &pam_user);
+                       /*
+                        * 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?
+                        */
 
-                       if (retcode == PAM_MAXTRIES)
-                               syslog(LOG_NOTICE,
-                                       "TOO MANY LOGIN TRIES (%d) FROM %s FOR %s, %s",
+                       retcode = pam_authenticate (pamh, 0);
+                       while ((failcount++ < retries) &&
+                              ((retcode == PAM_AUTH_ERR) ||
+                               (retcode == PAM_USER_UNKNOWN) ||
+                               (retcode == PAM_CRED_INSUFFICIENT) ||
+                               (retcode == PAM_AUTHINFO_UNAVAIL))) {
+                               pam_get_item (pamh, PAM_USER,
+                                             (const void **) &pam_user);
+                               syslog (LOG_NOTICE,
+                                       "FAILED LOGIN %d FROM %s FOR %s, %s",
                                        failcount, hostname, pam_user,
-                                       pam_strerror(pamh, retcode));
-                       else
-                               syslog(LOG_NOTICE,
-                                       "FAILED LOGIN SESSION FROM %s FOR %s, %s",
-                                       hostname, pam_user,
-                                       pam_strerror(pamh, retcode));
-
-                       fprintf(stderr, "\nLogin incorrect\n");
-                       pam_end(pamh, retcode);
-                       exit(0);
-               }
+                                       pam_strerror (pamh, retcode));
+#ifdef HAVE_PAM_FAIL_DELAY
+                               pam_fail_delay (pamh, 1000000 * delay);
+#endif
+                               fprintf (stderr, "Login incorrect\n\n");
+                               pam_set_item (pamh, PAM_USER, NULL);
+                               retcode = pam_authenticate (pamh, 0);
+                       }
 
-               retcode = pam_acct_mgmt(pamh, 0);
+                       if (retcode != PAM_SUCCESS) {
+                               pam_get_item (pamh, PAM_USER,
+                                             (const void **) &pam_user);
+
+                               if (retcode == PAM_MAXTRIES)
+                                       syslog (LOG_NOTICE,
+                                               "TOO MANY LOGIN TRIES (%d) FROM %s FOR %s, %s",
+                                               failcount, hostname,
+                                               pam_user,
+                                               pam_strerror (pamh,
+                                                             retcode));
+                               else
+                                       syslog (LOG_NOTICE,
+                                               "FAILED LOGIN SESSION FROM %s FOR %s, %s",
+                                               hostname, pam_user,
+                                               pam_strerror (pamh,
+                                                             retcode));
+
+                               fprintf (stderr, "\nLogin incorrect\n");
+                               pam_end (pamh, retcode);
+                               exit (0);
+                       }
 
-               if(retcode == PAM_NEW_AUTHTOK_REQD) {
-                       retcode = pam_chauthtok(pamh, PAM_CHANGE_EXPIRED_AUTHTOK);
-               }
+                       retcode = pam_acct_mgmt (pamh, 0);
 
-               PAM_FAIL_CHECK;
-       }
+                       if (retcode == PAM_NEW_AUTHTOK_REQD) {
+                               retcode =
+                                   pam_chauthtok (pamh,
+                                                  PAM_CHANGE_EXPIRED_AUTHTOK);
+                       }
 
-       /* Grab the user information out of the password file for future usage
-          First get the username that we are actually using, though.
-        */
-       retcode = pam_get_item(pamh, PAM_USER, (const void **) &pam_user);
-       setpwent();
-       pwd = getpwnam(pam_user);
+                       PAM_FAIL_CHECK;
+               }
 
-       if (!pwd || setup_groups(pwd))
-               exit(1);
+               /* Grab the user information out of the password file for future usage
+                  First get the username that we are actually using, though.
+                */
+               retcode =
+                   pam_get_item (pamh, PAM_USER,
+                                 (const void **) &pam_user);
+               setpwent ();
+               pwd = getpwnam (pam_user);
 
-       retcode = pam_setcred(pamh, PAM_ESTABLISH_CRED);
-       PAM_FAIL_CHECK;
+               if (!pwd || setup_groups (pwd))
+                       exit (1);
 
-       retcode = pam_open_session(pamh, 0);
-       PAM_FAIL_CHECK;
+               retcode = pam_setcred (pamh, PAM_ESTABLISH_CRED);
+               PAM_FAIL_CHECK;
 
+               retcode = pam_open_session (pamh, 0);
+               PAM_FAIL_CHECK;
 
-#else  /* ! USE_PAM */
-       while (1) {     /* repeatedly get login/password pairs */
-               failed = 0;             /* haven't failed authentication yet */
+#else                          /* ! USE_PAM */
+               while (1) {     /* repeatedly get login/password pairs */
+                       failed = 0;     /* haven't failed authentication yet */
 #ifdef RADIUS
-               is_rad_login = 0;
+                       is_rad_login = 0;
 #endif
-               if (! username[0]) {    /* need to get a login id */
+               if (!username[0]) {     /* need to get a login id */
                        if (subroot) {
                                closelog ();
                                exit (1);
                        }
                        preauth_flag = 0;
 #ifndef LOGIN_PROMPT
-#ifdef __linux__  /* hostname login: - like in util-linux login */
-                       login_prompt(_("\n%s login: "), username, sizeof username);
+#ifdef __linux__               /* hostname login: - like in util-linux login */
+                       login_prompt (_("\n%s login: "), username,
+                                     sizeof username);
 #else
-                       login_prompt(_("login: "), username, sizeof username);
+                       login_prompt (_("login: "), username,
+                                     sizeof username);
 #endif
 #else
-                       login_prompt(LOGIN_PROMPT, username, sizeof username);
+                       login_prompt (LOGIN_PROMPT, username,
+                                     sizeof username);
 #endif
                        continue;
                }
-#endif /* ! USE_PAM */
+#endif                         /* ! USE_PAM */
 
 #ifdef USE_PAM
-               if (!(pwd = getpwnam(pam_user))) {
+               if (!(pwd = getpwnam (pam_user))) {
                        pwent.pw_name = pam_user;
 #else
-               if (!(pwd = getpwnam(username))) {
+               if (!(pwd = getpwnam (username))) {
                        pwent.pw_name = username;
 #endif
-                       strcpy(temp_pw, "!");
+                       strcpy (temp_pw, "!");
                        pwent.pw_passwd = temp_pw;
                        pwent.pw_shell = temp_shell;
 
@@ -864,21 +880,26 @@ top:
 #ifndef USE_PAM
 #ifdef SHADOWPWD
                spwd = NULL;
-               if (pwd && strcmp(pwd->pw_passwd, SHADOW_PASSWD_STRING) == 0) {
-                       spwd = getspnam(username);
+               if (pwd
+                   && strcmp (pwd->pw_passwd,
+                              SHADOW_PASSWD_STRING) == 0) {
+                       spwd = getspnam (username);
                        if (spwd)
                                pwent.pw_passwd = spwd->sp_pwdp;
                        else
-                               SYSLOG((LOG_WARN, NO_SHADOW, username, fromhost));
+                               SYSLOG ((LOG_WARN,
+                                        "no shadow password for `%s'%s",
+                                        username, fromhost));
                }
-#endif /* SHADOWPWD */
+#endif                         /* SHADOWPWD */
 
                /*
                 * If the encrypted password begins with a "!", the account
                 * is locked and the user cannot login, even if they have
                 * been "pre-authenticated."
                 */
-               if (pwent.pw_passwd[0] == '!' || pwent.pw_passwd[0] == '*')
+               if (pwent.pw_passwd[0] == '!'
+                   || pwent.pw_passwd[0] == '*')
                        failed = 1;
 
                /*
@@ -889,29 +910,34 @@ top:
                        goto auth_ok;
 
                /*
-                * No password prompt if logging in from listed ttys
-                * (local console).  Passwords don't help much if you
-                * have physical access to the hardware anyway...
-                * Suggested by Pavel Machek <pavel@bug.ucw.cz>.
+                * No password prompt if logging in from listed ttys (local
+                * console). Passwords don't help much if you have physical
+                * access to the hardware anyway...  Suggested by Pavel
+                * Machek <pavel@bug.ucw.cz>.
                 * NOTE: password still required for root logins!
                 */
                if (pwd && (pwent.pw_uid != 0)
-                   && is_listed("NO_PASSWORD_CONSOLE", tty, 0)) {
+                   && is_listed ("NO_PASSWORD_CONSOLE", tty, 0)) {
                        temp_pw[0] = '\0';
                        pwent.pw_passwd = temp_pw;
                }
 
-               if (pw_auth(pwent.pw_passwd, username, reason, (char *) 0) == 0)
+               if (pw_auth
+                   (pwent.pw_passwd, username, reason,
+                    (char *) 0) == 0)
                        goto auth_ok;
 
 #ifdef RADIUS
                /*
                 * If normal passwd authentication didn't work, try radius.
                 */
-               
+
                if (failed) {
-                       pwd = rad_authenticate(&rad_user_data, username,
-                                              clear_pass ? clear_pass : "");
+                       pwd =
+                           rad_authenticate (&rad_user_data,
+                                             username,
+                                             clear_pass ?
+                                             clear_pass : "");
                        if (pwd) {
                                is_rad_login = 1;
                                pwent = *pwd;
@@ -919,184 +945,199 @@ top:
                                goto auth_ok;
                        }
                }
-#endif /* RADIUS */
+#endif                         /* RADIUS */
 
                /*
                 * Don't log unknown usernames - I mistyped the password for
-                * username at least once...  Should probably use LOG_AUTHPRIV
+                * username at least once. Should probably use LOG_AUTHPRIV
                 * for those who really want to log them.  --marekm
                 */
-               SYSLOG((LOG_WARN, BAD_PASSWD,
-                       (pwd || getdef_bool("LOG_UNKFAIL_ENAB")) ?
-                       username : "UNKNOWN", fromhost));
+               SYSLOG ((LOG_WARN, "invalid password for `%s' %s",
+                        (pwd
+                         || getdef_bool ("LOG_UNKFAIL_ENAB")) ?
+                        username : "UNKNOWN", fromhost));
                failed = 1;
 
-auth_ok:
+             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.
+                * This is the point where all authenticated users wind up.
+                * If you reach this far, your password has been
+                * authenticated and so on.
                 */
 
 #if defined(RADIUS) && !(defined(DES_RPC) || defined(KERBEROS))
                if (clear_pass) {
-                       strzero(clear_pass);
+                       strzero (clear_pass);
                        clear_pass = NULL;
                }
 #endif
 
-               if (getdef_bool("DIALUPS_CHECK_ENAB")) {
+               if (getdef_bool ("DIALUPS_CHECK_ENAB")) {
                        alarm (30);
 
-                       if (! dialcheck (tty, pwent.pw_shell[0] ?
-                                       pwent.pw_shell:"/bin/sh")) {
-                               SYSLOG((LOG_WARN, BAD_DIALUP, username, tty));
+                       if (!dialcheck (tty, pwent.pw_shell[0] ?
+                                       pwent.pw_shell : "/bin/sh")) {
+                               SYSLOG ((LOG_WARN,
+                                        "invalid dialup password for `%s' on `%s'",
+                                        username, tty));
                                failed = 1;
                        }
                }
 
-               if (! failed && pwent.pw_name && pwent.pw_uid == 0 &&
-                               ! is_console) {
-                       SYSLOG((LOG_CRIT, BAD_ROOT_LOGIN, fromhost));
+               if (!failed && pwent.pw_name && pwent.pw_uid == 0
+                   && !is_console) {
+                       SYSLOG ((LOG_CRIT, "ILLEGAL ROOT LOGIN %s",
+                                fromhost));
                        failed = 1;
                }
 #ifdef LOGIN_ACCESS
-               if (!failed && !login_access(username, *hostname ? hostname : tty)) {
-                       SYSLOG((LOG_WARN, LOGIN_REFUSED, username, fromhost));
+               if (!failed
+                   && !login_access (username,
+                     *hostname ? hostname : tty))
+               {
+                       SYSLOG ((LOG_WARN, "LOGIN `%s' REFUSED %s", username,
+                                fromhost));
                        failed = 1;
                }
 #endif
-               if (pwd && getdef_bool("FAILLOG_ENAB") && 
-                               ! failcheck (pwent.pw_uid, &faillog, failed)) {
-                       SYSLOG((LOG_CRIT, FAILURE_CNT, username, fromhost));
+               if (pwd && getdef_bool ("FAILLOG_ENAB") &&
+                   !failcheck (pwent.pw_uid, &faillog, failed)) {
+                       SYSLOG ((LOG_CRIT, 
+                                "exceeded failure limit for `%s' %s",
+                                username, fromhost));
                        failed = 1;
                }
-               if (! failed)
+               if (!failed)
                        break;
 
                /* don't log non-existent users */
-               if (pwd && getdef_bool("FAILLOG_ENAB"))
+               if (pwd && getdef_bool ("FAILLOG_ENAB"))
                        failure (pwent.pw_uid, tty, &faillog);
-               if (getdef_str("FTMP_FILE") != NULL) {
+               if (getdef_str ("FTMP_FILE") != NULL) {
                        const char *failent_user;
 
 #if HAVE_UTMPX_H
                        failent = utxent;
-                       gettimeofday(&(failent.ut_tv), NULL);
+                       gettimeofday (&(failent.ut_tv), NULL);
 #else
                        failent = utent;
-                       time(&failent.ut_time);
+                       time (&failent.ut_time);
 #endif
                        if (pwd) {
                                failent_user = pwent.pw_name;
                        } else {
-                               if (getdef_bool("LOG_UNKFAIL_ENAB"))
+                               if (getdef_bool
+                                   ("LOG_UNKFAIL_ENAB"))
                                        failent_user = username;
                                else
                                        failent_user = "UNKNOWN";
                        }
-                       strncpy(failent.ut_user, failent_user, sizeof(failent.ut_user));
+                       strncpy (failent.ut_user, failent_user,
+                                sizeof (failent.ut_user));
 #ifdef USER_PROCESS
                        failent.ut_type = USER_PROCESS;
 #endif
-                       failtmp(&failent);
+                       failtmp (&failent);
                }
-               memzero(username, sizeof username);
+               memzero (username, sizeof username);
 
                if (--retries <= 0)
-                       SYSLOG((LOG_CRIT, MANY_FAILS, fromhost));
+                       SYSLOG ((LOG_CRIT, "REPEATED login failures%s",
+                                fromhost));
 #if 1
                /*
-                * 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 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 (pwent.pw_passwd[0] == '\0')
-                       pw_auth("!", username, reason, (char *) 0);
+                       pw_auth ("!", username, reason,
+                                (char *) 0);
 #endif
                /*
                 * Wait a while (a la SVR4 /usr/bin/login) before attempting
-                * to login the user again.  If the earlier alarm occurs
+                * to login the user again. If the earlier alarm occurs
                 * before the sleep() below completes, login will exit.
                 */
 
                if (delay > 0)
-                       sleep(delay);
+                       sleep (delay);
 
-               puts(_("Login incorrect"));
+               puts (_("Login incorrect"));
 
                /* allow only one attempt with -r or -f */
                if (rflg || fflg || retries <= 0) {
-                       closelog();
-                       exit(1);
+                       closelog ();
+                       exit (1);
                }
-       }  /* while (1) */
-#endif /* ! USE_PAM */
-       (void) alarm (0);               /* turn off alarm clock */
-#ifndef USE_PAM  /* PAM does this */
+       }               /* while (1) */
+#endif                         /* ! USE_PAM */
+       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
+        * authenticated. now prints a message, as suggested
         * by Ivan Nejgebauer <ian@unsux.ns.ac.yu>.  --marekm
         */
-       if (getdef_bool("PORTTIME_CHECKS_ENAB") &&
-           !isttytime(pwent.pw_name, tty, time ((time_t *) 0))) {
-               SYSLOG((LOG_WARN, BAD_TIME, username, fromhost));
-               closelog();
-               bad_time_notify();
-               exit(1);
+       if (getdef_bool ("PORTTIME_CHECKS_ENAB") &&
+           !isttytime (pwent.pw_name, tty, time ((time_t *) 0))) {
+               SYSLOG ((LOG_WARN, "invalid login time for `%s'%s",
+                        username, fromhost));
+               closelog ();
+               bad_time_notify ();
+               exit (1);
        }
 
-       check_nologin();
+       check_nologin ();
 #endif
 
-       if (getenv("IFS"))              /* don't export user IFS ... */
-               addenv("IFS= \t\n", NULL);  /* ... instead, set a safe IFS */
+       if (getenv ("IFS"))     /* don't export user IFS ... */
+               addenv ("IFS= \t\n", NULL);     /* ... instead, set a safe IFS */
 
 #ifdef USE_PAM
-       setutmp(pam_user, tty, hostname); /* make entry in utmp & wtmp files */
+       setutmp (pam_user, tty, hostname);      /* make entry in utmp & wtmp files */
 #else
-       setutmp(username, tty, hostname); /* make entry in utmp & wtmp files */
+       setutmp (username, tty, hostname);      /* make entry in utmp & wtmp files */
 #endif
        if (pwent.pw_shell[0] == '*') { /* subsystem root */
                pwent.pw_shell++;       /* skip the '*' */
                subsystem (&pwent);     /* figure out what to execute */
-               subroot++;              /* say i was here again */
-               endpwent ();            /* close all of the file which were */
-               endgrent ();            /* open in the original rooted file */
+               subroot++;      /* say i was here again */
+               endpwent ();    /* close all of the file which were */
+               endgrent ();    /* open in the original rooted file */
 #ifdef SHADOWPWD
-               endspent ();            /* system.  they will be re-opened */
+               endspent ();    /* system. they will be re-opened */
 #endif
 #ifdef SHADOWGRP
-               endsgent ();            /* in the new rooted file system */
+               endsgent ();    /* in the new rooted file system */
 #endif
-               goto top;               /* go do all this all over again */
+               goto top;       /* go do all this all over again */
        }
-#ifndef USE_PAM  /* pam_lastlog handles this */
-       if (getdef_bool("LASTLOG_ENAB")) /* give last login and log this one */
-               dolastlog(&lastlog, &pwent, utent.ut_line, hostname);
+#ifndef USE_PAM                        /* pam_lastlog handles this */
+       if (getdef_bool ("LASTLOG_ENAB"))       /* give last login and log this one */
+               dolastlog (&lastlog, &pwent, utent.ut_line,
+                          hostname);
 #endif
 
 #ifdef SVR4_SI86_EUA
-       sysi86(SI86LIMUSER, EUA_ADD_USER);      /* how do we test for fail? */
+       sysi86 (SI86LIMUSER, EUA_ADD_USER);     /* how do we test for fail? */
 #endif
 
-#ifndef USE_PAM /* PAM handles this as well */
-#ifdef AGING
+#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.  expire() closes password
-        * files, and changes to the user in the child before executing
-        * the passwd program.  --marekm
+        * Have to do this while we still have root privileges, otherwise we
+        * don't have access to /etc/shadow. expire() closes password files,
+        * and changes to the user in the child before executing the passwd
+        * program.  --marekm
         */
 #ifdef SHADOWPWD
-       if (spwd) {                     /* check for age of password */
+       if (spwd) {     /* check for age of password */
                if (expire (&pwent, spwd)) {
-                       pwd = getpwnam(username);
-                       spwd = getspnam(username);
+                       pwd = getpwnam (username);
+                       spwd = getspnam (username);
                        if (pwd)
                                pwent = *pwd;
                }
@@ -1105,214 +1146,227 @@ auth_ok:
 #ifdef ATT_AGE
        if (pwent.pw_age && pwent.pw_age[0]) {
                if (expire (&pwent)) {
-                       pwd = getpwnam(username);
+                       pwd = getpwnam (username);
                        if (pwd)
                                pwent = *pwd;
                }
        }
-#endif /* ATT_AGE */
-#endif /* SHADOWPWD */
-#endif /* AGING */
+#endif                         /* ATT_AGE */
+#endif                         /* SHADOWPWD */
 
 #ifdef RADIUS
        if (is_rad_login) {
                char whofilename[128];
                FILE *whofile;
 
-               snprintf(whofilename, sizeof whofilename, "/var/log/radacct/%.20s", tty);
-               whofile = fopen(whofilename, "w");
+               snprintf (whofilename, sizeof whofilename,
+                         "/var/log/radacct/%.20s", tty);
+               whofile = fopen (whofilename, "w");
                if (whofile) {
-                       fprintf(whofile, "%s\n", username);
-                       fclose(whofile);
+                       fprintf (whofile, "%s\n", username);
+                       fclose (whofile);
                }
        }
 #endif
-       setup_limits(&pwent);  /* nice, ulimit etc. */
-#endif /* ! USE_PAM */
-       chown_tty(tty, &pwent);
+       setup_limits (&pwent);  /* nice, ulimit etc. */
+#endif                         /* ! USE_PAM */
+       chown_tty (tty, &pwent);
 
 #ifdef LOGIN_FBTAB
        /*
-        * XXX - not supported yet.  Change permissions and ownerships of
+        * XXX - not supported yet. Change permissions and ownerships of
         * devices like floppy/audio/mouse etc. for console logins, based
         * on /etc/fbtab or /etc/logindevperm configuration files (Suns do
-        * this with their framebuffer devices).  Problems:
+        * this with their framebuffer devices). Problems:
         *
         * - most systems (except BSD) don't have that nice revoke() system
-        * call to ensure the previous user didn't leave a process holding
-        * one of these devices open or mmap'ed.  Any volunteers to do it
-        * in Linux?
+        *   call to ensure the previous user didn't leave a process holding
+        *   one of these devices open or mmap'ed. Any volunteers to do it
+        *   in Linux?
         *
         * - what to do with different users logged in on different virtual
-        * consoles?  Maybe permissions should be changed only on user's
-        * request, by running a separate (setuid root) program?
+        *   consoles?  Maybe permissions should be changed only on user's
+        *   request, by running a separate (setuid root) program?
         *
         * - init/telnetd/rlogind/whatever should restore permissions after
-        * the user logs out.
+        *   the user logs out.
         *
-        * Try the new CONSOLE_GROUPS feature instead.  It adds specified
+        * Try the new CONSOLE_GROUPS feature instead. It adds specified
         * groups (like "floppy") to the group set if the user is logged in
-        * on the console.  This still has the first problem (users leaving
+        * on the console. This still has the first problem (users leaving
         * processes with these devices open), but doesn't need to change
         * any permissions, just make them 0660 root:floppy etc.  --marekm
         *
         * Warning: users can still gain permanent access to these groups
-        * unless any user-writable filesystems are mounted with the "nosuid"
-        * option.  Alternatively, the kernel could be modified to prevent
-        * ordinary users from setting the setgid bit on executables.
+        * unless any user-writable filesystems are mounted with the
+        * "nosuid" option. Alternatively, the kernel could be modified to
+        * prevent ordinary users from setting the setgid bit on
+        * executables.
         */
-       login_fbtab(tty, pwent.pw_uid, pwent.pw_gid);
+       login_fbtab (tty, pwent.pw_uid, pwent.pw_gid);
 #endif
 
        /* We call set_groups() above because this clobbers pam_groups.so */
 #ifndef USE_PAM
-       if (setup_uid_gid(&pwent, is_console))
+       if (setup_uid_gid (&pwent, is_console))
 #else
-       if (change_uid(&pwent))
+       if (change_uid (&pwent))
 #endif
-               exit(1);
+               exit (1);
 
 #ifdef KERBEROS
        if (clear_pass)
-               login_kerberos(username, clear_pass);
+               login_kerberos (username, clear_pass);
 #endif
 #ifdef DES_RPC
        if (clear_pass)
-               login_desrpc(clear_pass);
+               login_desrpc (clear_pass);
 #endif
 #if defined(DES_RPC) || defined(KERBEROS)
        if (clear_pass)
-               strzero(clear_pass);
+               strzero (clear_pass);
 #endif
 
-       setup_env(&pwent);  /* set env vars, cd to the home dir */
+       setup_env (&pwent);     /* set env vars, cd to the home dir */
 
 #ifdef USE_PAM
        {
-               int i;
-               const char * const * env;
+               const char *const *env;
 
-               env = (const char * const *) pam_getenvlist(pamh);
+               env = (const char *const *) pam_getenvlist (pamh);
                while (env && *env) {
-                       addenv(*env, NULL);
+                       addenv (*env, NULL);
                        env++;
                }
        }
 #endif
 
-       setlocale(LC_ALL, "");
-       bindtextdomain(PACKAGE, LOCALEDIR);
-       textdomain(PACKAGE);
+       setlocale (LC_ALL, "");
+       bindtextdomain (PACKAGE, LOCALEDIR);
+       textdomain (PACKAGE);
 
-       if (!hushed(&pwent)) {
-               addenv("HUSHLOGIN=FALSE", NULL);
-       /* pam_unix, pam_mail and pam_lastlog should take care of this */
+       if (!hushed (&pwent)) {
+               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") && faillog.fail_cnt != 0) {
-                       failprint(&faillog);
+               motd ();        /* print the message of the day */
+               if (getdef_bool ("FAILLOG_ENAB")
+                   && faillog.fail_cnt != 0) {
+                       failprint (&faillog);
                        /* Reset the lockout times if logged in */
                        if (faillog.fail_max &&
                            faillog.fail_cnt >= faillog.fail_max) {
-                               puts(_("Warning: login re-enabled after temporary lockout.\n"));
-                               SYSLOG((LOG_WARN, REENABLED2, username,
-                                       (int) faillog.fail_cnt));
+                               puts (_
+                                     ("Warning: login re-enabled after temporary lockout.\n"));
+                               SYSLOG ((LOG_WARN,
+                                        "login `%s' re-enabled after temporary lockout (%d failures)",
+                                        username,
+                                        (int) faillog.fail_cnt));
                        }
                }
-               if (getdef_bool("LASTLOG_ENAB") && lastlog.ll_time != 0) {
+               if (getdef_bool ("LASTLOG_ENAB")
+                   && lastlog.ll_time != 0) {
 #ifdef HAVE_STRFTIME
-                       strftime(ptime, sizeof(ptime),
-                               "%a %b %e %H:%M:%S %z %Y",
-                               localtime(&lastlog.ll_time));
-                       printf(_("Last login: %s on %s"),
+                       strftime (ptime, sizeof (ptime),
+                                 "%a %b %e %H:%M:%S %z %Y",
+                                 localtime (&lastlog.ll_time));
+                       printf (_("Last login: %s on %s"),
                                ptime, lastlog.ll_line);
 #else
-                       printf(_("Last login: %.19s on %s"),
-                               ctime(&lastlog.ll_time), lastlog.ll_line);
+                       printf (_("Last login: %.19s on %s"),
+                               ctime (&lastlog.ll_time),
+                               lastlog.ll_line);
 #endif
-#ifdef HAVE_LL_HOST  /* SVR4 || __linux__ || SUN4 */
+#ifdef HAVE_LL_HOST            /* SVR4 || __linux__ || SUN4 */
                        if (lastlog.ll_host[0])
-                               printf(_(" from %.*s"),
-                                      (int) sizeof lastlog.ll_host,
-                                      lastlog.ll_host);
+                               printf (_(" from %.*s"),
+                                       (int) sizeof lastlog.
+                                       ll_host, lastlog.ll_host);
 #endif
-                       printf(".\n");
+                       printf (".\n");
                }
-#ifdef AGING
 #ifdef SHADOWPWD
-               agecheck(&pwent, spwd);
+               agecheck (&pwent, spwd);
 #else
-               agecheck(&pwent);
+               agecheck (&pwent);
 #endif
-#endif /* AGING */
-               mailcheck();    /* report on the status of mail */
-#endif /* !USE_PAM */
+
+               mailcheck ();   /* report on the status of mail */
+#endif                         /* !USE_PAM */
        } else
-               addenv("HUSHLOGIN=TRUE", NULL);
+               addenv ("HUSHLOGIN=TRUE", NULL);
 
-       if (getdef_str("TTYTYPE_FILE") != NULL && getenv("TERM") == NULL)
-               ttytype (tty);
+       if (getdef_str ("TTYTYPE_FILE") != NULL
+           && getenv ("TERM") == NULL)
+               ttytype (tty);
 
-       signal(SIGQUIT, SIG_DFL);       /* default quit signal */
-       signal(SIGTERM, SIG_DFL);       /* default terminate signal */
-       signal(SIGALRM, SIG_DFL);       /* default alarm signal */
-       signal(SIGHUP, SIG_DFL);        /* added this.  --marekm */
+       signal (SIGQUIT, SIG_DFL);      /* default quit signal */
+       signal (SIGTERM, SIG_DFL);      /* default terminate signal */
+       signal (SIGALRM, SIG_DFL);      /* default alarm signal */
+       signal (SIGHUP, SIG_DFL);       /* added this.  --marekm */
 
 #ifdef USE_PAM
-       /* We must fork before setuid() because we need to call
+       /*
+        * We must fork before setuid() because we need to call
         * pam_close_session() as root.
+        *
+        * Note: not true in other (non-Linux) PAM implementations, where
+        * the parent process of login (init, telnetd, ...) is responsible
+        * for calling pam_close_session(). This avoids an extra process for
+        * each login. Maybe we should do this on Linux too? We let the
+        * admin configure whether they need to keep login around to close
+        * sessions.
         */
-       /* Note: not true in other (non-Linux) PAM implementations, where
-          the parent process of login (init, telnetd, ...) is responsible
-          for calling pam_close_session().  This avoids an extra process
-          for each login.  Maybe we should do this on Linux too?  -MM */
-       /* We let the admin configure whether they need to keep login
-          around to close sessions */
-       if (getdef_bool("CLOSE_SESSIONS")) {
-               signal(SIGINT, SIG_IGN);
-               child = fork();
+       if (getdef_bool ("CLOSE_SESSIONS")) {
+               signal (SIGINT, SIG_IGN);
+               child = fork ();
                if (child < 0) {
                        /* error in fork() */
-                       fprintf(stderr, "login: failure forking: %s",
-                               strerror(errno));
+                       fprintf (stderr,
+                                "login: failure forking: %s",
+                                strerror (errno));
                        PAM_END;
-                       exit(0);
+                       exit (0);
                } else if (child) {
-                       /* parent - wait for child to finish,
-                          then cleanup session */
-                       wait(NULL);
+                       /*
+                        * parent - wait for child to finish, then cleanup
+                        * session
+                        */
+                       wait (NULL);
                        PAM_END;
-                       exit(0);
+                       exit (0);
                }
                /* child */
        }
 #endif
-       signal(SIGINT, SIG_DFL);        /* default interrupt signal */
+       signal (SIGINT, SIG_DFL);       /* default interrupt signal */
 
-       endpwent();                     /* stop access to password file */
-       endgrent();                     /* stop access to group file */
+       endpwent ();    /* stop access to password file */
+       endgrent ();    /* stop access to group file */
 #ifdef SHADOWPWD
-       endspent();                     /* stop access to shadow passwd file */
+       endspent ();    /* stop access to shadow passwd file */
 #endif
 #ifdef SHADOWGRP
-       endsgent();                     /* stop access to shadow group file */
+       endsgent ();    /* stop access to shadow group file */
 #endif
        if (pwent.pw_uid == 0)
-               SYSLOG((LOG_NOTICE, ROOT_LOGIN, fromhost));
-       else if (getdef_bool("LOG_OK_LOGINS"))
-               SYSLOG((LOG_INFO, REG_LOGIN, username, fromhost));
-       closelog();
+               SYSLOG ((LOG_NOTICE, "ROOT LOGIN %s", fromhost));
+       else if (getdef_bool ("LOG_OK_LOGINS"))
+               SYSLOG ((LOG_INFO, "`%s' logged in %s", username, fromhost));
+       closelog ();
 #ifdef RADIUS
        if (is_rad_login) {
-               printf(_("Starting rad_login\n"));
-               rad_login(&rad_user_data);
-               exit(0);
+               printf (_("Starting rad_login\n"));
+               rad_login (&rad_user_data);
+               exit (0);
        }
 #endif
-       if ((tmp = getdef_str("FAKE_SHELL")) != NULL) {
-               shell(tmp, pwent.pw_shell);  /* fake shell */
+       if ((tmp = getdef_str ("FAKE_SHELL")) != NULL) {
+               shell (tmp, pwent.pw_shell);    /* fake shell */
        }
-       shell (pwent.pw_shell, (char *) 0); /* exec the shell finally. */
-       /*NOTREACHED*/
-       return 0;
+       shell (pwent.pw_shell, (char *) 0);     /* exec the shell finally. */
+        /*NOTREACHED*/ return 0;
 }
index 47f421cb2425a03e383b6b51b5e7a9f9a188c764..3ea761c4c6e04baa784a2924f17df323e16778f2 100644 (file)
@@ -17,7 +17,7 @@
  * 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
+ * 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)
@@ -30,8 +30,7 @@
 #include <config.h>
 
 #include "rcsid.h"
-RCSID(PKG_VER "$Id: logoutd.c,v 1.17 2001/08/06 06:23:26 kloczek Exp $")
-
+RCSID (PKG_VER "$Id: logoutd.c,v 1.18 2002/01/05 15:41:43 kloczek Exp $")
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <stdio.h>
@@ -40,16 +39,13 @@ RCSID(PKG_VER "$Id: logoutd.c,v 1.17 2001/08/06 06:23:26 kloczek Exp $")
 #include <fcntl.h>
 #include "prototypes.h"
 #include "defines.h"
-
 #ifdef SVR4
 #include <libgen.h>
 #endif
-
 #ifdef SVR4
 #define        signal  sigset
 #endif
-
-static char    *Prog;
+static char *Prog;
 
 #ifndef DEFAULT_HUP_MESG
 #define DEFAULT_HUP_MESG "login time exceeded\r\n"
@@ -60,81 +56,80 @@ static char *Prog;
 #endif
 
 /* local function prototypes */
-static int check_login(const struct utmp *);
+static int check_login (const struct utmp *);
 
 
 /*
  * check_login - check if user (struct utmp) allowed to stay logged in
  */
-static int
-check_login(const struct utmp *ut)
+static int check_login (const struct utmp *ut)
 {
-       char user[sizeof(ut->ut_user) + 1];
+       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';
+       strncpy (user, ut->ut_user, sizeof (ut->ut_user));
+       user[sizeof (ut->ut_user)] = '\0';
 
-       time(&now);
+       time (&now);
 
        /*
         * Check if they are allowed to be logged in right now.
         */
-       if (!isttytime(user, ut->ut_line, now))
+       if (!isttytime (user, ut->ut_line, now))
                return 0;
 #if 0
        /*
         * Check for how long they are allowed to stay logged in.
-        * XXX - not implemented yet.  Need to add a new field to
+        * XXX - not implemented yet. Need to add a new field to
         * /etc/porttime (login time limit in minutes, or no limit,
         * based on username, tty, and time of login).
         */
-       if (now - ut->ut_time > get_time_limit(user, ut->ut_line, ut->ut_time))
+       if (now - ut->ut_time >
+           get_time_limit (user, ut->ut_line, ut->ut_time))
                return 0;
 #endif
        return 1;
 }
 
 
-static void
-send_mesg_to_tty(int tty_fd)
+static void send_mesg_to_tty (int tty_fd)
 {
        TERMIO oldt, newt;
        FILE *mesg_file, *tty_file;
        int c, is_tty;
 
-       tty_file = fdopen(tty_fd, "w");
+       tty_file = fdopen (tty_fd, "w");
        if (!tty_file)
                return;
 
-       is_tty = (GTTY(tty_fd, &oldt) == 0);
+       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.  */
+                  set OPOST before writing the message. */
                newt = oldt;
                newt.c_oflag |= OPOST;
-               STTY(tty_fd, &newt);
+               STTY (tty_fd, &newt);
        }
 
-       mesg_file = fopen(HUP_MESG_FILE, "r");
+       mesg_file = fopen (HUP_MESG_FILE, "r");
        if (mesg_file) {
-               while ((c = getc(mesg_file)) != EOF) {
+               while ((c = getc (mesg_file)) != EOF) {
                        if (c == '\n')
-                               putc('\r', tty_file);
-                       putc(c, tty_file);
+                               putc ('\r', tty_file);
+                       putc (c, tty_file);
                }
-               fclose(mesg_file);
+               fclose (mesg_file);
        } else {
-               fputs(DEFAULT_HUP_MESG, tty_file);
+               fputs (DEFAULT_HUP_MESG, tty_file);
        }
-       fflush(tty_file);
-       fclose(tty_file);
+       fflush (tty_file);
+       fclose (tty_file);
 
        if (is_tty) {
-               STTY(tty_fd, &oldt);
+               STTY (tty_fd, &oldt);
        }
 }
 
@@ -143,62 +138,60 @@ send_mesg_to_tty(int tty_fd)
  * 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
+ *     time and port restrictions specified in /etc/porttime. The
  *     utmp file is periodically scanned and offending users are logged
  *     off from the system.
  */
 
-int
-main(int argc, char **argv)
+int main (int argc, char **argv)
 {
        int i;
        int status;
        pid_t pid;
        struct utmp *ut;
-       char user[sizeof(ut->ut_user) + 1];  /* terminating NUL */
-       char tty_name[sizeof(ut->ut_line) + 6];  /* /dev/ + NUL */
+       char user[sizeof (ut->ut_user) + 1];    /* terminating NUL */
+       char tty_name[sizeof (ut->ut_line) + 6];        /* /dev/ + NUL */
        int tty_fd;
 
-       setlocale(LC_ALL, "");
-       bindtextdomain(PACKAGE, LOCALEDIR);
-       textdomain(PACKAGE);
+       setlocale (LC_ALL, "");
+       bindtextdomain (PACKAGE, LOCALEDIR);
+       textdomain (PACKAGE);
 
 #ifndef DEBUG
-       for (i = 0;close (i) == 0;i++)
-               ;
+       for (i = 0; close (i) == 0; i++);
 
 #ifdef HAVE_SETPGRP
 #ifdef SETPGRP_VOID
-       setpgrp();  /* USG */
+       setpgrp ();             /* USG */
 #else
-       setpgrp(getpid(), getpid());
+       setpgrp (getpid (), getpid ());
 #endif
-#else /* !HAVE_SETPGRP */
-       setpgid(getpid(), getpid());  /* BSD || SUN || SUN4 */
-#endif /* !HAVE_SETPGRP */
+#else                          /* !HAVE_SETPGRP */
+       setpgid (getpid (), getpid ()); /* BSD || SUN || SUN4 */
+#endif                         /* !HAVE_SETPGRP */
 
        /*
         * Put this process in the background.
         */
 
-       pid = fork();
+       pid = fork ();
        if (pid > 0) {
                /* parent */
-               exit(0);
+               exit (0);
        } else if (pid < 0) {
                /* error */
-               perror("fork");
-               exit(1);
+               perror ("fork");
+               exit (1);
        }
-#endif /* !DEBUG */
+#endif                         /* !DEBUG */
 
        /*
         * Start syslogging everything
         */
 
-       Prog = Basename(argv[0]);
+       Prog = Basename (argv[0]);
 
-       OPENLOG(Prog);
+       OPENLOG (Prog);
 
        /*
         * Scan the UTMP file once per minute looking for users that
@@ -208,34 +201,34 @@ main(int argc, char **argv)
        while (1) {
 
                /* 
-                * Attempt to re-open the utmp file.  The file is only
+                * Attempt to re-open the utmp file. The file is only
                 * open while it is being used.
                 */
 
-               setutent();
+               setutent ();
 
                /*
-                * Read all of the entries in the utmp file.  The entries
+                * Read all of the entries in the utmp file. The entries
                 * for login sessions will be checked to see if the user
                 * is permitted to be signed on at this time.
                 */
 
-               while ((ut = getutent())) {
+               while ((ut = getutent ())) {
 #ifdef USER_PROCESS
                        if (ut->ut_type != USER_PROCESS)
                                continue;
 #endif
                        if (ut->ut_user[0] == '\0')
                                continue;
-                       if (check_login(ut))
+                       if (check_login (ut))
                                continue;
 
                        /*
-                        * Put the rest of this in a child process.  This
+                        * Put the rest of this in a child process. This
                         * keeps the scan from waiting on other ports to die.
                         */
 
-                       pid = fork();
+                       pid = fork ();
                        if (pid > 0) {
                                /* parent */
                                continue;
@@ -245,45 +238,49 @@ main(int argc, char **argv)
                        }
                        /* child */
 
-                       if (strncmp(ut->ut_line, "/dev/", 5) != 0)
-                               strcpy(tty_name, "/dev/");
+                       if (strncmp (ut->ut_line, "/dev/", 5) != 0)
+                               strcpy (tty_name, "/dev/");
                        else
                                tty_name[0] = '\0';
 
-                       strcat(tty_name, ut->ut_line);
+                       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);
+                       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);
+                               send_mesg_to_tty (tty_fd);
+                               close (tty_fd);
+                               sleep (10);
                        }
-#ifdef USER_PROCESS  /* USG_UTMP */
+#ifdef USER_PROCESS            /* USG_UTMP */
                        if (ut->ut_pid > 1) {
-                               kill(- ut->ut_pid, SIGHUP);
-                               sleep(10);
-                               kill(- ut->ut_pid, SIGKILL);
+                               kill (-ut->ut_pid, SIGHUP);
+                               sleep (10);
+                               kill (-ut->ut_pid, SIGKILL);
                        }
-#else  /* BSD || SUN || SUN4 */
+#else                          /* BSD || SUN || SUN4 */
                        /*
                         * vhangup() the line to kill try and kill
                         * whatever is out there using it.
                         */
 
-                       if ((tty_fd = open (tty_name, O_RDONLY|O_NDELAY)) == -1)
+                       if ((tty_fd =
+                            open (tty_name, O_RDONLY | O_NDELAY)) == -1)
                                continue;
 
                        vhangup (tty_fd);
                        close (tty_fd);
-#endif  /* BSD || SUN || SUN4 */
+#endif                         /* BSD || SUN || SUN4 */
 
-                       strncpy(user, ut->ut_user, sizeof(user) - 1);
-                       user[sizeof(user) - 1] = '\0';
+                       strncpy (user, ut->ut_user, sizeof (user) - 1);
+                       user[sizeof (user) - 1] = '\0';
 
-                       SYSLOG((LOG_NOTICE, "logged off user `%s' on `%s'\n",
-                               user, tty_name));
+                       SYSLOG ((LOG_NOTICE,
+                                "logged off user `%s' on `%s'", user,
+                                tty_name));
 
                        /*
                         * This child has done all it can, drop dead.
@@ -292,17 +289,16 @@ main(int argc, char **argv)
                        exit (0);
                }
 
-               endutent();
+               endutent ();
 
 #ifndef DEBUG
-               sleep(60);
+               sleep (60);
 #endif
                /*
                 * Reap any dead babies ...
                 */
 
-               while (wait (&status) != -1)
-                       ;
+               while (wait (&status) != -1);
        }
-       return 1;  /* not reached */
+       return 1;               /* not reached */
 }
index e35da31fe1a5a075c0d2d60e83da17228f545858..730a95dce7123e726b06031c0ea4e996f5bdf54d 100644 (file)
@@ -17,7 +17,7 @@
  * 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
+ * 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)
 #include <config.h>
 
 #include "rcsid.h"
-RCSID(PKG_VER "$Id: mkpasswd.c,v 1.7 2000/08/26 18:27:18 marekm Exp $")
-
+RCSID (PKG_VER "$Id: mkpasswd.c,v 1.9 2002/01/05 15:41:43 kloczek Exp $")
 #include <sys/stat.h>
 #include "prototypes.h"
 #include "defines.h"
 #include <stdio.h>
-
-#if !defined(NDBM) /*{*/
-int
-main(int argc, char **argv)
+#if !defined(NDBM)             /*{ */
+int main (int argc, char **argv)
 {
-       setlocale(LC_ALL, "");
-       bindtextdomain(PACKAGE, LOCALEDIR);
-       textdomain(PACKAGE);
-
-       fprintf(stderr,
-               _("%s: no DBM database on system - no action performed\n"),
-               argv[0]);
+       setlocale (LC_ALL, "");
+       bindtextdomain (PACKAGE, LOCALEDIR);
+       textdomain (PACKAGE);
+
+       fprintf (stderr,
+                _
+                ("%s: no DBM database on system - no action performed\n"),
+                argv[0]);
        return 0;
 }
 
-#else /*} defined(NDBM) {*/
-
+#else                          /*} defined(NDBM) { */
 #include <fcntl.h>
 #include <pwd.h>
-
 #include <ndbm.h>
 #include <grp.h>
+extern DBM *pw_dbm;
+extern DBM *gr_dbm;
 
-extern DBM     *pw_dbm;
-extern DBM     *gr_dbm;
 #ifdef SHADOWPWD
-extern DBM     *sp_dbm;
+extern DBM *sp_dbm;
 #endif
 #ifdef SHADOWGRP
-extern DBM     *sg_dbm;
+extern DBM *sg_dbm;
 #endif
-char   *fgetsx();
+char *fgetsx ();
 
-#ifdef SHADOWPWD
-#ifdef SHADOWGRP
-#define USAGE          _("Usage: %s [ -vf ] [ -p|g|sp|sg ] file\n")
-#else  /* !SHADOWGRP */
-#define USAGE          _("Usage: %s [ -vf ] [ -p|g|sp ] file\n")
-#endif /* SHADOWGRP */
-#else  /* !SHADOWPWD */
-#define USAGE          _("Usage: %s [ -vf ] [ -p|g ] file\n")
-#endif /* SHADOWPWD */
-
-char   *Progname;
-int    vflg = 0;
-int    fflg = 0;
-int    gflg = 0;
-int    sflg = 0;               /* -s flag -- leave in, makes code nicer */
-int    pflg = 0;
-
-extern struct  passwd  *sgetpwent();
-extern int     pw_dbm_update();
-
-extern struct  group   *sgetgrent();
-extern int     gr_dbm_update();
+char *Progname;
+int vflg = 0;
+int fflg = 0;
+int gflg = 0;
+int sflg = 0;                  /* -s flag -- leave in, makes code nicer */
+int pflg = 0;
+
+extern struct passwd *sgetpwent ();
+extern int pw_dbm_update ();
+
+extern struct group *sgetgrent ();
+extern int gr_dbm_update ();
 
 #ifdef SHADOWPWD
-extern struct  spwd    *sgetspent();
-extern int     sp_dbm_update();
+extern struct spwd *sgetspent ();
+extern int sp_dbm_update ();
 #endif
 
 #ifdef SHADOWGRP
-extern struct  sgrp    *sgetsgent();
-extern int     sg_dbm_update();
+extern struct sgrp *sgetsgent ();
+extern int sg_dbm_update ();
 #endif
 
 /* local function prototypes */
-static void usage(void);
+static void usage (void);
 
 /*
  * mkpasswd - create DBM files for /etc/passwd-like input file
  *
  * mkpasswd takes an an argument the name of a file in /etc/passwd format
- * and creates a DBM file keyed by user ID and name.  The output files have
+ * and creates a DBM file keyed by user ID and name. The output files have
  * the same name as the input file, with .dir and .pag appended.
  *
  * this command will also create look-aside files for
  * /etc/group, /etc/shadow, and /etc/gshadow.
  */
 
-int
-main(int argc, char **argv)
+int main (int argc, char **argv)
 {
-       extern  int     optind;
-       extern  char    *optarg;
-       FILE    *fp;                    /* File pointer for input file       */
-       char    *file;                  /* Name of input file                */
-       char    *dir;                   /* Name of .dir file                 */
-       char    *pag;                   /* Name of .pag file                 */
-       char    *cp;                    /* Temporary character pointer       */
-       int     flag;                   /* Flag for command line option      */
-       int     cnt = 0;                /* Number of entries in database     */
-       int     longest = 0;            /* Longest entry in database         */
-       int     len;                    /* Length of input line              */
-       int     errors = 0;             /* Count of errors processing file   */
-       char    buf[BUFSIZ*8];          /* Input line from file              */
-       struct  passwd  *passwd=NULL;   /* Pointer to password file entry    */
-
-       struct  group   *group=NULL;    /* Pointer to group file entry       */
+       extern int optind;
+       extern char *optarg;
+       FILE *fp;               /* File pointer for input file       */
+       char *file;             /* Name of input file                */
+       char *dir;              /* Name of .dir file                 */
+       char *pag;              /* Name of .pag file                 */
+       char *cp;               /* Temporary character pointer       */
+       int flag;               /* Flag for command line option      */
+       int cnt = 0;            /* Number of entries in database     */
+       int longest = 0;        /* Longest entry in database         */
+       int len;                /* Length of input line              */
+       int errors = 0;         /* Count of errors processing file   */
+       char buf[BUFSIZ * 8];   /* Input line from file              */
+       struct passwd *passwd = NULL;   /* Pointer to password file entry    */
+
+       struct group *group = NULL;     /* Pointer to group file entry       */
+
 #ifdef SHADOWPWD
-       struct  spwd    *shadow=NULL;   /* Pointer to shadow passwd entry    */
+       struct spwd *shadow = NULL;     /* Pointer to shadow passwd entry    */
 #endif
 #ifdef SHADOWGRP
-       struct  sgrp    *gshadow=NULL;  /* Pointer to shadow group entry     */
+       struct sgrp *gshadow = NULL;    /* Pointer to shadow group entry     */
 #endif
-       DBM     *dbm;                   /* Pointer to new NDBM files         */
-       DBM     *dbm_open();            /* Function to open NDBM files       */
+       DBM *dbm;               /* Pointer to new NDBM files         */
+       DBM *dbm_open ();       /* Function to open NDBM files       */
 
        /*
-        * Figure out what my name is.  I will use this later ...
+        * Figure out what my name is. I will use this later ...
         */
 
-       Progname = Basename(argv[0]);
+       Progname = Basename (argv[0]);
 
        /*
         * Figure out what the flags might be ...
@@ -156,39 +142,39 @@ main(int argc, char **argv)
 
        while ((flag = getopt (argc, argv, "fvpgs")) != EOF) {
                switch (flag) {
-                       case 'v':
-                               vflg++;
-                               break;
-                       case 'f':
-                               fflg++;
-                               break;
-                       case 'g':
-                               gflg++;
+               case 'v':
+                       vflg++;
+                       break;
+               case 'f':
+                       fflg++;
+                       break;
+               case 'g':
+                       gflg++;
 #ifndef        SHADOWGRP
-                               if (sflg)
-                                       usage ();
+                       if (sflg)
+                               usage ();
 #endif
-                               if (pflg)
-                                       usage ();
+                       if (pflg)
+                               usage ();
 
-                               break;
+                       break;
 #if defined(SHADOWPWD) || defined(SHADOWGRP)
-                       case 's':
-                               sflg++;
+               case 's':
+                       sflg++;
 #ifndef        SHADOWGRP
-                               if (gflg)
-                                       usage ();
+                       if (gflg)
+                               usage ();
 #endif
-                               break;
+                       break;
 #endif
-                       case 'p':
-                               pflg++;
-                               if (gflg)
-                                       usage ();
-
-                               break;
-                       default:
-                               usage();
+               case 'p':
+                       pflg++;
+                       if (gflg)
+                               usage ();
+
+                       break;
+               default:
+                       usage ();
                }
        }
 
@@ -197,9 +183,9 @@ main(int argc, char **argv)
         */
 
 #ifdef SHADOWPWD
-       if (! sflg && ! gflg)
+       if (!sflg && !gflg)
 #else
-       if (! gflg)
+       if (!gflg)
 #endif
                pflg++;
 
@@ -212,8 +198,9 @@ main(int argc, char **argv)
 
        file = argv[optind];
 
-       if (! (fp = fopen (file, "r"))) {
-               fprintf (stderr, _("%s: cannot open file %s\n"), Progname, file);
+       if (!(fp = fopen (file, "r"))) {
+               fprintf (stderr, _("%s: cannot open file %s\n"), Progname,
+                        file);
                exit (1);
        }
 
@@ -241,26 +228,29 @@ main(int argc, char **argv)
         * to have existed already.
         */
 
-       if (access(dir, F_OK) == 0) {
-               fprintf (stderr, _("%s: cannot overwrite file %s\n"), Progname, dir);
+       if (access (dir, F_OK) == 0) {
+               fprintf (stderr, _("%s: cannot overwrite file %s\n"),
+                        Progname, dir);
                exit (1);
        }
-       if (access(pag, F_OK) == 0) {
-               fprintf (stderr, _("%s: cannot overwrite file %s\n"), Progname, pag);
+       if (access (pag, F_OK) == 0) {
+               fprintf (stderr, _("%s: cannot overwrite file %s\n"),
+                        Progname, pag);
                exit (1);
        }
 
        if (sflg)
-               umask(077);
+               umask (077);
        else
-               umask(022);
+               umask (022);
 
        /*
         * Now the DBM database gets initialized
         */
 
-       if (! (dbm = dbm_open (file, O_RDWR|O_CREAT, 0644))) {
-               fprintf (stderr, _("%s: cannot open DBM files for %s\n"), Progname, file);
+       if (!(dbm = dbm_open (file, O_RDWR | O_CREAT, 0644))) {
+               fprintf (stderr, _("%s: cannot open DBM files for %s\n"),
+                        Progname, file);
                exit (1);
        }
        if (gflg) {
@@ -280,8 +270,8 @@ main(int argc, char **argv)
        }
 
        /*
-        * Read every line in the password file and convert it into a
-        * data structure to be put in the DBM database files.
+        * Read every line in the password file and convert it into a data
+        * structure to be put in the DBM database files.
         */
 
        while (fgetsx (buf, BUFSIZ, fp) != NULL) {
@@ -292,8 +282,11 @@ main(int argc, char **argv)
                 */
 
                buf[sizeof buf - 1] = '\0';
-               if (! (cp = strchr (buf, '\n'))) {
-                       fprintf (stderr, _("%s: the beginning with "%.16s ..." is too long\n"), Progname, buf);
+               if (!(cp = strchr (buf, '\n'))) {
+                       fprintf (stderr,
+                                _("%s: the beginning with " %
+                                  .16 s..." is too long\n"), Progname,
+                                buf);
                        exit (1);
                }
                *cp = '\0';
@@ -301,54 +294,72 @@ main(int argc, char **argv)
 
 #ifdef USE_NIS
                /*
-                * Parse the password file line into a (struct passwd).
-                * Erroneous lines cause error messages, but that's
-                * all.  YP lines are ignored completely.
+                * Parse the password file line into a (struct passwd). 
+                * Erroneous lines cause error messages, but that's all. YP
+                * lines are ignored completely.
                 */
 
                if (buf[0] == '-' || buf[0] == '+')
                        continue;
 #endif
-               if (! (((! sflg && pflg) && (passwd = sgetpwent (buf)))
+               if (!(((!sflg && pflg) && (passwd = sgetpwent (buf)))
 #ifdef SHADOWPWD
-                       || ((sflg && pflg) && (shadow = sgetspent (buf)))
+                     || ((sflg && pflg) && (shadow = sgetspent (buf)))
 #endif
-                       || ((! sflg && gflg) && (group = sgetgrent (buf)))
+                     || ((!sflg && gflg) && (group = sgetgrent (buf)))
 #ifdef SHADOWGRP
-                       || ((sflg && gflg) && (gshadow = sgetsgent (buf)))
+                     || ((sflg && gflg) && (gshadow = sgetsgent (buf)))
 #endif
-               )) {
-                       fprintf (stderr, _("%s: error parsing line \"%s\"\n"), Progname, buf);
+                   )) {
+                       fprintf (stderr,
+                                _("%s: error parsing line \"%s\"\n"),
+                                Progname, buf);
                        errors++;
                        continue;
                }
                if (vflg) {
-                       if (!sflg && pflg) printf (_("adding record for name "%s"\n"), passwd->pw_name);
+                       if (!sflg && pflg)
+                               printf (_
+                                       ("adding record for name " %
+                                        s "\n"), passwd->pw_name);
 #ifdef SHADOWPWD
-                       if (sflg && pflg) printf (_("adding record for name "%s"\n"), shadow->sp_namp);
+                       if (sflg && pflg)
+                               printf (_
+                                       ("adding record for name " %
+                                        s "\n"), shadow->sp_namp);
 #endif
-                       if (!sflg && gflg) printf (_("adding record for name "%s"\n"), group->gr_name);
+                       if (!sflg && gflg)
+                               printf (_
+                                       ("adding record for name " %
+                                        s "\n"), group->gr_name);
 #ifdef SHADOWGRP
-                       if (sflg && gflg) printf (_("adding record for name "%s"\n"), gshadow->sg_name);
+                       if (sflg && gflg)
+                               printf (_
+                                       ("adding record for name " %
+                                        s "\n"), gshadow->sg_name);
 #endif
                }
-               if (! sflg && pflg && ! pw_dbm_update (passwd))
-                       fprintf (stderr, _("%s: error adding record for "%s"\n"),
-                               Progname, passwd->pw_name);
+               if (!sflg && pflg && !pw_dbm_update (passwd))
+                       fprintf (stderr,
+                                _("%s: error adding record for " %
+                                  s "\n"), Progname, passwd->pw_name);
 
 #ifdef SHADOWPWD
-               if (sflg && pflg && ! sp_dbm_update (shadow))
-                       fprintf (stderr, _("%s: error adding record for "%s"\n"),
-                               Progname, shadow->sp_namp);
+               if (sflg && pflg && !sp_dbm_update (shadow))
+                       fprintf (stderr,
+                                _("%s: error adding record for " %
+                                  s "\n"), Progname, shadow->sp_namp);
 #endif
-               if (! sflg && gflg && ! gr_dbm_update (group))
-                       fprintf (stderr, _("%s: error adding record for "%s"\n"),
-                               Progname, group->gr_name);
+               if (!sflg && gflg && !gr_dbm_update (group))
+                       fprintf (stderr,
+                                _("%s: error adding record for " %
+                                  s "\n"), Progname, group->gr_name);
 #ifdef SHADOWGRP
-               if (sflg && gflg && ! sg_dbm_update (gshadow))
-                       fprintf (stderr, _("%s: error adding record for "%s"\n"),
-                               Progname, gshadow->sg_name);
-#endif /* SHADOWGRP */
+               if (sflg && gflg && !sg_dbm_update (gshadow))
+                       fprintf (stderr,
+                                _("%s: error adding record for " %
+                                  s "\n"), Progname, gshadow->sg_name);
+#endif                         /* SHADOWGRP */
 
                /*
                 * Update the longest record and record count
@@ -364,31 +375,29 @@ main(int argc, char **argv)
         */
 
        if (vflg)
-               printf (_("added %d entries, longest was %d\n"), cnt, longest);
+               printf (_("added %d entries, longest was %d\n"), cnt,
+                       longest);
 
        exit (errors);
-       /*NOTREACHED*/
-}
+ /*NOTREACHED*/}
 
 /*
  * usage - print error message and exit
  */
 
-static void
-usage(void)
+static void usage (void)
 {
 #ifdef SHADOWPWD
 #ifdef SHADOWGRP
-       fprintf (stderr, _("Usage: %s [ -vf ] [ -p|g|sp|sg ] file\n"), Progname);
-#else  /* !SHADOWGRP */
-       fprintf (stderr, _("Usage: %s [ -vf ] [ -p|g|sp ] file\n"), Progname);
-#endif /* SHADOWGRP */
-#else  /* !SHADOWPWD */
-       fprintf (stderr, _("Usage: %s [ -vf ] [ -p|g ] file\n"), Progname);
-#endif /* SHADOWPWD */
-
+       fprintf (stderr, _("Usage: %s [-vf] [-p|g|sp|sg] file\n"),
+                Progname);
+#else                          /* !SHADOWGRP */
+       fprintf (stderr, _("Usage: %s [-vf] [-p|g|sp] file\n"), Progname);
+#endif                         /* SHADOWGRP */
+#else                          /* !SHADOWPWD */
+       fprintf (stderr, _("Usage: %s [-vf] [-p|g] file\n"), Progname);
+#endif                         /* SHADOWPWD */
 
        exit (1);
-       /*NOTREACHED*/
-}
-#endif /*} defined(NDBM) */
+ /*NOTREACHED*/}
+#endif                         /*} defined(NDBM) */
index 1f8eda7d8af68cb3e6c220858c1e34b2d9dc9cd9..6057f85d5d718b52e1d856c7cd5bb327ed960220 100644 (file)
@@ -17,7 +17,7 @@
  * 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
+ * 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)
 #include <config.h>
 
 #include "rcsid.h"
-RCSID(PKG_VER "$Id: newgrp.c,v 1.17 2001/09/01 04:19:16 kloczek Exp $")
-
+RCSID (PKG_VER "$Id: newgrp.c,v 1.21 2002/01/06 15:00:07 kloczek Exp $")
 #include <stdio.h>
 #include <errno.h>
 #include <grp.h>
 #include <pwd.h>
-
 #include "prototypes.h"
 #include "defines.h"
-
 #include "getdef.h"
-
 extern char **environ;
 
 #ifdef HAVE_SETGROUPS
@@ -53,41 +49,39 @@ static char *Prog;
 static int is_newgrp;
 
 /* local function prototypes */
-static void usage(void);
+static void usage (void);
 
 /*
  * usage - print command usage message
  */
 
-static void
-usage(void)
+static void usage (void)
 {
        if (is_newgrp)
-               fprintf (stderr, _("usage: newgrp [ - ] [ group ]\n"));
+               fprintf (stderr, _("usage: newgrp [-] [group]\n"));
        else
-               fprintf (stderr, _("usage: sg group [[-c] command ]\n"));
+               fprintf (stderr, _("usage: sg group [[-c] command]\n"));
 }
 
 /*
  * newgrp - change the invokers current real and effective group id
  */
 
-int
-main(int argc, char **argv)
+int main (int argc, char **argv)
 {
-       int     initflag = 0;
-       int     needspasswd = 0;
-       int     i;
-       int their_grp = 0;
+       int initflag = 0;
+       int needspasswd = 0;
+       int i;
        int cflag = 0;
        gid_t gid;
        char *cp;
        const char *cpasswd, *name, *prog;
        char *group = NULL;
-       char    *command=NULL;
-       char    **envp = environ;
+       char *command = NULL;
+       char **envp = environ;
        struct passwd *pwd;
        struct group *grp;
+
 #ifdef SHADOWPWD
        struct spwd *spwd;
 #endif
@@ -97,58 +91,77 @@ main(int argc, char **argv)
 
 #if ENABLE_NLS
        /* XXX - remove when gettext is safe to use in setuid programs */
-       sanitize_env();
+       sanitize_env ();
 #endif
 
-       setlocale(LC_ALL, "");
-       bindtextdomain(PACKAGE, LOCALEDIR);
-       textdomain(PACKAGE);
-                  
+       setlocale (LC_ALL, "");
+       bindtextdomain (PACKAGE, LOCALEDIR);
+       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.
+        * 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++;
+       Prog = Basename (argv[0]);
+       is_newgrp = (strcmp (Prog, "newgrp") == 0);
+       OPENLOG (is_newgrp ? "newgrp" : "sg");
+       gid = getgid ();
+       argc--;
+       argv++;
 
-       initenv();
+       initenv ();
 
-       pwd = get_my_pwent();
+       pwd = get_my_pwent ();
        if (!pwd) {
-               fprintf (stderr, _("unknown uid: %d\n"), (int) getuid());
-               SYSLOG((LOG_WARN, "unknown uid %d\n", (int) getuid()));
-               closelog();
-               exit(1);
+               fprintf (stderr, _("unknown uid: %u\n"), getuid ());
+               SYSLOG ((LOG_WARN, "unknown uid %u", getuid ()));
+               closelog ();
+               exit (1);
        }
        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.
+        * 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 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 [ command ]
+        *      newgrp [ - ] [ groupid ]
+        *      newgrp [ -l ] [ groupid ]
+        *      sg [ - ]
+        *      sg [ - ] groupid [ command ]
         */
 
-       if (argc > 0 && (!strcmp(argv[0], "-") || !strcmp(argv[0], "-l"))) {
-               argc--; argv++;
+       if (argc > 0
+           && (!strcmp (argv[0], "-") || !strcmp (argv[0], "-l"))) {
+               argc--;
+               argv++;
                initflag = 1;
        }
        if (!is_newgrp) {
@@ -159,19 +172,22 @@ main(int argc, char **argv)
 
                if (argc > 0 && argv[0][0] != '-') {
                        group = argv[0];
-                       argc--; argv++;
+                       argc--;
+                       argv++;
                } else {
                        usage ();
-                       closelog();
+                       closelog ();
                        exit (1);
                }
                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).  */
+                       /*
+                        * 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)
+                       if (argc > 1 && strcmp (argv[0], "-c") == 0)
                                command = argv[1];
                        else
                                command = argv[0];
@@ -180,9 +196,8 @@ main(int argc, char **argv)
        } else {
 
                /*
-                * Do the command line for "newgrp".  It's just
-                * making sure there aren't any flags and getting
-                * the new group name.
+                * 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] == '-') {
@@ -193,61 +208,92 @@ main(int argc, char **argv)
                } else {
 
                        /*
-                        * get the group file entry for her login group id.
+                        * 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
                         */
 
-                       if (! (grp = getgrgid (pwd->pw_gid))) {
-                               fprintf(stderr, _("unknown gid: %ld\n"),
-                                       (long) pwd->pw_gid);
-                               SYSLOG((LOG_CRIT, "unknown gid: %ld\n",
-                                       (long) pwd->pw_gid));
+                       if (!(grp = getgrgid (pwd->pw_gid))) {
+                               fprintf (stderr, _("unknown gid: %lu\n"),
+                                        (unsigned long) pwd->pw_gid);
+                               SYSLOG ((LOG_CRIT, "unknown gid: %lu",
+                                        (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.
+        * 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);
+               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);
+               free (grouplist);
                i *= 2;
        }
        if (ngroups < 0) {
-               perror("getgroups");
-               exit(1);
+               perror ("getgroups");
+               exit (1);
        }
-#endif /* HAVE_SETGROUPS */
+#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 value from her password file entry.  otherwise
-        * we validate her access to the specified group.
+        * 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
         */
 
-       if (group == (char *) 0) {
-               if (! (grp = getgrgid (pwd->pw_gid))) {
-                       fprintf (stderr, _("unknown gid: %d\n"), pwd->pw_gid);
-                       goto failure;
-               }
-               group = grp->gr_name;
-               their_grp = 1;
-       } else if (! (grp = getgrnam (group))) {
+       if (!(grp = getgrnam (group))) {
                fprintf (stderr, _("unknown group: %s\n"), group);
                goto failure;
        }
@@ -259,23 +305,19 @@ main(int argc, char **argv)
 #endif
 
        /*
-        * see if she is a member of this 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.
+        * see if she is a member of this 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.
         *
-        * we also check if this is the users default group, eg.
-        * they aren't a member, but this is the group listed as
-        * the one they belong to in their pwd entry.
         */
 
-       if (!is_on_list(grp->gr_mem, name) && !their_grp)
+       if (!is_on_list (grp->gr_mem, name))
                needspasswd = 1;
 
        /*
-        * 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.
+        * 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.
         */
 
 #ifdef SHADOWPWD
@@ -287,12 +329,13 @@ main(int argc, char **argv)
                needspasswd = 1;
 
        /*
-        * 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.  note that she
-        * won't have to provide the password to her login group even
-        * if she isn't listed as a member.
+        * 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.
+        *
+        * Note that she now has to provide the password to her own group,
+        * unless she is listed as a member.  -- JWP
         */
 
        if (getuid () != 0 && needspasswd) {
@@ -302,116 +345,190 @@ main(int argc, char **argv)
                 * the decryption from the group file.
                 */
 
-               if (! (cp = getpass (_("Password: "))))
+               if (!(cp = getpass (_("Password: "))))
                        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.
+                * 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);
+               strzero (cp);
 
                if (grp->gr_passwd[0] == '\0') {
-               /*
-                * there is no password, print out "Sorry" and give up
-                */
-                       sleep(1);
+                       /*
+                        * there is no password, print out "Sorry" and give up
+                        */
+                       sleep (1);
                        fputs (_("Sorry.\n"), stderr);
                        goto failure;
                }
 
                if (strcmp (cpasswd, grp->gr_passwd) != 0) {
-                       SYSLOG((LOG_INFO,
-                               "Invalid password for group `%s' from `%s'\n",
-                               group, name));
-                       sleep(1);
+                       SYSLOG ((LOG_INFO,
+                                "Invalid password for group `%s' from `%s'",
+                                group, name));
+                       sleep (1);
                        fputs (_("Sorry.\n"), stderr);
                        goto failure;
                }
        }
 
        /*
-        * all successful validations pass through this point.  the
-        * group id will be set, and the group added to the concurrent
-        * groupset.
+        * 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((LOG_INFO, "user `%s' switched to group `%s'\n",
-                       name, group));
-#endif
+               SYSLOG ((LOG_INFO, "user `%s' switched to group `%s'",
+                        name, group));
+       if (getdef_bool ("SYSLOG_SG_ENAB")) {
+               char *loginname = xstrdup (getlogin ());
+               char *tty = xstrdup (ttyname (0));
+
+               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));
+               if (getdef_bool ("CLOSE_SESSIONS")) {
+                       /*
+                        * 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;
+
+                       signal (SIGINT, SIG_IGN);
+                       signal (SIGQUIT, SIG_IGN);
+                       signal (SIGHUP, SIG_IGN);
+                       signal (SIGTSTP, SIG_IGN);
+                       signal (SIGTTIN, SIG_IGN);
+                       signal (SIGTTOU, SIG_IGN);
+                       child = fork ();
+                       if (child < 0) {
+                               /* error in fork() */
+                               fprintf (stderr, "%s: failure forking: %s",
+                                        is_newgrp ? "newgrp" : "sg",
+                                        strerror (errno));
+                               exit (1);
+                       } else if (child) {
+                               /* parent - wait for child to finish, then log session close */
+                               do {
+                                       pid = waitpid (child, NULL, 0);
+                               } while (pid != child);
+                               SYSLOG ((LOG_INFO,
+                                        "user `%s' (login `%s' on %s) returned to group `%s'",
+                                        name, loginname, tty,
+                                        getgrgid (gid)->gr_name));
+                               closelog ();
+                               exit (0);
+                       }
+                       /* child - restore signals to their default state */
+                       signal (SIGINT, SIG_DFL);
+                       signal (SIGQUIT, SIG_DFL);
+                       signal (SIGHUP, SIG_DFL);
+                       signal (SIGTSTP, SIG_DFL);
+                       signal (SIGTTIN, SIG_DFL);
+                       signal (SIGTTOU, SIG_DFL);
+               }
+       }
+#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 ...
+        * 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++) {
+       for (i = 0; i < ngroups; i++) {
                if (gid == grouplist[i])
                        break;
        }
        if (i == ngroups) {
-               if (ngroups >= sysconf(_SC_NGROUPS_MAX)) {
+               if (ngroups >= sysconf (_SC_NGROUPS_MAX)) {
                        fprintf (stderr, _("too many groups\n"));
                } else {
                        grouplist[ngroups++] = gid;
-                       if (setgroups(ngroups, grouplist)) {
-                               perror("setgroups");
+                       if (setgroups (ngroups, grouplist)) {
+                               perror ("setgroups");
                        }
                }
        }
 #endif
 
-okay:
        /*
-        * i set her group id either to the value she requested, or
-        * to the original value if the newgrp failed.
+        * 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))
-               perror("setgid");
+       if (setgid (gid))
+               perror ("setgid");
 
-       if (setuid(getuid())) {
-               perror("setuid");
-               exit(1);
+       if (setuid (getuid ())) {
+               perror ("setuid");
+               exit (1);
        }
 
        /*
-        * 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.
+        * 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("/bin/sh", "sh", "-c", command, (char *) 0);
+               closelog ();
+               execl ("/bin/sh", "sh", "-c", command, (char *) 0);
                if (errno == ENOENT) {
-                       perror("/bin/sh");
-                       exit(127);
+                       perror ("/bin/sh");
+                       exit (127);
                } else {
-                       perror("/bin/sh");
-                       exit(126);
+                       perror ("/bin/sh");
+                       exit (126);
                }
        }
 
        /*
-        * 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.
+        * 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
         */
 
-       if (! initflag && (cp = getenv ("SHELL")))
+       if (!initflag && (cp = getenv ("SHELL")))
                prog = cp;
        else if (pwd->pw_shell && pwd->pw_shell[0])
                prog = pwd->pw_shell;
@@ -419,11 +536,11 @@ okay:
                prog = "/bin/sh";
 
        /*
-        * now i try to find the basename of the login shell.  this
-        * will become argv[0] of the spawned command.
+        * Now i try to find the basename of the login shell. This will
+        * become argv[0] of the spawned command.
         */
 
-       cp = Basename((char *) prog);
+       cp = Basename ((char *) prog);
 
 #ifdef SHADOWPWD
        endspent ();
@@ -435,65 +552,54 @@ okay:
        endgrent ();
 
        /*
-        * switch back to her home directory if i am doing login
+        * Switch back to her home directory if i am doing login
         * initialization.
         */
 
        if (initflag) {
                if (chdir (pwd->pw_dir))
-                       perror("chdir");
+                       perror ("chdir");
 
                while (*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);
+                           strncmp (*envp, "HOME=", 5) == 0 ||
+                           strncmp (*envp, "SHELL=", 6) == 0 ||
+                           strncmp (*envp, "TERM=", 5) == 0)
+                               addenv (*envp, NULL);
 
                        envp++;
                }
        } else {
                while (*envp)
-                       addenv(*envp++, NULL);
+                       addenv (*envp++, NULL);
        }
 
-       /* sanitize_env() removes $HOME from the environment (maybe it
-          shouldn't - please tell me if you are sure that $HOME can't
-          cause security problems) - add it from user's passwd entry.
-       */
-       addenv("HOME", pwd->pw_dir);
-
        /*
-        * 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.
+        * Sanitize_env() removes $HOME from the environment (maybe it
+        * shouldn't - please tell me if you are sure that $HOME can't cause
+        * security problems) - add it from user's passwd entry.
         */
+       addenv ("HOME", pwd->pw_dir);
 
-       shell(prog, initflag ? (char *)0 : cp);
-       /*NOTREACHED*/
-
-failure:
        /*
-        * this is where all failures land.  the group id will not
-        * have been set, so the setgid() below will set me to the
-        * original group id i had when i was invoked.
+        * 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.
         */
 
-       /*
-        * only newgrp needs to re-exec the user's shell.  that is
-        * because the shell doesn't recognize "sg", so it doesn't
-        * "exec" this command.
-        */
+       shell (prog, initflag ? (char *) 0 : cp);
+       /*NOTREACHED*/ failure:
 
-       if (!is_newgrp) {
-               closelog();
-               exit (1);
-       }
-       
        /*
-        * The GID is still set to the old value, so now I can
-        * give the user back her shell.
+        * 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
         */
 
-       goto okay;
+       closelog ();
+       exit (1);
 }
index 85bf49f5938dec5d6376e8399a5c8febdc04aadf..b9d2fd8262d209671d8622ba26bd300e2347c5fd 100644 (file)
@@ -17,7 +17,7 @@
  * 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
+ * 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)
@@ -36,8 +36,7 @@
 #include <config.h>
 
 #include "rcsid.h"
-RCSID(PKG_VER "$Id: newusers.c,v 1.13 2000/10/09 19:02:20 kloczek Exp $")
-
+RCSID (PKG_VER "$Id: newusers.c,v 1.15 2002/01/05 15:41:43 kloczek Exp $")
 #include <sys/types.h>
 #include <sys/stat.h>
 #include "prototypes.h"
@@ -46,13 +45,11 @@ RCSID(PKG_VER "$Id: newusers.c,v 1.13 2000/10/09 19:02:20 kloczek Exp $")
 #include <pwd.h>
 #include <grp.h>
 #include <fcntl.h>
-
 #ifdef USE_PAM
 #include <security/pam_appl.h>
 #include <security/pam_misc.h>
 #include <pwd.h>
-#endif /* USE_PAM */
-
+#endif                         /* USE_PAM */
 static char *Prog;
 
 #include "getdef.h"
@@ -66,71 +63,71 @@ static int is_shadow;
 #endif
 
 /* local function prototypes */
-static void usage(void);
-static int add_group(const char *, const char *, gid_t *);
-static int add_user(const char *, const char *, uid_t *, gid_t);
-static void update_passwd(struct passwd *, const char *);
-static int add_passwd(struct passwd *, const char *);
+static void usage (void);
+static int add_group (const char *, const char *, gid_t *);
+static int add_user (const char *, const char *, uid_t *, gid_t);
+static void update_passwd (struct passwd *, const char *);
+static int add_passwd (struct passwd *, const char *);
 
 /*
  * usage - display usage message and exit
  */
 
-static void
-usage(void)
+static void usage (void)
 {
-       fprintf(stderr, _("Usage: %s [ input ]\n"), Prog);
-       exit(1);
+       fprintf (stderr, _("Usage: %s [input]\n"), Prog);
+       exit (1);
 }
 
 /*
  * 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)
+static int add_group (const char *name, const char *gid, gid_t * ngid)
 {
        const struct passwd *pwd;
        const struct group *grp;
-       struct  group   grent;
-       char    *members[2];
-       int     i;
+       struct group grent;
+       char *members[2];
+       int i;
 
        /*
-        * Start by seeing if the named group already exists.  This
-        * will be very easy to deal with if it does.
+        * Start by seeing if the named group already exists. This will be
+        * very easy to deal with if it does.
         */
 
        if ((grp = gr_locate (gid))) {
-add_member:
+             add_member:
                grent = *grp;
                *ngid = grent.gr_gid;
-               for (i = 0;grent.gr_mem[i] != (char *) 0;i++)
+               for (i = 0; grent.gr_mem[i] != (char *) 0; i++)
                        if (strcmp (grent.gr_mem[i], name) == 0)
                                return 0;
 
-               grent.gr_mem = (char **) xmalloc (sizeof (char *) * (i + 2));
-               memcpy (grent.gr_mem, grp->gr_mem, sizeof (char *) * (i + 2));
+               grent.gr_mem =
+                   (char **) xmalloc (sizeof (char *) * (i + 2));
+               memcpy (grent.gr_mem, grp->gr_mem,
+                       sizeof (char *) * (i + 2));
                grent.gr_mem[i] = xstrdup (name);
                grent.gr_mem[i + 1] = (char *) 0;
 
-               return ! gr_update (&grent);
+               return !gr_update (&grent);
        }
 
        /*
-        * The group did not exist, so I try to figure out what the
-        * GID is going to be.  The gid parameter is probably "", meaning
-        * I figure out the GID from the password file.  I want the UID
-        * and GID to match, unless the GID is already used.
+        * The group did not exist, so I try to figure out what the GID is
+        * going to be. The gid parameter is probably "", meaning I figure
+        * out the GID from the password file. I want the UID and GID to
+        * match, unless the GID is already used.
         */
 
        if (gid[0] == '\0') {
                i = 100;
-               for (pw_rewind ();(pwd = pw_next ());) {
+               for (pw_rewind (); (pwd = pw_next ());) {
                        if (pwd->pw_uid >= i)
                                i = pwd->pw_uid + 1;
                }
-               for (gr_rewind ();(grp = gr_next ());) {
+               for (gr_rewind (); (grp = gr_next ());) {
                        if (grp->gr_gid == i) {
                                i = -1;
                                break;
@@ -138,55 +135,53 @@ add_member:
                }
        } else if (gid[0] >= '0' && gid[0] <= '9') {
 
-       /*
-        * The GID is a number, which means either this is a brand new
-        * group, or an existing group.  For existing groups I just add
-        * myself as a member, just like I did earlier.
-        */
+               /*
+                * The GID is a number, which means either this is a brand
+                * new group, or an existing group. For existing groups I
+                * just add myself as a member, just like I did earlier.
+                */
 
                i = atoi (gid);
-               for (gr_rewind ();(grp = gr_next ());)
+               for (gr_rewind (); (grp = gr_next ());)
                        if (grp->gr_gid == i)
                                goto add_member;
        } else
-
-       /*
-        * The last alternative is that the GID is a name which is not
-        * already the name of an existing group, and I need to figure
-        * out what group ID that group name is going to have.
-        */
+               /*
+                * The last alternative is that the GID is a name which is
+                * not already the name of an existing group, and I need to
+                * figure out what group ID that group name is going to
+                * have.
+                */
 
                i = -1;
 
        /*
-        * If I don't have a group ID by now, I'll go get the
-        * next one.
+        * If I don't have a group ID by now, I'll go get the next one.
         */
 
        if (i == -1) {
-               for (i = 100, gr_rewind ();(grp = gr_next ());)
+               for (i = 100, gr_rewind (); (grp = gr_next ());)
                        if (grp->gr_gid >= i)
                                i = grp->gr_gid + 1;
        }
 
        /*
-        * Now I have all of the fields required to create the new
-        * group.
+        * Now I have all of the fields required to create the new group.
         */
 
        if (gid[0] && (gid[0] <= '0' || gid[0] >= '9'))
-               grent.gr_name = xstrdup(gid);
+               grent.gr_name = xstrdup (gid);
        else
-               grent.gr_name = xstrdup(name);
+               grent.gr_name = xstrdup (name);
 
-       grent.gr_passwd = "x";  /* XXX warning: const */
+       grent.gr_passwd = "x";  /* XXX warning: const */
        grent.gr_gid = i;
-       members[0] = xstrdup(name);
+       members[0] = xstrdup (name);
        members[1] = (char *) 0;
        grent.gr_mem = members;
 
        *ngid = grent.gr_gid;
-       return ! gr_update (&grent);
+       return !gr_update (&grent);
 }
 
 /*
@@ -194,15 +189,15 @@ add_member:
  */
 
 static int
-add_user(const char *name, const char *uid, uid_t *nuid, gid_t gid)
+add_user (const char *name, const char *uid, uid_t * nuid, gid_t gid)
 {
        const struct passwd *pwd;
-       struct  passwd  pwent;
-       uid_t   i;
+       struct passwd pwent;
+       uid_t i;
 
        /*
-        * The first guess for the UID is either the numerical UID
-        * that the caller provided, or the next available UID.
+        * The first guess for the UID is either the numerical UID that the
+        * caller provided, or the next available UID.
         */
 
        if (uid[0] >= '0' && uid[0] <= '9') {
@@ -211,19 +206,19 @@ add_user(const char *name, const char *uid, uid_t *nuid, gid_t gid)
                i = pwd->pw_uid;
        } else {
                i = 100;
-               for (pw_rewind ();(pwd = pw_next ());)
+               for (pw_rewind (); (pwd = pw_next ());)
                        if (pwd->pw_uid >= i)
                                i = pwd->pw_uid + 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.
+        * 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_passwd = "x";  /* XXX warning: const */
+       pwent.pw_name = xstrdup (name);
+       pwent.pw_passwd = "x";  /* XXX warning: const */
 #ifdef ATT_AGE
        pwent.pw_age = "";
 #endif
@@ -235,25 +230,24 @@ add_user(const char *name, const char *uid, uid_t *nuid, gid_t gid)
 #endif
        pwent.pw_uid = i;
        pwent.pw_gid = gid;
-       pwent.pw_gecos = "";  /* XXX warning: const */
-       pwent.pw_dir = "";  /* XXX warning: const */
-       pwent.pw_shell = "";  /* XXX warning: const */
+       pwent.pw_gecos = "";    /* XXX warning: const */
+       pwent.pw_dir = "";      /* XXX warning: const */
+       pwent.pw_shell = "";    /* XXX warning: const */
 
        *nuid = i;
-       return ! pw_update (&pwent);
+       return !pw_update (&pwent);
 }
 
-static void
-update_passwd(struct passwd *pwd, const char *passwd)
+static void update_passwd (struct passwd *pwd, const char *passwd)
 {
-       pwd->pw_passwd = pw_encrypt(passwd, crypt_make_salt());
+       pwd->pw_passwd = pw_encrypt (passwd, crypt_make_salt ());
 #ifdef ATT_AGE
-       if (strlen(pwd->pw_age) == 4) {
+       if (strlen (pwd->pw_age) == 4) {
                static char newage[5];
-               extern char *l64a();
+               extern char *l64a ();
 
-               strcpy(newage, pwd->pw_age);
-               strcpy(newage + 2, l64a(time((time_t *) 0) / WEEK));
+               strcpy (newage, pwd->pw_age);
+               strcpy (newage + 2, l64a (time ((time_t *) 0) / WEEK));
                pwd->pw_age = newage;
        }
 #endif
@@ -263,198 +257,199 @@ update_passwd(struct passwd *pwd, const char *passwd)
  * add_passwd - add or update the encrypted password
  */
 
-static int
-add_passwd(struct passwd *pwd, const char *passwd)
+static int add_passwd (struct passwd *pwd, const char *passwd)
 {
 #ifdef SHADOWPWD
        const struct spwd *sp;
-       struct  spwd    spent;
+       struct spwd spent;
 #endif
 
        /*
-        * 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 ...
+        * 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, passwd);
+               update_passwd (pwd, passwd);
                return 0;
        }
-
 #ifdef SHADOWPWD
        /*
-        * Do the first and easiest shadow file case.  The user
-        * already exists in the shadow password file.
+        * Do the first and easiest shadow file case. The user already
+        * exists in the shadow password file.
         */
 
        if ((sp = spw_locate (pwd->pw_name))) {
                spent = *sp;
-               spent.sp_pwdp = pw_encrypt(passwd, crypt_make_salt());
-               return ! spw_update (&spent);
+               spent.sp_pwdp = pw_encrypt (passwd, crypt_make_salt ());
+               return !spw_update (&spent);
        }
 
        /*
-        * 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.
+        * 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, passwd);
+               update_passwd (pwd, passwd);
                return 0;
        }
 
        /*
-        * Now the really hard case - I need to create an entirely
-        * new shadow password file entry.
+        * Now the really hard case - I need to create an entirely new
+        * shadow password file entry.
         */
 
        spent.sp_namp = pwd->pw_name;
-       spent.sp_pwdp = pw_encrypt(passwd, crypt_make_salt());
-       spent.sp_lstchg = time((time_t *) 0) / SCALE;
-       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_pwdp = pw_encrypt (passwd, crypt_make_salt ());
+       spent.sp_lstchg = time ((time_t *) 0) / SCALE;
+       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 = -1;
 
-       return ! spw_update (&spent);
+       return !spw_update (&spent);
 #endif
 }
 
 #ifdef USE_PAM
 static struct pam_conv conv = {
-    misc_conv,
-    NULL
+       misc_conv,
+       NULL
 };
-#endif /* USE_PAM */
+#endif                         /* USE_PAM */
 
-int
-main(int argc, char **argv)
+int main (int argc, char **argv)
 {
-       char    buf[BUFSIZ];
-       char    *fields[8];
-       int     nfields;
-       char    *cp;
+       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;
+       struct passwd newpw;
+       int errors = 0;
+       int line = 0;
+       uid_t uid;
+       gid_t gid;
+
 #ifdef USE_PAM
        pam_handle_t *pamh = NULL;
        struct passwd *pampw;
        int retval;
 #endif
 
-       Prog = Basename(argv[0]);
+       Prog = Basename (argv[0]);
 
-       setlocale(LC_ALL, "");
-       bindtextdomain(PACKAGE, LOCALEDIR);
-       textdomain(PACKAGE);
+       setlocale (LC_ALL, "");
+       bindtextdomain (PACKAGE, LOCALEDIR);
+       textdomain (PACKAGE);
 
 #ifdef USE_PAM
        retval = PAM_SUCCESS;
 
-       pampw = getpwuid(getuid());
+       pampw = getpwuid (getuid ());
        if (pampw == NULL) {
                retval = PAM_USER_UNKNOWN;
        }
 
        if (retval == PAM_SUCCESS) {
-               retval = pam_start("shadow", pampw->pw_name, &conv, &pamh);
+               retval =
+                   pam_start ("shadow", pampw->pw_name, &conv, &pamh);
        }
 
        if (retval == PAM_SUCCESS) {
-               retval = pam_authenticate(pamh, 0);
+               retval = pam_authenticate (pamh, 0);
                if (retval != PAM_SUCCESS) {
-                       pam_end(pamh, retval);
+                       pam_end (pamh, retval);
                }
        }
 
        if (retval == PAM_SUCCESS) {
-               retval = pam_acct_mgmt(pamh, 0);
+               retval = pam_acct_mgmt (pamh, 0);
                if (retval != PAM_SUCCESS) {
-                       pam_end(pamh, retval);
+                       pam_end (pamh, retval);
                }
        }
 
        if (retval != PAM_SUCCESS) {
-               fprintf (stderr, _("%s: PAM authentication failed\n"), Prog);
+               fprintf (stderr, _("%s: PAM authentication failed\n"),
+                        Prog);
                exit (1);
        }
-#endif /* USE_PAM */
+#endif                         /* USE_PAM */
 
        if (argc > 1 && argv[1][0] == '-')
                usage ();
 
        if (argc == 2) {
-               if (! freopen (argv[1], "r", stdin)) {
-                       snprintf(buf, sizeof buf, "%s: %s", Prog, argv[1]);
+               if (!freopen (argv[1], "r", stdin)) {
+                       snprintf (buf, sizeof buf, "%s: %s", Prog,
+                                 argv[1]);
                        perror (buf);
                        exit (1);
                }
        }
 
        /*
-        * 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.
+        * 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()) {
+       if (!pw_lock ()) {
                fprintf (stderr, _("%s: can't lock /etc/passwd.\n"), Prog);
                exit (1);
        }
 #ifdef SHADOWPWD
-       is_shadow = spw_file_present();
+       is_shadow = spw_file_present ();
 
-       if ((is_shadow && !spw_lock()) || !gr_lock())
+       if ((is_shadow && !spw_lock ()) || !gr_lock ())
 #else
-       if (!gr_lock())
+       if (!gr_lock ())
 #endif
        {
-               fprintf (stderr, _("%s: can't lock files, try again later\n"),
-                       Prog);
+               fprintf (stderr,
+                        _("%s: can't lock files, try again later\n"),
+                        Prog);
                (void) pw_unlock ();
 #ifdef SHADOWPWD
                if (is_shadow)
-                       spw_unlock();
+                       spw_unlock ();
 #endif
                exit (1);
        }
 #ifdef SHADOWPWD
-       if (!pw_open(O_RDWR) || (is_shadow && !spw_open(O_RDWR)) || !gr_open(O_RDWR))
+       if (!pw_open (O_RDWR) || (is_shadow && !spw_open (O_RDWR))
+           || !gr_open (O_RDWR))
 #else
-       if (!pw_open(O_RDWR) || !gr_open(O_RDWR))
+       if (!pw_open (O_RDWR) || !gr_open (O_RDWR))
 #endif
        {
                fprintf (stderr, _("%s: can't open files\n"), Prog);
                (void) pw_unlock ();
 #ifdef SHADOWPWD
                if (is_shadow)
-                       spw_unlock();
+                       spw_unlock ();
 #endif
                (void) gr_unlock ();
                exit (1);
        }
 
        /*
-        * Read each line.  The line has the same format as a password
-        * file entry, except that certain fields are not contrained 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.
+        * Read each line. The line has the same format as a password file
+        * entry, except that certain fields are not contrained 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, sizeof buf, stdin) != (char *) 0) {
@@ -463,18 +458,18 @@ main(int argc, char **argv)
                        *cp = '\0';
                } else {
                        fprintf (stderr, _("%s: line %d: line too long\n"),
-                               Prog, line);
+                                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.
+                * 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++) {
+               for (cp = buf, nfields = 0; nfields < 7; nfields++) {
                        fields[nfields] = cp;
                        if ((cp = strchr (cp, ':')))
                                *cp++ = '\0';
@@ -483,41 +478,42 @@ main(int argc, char **argv)
                }
                if (nfields != 6) {
                        fprintf (stderr, _("%s: line %d: invalid line\n"),
-                               Prog, line);
+                                Prog, line);
                        continue;
                }
 
                /*
-                * Now the fields are processed one by one.  The first
-                * field to be processed is the group name.  A new
-                * group will be created if the group name is non-numeric
-                * and does not already exist.  The named user will be
-                * the only member.  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.
+                * Now the fields are processed one by one. The first field
+                * to be processed is the group name. A new group will be
+                * created if the group name is non-numeric and does not
+                * already exist. The named user will be the only member. 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 (! (pw = pw_locate (fields[0])) &&
-                       add_group (fields[0], fields[3], &gid)) {
-                       fprintf (stderr, _("%s: line %d: can't create GID\n"),
-                               Prog, line);
+
+               if (!(pw = pw_locate (fields[0])) &&
+                   add_group (fields[0], fields[3], &gid)) {
+                       fprintf (stderr,
+                                _("%s: line %d: can't create GID\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.
+                * 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 (! pw && add_user (fields[0], fields[2], &uid, gid)) {
-                       fprintf (stderr, _("%s: line %d: can't create UID\n"),
-                               Prog, line);
+               if (!pw && add_user (fields[0], fields[2], &uid, gid)) {
+                       fprintf (stderr,
+                                _("%s: line %d: can't create UID\n"),
+                                Prog, line);
                        errors++;
                        continue;
                }
@@ -527,17 +523,19 @@ main(int argc, char **argv)
                 * all come next.
                 */
 
-               if (! (pw = pw_locate (fields[0]))) {
-                       fprintf (stderr, _("%s: line %d: cannot find user %s\n"),
-                               Prog, line, fields[0]);
+               if (!(pw = pw_locate (fields[0]))) {
+                       fprintf (stderr,
+                                _("%s: line %d: cannot find user %s\n"),
+                                Prog, line, fields[0]);
                        errors++;
                        continue;
                }
                newpw = *pw;
 
                if (add_passwd (&newpw, fields[1])) {
-                       fprintf (stderr, _("%s: line %d: can't update password\n"),
-                               Prog, line);
+                       fprintf (stderr,
+                                _("%s: line %d: can't update password\n"),
+                                Prog, line);
                        errors++;
                        continue;
                }
@@ -550,58 +548,63 @@ main(int argc, char **argv)
                if (fields[6][0])
                        newpw.pw_shell = fields[6];
 
-               if (newpw.pw_dir[0] && access(newpw.pw_dir, F_OK)) {
+               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);
+                                  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);
                }
 
                /*
                 * Update the password entry with the new changes made.
                 */
 
-               if (! pw_update (&newpw)) {
-                       fprintf (stderr, _("%s: line %d: can't update entry\n"),
-                               Prog, line);
+               if (!pw_update (&newpw)) {
+                       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.
+        * 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 (errors) {
-               fprintf (stderr, _("%s: error detected, changes ignored\n"), Prog);
+               fprintf (stderr,
+                        _("%s: error detected, changes ignored\n"), Prog);
                (void) gr_unlock ();
 #ifdef SHADOWPWD
                if (is_shadow)
-                       spw_unlock();
+                       spw_unlock ();
 #endif
                (void) pw_unlock ();
                exit (1);
        }
 #ifdef SHADOWPWD
-       if (!pw_close() || (is_shadow && !spw_close()) || !gr_close())
+       if (!pw_close () || (is_shadow && !spw_close ()) || !gr_close ())
 #else
-       if (!pw_close() || ! gr_close())
+       if (!pw_close () || !gr_close ())
 #endif
        {
                fprintf (stderr, _("%s: error updating files\n"), Prog);
                (void) gr_unlock ();
 #ifdef SHADOWPWD
                if (is_shadow)
-                       spw_unlock();
+                       spw_unlock ();
 #endif
                (void) pw_unlock ();
                exit (1);
@@ -609,15 +612,15 @@ main(int argc, char **argv)
        (void) gr_unlock ();
 #ifdef SHADOWPWD
        if (is_shadow)
-               spw_unlock();
+               spw_unlock ();
 #endif
        (void) pw_unlock ();
 
 #ifdef USE_PAM
        if (retval == PAM_SUCCESS) {
-               retval = pam_chauthtok(pamh, 0);
+               retval = pam_chauthtok (pamh, 0);
                if (retval != PAM_SUCCESS) {
-                       pam_end(pamh, retval);
+                       pam_end (pamh, retval);
                }
        }
 
@@ -627,9 +630,8 @@ main(int argc, char **argv)
        }
 
        if (retval == PAM_SUCCESS)
-               pam_end(pamh, PAM_SUCCESS);
-#endif /* USE_PAM */
+               pam_end (pamh, PAM_SUCCESS);
+#endif                         /* USE_PAM */
 
        exit (0);
-       /*NOTREACHED*/
-}
+ /*NOTREACHED*/}
index b43eb78bdc856a586fe596c7b262150d3e9133ca..b9d24c0fbe3809637790fdd81d6e345205ac0274 100644 (file)
@@ -17,7 +17,7 @@
  * 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
+ * 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)
@@ -30,8 +30,7 @@
 #include <config.h>
 
 #include "rcsid.h"
-RCSID(PKG_VER "$Id: passwd.c,v 1.20 2000/09/02 18:40:44 marekm Exp $")
-
+RCSID (PKG_VER "$Id: passwd.c,v 1.24 2002/01/05 15:41:43 kloczek Exp $")
 #include "prototypes.h"
 #include "defines.h"
 #include <sys/types.h>
@@ -40,50 +39,29 @@ RCSID(PKG_VER "$Id: passwd.c,v 1.20 2000/09/02 18:40:44 marekm Exp $")
 #include <fcntl.h>
 #include <signal.h>
 #include <errno.h>
-
-#ifdef  HAVE_USERSEC_H
-#include <userpw.h>
-#include <usersec.h>
-#include <userconf.h>
-#endif
-
 #ifndef GPASSWD_PROGRAM
 #define GPASSWD_PROGRAM "gpasswd"
 #endif
-
 #ifndef CHFN_PROGRAM
 #define CHFN_PROGRAM "chfn"
 #endif
-
 #ifndef CHSH_PROGRAM
 #define CHSH_PROGRAM "chsh"
 #endif
-
 #include <pwd.h>
-#ifndef        HAVE_USERSEC_H
-#ifdef SHADOWPWD
-#ifndef        AGING
-#define        AGING   0
-#endif /* !AGING */
-#endif /* SHADOWPWD */
-#endif /* !HAVE_USERSEC_H */
 #include "pwauth.h"
-
 #ifdef HAVE_TCFS
 #include <tcfslib.h>
 #include "tcfsio.h"
 #endif
-
 #ifdef SHADOWPWD
 #include "shadowio.h"
 #endif
 #include "pwio.h"
 #include "getdef.h"
-
 /*
  * exit status values
  */
-
 #define E_SUCCESS      0       /* success */
 #define E_NOPERM       1       /* permission denied */
 #define E_USAGE                2       /* invalid combination of options */
@@ -91,38 +69,29 @@ RCSID(PKG_VER "$Id: passwd.c,v 1.20 2000/09/02 18:40:44 marekm Exp $")
 #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
  */
-
-#ifdef  HAVE_USERSEC_H
-int     minage = 0;         /* Minimum age in weeks           */
-int     maxage = 10000;         /* Maximum age in weeks               */
-#endif
-
-static char *name;     /* The name of user whose password is being changed */
-static char *myname;   /* The current user's name */
+static char *name;             /* The name of user whose password is being changed */
+static char *myname;           /* The current user's name */
 static char *Prog;             /* Program name */
 static int amroot;             /* The real UID was 0 */
 
 static int
-       lflg = 0,               /* -l - lock account */
-       uflg = 0,               /* -u - unlock account */
-       dflg = 0,               /* -d - delete password */
-#ifdef AGING   
-       xflg = 0,               /* -x - set maximum days */
-       nflg = 0,               /* -n - set minimum days */
-       eflg = 0,               /* -e - force password change */
-       kflg = 0,               /* -k - change only if expired */
-#endif
 #ifdef SHADOWPWD
-       wflg = 0,               /* -w - set warning days */
-       iflg = 0,               /* -i - set inactive days */
-#endif
-       qflg = 0,               /* -q - quiet mode */
-       aflg = 0,               /* -a - show status for all users */
-       Sflg = 0;               /* -S - show password status */
+ eflg = 0,                     /* -e - force password change */
+ iflg = 0,                     /* -i - set inactive days */
+ kflg = 0,                     /* -k - change only if expired */
+ nflg = 0,                     /* -n - set minimum days */
+ wflg = 0,                     /* -w - set warning days */
+ xflg = 0,                     /* -x - set maximum days */
+#endif
+ aflg = 0,                     /* -a - show status for all users */
+ dflg = 0,                     /* -d - delete password */
+ lflg = 0,                     /* -l - lock account */
+ qflg = 0,                     /* -q - quiet mode */
+ Sflg = 0,                     /* -S - show password status */
+ uflg = 0;                     /* -u - unlock account */
 
 /*
  * set to 1 if there are any flags which require root privileges,
@@ -130,14 +99,12 @@ static int
  */
 static int anyflag = 0;
 
-#ifdef AGING
-static long age_min = 0;       /* Minimum days before change   */
-static long age_max = 0;       /* Maximum days until change     */
 #ifdef SHADOWPWD
-static long warn = 0;          /* Warning days before change   */
+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 */
 #endif
-#endif
 
 static int do_update_age = 0;
 
@@ -156,96 +123,64 @@ static int tcfs_force = 0;
  */
 
 #ifdef ATT_AGE
-extern char *l64a();
+extern char *l64a ();
 #endif
 
-extern int     optind;         /* Index into argv[] for current option */
-extern char    *optarg;        /* Pointer to current option value */
-
-#ifndef        HAVE_USERSEC_H
 #ifdef NDBM
-extern int     sp_dbm_mode;
-extern int     pw_dbm_mode;
-#endif
-#endif
-
-
-#define WRONGPWD2 "incorrect password for `%s'"
-#define CANTCHANGE2 "password locked for `%s'"
-
-#define TOOSOON2 "now < minimum age for `%s'"
-
-#define EXECFAILED2 "cannot execute %s"
-#define NOPERM2 "can't change pwd for `%s'"
-
-#define PWDBUSY2 "can't lock password file"
-#define OPNERROR2 "can't open password file"
-#define UPDERROR2 "error updating password entry"
-#define CLSERROR2 "can't rewrite password file"
-#define DBMERROR2 "error updaring dbm password entry"
-
-#ifdef HAVE_TCFS
-#define TCFSPWDBUSY2 "can't lock TCFS key database"
-#define TCFSOPNERROR2 "can't open TCFS key database"
-#define TCFSUPDERROR2 "error updating TCFS key database"
-#define TCFSCLSERROR2 "can't rewrite TCFS key database"
+extern int sp_dbm_mode;
+extern int pw_dbm_mode;
 #endif
 
-#define NOTROOT2 "can't setuid(0)"
-#define CHGPASSWD "password for `%s' changed by `%s'"
-#define NOCHGPASSWD "did not change password for `%s'"
-
 /* local function prototypes */
-static void usage(int);
+static void usage (int);
+
 #ifndef USE_PAM
 #ifdef AUTH_METHODS
-static char *get_password(const char *);
-static int uses_default_method(const char *);
-#endif /* AUTH_METHODS */
-static int reuse(const char *, const struct passwd *);
-static int new_password(const struct passwd *);
+static char *get_password (const char *);
+static int uses_default_method (const char *);
+#endif                         /* AUTH_METHODS */
+static int reuse (const char *, const struct passwd *);
+static int new_password (const struct passwd *);
+
 #ifdef SHADOWPWD
-static void check_password(const struct passwd *, const struct spwd *);
-#else /* !SHADOWPWD */
-static void check_password(const struct passwd *);
-#endif /* !SHADOWPWD */
-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 check_password (const struct passwd *, const struct spwd *);
+#else                          /* !SHADOWPWD */
+static void check_password (const struct passwd *);
+#endif                         /* !SHADOWPWD */
+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);
+
 #ifdef SHADOWPWD
-static void update_shadow(void);
+static void update_shadow (void);
 #endif
 #ifdef HAVE_TCFS
-static void update_tcfs(void);
+static void update_tcfs (void);
 #endif
-#ifdef HAVE_USERSEC_H
-static void update_userpw(char *);
-#endif
-static long getnumber(const char *);
+static long getnumber (const char *);
 
 /*
  * usage - print command usage and exit
  */
 
-static void
-usage(int status)
+static void usage (int status)
 {
-       fprintf(stderr, _("usage: %s [ -f | -s ] [ name ]\n"), Prog);
+       fprintf (stderr, _("usage: %s [-f|-s] [name]\n"), Prog);
        if (amroot) {
-               fprintf(stderr,
-                       _("       %s [ -x max ] [ -n min ] [ -w warn ] [ -i inact ] name\n"),
-                       Prog);
-               fprintf(stderr,
-                       _("       %s { -l | -u | -d | -S | -e } name\n"),
-                       Prog);
+               fprintf (stderr,
+                        _
+                        ("       %s [-x max] [-n min] [-w warn] [-i inact] name\n"),
+                        Prog);
+               fprintf (stderr, _("       %s {-l|-u|-d|-S|-e} name\n"),
+                        Prog);
        }
-       exit(status);
+       exit (status);
 }
 
 #ifndef USE_PAM
@@ -254,14 +189,13 @@ usage(int status)
  * get_password - locate encrypted password in authentication list
  */
 
-static char *
-get_password(const char *list)
+static char *get_password (const char *list)
 {
-       char    *cp, *end;
-       static  char    buf[257];
+       char *cp, *end;
+       static char buf[257];
 
-       STRFCPY(buf, list);
-       for (cp = buf;cp;cp = end) {
+       STRFCPY (buf, list);
+       for (cp = buf; cp; cp = end) {
                if ((end = strchr (cp, ';')))
                        *end++ = 0;
 
@@ -280,33 +214,34 @@ get_password(const char *list)
  *     in the authentication string, and if one is present it extracts it.
  */
 
-static int
-uses_default_method(const char *methods)
+static int uses_default_method (const char *methods)
 {
-       char    *cp;
+       char *cp;
 
        if ((cp = get_password (methods))) {
-               STRFCPY(crypt_passwd, cp);
+               STRFCPY (crypt_passwd, cp);
                return 1;
        }
        return 0;
 }
-#endif /* AUTH_METHODS */
+#endif                         /* AUTH_METHODS */
 
-static int
-reuse(const char *pass, const struct passwd *pw)
+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);
+       const char *FascistHistoryPw (const char *, const struct passwd *);
+
+       reason = FascistHistory (pass, pw);
 #else
-       const char *FascistHistory(const char *, int);
-       reason = FascistHistory(pass, pw->pw_uid);
+       const char *FascistHistory (const char *, int);
+
+       reason = FascistHistory (pass, pw->pw_uid);
 #endif
        if (reason) {
-               printf(_("Bad password: %s.  "), reason);
+               printf (_("Bad password: %s.  "), reason);
                return 1;
        }
 #endif
@@ -314,144 +249,152 @@ reuse(const char *pass, const struct passwd *pw)
 }
 
 /*
- * new_password - validate old password and replace with new
- * (both old and new in global "char crypt_passwd[128]")
+ * new_password - validate old password and replace with new (both old and
+ * new in global "char crypt_passwd[128]")
  */
 
-/*ARGSUSED*/
-static int
-new_password(const struct passwd *pw)
+ /*ARGSUSED*/ 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;
+       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;
+
 #ifdef HAVE_LIBCRACK_HIST
-       int HistUpdate(const char *, const char *);
+       int HistUpdate (const char *, const char *);
 #endif
 
        /*
-        * Authenticate the user.  The user will be prompted for their
-        * own password.
+        * Authenticate the user. The user will be prompted for their own
+        * password.
         */
 
 #ifdef HAVE_TCFS
        tcfs_force = tcfs_force && amroot;
 
-       if ((tcfs_locate(name) && !tcfs_force) || (!amroot && crypt_passwd[0])) {
+       if ((tcfs_locate (name) && !tcfs_force)
+           || (!amroot && crypt_passwd[0])) {
                if (amroot) {
-                       printf(_("User %s has a TCFS key, his old password is required.\n"), name);
-                       printf(_("You can use -t option to force the change.\n"));
+                       printf (_
+                               ("User %s has a TCFS key, his old password is required.\n"),
+                               name);
+                       printf (_
+                               ("You can use -t option to force the change.\n"));
                }
 #else
-       if (! amroot && crypt_passwd[0]) {
+       if (!amroot && crypt_passwd[0]) {
 #endif
 
-               if (!(clear = getpass(_("Old password: "))))
+               if (!(clear = getpass (_("Old password: "))))
                        return -1;
 
-               cipher = pw_encrypt(clear, crypt_passwd);
-               if (strcmp(cipher, crypt_passwd) != 0) {
-                       SYSLOG((LOG_WARN, WRONGPWD2, pw->pw_name));
-                       sleep(1);
-                       fprintf(stderr, _("Incorrect password for `%s'\n"),
-                               pw->pw_name);
+               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);
+               STRFCPY (orig, clear);
 #ifdef HAVE_TCFS
-               STRFCPY(tcfspword->tcfsorig, clear);
+               STRFCPY (tcfspword->tcfsorig, clear);
 #endif
-               strzero(clear);
-               strzero(cipher);
+               strzero (clear);
+               strzero (cipher);
        } else {
 #ifdef HAVE_TCFS
-               if (tcfs_locate(name))
-                       printf(_("Warning: user %s has a TCFS key.\n"), name);
+               if (tcfs_locate (name))
+                       printf (_("Warning: user %s has a TCFS key.\n"),
+                               name);
 #endif
                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
+        * 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 (getdef_bool("MD5_CRYPT_ENAB"))
+       if (getdef_bool ("MD5_CRYPT_ENAB"))
                pass_max_len = 127;
        else
-               pass_max_len = getdef_num("PASS_MAX_LEN", 8);
+               pass_max_len = getdef_num ("PASS_MAX_LEN", 8);
 
        if (!qflg)
-               printf(_("\
+               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);
+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--) {
-               if (!(cp = getpass(_("New password: ")))) {
-                       memzero(orig, sizeof orig);
+       for (i = getdef_num ("PASS_CHANGE_TRIES", 5); i > 0; i--) {
+               if (!(cp = getpass (_("New password: ")))) {
+                       memzero (orig, sizeof orig);
                        return -1;
                }
-               if (warned && strcmp(pass, cp) != 0)
+               if (warned && strcmp (pass, cp) != 0)
                        warned = 0;
-               STRFCPY(pass, cp);
-               strzero(cp);
+               STRFCPY (pass, cp);
+               strzero (cp);
 
-               if (!amroot && (!obscure(orig, pass, pw) || reuse(pass, pw))) {
-                       printf(_("Try again.\n"));
+               if (!amroot
+                   && (!obscure (orig, pass, pw) || reuse (pass, pw))) {
+                       printf (_("Try again.\n"));
                        continue;
                }
                /*
-                * If enabled, warn about weak passwords even if you are root
-                * (enter this password again to use it anyway).  --marekm
+                * 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))) {
-                       printf(_("\nWarning: weak password (enter it again to use it anyway).\n"));
+               if (amroot && !warned && getdef_bool ("PASS_ALWAYS_WARN")
+                   && (!obscure (orig, pass, pw) || reuse (pass, pw))) {
+                       printf (_
+                               ("\nWarning: weak password (enter it again to use it anyway).\n"));
                        warned++;
                        continue;
                }
-               if (!(cp = getpass(_("Re-enter new password: ")))) {
-                       memzero(orig, sizeof orig);
+               if (!(cp = getpass (_("Re-enter new password: ")))) {
+                       memzero (orig, sizeof orig);
                        return -1;
                }
                if (strcmp (cp, pass))
-                       fprintf(stderr, _("They don't match; try again.\n"));
+                       fprintf (stderr,
+                                _("They don't match; try again.\n"));
                else {
-                       strzero(cp);
+                       strzero (cp);
                        break;
                }
        }
-       memzero(orig, sizeof orig);
+       memzero (orig, sizeof orig);
 
        if (i == 0) {
-               memzero(pass, sizeof pass);
+               memzero (pass, sizeof pass);
                return -1;
        }
-
 #ifdef HAVE_TCFS
-       STRFCPY(tcfspword->tcfspass, pass);
+       STRFCPY (tcfspword->tcfspass, pass);
 #endif
 
        /*
         * Encrypt the password, then wipe the cleartext password.
         */
 
-       cp = pw_encrypt(pass, crypt_make_salt());
-       memzero(pass, sizeof pass);
+       cp = pw_encrypt (pass, crypt_make_salt ());
+       memzero (pass, sizeof pass);
 
 #ifdef HAVE_LIBCRACK_HIST
-       HistUpdate(pw->pw_name, crypt_passwd);
+       HistUpdate (pw->pw_name, crypt_passwd);
 #endif
-       STRFCPY(crypt_passwd, cp);
+       STRFCPY (crypt_passwd, cp);
        return 0;
 }
 
@@ -463,32 +406,27 @@ Please use a combination of upper and lower case letters and numbers.\n"),
  */
 
 #ifdef SHADOWPWD
-static void
-check_password(const struct passwd *pw, const struct spwd *sp)
+static void check_password (const struct passwd *pw, const struct spwd *sp)
 {
 #else
-static void
-check_password(const struct passwd *pw)
+static void check_password (const struct passwd *pw)
 {
 #endif
        time_t now, last, ok;
        int exp_status;
-#ifdef HAVE_USERSEC_H
-       struct userpw *pu;
-#endif
 
 #ifdef SHADOWPWD
-       exp_status = isexpired(pw, sp);
+       exp_status = isexpired (pw, sp);
 #else
-       exp_status = isexpired(pw);
+       exp_status = isexpired (pw);
 #endif
 
        /*
-        * If not expired and the "change only if expired" option
-        * (idea from PAM) was specified, do nothing...  --marekm
+        * If not expired and the "change only if expired" option (idea from
+        * PAM) was specified, do nothing. --marekm
         */
        if (kflg && exp_status == 0)
-               exit(E_SUCCESS);
+               exit (E_SUCCESS);
 
        /*
         * Root can change any password any time.
@@ -497,23 +435,25 @@ check_password(const struct passwd *pw)
        if (amroot)
                return;
 
-       time(&now);
+       time (&now);
 
 #ifdef SHADOWPWD
        /*
-        * 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.
+        * 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, CANTCHANGE2, sp->sp_namp));
-               closelog();
-               exit(E_NOPERM);
+               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);
        }
 
        /*
@@ -523,55 +463,54 @@ check_password(const struct passwd *pw)
        last = sp->sp_lstchg * SCALE;
        ok = last + (sp->sp_min > 0 ? sp->sp_min * SCALE : 0);
 
-#else /* !SHADOWPWD */
+#else                          /* !SHADOWPWD */
        if (pw->pw_passwd[0] == '!' || exp_status > 1) {
-               fprintf(stderr, _("The password for %s cannot be changed.\n"),
-                       pw->pw_name);
-               SYSLOG((LOG_WARN, CANTCHANGE2, pw->pw_name));
-               closelog();
-               exit(E_NOPERM);
+               fprintf (stderr,
+                        _("The password for %s cannot be changed.\n"),
+                        pw->pw_name);
+               SYSLOG ((LOG_WARN, "password locked for `%s'",
+                        pw->pw_name));
+               closelog ();
+               exit (E_NOPERM);
        }
 #ifdef ATT_AGE
        /*
         * Can always be changed if there is no age info
         */
 
-       if (! pw->pw_age[0])
+       if (!pw->pw_age[0])
                return;
 
        last = a64l (pw->pw_age + 2) * WEEK;
        ok = last + c64i (pw->pw_age[1]) * WEEK;
-#else  /* !ATT_AGE */
-#ifdef HAVE_USERSEC_H
-       pu = getuserpw(pw->pw_name);
-       last = pu ? pu->upw_lastupdate : 0L;
-       ok = last + (minage > 0 ? minage * WEEK : 0);
-#else
+#else                          /* !ATT_AGE */
        last = 0;
        ok = 0;
-#endif
-#endif /* !ATT_AGE */
-#endif /* !SHADOWPWD */
+#endif                         /* !ATT_AGE */
+#endif                         /* !SHADOWPWD */
        if (now < ok) {
-               fprintf(stderr, _("Sorry, the password for %s cannot be changed yet.\n"), pw->pw_name);
-               SYSLOG((LOG_WARN, TOOSOON2, pw->pw_name));
-               closelog();
-               exit(E_NOPERM);
+               fprintf (stderr,
+                        _
+                        ("Sorry, 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
+ * 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)
+static char *insert_crypt_passwd (const char *string, const char *passwd)
 {
 #ifdef AUTH_METHODS
        if (string && *string) {
                char *cp, *result;
 
-               result = xmalloc(strlen(string) + strlen(passwd) + 1);
+               result = xmalloc (strlen (string) + strlen (passwd) + 1);
                cp = result;
                while (*string) {
                        if (string[0] == ';') {
@@ -591,28 +530,26 @@ insert_crypt_passwd(const char *string, const char *passwd)
                return result;
        }
 #endif
-       return xstrdup(passwd);
+       return xstrdup (passwd);
 }
-#endif /* !USE_PAM */
+#endif                         /* !USE_PAM */
 
-static char *
-date_to_str(time_t t)
+static char *date_to_str (time_t t)
 {
        static char buf[80];
        struct tm *tm;
 
-       tm = gmtime(&t);
+       tm = gmtime (&t);
 #ifdef HAVE_STRFTIME
-       strftime(buf, sizeof buf, "%m/%d/%Y", tm);
+       strftime (buf, sizeof buf, "%m/%d/%Y", tm);
 #else
-       snprintf(buf, sizeof buf, "%02d/%02d/%04d",
-               tm->tm_mon + 1, tm->tm_mday, tm->tm_year + 1900);
+       snprintf (buf, sizeof buf, "%02d/%02d/%04d",
+                 tm->tm_mon + 1, tm->tm_mday, tm->tm_year + 1900);
 #endif
        return buf;
 }
 
-static const char *
-pw_status(const char *pass)
+static const char *pw_status (const char *pass)
 {
        if (*pass == '*' || *pass == '!')
                return "L";
@@ -625,23 +562,19 @@ pw_status(const char *pass)
  * print_status - print current password status
  */
 
-static void
-print_status(const struct passwd *pw)
+static void print_status (const struct passwd *pw)
 {
 #ifdef SHADOWPWD
        struct spwd *sp;
 #endif
-#ifdef HAVE_USERSEC_H
-       struct userpw *pu;
-#endif
 
 #ifdef SHADOWPWD
-       sp = getspnam(pw->pw_name);
+       sp = getspnam (pw->pw_name);
        if (sp) {
-               printf("%s %s %s %ld %ld %ld %ld\n",
+               printf ("%s %s %s %ld %ld %ld %ld\n",
                        pw->pw_name,
-                       pw_status(sp->sp_pwdp),
-                       date_to_str(sp->sp_lstchg * SCALE),
+                       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,
@@ -649,119 +582,107 @@ print_status(const struct passwd *pw)
        } else
 #endif
        {
-#ifdef HAVE_USERSEC_H
-               pu = getuserpw(name);
-               printf("%s %s %s %d %d\n",
-                       pw->pw_name,
-                       pw_status(pw->pw_passwd),
-                       date_to_str(pu ? pu->upw_lastupdate : 0L),
-                       minage > 0 ? minage * 7 : 0,
-                       maxage > 0 ? maxage * 7 : 10000);
-#else /* !HAVE_USERSEC_H */
 #ifdef ATT_AGE
-               printf("%s %s %s %d %d\n",
+               printf ("%s %s %s %d %d\n",
                        pw->pw_name,
-                       pw_status(pw->pw_passwd),
-                       date_to_str(strlen(pw->pw_age) > 2 ?
-                               a64l(pw->pw_age + 2) * WEEK : 0L),
-                       pw->pw_age[0] ? c64i(pw->pw_age[1]) * 7 : 0,
-                       pw->pw_age[0] ? c64i(pw->pw_age[0]) * 7 : 10000);
+                       pw_status (pw->pw_passwd),
+                       date_to_str (strlen (pw->pw_age) > 2 ?
+                                    a64l (pw->pw_age + 2) * WEEK : 0L),
+                       pw->pw_age[0] ? c64i (pw->pw_age[1]) * 7 : 0,
+                       pw->pw_age[0] ? c64i (pw->pw_age[0]) * 7 : 10000);
 #else
-               printf("%s %s\n", pw->pw_name, pw_status(pw->pw_passwd));
+               printf ("%s %s\n", pw->pw_name, pw_status (pw->pw_passwd));
 #endif
-#endif /* !HAVE_USERSEC_H */
        }
 }
 
 
-static void
-fail_exit(int status)
+static void fail_exit (int status)
 {
-       pw_unlock();
+       pw_unlock ();
 #ifdef SHADOWPWD
-       spw_unlock();
+       spw_unlock ();
 #endif
 #ifdef HAVE_TCFS
-       tcfs_unlock();
+       tcfs_unlock ();
 #endif
-       exit(status);
+       exit (status);
 }
 
-static void
-oom(void)
+static void oom (void)
 {
-       fprintf(stderr, _("%s: out of memory\n"), Prog);
-       fail_exit(E_FAILURE);
+       fprintf (stderr, _("%s: out of memory\n"), Prog);
+       fail_exit (E_FAILURE);
 }
 
-static char *
-update_crypt_pw(char *cp)
+static char *update_crypt_pw (char *cp)
 {
 #ifndef USE_PAM
        if (do_update_pwd)
-               cp = insert_crypt_passwd(cp, crypt_passwd);
+               cp = insert_crypt_passwd (cp, crypt_passwd);
 #endif
 
        if (dflg)
-               cp = "";  /* XXX warning: const */
+               cp = "";        /* XXX warning: const */
 
        if (uflg && *cp == '!')
                cp++;
 
        if (lflg && *cp != '!') {
-               char *newpw = xmalloc(strlen(cp) + 2);
+               char *newpw = xmalloc (strlen (cp) + 2);
 
-               strcpy(newpw, "!");
-               strcat(newpw, cp);
+               strcpy (newpw, "!");
+               strcat (newpw, cp);
                cp = newpw;
        }
        return cp;
 }
 
 
-static void
-update_noshadow(void)
+static void update_noshadow (void)
 {
        const struct passwd *pw;
        struct passwd *npw;
+
 #ifdef ATT_AGE
        char age[5];
-       long week = time((time_t *) 0) / WEEK;
+       long week = time ((time_t *) 0) / WEEK;
        char *cp;
 #endif
 
-       if (!pw_lock()) {
-               fprintf(stderr,
-                       _("Cannot lock the password file; try again later.\n"));
-               SYSLOG((LOG_WARN, PWDBUSY2));
-               exit(E_PWDBUSY);
+       if (!pw_lock ()) {
+               fprintf (stderr,
+                        _
+                        ("Cannot lock the password file; try again later.\n"));
+               SYSLOG ((LOG_WARN, "can't lock password file"));
+               exit (E_PWDBUSY);
        }
-       if (!pw_open(O_RDWR)) {
-               fprintf(stderr, _("Cannot open the password file.\n"));
-               SYSLOG((LOG_ERR, OPNERROR2));
-               fail_exit(E_MISSING);
+       if (!pw_open (O_RDWR)) {
+               fprintf (stderr, _("Cannot open the password file.\n"));
+               SYSLOG ((LOG_ERR, "can't open password file"));
+               fail_exit (E_MISSING);
        }
-       pw = pw_locate(name);
+       pw = pw_locate (name);
        if (!pw) {
-               fprintf(stderr, _("%s: %s not found in /etc/passwd\n"),
-                       Prog, name);
-               fail_exit(E_NOPERM);
+               fprintf (stderr, _("%s: %s not found in /etc/passwd\n"),
+                        Prog, name);
+               fail_exit (E_NOPERM);
        }
-       npw = __pw_dup(pw);
+       npw = __pw_dup (pw);
        if (!npw)
-               oom();
-       npw->pw_passwd = update_crypt_pw(npw->pw_passwd);
+               oom ();
+       npw->pw_passwd = update_crypt_pw (npw->pw_passwd);
 #ifdef ATT_AGE
-       memzero(age, sizeof(age));
-       STRFCPY(age, npw->pw_age);
+       memzero (age, sizeof (age));
+       STRFCPY (age, npw->pw_age);
 
        /*
-        * Just changing the password - update the last change date
-        * if there is one, otherwise the age just disappears.
+        * Just changing the password - update the last change date if there
+        * is one, otherwise the age just disappears.
         */
        if (do_update_age) {
-               if (strlen(age) > 2) {
-                       cp = l64a(week);
+               if (strlen (age) > 2) {
+                       cp = l64a (week);
                        age[2] = cp[0];
                        age[3] = cp[1];
                } else {
@@ -771,7 +692,7 @@ update_noshadow(void)
 
        if (xflg) {
                if (age_max > 0)
-                       age[0] = i64c((age_max + 6) / 7);
+                       age[0] = i64c ((age_max + 6) / 7);
                else
                        age[0] = '.';
 
@@ -783,121 +704,131 @@ update_noshadow(void)
                        age[0] = 'z';
 
                if (age_min > 0)
-                       age[1] = i64c((age_min + 6) / 7);
+                       age[1] = i64c ((age_min + 6) / 7);
                else
                        age[1] = '.';
        }
        /*
-        * The last change date is added by -n or -x if it's
-        * not already there.
+        * The last change date is added by -n or -x if it's not already
+        * there.
         */
-       if ((nflg || xflg) && strlen(age) <= 2) {
-               cp = l64a(week);
+       if ((nflg || xflg) && strlen (age) <= 2) {
+               cp = l64a (week);
                age[2] = cp[0];
                age[3] = cp[1];
        }
 
        /*
-        * Force password change - if last change date is
-        * present, it will be set to (today - max - 1 week).
-        * Otherwise, just set min = max = 0 (will disappear
-        * when password is changed).
+        * Force password change - if last change date is present, it will
+        * be set to (today - max - 1 week). Otherwise, just set min = max
+        * = 0 (will disappear when password is changed).
         */
        if (eflg) {
-               if (strlen(age) > 2) {
-                       cp = l64a(week - c64i(age[0]) - 1);
+               if (strlen (age) > 2) {
+                       cp = l64a (week - c64i (age[0]) - 1);
                        age[2] = cp[0];
                        age[3] = cp[1];
                } else {
-                       strcpy(age, "..");
+                       strcpy (age, "..");
                }
        }
 
        npw->pw_age = age;
 #endif
-       if (!pw_update(npw)) {
-               fprintf(stderr, _("Error updating the password entry.\n"));
-               SYSLOG((LOG_ERR, UPDERROR2));
-               fail_exit(E_FAILURE);
+       if (!pw_update (npw)) {
+               fprintf (stderr,
+                        _("Error updating the password entry.\n"));
+               SYSLOG ((LOG_ERR, "error updating password entry"));
+               fail_exit (E_FAILURE);
        }
 #ifdef NDBM
-       if (pw_dbm_present() && !pw_dbm_update(npw)) {
-               fprintf(stderr, _("Error updating the DBM password entry.\n"));
-               SYSLOG((LOG_ERR, DBMERROR2));
-               fail_exit(E_FAILURE);
+       if (pw_dbm_present () && !pw_dbm_update (npw)) {
+               fprintf (stderr,
+                        _("Error updating the DBM password entry.\n"));
+               SYSLOG ((LOG_ERR, "error updaring dbm password entry"));
+               fail_exit (E_FAILURE);
        }
-       endpwent();
+       endpwent ();
 #endif
-       if (!pw_close()) {
-               fprintf(stderr, _("Cannot commit password file changes.\n"));
-               SYSLOG((LOG_ERR, CLSERROR2));
-               fail_exit(E_FAILURE);
+       if (!pw_close ()) {
+               fprintf (stderr,
+                        _("Cannot commit password file changes.\n"));
+               SYSLOG ((LOG_ERR, "can't rewrite password file"));
+               fail_exit (E_FAILURE);
        }
-       pw_unlock();
+       pw_unlock ();
 }
 
 #ifdef HAVE_TCFS
-static void
-update_tcfs(void)
+static void update_tcfs (void)
 {
        if (!tcfs_force) {
-               if (!tcfs_lock()) {
-                       fprintf(stderr, _("Cannot lock the TCFS key database; try again later\n"));
-                       SYSLOG((LOG_WARN, TCFSPWDBUSY2));
-                       exit(E_PWDBUSY);
+               if (!tcfs_lock ()) {
+                       fprintf (stderr,
+                                _
+                                ("Cannot lock the TCFS key database; try again later\n"));
+                       SYSLOG ((LOG_WARN,
+                                "can't lock TCFS key database"));
+                       exit (E_PWDBUSY);
                }
-               if (!tcfs_open(O_RDWR)) {
-                       fprintf(stderr,
-                               _("Cannot open the TCFS key database.\n"));
-                       SYSLOG((LOG_WARN, TCFSOPNERROR2));
-                       fail_exit(E_MISSING);
+               if (!tcfs_open (O_RDWR)) {
+                       fprintf (stderr,
+                                _
+                                ("Cannot open the TCFS key database.\n"));
+                       SYSLOG ((LOG_WARN,
+                                "can't open TCFS key database"));
+                       fail_exit (E_MISSING);
                }
-               if (!tcfs_update(name, tcfspword)) {
-                       fprintf(stderr,
-                               _("Error updating the TCFS key database.\n"));
-                       SYSLOG((LOG_ERR, TCFSUPDERROR2));
-                       fail_exit(E_FAILURE);
+               if (!tcfs_update (name, tcfspword)) {
+                       fprintf (stderr,
+                                _
+                                ("Error updating the TCFS key database.\n"));
+                       SYSLOG ((LOG_ERR,
+                                "error updating TCFS key database"));
+                       fail_exit (E_FAILURE);
                }
-               if (!tcfs_close()) {
-                       fprintf(stderr, _("Cannot commit TCFS changes.\n"));
-                       SYSLOG((LOG_ERR, TCFSCLSERROR2));
-                       fail_exit(E_FAILURE);
+               if (!tcfs_close ()) {
+                       fprintf (stderr,
+                                _("Cannot commit TCFS changes.\n"));
+                       SYSLOG ((LOG_ERR,
+                                "can't rewrite TCFS key database"));
+                       fail_exit (E_FAILURE);
                }
-               tcfs_unlock();
+               tcfs_unlock ();
        }
 }
-#endif /* HAVE_TCFS */
+#endif                         /* HAVE_TCFS */
 
 #ifdef SHADOWPWD
-static void
-update_shadow(void)
+static void update_shadow (void)
 {
        const struct spwd *sp;
        struct spwd *nsp;
 
-       if (!spw_lock()) {
-               fprintf(stderr,
-                       _("Cannot lock the password file; try again later.\n"));
-               SYSLOG((LOG_WARN, PWDBUSY2));
-               exit(E_PWDBUSY);
+       if (!spw_lock ()) {
+               fprintf (stderr,
+                        _
+                        ("Cannot lock the password file; try again later.\n"));
+               SYSLOG ((LOG_WARN, "can't lock password file"));
+               exit (E_PWDBUSY);
        }
-       if (!spw_open(O_RDWR)) {
-               fprintf(stderr, _("Cannot open the password file.\n"));
-               SYSLOG((LOG_ERR, OPNERROR2));
-               fail_exit(E_FAILURE);
+       if (!spw_open (O_RDWR)) {
+               fprintf (stderr, _("Cannot open the password file.\n"));
+               SYSLOG ((LOG_ERR, "can't open password file"));
+               fail_exit (E_FAILURE);
        }
-       sp = spw_locate(name);
+       sp = spw_locate (name);
        if (!sp) {
-               /* Try to update the password in /etc/passwd instead.  */
-               spw_close();
-               update_noshadow();
-               spw_unlock();
+               /* Try to update the password in /etc/passwd instead. */
+               spw_close ();
+               update_noshadow ();
+               spw_unlock ();
                return;
        }
-       nsp = __spw_dup(sp);
+       nsp = __spw_dup (sp);
        if (!nsp)
-               oom();
-       nsp->sp_pwdp = update_crypt_pw(nsp->sp_pwdp);
+               oom ();
+       nsp->sp_pwdp = update_crypt_pw (nsp->sp_pwdp);
        if (xflg)
                nsp->sp_max = (age_max * DAY) / SCALE;
        if (nflg)
@@ -907,82 +838,56 @@ update_shadow(void)
        if (iflg)
                nsp->sp_inact = (inact * DAY) / SCALE;
        if (do_update_age)
-               nsp->sp_lstchg = time((time_t *) 0) / SCALE;
+               nsp->sp_lstchg = time ((time_t *) 0) / SCALE;
        /*
-        * 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).
+        * 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)) {
-               fprintf(stderr, _("Error updating the password entry.\n"));
-               SYSLOG((LOG_ERR, UPDERROR2));
-               fail_exit(E_FAILURE);
+       if (!spw_update (nsp)) {
+               fprintf (stderr,
+                        _("Error updating the password entry.\n"));
+               SYSLOG ((LOG_ERR, "error updating password entry"));
+               fail_exit (E_FAILURE);
        }
 #ifdef NDBM
-       if (sp_dbm_present() && !sp_dbm_update(nsp)) {
-               fprintf(stderr, _("Error updating the DBM password entry.\n"));
-               SYSLOG((LOG_ERR, DBMERROR2));
-               fail_exit(E_FAILURE);
+       if (sp_dbm_present () && !sp_dbm_update (nsp)) {
+               fprintf (stderr,
+                        _("Error updating the DBM password entry.\n"));
+               SYSLOG ((LOG_ERR, "error updaring dbm password entry"));
+               fail_exit (E_FAILURE);
        }
-       endspent();
+       endspent ();
 #endif
-       if (!spw_close()) {
-               fprintf(stderr, _("Cannot commit password file changes.\n"));
-               SYSLOG((LOG_ERR, CLSERROR2));
-               fail_exit(E_FAILURE);
+       if (!spw_close ()) {
+               fprintf (stderr,
+                        _("Cannot commit password file changes.\n"));
+               SYSLOG ((LOG_ERR, "can't rewrite password file"));
+               fail_exit (E_FAILURE);
        }
-       spw_unlock();
+       spw_unlock ();
 }
-#endif  /* SHADOWPWD */
+#endif                         /* SHADOWPWD */
 
-#ifdef HAVE_USERSEC_H
-static void
-update_userpw(char *cp)
-{
-       struct userpw userpw;
-
-       /*
-        * AIX very conveniently has its own mechanism for updating
-        * passwords.  Use it instead ...
-        */
-
-       strcpy(userpw.upw_name, name);
-       userpw.upw_passwd = update_crypt_pw(cp);
-       userpw.upw_lastupdate = time (0);
-       userpw.upw_flags = 0;
-
-       setpwdb(S_WRITE);
-
-       if (putuserpw(&userpw)) {
-               fprintf(stderr, _("Error updating the password entry.\n"));
-               SYSLOG((LOG_ERR, UPDERROR2));
-               closelog();
-               exit(E_FAILURE);
-       }
-       endpwdb();
-}
-#endif
-
-static long
-getnumber(const char *str)
+static long getnumber (const char *str)
 {
        long val;
        char *cp;
 
-       val = strtol(str, &cp, 10);
+       val = strtol (str, &cp, 10);
        if (*cp)
-               usage(E_BAD_ARG);
+               usage (E_BAD_ARG);
        return val;
 }
 
 /*
  * passwd - change a user's password file information
  *
- *     This command controls the password file and commands which are
- *     used to modify it.
+ *     This command controls the password file and commands which are used
+ *     to modify it.
  *
  *     The valid options are
  *
@@ -1004,157 +909,152 @@ getnumber(const char *str)
  *     (*) 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
+ *     appropriate internal format. For finer resolute the chage
  *     command must be used.
  */
 
-int
-main(int argc, char **argv)
+int main (int argc, char **argv)
 {
-       int     flag;                   /* Current option to process     */
+       int flag;               /* Current option to process     */
        const struct passwd *pw;        /* Password file entry for user      */
+
 #ifndef USE_PAM
-       char    *cp;                    /* Miscellaneous character pointing  */
+       char *cp;               /* Miscellaneous character pointing  */
+
 #ifdef SHADOWPWD
-       const struct spwd *sp;          /* Shadow file entry for user   */
+       const struct spwd *sp;  /* Shadow file entry for user   */
 #endif
 #endif
 
-       setlocale(LC_ALL, "");
-       bindtextdomain(PACKAGE, LOCALEDIR);
-       textdomain(PACKAGE);
+       setlocale (LC_ALL, "");
+       bindtextdomain (PACKAGE, LOCALEDIR);
+       textdomain (PACKAGE);
 
        /*
-        * The program behaves differently when executed by root
-        * than when executed by a normal user.
+        * 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.
+        * Get the program name. The program name is used as a prefix to
+        * most error messages.
         */
-       Prog = Basename(argv[0]);
+       Prog = Basename (argv[0]);
 
-       sanitize_env();
+       sanitize_env ();
 
-       OPENLOG("passwd");
+       OPENLOG ("passwd");
 
        /*
-        * Start with the flags which cause another command to be
-        * executed.  The effective UID will be set back to the
-        * real UID and the new command executed with the flags
+        * Start with the flags which cause another command to be executed.
+        * The effective UID will be set back to the real UID and the new
+        * command executed with the flags
         *
-        * These flags are deprecated, may change in a future
-        * release.  Please run these programs directly.  --marekm
+        * These flags are deprecated, may change in a future release.
+        * Please run these programs directly.  --marekm
         */
 
        if (argc > 1 && argv[1][0] == '-' && strchr ("gfs", argv[1][1])) {
                char buf[200];
 
-               setuid(getuid());
+               setuid (getuid ());
                switch (argv[1][1]) {
-                       case 'g':
-                               argv[1] = GPASSWD_PROGRAM;  /* XXX warning: const */
-                               break;
-                       case 'f':
-                               argv[1] = CHFN_PROGRAM;  /* XXX warning: const */
-                               break;
-                       case 's':
-                               argv[1] = CHSH_PROGRAM;  /* XXX warning: const */
-                               break;
-                       default:
-                               usage(E_BAD_ARG);
+               case 'g':
+                       argv[1] = GPASSWD_PROGRAM;      /* XXX warning: const */
+                       break;
+               case 'f':
+                       argv[1] = CHFN_PROGRAM; /* XXX warning: const */
+                       break;
+               case 's':
+                       argv[1] = CHSH_PROGRAM; /* XXX warning: const */
+                       break;
+               default:
+                       usage (E_BAD_ARG);
                }
-               snprintf(buf, sizeof buf, _("%s: Cannot execute %s"),
-                       Prog, argv[1]);
-               execvp(argv[1], &argv[1]);
-               perror(buf);
-               SYSLOG((LOG_ERR, EXECFAILED2, argv[1]));
-               closelog();
-               exit(E_FAILURE);
+               snprintf (buf, sizeof buf, _("%s: Cannot execute %s"),
+                         Prog, argv[1]);
+               execvp (argv[1], &argv[1]);
+               perror (buf);
+               SYSLOG ((LOG_ERR, "cannot execute %s", argv[1]));
+               closelog ();
+               exit (E_FAILURE);
        }
 
        /* 
-        * 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.
+        * 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.
         */
 
 #ifdef SHADOWPWD
+
 #define FLAGS "adlqr:uSekn:x:i:w:"
 #ifdef HAVE_TCFS
 #undef FLAGS
 #define FLAGS "adlqr:uSekn:x:i:w:t"
 #endif
+
 #else
-#ifdef AGING
-#define FLAGS "adlqr:uSekn:x:"
-#ifdef HAVE_TCFS
-#undef FLAGS
-#define FLAGS "adlqr:uSekn:x:t"
-#endif
-#else
+
 #define FLAGS "adlqr:uS"
 #ifdef HAVE_TCFS
 #undef FLAGS
 #define FLAGS "adlqr:uSt"
 #endif
+
 #endif
-#endif
-       while ((flag = getopt(argc, argv, FLAGS)) != EOF) {
+
+       while ((flag = getopt (argc, argv, FLAGS)) != EOF) {
 #undef FLAGS
                switch (flag) {
-#ifdef AGING
+#ifdef HAVE_TCFS
+               case 't':
+                       tcfs_force = 1;
+                       break;
+#endif
+#ifdef SHADOWPWD
                case 'x':
-                       age_max = getnumber(optarg);
+                       age_max = getnumber (optarg);
                        xflg++;
                        anyflag = 1;
                        break;
                case 'n':
-                       age_min = getnumber(optarg);
+                       age_min = getnumber (optarg);
                        nflg++;
                        anyflag = 1;
                        break;
-#ifdef HAVE_TCFS
-               case 't':
-                       tcfs_force = 1;
-                       break;
-#endif
-#ifdef SHADOWPWD
                case 'w':
-                       warn = getnumber(optarg);
+                       warn = getnumber (optarg);
                        if (warn >= -1)
                                wflg++;
                        anyflag = 1;
                        break;
                case 'i':
-                       inact = getnumber(optarg);
+                       inact = getnumber (optarg);
                        if (inact >= -1)
                                iflg++;
                        anyflag = 1;
                        break;
-#endif /* SHADOWPWD */
                case 'e':
                        eflg++;
                        anyflag = 1;
                        break;
                case 'k':
-                       /* change only if expired, like Linux-PAM passwd -k.  */
-                       kflg++;  /* ok for users */
+                       /* change only if expired, like Linux-PAM passwd -k. */
+                       kflg++; /* ok for users */
                        break;
-#endif /* AGING */
+#endif                         /* SHADOWPWD */
                case 'a':
                        aflg++;
                        break;
                case 'q':
-                       qflg++;  /* ok for users */
+                       qflg++; /* ok for users */
                        break;
                case 'S':
-                       Sflg++;  /* ok for users */
+                       Sflg++; /* ok for users */
                        break;
                case 'd':
                        dflg++;
@@ -1171,44 +1071,33 @@ main(int argc, char **argv)
                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);
+                       if (strcmp (optarg, "files") != 0) {
+                               fprintf (stderr,
+                                        _
+                                        ("%s: repository %s not supported\n"),
+                                        Prog, optarg);
+                               exit (E_BAD_ARG);
                        }
                        break;
                default:
-                       usage(E_BAD_ARG);
+                       usage (E_BAD_ARG);
                }
        }
 
-#ifdef  HAVE_USERSEC_H
        /*
-        * The aging information lives someplace else.  Get it from the
-        * login.cfg file
+        * 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.
         */
 
-       if (getconfattr(SC_SYS_PASSWD, SC_MINAGE, &minage, SEC_INT))
-               minage = -1;
-
-       if (getconfattr(SC_SYS_PASSWD, SC_MAXAGE, &maxage, SEC_INT))
-               maxage = -1;
-#endif /* HAVE_USERSEC_H */
-
-       /*
-        * 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();
+       pw = get_my_pwent ();
        if (!pw) {
-               fprintf(stderr, _("%s: Cannot determine your user name.\n"),
-                       Prog);
-               exit(E_NOPERM);
+               fprintf (stderr,
+                        _("%s: Cannot determine your user name.\n"),
+                        Prog);
+               exit (E_NOPERM);
        }
-       myname = xstrdup(pw->pw_name);
+       myname = xstrdup (pw->pw_name);
        if (optind < argc)
                name = argv[optind];
        else
@@ -1221,91 +1110,89 @@ main(int argc, char **argv)
 
        if (aflg) {
                if (anyflag || !Sflg || (optind < argc))
-                       usage(E_USAGE);
+                       usage (E_USAGE);
                if (!amroot) {
-                       fprintf(stderr, _("%s: Permission denied.\n"), Prog);
-                       exit(E_NOPERM);
+                       fprintf (stderr, _("%s: Permission denied.\n"),
+                                Prog);
+                       exit (E_NOPERM);
                }
-               setpwent();
-               while ((pw = getpwent()))
-                       print_status(pw);
-               exit(E_SUCCESS);
+               setpwent ();
+               while ((pw = getpwent ()))
+                       print_status (pw);
+               exit (E_SUCCESS);
        }
-
 #if 0
        /*
         * Allow certain users (administrators) to change passwords of
-        * certain users.  Not implemented yet...  --marekm
+        * certain users. Not implemented yet. --marekm
         */
-       if (may_change_passwd(myname, name))
+       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.
+        * 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
+        * -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);
+               usage (E_USAGE);
 
        if (anyflag + Sflg + kflg > 1)
-               usage(E_USAGE);
+               usage (E_USAGE);
 
        if (anyflag && !amroot) {
-               fprintf(stderr, _("%s: Permission denied\n"), Prog);
-               exit(E_NOPERM);
+               fprintf (stderr, _("%s: Permission denied\n"), Prog);
+               exit (E_NOPERM);
        }
-
 #ifdef NDBM
-       endpwent();
+       endpwent ();
        pw_dbm_mode = O_RDWR;
 #ifdef SHADOWPWD
        sp_dbm_mode = O_RDWR;
 #endif
 #endif
 
-       pw = getpwnam(name);
+       pw = getpwnam (name);
        if (!pw) {
-               fprintf(stderr, _("%s: Unknown user %s\n"), Prog, name);
-               exit(E_NOPERM);
+               fprintf (stderr, _("%s: Unknown user %s\n"), Prog, name);
+               exit (E_NOPERM);
        }
 
        /*
-        * Now I have a name, let's see if the UID for the name
-        * matches the current real UID.
+        * Now I have a name, let's see if the UID for the name matches the
+        * current real UID.
         */
 
        if (!amroot && pw->pw_uid != getuid ()) {
-               fprintf(stderr, _("You may not change the password for %s.\n"),
-                       name);
-               SYSLOG((LOG_WARN, NOPERM2, name));
-               closelog();
-               exit(E_NOPERM);
+               fprintf (stderr,
+                        _("You may not change the password for %s.\n"),
+                        name);
+               SYSLOG ((LOG_WARN, "can't change pwd for `%s'", name));
+               closelog ();
+               exit (E_NOPERM);
        }
 
        if (Sflg) {
-               print_status(pw);
-               exit(E_SUCCESS);
+               print_status (pw);
+               exit (E_SUCCESS);
        }
-
 #ifndef USE_PAM
 #ifdef SHADOWPWD
        /*
-        * The user name is valid, so let's get the shadow file
-        * entry.
+        * The user name is valid, so let's get the shadow file entry.
         */
 
-       sp = getspnam(name);
+       sp = getspnam (name);
        if (!sp)
-               sp = pwd_to_spwd(pw);
+               sp = pwd_to_spwd (pw);
 
        cp = sp->sp_pwdp;
 #else
@@ -1318,98 +1205,95 @@ main(int argc, char **argv)
 
        if (!anyflag) {
 #ifdef AUTH_METHODS
-               if (strchr(cp, '@')) {
-                       if (pw_auth(cp, name, PW_CHANGE, (char *)0)) {
-                               SYSLOG((LOG_INFO, NOCHGPASSWD, name));
-                               closelog();
-                               exit(E_NOPERM);
-                       } else if (! uses_default_method(cp)) {
+               if (strchr (cp, '@')) {
+                       if (pw_auth (cp, name, PW_CHANGE, (char *) 0)) {
+                               SYSLOG ((LOG_INFO,
+                                        "password for `%s' changed by `%s'",
+                                        name));
+                               closelog ();
+                               exit (E_NOPERM);
+                       } else if (!uses_default_method (cp)) {
                                do_update_age = 1;
                                goto done;
                        }
                } else
 #endif
-                       STRFCPY(crypt_passwd, cp);
+                       STRFCPY (crypt_passwd, cp);
 
                /*
-                * See if the user is permitted to change the password.
+                * See if the user is permitted to change the password. 
                 * Otherwise, go ahead and set a new password.
                 */
 
 #ifdef SHADOWPWD
-               check_password(pw, sp);
+               check_password (pw, sp);
 #else
-               check_password(pw);
+               check_password (pw);
 #endif
 
 #ifdef HAVE_TCFS
-               tcfspword = (struct tcfspwd *)calloc(1, sizeof (struct tcfspwd));
+               tcfspword =
+                   (struct tcfspwd *) calloc (1, sizeof (struct tcfspwd));
 #endif
                /*
                 * 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);
+                       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 = 1;
                do_update_age = 1;
        }
-
 #ifdef AUTH_METHODS
-done:
+      done:
 #endif
-#endif /* !USE_PAM */
+#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.
+        * 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();
+       pwd_init ();
 
        /*
         * Don't set the real UID for PAM...
         */
 #ifdef USE_PAM
        if (!anyflag) {
-               do_pam_passwd(name, qflg, kflg);
-               exit(E_SUCCESS);
+               do_pam_passwd (name, qflg, kflg);
+               exit (E_SUCCESS);
        }
-#endif /* USE_PAM */
-       if (setuid(0)) {
-               fprintf(stderr, _("Cannot change ID to root.\n"));
-               SYSLOG((LOG_ERR, NOTROOT2));
-               closelog();
-               exit(E_NOPERM);
+#endif                         /* SHADOWPWD */
+       if (setuid (0)) {
+               fprintf (stderr, _("Cannot change ID to root.\n"));
+               SYSLOG ((LOG_ERR, "can't setuid(0)"));
+               closelog ();
+               exit (E_NOPERM);
        }
-#ifdef  HAVE_USERSEC_H
-       update_userpw(pw->pw_passwd);
-#else  /* !HAVE_USERSEC_H */
-
 #ifdef SHADOWPWD
-       if (spw_file_present())
-               update_shadow();
+       if (spw_file_present ())
+               update_shadow ();
        else
 #endif
-               update_noshadow();
+               update_noshadow ();
 
 #ifdef HAVE_TCFS
-       if (tcfs_locate(name) && tcfs_file_present())
-               update_tcfs();
+       if (tcfs_locate (name) && tcfs_file_present ())
+               update_tcfs ();
 #endif
-#endif /* !HAVE_USERSEC_H */
-       SYSLOG((LOG_INFO, CHGPASSWD, name, myname));
-       closelog();
+       SYSLOG ((LOG_INFO, "password for `%s' changed by `%s'", name,
+                myname));
+       closelog ();
        if (!qflg)
-               printf(_("Password changed.\n"));
-       exit(E_SUCCESS);
-       /*NOTREACHED*/
-}
+               printf (_("Password changed.\n"));
+       exit (E_SUCCESS);
+ /*NOTREACHED*/}
index 18edad4d2e642a3ba88d56a1569667d05c80af76..4800ca6ed2727722fe6da8fefe1cca149ccbc78e 100644 (file)
@@ -17,7 +17,7 @@
  * 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
+ * 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)
 #include <config.h>
 
 #include "rcsid.h"
-RCSID(PKG_VER "$Id: pwck.c,v 1.16 2001/08/14 21:10:58 malekith Exp $")
-
+RCSID (PKG_VER "$Id: pwck.c,v 1.22 2002/01/05 15:41:44 kloczek Exp $")
 #include <stdio.h>
 #include <fcntl.h>
 #include <grp.h>
-
 #include "prototypes.h"
 #include "defines.h"
 #include "chkname.h"
 #include <pwd.h>
-
 #include "commonio.h"
-
 #include "pwio.h"
-extern void __pw_del_entry(const struct commonio_entry *);
-extern struct commonio_entry *__pw_get_head(void);
+extern void __pw_del_entry (const struct commonio_entry *);
+extern struct commonio_entry *__pw_get_head (void);
 
 #ifdef SHADOWPWD
 #include "shadowio.h"
-extern void __spw_del_entry(const struct commonio_entry *);
-extern struct commonio_entry *__spw_get_head(void);
+extern void __spw_del_entry (const struct commonio_entry *);
+extern struct commonio_entry *__spw_get_head (void);
 #endif
 
 /*
@@ -64,50 +60,43 @@ extern struct commonio_entry *__spw_get_head(void);
 #define        E_CANTLOCK      4
 #define        E_CANTUPDATE    5
 
-/*
- * Global variables
- */
-
-extern int     optind;
-extern char    *optarg;
-
 /*
  * Local variables
  */
 
 static char *Prog;
 static const char *pwd_file = PASSWD_FILE;
+
 #ifdef SHADOWPWD
 static const char *spw_file = SHADOW_FILE;
 #endif
 static int read_only = 0;
-static int quiet = 0;  /* don't report warnings, only errors */
+static int quiet = 0;          /* don't report warnings, only errors */
 
 /* local function prototypes */
-static void usage(void);
-static int yes_or_no(void);
+static void usage (void);
+static int yes_or_no (void);
 
 /*
  * usage - print syntax message and exit
  */
 
-static void
-usage(void)
+static void usage (void)
 {
 #ifdef SHADOWPWD
-       fprintf(stderr, _("Usage: %s [ -sqr ] [ passwd [ shadow ] ]\n"), Prog);
+       fprintf (stderr, _("Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"),
+                Prog);
 #else
-       fprintf(stderr, _("Usage: %s [ -sqr ] [ passwd ]\n"), Prog);
+       fprintf (stderr, _("Usage: %s [-q] [-r] [-s] [passwd]\n"), Prog);
 #endif
-       exit(E_USAGE);
+       exit (E_USAGE);
 }
 
 /*
  * yes_or_no - get answer to question from the user
  */
 
-static int
-yes_or_no(void)
+static int yes_or_no (void)
 {
        char buf[80];
 
@@ -116,7 +105,7 @@ yes_or_no(void)
         */
 
        if (read_only) {
-               puts(_("No"));
+               puts (_("No"));
                return 0;
        }
 
@@ -124,7 +113,7 @@ yes_or_no(void)
         * Get a line and see what the first character is.
         */
 
-       if (fgets(buf, sizeof buf, stdin))
+       if (fgets (buf, sizeof buf, stdin))
                return buf[0] == 'y' || buf[0] == 'Y';
 
        return 0;
@@ -134,40 +123,40 @@ yes_or_no(void)
  * pwck - verify password file integrity
  */
 
-int
-main(int argc, char **argv)
+int main (int argc, char **argv)
 {
-       int     arg;
-       int     errors = 0;
-       int     deleted = 0;
-       struct  commonio_entry  *pfe, *tpfe;
-       struct  passwd  *pwd;
-       int     sort_mode = 0;
+       int arg;
+       int errors = 0;
+       int deleted = 0;
+       struct commonio_entry *pfe, *tpfe;
+       struct passwd *pwd;
+       int sort_mode = 0;
+
 #ifdef SHADOWPWD
-       struct  commonio_entry  *spe, *tspe;
-       struct  spwd    *spw;
-       int     is_shadow = 0;
+       struct commonio_entry *spe, *tspe;
+       struct spwd *spw;
+       int is_shadow = 0;
 #endif
 
        /*
         * Get my name so that I can use it to report errors.
         */
 
-       Prog = Basename(argv[0]);
+       Prog = Basename (argv[0]);
 
-       setlocale(LC_ALL, "");
-       bindtextdomain(PACKAGE, LOCALEDIR);
-       textdomain(PACKAGE);
+       setlocale (LC_ALL, "");
+       bindtextdomain (PACKAGE, LOCALEDIR);
+       textdomain (PACKAGE);
 
-       OPENLOG(Prog);
+       OPENLOG (Prog);
 
        /*
         * Parse the command line arguments
         */
 
-       while ((arg = getopt(argc, argv, "eqrs")) != EOF) {
+       while ((arg = getopt (argc, argv, "eqrs")) != EOF) {
                switch (arg) {
-               case 'e': /* added for Debian shadow-961025-2 compatibility */
+               case 'e':       /* added for Debian shadow-961025-2 compatibility */
                case 'q':
                        quiet = 1;
                        break;
@@ -178,16 +167,16 @@ main(int argc, char **argv)
                        sort_mode = 1;
                        break;
                default:
-                       usage();
+                       usage ();
                }
        }
 
        if (sort_mode && read_only) {
-               fprintf(stderr, _("%s: -s and -r are incompatibile\n"),
-                       Prog);
-               exit(E_USAGE);
+               fprintf (stderr, _("%s: -s and -r are incompatibile\n"),
+                        Prog);
+               exit (E_USAGE);
        }
-       
+
        /*
         * Make certain we have the right number of arguments
         */
@@ -197,24 +186,24 @@ main(int argc, char **argv)
 #else
        if (optind != argc && optind + 1 != argc)
 #endif
-               usage();
+               usage ();
 
        /*
-        * If there are two left over filenames, use those as the
-        * password and shadow password filenames.
+        * If there are two left over filenames, use those as the password
+        * and shadow password filenames.
         */
 
        if (optind != argc) {
                pwd_file = argv[optind];
-               pw_name(pwd_file);
+               pw_name (pwd_file);
        }
 #ifdef SHADOWPWD
        if (optind + 2 == argc) {
                spw_file = argv[optind + 1];
-               spw_name(spw_file);
+               spw_name (spw_file);
                is_shadow = 1;
        } else if (optind == argc)
-               is_shadow = spw_file_present();
+               is_shadow = spw_file_present ();
 #endif
 
        /*
@@ -222,109 +211,111 @@ main(int argc, char **argv)
         */
 
        if (!read_only) {
-               if (!pw_lock()) {
-                       fprintf(stderr, _("%s: cannot lock file %s\n"),
-                               Prog, pwd_file);
+               if (!pw_lock ()) {
+                       fprintf (stderr, _("%s: cannot lock file %s\n"),
+                                Prog, pwd_file);
                        if (optind == argc)
-                               SYSLOG((LOG_WARN,"cannot lock %s\n",pwd_file));
-                       closelog();
-                       exit(E_CANTLOCK);
+                               SYSLOG ((LOG_WARN, "cannot lock %s",
+                                        pwd_file));
+                       closelog ();
+                       exit (E_CANTLOCK);
                }
 #ifdef SHADOWPWD
-               if (is_shadow && !spw_lock()) {
-                       fprintf(stderr, _("%s: cannot lock file %s\n"),
-                               Prog, spw_file);
+               if (is_shadow && !spw_lock ()) {
+                       fprintf (stderr, _("%s: cannot lock file %s\n"),
+                                Prog, spw_file);
                        if (optind == argc)
-                               SYSLOG((LOG_WARN,"cannot lock %s\n",spw_file));
-                       closelog();
-                       exit(E_CANTLOCK);
+                               SYSLOG ((LOG_WARN, "cannot lock %s",
+                                        spw_file));
+                       closelog ();
+                       exit (E_CANTLOCK);
                }
 #endif
        }
 
        /*
-        * Open the files.  Use O_RDONLY if we are in read_only mode,
-        * O_RDWR otherwise.
+        * 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)) {
-               fprintf(stderr, _("%s: cannot open file %s\n"),
-                       Prog, pwd_file);
+       if (!pw_open (read_only ? O_RDONLY : O_RDWR)) {
+               fprintf (stderr, _("%s: cannot open file %s\n"),
+                        Prog, pwd_file);
                if (optind == argc)
-                       SYSLOG((LOG_WARN, "cannot open %s\n", pwd_file));
-               closelog();
-               exit(E_CANTOPEN);
+                       SYSLOG ((LOG_WARN, "cannot open %s", pwd_file));
+               closelog ();
+               exit (E_CANTOPEN);
        }
 #ifdef SHADOWPWD
-       if (is_shadow && !spw_open(read_only ? O_RDONLY : O_RDWR)) {
-               fprintf(stderr, _("%s: cannot open file %s\n"),
-                       Prog, spw_file);
+       if (is_shadow && !spw_open (read_only ? O_RDONLY : O_RDWR)) {
+               fprintf (stderr, _("%s: cannot open file %s\n"),
+                        Prog, spw_file);
                if (optind == argc)
-                       SYSLOG((LOG_WARN, "cannot open %s\n", spw_file));
-               closelog();
-               exit(E_CANTOPEN);
+                       SYSLOG ((LOG_WARN, "cannot open %s", spw_file));
+               closelog ();
+               exit (E_CANTOPEN);
        }
 #endif
 
        if (sort_mode) {
-               pw_sort();
+               pw_sort ();
 #ifdef SHADOWPWD
                if (is_shadow)
-                       spw_sort();
+                       spw_sort ();
 #endif
                goto write_and_bye;
        }
-       
+
        /*
         * Loop through the entire password file.
         */
 
-       for (pfe = __pw_get_head(); pfe; pfe = pfe->next) {
+       for (pfe = __pw_get_head (); 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 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.
+                * Start with the entries that are completely corrupt.  They
+                * have no (struct passwd) entry because they couldn't be
+                * parsed properly.
                 */
 
                if (!pfe->eptr) {
 
                        /*
-                        * Tell the user this entire line is bogus and
-                        * ask them to delete it.
+                        * Tell the user this entire line is bogus and ask
+                        * them to delete it.
                         */
 
-                       printf(_("invalid password file entry\n"));
-                       printf(_("delete line `%s'? "), pfe->line);
+                       printf (_("invalid password file entry\n"));
+                       printf (_("delete line `%s'? "), pfe->line);
                        errors++;
 
                        /*
                         * prompt the user to delete the entry or not
                         */
 
-                       if (!yes_or_no())
+                       if (!yes_or_no ())
                                continue;
 
                        /*
-                        * All password file deletions wind up here.  This
+                        * 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.
+                        * 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'\n",
-                               pfe->line));
+                     delete_pw:
+                       SYSLOG ((LOG_INFO, "delete passwd line `%s'",
+                                pfe->line));
                        deleted++;
 
-                       __pw_del_entry(pfe);
+                       __pw_del_entry (pfe);
                        continue;
                }
 
@@ -338,7 +329,7 @@ delete_pw:
                 * Make sure this entry has a unique name.
                 */
 
-               for (tpfe = __pw_get_head(); tpfe; tpfe = tpfe->next) {
+               for (tpfe = __pw_get_head (); tpfe; tpfe = tpfe->next) {
                        const struct passwd *ent = tpfe->eptr;
 
                        /*
@@ -355,7 +346,7 @@ delete_pw:
                        if (!ent)
                                continue;
 
-                       if (strcmp(pwd->pw_name, ent->pw_name) != 0)
+                       if (strcmp (pwd->pw_name, ent->pw_name) != 0)
                                continue;
 
                        /*
@@ -363,34 +354,24 @@ delete_pw:
                         * another and ask them to delete it.
                         */
 
-                       puts(_("duplicate password entry\n"));
-                       printf(_("delete line `%s'? "), pfe->line);
+                       puts (_("duplicate password entry\n"));
+                       printf (_("delete line `%s'? "), pfe->line);
                        errors++;
 
                        /*
                         * prompt the user to delete the entry or not
                         */
 
-                       if (yes_or_no())
+                       if (yes_or_no ())
                                goto delete_pw;
                }
 
                /*
                 * Check for invalid usernames.  --marekm
                 */
-               if (!check_user_name(pwd->pw_name)) {
-                       printf(_("invalid user name `%s'\n"), pwd->pw_name);
-                       errors++;
-               }
-
-               /*
-                * Check for a Slackware bug.  Make sure UID is not -1
-                * (it has special meaning for some syscalls).  --marekm
-                */
-
-               if (pwd->pw_uid == (uid_t) -1) {
-                       printf(_("user %s: bad UID (%d)\n"),
-                               pwd->pw_name, (int) pwd->pw_uid);
+               if (!check_user_name (pwd->pw_name)) {
+                       printf (_("invalid user name `%s'\n"),
+                               pwd->pw_name);
                        errors++;
                }
 
@@ -398,14 +379,14 @@ delete_pw:
                 * Make sure the primary group exists
                 */
 
-               if (!quiet && !getgrgid(pwd->pw_gid)) {
+               if (!quiet && !getgrgid (pwd->pw_gid)) {
 
                        /*
                         * No primary group, just give a warning
                         */
 
-                       printf(_("user %s: no group %d\n"),
-                               pwd->pw_name, (int) pwd->pw_gid);
+                       printf (_("user %s: no group %u\n"),
+                               pwd->pw_name, pwd->pw_gid);
                        errors++;
                }
 
@@ -413,13 +394,14 @@ delete_pw:
                 * Make sure the home directory exists
                 */
 
-               if (!quiet && access(pwd->pw_dir, F_OK)) {
+               if (!quiet && access (pwd->pw_dir, F_OK)) {
 
                        /*
                         * Home directory doesn't exist, give a warning
                         */
 
-                       printf(_("user %s: directory %s does not exist\n"),
+                       printf (_
+                               ("user %s: directory %s does not exist\n"),
                                pwd->pw_name, pwd->pw_dir);
                        errors++;
                }
@@ -428,13 +410,14 @@ delete_pw:
                 * Make sure the login shell is executable
                 */
 
-               if (!quiet && pwd->pw_shell[0] && access(pwd->pw_shell, F_OK)) {
+               if (!quiet && pwd->pw_shell[0]
+                   && access (pwd->pw_shell, F_OK)) {
 
                        /*
                         * Login shell doesn't exist, give a warning
                         */
-                       
-                       printf(_("user %s: program %s does not exist\n"),
+
+                       printf (_("user %s: program %s does not exist\n"),
                                pwd->pw_name, pwd->pw_shell);
                        errors++;
                }
@@ -448,52 +431,52 @@ delete_pw:
         * Loop through the entire shadow password file.
         */
 
-       for (spe = __spw_get_head(); spe; spe = spe->next) {
+       for (spe = __spw_get_head (); spe; spe = spe->next) {
                /*
-                * If this is a NIS line, skip it.  You can't "know" what
-                * NIS is going to do without directly asking NIS ...
+                * 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.
+                * Start with the entries that are completely corrupt. They
+                * have no (struct spwd) entry because they couldn't be
+                * parsed properly.
                 */
 
                if (!spe->eptr) {
 
                        /*
-                        * Tell the user this entire line is bogus and
-                        * ask them to delete it.
+                        * Tell the user this entire line is bogus and ask
+                        * them to delete it.
                         */
 
-                       printf(_("invalid shadow password file entry\n"));
-                       printf(_("delete line `%s'? "), spe->line);
+                       printf (_("invalid shadow password file entry\n"));
+                       printf (_("delete line `%s'? "), spe->line);
                        errors++;
 
                        /*
                         * prompt the user to delete the entry or not
                         */
 
-                       if (!yes_or_no())
+                       if (!yes_or_no ())
                                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.
+                        * 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'\n",
-                               spe->line));
+                     delete_spw:
+                       SYSLOG ((LOG_INFO, "delete shadow line `%s'",
+                                spe->line));
                        deleted++;
 
-                       __spw_del_entry(spe);
+                       __spw_del_entry (spe);
                        continue;
                }
 
@@ -507,7 +490,7 @@ delete_spw:
                 * Make sure this entry has a unique name.
                 */
 
-               for (tspe = __spw_get_head(); tspe; tspe = tspe->next) {
+               for (tspe = __spw_get_head (); tspe; tspe = tspe->next) {
                        const struct spwd *ent = tspe->eptr;
 
                        /*
@@ -524,7 +507,7 @@ delete_spw:
                        if (!ent)
                                continue;
 
-                       if (strcmp(spw->sp_namp, ent->sp_namp) != 0)
+                       if (strcmp (spw->sp_namp, ent->sp_namp) != 0)
                                continue;
 
                        /*
@@ -532,15 +515,15 @@ delete_spw:
                         * another and ask them to delete it.
                         */
 
-                       puts(_("duplicate shadow password entry\n"));
-                       printf(_("delete line `%s'? "), spe->line);
+                       puts (_("duplicate shadow password entry\n"));
+                       printf (_("delete line `%s'? "), spe->line);
                        errors++;
 
                        /*
                         * prompt the user to delete the entry or not
                         */
 
-                       if (yes_or_no())
+                       if (yes_or_no ())
                                goto delete_spw;
                }
 
@@ -549,22 +532,22 @@ delete_spw:
                 * file.
                 */
 
-               if (!pw_locate(spw->sp_namp)) {
+               if (!pw_locate (spw->sp_namp)) {
 
                        /*
                         * Tell the user this entry has no matching
                         * /etc/passwd entry and ask them to delete it.
                         */
 
-                       puts(_("no matching password file entry\n"));
-                       printf(_("delete line `%s'? "), spe->line);
+                       puts (_("no matching password file entry\n"));
+                       printf (_("delete line `%s'? "), spe->line);
                        errors++;
 
                        /*
                         * prompt the user to delete the entry or not
                         */
 
-                       if (yes_or_no())
+                       if (yes_or_no ())
                                goto delete_spw;
                }
 
@@ -572,36 +555,38 @@ delete_spw:
                 * Warn if last password change in the future.  --marekm
                 */
 
-               if (!quiet && spw->sp_lstchg > time((time_t *)0) / SCALE) {
-                       printf(_("user %s: last password change in the future\n"), spw->sp_namp);
+               if (!quiet && spw->sp_lstchg > time ((time_t *) 0) / SCALE) {
+                       printf (_
+                               ("user %s: last password change in the future\n"),
+                               spw->sp_namp);
                        errors++;
                }
        }
 
-shadow_done:
+      shadow_done:
 #endif
 
        /*
-        * All done.  If there were no deletions we can just abandon any
+        * All done. If there were no deletions we can just abandon any
         * changes to the files.
         */
 
        if (deleted) {
-write_and_bye:
-               if (!pw_close()) {
-                       fprintf(stderr, _("%s: cannot update file %s\n"),
-                               Prog, pwd_file);
-                       SYSLOG((LOG_WARN, "cannot update %s\n", pwd_file));
-                       closelog();
-                       exit(E_CANTUPDATE);
+             write_and_bye:
+               if (!pw_close ()) {
+                       fprintf (stderr, _("%s: cannot update file %s\n"),
+                                Prog, pwd_file);
+                       SYSLOG ((LOG_WARN, "cannot update %s", pwd_file));
+                       closelog ();
+                       exit (E_CANTUPDATE);
                }
 #ifdef SHADOWPWD
-               if (is_shadow && !spw_close()) {
-                       fprintf(stderr, _("%s: cannot update file %s\n"),
-                               Prog, spw_file);
-                       SYSLOG((LOG_WARN, "cannot update %s\n", spw_file));
-                       closelog();
-                       exit(E_CANTUPDATE);
+               if (is_shadow && !spw_close ()) {
+                       fprintf (stderr, _("%s: cannot update file %s\n"),
+                                Prog, spw_file);
+                       SYSLOG ((LOG_WARN, "cannot update %s", spw_file));
+                       closelog ();
+                       exit (E_CANTUPDATE);
                }
 #endif
        }
@@ -612,9 +597,9 @@ write_and_bye:
 
 #ifdef SHADOWPWD
        if (is_shadow)
-               spw_unlock();
+               spw_unlock ();
 #endif
-       (void) pw_unlock();
+       (void) pw_unlock ();
 
        /*
         * Tell the user what we did and exit.
@@ -622,15 +607,16 @@ write_and_bye:
 
        if (errors)
 #ifdef NDBM
-               printf(deleted ?
-                       _("%s: the files have been updated; run mkpasswd\n") :
-                       _("%s: no changes\n"), Prog);
+               printf (deleted ?
+                       _
+                       ("%s: the files have been updated; run mkpasswd\n")
+                       : _("%s: no changes\n"), Prog);
 #else
-               printf(deleted ?
+               printf (deleted ?
                        _("%s: the files have been updated\n") :
                        _("%s: no changes\n"), Prog);
 #endif
 
-       closelog();
-       exit(errors ? E_BADENTRY : E_OKAY);
+       closelog ();
+       exit (errors ? E_BADENTRY : E_OKAY);
 }
index 3a32370b2b4f7c960f9f9f9623840d207866e4e7..a7e6d468d21ca6d016a2252d1ff0eb91c9d636d5 100644 (file)
@@ -2,37 +2,34 @@
  * 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
+ * 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.
+ * 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.
+ * 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...
+ * Doesn't currently support pw_age information in /etc/passwd, and doesn't
+ * support DBM files. Add it if you need it...
  *
  * Copyright (C) 1996-1997, Marek Michalkiewicz
  * <marekm@i17linuxb.ists.pwr.wroc.pl>
- * This program may be freely used and distributed for any purposes.
- * If you improve it, please send me your changes.  Thanks!
+ * This program may be freely used and distributed for any purposes.  If you
+ * improve it, please send me your changes. Thanks!
  */
 
 #include <config.h>
 
 #include "rcsid.h"
-RCSID(PKG_VER "$Id: pwconv.c,v 1.11 2000/08/26 18:27:18 marekm Exp $")
-
+RCSID (PKG_VER "$Id: pwconv.c,v 1.12 2002/01/05 15:41:44 kloczek Exp $")
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -40,18 +37,15 @@ RCSID(PKG_VER "$Id: pwconv.c,v 1.11 2000/08/26 18:27:18 marekm Exp $")
 #include <time.h>
 #include <unistd.h>
 #include <errno.h>
-
 #include <pwd.h>
 #include "prototypes.h"
 #include "defines.h"
 #include "pwio.h"
 #include "shadowio.h"
 #include "getdef.h"
-
 /*
  * exit status values
  */
-
 #define E_SUCCESS      0       /* success */
 #define E_NOPERM       1       /* permission denied */
 #define E_USAGE                2       /* bad command syntax */
@@ -59,26 +53,22 @@ RCSID(PKG_VER "$Id: pwconv.c,v 1.11 2000/08/26 18:27:18 marekm Exp $")
 #define E_MISSING      4       /* unexpected failure, passwd file missing */
 #define E_PWDBUSY      5       /* passwd file(s) busy */
 #define E_BADENTRY     6       /* bad shadow entry */
-
 static int
-       shadow_locked = 0,
-       passwd_locked = 0;
+ shadow_locked = 0, passwd_locked = 0;
 
 /* local function prototypes */
-static void fail_exit(int);
+static void fail_exit (int);
 
-static void
-fail_exit(int status)
+static void fail_exit (int status)
 {
        if (shadow_locked)
-               spw_unlock();
+               spw_unlock ();
        if (passwd_locked)
-               pw_unlock();
-       exit(status);
+               pw_unlock ();
+       exit (status);
 }
 
-int
-main(int argc, char **argv)
+int main (int argc, char **argv)
 {
        const struct passwd *pw;
        struct passwd pwent;
@@ -86,102 +76,108 @@ main(int argc, char **argv)
        struct spwd spent;
        char *Prog = argv[0];
 
-       setlocale(LC_ALL, "");
-       bindtextdomain(PACKAGE, LOCALEDIR);
-       textdomain(PACKAGE);
+       setlocale (LC_ALL, "");
+       bindtextdomain (PACKAGE, LOCALEDIR);
+       textdomain (PACKAGE);
 
-       if (!pw_lock()) {
-               fprintf(stderr, _("%s: can't lock passwd file\n"), Prog);
-               fail_exit(E_PWDBUSY);
+       if (!pw_lock ()) {
+               fprintf (stderr, _("%s: can't lock passwd file\n"), Prog);
+               fail_exit (E_PWDBUSY);
        }
        passwd_locked++;
-       if (!pw_open(O_RDWR)) {
-               fprintf(stderr, _("%s: can't open passwd file\n"), Prog);
-               fail_exit(E_MISSING);
+       if (!pw_open (O_RDWR)) {
+               fprintf (stderr, _("%s: can't open passwd file\n"), Prog);
+               fail_exit (E_MISSING);
        }
 
-       if (!spw_lock()) {
-               fprintf(stderr, _("%s: can't lock shadow file\n"), Prog);
-               fail_exit(E_PWDBUSY);
+       if (!spw_lock ()) {
+               fprintf (stderr, _("%s: can't lock shadow file\n"), Prog);
+               fail_exit (E_PWDBUSY);
        }
        shadow_locked++;
-       if (!spw_open(O_CREAT | O_RDWR)) {
-               fprintf(stderr, _("%s: can't open shadow file\n"), Prog);
-               fail_exit(E_FAILURE);
+       if (!spw_open (O_CREAT | O_RDWR)) {
+               fprintf (stderr, _("%s: can't open shadow file\n"), Prog);
+               fail_exit (E_FAILURE);
        }
 
        /*
         * Remove /etc/shadow entries for users not in /etc/passwd.
         */
-       spw_rewind();
-       while ((sp = spw_next())) {
-               if (pw_locate(sp->sp_namp))
+       spw_rewind ();
+       while ((sp = spw_next ())) {
+               if (pw_locate (sp->sp_namp))
                        continue;
 
-               if (!spw_remove(sp->sp_namp)) {
+               if (!spw_remove (sp->sp_namp)) {
                        /*
                         * This shouldn't happen (the entry exists) but...
                         */
-                       fprintf(stderr,
-                               _("%s: can't remove shadow entry for %s\n"),
-                               Prog, sp->sp_namp);
-                       fail_exit(E_FAILURE);
+                       fprintf (stderr,
+                                _
+                                ("%s: can't remove shadow entry for %s\n"),
+                                Prog, sp->sp_namp);
+                       fail_exit (E_FAILURE);
                }
        }
 
        /*
-        * Update shadow entries which don't have "x" as pw_passwd.
-        * Add any missing shadow entries.
+        * Update shadow entries which don't have "x" as pw_passwd. Add any
+        * missing shadow entries.
         */
-       pw_rewind();
-       while ((pw = pw_next())) {
-               sp = spw_locate(pw->pw_name);
+       pw_rewind ();
+       while ((pw = pw_next ())) {
+               sp = spw_locate (pw->pw_name);
                if (sp) {
                        /* do we need to update this entry? */
-                       if (strcmp(pw->pw_passwd, SHADOW_PASSWD_STRING) == 0)
+                       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);
+                       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_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 = -1;
                }
                spent.sp_pwdp = pw->pw_passwd;
-               spent.sp_lstchg = time((time_t *) 0) / (24L*3600L);
-               if (!spw_update(&spent)) {
-                       fprintf(stderr,
-                               _("%s: can't update shadow entry for %s\n"),
-                               Prog, spent.sp_namp);
-                       fail_exit(E_FAILURE);
+               spent.sp_lstchg = time ((time_t *) 0) / (24L * 3600L);
+               if (!spw_update (&spent)) {
+                       fprintf (stderr,
+                                _
+                                ("%s: can't update shadow entry for %s\n"),
+                                Prog, 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)) {
-                       fprintf(stderr,
-                               _("%s: can't update passwd entry for %s\n"),
-                               Prog, pwent.pw_name);
-                       fail_exit(E_FAILURE);
+               pwent.pw_passwd = SHADOW_PASSWD_STRING; /* XXX warning: const */
+               if (!pw_update (&pwent)) {
+                       fprintf (stderr,
+                                _
+                                ("%s: can't update passwd entry for %s\n"),
+                                Prog, pwent.pw_name);
+                       fail_exit (E_FAILURE);
                }
        }
 
-       if (!spw_close()) {
-               fprintf(stderr, _("%s: can't update shadow file\n"), Prog);
-               fail_exit(E_FAILURE);
+       if (!spw_close ()) {
+               fprintf (stderr, _("%s: can't update shadow file\n"),
+                        Prog);
+               fail_exit (E_FAILURE);
        }
-       if (!pw_close()) {
-               fprintf(stderr, _("%s: can't update passwd file\n"), Prog);
-               fail_exit(E_FAILURE);
+       if (!pw_close ()) {
+               fprintf (stderr, _("%s: can't update passwd file\n"),
+                        Prog);
+               fail_exit (E_FAILURE);
        }
-       chmod(PASSWD_FILE "-", 0600);  /* /etc/passwd- (backup file) */
-       spw_unlock();
-       pw_unlock();
-       exit(E_SUCCESS);
+       chmod (PASSWD_FILE "-", 0600);  /* /etc/passwd- (backup file) */
+       spw_unlock ();
+       pw_unlock ();
+       exit (E_SUCCESS);
 }
index 64b7f8cb77311f2e1afc4905c073cbed3d9b6909..2e408afafdd0d698c9f2d6b7e05a5bd178501c6c 100644 (file)
@@ -17,7 +17,7 @@
  * 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
+ * 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)
@@ -30,8 +30,7 @@
 #include <config.h>
 
 #include "rcsid.h"
-RCSID(PKG_VER "$Id: pwunconv.c,v 1.10 2001/01/25 10:36:07 kloczek Exp $")
-
+RCSID (PKG_VER "$Id: pwunconv.c,v 1.11 2002/01/05 15:41:44 kloczek Exp $")
 #include "defines.h"
 #include <sys/types.h>
 #include <stdio.h>
@@ -41,49 +40,44 @@ RCSID(PKG_VER "$Id: pwunconv.c,v 1.10 2001/01/25 10:36:07 kloczek Exp $")
 #include "prototypes.h"
 #include "pwio.h"
 #include "shadowio.h"
-
 #ifndef        SHADOWPWD
-int
-main(int argc, char **argv)
+int main (int argc, char **argv)
 {
-       setlocale(LC_ALL, "");
-       bindtextdomain(PACKAGE, LOCALEDIR);
-       textdomain(PACKAGE);
+       setlocale (LC_ALL, "");
+       bindtextdomain (PACKAGE, LOCALEDIR);
+       textdomain (PACKAGE);
 
-       fprintf(stderr, _("%s: Shadow passwords are not configured.\n"),
-               argv[0]);
-       exit(1);
+       fprintf (stderr, _("%s: Shadow passwords are not configured.\n"),
+                argv[0]);
+       exit (1);
 }
 
-#else  /*{*/
-
-char   *l64a ();
+#else                          /*{ */
+char *l64a ();
 
-static int shadow_locked = 0,
-       passwd_locked = 0;
+static int shadow_locked = 0, passwd_locked = 0;
 
 /* local function prototypes */
-static void fail_exit(int);
+static void fail_exit (int);
 
-static void
-fail_exit(int status)
+static void fail_exit (int status)
 {
        if (shadow_locked)
-               spw_unlock();
+               spw_unlock ();
        if (passwd_locked)
-               pw_unlock();
-       exit(status);
+               pw_unlock ();
+       exit (status);
 }
 
 
-int
-main(int argc, char **argv)
+int main (int argc, char **argv)
 {
        const struct passwd *pw;
        struct passwd pwent;
        const struct spwd *spwd;
+
 #ifdef ATT_AGE
-       char    newage[5];
+       char newage[5];
 #endif
        char *Prog = argv[0];
 
@@ -91,33 +85,33 @@ main(int argc, char **argv)
        bindtextdomain (PACKAGE, LOCALEDIR);
        textdomain (PACKAGE);
 
-       if (!spw_file_present())
+       if (!spw_file_present ())
                /* shadow not installed, do nothing */
-               exit(0);
+               exit (0);
 
-       if (!pw_lock()) {
-               fprintf(stderr, _("%s: can't lock passwd file\n"), Prog);
-               fail_exit(5);
+       if (!pw_lock ()) {
+               fprintf (stderr, _("%s: can't lock passwd file\n"), Prog);
+               fail_exit (5);
        }
        passwd_locked++;
-       if (!pw_open(O_RDWR)) {
-               fprintf(stderr, _("%s: can't open passwd file\n"), Prog);
-               fail_exit(1);
+       if (!pw_open (O_RDWR)) {
+               fprintf (stderr, _("%s: can't open passwd file\n"), Prog);
+               fail_exit (1);
        }
 
-       if (!spw_lock()) {
-               fprintf(stderr, _("%s: can't open shadow file\n"), Prog);
-               fail_exit(5);
+       if (!spw_lock ()) {
+               fprintf (stderr, _("%s: can't open shadow file\n"), Prog);
+               fail_exit (5);
        }
        shadow_locked++;
-       if (!spw_open(O_RDWR)) {
-               fprintf(stderr, _("%s: can't open shadow file\n"), Prog);
-               fail_exit(1);
+       if (!spw_open (O_RDWR)) {
+               fprintf (stderr, _("%s: can't open shadow file\n"), Prog);
+               fail_exit (1);
        }
 
-       pw_rewind();
-       while ((pw = pw_next())) {
-               if (!(spwd = spw_locate(pw->pw_name)))
+       pw_rewind ();
+       while ((pw = pw_next ())) {
+               if (!(spwd = spw_locate (pw->pw_name)))
                        continue;
 
                pwent = *pw;
@@ -125,63 +119,72 @@ main(int argc, char **argv)
                /*
                 * Update password if non-shadow is "x".
                 */
-               if (strcmp(pw->pw_passwd, SHADOW_PASSWD_STRING) == 0)
+               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.
+                * 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.
                 */
 
 #ifdef ATT_AGE
-               if (spwd->sp_max > (63*WEEK/SCALE) && spwd->sp_max < 10000)
-                       spwd->sp_max = (63*WEEK/SCALE); /* 10000 is infinity */
+               if (spwd->sp_max > (63 * WEEK / SCALE)
+                   && spwd->sp_max < 10000)
+                       spwd->sp_max = (63 * WEEK / SCALE);     /* 10000 is infinity */
 
-               if (spwd->sp_min >= 0 && spwd->sp_min <= 63*7 &&
-                               spwd->sp_max >= 0 && spwd->sp_max <= 63*7) {
+               if (spwd->sp_min >= 0 && spwd->sp_min <= 63 * 7 &&
+                   spwd->sp_max >= 0 && spwd->sp_max <= 63 * 7) {
                        if (spwd->sp_lstchg == -1)
                                spwd->sp_lstchg = 0;
 
-                       spwd->sp_max /= WEEK/SCALE;     /* turn it into weeks */
-                       spwd->sp_min /= WEEK/SCALE;
-                       spwd->sp_lstchg /= WEEK/SCALE;
+                       spwd->sp_max /= WEEK / SCALE;   /* turn it into weeks */
+                       spwd->sp_min /= WEEK / SCALE;
+                       spwd->sp_lstchg /= WEEK / SCALE;
 
-                       strncpy (newage, l64a (spwd->sp_lstchg * (64L*64L) +
-                                 spwd->sp_min * (64L) + spwd->sp_max), 5);
+                       strncpy (newage,
+                                l64a (spwd->sp_lstchg * (64L * 64L) +
+                                      spwd->sp_min * (64L) +
+                                      spwd->sp_max), 5);
                        pwent.pw_age = newage;
                } else
                        pwent.pw_age = "";
-#endif /* ATT_AGE */
-               if (!pw_update(&pwent)) {
-                       fprintf(stderr,
-                               _("%s: can't update entry for user %s\n"),
-                               Prog, pwent.pw_name);
-                       fail_exit(3);
+#endif                         /* ATT_AGE */
+               if (!pw_update (&pwent)) {
+                       fprintf (stderr,
+                                _("%s: can't update entry for user %s\n"),
+                                Prog, pwent.pw_name);
+                       fail_exit (3);
                }
        }
 
-       if (!spw_close()) {
-               fprintf(stderr, _("%s: can't update shadow password file\n"), Prog);
-               fail_exit(3);
+       if (!spw_close ()) {
+               fprintf (stderr,
+                        _("%s: can't update shadow password file\n"),
+                        Prog);
+               fail_exit (3);
        }
 
-       if (!pw_close()) {
-               fprintf(stderr, _("%s: can't update password file\n"), Prog);
-               fail_exit(3);
+       if (!pw_close ()) {
+               fprintf (stderr, _("%s: can't update password file\n"),
+                        Prog);
+               fail_exit (3);
        }
 
-       if (unlink(SHADOW) != 0) {
-               fprintf(stderr, _("%s: can't delete shadow password file\n"), Prog);
-               fail_exit(3);
+       if (unlink (SHADOW) != 0) {
+               fprintf (stderr,
+                        _("%s: can't delete shadow password file\n"),
+                        Prog);
+               fail_exit (3);
        }
 
-       spw_unlock();
-       pw_unlock();
+       spw_unlock ();
+       pw_unlock ();
        return 0;
 }
 #endif
index a8d7d00f6dffebb4bf343b5570270f1f69247519..1a7417fa32882311a01db1a56c94e5570676c86a 100644 (file)
--- a/src/su.c
+++ b/src/su.c
@@ -17,7 +17,7 @@
  * 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
+ * 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)
 #include <config.h>
 
 #include "rcsid.h"
-RCSID(PKG_VER "$Id: su.c,v 1.18 2001/06/28 20:47:06 kloczek Exp $")
-
+RCSID (PKG_VER "$Id: su.c,v 1.21 2002/01/05 15:41:44 kloczek Exp $")
 #include <sys/types.h>
 #include <stdio.h>
-
 #ifdef USE_PAM
 #include "pam_defs.h"
-
 static const struct pam_conv conv = {
-        misc_conv,
-        NULL
+       misc_conv,
+       NULL
 };
 
 static pam_handle_t *pamh = NULL;
@@ -69,7 +66,7 @@ static char oldname[BUFSIZ];
 
 static char *Prog;
 
-struct passwd  pwent;
+struct passwd pwent;
 
 /*
  * External identifiers
@@ -84,144 +81,141 @@ extern char **environ;
 
 #ifndef USE_PAM
 
-static RETSIGTYPE die(int);
-static int iswheel(const char *);
+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.
+ *     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 RETSIGTYPE die (int killed)
 {
        static TERMIO sgtty;
 
        if (killed)
-               STTY(0, &sgtty);
+               STTY (0, &sgtty);
        else
-               GTTY(0, &sgtty);
+               GTTY (0, &sgtty);
 
        if (killed) {
-               closelog();
-               exit(killed);
+               closelog ();
+               exit (killed);
        }
 }
 
-static int
-iswheel(const char *username)
+static int iswheel (const char *username)
 {
        struct group *grp;
 
-       grp = getgrgid(0);
+       grp = getgrgid (0);
        if (!grp || !grp->gr_mem)
                return 0;
-       return is_on_list(grp->gr_mem, username);
+       return is_on_list (grp->gr_mem, username);
 }
-#endif /* !USE_PAM */
+#endif                         /* !USE_PAM */
 
 
-static void
-su_failure(const char *tty)
+static void su_failure (const char *tty)
 {
-       sulog(tty, 0, oldname, name);  /* log failed attempt */
+       sulog (tty, 0, oldname, name);  /* log failed attempt */
 #ifdef USE_SYSLOG
-       if (getdef_bool("SYSLOG_SU_ENAB"))
-               SYSLOG((pwent.pw_uid ? LOG_INFO:LOG_NOTICE,
-                       "- %s %s-%s\n", tty,
-                       oldname[0] ? oldname:"???",
-                       name[0] ? name:"???"));
-       closelog();
+       if (getdef_bool ("SYSLOG_SU_ENAB"))
+               SYSLOG ((pwent.pw_uid ? LOG_INFO : LOG_NOTICE,
+                        "- %s %s-%s", tty,
+                        oldname[0] ? oldname : "???",
+                        name[0] ? name : "???"));
+       closelog ();
 #endif
-       puts(_("Sorry."));
-       exit(1);
+       puts (_("Sorry."));
+       exit (1);
 }
 
 
 /*
  * 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" is used by default.
+ *     su changes the user's ids to the values for the specified user.  if
+ *     no new user name is specified, "root" is used by default.
  *
- *     The only valid option is a "-" character, which is interpreted
- *     as requiring a new login session to be simulated.
+ *     The only valid option is a "-" character, which is interpreted as
+ *     requiring a new login session to be simulated.
  *
- *     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.
+ *     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)
+int main (int argc, char **argv)
 {
-       char    *cp;
-       const char *tty = 0;            /* Name of tty SU is run from        */
-       int     doshell = 0;
-       int     fakelogin = 0;
-       int     amroot = 0;
+       char *cp;
+       const char *tty = 0;    /* Name of tty SU is run from        */
+       int doshell = 0;
+       int fakelogin = 0;
+       int amroot = 0;
        uid_t my_uid;
-       struct  passwd  *pw = 0;
-       char    **envp = environ;
+       struct passwd *pw = 0;
+       char **envp = environ;
+
 #ifdef USE_PAM
        int ret;
-#else  /* !USE_PAM */
-       RETSIGTYPE (*oldsig)();
+#else                          /* !USE_PAM */
+       RETSIGTYPE (*oldsig) ();
        int is_console = 0;
+
 #ifdef SHADOWPWD
-       struct  spwd    *spwd = 0;
+       struct spwd *spwd = 0;
 #endif
 #ifdef SU_ACCESS
        char *oldpass;
 #endif
-#endif /* !USE_PAM */
+#endif                         /* !USE_PAM */
 
-       sanitize_env();
+       sanitize_env ();
 
-       setlocale(LC_ALL, "");
-       bindtextdomain(PACKAGE, LOCALEDIR);
-       textdomain(PACKAGE);
+       setlocale (LC_ALL, "");
+       bindtextdomain (PACKAGE, LOCALEDIR);
+       textdomain (PACKAGE);
 
        /*
-        * Get the program name.  The program name is used as a
-        * prefix to most error messages.
+        * Get the program name. The program name is used as a prefix to
+        * most error messages.
         */
 
-       Prog = Basename(argv[0]);
+       Prog = Basename (argv[0]);
 
-       OPENLOG("su");
+       OPENLOG ("su");
 
-       initenv();
+       initenv ();
 
-       my_uid = getuid();
+       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.
+        * Get the tty name. Entries will be logged indicating that the user
+        * tried to change to the named new user from the current terminal.
         */
 
-       if (isatty(0) && (cp = ttyname(0))) {
+       if (isatty (0) && (cp = ttyname (0))) {
                if (strncmp (cp, "/dev/", 5) == 0)
                        tty = cp + 5;
                else
                        tty = cp;
 #ifndef USE_PAM
-               is_console = console(tty);
+               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);
+                       fprintf (stderr,
+                                _("%s: must be run from a terminal\n"),
+                                Prog);
+                       exit (1);
                }
                tty = "???";
        }
@@ -230,65 +224,67 @@ main(int argc, char **argv)
         * Process the command line arguments. 
         */
 
-       argc--; argv++;                 /* shift out command name */
+       argc--;
+       argv++;                 /* shift out command name */
 
-       if (argc > 0 && strcmp(argv[0], "-") == 0) {
+       if (argc > 0 && strcmp (argv[0], "-") == 0) {
                fakelogin = 1;
-               argc--; argv++;         /* shift ... */
+               argc--;
+               argv++;         /* shift ... */
        }
 
        /*
-        * If a new login is being set up, the old environment will
-        * be ignored and a new one created later on.
+        * If a new login is being set up, the old environment will be
+        * ignored and a new one created later on.
         */
 
        if (fakelogin) {
-               if ((cp=getdef_str("ENV_TZ")))
-                       addenv(*cp == '/' ? tz(cp) : cp, NULL);
-       /*
-        * The clock frequency will be reset to the login value if required
-        */
-               if ((cp=getdef_str("ENV_HZ")))
-                       addenv(cp, NULL);  /* set the default $HZ, if one */
-       /*
-        * The terminal type will be left alone if it is present in the
-        * environment already.
-        */
+               if ((cp = getdef_str ("ENV_TZ")))
+                       addenv (*cp == '/' ? tz (cp) : cp, NULL);
+               /*
+                * The clock frequency will be reset to the login value if required
+                */
+               if ((cp = getdef_str ("ENV_HZ")))
+                       addenv (cp, NULL);      /* set the default $HZ, if one */
+               /*
+                * The terminal type will be left alone if it is present in
+                * the environment already.
+                */
                if ((cp = getenv ("TERM")))
-                       addenv("TERM", cp);
+                       addenv ("TERM", cp);
        } else {
                while (*envp)
-                       addenv(*envp++, NULL);
+                       addenv (*envp++, NULL);
        }
 
        /*
-        * 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.
+        * 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 (argc > 0 && argv[0][0] != '-') {
-               STRFCPY(name, argv[0]); /* use this login id */
-               argc--; argv++;         /* shift ... */
+               STRFCPY (name, argv[0]);        /* use this login id */
+               argc--;
+               argv++;         /* shift ... */
        }
-       if (! name[0])                  /* use default user ID */
+       if (!name[0])           /* use default user ID */
                (void) strcpy (name, "root");
 
-       doshell = argc == 0;            /* any arguments remaining? */
+       doshell = argc == 0;    /* any arguments remaining? */
 
        /*
-        * Get the user's real name.  The current UID is used to determine
-        * who has executed su.  That user ID must exist.
+        * 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();
+       pw = get_my_pwent ();
        if (!pw) {
-               SYSLOG((LOG_CRIT, "Unknown UID: %d\n", (int) my_uid));
-               su_failure(tty);
+               SYSLOG ((LOG_CRIT, "Unknown UID: %u", my_uid));
+               su_failure (tty);
        }
-       STRFCPY(oldname, pw->pw_name);
+       STRFCPY (oldname, pw->pw_name);
 
 #ifndef USE_PAM
 #ifdef SU_ACCESS
@@ -297,129 +293,141 @@ main(int argc, char **argv)
         * -- chris
         */
 #ifdef SHADOWPWD
-       if ((spwd = getspnam(oldname)))
+       if ((spwd = getspnam (oldname)))
                pw->pw_passwd = spwd->sp_pwdp;
 #endif
-       oldpass = xstrdup(pw->pw_passwd);
-#endif  /* SU_ACCESS */
+       oldpass = xstrdup (pw->pw_passwd);
+#endif                         /* SU_ACCESS */
 
-#else  /* USE_PAM */
-       ret = pam_start("su", name, &conv, &pamh);
+#else                          /* USE_PAM */
+       ret = pam_start ("su", name, &conv, &pamh);
        if (ret != PAM_SUCCESS) {
-               SYSLOG((LOG_ERR, "pam_start: error %d\n", ret);
-               fprintf(stderr, _("%s: pam_start: error %d\n"), Prog, ret));
-               exit(1);
+               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);
+       ret = pam_set_item (pamh, PAM_TTY, (const void *) tty);
        if (ret == PAM_SUCCESS)
-               ret = pam_set_item(pamh, PAM_RUSER, (const void *) oldname);
+               ret =
+                   pam_set_item (pamh, PAM_RUSER, (const void *) oldname);
        if (ret != PAM_SUCCESS) {
-               SYSLOG((LOG_ERR, "pam_set_item: %s\n", pam_strerror(pamh, ret)));
-               fprintf(stderr, "%s: %s\n", Prog, pam_strerror(pamh, ret));
-               pam_end(pamh, ret);
-               exit(1);
+               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 */
+#endif                         /* USE_PAM */
 
-top:
+      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.
+        * 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.
+        * The password file entries for the user is gotten and the account
+        * validated.
         */
 
-       if (!(pw = getpwnam(name))) {
+       if (!(pw = getpwnam (name))) {
                (void) fprintf (stderr, _("Unknown id: %s\n"), name);
-               closelog();
-               exit(1);
+               closelog ();
+               exit (1);
        }
-
 #ifndef USE_PAM
 #ifdef SHADOWPWD
        spwd = NULL;
-       if (strcmp(pw->pw_passwd, SHADOW_PASSWD_STRING) == 0 && (spwd = getspnam(name)))
+       if (strcmp (pw->pw_passwd, SHADOW_PASSWD_STRING) == 0
+           && (spwd = getspnam (name)))
                pw->pw_passwd = spwd->sp_pwdp;
 #endif
-#endif  /* !USE_PAM */
+#endif                         /* !USE_PAM */
        pwent = *pw;
 
 #ifndef USE_PAM
        /*
-        * BSD systems only allow "wheel" to SU to root.  USG systems
-        * don't, so we make this a configurable option.
+        * 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>.  */
+       /* 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 (pwent.pw_uid == 0 && getdef_bool("SU_WHEEL_ONLY")
-                   && !iswheel(oldname)) {
-                       fprintf(stderr, _("You are not authorized to su %s\n"), name);
-                       exit(1);
+               if (pwent.pw_uid == 0 && 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 */
+               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 */
+               case 1: /* require no password */
+                       pwent.pw_passwd = "";   /* XXX warning: const */
                        break;
-               case 2:  /* require own password */
-                       puts(_("(Enter your own password.)"));
+               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);
+               default:        /* access denied (-1) or unexpected value */
+                       fprintf (stderr,
+                                _("You are not authorized to su %s\n"),
+                                name);
+                       exit (1);
                }
-#endif  /* SU_ACCESS */
+#endif                         /* SU_ACCESS */
        }
-#endif  /* !USE_PAM */
+#endif                         /* !USE_PAM */
 
        /*
         * Set the default shell.
         */
 
        if (pwent.pw_shell[0] == '\0')
-               pwent.pw_shell = "/bin/sh";  /* XXX warning: const */
+               pwent.pw_shell = "/bin/sh";     /* XXX warning: const */
 
 #ifdef USE_PAM
-       ret = pam_authenticate(pamh, 0);
+       ret = pam_authenticate (pamh, 0);
        if (ret != PAM_SUCCESS) {
-               SYSLOG((LOG_ERR, "pam_authenticate: %s\n",
-                       pam_strerror(pamh, ret)));
-               fprintf(stderr, "%s: %s\n", Prog, pam_strerror(pamh, ret));
-               pam_end(pamh, ret);
-               su_failure(tty);
+               SYSLOG ((LOG_ERR, "pam_authenticate: %s",
+                        pam_strerror (pamh, ret)));
+               fprintf (stderr, "%s: %s\n", Prog,
+                        pam_strerror (pamh, ret));
+               pam_end (pamh, ret);
+               su_failure (tty);
        }
 
-       ret = pam_acct_mgmt(pamh, 0);
+       ret = pam_acct_mgmt (pamh, 0);
        if (ret != PAM_SUCCESS) {
                if (amroot) {
-                       fprintf(stderr, _("%s: %s\n(Ignored)\n"), Prog, pam_strerror(pamh, ret));
+                       fprintf (stderr, _("%s: %s\n(Ignored)\n"), Prog,
+                                pam_strerror (pamh, ret));
                } else {
-                       SYSLOG((LOG_ERR, "pam_acct_mgmt: %s\n",
-                               pam_strerror(pamh, ret)));
-                       fprintf(stderr, "%s: %s\n", Prog, pam_strerror(pamh, ret));
-                       pam_end(pamh, ret);
-                       su_failure(tty);
+                       SYSLOG ((LOG_ERR, "pam_acct_mgmt: %s",
+                                pam_strerror (pamh, ret)));
+                       fprintf (stderr, "%s: %s\n", Prog,
+                                pam_strerror (pamh, ret));
+                       pam_end (pamh, ret);
+                       su_failure (tty);
                }
        }
-#else  /* !USE_PAM */
+#else                          /* !USE_PAM */
        /*
         * Set up a signal handler in case the user types QUIT.
         */
@@ -428,84 +436,83 @@ top:
        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.
+        * 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\n", name));
-               su_failure(tty);
+       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));
+               su_failure (tty);
        }
        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.
+        * 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 (!amroot) {
 #ifdef SHADOWPWD
                if (!spwd)
-                       spwd = pwd_to_spwd(&pwent);
+                       spwd = pwd_to_spwd (&pwent);
 
-               if (isexpired(&pwent, spwd)) {
-                       SYSLOG((pwent.pw_uid ? LOG_WARN : LOG_CRIT,
-                               "Expired account %s\n", name));
-                       su_failure(tty);
+               if (isexpired (&pwent, spwd)) {
+                       SYSLOG ((pwent.pw_uid ? LOG_WARN : LOG_CRIT,
+                                "Expired account %s", name));
+                       su_failure (tty);
                }
 #else
-#if defined(ATT_AGE) && defined(AGING)
-               else if (pwent.pw_age[0] &&
-                               isexpired (&pwent)) {
-                       SYSLOG((pwent.pw_uid ? LOG_WARN:LOG_CRIT,
-                               "Expired account %s\n", name));
-                       su_failure(tty);
+#if defined(ATT_AGE)
+               if (pwent.pw_age[0] && isexpired (&pwent)) {
+                       SYSLOG ((pwent.pw_uid ? LOG_WARN : LOG_CRIT,
+                                "Expired account %s", name));
+                       su_failure (tty);
                }
-#endif /* ATT_AGE */
+#endif                         /* ATT_AGE */
 #endif
        }
 
        /*
-        * 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.
+        * 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((pwent.pw_uid ? LOG_WARN : LOG_CRIT,
-                               "SU by %s to restricted account %s\n",
-                                       oldname, name));
-                       su_failure(tty);
+       if (!amroot) {
+               if (!isttytime (pwent.pw_name, "SU", time ((time_t *) 0))) {
+                       SYSLOG ((pwent.pw_uid ? LOG_WARN : LOG_CRIT,
+                                "SU by %s to restricted account %s",
+                                oldname, name));
+                       su_failure (tty);
                }
        }
-#endif  /* !USE_PAM */
+#endif                         /* !USE_PAM */
 
-       signal(SIGINT, SIG_DFL);
-       cp = getdef_str((pwent.pw_uid == 0) ? "ENV_SUPATH" : "ENV_PATH");
+       signal (SIGINT, SIG_DFL);
+       cp = getdef_str ((pwent.pw_uid == 0) ? "ENV_SUPATH" : "ENV_PATH");
 #if 0
-       addenv(cp ? cp : "PATH=/bin:/usr/bin", NULL);
+       addenv (cp ? cp : "PATH=/bin:/usr/bin", NULL);
 #else
        /* XXX very similar code duplicated in libmisc/setupenv.c */
        if (!cp) {
-               addenv("PATH=/bin:/usr/bin", NULL);
-       } else if (strchr(cp, '=')) {
-               addenv(cp, NULL);
+               addenv ("PATH=/bin:/usr/bin", NULL);
+       } else if (strchr (cp, '=')) {
+               addenv (cp, NULL);
        } else {
-               addenv("PATH", cp);
+               addenv ("PATH", cp);
        }
 #endif
 
-       environ = newenvp;              /* make new environment active */
+       environ = newenvp;      /* make new environment active */
 
-       if (getenv ("IFS"))             /* don't export user IFS ... */
-               addenv("IFS= \t\n", NULL);      /* ... instead, set a safe IFS */
+       if (getenv ("IFS"))     /* don't export user IFS ... */
+               addenv ("IFS= \t\n", NULL);     /* ... instead, set a safe IFS */
 
-       if (pwent.pw_shell[0] == '*') { /* subsystem root required */
+       if (pwent.pw_shell[0] == '*') { /* subsystem root required */
                pwent.pw_shell++;       /* skip the '*' */
                subsystem (&pwent);     /* figure out what to execute */
                endpwent ();
@@ -515,110 +522,113 @@ top:
                goto top;
        }
 
-       sulog(tty, 1, oldname, name);           /* save SU information */
+       sulog (tty, 1, oldname, name);  /* save SU information */
        endpwent ();
 #ifdef SHADOWPWD
        endspent ();
 #endif
 #ifdef USE_SYSLOG
-       if (getdef_bool("SYSLOG_SU_ENAB"))
-               SYSLOG((LOG_INFO, "+ %s %s-%s\n", tty,
-                       oldname[0] ? oldname:"???", name[0] ? name:"???"));
+       if (getdef_bool ("SYSLOG_SU_ENAB"))
+               SYSLOG ((LOG_INFO, "+ %s %s-%s", tty,
+                        oldname[0] ? oldname : "???",
+                        name[0] ? name : "???"));
 #endif
 
 #ifdef USE_PAM
        /* set primary group id and supplementary groups */
-       if (setup_groups(&pwent)) {
-               pam_end(pamh, PAM_ABORT);
-               exit(1);
+       if (setup_groups (&pwent)) {
+               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);
+       /*
+        * 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 (ret != PAM_SUCCESS) {
-               SYSLOG((LOG_ERR, "pam_setcred: %s\n", pam_strerror(pamh, ret)));
-               fprintf(stderr, "%s: %s\n", Prog, pam_strerror(pamh, ret));
-               pam_end(pamh, ret);
-               exit(1);
+               SYSLOG ((LOG_ERR, "pam_setcred: %s",
+                        pam_strerror (pamh, ret)));
+               fprintf (stderr, "%s: %s\n", Prog,
+                        pam_strerror (pamh, ret));
+               pam_end (pamh, ret);
+               exit (1);
        }
 
        /* become the new user */
-       if (change_uid(&pwent)) {
-               pam_setcred(pamh, PAM_DELETE_CRED);
-               pam_end(pamh, PAM_ABORT);
-               exit(1);
+       if (change_uid (&pwent)) {
+               pam_setcred (pamh, PAM_DELETE_CRED);
+               pam_end (pamh, PAM_ABORT);
+               exit (1);
        }
 
        /* now we are done using PAM */
-       pam_end(pamh, PAM_SUCCESS);
+       pam_end (pamh, PAM_SUCCESS);
 
-#else  /* !USE_PAM */
-       if (!amroot)  /* no limits if su from root */
-               setup_limits(&pwent);
+#else                          /* !USE_PAM */
+       if (!amroot)            /* no limits if su from root */
+               setup_limits (&pwent);
 
-       if (setup_uid_gid(&pwent, is_console))
-               exit(1);
-#endif  /* !USE_PAM */
+       if (setup_uid_gid (&pwent, is_console))
+               exit (1);
+#endif                         /* !USE_PAM */
 
        if (fakelogin)
-               setup_env(&pwent);
-#if 1  /* Suggested by Joey Hess.  XXX - is this right?  */
+               setup_env (&pwent);
+#if 1                          /* Suggested by Joey Hess. XXX - is this right?  */
        else
-               addenv("HOME", pwent.pw_dir);
+               addenv ("HOME", pwent.pw_dir);
 #endif
 
        /*
         * 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
+        * /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();
+       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.
+        * 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;
 
-#if 0  /* XXX - GNU su doesn't do this.  --marekm */
-               if (! hushed (&pwent)) {
+#if 0                          /* XXX - GNU su doesn't do this.  --marekm */
+               if (!hushed (&pwent)) {
                        motd ();
                        mailcheck ();
                }
 #endif
-               cp = getdef_str("SU_NAME");
+               cp = getdef_str ("SU_NAME");
                if (!cp)
-                       cp = Basename(pwent.pw_shell);
+                       cp = Basename (pwent.pw_shell);
 
-               arg0 = xmalloc(strlen(cp) + 2);
+               arg0 = xmalloc (strlen (cp) + 2);
                arg0[0] = '-';
-               strcpy(arg0 + 1, cp);
+               strcpy (arg0 + 1, cp);
                cp = arg0;
        } else
-               cp = Basename(pwent.pw_shell);
+               cp = Basename (pwent.pw_shell);
 
-       if (! doshell) {
+       if (!doshell) {
 
                /*
-                * Use new user's shell from /etc/passwd and create an
-                * argv with the rest of the command line included.
+                * Use new user's shell from /etc/passwd and create an argv
+                * with the rest of the command line included.
                 */
 
                argv[-1] = pwent.pw_shell;
                (void) execv (pwent.pw_shell, &argv[-1]);
                (void) fprintf (stderr, _("No shell\n"));
-               SYSLOG((LOG_WARN, "Cannot execute %s\n", pwent.pw_shell));
-               closelog();
+               SYSLOG ((LOG_WARN, "Cannot execute %s", pwent.pw_shell));
+               closelog ();
                exit (1);
        }
 
-       shell(pwent.pw_shell, cp);
-       /*NOTREACHED*/
-       exit(1);
+       shell (pwent.pw_shell, cp);
+        /*NOTREACHED*/ exit (1);
 }
index e33aec62effde2cecf50d2b347d5e8c115cd6421..07d0130aef8a2b48b90eadfcc5ca0d082c132ec6 100644 (file)
@@ -17,7 +17,7 @@
  * 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
+ * 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)
 #include <config.h>
 
 #include "rcsid.h"
-RCSID(PKG_VER "$Id: sulogin.c,v 1.12 2000/09/02 18:40:44 marekm Exp $")
-
+RCSID (PKG_VER "$Id: sulogin.c,v 1.13 2002/01/05 15:41:44 kloczek Exp $")
 #include "prototypes.h"
 #include "defines.h"
 #include "getdef.h"
-
 #if HAVE_UTMPX_H
 #include <utmpx.h>
 #else
 #include <utmp.h>
 #endif
-
 #include <signal.h>
 #include <stdio.h>
 #include <pwd.h>
 #include <fcntl.h>
 #include "pwauth.h"
-
 static char name[BUFSIZ];
 static char pass[BUFSIZ];
 
 static struct passwd pwent;
+
 #if 0
 #if HAVE_UTMPX_H
 static struct utmpx utent;
@@ -64,58 +61,57 @@ static struct utmp utent;
 extern char **newenvp;
 extern size_t newenvc;
 
-extern char    **environ;
+extern char **environ;
 
 #ifndef        ALARM
 #define        ALARM   60
 #endif
 
 /* local function prototypes */
-static RETSIGTYPE catch(int);
+static RETSIGTYPE catch (int);
 
-static RETSIGTYPE
-catch(int sig)
+static RETSIGTYPE catch (int sig)
 {
-       exit(1);
+       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 */
+/*
+ * 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)
+ /*ARGSUSED*/ int main (int argc, char **argv)
 {
-       char    *cp;
-       char    **envp = environ;
-       TERMIO  termio;
+       char *cp;
+       char **envp = environ;
+       TERMIO termio;
 
 #ifdef USE_TERMIO
        ioctl (0, TCGETA, &termio);
-       termio.c_iflag |= (ICRNL|IXON);
-       termio.c_oflag |= (OPOST|ONLCR);
+       termio.c_iflag |= (ICRNL | IXON);
+       termio.c_oflag |= (OPOST | ONLCR);
        termio.c_cflag |= (CREAD);
-       termio.c_lflag |= (ISIG|ICANON|ECHO|ECHOE|ECHOK);
+       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_iflag |= (ICRNL | IXON);
        termio.c_oflag |= (CREAD);
-       termio.c_lflag |= (ECHO|ECHOE|ECHOK|ICANON|ISIG);
+       termio.c_lflag |= (ECHO | ECHOE | ECHOK | ICANON | ISIG);
        tcsetattr (0, TCSANOW, &termio);
 #endif
 
-       setlocale(LC_ALL, "");
-       bindtextdomain(PACKAGE, LOCALEDIR);
-       textdomain(PACKAGE);
+       setlocale (LC_ALL, "");
+       bindtextdomain (PACKAGE, LOCALEDIR);
+       textdomain (PACKAGE);
 
 #ifdef USE_SYSLOG
-       OPENLOG("sulogin");
+       OPENLOG ("sulogin");
 #endif
-       initenv();
+       initenv ();
        if (argc > 1) {
                close (0);
                close (1);
@@ -132,16 +128,16 @@ main(int argc, char **argv)
                        exit (1);
                }
        }
-       if (access(PASSWD_FILE, F_OK) == -1) { /* must be a password file! */
-               printf(_("No password file\n"));
+       if (access (PASSWD_FILE, F_OK) == -1) { /* must be a password file! */
+               printf (_("No password file\n"));
 #ifdef USE_SYSLOG
-               syslog(LOG_WARN, "No password file\n");
+               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 */
+       if (getppid () != 1) {  /* parent must be INIT */
 #ifdef USE_SYSLOG
                syslog (LOG_WARN, "Pid == %d, not 1\n", getppid ());
                closelog ();
@@ -149,69 +145,75 @@ main(int argc, char **argv)
                exit (1);
        }
 #endif
-       if (! isatty (0) || ! isatty (1) || ! isatty (2)) {
+       if (!isatty (0) || !isatty (1) || !isatty (2)) {
 #ifdef USE_SYSLOG
                closelog ();
 #endif
-               exit (1);               /* must be a terminal */
+               exit (1);       /* must be a terminal */
        }
-       while (*envp)                   /* add inherited environment, */
-               addenv(*envp++, NULL);  /* some variables change later */
+       while (*envp)           /* add inherited environment, */
+               addenv (*envp++, NULL); /* some variables change later */
 
-       if ((cp = getdef_str("ENV_TZ")))
-               addenv(*cp == '/' ? tz(cp) : cp, NULL);
-       if ((cp = getdef_str("ENV_HZ")))
-               addenv(cp, NULL);       /* set the default $HZ, if one */
+       if ((cp = getdef_str ("ENV_TZ")))
+               addenv (*cp == '/' ? tz (cp) : cp, NULL);
+       if ((cp = getdef_str ("ENV_HZ")))
+               addenv (cp, NULL);      /* set the default $HZ, if one */
        (void) strcpy (name, "root");   /* KLUDGE!!! */
 
        signal (SIGALRM, catch);        /* exit if the timer expires */
-       alarm (ALARM);                  /* only wait so long ... */
+       alarm (ALARM);          /* only wait so long ... */
 
        while (1) {             /* repeatedly get login/password pairs */
-               pw_entry(name, &pwent);  /* get entry from password file */
+               pw_entry (name, &pwent);        /* get entry from password file */
                if (pwent.pw_name == (char *) 0) {
 
                        /*
                         * Fail secure
                         */
 
-                       printf(_("No password entry for 'root'\n"));
+                       printf (_("No password entry for 'root'\n"));
 #ifdef USE_SYSLOG
-                       syslog (LOG_WARN, "No password entry for 'root'\n");
+                       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(_("\nType 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
-        */
+               /*
+                * Here we prompt for the root password, or if no password
+                * is given we just exit.
+                */
+
+               /* get a password for root */
+               cp = getpass (_
+                             ("\nType 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 (!cp || !*cp) {
 #ifdef USE_SYSLOG
                        syslog (LOG_INFO, "Normal startup\n");
                        closelog ();
 #endif
-                       puts("\n");
+                       puts ("\n");
 #ifdef TELINIT
-                       execl (PATH_TELINIT, "telinit", RUNLEVEL, (char *) 0);
+                       execl (PATH_TELINIT, "telinit", RUNLEVEL,
+                              (char *) 0);
 #endif
                        exit (0);
                } else {
-                       STRFCPY(pass, cp);
-                       strzero(cp);
+                       STRFCPY (pass, cp);
+                       strzero (cp);
                }
 #ifdef AUTH_METHODS
                if (pwent.pw_name && pwent.pw_passwd[0] == '@') {
-                       if (pw_auth (pwent.pw_passwd + 1, name, PW_LOGIN, (char *) 0)) {
+                       if (pw_auth
+                           (pwent.pw_passwd + 1, name, PW_LOGIN,
+                            (char *) 0)) {
 #ifdef USE_SYSLOG
                                syslog (LOG_WARN,
                                        "Incorrect root authentication");
@@ -221,53 +223,51 @@ main(int argc, char **argv)
                        goto auth_done;
                }
 #endif
-               if (valid (pass, &pwent)) /* check encrypted passwords ... */
-                       break;          /* ... encrypted passwords matched */
+               if (valid (pass, &pwent))       /* check encrypted passwords ... */
+                       break;  /* ... encrypted passwords matched */
 
 #ifdef USE_SYSLOG
                syslog (LOG_WARN, "Incorrect root password\n");
 #endif
-               sleep(2);
+               sleep (2);
                puts (_("Login incorrect"));
        }
 #ifdef AUTH_METHODS
-auth_done:
+      auth_done:
 #endif
-       strzero(pass);
+       strzero (pass);
        alarm (0);
        signal (SIGALRM, SIG_DFL);
-       environ = newenvp;              /* make new environment active */
+       environ = newenvp;      /* make new environment active */
 
-       puts(_("Entering System Maintenance Mode\n"));
+       puts (_("Entering System Maintenance Mode\n"));
 #ifdef USE_SYSLOG
        syslog (LOG_INFO, "System Maintenance Mode\n");
 #endif
 
-#if 0 /* do we need all this? we are logging in as root anyway...  --marekm */
+#if 0                          /* do we need all this? we are logging in as root anyway...  --marekm */
        /*
-        * Normally there would be a utmp entry for login to mung on
-        * to get the tty name, date, etc. from.  We don't need all that
-        * stuff because we won't update the utmp or wtmp files.  BUT!,
-        * we do need the tty name so we can set the permissions and
-        * ownership.
+        * Normally there would be a utmp entry for login to mung on to get
+        * the tty name, date, etc. from. We don't need all that stuff
+        * because we won't update the utmp or wtmp files. BUT!, we do need
+        * the tty name so we can set the permissions and ownership.
         */
 
-       if ((cp = ttyname (0))) {               /* found entry in /dev/ */
-               if (strncmp(cp, "/dev/", 5) == 0)
+       if ((cp = ttyname (0))) {       /* found entry in /dev/ */
+               if (strncmp (cp, "/dev/", 5) == 0)
                        cp += 5;
 
-               strncpy(utent.ut_line, cp, sizeof utent.ut_line);
+               strncpy (utent.ut_line, cp, sizeof utent.ut_line);
        }
-       if (getenv ("IFS"))             /* don't export user IFS ... */
-               addenv("IFS= \t\n", NULL);      /* ... instead, set a safe IFS */
+       if (getenv ("IFS"))     /* don't export user IFS ... */
+               addenv ("IFS= \t\n", NULL);     /* ... instead, set a safe IFS */
 
-       setup (&pwent, 0);              /* set UID, GID, HOME, etc ... */
+       setup (&pwent, 0);      /* set UID, GID, HOME, etc ... */
 #endif
 
 #ifdef USE_SYSLOG
        closelog ();
 #endif
-       shell (pwent.pw_shell, (char *) 0); /* exec the shell finally. */
-       /*NOTREACHED*/
-       return (0);
+       shell (pwent.pw_shell, (char *) 0);     /* exec the shell finally. */
+        /*NOTREACHED*/ return (0);
 }
index af108c0544ad2ace568eafbe81e7c61c336da0e6..e64ae3f75e047075955e1f743af74d454dec0628 100644 (file)
@@ -17,7 +17,7 @@
  * 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
+ * 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)
@@ -30,8 +30,7 @@
 #include <config.h>
 
 #include "rcsid.h"
-RCSID(PKG_VER "$Id: useradd.c,v 1.26 2001/09/01 04:19:16 kloczek Exp $")
-
+RCSID (PKG_VER "$Id: useradd.c,v 1.31 2002/01/06 14:09:07 kloczek Exp $")
 #include "prototypes.h"
 #include "defines.h"
 #include "chkname.h"
@@ -44,13 +43,11 @@ RCSID(PKG_VER "$Id: useradd.c,v 1.26 2001/09/01 04:19:16 kloczek Exp $")
 #include <ctype.h>
 #include <fcntl.h>
 #include <time.h>
-
 #ifdef USE_PAM
 #include <security/pam_appl.h>
 #include <security/pam_misc.h>
 #include <pwd.h>
-#endif /* USE_PAM */
-
+#endif                         /* USE_PAM */
 #include "pwauth.h"
 #if HAVE_LASTLOG_H
 #include <lastlog.h>
@@ -58,23 +55,19 @@ RCSID(PKG_VER "$Id: useradd.c,v 1.26 2001/09/01 04:19:16 kloczek Exp $")
 #include "lastlog_.h"
 #endif
 #include "faillog.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
-
 /*
  * These defaults are used if there is no defaults file.
  */
@@ -83,12 +76,13 @@ static const char *def_gname = "other";
 static const char *def_home = "/home";
 static const char *def_shell = "";
 static const char *def_template = SKEL_DIR;
+
 #ifdef SHADOWPWD
 static long def_inactive = -1;
 static const char *def_expire = "";
 #endif
 
-static char    def_file[] = USER_DEFAULTS_FILE;
+static char def_file[] = USER_DEFAULTS_FILE;
 
 #define        VALID(s)        (strcspn (s, ":\n") == strlen (s))
 
@@ -99,6 +93,7 @@ static gid_t user_gid;
 static const char *user_comment = "";
 static const char *user_home = "";
 static const char *user_shell = "";
+
 #ifdef SHADOWPWD
 static long user_expire = -1;
 static int is_shadow_pwd;
@@ -106,30 +101,30 @@ static int is_shadow_pwd;
 #ifdef SHADOWGRP
 static int is_shadow_grp;
 #endif
-static char **user_groups;  /* NULL-terminated list */
+static char **user_groups;     /* NULL-terminated list */
 static long sys_ngroups;
-static int do_grp_update = 0;  /* group files need to be updated */
+static int do_grp_update = 0;  /* group files need to be updated */
 
-static char    *Prog;
+static char *Prog;
 
 static int
      uflg = 0, /* specify user ID for new account */
      oflg = 0, /* permit non-unique user ID to be specified with -u */
      gflg = 0, /* primary group ID for new account */
      Gflg = 0, /* secondary group set for new account */
      dflg = 0, /* home directory for new account */
      bflg = 0, /* new default root of home directory */
      sflg = 0, /* shell program for new account */
      cflg = 0, /* comment (GECOS) field for new account */
      mflg = 0, /* create user's home directory if it doesn't exist */
      kflg = 0, /* specify a directory to fill new user directory */
      fflg = 0, /* days until account with expired password is locked */
      eflg = 0, /* days since 1970-01-01 when account is locked */
      Dflg = 0, /* set/show new user default values */
      nflg = 0; /* create a group having the same name as the user */
bflg = 0,     /* new default root of home directory */
cflg = 0,     /* comment (GECOS) field for new account */
dflg = 0,     /* home directory for new account */
Dflg = 0,     /* set/show new user default values */
eflg = 0,     /* days since 1970-01-01 when account is locked */
fflg = 0,     /* days until account with expired password is locked */
gflg = 0,     /* primary group ID for new account */
Gflg = 0,     /* secondary group set for new account */
kflg = 0,     /* specify a directory to fill new user directory */
mflg = 0,     /* create user's home directory if it doesn't exist */
nflg = 0,     /* create a group having the same name as the user */
oflg = 0,     /* permit non-unique user ID to be specified with -u */
sflg = 0,     /* shell program for new account */
uflg = 0;     /* specify user ID for new account */
 
 #ifdef AUTH_METHODS
-static int Aflg = 0; /* specify authentication method for user */
+static int Aflg = 0;           /* specify authentication method for user */
 static char user_auth[1024];
 static char *auth_arg;
 #endif
@@ -138,28 +133,31 @@ extern char *optarg;
 extern int optind;
 
 #ifdef NDBM
-extern int     pw_dbm_mode;
+extern int pw_dbm_mode;
+
 #ifdef SHADOWPWD
-extern int     sp_dbm_mode;
+extern int sp_dbm_mode;
 #endif
-extern int     gr_dbm_mode;
+extern int gr_dbm_mode;
+
 #ifdef SHADOWGRP
-extern int     sg_dbm_mode;
+extern int sg_dbm_mode;
 #endif
 #endif
 
-static int     home_added;
+static int home_added;
 
 #ifdef NDBM
-static int     pw_dbm_added;
-static int     gr_dbm_added;
+static int pw_dbm_added;
+static int gr_dbm_added;
+
 #ifdef SHADOWPWD
-static int     sp_dbm_added;
+static int sp_dbm_added;
 #endif
 #ifdef SHADOWGRP
-static int     sg_dbm_added;
+static int sg_dbm_added;
 #endif
-#endif /* NDBM */
+#endif                         /* NDBM */
 
 #include "groupio.h"
 
@@ -205,95 +203,112 @@ static int       sg_dbm_added;
 #endif
 
 /* local function prototypes */
-static void fail_exit(int);
-static struct group *getgr_nam_gid(const char *);
-static long get_number(const char *);
-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 *);
+static void fail_exit (int);
+static struct group *getgr_nam_gid (const char *);
+static long get_number (const char *);
+static uid_t get_uid (const char *);
+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 SHADOWPWD
-static long scale_age(long);
-static void new_spent(struct spwd *);
+static long scale_age (long);
+static void new_spent (struct spwd *);
 #endif
-static void grp_update(void);
-static void find_new_uid(void);
+static void grp_update (void);
+static void find_new_uid (void);
+
 #ifdef AUTH_METHODS
-static void convert_auth(char *, const char *);
-static int valid_auth(const char *);
+static void convert_auth (char *, const char *);
+static int valid_auth (const char *);
 #endif
-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 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);
 
 /*
  * fail_exit - undo as much as possible
  */
 
-static void
-fail_exit(int code)
+static void fail_exit (int code)
 {
 #ifdef NDBM
-       struct  passwd  pwent;
+       struct passwd pwent;
 
        if (pw_dbm_added) {
                pwent.pw_name = user_name;
                pwent.pw_uid = user_id;
-               pw_dbm_remove(&pwent);
+               pw_dbm_remove (&pwent);
        }
        if (gr_dbm_added)
-               fprintf(stderr, _("%s: rebuild the group database\n"), Prog);
+               fprintf (stderr, _("%s: rebuild the group database\n"),
+                        Prog);
 #ifdef SHADOWPWD
        if (sp_dbm_added)
-               sp_dbm_remove(user_name);
+               sp_dbm_remove (user_name);
 #endif
 #ifdef SHADOWGRP
        if (sg_dbm_added)
-               fprintf(stderr, _("%s: rebuild the shadow group database\n"),
-                       Prog);
+               fprintf (stderr,
+                        _("%s: rebuild the shadow group database\n"),
+                        Prog);
 #endif
-#endif /* NDBM */
+#endif                         /* NDBM */
        if (home_added)
-               rmdir(user_home);
+               rmdir (user_home);
 
-       SYSLOG((LOG_INFO, "failed adding user `%s', data deleted\n",
-               user_name));
-       exit(code);
+       SYSLOG ((LOG_INFO, "failed adding user `%s', data deleted",
+                user_name));
+       exit (code);
 }
 
 
-static struct group *
-getgr_nam_gid(const char *name)
+static struct group *getgr_nam_gid (const char *name)
 {
        gid_t gid;
        char *ep;
 
-       gid = strtol(name, &ep, 10);
-       if (*name != '\0' && *ep == '\0')  /* valid numeric gid */
-               return getgrgid(gid);
+       gid = strtoul (name, &ep, 10);
+       if (*name != '\0' && *ep == '\0')       /* valid numeric gid */
+               return getgrgid (gid);
 
-       return getgrnam(name);
+       return getgrnam (name);
 }
 
 
-static long
-get_number(const char *cp)
+static long get_number (const char *cp)
 {
        long val;
        char *ep;
 
-       val = strtol(cp, &ep, 10);
-       if (*cp != '\0' && *ep == '\0')  /* valid number */
+       val = strtol (cp, &ep, 10);
+       if (*cp != '\0' && *ep == '\0') /* valid number */
+               return val;
+
+       fprintf (stderr, _("%s: invalid numeric argument `%s'\n"), Prog,
+                cp);
+       exit (E_BAD_ARG);
+}
+
+static uid_t get_uid (const char *cp)
+{
+       uid_t val;
+       char *ep;
+
+       val = strtoul (cp, &ep, 10);
+       if (*cp != '\0' && *ep == '\0') /* valid number */
                return val;
 
-       fprintf(stderr, _("%s: invalid numeric argument `%s'\n"), Prog, cp);
-       exit(E_BAD_ARG);
+       fprintf (stderr, _("%s: invalid numeric argument `%s'\n"), Prog,
+                cp);
+       exit (E_BAD_ARG);
 }
 
 #define MATCH(x,y) (strncmp((x),(y),strlen(y)) == 0)
@@ -301,37 +316,35 @@ get_number(const char *cp)
 /*
  * 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.
+ *     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)
+static void get_defaults (void)
 {
        FILE *fp;
        char buf[1024];
        char *cp, *ep;
        const struct group *grp;
-       long val;
 
        /*
         * Open the defaults file for reading.
         */
 
-       if (!(fp = fopen(def_file, "r")))
+       if (!(fp = fopen (def_file, "r")))
                return;
 
        /*
-        * Read the file a line at a time.  Only the lines that have
-        * relevant values are used, everything else can be ignored.
+        * 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, sizeof buf, fp)) {
+       while (fgets (buf, sizeof buf, fp)) {
                if ((cp = strrchr (buf, '\n')))
                        *cp = '\0';
 
-               if (!(cp = strchr(buf, '=')))
+               if (!(cp = strchr (buf, '=')))
                        continue;
 
                cp++;
@@ -340,61 +353,63 @@ get_defaults(void)
                 * Primary GROUP identifier
                 */
 
-               if (MATCH(buf, DGROUP)) {
-                       val = strtol(cp, &ep, 10);
-                       if (*cp != '\0' && *ep == '\0') {  /* valid number */
+               if (MATCH (buf, DGROUP)) {
+                       unsigned int val = (unsigned int) strtoul (cp, &ep, 10);
+
+                       if (*cp != '\0' && *ep == '\0') {       /* valid number */
                                def_group = val;
-                               if ((grp = getgrgid(def_group))) {
-                                       def_gname = xstrdup(grp->gr_name);
+                               if ((grp = getgrgid (def_group))) {
+                                       def_gname = xstrdup (grp->gr_name);
                                } else {
-                                       fprintf(stderr,
-                                               _("%s: unknown gid %s\n"),
-                                               Prog, cp);
+                                       fprintf (stderr,
+                                                _("%s: unknown gid %s\n"),
+                                                Prog, cp);
                                }
-                       } else if ((grp = getgrnam(cp))) {
+                       } else if ((grp = getgrnam (cp))) {
                                def_group = grp->gr_gid;
-                               def_gname = xstrdup(cp);
+                               def_gname = xstrdup (cp);
                        } else {
-                               fprintf(stderr, _("%s: unknown group %s\n"),
-                                       Prog, cp);
+                               fprintf (stderr,
+                                        _("%s: unknown group %s\n"), Prog,
+                                        cp);
                        }
                }
-               
+
                /*
                 * Default HOME filesystem
                 */
-                
-               else if (MATCH(buf, HOME)) {
-                       def_home = xstrdup(cp);
+
+               else if (MATCH (buf, HOME)) {
+                       def_home = xstrdup (cp);
                }
 
                /*
                 * Default Login Shell command
                 */
 
-               else if (MATCH(buf, SHELL)) {
-                       def_shell = xstrdup(cp);
+               else if (MATCH (buf, SHELL)) {
+                       def_shell = xstrdup (cp);
                }
-
 #ifdef SHADOWPWD
                /*
                 * Default Password Inactive value
                 */
 
-               else if (MATCH(buf, INACT)) {
-                       val = strtol(cp, &ep, 10);
-                       if (*cp != '\0' && *ep == '\0')  /* valid number */
+               else if (MATCH (buf, INACT)) {
+                       long val = strtol (cp, &ep, 10);
+
+                       if (*cp != '\0' && *ep == '\0') /* valid number */
                                def_inactive = val;
                        else
                                def_inactive = -1;
                }
-               
+
                /*
                 * Default account expiration date
                 */
 
-               else if (MATCH(buf, EXPIRE)) {
-                       def_expire = xstrdup(cp);
+               else if (MATCH (buf, EXPIRE)) {
+                       def_expire = xstrdup (cp);
                }
 #endif
 
@@ -402,11 +417,11 @@ get_defaults(void)
                 * Default Skeleton information
                 */
 
-               else if (MATCH(buf, SKEL)) {
+               else if (MATCH (buf, SKEL)) {
                        if (*cp == '\0')
-                               cp = SKEL_DIR;  /* XXX warning: const */
-                       
-                       def_template = xstrdup(cp);
+                               cp = SKEL_DIR;  /* XXX warning: const */
+
+                       def_template = xstrdup (cp);
                }
        }
 }
@@ -419,55 +434,55 @@ get_defaults(void)
  *     file and the built-in values.
  */
 
-static void
-show_defaults(void)
+static void show_defaults (void)
 {
 #ifdef SVR4
-       printf(_("group=%s,%ld  basedir=%s  skel=%s\n"),
-               def_gname, (long) def_group, def_home, def_template);
+       printf (_("group=%s,%u  basedir=%s  skel=%s\n"),
+               def_gname, (unsigned int) def_group, def_home,
+               def_template);
 
-       printf(_("shell=%s  "), def_shell);
+       printf (_("shell=%s  "), def_shell);
 #ifdef SHADOWPWD
-       printf(_("inactive=%ld  expire=%s"), def_inactive, def_expire);
+       printf (_("inactive=%ld  expire=%s"), def_inactive, def_expire);
 #endif
-       printf("\n");
-#else /* !SVR4 */
-       printf(_("GROUP=%ld\n"), (long) def_group);
-       printf(_("HOME=%s\n"), def_home);
+       printf ("\n");
+#else                          /* !SVR4 */
+       printf (_("GROUP=%u\n"), (unsigned int) def_group);
+       printf (_("HOME=%s\n"), def_home);
 #ifdef SHADOWPWD
-       printf(_("INACTIVE=%ld\n"), def_inactive);
-       printf(_("EXPIRE=%s\n"), def_expire);
+       printf (_("INACTIVE=%ld\n"), def_inactive);
+       printf (_("EXPIRE=%s\n"), def_expire);
 #endif
-       printf(_("SHELL=%s\n"), def_shell);
-       printf(_("SKEL=%s\n"), def_template);
-#endif /* !SVR4 */
+       printf (_("SHELL=%s\n"), def_shell);
+       printf (_("SKEL=%s\n"), def_template);
+#endif                         /* !SVR4 */
 }
 
 /*
  * 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
+ *     are currently set. Duplicated lines are pruned, missing lines are
  *     added, and unrecognized lines are copied as is.
  */
 
-static int
-set_defaults(void)
+static int set_defaults (void)
 {
-       FILE    *ifp;
-       FILE    *ofp;
-       char    buf[1024];
-       static  char    new_file[] = NEW_USER_FILE;
-       char    *cp;
-       int     ofd;
-       int     out_group = 0;
-       int     out_home = 0;
-       int     out_inactive = 0;
-       int     out_expire = 0;
-       int     out_shell = 0;
-       int     out_skel = 0;
+       FILE *ifp;
+       FILE *ofp;
+       char buf[1024];
+       static char new_file[] = NEW_USER_FILE;
+       char *cp;
+       int ofd;
+       int out_group = 0;
+       int out_home = 0;
+       int out_inactive = 0;
+       int out_expire = 0;
+       int out_shell = 0;
+       int out_skel = 0;
+
 #ifdef SVR4
-       int     out_gname = 0;
+       int out_gname = 0;
 #endif
 
        /*
@@ -479,97 +494,96 @@ set_defaults(void)
 #else
        if ((ofd = mktemp (new_file)) == -1) {
 #endif
-               fprintf(stderr, _("%s: cannot create new defaults file\n"),
-                       Prog);
-               return -1;
-       }
-       if (!(ofp = fdopen(ofd, "w"))) {
-               fprintf(stderr, _("%s: cannot open new defaults file\n"),
-                       Prog);
+               fprintf (stderr,
+                        _("%s: cannot create new defaults file\n"), Prog);
+               return -1;
+       }
+
+       if (!(ofp = fdopen (ofd, "w"))) {
+               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
+        * temporary file, using any new values. Each line is checked
         * to insure that it is not output more than once.
         */
 
-       if (!(ifp = fopen(def_file, "r"))) {
-               fprintf(ofp, "# useradd defaults file\n");
+       if (!(ifp = fopen (def_file, "r"))) {
+               fprintf (ofp, "# useradd defaults file\n");
                goto skip;
        }
 
-       while (fgets(buf, sizeof buf, ifp)) {
-               if ((cp = strrchr(buf, '\n')))
+       while (fgets (buf, sizeof buf, ifp)) {
+               if ((cp = strrchr (buf, '\n')))
                        *cp = '\0';
 
-               if (!out_group && MATCH(buf, DGROUP)) {
-                       fprintf(ofp, DGROUP "%d\n", (int) def_group);
+               if (!out_group && MATCH (buf, DGROUP)) {
+                       fprintf (ofp, DGROUP "%u\n",
+                                (unsigned int) def_group);
                        out_group++;
                }
 #ifdef SVR4
-               else if (!out_gname && MATCH(buf, "defgname=")) {
-                       fprintf(ofp, "defgname=%s\n", def_gname);
+               else if (!out_gname && MATCH (buf, "defgname=")) {
+                       fprintf (ofp, "defgname=%s\n", def_gname);
                        out_gname++;
                }
 #endif
-               else if (!out_home && MATCH(buf, HOME)) {
-                       fprintf(ofp, HOME "%s\n", def_home);
+               else if (!out_home && MATCH (buf, HOME)) {
+                       fprintf (ofp, HOME "%s\n", def_home);
                        out_home++;
 #ifdef SHADOWPWD
-               } else if (!out_inactive && MATCH(buf, INACT)) {
-                       fprintf(ofp, INACT "%ld\n", def_inactive);
+               } else if (!out_inactive && MATCH (buf, INACT)) {
+                       fprintf (ofp, INACT "%ld\n", def_inactive);
                        out_inactive++;
-               } else if (!out_expire && MATCH(buf, EXPIRE)) {
-                       fprintf(ofp, EXPIRE "%s\n", def_expire);
+               } else if (!out_expire && MATCH (buf, EXPIRE)) {
+                       fprintf (ofp, EXPIRE "%s\n", def_expire);
                        out_expire++;
                }
 #endif
-               else if (!out_shell && MATCH(buf, SHELL)) {
-                       fprintf(ofp, SHELL "%s\n", def_shell);
+               else if (!out_shell && MATCH (buf, SHELL)) {
+                       fprintf (ofp, SHELL "%s\n", def_shell);
                        out_shell++;
-               }
-               else if (!out_skel && MATCH(buf, SKEL)) {
-                       fprintf(ofp, SKEL "%s\n", def_template);
+               } else if (!out_skel && MATCH (buf, SKEL)) {
+                       fprintf (ofp, SKEL "%s\n", def_template);
                        out_skel++;
-               }
-               else
-                       fprintf(ofp, "%s\n", buf);
+               } else
+                       fprintf (ofp, "%s\n", buf);
        }
-       fclose(ifp);
+       fclose (ifp);
 
-skip:
+      skip:
        /*
-        * Check each line to insure that every line was output.  This
+        * 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 "%d\n", (int) def_group);
+               fprintf (ofp, DGROUP "%u\n", (unsigned int) def_group);
        if (!out_home)
-               fprintf(ofp, HOME "%s\n", def_home);
+               fprintf (ofp, HOME "%s\n", def_home);
 #ifdef SHADOWPWD
        if (!out_inactive)
-               fprintf(ofp, INACT "%ld\n", def_inactive);
+               fprintf (ofp, INACT "%ld\n", def_inactive);
        if (!out_expire)
-               fprintf(ofp, EXPIRE "%s\n", def_expire);
+               fprintf (ofp, EXPIRE "%s\n", def_expire);
 #endif
        if (!out_shell)
-               fprintf(ofp, SHELL "%s\n", def_shell);
+               fprintf (ofp, SHELL "%s\n", def_shell);
        if (!out_skel)
-               fprintf(ofp, SKEL "%s\n", def_template);
+               fprintf (ofp, SKEL "%s\n", def_template);
 
        /*
-        * Flush and close the file.  Check for errors to make certain
+        * Flush and close the file. Check for errors to make certain
         * the new file is intact.
         */
 
-       fflush(ofp);
-       if (ferror(ofp) || fclose(ofp)) {
-               unlink(new_file);
+       fflush (ofp);
+       if (ferror (ofp) || fclose (ofp)) {
+               unlink (new_file);
                return -1;
        }
 
@@ -577,11 +591,12 @@ skip:
         * Rename the current default file to its backup name.
         */
 
-       snprintf(buf, sizeof buf, "%s-", def_file);
-       if (rename(def_file, buf) && errno != ENOENT) {
-               snprintf(buf, sizeof buf, _("%s: rename: %s"), Prog, def_file);
-               perror(buf);
-               unlink(new_file);
+       snprintf (buf, sizeof buf, "%s-", def_file);
+       if (rename (def_file, buf) && errno != ENOENT) {
+               snprintf (buf, sizeof buf, _("%s: rename: %s"), Prog,
+                         def_file);
+               perror (buf);
+               unlink (new_file);
                return -1;
        }
 
@@ -589,18 +604,20 @@ skip:
         * Rename the new default file to its correct name.
         */
 
-       if (rename(new_file, def_file)) {
-               snprintf(buf, sizeof buf, _("%s: rename: %s"), Prog, new_file);
-               perror(buf);
+       if (rename (new_file, def_file)) {
+               snprintf (buf, sizeof buf, _("%s: rename: %s"), Prog,
+                         new_file);
+               perror (buf);
                return -1;
        }
 #ifdef SHADOWPWD
-       SYSLOG((LOG_INFO,
-               "defaults: group=%d, home=%s, inactive=%ld, expire=%s\n",
-               (int) def_group, def_home, def_inactive, def_expire));
+       SYSLOG ((LOG_INFO,
+                "defaults: group=%u, home=%s, inactive=%ld, expire=%s",
+                (unsigned int) def_group, def_home, def_inactive,
+                def_expire));
 #else
-       SYSLOG((LOG_INFO, "defaults: group=%d, home=%s\n",
-               (int) def_group, def_home));
+       SYSLOG ((LOG_INFO, "defaults: group=%u, home=%s",
+                (unsigned int) def_group, def_home));
 #endif
        return 0;
 }
@@ -609,12 +626,11 @@ skip:
  * 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
+ *     converts it to a NULL-terminated array. Any unknown group
  *     names are reported as errors.
  */
 
-static int
-get_groups(char *list)
+static int get_groups (char *list)
 {
        char *cp;
        const struct group *grp;
@@ -627,12 +643,12 @@ get_groups(char *list)
 
        user_groups[0] = (char *) 0;
 
-       if (! *list)
+       if (!*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
+        * each name and look it up. A mix of numerical and string
         * values for group identifiers is permitted.
         */
 
@@ -649,16 +665,16 @@ get_groups(char *list)
                 * GID values, otherwise the string is looked up as is.
                 */
 
-               grp = getgr_nam_gid(list);
+               grp = getgr_nam_gid (list);
 
                /*
                 * There must be a match, either by GID value or by
                 * string name.
                 */
 
-               if (! grp) {
-                       fprintf(stderr, _("%s: unknown group %s\n"),
-                               Prog, list);
+               if (!grp) {
+                       fprintf (stderr, _("%s: unknown group %s\n"),
+                                Prog, list);
                        errors++;
                }
                list = cp;
@@ -667,26 +683,28 @@ get_groups(char *list)
                 * If the group doesn't exist, don't dump core...
                 * Instead, try the next one.  --marekm
                 */
-               if (! grp)
+               if (!grp)
                        continue;
 
 #ifdef USE_NIS
                /*
-                * Don't add this group if they are an NIS group.  Tell
+                * 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);
+                       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);
+                       fprintf (stderr,
+                                _
+                                ("%s: too many groups specified (max %d).\n"),
+                                Prog, ngroups);
                        break;
                }
 
@@ -694,7 +712,7 @@ get_groups(char *list)
                 * Add the group name to the user's list of groups.
                 */
 
-               user_groups[ngroups++] = xstrdup(grp->gr_name);
+               user_groups[ngroups++] = xstrdup (grp->gr_name);
        } while (list);
 
        user_groups[ngroups] = (char *) 0;
@@ -713,30 +731,32 @@ get_groups(char *list)
  * usage - display usage message and exit
  */
 
-static void
-usage(void)
+static void usage (void)
 {
-       fprintf(stderr,
-               _("usage: %s\t[-u uid [-o]] [-g group] [-G group,...] \n"),
-               Prog);
-       fprintf(stderr,
-               _("\t\t[-d home] [-s shell] [-c comment] [-m [-k template]]\n"));
-       fprintf(stderr, "\t\t");
+       fprintf (stderr,
+                _
+                ("usage: %s\t[-u uid [-o]] [-g group] [-G group,...] \n"),
+                Prog);
+       fprintf (stderr,
+                _
+                ("\t\t[-d home] [-s shell] [-c comment] [-m [-k template]]\n"));
+       fprintf (stderr, "\t\t");
 #ifdef SHADOWPWD
-       fprintf(stderr, _("[-f inactive] [-e expire ] "));
+       fprintf (stderr, _("[-f inactive] [-e expire ] "));
 #endif
 #ifdef AUTH_METHODS
-       fprintf(stderr, _("[-A program] "));
+       fprintf (stderr, _("[-A program] "));
 #endif
-       fprintf(stderr, _("[-p passwd] name\n"));
+       fprintf (stderr, _("[-p passwd] name\n"));
 
-       fprintf(stderr, _("       %s\t-D [-g group] [-b base] [-s shell]\n"),
-               Prog);
+       fprintf (stderr,
+                _("       %s\t-D [-g group] [-b base] [-s shell]\n"),
+                Prog);
 #ifdef SHADOWPWD
-       fprintf(stderr, _("\t\t[-f inactive] [-e expire ]\n"));
+       fprintf (stderr, _("\t\t[-f inactive] [-e expire ]\n"));
 #endif
 
-       exit(E_USAGE);
+       exit (E_USAGE);
 }
 
 /*
@@ -746,17 +766,16 @@ usage(void)
  *     fills in a (struct passwd) with them.
  */
 
-static void
-new_pwent(struct passwd *pwent)
+static void new_pwent (struct passwd *pwent)
 {
-       memzero(pwent, sizeof *pwent);
+       memzero (pwent, sizeof *pwent);
        pwent->pw_name = (char *) user_name;
 #ifdef SHADOWPWD
        if (is_shadow_pwd)
                pwent->pw_passwd = (char *) SHADOW_PASSWD_STRING;
        else
 #endif
-       pwent->pw_passwd = (char *) user_pass;
+               pwent->pw_passwd = (char *) user_pass;
 
 #ifdef ATT_AGE
        pwent->pw_age = (char *) "";
@@ -775,13 +794,12 @@ new_pwent(struct passwd *pwent)
 }
 
 #ifdef SHADOWPWD
-static long
-scale_age(long x)
+static long scale_age (long x)
 {
        if (x <= 0)
                return x;
 
-       return x * (DAY/SCALE);
+       return x * (DAY / SCALE);
 }
 
 /*
@@ -791,18 +809,17 @@ scale_age(long x)
  *     fills in a (struct spwd) with them.
  */
 
-static void
-new_spent(struct spwd *spent)
+static void new_spent (struct spwd *spent)
 {
-       memzero(spent, sizeof *spent);
+       memzero (spent, sizeof *spent);
        spent->sp_namp = (char *) user_name;
        spent->sp_pwdp = (char *) user_pass;
-       spent->sp_lstchg = time((time_t *) 0) / SCALE;
-       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);
+       spent->sp_lstchg = time ((time_t *) 0) / SCALE;
+       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);
        spent->sp_flag = -1;
 }
 #endif
@@ -814,39 +831,41 @@ new_spent(struct spwd *spent)
  *     and adds the user to each group given by that set.
  */
 
-static void
-grp_update(void)
+static void grp_update (void)
 {
        const struct group *grp;
        struct group *ngrp;
+
 #ifdef SHADOWGRP
        const struct sgrp *sgrp;
        struct sgrp *nsgrp;
 #endif
 
        /*
-        * Lock and open the group file.  This will load all of the group
+        * Lock and open the group file. This will load all of the group
         * entries.
         */
 
-       if (! gr_lock ()) {
-               fprintf(stderr, _("%s: error locking group file\n"), Prog);
-               fail_exit(E_GRP_UPDATE);
+       if (!gr_lock ()) {
+               fprintf (stderr, _("%s: error locking group file\n"),
+                        Prog);
+               fail_exit (E_GRP_UPDATE);
        }
-       if (! gr_open (O_RDWR)) {
-               fprintf(stderr, _("%s: error opening group file\n"), Prog);
-               fail_exit(E_GRP_UPDATE);
+       if (!gr_open (O_RDWR)) {
+               fprintf (stderr, _("%s: error opening group file\n"),
+                        Prog);
+               fail_exit (E_GRP_UPDATE);
        }
 #ifdef SHADOWGRP
-       if (is_shadow_grp && ! sgr_lock ()) {
-               fprintf(stderr, _("%s: error locking shadow group file\n"),
-                       Prog);
-               fail_exit(E_GRP_UPDATE);
+       if (is_shadow_grp && !sgr_lock ()) {
+               fprintf (stderr,
+                        _("%s: error locking shadow group file\n"), Prog);
+               fail_exit (E_GRP_UPDATE);
        }
-       if (is_shadow_grp && ! sgr_open (O_RDWR)) {
-               fprintf(stderr, _("%s: error opening shadow group file\n"),
-                       Prog);
-               fail_exit(E_GRP_UPDATE);
+       if (is_shadow_grp && !sgr_open (O_RDWR)) {
+               fprintf (stderr,
+                        _("%s: error opening shadow group file\n"), Prog);
+               fail_exit (E_GRP_UPDATE);
        }
 #endif
 
@@ -855,14 +874,14 @@ grp_update(void)
         * the user is a member of.
         */
 
-       for (gr_rewind (), grp = gr_next ();grp;grp = gr_next ()) {
+       for (gr_rewind (), grp = gr_next (); 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))
+               if (!is_on_list (user_groups, grp->gr_name))
                        continue;
 
                /*
@@ -870,9 +889,9 @@ grp_update(void)
                 * from the old entry, and we need it later.
                 */
 
-               ngrp = __gr_dup(grp);
+               ngrp = __gr_dup (grp);
                if (!ngrp) {
-                       fail_exit(E_GRP_UPDATE);  /* XXX */
+                       fail_exit (E_GRP_UPDATE);       /* XXX */
                }
 
                /* 
@@ -881,25 +900,27 @@ grp_update(void)
                 */
 
                ngrp->gr_mem = add_list (ngrp->gr_mem, user_name);
-               if (!gr_update(ngrp)) {
-                       fprintf(stderr, "%s: error adding new group entry\n",
-                               Prog);
-                       fail_exit(E_GRP_UPDATE);
+               if (!gr_update (ngrp)) {
+                       fprintf (stderr,
+                                "%s: error adding new group entry\n",
+                                Prog);
+                       fail_exit (E_GRP_UPDATE);
                }
 #ifdef NDBM
                /*
                 * Update the DBM group file with the new entry as well.
                 */
 
-               if (!gr_dbm_update(ngrp)) {
-                       fprintf(stderr, "%s: cannot add new dbm group entry\n",
-                               Prog);
-                       fail_exit(E_GRP_UPDATE);
+               if (!gr_dbm_update (ngrp)) {
+                       fprintf (stderr,
+                                "%s: cannot add new dbm group entry\n",
+                                Prog);
+                       fail_exit (E_GRP_UPDATE);
                } else
                        gr_dbm_added++;
 #endif
-               SYSLOG((LOG_INFO, "add `%s' to group `%s'\n",
-                       user_name, ngrp->gr_name));
+               SYSLOG ((LOG_INFO, "add `%s' to group `%s'",
+                        user_name, ngrp->gr_name));
        }
 #ifdef NDBM
        endgrent ();
@@ -911,21 +932,21 @@ grp_update(void)
 
        /*
         * Scan through the entire shadow group file looking for the groups
-        * that the user is a member of.  The administrative list isn't
+        * that the user is a member of. The administrative list isn't
         * modified.
         */
 
-       for (sgr_rewind (), sgrp = sgr_next ();sgrp;sgrp = sgr_next ()) {
+       for (sgr_rewind (), sgrp = sgr_next (); sgrp; sgrp = sgr_next ()) {
 
                /*
                 * See if the user specified this group as one of their
                 * concurrent groups.
                 */
 
-               if (!gr_locate(sgrp->sg_name))
+               if (!gr_locate (sgrp->sg_name))
                        continue;
 
-               if (!is_on_list(user_groups, sgrp->sg_name))
+               if (!is_on_list (user_groups, sgrp->sg_name))
                        continue;
 
                /*
@@ -933,9 +954,9 @@ grp_update(void)
                 * from the old entry, and we need it later.
                 */
 
-               nsgrp = __sgr_dup(sgrp);
+               nsgrp = __sgr_dup (sgrp);
                if (!nsgrp) {
-                       fail_exit(E_GRP_UPDATE);  /* XXX */
+                       fail_exit (E_GRP_UPDATE);       /* XXX */
                }
 
                /* 
@@ -944,32 +965,32 @@ grp_update(void)
                 */
 
                nsgrp->sg_mem = add_list (nsgrp->sg_mem, user_name);
-               if (!sgr_update(nsgrp)) {
-                       fprintf(stderr,
-                               _("%s: error adding new group entry\n"),
-                               Prog);
-                       fail_exit(E_GRP_UPDATE);
+               if (!sgr_update (nsgrp)) {
+                       fprintf (stderr,
+                                _("%s: error adding new group entry\n"),
+                                Prog);
+                       fail_exit (E_GRP_UPDATE);
                }
 #ifdef NDBM
                /*
                 * Update the DBM group file with the new entry as well.
                 */
 
-               if (!sg_dbm_update(nsgrp)) {
-                       fprintf(stderr,
-                               _("%s: cannot add new dbm group entry\n"),
-                               Prog);
-                       fail_exit(E_GRP_UPDATE);
+               if (!sg_dbm_update (nsgrp)) {
+                       fprintf (stderr,
+                                _("%s: cannot add new dbm group entry\n"),
+                                Prog);
+                       fail_exit (E_GRP_UPDATE);
                } else
                        sg_dbm_added++;
-#endif /* NDBM */
-               SYSLOG((LOG_INFO, "add `%s' to shadow group `%s'\n",
-                       user_name, nsgrp->sg_name));
+#endif                         /* NDBM */
+               SYSLOG ((LOG_INFO, "add `%s' to shadow group `%s'",
+                        user_name, nsgrp->sg_name));
        }
 #ifdef NDBM
        endsgent ();
-#endif /* NDBM */
-#endif /* SHADOWGRP */
+#endif                         /* NDBM */
+#endif                         /* SHADOWGRP */
 }
 
 /*
@@ -980,21 +1001,20 @@ grp_update(void)
  *     uniqueness.
  */
 
-static void
-find_new_uid(void)
+static void find_new_uid (void)
 {
        const struct passwd *pwd;
        uid_t uid_min, uid_max;
 
-       uid_min = getdef_num("UID_MIN", 100);
-       uid_max = getdef_num("UID_MAX", 60000);
+       uid_min = getdef_unum ("UID_MIN", 100);
+       uid_max = getdef_unum ("UID_MAX", 60000);
 
        /*
         * Start with some UID value if the user didn't provide us with
         * one already.
         */
 
-       if (! uflg)
+       if (!uflg)
                user_id = uid_min;
 
        /*
@@ -1004,23 +1024,23 @@ find_new_uid(void)
         */
 
 #ifdef NO_GETPWENT
-       pw_rewind();
-       while ((pwd = pw_next())) {
-#else  /* using getpwent() we can check against NIS users etc.  */
-       setpwent();
-       while ((pwd = getpwent())) {
-#endif
-               if (strcmp(user_name, pwd->pw_name) == 0) {
-                       fprintf(stderr, _("%s: name %s is not unique\n"),
-                               Prog, user_name);
-                       exit(E_NAME_IN_USE);
+       pw_rewind ();
+       while ((pwd = pw_next ())) {
+#else                          /* using getpwent() we can check against NIS users etc. */
+       setpwent ();
+       while ((pwd = getpwent ())) {
+#endif
+               if (strcmp (user_name, pwd->pw_name) == 0) {
+                       fprintf (stderr, _("%s: name %s is not unique\n"),
+                                Prog, user_name);
+                       exit (E_NAME_IN_USE);
                }
                if (uflg && user_id == pwd->pw_uid) {
-                       fprintf(stderr, _("%s: uid %d is not unique\n"),
-                               Prog, (int) user_id);
-                       exit(E_UID_IN_USE);
+                       fprintf (stderr, _("%s: uid %u is not unique\n"),
+                                Prog, (unsigned int) user_id);
+                       exit (E_UID_IN_USE);
                }
-               if (! uflg && pwd->pw_uid >= user_id) {
+               if (!uflg && pwd->pw_uid >= user_id) {
                        if (pwd->pw_uid > uid_max)
                                continue;
                        user_id = pwd->pw_uid + 1;
@@ -1028,27 +1048,27 @@ find_new_uid(void)
        }
        /*
         * 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
+        * will give us UID_MAX+1 even if not unique. Search for the first
         * free uid starting with UID_MIN (it's O(n*n) but can be avoided
         * by not having users with uid equal to UID_MAX).  --marekm
         */
        if (!uflg && user_id == uid_max + 1) {
                for (user_id = uid_min; user_id < uid_max; user_id++) {
 #ifdef NO_GETPWENT
-                       pw_rewind();
-                       while ((pwd = pw_next()) && pwd->pw_uid != user_id)
-                               ;
+                       pw_rewind ();
+                       while ((pwd = pw_next ())
+                              && pwd->pw_uid != user_id);
                        if (!pwd)
                                break;
 #else
-                       if (!getpwuid(user_id))
+                       if (!getpwuid (user_id))
                                break;
 #endif
                }
                if (user_id == uid_max) {
-                       fprintf(stderr, _("%s: can't get unique uid\n"),
-                               Prog);
-                       fail_exit(E_UID_IN_USE);
+                       fprintf (stderr, _("%s: can't get unique uid\n"),
+                                Prog);
+                       fail_exit (E_UID_IN_USE);
                }
        }
 }
@@ -1058,31 +1078,30 @@ find_new_uid(void)
  * convert_auth - convert the argument list to a authentication list
  */
 
-static void
-convert_auth(char *auths, const char *list)
+static void convert_auth (char *auths, const char *list)
 {
-       char    *cp, *end;
-       char    buf[257];
+       char *cp, *end;
+       char buf[257];
 
        /*
-        * Copy each method.  DEFAULT is replaced by an encrypted string
+        * Copy each method. DEFAULT is replaced by an encrypted string
         * if one can be found in the current authentication list.
         */
 
-       strcpy(buf, list);
+       strcpy (buf, list);
        auths[0] = '\0';
        for (cp = buf; cp; cp = end) {
                if (auths[0])
-                       strcat(auths, ";");
+                       strcat (auths, ";");
 
-               if ((end = strchr(cp, ',')))
+               if ((end = strchr (cp, ',')))
                        *end++ = '\0';
 
-               if (strcmp(cp, "DEFAULT") == 0) {
-                       strcat(auths, user_pass);
+               if (strcmp (cp, "DEFAULT") == 0) {
+                       strcat (auths, user_pass);
                } else {
-                       strcat(auths, "@");
-                       strcat(auths, cp);
+                       strcat (auths, "@");
+                       strcat (auths, cp);
                }
        }
 }
@@ -1091,12 +1110,11 @@ convert_auth(char *auths, const char *list)
  * valid_auth - check authentication list for validity
  */
 
-static int
-valid_auth(const char *methods)
+static int valid_auth (const char *methods)
 {
-       char    *cp, *end;
-       char    buf[257];
-       int     default_cnt = 0;
+       char *cp, *end;
+       char buf[257];
+       int default_cnt = 0;
 
        /*
         * Cursory checks, length and illegal characters
@@ -1105,7 +1123,7 @@ valid_auth(const char *methods)
        if ((int) strlen (methods) > 256)
                return 0;
 
-       if (! VALID (methods))
+       if (!VALID (methods))
                return 0;
 
        /*
@@ -1113,7 +1131,7 @@ valid_auth(const char *methods)
         */
 
        strcpy (buf, methods);
-       for (cp = buf;cp;cp = end) {
+       for (cp = buf; cp; cp = end) {
                if ((end = strchr (cp, ',')))
                        *end++ = '\0';
 
@@ -1124,18 +1142,17 @@ valid_auth(const char *methods)
        }
        return 1;
 }
-#endif  /* AUTH_METHODS */
+#endif                         /* AUTH_METHODS */
 
 /*
  * 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
+ *     the values that the user will be created with accordingly. The
  *     values are checked for sanity.
  */
 
-static void
-process_flags(int argc, char **argv)
+static void process_flags (int argc, char **argv)
 {
        const struct group *grp;
        int anyflag = 0;
@@ -1147,16 +1164,16 @@ process_flags(int argc, char **argv)
 #else
 #define FLAGS "A:Du:og:G:d:s:c:mk:p:b:O:M"
 #endif
-       while ((arg = getopt(argc, argv, FLAGS)) != EOF) {
+       while ((arg = getopt (argc, argv, FLAGS)) != EOF) {
 #undef FLAGS
                switch (arg) {
 #ifdef AUTH_METHODS
                case 'A':
-                       if (! valid_auth (optarg)) {
-                               fprintf(stderr,
-                                       _("%s: invalid field `%s'\n"),
-                                       Prog, optarg);
-                               exit(E_BAD_ARG);
+                       if (!valid_auth (optarg)) {
+                               fprintf (stderr,
+                                        _("%s: invalid field `%s'\n"),
+                                        Prog, optarg);
+                               exit (E_BAD_ARG);
                        }
                        auth_arg = optarg;
                        Aflg++;
@@ -1166,49 +1183,52 @@ process_flags(int argc, char **argv)
                        if (!Dflg)
                                usage ();
 
-                       if (!VALID(optarg) || optarg[0] != '/') {
-                               fprintf(stderr,
-                                       _("%s: invalid base directory `%s'\n"),
-                                       Prog, optarg);
-                               exit(E_BAD_ARG);
+                       if (!VALID (optarg) || optarg[0] != '/') {
+                               fprintf (stderr,
+                                        _
+                                        ("%s: invalid base directory `%s'\n"),
+                                        Prog, optarg);
+                               exit (E_BAD_ARG);
                        }
                        def_home = optarg;
                        bflg++;
                        break;
                case 'c':
-                       if (!VALID(optarg)) {
-                               fprintf(stderr,
-                                       _("%s: invalid comment `%s'\n"),
-                                       Prog, optarg);
-                               exit(E_BAD_ARG);
+                       if (!VALID (optarg)) {
+                               fprintf (stderr,
+                                        _("%s: invalid comment `%s'\n"),
+                                        Prog, optarg);
+                               exit (E_BAD_ARG);
                        }
                        user_comment = optarg;
                        cflg++;
                        break;
                case 'd':
-                       if (!VALID(optarg) || optarg[0] != '/') {
-                               fprintf(stderr,
-                                       _("%s: invalid home directory `%s'\n"),
-                                       Prog, optarg);
-                               exit(E_BAD_ARG);
+                       if (!VALID (optarg) || optarg[0] != '/') {
+                               fprintf (stderr,
+                                        _
+                                        ("%s: invalid home directory `%s'\n"),
+                                        Prog, optarg);
+                               exit (E_BAD_ARG);
                        }
                        user_home = optarg;
                        dflg++;
                        break;
                case 'D':
                        if (anyflag)
-                               usage();
+                               usage ();
                        Dflg++;
                        break;
 #ifdef SHADOWPWD
                case 'e':
                        if (*optarg) {
-                               user_expire = strtoday(optarg);
+                               user_expire = strtoday (optarg);
                                if (user_expire == -1) {
-                                       fprintf(stderr,
-                                               _("%s: invalid date `%s'\n"),
-                                               Prog, optarg);
-                                       exit(E_BAD_ARG);
+                                       fprintf (stderr,
+                                                _
+                                                ("%s: invalid date `%s'\n"),
+                                                Prog, optarg);
+                                       exit (E_BAD_ARG);
                                }
                        } else
                                user_expire = -1;
@@ -1217,35 +1237,38 @@ process_flags(int argc, char **argv)
                         * -e "" is allowed - it's a no-op without /etc/shadow
                         */
                        if (*optarg && !is_shadow_pwd) {
-                               fprintf(stderr,
-                                       _("%s: shadow passwords required for -e\n"),
-                                       Prog);
-                               exit(E_USAGE);
+                               fprintf (stderr,
+                                        _
+                                        ("%s: shadow passwords required for -e\n"),
+                                        Prog);
+                               exit (E_USAGE);
                        }
                        if (Dflg)
                                def_expire = optarg;
                        eflg++;
                        break;
                case 'f':
-                       def_inactive = get_number(optarg);
+                       def_inactive = get_number (optarg);
                        /*
                         * -f -1 is allowed - it's a no-op without /etc/shadow
                         */
                        if (def_inactive != -1 && !is_shadow_pwd) {
-                               fprintf(stderr,
-                                       _("%s: shadow passwords required for -f\n"),
-                                       Prog);
-                               exit(E_USAGE);
+                               fprintf (stderr,
+                                        _
+                                        ("%s: shadow passwords required for -f\n"),
+                                        Prog);
+                               exit (E_USAGE);
                        }
                        fflg++;
                        break;
 #endif
                case 'g':
-                       grp = getgr_nam_gid(optarg);
+                       grp = getgr_nam_gid (optarg);
                        if (!grp) {
-                               fprintf(stderr, _("%s: unknown group %s\n"),
-                                       Prog, optarg);
-                               exit(E_NOTFOUND);
+                               fprintf (stderr,
+                                        _("%s: unknown group %s\n"), Prog,
+                                        optarg);
+                               exit (E_NOTFOUND);
                        }
                        if (Dflg) {
                                def_group = grp->gr_gid;
@@ -1256,8 +1279,8 @@ process_flags(int argc, char **argv)
                        gflg++;
                        break;
                case 'G':
-                       if (get_groups(optarg))
-                               exit(E_NOTFOUND);
+                       if (get_groups (optarg))
+                               exit (E_NOTFOUND);
                        if (user_groups[0])
                                do_grp_update++;
                        Gflg++;
@@ -1284,43 +1307,46 @@ process_flags(int argc, char **argv)
                         * example: -O UID_MIN=100 -O UID_MAX=499
                         * note: -O UID_MIN=10,UID_MAX=499 doesn't work yet
                         */
-                       cp = strchr(optarg, '=');
+                       cp = strchr (optarg, '=');
                        if (!cp) {
-                               fprintf(stderr,
-                                       _("%s: -O requires NAME=VALUE\n"),
-                                       Prog);
-                               exit(E_BAD_ARG);
+                               fprintf (stderr,
+                                        _("%s: -O requires NAME=VALUE\n"),
+                                        Prog);
+                               exit (E_BAD_ARG);
                        }
                        /* terminate name, point to value */
                        *cp++ = '\0';
-                       if (putdef_str(optarg, cp) < 0)
-                               exit(E_BAD_ARG);
+                       if (putdef_str (optarg, cp) < 0)
+                               exit (E_BAD_ARG);
                        break;
-               case 'p':  /* set encrypted password */
-                       if (!VALID(optarg)) {
-                               fprintf(stderr, _("%s: invalid field `%s'\n"),
-                                       Prog, optarg);
-                               exit(E_BAD_ARG);
+               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 's':
-                       if (!VALID(optarg) || (optarg[0] &&
-                           (optarg[0] != '/' && optarg[0] != '*'))) {
-                               fprintf(stderr, _("%s: invalid shell `%s'\n"),
-                                       Prog, optarg);
-                               exit(E_BAD_ARG);
+                       if (!VALID (optarg) || (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++;
                        break;
                case 'u':
-                       user_id = get_number(optarg);
+                       user_id = get_uid (optarg);
                        uflg++;
                        break;
                default:
-                       usage();
+                       usage ();
                }
                anyflag++;
        }
@@ -1330,40 +1356,41 @@ process_flags(int argc, char **argv)
         * Check it here so that they can be specified in any order.
         */
        if ((oflg && !uflg) || (kflg && !mflg))
-               usage();
+               usage ();
 
        /*
-        * Either -D or username is required.  Defaults can be set with -D
+        * 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();
+                       usage ();
 
                if (uflg || oflg || Gflg || dflg || cflg || mflg)
-                       usage();
+                       usage ();
        } else {
                if (optind != argc - 1)
-                       usage();
+                       usage ();
 
                user_name = argv[optind];
-               if (!check_user_name(user_name)) {
-                       fprintf(stderr, _("%s: invalid user name `%s'\n"),
-                               Prog, user_name);
-                       exit(E_BAD_ARG);
+               if (!check_user_name (user_name)) {
+                       fprintf (stderr, _("%s: invalid user name `%s'\n"),
+                                Prog, user_name);
+                       exit (E_BAD_ARG);
                }
                if (!dflg) {
                        char *uh;
 
-                       uh = xmalloc(strlen(def_home) + strlen(user_name) + 2);
-                       sprintf(uh, "%s/%s", def_home, user_name);
+                       uh = xmalloc (strlen (def_home) +
+                                     strlen (user_name) + 2);
+                       sprintf (uh, "%s/%s", def_home, user_name);
                        user_home = uh;
                }
        }
 
 #ifdef SHADOWPWD
        if (!eflg)
-               user_expire = strtoday(def_expire);
+               user_expire = strtoday (def_expire);
 #endif
 
        if (!gflg)
@@ -1377,46 +1404,49 @@ process_flags(int argc, char **argv)
  * 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.
+ *     new user. This causes any modified entries to be written out.
  */
 
-static void
-close_files(void)
+static void close_files (void)
 {
-       if (!pw_close()) {
-               fprintf(stderr, _("%s: cannot rewrite password file\n"), Prog);
-               fail_exit(E_PW_UPDATE);
+       if (!pw_close ()) {
+               fprintf (stderr, _("%s: cannot rewrite password file\n"),
+                        Prog);
+               fail_exit (E_PW_UPDATE);
        }
 #ifdef SHADOWPWD
-       if (is_shadow_pwd && !spw_close()) {
-               fprintf(stderr, _("%s: cannot rewrite shadow password file\n"),
-                       Prog);
-               fail_exit(E_PW_UPDATE);
+       if (is_shadow_pwd && !spw_close ()) {
+               fprintf (stderr,
+                        _("%s: cannot rewrite shadow password file\n"),
+                        Prog);
+               fail_exit (E_PW_UPDATE);
        }
 #endif
        if (do_grp_update) {
-               if (!gr_close()) {
-                       fprintf(stderr, _("%s: cannot rewrite group file\n"),
-                               Prog);
-                       fail_exit(E_GRP_UPDATE);
+               if (!gr_close ()) {
+                       fprintf (stderr,
+                                _("%s: cannot rewrite group file\n"),
+                                Prog);
+                       fail_exit (E_GRP_UPDATE);
                }
-               gr_unlock();
+               gr_unlock ();
 #ifdef SHADOWGRP
-               if (is_shadow_grp && !sgr_close()) {
+               if (is_shadow_grp && !sgr_close ()) {
                        fprintf (stderr,
-                               _("%s: cannot rewrite shadow group file\n"),
-                               Prog);
-                       fail_exit(E_GRP_UPDATE);
+                                _
+                                ("%s: cannot rewrite shadow group file\n"),
+                                Prog);
+                       fail_exit (E_GRP_UPDATE);
                }
                if (is_shadow_grp)
-                       sgr_unlock();
+                       sgr_unlock ();
 #endif
        }
 #ifdef SHADOWPWD
        if (is_shadow_pwd)
-               spw_unlock();
+               spw_unlock ();
 #endif
-       pw_unlock();
+       pw_unlock ();
 }
 
 /*
@@ -1425,63 +1455,64 @@ close_files(void)
  *     open_files() opens the two password files.
  */
 
-static void
-open_files(void)
+static void open_files (void)
 {
-       if (!pw_lock()) {
-               fprintf(stderr, _("%s: unable to lock password file\n"), Prog);
-               exit(E_PW_UPDATE);
+       if (!pw_lock ()) {
+               fprintf (stderr, _("%s: unable to lock password file\n"),
+                        Prog);
+               exit (E_PW_UPDATE);
        }
-       if (!pw_open(O_RDWR)) {
-               fprintf(stderr, _("%s: unable to open password file\n"), Prog);
-               pw_unlock();
-               exit(E_PW_UPDATE);
+       if (!pw_open (O_RDWR)) {
+               fprintf (stderr, _("%s: unable to open password file\n"),
+                        Prog);
+               pw_unlock ();
+               exit (E_PW_UPDATE);
        }
 #ifdef SHADOWPWD
-       if (is_shadow_pwd && !spw_lock()) {
-               fprintf(stderr, _("%s: cannot lock shadow password file\n"),
-                       Prog);
-               pw_unlock();
-               exit(E_PW_UPDATE);
+       if (is_shadow_pwd && !spw_lock ()) {
+               fprintf (stderr,
+                        _("%s: cannot lock shadow password file\n"),
+                        Prog);
+               pw_unlock ();
+               exit (E_PW_UPDATE);
        }
-       if (is_shadow_pwd && !spw_open(O_RDWR)) {
-               fprintf(stderr, _("%s: cannot open shadow password file\n"),
-                       Prog);
-               spw_unlock();
-               pw_unlock();
-               exit(E_PW_UPDATE);
+       if (is_shadow_pwd && !spw_open (O_RDWR)) {
+               fprintf (stderr,
+                        _("%s: cannot open shadow password file\n"),
+                        Prog);
+               spw_unlock ();
+               pw_unlock ();
+               exit (E_PW_UPDATE);
        }
 #endif
 }
 
 
-static void
-faillog_reset(uid_t uid)
+static void faillog_reset (uid_t uid)
 {
        struct faillog fl;
        int fd;
 
-       fd = open(FAILLOG_FILE, O_RDWR);
+       fd = open (FAILLOG_FILE, O_RDWR);
        if (fd >= 0) {
-               memzero(&fl, sizeof(fl));
-               lseek(fd, (off_t) sizeof(fl) * uid, SEEK_SET);
-               write(fd, &fl, sizeof(fl));
-               close(fd);
+               memzero (&fl, sizeof (fl));
+               lseek (fd, (off_t) sizeof (fl) * uid, SEEK_SET);
+               write (fd, &fl, sizeof (fl));
+               close (fd);
        }
 }
 
-static void
-lastlog_reset(uid_t uid)
+static void lastlog_reset (uid_t uid)
 {
        struct lastlog ll;
        int fd;
 
-       fd = open(LASTLOG_FILE, O_RDWR);
+       fd = open (LASTLOG_FILE, O_RDWR);
        if (fd >= 0) {
-               memzero(&ll, sizeof(ll));
-               lseek(fd, (off_t) sizeof(ll) * uid, SEEK_SET);
-               write(fd, &ll, sizeof(ll));
-               close(fd);
+               memzero (&ll, sizeof (ll));
+               lseek (fd, (off_t) sizeof (ll) * uid, SEEK_SET);
+               write (fd, &ll, sizeof (ll));
+               close (fd);
        }
 }
 
@@ -1492,20 +1523,20 @@ lastlog_reset(uid_t uid)
  *     and will update the group entries if required.
  */
 
-static void
-usr_update(void)
+static void usr_update (void)
 {
-       struct  passwd  pwent;
+       struct passwd pwent;
+
 #ifdef SHADOWPWD
-       struct  spwd    spent;
+       struct spwd spent;
 #endif
 
-       if (! oflg)
+       if (!oflg)
                find_new_uid ();
 
 #ifdef AUTH_METHODS
        if (Aflg) {
-               convert_auth(user_auth, auth_arg);
+               convert_auth (user_auth, auth_arg);
                user_pass = user_auth;
        }
 #endif
@@ -1521,74 +1552,76 @@ usr_update(void)
 #endif
 
        /*
-        * Create a syslog entry.  We need to do this now in case anything
+        * Create a syslog entry. We need to do this now in case anything
         * happens so we know what we were trying to accomplish.
         */
 
 #ifdef AUTH_METHODS
-       SYSLOG((LOG_INFO,
-           "new user: name=%s, uid=%d, gid=%d, home=%s, shell=%s, auth=%s\n",
-               user_name, user_id, user_gid, user_home, user_shell,
-               Aflg ? auth_arg : "DEFAULT"));
+       SYSLOG ((LOG_INFO,
+                "new user: name=%s, uid=%u, gid=%u, home=%s, shell=%s, auth=%s",
+                user_name, (unsigned int) user_id, (unsigned int) user_gid, 
+                user_home, user_shell, Aflg ? auth_arg : "DEFAULT"));
 #else
-       SYSLOG((LOG_INFO,
-               "new user: name=%s, uid=%d, gid=%d, home=%s, shell=%s\n",
-               user_name, user_id, user_gid, user_home, user_shell));
+       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));
 #endif
 
 #ifdef AUTH_METHODS
        /*
         * Attempt to add the new user to any authentication programs
-        * which have been requested.  Since this is more likely to fail
+        * which have been requested. Since this is more likely to fail
         * than the update of the password file, we do this first.
         */
 
-       if (Aflg && pw_auth(user_auth, pwent.pw_name, PW_ADD, (char *) 0)) {
-               fprintf(stderr, _("%s: error adding authentication method\n"),
-                       Prog);
-               fail_exit(E_PW_UPDATE);  /* XXX */
+       if (Aflg && pw_auth (user_auth, pwent.pw_name, PW_ADD, (char *) 0)) {
+               fprintf (stderr,
+                        _("%s: error adding authentication method\n"),
+                        Prog);
+               fail_exit (E_PW_UPDATE);        /* XXX */
        }
-#endif  /* AUTH_METHODS */
+#endif                         /* AUTH_METHODS */
 
        /*
         * Initialize faillog and lastlog entries for this UID in case
-        * it belongs to a previously deleted user.  We do it only if
+        * 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
         */
 
-       if (!getpwuid(user_id)) {
-               faillog_reset(user_id);
-               lastlog_reset(user_id);
+       if (!getpwuid (user_id)) {
+               faillog_reset (user_id);
+               lastlog_reset (user_id);
        }
 
        /*
         * Put the new (struct passwd) in the table.
         */
 
-       if (! pw_update (&pwent)) {
-               fprintf(stderr, _("%s: error adding new password entry\n"),
-                       Prog);
-               exit(E_PW_UPDATE);
+       if (!pw_update (&pwent)) {
+               fprintf (stderr,
+                        _("%s: error adding new password entry\n"), Prog);
+               exit (E_PW_UPDATE);
        }
-
 #ifdef NDBM
        /*
-        * Update the DBM files.  This creates the user before the flat
-        * files are updated.  This is safe before the password field is
+        * Update the DBM files. This creates the user before the flat
+        * files are updated. This is safe before the password field is
         * either locked, or set to a valid authentication string.
         */
 
-       if (pw_dbm_present()) {
-               if (!pw_dbm_update(&pwent)) {
-                       fprintf(stderr,
-                               _("%s: error updating password dbm entry\n"),
-                               Prog);
-                       exit(E_PW_UPDATE);
+       if (pw_dbm_present ()) {
+               if (!pw_dbm_update (&pwent)) {
+                       fprintf (stderr,
+                                _
+                                ("%s: error updating password dbm entry\n"),
+                                Prog);
+                       exit (E_PW_UPDATE);
                } else
                        pw_dbm_added = 1;
        }
-       endpwent();
+       endpwent ();
 #endif
 
 #ifdef SHADOWPWD
@@ -1596,63 +1629,63 @@ usr_update(void)
         * Put the new (struct spwd) in the table.
         */
 
-       if (is_shadow_pwd && !spw_update(&spent)) {
-               fprintf(stderr,
-                       _("%s: error adding new shadow password entry\n"),
-                       Prog);
-               exit(E_PW_UPDATE);
+       if (is_shadow_pwd && !spw_update (&spent)) {
+               fprintf (stderr,
+                        _("%s: error adding new shadow password entry\n"),
+                        Prog);
+               exit (E_PW_UPDATE);
        }
-
 #ifdef NDBM
        /* 
-        * Update the DBM files for the shadow password.  This entry is
+        * Update the DBM files for the shadow password. This entry is
         * output before the entry in the flat file, but this is safe as
         * the password is locked or the authentication string has the
         * proper values.
         */
 
-       if (is_shadow_pwd && sp_dbm_present()) {
-               if (!sp_dbm_update(&spent)) {
-                       fprintf(stderr,
-                               _("%s: error updating shadow passwd dbm entry\n"),
-                               Prog);
-                       fail_exit(E_PW_UPDATE);
+       if (is_shadow_pwd && sp_dbm_present ()) {
+               if (!sp_dbm_update (&spent)) {
+                       fprintf (stderr,
+                                _
+                                ("%s: error updating shadow passwd dbm entry\n"),
+                                Prog);
+                       fail_exit (E_PW_UPDATE);
                } else
                        sp_dbm_added++;
-               endspent();
+               endspent ();
        }
 #endif
-#endif /* SHADOWPWD */
+#endif                         /* SHADOWPWD */
 
        /*
         * Do any group file updates for this user.
         */
 
        if (do_grp_update)
-               grp_update();
+               grp_update ();
 }
 
 /*
  * 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
+ *     already exist. It will be created mode 755 owned by the user
  *     with the user's default group.
  */
 
-static void
-create_home(void)
+static void create_home (void)
 {
-       if (access(user_home, F_OK)) {
+       if (access (user_home, F_OK)) {
                /* XXX - create missing parent directories.  --marekm */
                if (mkdir (user_home, 0)) {
-                       fprintf(stderr, _("%s: cannot create directory %s\n"),
-                               Prog, user_home);
-                       fail_exit(E_HOMEDIR);
+                       fprintf (stderr,
+                                _("%s: cannot create directory %s\n"),
+                                Prog, user_home);
+                       fail_exit (E_HOMEDIR);
                }
                chown (user_home, user_id, user_gid);
 #if 1
-               chmod(user_home, 0777 & ~getdef_num("UMASK", 077));
+               chmod (user_home, 0777 & ~getdef_num ("UMASK", 077));
 #else
                chmod (user_home, 0755);
 #endif
@@ -1662,17 +1695,16 @@ create_home(void)
 
 #ifdef USE_PAM
 static struct pam_conv conv = {
-    misc_conv,
-    NULL
+       misc_conv,
+       NULL
 };
-#endif /* USE_PAM */
+#endif                         /* USE_PAM */
 
 /*
  * main - useradd command
  */
 
-int
-main(int argc, char **argv)
+int main (int argc, char **argv)
 {
 #ifdef USE_PAM
        pam_handle_t *pamh = NULL;
@@ -1683,53 +1715,55 @@ main(int argc, char **argv)
         * Get my name so that I can use it to report errors.
         */
 
-       sys_ngroups=sysconf(_SC_NGROUPS_MAX);
-       user_groups=malloc((1+sys_ngroups)*sizeof(char *));
-       Prog = Basename(argv[0]);
+       sys_ngroups = sysconf (_SC_NGROUPS_MAX);
+       user_groups = malloc ((1 + sys_ngroups) * sizeof (char *));
+       Prog = Basename (argv[0]);
 
-       setlocale(LC_ALL, "");
-       bindtextdomain(PACKAGE, LOCALEDIR);
-       textdomain(PACKAGE);
+       setlocale (LC_ALL, "");
+       bindtextdomain (PACKAGE, LOCALEDIR);
+       textdomain (PACKAGE);
 
 #ifdef USE_PAM
        retval = PAM_SUCCESS;
 
-       pampw = getpwuid(getuid());
+       pampw = getpwuid (getuid ());
        if (pampw == NULL) {
                retval = PAM_USER_UNKNOWN;
        }
 
        if (retval == PAM_SUCCESS) {
-               retval = pam_start("useradd", pampw->pw_name, &conv, &pamh);
+               retval =
+                   pam_start ("useradd", pampw->pw_name, &conv, &pamh);
        }
 
        if (retval == PAM_SUCCESS) {
-               retval = pam_authenticate(pamh, 0);
+               retval = pam_authenticate (pamh, 0);
                if (retval != PAM_SUCCESS) {
-                       pam_end(pamh, retval);
+                       pam_end (pamh, retval);
                }
        }
 
        if (retval == PAM_SUCCESS) {
-               retval = pam_acct_mgmt(pamh, 0);
+               retval = pam_acct_mgmt (pamh, 0);
                if (retval != PAM_SUCCESS) {
-                       pam_end(pamh, retval);
+                       pam_end (pamh, retval);
                }
        }
 
        if (retval != PAM_SUCCESS) {
-               fprintf (stderr, _("%s: PAM authentication failed\n"), Prog);
+               fprintf (stderr, _("%s: PAM authentication failed\n"),
+                        Prog);
                exit (1);
        }
-#endif /* USE_PAM */
+#endif                         /* USE_PAM */
 
-       OPENLOG(Prog);
+       OPENLOG (Prog);
 
 #ifdef SHADOWPWD
-       is_shadow_pwd = spw_file_present();
+       is_shadow_pwd = spw_file_present ();
 #endif
 #ifdef SHADOWGRP
-       is_shadow_grp = sgr_file_present();
+       is_shadow_grp = sgr_file_present ();
 #endif
 
        /*
@@ -1747,9 +1781,9 @@ main(int argc, char **argv)
        sg_dbm_mode = O_RDWR;
 #endif
 #endif
-       get_defaults();
+       get_defaults ();
 
-       process_flags(argc, argv);
+       process_flags (argc, argv);
 
        /*
         * See if we are messing with the defaults file, or creating
@@ -1758,19 +1792,20 @@ main(int argc, char **argv)
 
        if (Dflg) {
                if (gflg || bflg || fflg || eflg || sflg)
-                       exit (set_defaults () ? 1:0);
+                       exit (set_defaults ()? 1 : 0);
 
-               show_defaults();
-               exit(E_SUCCESS);
+               show_defaults ();
+               exit (E_SUCCESS);
        }
 
        /*
         * Start with a quick check to see if the user exists.
         */
 
-       if (getpwnam(user_name)) {
-               fprintf(stderr, _("%s: user %s exists\n"), Prog, user_name);
-               exit(E_NAME_IN_USE);
+       if (getpwnam (user_name)) {
+               fprintf (stderr, _("%s: user %s exists\n"), Prog,
+                        user_name);
+               exit (E_NAME_IN_USE);
        }
 
        /*
@@ -1780,10 +1815,13 @@ main(int argc, char **argv)
         * --bero
         */
        if (!gflg) {
-           if (getgrnam(user_name)) {
-                fprintf(stderr, _("%s: group %s exists - if you want to add this user to that group, use -g.\n"), Prog, user_name);
-               exit(E_NAME_IN_USE);
-           }
+               if (getgrnam (user_name)) {
+                       fprintf (stderr,
+                                _
+                                ("%s: group %s exists - if you want to add this user to that group, use -g.\n"),
+                                Prog, user_name);
+                       exit (E_NAME_IN_USE);
+               }
        }
 
        /*
@@ -1798,31 +1836,32 @@ main(int argc, char **argv)
        if (mflg) {
                create_home ();
                copy_tree (def_template, user_home, user_id, user_gid);
-       } else if (getdef_str("CREATE_HOME")) {
+       } else if (getdef_str ("CREATE_HOME")) {
                /*
                 * RedHat added the CREATE_HOME option in login.defs in their
                 * version of shadow-utils (which makes -m the default, with
-                * new -M option to turn it off).  Unfortunately, this
+                * new -M option to turn it off). Unfortunately, this
                 * changes the way useradd works (it can be run by scripts
                 * expecting some standard behaviour), compared to other
                 * Unices and other Linux distributions, and also adds a lot
                 * of confusion :-(.
                 * So we now recognize CREATE_HOME and give a warning here
                 * (better than "configuration error ... notify administrator"
-                * errors in every program that reads /etc/login.defs).  -MM
+                * errors in every program that reads /etc/login.defs). -MM
                 */
-               fprintf(stderr,
-       _("%s: warning: CREATE_HOME not supported, please use -m instead.\n"),
-                       Prog);
+               fprintf (stderr,
+                        _
+                        ("%s: warning: CREATE_HOME not supported, please use -m instead.\n"),
+                        Prog);
        }
 
        close_files ();
 
 #ifdef USE_PAM
        if (retval == PAM_SUCCESS) {
-               retval = pam_chauthtok(pamh, 0);
+               retval = pam_chauthtok (pamh, 0);
                if (retval != PAM_SUCCESS) {
-                       pam_end(pamh, retval);
+                       pam_end (pamh, retval);
                }
        }
 
@@ -1832,9 +1871,8 @@ main(int argc, char **argv)
        }
 
        if (retval == PAM_SUCCESS)
-               pam_end(pamh, PAM_SUCCESS);
-#endif /* USE_PAM */
+               pam_end (pamh, PAM_SUCCESS);
+#endif                         /* USE_PAM */
 
-       exit(E_SUCCESS);
-       /*NOTREACHED*/
-}
+       exit (E_SUCCESS);
+ /*NOTREACHED*/}
index 88214490021e85dba2082a36084e8b7372724488..78691174c0ca4a1482e61f6551c4c57210047b24 100644 (file)
@@ -17,7 +17,7 @@
  * 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
+ * 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)
@@ -30,8 +30,7 @@
 #include <config.h>
 
 #include "rcsid.h"
-RCSID(PKG_VER "$Id: userdel.c,v 1.19 2000/10/09 19:02:20 kloczek Exp $")
-
+RCSID (PKG_VER "$Id: userdel.c,v 1.21 2002/01/05 15:41:44 kloczek Exp $")
 #include <sys/stat.h>
 #include <stdio.h>
 #include <errno.h>
@@ -40,18 +39,15 @@ RCSID(PKG_VER "$Id: userdel.c,v 1.19 2000/10/09 19:02:20 kloczek Exp $")
 #include <ctype.h>
 #include <fcntl.h>
 #include <utmp.h>
-
 #ifdef USE_PAM
 #include <security/pam_appl.h>
 #include <security/pam_misc.h>
 #include <pwd.h>
-#endif /* USE_PAM */
-
+#endif                         /* USE_PAM */
 #include "prototypes.h"
 #include "defines.h"
 #include "getdef.h"
 #include "pwauth.h"
-
 /*
  * exit status values
  */
@@ -62,22 +58,23 @@ RCSID(PKG_VER "$Id: userdel.c,v 1.19 2000/10/09 19:02:20 kloczek Exp $")
 #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 */
-
 static char *user_name;
 static uid_t user_id;
 static char *user_home;
 
-static char    *Prog;
+static char *Prog;
 static int fflg = 0, rflg = 0;
 
 #ifdef NDBM
-extern int     pw_dbm_mode;
+extern int pw_dbm_mode;
+
 #ifdef SHADOWPWD
-extern int     sp_dbm_mode;
+extern int sp_dbm_mode;
 #endif
-extern int     gr_dbm_mode;
+extern int gr_dbm_mode;
+
 #ifdef SHADOWGRP
-extern int     sg_dbm_mode;
+extern int sg_dbm_mode;
 #endif
 #endif
 
@@ -104,34 +101,33 @@ static int is_shadow_pwd;
 static int is_shadow_grp;
 #endif
 
-extern int optind;
-
 /* 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_busy(const char *, uid_t);
-static void user_cancel(const char *);
+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_busy (const char *, uid_t);
+static void user_cancel (const char *);
+
 #ifdef EXTRA_CHECK_HOME_DIR
-static int path_prefix(const char *, const char *);
+static int path_prefix (const char *, const char *);
 #endif
-static int is_owner(uid_t, const char *);
+static int is_owner (uid_t, const char *);
+
 #ifndef NO_REMOVE_MAILBOX
-static void remove_mailbox(void);
+static void remove_mailbox (void);
 #endif
 
 /*
  * usage - display usage message and exit
  */
 
-static void
-usage(void)
+static void usage (void)
 {
-       fprintf(stderr, _("usage: %s [-r] name\n"), Prog);
-       exit(E_USAGE);
+       fprintf (stderr, _("usage: %s [-r] name\n"), Prog);
+       exit (E_USAGE);
 }
 
 /*
@@ -145,29 +141,29 @@ usage(void)
  *     is enabled).
  */
 
-static void
-update_groups(void)
+static void update_groups (void)
 {
        const struct group *grp;
        struct group *ngrp;
+
 #ifdef SHADOWGRP
        const struct sgrp *sgrp;
        struct sgrp *nsgrp;
-#endif /* SHADOWGRP */
+#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 ();grp;grp = gr_next ()) {
+       for (gr_rewind (), grp = gr_next (); 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))
+               if (!is_on_list (grp->gr_mem, user_name))
                        continue;
 
                /* 
@@ -175,30 +171,31 @@ update_groups(void)
                 * update the group entry to reflect the change.
                 */
 
-               ngrp = __gr_dup(grp);
+               ngrp = __gr_dup (grp);
                if (!ngrp) {
-                       exit(13);  /* XXX */
+                       exit (13);      /* XXX */
                }
                ngrp->gr_mem = del_list (ngrp->gr_mem, user_name);
-               if (!gr_update(ngrp))
-                       fprintf(stderr, _("%s: error updating group entry\n"),
-                               Prog);
+               if (!gr_update (ngrp))
+                       fprintf (stderr,
+                                _("%s: error updating group entry\n"),
+                                Prog);
 
                /*
                 * Update the DBM group file with the new entry as well.
                 */
 
 #ifdef NDBM
-               if (!gr_dbm_update(ngrp))
-                       fprintf(stderr,
-                               _("%s: cannot update dbm group entry\n"),
-                               Prog);
-#endif /* NDBM */
-               SYSLOG((LOG_INFO, "delete `%s' from group `%s'\n",
-                       user_name, ngrp->gr_name));
+               if (!gr_dbm_update (ngrp))
+                       fprintf (stderr,
+                                _("%s: cannot update dbm group entry\n"),
+                                Prog);
+#endif                         /* NDBM */
+               SYSLOG ((LOG_INFO, "delete `%s' from group `%s'\n",
+                        user_name, ngrp->gr_name));
        }
 #ifdef NDBM
-       endgrent();
+       endgrent ();
 #endif
        /*
         * we've removed their name from all the groups above, so
@@ -206,23 +203,24 @@ update_groups(void)
         * user name, with no members, we delete it.
         */
 
-       grp = getgrnam(user_name);
-       if (grp && getdef_bool("USERGROUPS_ENAB") && (grp->gr_mem[0] == NULL)) {
+       grp = getgrnam (user_name);
+       if (grp && getdef_bool ("USERGROUPS_ENAB")
+           && (grp->gr_mem[0] == NULL)) {
 
-               gr_remove(grp->gr_name);
+               gr_remove (grp->gr_name);
 
                /*
                 * Update the DBM group file with the new entry as well.
                 */
 
 #ifdef NDBM
-               if (!gr_dbm_remove(grp))
-                       fprintf(stderr,
-                               _("%s: cannot remove dbm group entry\n"),
-                               Prog);
+               if (!gr_dbm_remove (grp))
+                       fprintf (stderr,
+                                _("%s: cannot remove dbm group entry\n"),
+                                Prog);
 #endif
-               SYSLOG((LOG_INFO, "removed group `%s' owned by `%s'\n",
-                       grp->gr_name, user_name));
+               SYSLOG ((LOG_INFO, "removed group `%s' owned by `%s'\n",
+                        grp->gr_name, user_name));
        }
 #ifdef NDBM
        endgrent ();
@@ -233,11 +231,11 @@ update_groups(void)
 
        /*
         * Scan through the entire shadow group file looking for the groups
-        * that the user is a member of.  Both the administrative list and
+        * that the user is a member of. Both the administrative list and
         * the ordinary membership list is checked.
         */
 
-       for (sgr_rewind (), sgrp = sgr_next ();sgrp;sgrp = sgr_next ()) {
+       for (sgr_rewind (), sgrp = sgr_next (); sgrp; sgrp = sgr_next ()) {
                int was_member, was_admin;
 
                /*
@@ -245,95 +243,100 @@ update_groups(void)
                 * concurrent groups.
                 */
 
-               was_member = is_on_list(sgrp->sg_mem, user_name);
-               was_admin = is_on_list(sgrp->sg_adm, user_name);
+               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);
+               nsgrp = __sgr_dup (sgrp);
                if (!nsgrp) {
-                       exit(13);  /* XXX */
+                       exit (13);      /* XXX */
                }
 
                if (was_member)
-                       nsgrp->sg_mem = del_list (nsgrp->sg_mem, user_name);
+                       nsgrp->sg_mem =
+                           del_list (nsgrp->sg_mem, user_name);
 
                if (was_admin)
-                       nsgrp->sg_adm = del_list (nsgrp->sg_adm, user_name);
+                       nsgrp->sg_adm =
+                           del_list (nsgrp->sg_adm, user_name);
 
-               if (!sgr_update(nsgrp))
-                       fprintf(stderr, _("%s: error updating group entry\n"),
-                               Prog);
+               if (!sgr_update (nsgrp))
+                       fprintf (stderr,
+                                _("%s: error updating group entry\n"),
+                                Prog);
 #ifdef NDBM
                /*
                 * Update the DBM group file with the new entry as well.
                 */
 
-               if (!sg_dbm_update(nsgrp))
-                       fprintf(stderr,
-                               _("%s: cannot update dbm group entry\n"),
-                               Prog);
-#endif /* NDBM */
-               SYSLOG((LOG_INFO, "delete `%s' from shadow group `%s'\n",
-                       user_name, nsgrp->sg_name));
+               if (!sg_dbm_update (nsgrp))
+                       fprintf (stderr,
+                                _("%s: cannot update dbm group entry\n"),
+                                Prog);
+#endif                         /* NDBM */
+               SYSLOG ((LOG_INFO, "delete `%s' from shadow group `%s'\n",
+                        user_name, nsgrp->sg_name));
        }
 #ifdef NDBM
        endsgent ();
-#endif /* NDBM */
-#endif /* SHADOWGRP */
+#endif                         /* NDBM */
+#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.
+ *     new user. This causes any modified entries to be written out.
  */
 
-static void
-close_files(void)
+static void close_files (void)
 {
-       if (!pw_close())
-               fprintf(stderr, _("%s: cannot rewrite password file\n"), Prog);
+       if (!pw_close ())
+               fprintf (stderr, _("%s: cannot rewrite password file\n"),
+                        Prog);
 #ifdef SHADOWPWD
-       if (is_shadow_pwd && !spw_close())
-               fprintf(stderr, _("%s: cannot rewrite shadow password file\n"),
-                       Prog);
+       if (is_shadow_pwd && !spw_close ())
+               fprintf (stderr,
+                        _("%s: cannot rewrite shadow password file\n"),
+                        Prog);
 #endif
 #ifdef HAVE_TCFS
-       if (!tcfs_close())
-               fprintf(stderr, _("%s: cannot rewrite TCFS key file\n"), Prog);
+       if (!tcfs_close ())
+               fprintf (stderr, _("%s: cannot rewrite TCFS key file\n"),
+                        Prog);
 #endif
-       if (! gr_close ())
-               fprintf(stderr, _("%s: cannot rewrite group file\n"),
-                       Prog);
+       if (!gr_close ())
+               fprintf (stderr, _("%s: cannot rewrite group file\n"),
+                        Prog);
 
        (void) gr_unlock ();
 #ifdef SHADOWGRP
-       if (is_shadow_grp && !sgr_close())
-               fprintf(stderr, _("%s: cannot rewrite shadow group file\n"),
-                       Prog);
+       if (is_shadow_grp && !sgr_close ())
+               fprintf (stderr,
+                        _("%s: cannot rewrite shadow group file\n"),
+                        Prog);
 
        if (is_shadow_grp)
-               (void) sgr_unlock();
+               (void) sgr_unlock ();
 #endif
 #ifdef SHADOWPWD
        if (is_shadow_pwd)
-               (void) spw_unlock();
+               (void) spw_unlock ();
 #endif
 #ifdef HAVE_TCFS
-       (void) tcfs_unlock();
+       (void) tcfs_unlock ();
 #endif
-       (void) pw_unlock();
+       (void) pw_unlock ();
 }
 
 /*
  * fail_exit - exit with a failure code after unlocking the files
  */
 
-static void
-fail_exit(int code)
+static void fail_exit (int code)
 {
        (void) pw_unlock ();
        (void) gr_unlock ();
@@ -349,7 +352,7 @@ fail_exit(int code)
        (void) tcfs_unlock ();
 #endif
 
-       exit(code);
+       exit (code);
 }
 
 /*
@@ -358,57 +361,64 @@ fail_exit(int code)
  *     open_files() opens the two password files.
  */
 
-static void
-open_files(void)
+static void open_files (void)
 {
-       if (!pw_lock()) {
-               fprintf(stderr, _("%s: unable to lock password file\n"), Prog);
-               exit(E_PW_UPDATE);
+       if (!pw_lock ()) {
+               fprintf (stderr, _("%s: unable to lock password file\n"),
+                        Prog);
+               exit (E_PW_UPDATE);
        }
-       if (! pw_open (O_RDWR)) {
-               fprintf(stderr, _("%s: unable to open password file\n"), Prog);
-               fail_exit(E_PW_UPDATE);
+       if (!pw_open (O_RDWR)) {
+               fprintf (stderr, _("%s: unable to open password file\n"),
+                        Prog);
+               fail_exit (E_PW_UPDATE);
        }
 #ifdef SHADOWPWD
-       if (is_shadow_pwd && ! spw_lock ()) {
-               fprintf(stderr, _("%s: cannot lock shadow password file\n"),
-                       Prog);
-               fail_exit(E_PW_UPDATE);
+       if (is_shadow_pwd && !spw_lock ()) {
+               fprintf (stderr,
+                        _("%s: cannot lock shadow password file\n"),
+                        Prog);
+               fail_exit (E_PW_UPDATE);
        }
-       if (is_shadow_pwd && ! spw_open (O_RDWR)) {
-               fprintf(stderr, _("%s: cannot open shadow password file\n"),
-                       Prog);
-               fail_exit(E_PW_UPDATE);
+       if (is_shadow_pwd && !spw_open (O_RDWR)) {
+               fprintf (stderr,
+                        _("%s: cannot open shadow password file\n"),
+                        Prog);
+               fail_exit (E_PW_UPDATE);
        }
 #endif
 #ifdef HAVE_TCFS
-       if (!tcfs_lock()) {
-               fprintf(stderr, _("%s: cannot lock TCFS key file\n"), Prog);
-               fail_exit(E_PW_UPDATE);
+       if (!tcfs_lock ()) {
+               fprintf (stderr, _("%s: cannot lock TCFS key file\n"),
+                        Prog);
+               fail_exit (E_PW_UPDATE);
        }
-       if (!tcfs_open(O_RDWR)) {
-               fprintf(stderr, _("%s: cannot open TCFS key file\n"), Prog);
-               fail_exit(E_PW_UPDATE);
+       if (!tcfs_open (O_RDWR)) {
+               fprintf (stderr, _("%s: cannot open TCFS key file\n"),
+                        Prog);
+               fail_exit (E_PW_UPDATE);
        }
 #endif
-       if (! gr_lock ()) {
-               fprintf(stderr, _("%s: unable to lock group file\n"), Prog);
-               fail_exit(E_GRP_UPDATE);
+       if (!gr_lock ()) {
+               fprintf (stderr, _("%s: unable to lock group file\n"),
+                        Prog);
+               fail_exit (E_GRP_UPDATE);
        }
-       if (! gr_open (O_RDWR)) {
-               fprintf(stderr, _("%s: cannot open group file\n"), Prog);
-               fail_exit(E_GRP_UPDATE);
+       if (!gr_open (O_RDWR)) {
+               fprintf (stderr, _("%s: cannot open group file\n"), Prog);
+               fail_exit (E_GRP_UPDATE);
        }
 #ifdef SHADOWGRP
-       if (is_shadow_grp && ! sgr_lock ()) {
-               fprintf(stderr, _("%s: unable to lock shadow group file\n"),
-                       Prog);
-               fail_exit(E_GRP_UPDATE);
+       if (is_shadow_grp && !sgr_lock ()) {
+               fprintf (stderr,
+                        _("%s: unable to lock shadow group file\n"),
+                        Prog);
+               fail_exit (E_GRP_UPDATE);
        }
-       if (is_shadow_grp && ! sgr_open (O_RDWR)) {
-               fprintf(stderr, _("%s: cannot open shadow group file\n"),
-                               Prog);
-               fail_exit(E_GRP_UPDATE);
+       if (is_shadow_grp && !sgr_open (O_RDWR)) {
+               fprintf (stderr, _("%s: cannot open shadow group file\n"),
+                        Prog);
+               fail_exit (E_GRP_UPDATE);
        }
 #endif
 }
@@ -420,137 +430,145 @@ open_files(void)
  *     and will update the group entries as required.
  */
 
-static void
-update_user(void)
+static void update_user (void)
 {
 #if defined(AUTH_METHODS) || defined(NDBM)
-       struct  passwd  *pwd;
+       struct passwd *pwd;
 #endif
 #ifdef AUTH_METHODS
-#ifdef SHADOWPWD
-       struct  spwd    *spwd;
+#ifdef SHADOWPWD
+       struct spwd *spwd;
 
        if (is_shadow_pwd && (spwd = spw_locate (user_name)) &&
            spwd->sp_pwdp[0] == '@') {
-               if (pw_auth (spwd->sp_pwdp + 1, user_name, PW_DELETE, (char *) 0)) {
-                       SYSLOG((LOG_ERR,
-                               "failed deleting auth `%s' for user `%s'\n",
-                               spwd->sp_pwdp + 1, user_name));
-                       fprintf(stderr,
-                               _("%s: error deleting authentication\n"),
-                               Prog);
+               if (pw_auth
+                   (spwd->sp_pwdp + 1, user_name, PW_DELETE,
+                    (char *) 0)) {
+                       SYSLOG ((LOG_ERR,
+                                "failed deleting auth `%s' for user `%s'\n",
+                                spwd->sp_pwdp + 1, user_name));
+                       fprintf (stderr,
+                                _("%s: error deleting authentication\n"),
+                                Prog);
                } else {
-                       SYSLOG((LOG_INFO,
-                               "delete auth `%s' for user `%s'\n",
-                               spwd->sp_pwdp + 1, user_name));
+                       SYSLOG ((LOG_INFO,
+                                "delete auth `%s' for user `%s'\n",
+                                spwd->sp_pwdp + 1, user_name));
                }
        }
-#endif /* SHADOWPWD */
-       if ((pwd = pw_locate(user_name)) && pwd->pw_passwd[0] == '@') {
-               if (pw_auth(pwd->pw_passwd + 1, user_name, PW_DELETE, (char *) 0)) {
-                       SYSLOG((LOG_ERR,
-                               "failed deleting auth `%s' for user `%s'\n",
-                               pwd->pw_passwd + 1, user_name));
-                       fprintf(stderr,
-                               _("%s: error deleting authentication\n"),
-                               Prog);
+#endif                         /* SHADOWPWD */
+       if ((pwd = pw_locate (user_name)) && pwd->pw_passwd[0] == '@') {
+               if (pw_auth
+                   (pwd->pw_passwd + 1, user_name, PW_DELETE,
+                    (char *) 0)) {
+                       SYSLOG ((LOG_ERR,
+                                "failed deleting auth `%s' for user `%s'\n",
+                                pwd->pw_passwd + 1, user_name));
+                       fprintf (stderr,
+                                _("%s: error deleting authentication\n"),
+                                Prog);
                } else {
-                       SYSLOG((LOG_INFO, "delete auth `%s' for user `%s'\n",
-                               pwd->pw_passwd + 1, user_name);
-               }
-       }
-#endif  /* AUTH_METHODS */
-       if (!pw_remove(user_name))
-               fprintf(stderr, _("%s: error deleting password entry\n"), Prog);
-#ifdef SHADOWPWD
-       if (is_shadow_pwd && ! spw_remove (user_name))
-               fprintf(stderr, _("%s: error deleting shadow password entry\n"),
-                       Prog);
+               SYSLOG ((LOG_INFO,
+                                "delete auth `%s' for user `%s'\n",
+                                pwd->pw_passwd + 1, user_name);}
+                       }
+#endif                         /* AUTH_METHODS */
+                       if (!pw_remove (user_name))
+                       fprintf (stderr,
+                                _
+                                ("%s: error deleting password entry\n"),
+                                Prog);
+#ifdef SHADOWPWD
+                       if (is_shadow_pwd && !spw_remove (user_name))
+                       fprintf (stderr,
+                                _
+                                ("%s: error deleting shadow password entry\n"),
+                                Prog);
 #endif
 #ifdef HAVE_TCFS
-       if (tcfs_locate (user_name)) {
-               if (!tcfs_remove (user_name)) {
-                       SYSLOG((LOG_ERR,
-                               "failed deleting TCFS entry for user `%s'\n",
-                               user_name));
-                       fprintf(stderr, _("%s: error deleting TCFS entry\n"),
-                               Prog);
-               } else {
-                       SYSLOG((LOG_INFO,
-                               "delete TCFS entry for user `%s'\n",
-                               user_name));
-               }
-       }
-#endif /* HAVE_TCFS */
+                       if (tcfs_locate (user_name)) {
+                       if (!tcfs_remove (user_name)) {
+                       SYSLOG ((LOG_ERR,
+                                "failed deleting TCFS entry for user `%s'\n",
+                                user_name));
+                       fprintf (stderr,
+                                _
+                                ("%s: error deleting TCFS entry\n"),
+                                Prog);}
+                       else {
+                       SYSLOG ((LOG_INFO,
+                                "delete TCFS entry for user `%s'\n",
+                                user_name));}
+                       }
+#endif                         /* HAVE_TCFS */
 #ifdef NDBM
-       if (pw_dbm_present()) {
-               if ((pwd = getpwnam (user_name)) && ! pw_dbm_remove (pwd))
-                       fprintf(stderr,
-                               _("%s: error deleting password dbm entry\n"),
-                               Prog);
-       }
-
-       /*
-        * If the user's UID is a duplicate the duplicated entry needs
-        * to be updated so that a UID match can be found in the DBM
-        * files.
-        */
+                       if (pw_dbm_present ()) {
+                       if ((pwd = getpwnam (user_name))
+                           && !pw_dbm_remove (pwd))
+                       fprintf (stderr,
+                                _
+                                ("%s: error deleting password dbm entry\n"),
+                                Prog);
+                       /*
+                        * If the user's UID is a
+                        * duplicate the duplicated
+                        * entry needs to be updated
+                        * so that a UID match can
+                        * be found in the DBM
+                        * files.
+                        */
+                       for (pw_rewind (), pwd = pw_next (); pwd;
+                            pwd = pw_next ()) {
+                       if (pwd->pw_uid == user_id) {
+                       pw_dbm_update (pwd); break;}
+                       }
+                       }
+                       }
 
-       for (pw_rewind (), pwd = pw_next ();pwd;pwd = pw_next ()) {
-               if (pwd->pw_uid == user_id) {
-                       pw_dbm_update (pwd);
-                       break;
-               }
-       }
 #ifdef SHADOWPWD
-       if (is_shadow_pwd && sp_dbm_present() && !sp_dbm_remove(user_name))
-               fprintf(stderr,
-                       _("%s: error deleting shadow passwd dbm entry\n"),
-                       Prog);
-
-       endspent ();
-#endif
-       endpwent ();
-#endif /* NDBM */
-       SYSLOG((LOG_INFO, "delete user `%s'\n", user_name));
-}
+                       if (is_shadow_pwd && sp_dbm_present ()
+                           && !sp_dbm_remove (user_name))
+                       fprintf (stderr,
+                                _
+                                ("%s: error deleting shadow passwd dbm entry\n"),
+                                Prog);
+#endif
+                       endpwent ();
+#endif                         /* NDBM */
+                       SYSLOG ((LOG_INFO, "delete user `%s'\n",
+                                user_name));}
 
 /*
  * user_busy - see if user is logged in.
  *
  * XXX - should probably check if there are any processes owned
- * by this user.  Also, I think this check should be in usermod
+ * by this user. Also, I think this check should be in usermod
  * as well (at least when changing username or uid).  --marekm
  */
 
-static void
-user_busy(const char *name, uid_t uid)
-{
-       struct  utmp    *utent;
+                       static void user_busy (const char *name, uid_t uid) {
+                       struct utmp *utent;
 
-       /*
-        * We see if the user is logged in by looking for the user name
-        * in the utmp file.
-        */
-
-       setutent ();
-
-       while ((utent = getutent ())) {
+                       /*
+                        * We see if the user is logged in by looking for the user name
+                        * in the utmp file.
+                        */
+                       setutent (); while ((utent = getutent ())) {
 #ifdef USER_PROCESS
-               if (utent->ut_type != USER_PROCESS)
+                       if (utent->ut_type != USER_PROCESS)
                        continue;
 #else
-               if (utent->ut_user[0] == '\0')
+                       if (utent->ut_user[0] == '\0')
                        continue;
 #endif
-               if (strncmp(utent->ut_user, name, sizeof utent->ut_user))
+                       if (strncmp
+                           (utent->ut_user, name, sizeof utent->ut_user))
                        continue;
-
-               fprintf(stderr, _("%s: user %s is currently logged in\n"),
-                       Prog, name);
-               exit(E_USER_BUSY);
-       }
-}
+                       fprintf (stderr,
+                                _
+                                ("%s: user %s is currently logged in\n"),
+                                Prog, name); exit (E_USER_BUSY);}
+                       }
 
 /* 
  * user_cancel - cancel cron and at jobs
@@ -562,7 +580,7 @@ user_busy(const char *name, uid_t uid)
  * We used to have all this stuff hardcoded here, but now
  * we just run an external script - it may need to do other
  * things as well (like removing print jobs) and we may not
- * want to recompile userdel too often.  Below is a sample
+ * want to recompile userdel too often. Below is a sample
  * script (should work at least on Debian 1.1).  --marekm
 ==========
 #! /bin/sh
@@ -576,11 +594,10 @@ fi
 # Remove cron jobs.
 crontab -r -u $1
 
-# Remove at jobs.  XXX - will remove any jobs owned by the
-# same UID, even if it was shared by a different username.
-# at really should store the username somewhere, and atrm
-# should support an option to remove all jobs owned by the
-# specified user - for now we have to do this ugly hack...
+# Remove at jobs. XXX - will remove any jobs owned by the same UID, even if
+# it was shared by a different username. at really should store the username
+# somewhere, and atrm should support an option to remove all jobs owned by
+# the specified user - for now we have to do this ugly hack...
 find /var/spool/cron/atjobs -name "[^.]*" -type f -user $1 -exec rm {} \;
 
 # Remove print jobs.
@@ -591,323 +608,249 @@ exit 0
 ==========
  */
 
-static void
-user_cancel(const char *user)
-{
-       char *cmd;
-       int pid, wpid;
-       int status;
-
-       if (!(cmd = getdef_str("USERDEL_CMD")))
-               return;
-
-       pid = fork();
-       if (pid == 0) {
-               execl(cmd, cmd, user, (char *) 0);
-               if (errno == ENOENT) {
-                       perror(cmd);
-                       _exit(127);
-               } else {
-                       perror(cmd);
-                       _exit(126);
-               }
-       } else if (pid == -1) {
-               perror("fork");
-               return;
-       }
+                       static void user_cancel (const char *user) {
+                       char *cmd;
+                       int pid, wpid;
+                       int status;
+                       if (!(cmd = getdef_str ("USERDEL_CMD")))
+                       return; pid = fork (); if (pid == 0) {
+                       execl (cmd, cmd, user, (char *) 0);
+                       if (errno == ENOENT) {
+                       perror (cmd); _exit (127);}
+                       else {
+                       perror (cmd); _exit (126);}
+                       }
+                       else
+                       if (pid == -1) {
+                       perror ("fork"); return;}
 
-       do {
-               wpid = wait(&status);
-       } while (wpid != pid && wpid != -1);
-}
+                       do {
+                       wpid = wait (&status);} while (wpid != pid
+                                                      && wpid != -1);}
 
 #ifdef EXTRA_CHECK_HOME_DIR
-static int
-path_prefix(const char *s1, const char *s2)
-{
-       return (strncmp(s2, s1, strlen(s1)) == 0);
-}
+                       static int
+                       path_prefix (const char *s1, const char *s2) {
+                       return (strncmp (s2, s1, strlen (s1)) == 0);}
 #endif
 
-static int
-is_owner(uid_t uid, const char *path)
-{
-       struct stat st;
-
-       if (stat(path, &st))
-               return -1;
-       return (st.st_uid == uid);
-}
+                       static int is_owner (uid_t uid, const char *path) {
+                       struct stat st; if (stat (path, &st))
+                       return -1; return (st.st_uid == uid);}
 
 #ifndef NO_REMOVE_MAILBOX
-static void
-remove_mailbox(void)
-{
-       const char *maildir;
-       char mailfile[1024];
-       int i;
-
-       maildir = getdef_str("MAIL_DIR");
+                       static void remove_mailbox (void) {
+                       const char *maildir;
+                       char mailfile[1024];
+                       int i; maildir = getdef_str ("MAIL_DIR");
 #ifdef MAIL_SPOOL_DIR
-       if (!maildir && !getdef_str("MAIL_FILE"))
-               maildir = MAIL_SPOOL_DIR;
-#endif
-       if (!maildir)
-               return;
-
-       snprintf(mailfile, sizeof mailfile, "%s/%s", maildir, user_name);
-       if (fflg) {
-               unlink(mailfile);  /* always remove, ignore errors */
-               return;
-       }
-       i = is_owner(user_id, mailfile);
-       if (i == 0) {
-               fprintf(stderr,
-                       _("%s: warning: %s not owned by %s, not removing\n"),
-                       Prog, mailfile, user_name);
-               return;
-       } else if (i == -1)
-               return;  /* mailbox doesn't exist */
-       if (unlink(mailfile)) {
-               fprintf(stderr, _("%s: warning: can't remove "), Prog);
-               perror(mailfile);
-       }
-}
+                       if (!maildir && !getdef_str ("MAIL_FILE"))
+                       maildir = MAIL_SPOOL_DIR;
+#endif
+                       if (!maildir)
+                       return;
+                       snprintf (mailfile, sizeof mailfile,
+                                 "%s/%s", maildir, user_name); if (fflg) {
+                       unlink (mailfile);      /* always remove, ignore errors */
+                       return;}
+                       i = is_owner (user_id, mailfile); if (i == 0) {
+                       fprintf (stderr,
+                                _
+                                ("%s: warning: %s not owned by %s, not removing\n"),
+                                Prog, mailfile, user_name); return;}
+                       else
+                       if (i == -1)
+                       return; /* mailbox doesn't exist */
+                       if (unlink (mailfile)) {
+                       fprintf (stderr,
+                                _("%s: warning: can't remove "),
+                                Prog); perror (mailfile);}
+                       }
 #endif
 
 #ifdef USE_PAM
-static struct pam_conv conv = {
-    misc_conv,
-    NULL
-};
-#endif /* USE_PAM */
-
+                       static struct pam_conv conv = {
+                       misc_conv, NULL};
+#endif                         /* USE_PAM */
 /*
  * main - userdel command
  */
+                       int main (int argc, char **argv) {
+                       struct passwd *pwd; int arg; int errors = 0;
 
-int
-main(int argc, char **argv)
-{
-       struct  passwd  *pwd;
-       int     arg;
-       int     errors = 0;
 #ifdef USE_PAM
-       pam_handle_t *pamh = NULL;
-       struct passwd *pampw;
-       int retval;
-#endif
-
-       /*
-        * Get my name so that I can use it to report errors.
-        */
-
-       Prog = Basename(argv[0]);
-
-       setlocale(LC_ALL, "");
-       bindtextdomain(PACKAGE, LOCALEDIR);
-       textdomain(PACKAGE);
-
+                       pam_handle_t * pamh = NULL;
+                       struct passwd *pampw; int retval;
+#endif
+                       /*
+                        * Get my name so that I can use it to report errors.
+                        */
+                       Prog = Basename (argv[0]);
+                       setlocale (LC_ALL, "");
+                       bindtextdomain (PACKAGE, LOCALEDIR);
+                       textdomain (PACKAGE);
 #ifdef USE_PAM
-       retval = PAM_SUCCESS;
-
-       pampw = getpwuid(getuid());
-       if (pampw == NULL) {
-               retval = PAM_USER_UNKNOWN;
-       }
-
-       if (retval == PAM_SUCCESS) {
-               retval = pam_start("shadow", pampw->pw_name, &conv, &pamh);
-       }
-
-       if (retval == PAM_SUCCESS) {
-               retval = pam_authenticate(pamh, 0);
-               if (retval != PAM_SUCCESS) {
-                       pam_end(pamh, retval);
-               }
-       }
-
-       if (retval == PAM_SUCCESS) {
-               retval = pam_acct_mgmt(pamh, 0);
-               if (retval != PAM_SUCCESS) {
-                       pam_end(pamh, retval);
-               }
-       }
+                       retval = PAM_SUCCESS;
+                       pampw = getpwuid (getuid ()); if (pampw == NULL) {
+                       retval = PAM_USER_UNKNOWN;}
+
+                       if (retval == PAM_SUCCESS) {
+                       retval =
+                       pam_start ("shadow", pampw->pw_name, &conv,
+                                  &pamh);}
+
+                       if (retval == PAM_SUCCESS) {
+                       retval = pam_authenticate (pamh, 0);
+                       if (retval != PAM_SUCCESS) {
+                       pam_end (pamh, retval);}
+                       }
 
-       if (retval != PAM_SUCCESS) {
-               fprintf (stderr, _("%s: PAM authentication failed\n"), Prog);
-               exit (1);
-       }
-#endif /* USE_PAM */
+                       if (retval == PAM_SUCCESS) {
+                       retval = pam_acct_mgmt (pamh, 0);
+                       if (retval != PAM_SUCCESS) {
+                       pam_end (pamh, retval);}
+                       }
 
-       OPENLOG(Prog);
+                       if (retval != PAM_SUCCESS) {
+                       fprintf (stderr,
+                                _
+                                ("%s: PAM authentication failed\n"),
+                                Prog); exit (1);}
+#endif                         /* USE_PAM */
 
+                       OPENLOG (Prog);
 #ifdef SHADOWPWD
-       is_shadow_pwd = spw_file_present();
+                       is_shadow_pwd = spw_file_present ();
 #endif
-
 #ifdef SHADOWGRP
-       is_shadow_grp = sgr_file_present();
+                       is_shadow_grp = sgr_file_present ();
 #endif
-
-       /*
-        * The open routines for the DBM files don't use read-write
-        * as the mode, so we have to clue them in.
-        */
-
+                       /*
+                        * The open routines for the DBM files don't use read-write
+                        * as the mode, so we have to clue them in.
+                        */
 #ifdef NDBM
-       pw_dbm_mode = O_RDWR;
+                       pw_dbm_mode = O_RDWR;
 #ifdef SHADOWPWD
-       sp_dbm_mode = O_RDWR;
+                       sp_dbm_mode = O_RDWR;
 #endif
-       gr_dbm_mode = O_RDWR;
+                       gr_dbm_mode = O_RDWR;
 #ifdef SHADOWGRP
-       sg_dbm_mode = O_RDWR;
-#endif
-#endif
-       while ((arg = getopt (argc, argv, "fr")) != EOF) {
-               switch (arg) {
-               case 'f':  /* force remove even if not owned by user */
-                       fflg++;
-                       break;
-               case 'r':  /* remove home dir and mailbox */
-                       rflg++;
-                       break;
-               default:
-                       usage();
-               }
-       }
-       
-       if (optind + 1 != argc)
-               usage ();
-
-       /*
-        * Start with a quick check to see if the user exists.
-        */
-
-       user_name = argv[argc - 1];
-
-       if (! (pwd = getpwnam (user_name))) {
-               fprintf(stderr, _("%s: user %s does not exist\n"),
-                       Prog, user_name);
-               exit(E_NOTFOUND);
-       }
-#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);
-       }
+                       sg_dbm_mode = O_RDWR;
 #endif
-       user_id = pwd->pw_uid;
-       user_home = xstrdup(pwd->pw_dir);
-
-       /*
-        * Check to make certain the user isn't logged in.
-        */
-
-       user_busy (user_name, user_id);
-
-       /*
-        * 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 ();
-
-#ifndef NO_REMOVE_MAILBOX
-       if (rflg)
-               remove_mailbox();
 #endif
+                       while ((arg = getopt (argc, argv, "fr")) != EOF) {
+                       switch (arg) {
+case 'f':                      /* force remove even if not owned by user */
+fflg++; break; case 'r':       /* remove home dir and mailbox */
+rflg++; break; default:
+                       usage ();}
+                       }
 
-       if (rflg && !fflg && !is_owner(user_id, user_home)) {
-               fprintf(stderr, _("%s: %s not owned by %s, not removing\n"),
-                       Prog, user_home, user_name);
-               rflg = 0;
-               errors++;
-       }
+                       if (optind + 1 != argc)
+                       usage ();
+                       /*
+                        * Start with a quick check to see if the user exists.
+                        */
+                       user_name = argv[argc - 1];
+                       if (!(pwd = getpwnam (user_name))) {
+                       fprintf (stderr,
+                                _("%s: user %s does not exist\n"),
+                                Prog, user_name); exit (E_NOTFOUND);}
+#ifdef USE_NIS
 
-/* This may be slow, the above should be good enough.  */
+                       /*
+                        * 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
+                       user_id = pwd->pw_uid;
+                       user_home = xstrdup (pwd->pw_dir);
+                       /*
+                        * Check to make certain the user isn't logged in.
+                        */
+                       user_busy (user_name, user_id);
+                       /*
+                        * 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 ();
+#ifndef NO_REMOVE_MAILBOX
+                       if (rflg)
+                       remove_mailbox ();
+#endif
+                       if (rflg && !fflg
+                           && !is_owner (user_id, user_home)) {
+                       fprintf (stderr,
+                                _
+                                ("%s: %s not owned by %s, not removing\n"),
+                                Prog, user_home, user_name);
+                       rflg = 0; errors++;}
+
+/* This may be slow, the above should be good enough. */
 #ifdef EXTRA_CHECK_HOME_DIR
-       if (rflg && !fflg) {
-               /*
-                * 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 = 0;
-                               errors++;
-                               break;
+                       if (rflg && !fflg) {
+                       /*
+                        * 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 = 0; errors++; break;}
+                       }
                        }
-               }
-       }
 #endif
 
-       if (rflg) {
-               if (remove_tree(user_home) || rmdir(user_home)) {
-                       fprintf(stderr, _("%s: error removing directory %s\n"),
-                               Prog, user_home);
-
-                       errors++;
-               }
-       }
-
-       /*
-        * Cancel any crontabs or at jobs.  Have to do this before we
-        * remove the entry from /etc/passwd.
-        */
-
-       user_cancel(user_name);
+                       if (rflg) {
+                       if (remove_tree (user_home)
+                           || rmdir (user_home)) {
+                       fprintf (stderr,
+                                _
+                                ("%s: error removing directory %s\n"),
+                                Prog, user_home); errors++;}
+                       }
 
-       close_files ();
+                       /*
+                        * Cancel any crontabs or at jobs. Have to do this before we
+                        * remove the entry from /etc/passwd.
+                        */
 
+                       user_cancel (user_name); close_files ();
 #ifdef USE_PAM
-       if (retval == PAM_SUCCESS) {
-               retval = pam_chauthtok(pamh, 0);
-               if (retval != PAM_SUCCESS) {
-                       pam_end(pamh, retval);
-               }
-       }
-
-       if (retval != PAM_SUCCESS) {
-               fprintf (stderr, _("%s: PAM chauthtok failed\n"), Prog);
-               exit (1);
-       }
+                       if (retval == PAM_SUCCESS) {
+                       retval = pam_chauthtok (pamh, 0);
+                       if (retval != PAM_SUCCESS) {
+                       pam_end (pamh, retval);}
+                       }
 
-       if (retval == PAM_SUCCESS)
-               pam_end(pamh, PAM_SUCCESS);
-#endif /* USE_PAM */
+                       if (retval != PAM_SUCCESS) {
+                       fprintf (stderr,
+                                _("%s: PAM chauthtok failed\n"),
+                                Prog); exit (1);}
 
-       exit(errors ? E_HOMEDIR : E_SUCCESS);
-       /*NOTREACHED*/
-}
+                       if (retval == PAM_SUCCESS)
+                       pam_end (pamh, PAM_SUCCESS);
+#endif                         /* USE_PAM */
+                       exit (errors ? E_HOMEDIR : E_SUCCESS);
+                       /*NOTREACHED*/}
index 9b13606facdc387413f528ef34492081bf2e5b65..f8fa363d5ae25e2f25d8957b415aa7465a309930 100644 (file)
@@ -17,7 +17,7 @@
  * 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
+ * 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)
@@ -30,8 +30,7 @@
 #include <config.h>
 
 #include "rcsid.h"
-RCSID(PKG_VER "$Id: usermod.c,v 1.22 2001/09/01 04:19:16 kloczek Exp $")
-
+RCSID (PKG_VER "$Id: usermod.c,v 1.25 2002/01/05 15:41:44 kloczek Exp $")
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <stdio.h>
@@ -41,13 +40,11 @@ RCSID(PKG_VER "$Id: usermod.c,v 1.22 2001/09/01 04:19:16 kloczek Exp $")
 #include <ctype.h>
 #include <fcntl.h>
 #include <time.h>
-
 #ifdef USE_PAM
 #include <security/pam_appl.h>
 #include <security/pam_misc.h>
 #include <pwd.h>
-#endif /* USE_PAM */
-
+#endif                         /* USE_PAM */
 #include "prototypes.h"
 #include "defines.h"
 #include "chkname.h"
@@ -59,7 +56,6 @@ RCSID(PKG_VER "$Id: usermod.c,v 1.22 2001/09/01 04:19:16 kloczek Exp $")
 #endif
 #include "pwauth.h"
 #include "getdef.h"
-
 /*
  * exit status values
  * for E_GRP_UPDATE and E_NOSPACE (not used yet), other update requests
@@ -70,16 +66,14 @@ RCSID(PKG_VER "$Id: usermod.c,v 1.22 2001/09/01 04:19:16 kloczek Exp $")
 #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_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_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))
-
 static char *user_name;
 static char *user_newname;
 static char *user_pass;
@@ -91,49 +85,52 @@ static char *user_comment;
 static char *user_home;
 static char *user_newhome;
 static char *user_shell;
+
 #ifdef SHADOWPWD
 static long user_expire;
 static long user_inactive;
 #endif
 static long sys_ngroups;
-static char **user_groups;  /* NULL-terminated list */
+static char **user_groups;     /* NULL-terminated list */
 
 static char *Prog;
 
 #ifdef AUTH_METHODS
 static char *auth_arg;
 static char user_auth[BUFSIZ];
-static int Aflg = 0; /* specify user defined authentication method */
+static int Aflg = 0;           /* specify user defined authentication method */
 #else
 #define Aflg 0
 #endif
 
 static int
      uflg = 0, /* specify new user ID */
      oflg = 0, /* permit non-unique user ID to be specified with -u */
      gflg = 0, /* new primary group ID */
      Gflg = 0, /* new secondary group set */
      dflg = 0, /* new home directory */
      sflg = 0, /* new shell program */
      cflg = 0, /* new comment (GECOS) field */
      mflg = 0, /* create user's home directory if it doesn't exist */
uflg = 0,                     /* specify new user ID */
oflg = 0,                     /* permit non-unique user ID to be specified with -u */
gflg = 0,                     /* new primary group ID */
Gflg = 0,                     /* new secondary group set */
dflg = 0,                     /* new home directory */
sflg = 0,                     /* new shell program */
cflg = 0,                     /* new comment (GECOS) field */
mflg = 0,                     /* create user's home directory if it doesn't exist */
 #ifdef SHADOWPWD
      fflg = 0, /* days until account with expired password is locked */
      eflg = 0, /* days since 1970-01-01 when account becomes expired */
fflg = 0,                     /* days until account with expired password is locked */
eflg = 0,                     /* days since 1970-01-01 when account becomes expired */
 #endif
      Lflg = 0, /* lock the password */
      Uflg = 0, /* unlock the password */
      pflg = 0, /* new encrypted password */
      lflg = 0; /* new user name */
Lflg = 0,                     /* lock the password */
Uflg = 0,                     /* unlock the password */
pflg = 0,                     /* new encrypted password */
lflg = 0;                     /* new user name */
 
 #ifdef NDBM
-extern int     pw_dbm_mode;
+extern int pw_dbm_mode;
+
 #ifdef SHADOWPWD
-extern int     sp_dbm_mode;
+extern int sp_dbm_mode;
 #endif
-extern int     gr_dbm_mode;
+extern int gr_dbm_mode;
+
 #ifdef SHADOWGRP
-extern int     sg_dbm_mode;
+extern int sg_dbm_mode;
 #endif
 #endif
 
@@ -156,56 +153,59 @@ static int is_shadow_grp;
 #include "shadowio.h"
 #endif
 
-extern char *optarg;
-extern int optind;
-
 /* local function prototypes */
-static int get_groups(char *);
-static void usage(void);
-static void new_pwent(struct passwd *);
+static int get_groups (char *);
+static void usage (void);
+static void new_pwent (struct passwd *);
+
 #ifdef SHADOWPWD
-static void new_spent(struct spwd *);
+static void new_spent (struct spwd *);
 #endif
-static void fail_exit(int);
-static int update_group(void);
+static void fail_exit (int);
+static int update_group (void);
+
 #ifdef SHADOWGRP
-static int update_gshadow(void);
+static int update_gshadow (void);
 #endif
-static int grp_update(void);
+static int grp_update (void);
+
 #ifdef AUTH_METHODS
-static char *get_password(const char *);
-static void split_auths(char *, char **);
-static void update_auths(const char *, const char *, char *);
-static void add_auths(const char *, const char *, char *);
-static void delete_auths(const char *, const char *, char *);
-static void convert_auth(char *, const char *, const char *);
-static int valid_auth(const char *);
+static char *get_password (const char *);
+static void split_auths (char *, char **);
+static void update_auths (const char *, const char *, char *);
+static void add_auths (const char *, const char *, char *);
+static void delete_auths (const char *, const char *, char *);
+static void convert_auth (char *, const char *, const char *);
+static int valid_auth (const char *);
 #endif
-static long get_number(const char *);
-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_files(void);
+static long get_number (const char *);
+static uid_t get_id (const char *);
+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_files (void);
+
 #ifndef NO_MOVE_MAILBOX
-static void move_mailbox(void);
+static void move_mailbox (void);
 #endif
 
-/* Had to move this over from useradd.c since we have groups named
+/*
+ * Had to move this over from useradd.c since we have groups named
  * "56k-family"... ergh.
- * --Pac. */
-static struct group *
-getgr_nam_gid(const char *name)
+ * --Pac.
+ */
+static struct group *getgr_nam_gid (const char *name)
 {
        gid_t gid;
        char *ep;
 
-       gid = strtol(name, &ep, 10);
-       if (*name != '\0' && *ep == '\0')  /* valid numeric gid */
-               return getgrgid(gid);
+       gid = strtoul (name, &ep, 10);
+       if (*name != '\0' && *ep == '\0')       /* valid numeric gid */
+               return getgrgid (gid);
 
-       return getgrnam(name);
+       return getgrnam (name);
 }
 
 
@@ -213,12 +213,11 @@ getgr_nam_gid(const char *name)
  * 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.
+ *     converts it to a NULL-terminated array. Any unknown group names are
+ *     reported as errors.
  */
 
-static int
-get_groups(char *list)
+static int get_groups (char *list)
 {
        char *cp;
        const struct group *grp;
@@ -231,13 +230,13 @@ get_groups(char *list)
 
        user_groups[0] = (char *) 0;
 
-       if (! *list)
+       if (!*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.
+        * 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 {
@@ -248,46 +247,48 @@ get_groups(char *list)
                        *cp++ = '\0';
 
                /*
-                * Names starting with digits are treated as numerical
-                * GID values, otherwise the string is looked up as is.
+                * Names starting with digits are treated as numerical GID
+                * values, otherwise the string is looked up as is.
                 */
-               grp = getgr_nam_gid(list);
+               grp = getgr_nam_gid (list);
 
                /*
                 * There must be a match, either by GID value or by
                 * string name.
                 */
                if (!grp) {
-                       fprintf(stderr, _("%s: unknown group %s\n"),
-                               Prog, list);
+                       fprintf (stderr, _("%s: unknown group %s\n"),
+                                Prog, list);
                        errors++;
                }
                list = cp;
 
                /*
-                * If the group doesn't exist, don't dump core...
-                * Instead, try the next one.  --marekm
+                * If the group doesn't exist, don't dump core. Instead,
+                * try the next one.  --marekm
                 */
-               if (! grp)
+               if (!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.
+                * 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);
+                       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);
+                       fprintf (stderr,
+                                _
+                                ("%s: too many groups specified (max %d).\n"),
+                                Prog, ngroups);
                        break;
                }
 
@@ -295,7 +296,7 @@ get_groups(char *list)
                 * Add the group name to the user's list of groups.
                 */
 
-               user_groups[ngroups++] = xstrdup(grp->gr_name);
+               user_groups[ngroups++] = xstrdup (grp->gr_name);
        } while (list);
 
        user_groups[ngroups] = (char *) 0;
@@ -314,52 +315,52 @@ get_groups(char *list)
  * usage - display usage message and exit
  */
 
-static void
-usage(void)
+static void usage (void)
 {
-       fprintf(stderr,
-               _("usage: %s\t[-u uid [-o]] [-g group] [-G group,...] \n"),
-               Prog);
-       fprintf(stderr,
-               _("\t\t[-d home [-m]] [-s shell] [-c comment] [-l new_name]\n"));
-       fprintf(stderr, "\t\t");
+       fprintf (stderr,
+                _
+                ("usage: %s\t[-u uid [-o]] [-g group] [-G group,...] \n"),
+                Prog);
+       fprintf (stderr,
+                _
+                ("\t\t[-d home [-m]] [-s shell] [-c comment] [-l new_name]\n"));
+       fprintf (stderr, "\t\t");
 #ifdef SHADOWPWD
-       fprintf(stderr, _("[-f inactive] [-e expire ] "));
+       fprintf (stderr, _("[-f inactive] [-e expire ] "));
 #endif
 #ifdef AUTH_METHODS
-       fprintf(stderr, _("[-A {DEFAULT|program},... ] "));
+       fprintf (stderr, _("[-A {DEFAULT|program},... ] "));
 #endif
-       fprintf(stderr, _("[-p passwd] [-L|-U] name\n"));
-       exit(E_USAGE);
+       fprintf (stderr, _("[-p passwd] [-L|-U] name\n"));
+       exit (E_USAGE);
 }
 
-/* update encrypted password string (for both shadow and non-shadow passwords) */
+/*
+ * update encrypted password string (for both shadow and non-shadow
+ * passwords)
+ */
 
-static char *
-new_pw_passwd(char *pw_pass, const char *pw_name)
+static char *new_pw_passwd (char *pw_pass, const char *pw_name)
 {
        if (Lflg && pw_pass[0] != '!') {
-               char *buf = xmalloc(strlen(pw_pass) + 2);
+               char *buf = xmalloc (strlen (pw_pass) + 2);
 
-               SYSLOG((LOG_INFO, "lock user `%s' password\n",
-                       pw_name));
-               strcpy(buf, "!");
-               strcat(buf, pw_pass);
+               SYSLOG ((LOG_INFO, "lock user `%s' password", pw_name));
+               strcpy (buf, "!");
+               strcat (buf, pw_pass);
                pw_pass = buf;
        } else if (Uflg && pw_pass[0] == '!') {
                char *s;
 
-               SYSLOG((LOG_INFO, "unlock user `%s' password\n",
-                       pw_name));
+               SYSLOG ((LOG_INFO, "unlock user `%s' password", pw_name));
                s = pw_pass;
                while (*s) {
                        *s = *(s + 1);
                        s++;
                }
        } else if (pflg) {
-               SYSLOG((LOG_INFO, "change user `%s' password\n",
-                       pw_name));
-               pw_pass = xstrdup(user_pass);
+               SYSLOG ((LOG_INFO, "change user `%s' password", pw_name));
+               pw_pass = xstrdup (user_pass);
        }
        return pw_pass;
 }
@@ -367,45 +368,48 @@ new_pw_passwd(char *pw_pass, const char *pw_name)
 /*
  * 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.
+ *     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)
+static void new_pwent (struct passwd *pwent)
 {
        if (lflg) {
-               SYSLOG((LOG_INFO, "change user name `%s' to `%s'\n",
-                       pwent->pw_name, user_newname));
+               SYSLOG ((LOG_INFO, "change user name `%s' to `%s'",
+                        pwent->pw_name, user_newname));
                pwent->pw_name = xstrdup (user_newname);
        }
-
 #ifdef SHADOWPWD
        if (!is_shadow_pwd)
 #endif
-       pwent->pw_passwd = new_pw_passwd(pwent->pw_passwd, pwent->pw_name);
+               pwent->pw_passwd =
+                   new_pw_passwd (pwent->pw_passwd, pwent->pw_name);
 
        if (uflg) {
-               SYSLOG((LOG_INFO, "change user `%s' UID from `%d' to `%d'\n",
-                       pwent->pw_name, pwent->pw_uid, user_newid));
+               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) {
-               SYSLOG((LOG_INFO, "change user `%s' GID from `%d' to `%d'\n",
-                       pwent->pw_name, pwent->pw_gid, user_newgid));
+               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)
                pwent->pw_gecos = user_comment;
 
        if (dflg) {
-               SYSLOG((LOG_INFO, "change user `%s' home from `%s' to `%s'\n",
-                       pwent->pw_name, pwent->pw_dir, user_newhome));
+               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) {
-               SYSLOG((LOG_INFO, "change user `%s' shell from `%s' to `%s'\n",
-                       pwent->pw_name, pwent->pw_shell, user_shell));
+               SYSLOG ((LOG_INFO,
+                        "change user `%s' shell from `%s' to `%s'",
+                        pwent->pw_name, pwent->pw_shell, user_shell));
                pwent->pw_shell = user_shell;
        }
 }
@@ -414,39 +418,37 @@ new_pwent(struct passwd *pwent)
 /*
  * 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.
+ *     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)
+static void new_spent (struct spwd *spent)
 {
        if (lflg)
                spent->sp_namp = xstrdup (user_newname);
 
        if (fflg) {
-               SYSLOG((LOG_INFO,
-                       "change user `%s' inactive from `%ld' to `%ld'\n",
-                       spent->sp_namp, spent->sp_inact, user_inactive));
+               SYSLOG ((LOG_INFO,
+                        "change user `%s' inactive from `%ld' to `%ld'",
+                        spent->sp_namp, spent->sp_inact, user_inactive));
                spent->sp_inact = user_inactive;
        }
        if (eflg) {
                /* XXX - dates might be better than numbers of days.  --marekm */
-               SYSLOG((LOG_INFO,
-                       "change user `%s' expiration from `%ld' to `%ld'\n",
-                       spent->sp_namp, spent->sp_expire, user_expire));
+               SYSLOG ((LOG_INFO,
+                        "change user `%s' expiration from `%ld' to `%ld'",
+                        spent->sp_namp, spent->sp_expire, user_expire));
                spent->sp_expire = user_expire;
        }
-       spent->sp_pwdp = new_pw_passwd(spent->sp_pwdp, spent->sp_namp);
+       spent->sp_pwdp = new_pw_passwd (spent->sp_pwdp, spent->sp_namp);
 }
-#endif /* SHADOWPWD */
+#endif                         /* SHADOWPWD */
 
 /*
  * fail_exit - exit with an error code after unlocking files
  */
 
-static void
-fail_exit(int code)
+static void fail_exit (int code)
 {
        (void) gr_unlock ();
 #ifdef SHADOWGRP
@@ -458,12 +460,11 @@ fail_exit(int code)
                spw_unlock ();
 #endif
        (void) pw_unlock ();
-       exit(code);
+       exit (code);
 }
 
 
-static int
-update_group(void)
+static int update_group (void)
 {
        int is_member;
        int was_member;
@@ -472,18 +473,20 @@ update_group(void)
        struct group *ngrp;
 
        /*
-        * Lock and open the group file.  This will load all of the group
+        * Lock and open the group file. This will load all of the group
         * entries.
         */
-       if (! gr_lock ()) {
-               fprintf(stderr, _("%s: error locking group file\n"), Prog);
-               SYSLOG((LOG_ERR, "error locking group file"));
+       if (!gr_lock ()) {
+               fprintf (stderr, _("%s: error locking group file\n"),
+                        Prog);
+               SYSLOG ((LOG_ERR, "error locking group file"));
                return -1;
        }
-       if (! gr_open (O_RDWR)) {
-               fprintf(stderr, _("%s: error opening group file\n"), Prog);
-               SYSLOG((LOG_ERR, "error opening group file"));
-               gr_unlock();
+       if (!gr_open (O_RDWR)) {
+               fprintf (stderr, _("%s: error opening group file\n"),
+                        Prog);
+               SYSLOG ((LOG_ERR, "error opening group file"));
+               gr_unlock ();
                return -1;
        }
 
@@ -493,92 +496,94 @@ update_group(void)
         * Scan through the entire group file looking for the groups that
         * the user is a member of.
         */
-       while ((grp = gr_next())) {
+       while ((grp = gr_next ())) {
 
                /*
                 * 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 && is_on_list(user_groups, grp->gr_name);
+               was_member = is_on_list (grp->gr_mem, user_name);
+               is_member = Gflg && is_on_list (user_groups, grp->gr_name);
 
                if (!was_member && !is_member)
                        continue;
 
-               ngrp = __gr_dup(grp);
+               ngrp = __gr_dup (grp);
                if (!ngrp) {
-                       fprintf(stderr,
-                               _("%s: out of memory in update_group\n"),
-                               Prog);
-                       gr_unlock();
+                       fprintf (stderr,
+                                _("%s: out of memory in update_group\n"),
+                                Prog);
+                       gr_unlock ();
                        return -1;
                }
 
                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);
+                               ngrp->gr_mem = del_list (ngrp->gr_mem,
+                                                        user_name);
+                               ngrp->gr_mem = add_list (ngrp->gr_mem,
+                                                        user_newname);
                                changed = 1;
-                               SYSLOG((LOG_INFO,
-                                       "change `%s' to `%s' in group `%s'\n",
-                                       user_name, user_newname,
-                                       ngrp->gr_name));
+                               SYSLOG ((LOG_INFO,
+                                        "change `%s' to `%s' in group `%s'",
+                                        user_name, user_newname,
+                                        ngrp->gr_name));
                        }
                } else if (was_member && Gflg && !is_member) {
                        ngrp->gr_mem = del_list (ngrp->gr_mem, user_name);
                        changed = 1;
-                       SYSLOG((LOG_INFO, "delete `%s' from group `%s'\n",
-                               user_name, ngrp->gr_name));
+                       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,
-                               lflg ? user_newname:user_name);
+                                                lflg ? user_newname :
+                                                user_name);
                        changed = 1;
-                       SYSLOG((LOG_INFO, "add `%s' to group `%s'\n",
-                               lflg ? user_newname:user_name, ngrp->gr_name));
+                       SYSLOG ((LOG_INFO, "add `%s' to group `%s'",
+                                lflg ? user_newname : user_name,
+                                ngrp->gr_name));
                }
                if (!changed)
                        continue;
 
                changed = 0;
-               if (! gr_update (ngrp)) {
-                       fprintf(stderr, _("%s: error adding new group entry\n"),
-                               Prog);
-                       SYSLOG((LOG_ERR, "error adding group entry"));
-                       gr_unlock();
+               if (!gr_update (ngrp)) {
+                       fprintf (stderr,
+                                _("%s: error adding new group entry\n"),
+                                Prog);
+                       SYSLOG ((LOG_ERR, "error adding group entry"));
+                       gr_unlock ();
                        return -1;
                }
 #ifdef NDBM
                /*
                 * Update the DBM group file with the new entry as well.
                 */
-               if (! gr_dbm_update (ngrp)) {
-                       fprintf(stderr,
-                               _("%s: cannot add new dbm group entry\n"),
-                               Prog);
-                       SYSLOG((LOG_ERR, "error adding dbm group entry"));
-                       gr_unlock();
+               if (!gr_dbm_update (ngrp)) {
+                       fprintf (stderr,
+                                _("%s: cannot add new dbm group entry\n"),
+                                Prog);
+                       SYSLOG ((LOG_ERR, "error adding dbm group entry"));
+                       gr_unlock ();
                        return -1;
                }
-#endif /* NDBM */
+#endif                         /* NDBM */
        }
 #ifdef NDBM
        endgrent ();
-#endif /* NDBM */
-       if (!gr_close()) {
-               fprintf(stderr, _("%s: cannot rewrite group file\n"),
-                       Prog);
-               gr_unlock();
+#endif                         /* NDBM */
+       if (!gr_close ()) {
+               fprintf (stderr, _("%s: cannot rewrite group file\n"),
+                        Prog);
+               gr_unlock ();
                return -1;
        }
-       gr_unlock();
+       gr_unlock ();
        return 0;
 }
 
 #ifdef SHADOWGRP
-static int
-update_gshadow(void)
+static int update_gshadow (void)
 {
        int is_member;
        int was_member;
@@ -587,17 +592,17 @@ update_gshadow(void)
        const struct sgrp *sgrp;
        struct sgrp *nsgrp;
 
-       if (!sgr_lock()) {
-               fprintf(stderr, _("%s: error locking shadow group file\n"),
-                       Prog);
-               SYSLOG((LOG_ERR, "error locking shadow group file"));
+       if (!sgr_lock ()) {
+               fprintf (stderr,
+                        _("%s: error locking shadow group file\n"), Prog);
+               SYSLOG ((LOG_ERR, "error locking shadow group file"));
                return -1;
        }
-       if (!sgr_open(O_RDWR)) {
-               fprintf(stderr, _("%s: error opening shadow group file\n"),
-                       Prog);
-               SYSLOG((LOG_ERR, "error opening shadow group file"));
-               sgr_unlock();
+       if (!sgr_open (O_RDWR)) {
+               fprintf (stderr,
+                        _("%s: error opening shadow group file\n"), Prog);
+               SYSLOG ((LOG_ERR, "error opening shadow group file"));
+               sgr_unlock ();
                return -1;
        }
 
@@ -607,67 +612,75 @@ update_gshadow(void)
         * Scan through the entire shadow group file looking for the groups
         * that the user is a member of.
         */
-       while ((sgrp = sgr_next())) {
+       while ((sgrp = sgr_next ())) {
 
                /*
                 * See if the user was a member of this group
                 */
-               was_member = is_on_list(sgrp->sg_mem, user_name);
+               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);
+               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
+                   && is_on_list (user_groups, sgrp->sg_name);
 
                if (!was_member && !was_admin && !is_member)
                        continue;
 
-               nsgrp = __sgr_dup(sgrp);
+               nsgrp = __sgr_dup (sgrp);
                if (!nsgrp) {
-                       fprintf(stderr,
-                               _("%s: out of memory in update_gshadow\n"),
-                               Prog);
-                       sgr_unlock();
+                       fprintf (stderr,
+                                _
+                                ("%s: out of memory in update_gshadow\n"),
+                                Prog);
+                       sgr_unlock ();
                        return -1;
                }
 
                if (was_admin && lflg) {
-                       nsgrp->sg_adm = del_list (nsgrp->sg_adm, user_name);
-                       nsgrp->sg_adm = add_list (nsgrp->sg_adm, user_newname);
+                       nsgrp->sg_adm =
+                           del_list (nsgrp->sg_adm, user_name);
+                       nsgrp->sg_adm =
+                           add_list (nsgrp->sg_adm, user_newname);
                        changed = 1;
-                       SYSLOG((LOG_INFO,
-                           "change admin `%s' to `%s' in shadow group `%s'\n",
-                           user_name, user_newname, nsgrp->sg_name));
+                       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);
+                                                         user_name);
                                nsgrp->sg_mem = add_list (nsgrp->sg_mem,
-                                       user_newname);
+                                                         user_newname);
                                changed = 1;
-                               SYSLOG((LOG_INFO,
-                                 "change `%s' to `%s' in shadow group `%s'\n",
-                                 user_name, user_newname, nsgrp->sg_name));
+                               SYSLOG ((LOG_INFO,
+                                        "change `%s' to `%s' in shadow group `%s'",
+                                        user_name, user_newname,
+                                        nsgrp->sg_name));
                        }
                } else if (was_member && Gflg && !is_member) {
-                       nsgrp->sg_mem = del_list (nsgrp->sg_mem, user_name);
+                       nsgrp->sg_mem =
+                           del_list (nsgrp->sg_mem, user_name);
                        changed = 1;
-                       SYSLOG((LOG_INFO,
-                               "delete `%s' from shadow group `%s'\n",
-                               user_name, nsgrp->sg_name));
+                       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,
-                               lflg ? user_newname:user_name);
+                                                 lflg ? user_newname :
+                                                 user_name);
                        changed = 1;
-                       SYSLOG((LOG_INFO, "add `%s' to shadow group `%s'\n",
-                               lflg ? user_newname:user_name,nsgrp->sg_name));
+                       SYSLOG ((LOG_INFO, "add `%s' to shadow group `%s'",
+                                lflg ? user_newname : user_name,
+                                nsgrp->sg_name));
                }
                if (!changed)
                        continue;
@@ -677,59 +690,60 @@ update_gshadow(void)
                /* 
                 * Update the group entry to reflect the changes.
                 */
-               if (! sgr_update (nsgrp)) {
-                       fprintf(stderr,
-                               _("%s: error adding new group entry\n"),
-                               Prog);
-                       SYSLOG((LOG_ERR, "error adding shadow group entry\n"));
-                       sgr_unlock();
+               if (!sgr_update (nsgrp)) {
+                       fprintf (stderr,
+                                _("%s: error adding new group entry\n"),
+                                Prog);
+                       SYSLOG ((LOG_ERR,
+                                "error adding shadow group entry"));
+                       sgr_unlock ();
                        return -1;
                }
 #ifdef NDBM
                /*
                 * Update the DBM group file with the new entry as well.
                 */
-               if (! sg_dbm_update (nsgrp)) {
-                       fprintf(stderr,
-                               _("%s: cannot add new dbm group entry\n"),
-                               Prog);
-                       SYSLOG((LOG_ERR,
-                               "error adding dbm shadow group entry\n"));
-                       sgr_unlock();
+               if (!sg_dbm_update (nsgrp)) {
+                       fprintf (stderr,
+                                _("%s: cannot add new dbm group entry\n"),
+                                Prog);
+                       SYSLOG ((LOG_ERR,
+                                "error adding dbm shadow group entry"));
+                       sgr_unlock ();
                        return -1;
                }
-#endif /* NDBM */
+#endif                         /* NDBM */
        }
 #ifdef NDBM
        endsgent ();
-#endif /* NDBM */
-       if (!sgr_close()) {
-               fprintf(stderr, _("%s: cannot rewrite shadow group file\n"),
-                       Prog);
-               sgr_unlock();
+#endif                         /* NDBM */
+       if (!sgr_close ()) {
+               fprintf (stderr,
+                        _("%s: cannot rewrite shadow group file\n"),
+                        Prog);
+               sgr_unlock ();
                return -1;
        }
-       sgr_unlock();
+       sgr_unlock ();
        return 0;
 }
-#endif /* SHADOWGRP */
+#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.
+ *     grp_update() takes the secondary group set given in user_groups and
+ *     adds the user to each group given by that set.
  */
 
-static int
-grp_update(void)
+static int grp_update (void)
 {
        int ret;
 
-       ret = update_group();
+       ret = update_group ();
 #ifdef SHADOWGRP
        if (!ret && is_shadow_grp)
-               ret = update_gshadow();
+               ret = update_gshadow ();
 #endif
        return ret;
 }
@@ -739,14 +753,13 @@ grp_update(void)
  * get_password - locate encrypted password in authentication list
  */
 
-static char *
-get_password(const char *list)
+static char *get_password (const char *list)
 {
-       char    *cp, *end;
-       static  char    buf[257];
+       char *cp, *end;
+       static char buf[257];
 
        strcpy (buf, list);
-       for (cp = buf;cp;cp = end) {
+       for (cp = buf; cp; cp = end) {
                if ((end = strchr (cp, ';')))
                        *end++ = 0;
 
@@ -762,13 +775,12 @@ get_password(const char *list)
  * split_auths - break up comma list into (char *) array
  */
 
-static void
-split_auths(char *list, char **array)
+static void split_auths (char *list, char **array)
 {
-       char    *cp, *end;
-       int     i = 0;
+       char *cp, *end;
+       int i = 0;
 
-       for (cp = list;cp;cp = end) {
+       for (cp = list; cp; cp = end) {
                if ((end = strchr (cp, ';')))
                        *end++ = '\0';
 
@@ -781,12 +793,11 @@ split_auths(char *list, char **array)
  * update_auths - find list of methods to update
  */
 
-static void
-update_auths(const char *old, const char *new, char *update)
+static void update_auths (const char *old, const char *new, char *update)
 {
-       char    oldbuf[257], newbuf[257];
-       char    *oldv[32], *newv[32], *updatev[32];
-       int     i, j, k;
+       char oldbuf[257], newbuf[257];
+       char *oldv[32], *newv[32], *updatev[32];
+       int i, j, k;
 
        strcpy (oldbuf, old);
        split_auths (oldbuf, oldv);
@@ -794,8 +805,8 @@ update_auths(const char *old, const char *new, char *update)
        strcpy (newbuf, new);
        split_auths (newbuf, newv);
 
-       for (i = j = k = 0;oldv[i];i++) {
-               for (j = 0;newv[j];j++)
+       for (i = j = k = 0; oldv[i]; i++) {
+               for (j = 0; newv[j]; j++)
                        if (strcmp (oldv[i], newv[j]) != 0)
                                break;
 
@@ -805,7 +816,7 @@ update_auths(const char *old, const char *new, char *update)
        updatev[k] = 0;
 
        update[0] = '\0';
-       for (i = 0;updatev[i];i++) {
+       for (i = 0; updatev[i]; i++) {
                if (i)
                        strcat (update, ";");
 
@@ -817,12 +828,11 @@ update_auths(const char *old, const char *new, char *update)
  * add_auths - find list of methods to add
  */
 
-static void
-add_auths(const char *old, const char *new, char *add)
+static void add_auths (const char *old, const char *new, char *add)
 {
-       char    oldbuf[257], newbuf[257];
-       char    *oldv[32], *newv[32], *addv[32];
-       int     i, j, k;
+       char oldbuf[257], newbuf[257];
+       char *oldv[32], *newv[32], *addv[32];
+       int i, j, k;
 
        strcpy (oldbuf, old);
        split_auths (oldbuf, oldv);
@@ -830,8 +840,8 @@ add_auths(const char *old, const char *new, char *add)
        strcpy (newbuf, new);
        split_auths (newbuf, newv);
 
-       for (i = j = k = 0;newv[i];i++) {
-               for (j = 0;oldv[j];j++)
+       for (i = j = k = 0; newv[i]; i++) {
+               for (j = 0; oldv[j]; j++)
                        if (strcmp (oldv[i], newv[j]) == 0)
                                break;
 
@@ -841,7 +851,7 @@ add_auths(const char *old, const char *new, char *add)
        addv[k] = 0;
 
        add[0] = '\0';
-       for (i = 0;addv[i];i++) {
+       for (i = 0; addv[i]; i++) {
                if (i)
                        strcat (add, ";");
 
@@ -853,12 +863,11 @@ add_auths(const char *old, const char *new, char *add)
  * delete_auths - find list of methods to delete
  */
 
-static void
-delete_auths(const char *old, const char *new, char *remove)
+static void delete_auths (const char *old, const char *new, char *remove)
 {
-       char    oldbuf[257], newbuf[257];
-       char    *oldv[32], *newv[32], *removev[32];
-       int     i, j, k;
+       char oldbuf[257], newbuf[257];
+       char *oldv[32], *newv[32], *removev[32];
+       int i, j, k;
 
        strcpy (oldbuf, old);
        split_auths (oldbuf, oldv);
@@ -866,8 +875,8 @@ delete_auths(const char *old, const char *new, char *remove)
        strcpy (newbuf, new);
        split_auths (newbuf, newv);
 
-       for (i = j = k = 0;oldv[i];i++) {
-               for (j = 0;newv[j];j++)
+       for (i = j = k = 0; oldv[i]; i++) {
+               for (j = 0; newv[j]; j++)
                        if (strcmp (oldv[i], newv[j]) == 0)
                                break;
 
@@ -877,7 +886,7 @@ delete_auths(const char *old, const char *new, char *remove)
        removev[k] = 0;
 
        remove[0] = '\0';
-       for (i = 0;removev[i];i++) {
+       for (i = 0; removev[i]; i++) {
                if (i)
                        strcat (remove, ";");
 
@@ -890,20 +899,20 @@ delete_auths(const char *old, const char *new, char *remove)
  */
 
 static void
-convert_auth(char *auths, const char *oldauths, const char *list)
+convert_auth (char *auths, const char *oldauths, const char *list)
 {
-       char    *cp, *end;
-       char    *old;
-       char    buf[257];
+       char *cp, *end;
+       char *old;
+       char buf[257];
 
        /*
-        * Copy each method.  DEFAULT is replaced by an encrypted string
-        * if one can be found in the current authentication list.
+        * Copy each method. DEFAULT is replaced by an encrypted string if
+        * one can be found in the current authentication list.
         */
 
        strcpy (buf, list);
        auths[0] = '\0';
-       for (cp = buf;cp;cp = end) {
+       for (cp = buf; cp; cp = end) {
                if (auths[0])
                        strcat (auths, ";");
 
@@ -926,12 +935,11 @@ convert_auth(char *auths, const char *oldauths, const char *list)
  * valid_auth - check authentication list for validity
  */
 
-static int
-valid_auth(const char *methods)
+static int valid_auth (const char *methods)
 {
-       char    *cp, *end;
-       char    buf[257];
-       int     default_cnt = 0;
+       char *cp, *end;
+       char buf[257];
+       int default_cnt = 0;
 
        /*
         * Cursory checks, length and illegal characters
@@ -940,7 +948,7 @@ valid_auth(const char *methods)
        if ((int) strlen (methods) > 256)
                return 0;
 
-       if (! VALID (methods))
+       if (!VALID (methods))
                return 0;
 
        /*
@@ -948,7 +956,7 @@ valid_auth(const char *methods)
         */
 
        strcpy (buf, methods);
-       for (cp = buf;cp;cp = end) {
+       for (cp = buf; cp; cp = end) {
                if ((end = strchr (cp, ',')))
                        *end++ = '\0';
 
@@ -961,46 +969,60 @@ valid_auth(const char *methods)
 }
 #endif
 
-static long
-get_number(const char *cp)
+static long get_number (const char *cp)
 {
        long val;
        char *ep;
 
-       val = strtol(cp, &ep, 10);
-       if (*cp != '\0' && *ep == '\0')  /* valid number */
+       val = strtol (cp, &ep, 10);
+       if (*cp != '\0' && *ep == '\0') /* valid number */
+               return val;
+
+       fprintf (stderr, _("%s: invalid numeric argument `%s'\n"), Prog,
+                cp);
+       exit (E_BAD_ARG);
+}
+
+static uid_t get_id (const char *cp)
+{
+       uid_t val;
+       char *ep;
+
+       val = strtoul (cp, &ep, 10);
+       if (*cp != '\0' && *ep == '\0') /* valid number */
                return val;
 
-       fprintf(stderr, _("%s: invalid numeric argument `%s'\n"), Prog, cp);
-       exit(E_BAD_ARG);
+       fprintf (stderr, _("%s: invalid numeric argument `%s'\n"), Prog,
+                cp);
+       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.
+ *     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)
+static void process_flags (int argc, char **argv)
 {
        const struct group *grp;
        const struct passwd *pwd;
+
 #ifdef SHADOWPWD
        const struct spwd *spwd = NULL;
 #endif
-       int     anyflag = 0;
-       int     arg;
+       int anyflag = 0;
+       int arg;
 
        if (argc == 1 || argv[argc - 1][0] == '-')
                usage ();
 
-       if (! (pwd = getpwnam (argv[argc - 1]))) {
-               fprintf(stderr, _("%s: user %s does not exist\n"),
-                       Prog, argv[argc - 1]);
-               exit(E_NOTFOUND);
+       if (!(pwd = getpwnam (argv[argc - 1]))) {
+               fprintf (stderr, _("%s: user %s does not exist\n"),
+                        Prog, argv[argc - 1]);
+               exit (E_NOTFOUND);
        }
        user_name = argv[argc - 1];
 
@@ -1011,26 +1033,26 @@ process_flags(int argc, char **argv)
         */
 
        if (__ispwNIS ()) {
-               char    *nis_domain;
-               char    *nis_master;
+               char *nis_domain;
+               char *nis_master;
 
-               fprintf(stderr, _("%s: user %s is a NIS user\n"),
-                       Prog, user_name);
+               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",
+               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);
+                       fprintf (stderr, _("%s: %s is the NIS master\n"),
+                                Prog, nis_master);
                }
-               exit(E_NOTFOUND);
+               exit (E_NOTFOUND);
        }
 #endif
        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_comment = xstrdup (pwd->pw_gecos);
+       user_home = xstrdup (pwd->pw_dir);
+       user_shell = xstrdup (pwd->pw_shell);
 
 #ifdef SHADOWPWD
        if (is_shadow_pwd && (spwd = getspnam (user_name))) {
@@ -1043,37 +1065,37 @@ process_flags(int argc, char **argv)
 #else
 #define FLAGS "A:u:og:G:d:s:c:ml:p:LU"
 #endif
-       while ((arg = getopt(argc, argv, FLAGS)) != EOF) {
+       while ((arg = getopt (argc, argv, FLAGS)) != EOF) {
 #undef FLAGS
                switch (arg) {
 #ifdef AUTH_METHODS
                case 'A':
-                       if (! valid_auth (optarg)) {
-                               fprintf(stderr,
-                                       _("%s: invalid field `%s'\n"),
-                                       Prog, optarg);
-                               exit(E_BAD_ARG);
+                       if (!valid_auth (optarg)) {
+                               fprintf (stderr,
+                                        _("%s: invalid field `%s'\n"),
+                                        Prog, optarg);
+                               exit (E_BAD_ARG);
                        }
                        auth_arg = optarg;
                        Aflg++;
                        break;
 #endif
                case 'c':
-                       if (! VALID (optarg)) {
-                               fprintf(stderr,
-                                       _("%s: invalid field `%s'\n"),
-                                       Prog, optarg);
-                               exit(E_BAD_ARG);
+                       if (!VALID (optarg)) {
+                               fprintf (stderr,
+                                        _("%s: invalid field `%s'\n"),
+                                        Prog, optarg);
+                               exit (E_BAD_ARG);
                        }
                        user_comment = optarg;
                        cflg++;
                        break;
                case 'd':
-                       if (! VALID (optarg)) {
-                               fprintf(stderr,
-                                       _("%s: invalid field `%s'\n"),
-                                       Prog, optarg);
-                               exit(E_BAD_ARG);
+                       if (!VALID (optarg)) {
+                               fprintf (stderr,
+                                        _("%s: invalid field `%s'\n"),
+                                        Prog, optarg);
+                               exit (E_BAD_ARG);
                        }
                        dflg++;
                        user_newhome = optarg;
@@ -1081,51 +1103,52 @@ process_flags(int argc, char **argv)
 #ifdef SHADOWPWD
                case 'e':
                        if (*optarg) {
-                               user_expire = strtoday(optarg);
+                               user_expire = strtoday (optarg);
                                if (user_expire == -1) {
-                                       fprintf(stderr,
-                                               _("%s: invalid date `%s'\n"),
-                                               Prog, optarg);
-                                       exit(E_BAD_ARG);
+                                       fprintf (stderr,
+                                                _
+                                                ("%s: invalid date `%s'\n"),
+                                                Prog, optarg);
+                                       exit (E_BAD_ARG);
                                }
-                               user_expire *= DAY/SCALE;
+                               user_expire *= DAY / SCALE;
                        } else
                                user_expire = -1;
                        eflg++;
                        break;
                case 'f':
-                       user_inactive = get_number(optarg);
+                       user_inactive = get_number (optarg);
                        fflg++;
                        break;
 #endif
                case 'g':
-                       grp = getgr_nam_gid(optarg);
+                       grp = getgr_nam_gid (optarg);
                        if (!grp) {
-                               fprintf(stderr,
-                                       _("%s: unknown group %s\n"),
-                                       Prog, optarg);
-                               exit(E_NOTFOUND);
+                               fprintf (stderr,
+                                        _("%s: unknown group %s\n"),
+                                        Prog, optarg);
+                               exit (E_NOTFOUND);
                        }
                        user_newgid = grp->gr_gid;
                        gflg++;
                        break;
                case 'G':
-                       if (get_groups(optarg))
-                               exit(E_NOTFOUND);
+                       if (get_groups (optarg))
+                               exit (E_NOTFOUND);
                        Gflg++;
                        break;
                case 'l':
-                       if (!check_user_name(optarg)) {
-                               fprintf(stderr,
-                                       _("%s: invalid field `%s'\n"),
-                                       Prog, optarg);
-                               exit(E_BAD_ARG);
+                       if (!check_user_name (optarg)) {
+                               fprintf (stderr,
+                                        _("%s: invalid field `%s'\n"),
+                                        Prog, optarg);
+                               exit (E_BAD_ARG);
                        }
 
                        /*
-                        * If the name does not really change, we
-                        * mustn't set the flag as this will cause
-                        * rather serious problems later!
+                        * If the name does not really change, we mustn't
+                        * set the flag as this will cause rather serious
+                        * problems later!
                         */
 
                        if (strcmp (user_name, optarg))
@@ -1140,13 +1163,13 @@ process_flags(int argc, char **argv)
                        Lflg++;
                        break;
                case 'm':
-                       if (! dflg)
+                       if (!dflg)
                                usage ();
 
                        mflg++;
                        break;
                case 'o':
-                       if (! uflg)
+                       if (!uflg)
                                usage ();
 
                        oflg++;
@@ -1159,17 +1182,17 @@ process_flags(int argc, char **argv)
                        pflg++;
                        break;
                case 's':
-                       if (! VALID (optarg)) {
-                               fprintf(stderr,
-                                       _("%s: invalid field `%s'\n"),
-                                       Prog, optarg);
-                               exit(E_BAD_ARG);
+                       if (!VALID (optarg)) {
+                               fprintf (stderr,
+                                        _("%s: invalid field `%s'\n"),
+                                        Prog, optarg);
+                               exit (E_BAD_ARG);
                        }
                        user_shell = optarg;
                        sflg++;
                        break;
                case 'u':
-                       user_newid = get_number(optarg);
+                       user_newid = get_id (optarg);
                        uflg++;
                        break;
                case 'U':
@@ -1184,16 +1207,16 @@ process_flags(int argc, char **argv)
                anyflag++;
        }
        if (anyflag == 0) {
-               fprintf(stderr, _("%s: no flags given\n"), Prog);
-               exit(E_USAGE);
+               fprintf (stderr, _("%s: no flags given\n"), Prog);
+               exit (E_USAGE);
        }
-
 #ifdef SHADOWPWD
        if (!is_shadow_pwd && (eflg || fflg)) {
-               fprintf(stderr,
-                       _("%s: shadow passwords required for -e and -f\n"),
-                       Prog);
-               exit(E_USAGE);
+               fprintf (stderr,
+                        _
+                        ("%s: shadow passwords required for -e and -f\n"),
+                        Prog);
+               exit (E_USAGE);
        }
 #endif
 
@@ -1207,36 +1230,38 @@ process_flags(int argc, char **argv)
                uflg = oflg = 0;
 
        if (lflg && getpwnam (user_newname)) {
-               fprintf(stderr, _("%s: user %s exists\n"), Prog, user_newname);
-               exit(E_NAME_IN_USE);
+               fprintf (stderr, _("%s: user %s exists\n"), Prog,
+                        user_newname);
+               exit (E_NAME_IN_USE);
        }
 
-       if (uflg && !oflg && getpwuid(user_newid)) {
-               fprintf(stderr, _("%s: uid %ld is not unique\n"),
-                       Prog, (long) user_newid);
-               exit(E_UID_IN_USE);
+       if (uflg && !oflg && getpwuid (user_newid)) {
+               fprintf (stderr, _("%s: uid %lu is not unique\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.
+ *     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)
+static void close_files (void)
 {
-       if (! pw_close ()) {
-               fprintf(stderr, _("%s: cannot rewrite password file\n"), Prog);
-               fail_exit(E_PW_UPDATE);
+       if (!pw_close ()) {
+               fprintf (stderr, _("%s: cannot rewrite password file\n"),
+                        Prog);
+               fail_exit (E_PW_UPDATE);
        }
 #ifdef SHADOWPWD
-       if (is_shadow_pwd && ! spw_close ()) {
-               fprintf(stderr, _("%s: cannot rewrite shadow password file\n"), 
-                       Prog);
-               fail_exit(E_PW_UPDATE);
+       if (is_shadow_pwd && !spw_close ()) {
+               fprintf (stderr,
+                        _("%s: cannot rewrite shadow password file\n"),
+                        Prog);
+               fail_exit (E_PW_UPDATE);
        }
 #endif
 #ifdef SHADOWPWD
@@ -1265,27 +1290,30 @@ close_files(void)
  *     open_files() opens the two password files.
  */
 
-static void
-open_files(void)
+static void open_files (void)
 {
-       if (!pw_lock()) {
-               fprintf(stderr, _("%s: unable to lock password file\n"), Prog);
-               exit(E_PW_UPDATE);
+       if (!pw_lock ()) {
+               fprintf (stderr, _("%s: unable to lock password file\n"),
+                        Prog);
+               exit (E_PW_UPDATE);
        }
-       if (! pw_open (O_RDWR)) {
-               fprintf(stderr, _("%s: unable to open password file\n"), Prog);
-               fail_exit(E_PW_UPDATE);
+       if (!pw_open (O_RDWR)) {
+               fprintf (stderr, _("%s: unable to open password file\n"),
+                        Prog);
+               fail_exit (E_PW_UPDATE);
        }
 #ifdef SHADOWPWD
-       if (is_shadow_pwd && ! spw_lock ()) {
-               fprintf(stderr, _("%s: cannot lock shadow password file\n"),
-                       Prog);
-               fail_exit(E_PW_UPDATE);
+       if (is_shadow_pwd && !spw_lock ()) {
+               fprintf (stderr,
+                        _("%s: cannot lock shadow password file\n"),
+                        Prog);
+               fail_exit (E_PW_UPDATE);
        }
-       if (is_shadow_pwd && ! spw_open (O_RDWR)) {
-               fprintf(stderr, _("%s: cannot open shadow password file\n"),
-                       Prog);
-               fail_exit(E_PW_UPDATE);
+       if (is_shadow_pwd && !spw_open (O_RDWR)) {
+               fprintf (stderr,
+                        _("%s: cannot open shadow password file\n"),
+                        Prog);
+               fail_exit (E_PW_UPDATE);
        }
 #endif
 }
@@ -1293,33 +1321,33 @@ open_files(void)
 /*
  * usr_update - create the user entries
  *
- *     usr_update() creates the password file entries for this user
- *     and will update the group entries if required.
+ *     usr_update() creates the password file entries for this user and
+ *     will update the group entries if required.
  */
 
-static void
-usr_update(void)
+static void usr_update (void)
 {
        struct passwd pwent;
        const struct passwd *pwd;
+
 #ifdef SHADOWPWD
        struct spwd spent;
        const struct spwd *spwd = NULL;
 #endif
 #ifdef AUTH_METHODS
-       char    old_auth[BUFSIZ];
-       char    auth_buf[BUFSIZ];
+       char old_auth[BUFSIZ];
+       char auth_buf[BUFSIZ];
 #endif
 
        /*
         * Locate the entry in /etc/passwd, which MUST exist.
         */
 
-       pwd = pw_locate(user_name);
+       pwd = pw_locate (user_name);
        if (!pwd) {
-               fprintf(stderr, _("%s: %s not found in /etc/passwd\n"),
-                       Prog, user_name);
-               fail_exit(E_NOTFOUND);
+               fprintf (stderr, _("%s: %s not found in /etc/passwd\n"),
+                        Prog, user_name);
+               fail_exit (E_NOTFOUND);
        }
        pwent = *pwd;
        new_pwent (&pwent);
@@ -1327,11 +1355,11 @@ usr_update(void)
 #ifdef SHADOWPWD
 
        /* 
-        * Locate the entry in /etc/shadow.  It doesn't have to
-        * exist, and won't be created if it doesn't.
+        * 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))) {
+       if (is_shadow_pwd && (spwd = spw_locate (user_name))) {
                spent = *spwd;
                new_spent (&spent);
        }
@@ -1350,41 +1378,48 @@ usr_update(void)
 
        /*
         * XXX - this code needs some checking, changing the user name with
-        * "usermod -l new old" clears the password for this user :-(.
-        * For now, just don't define AUTH_METHODS and all will be well.
-        * Most programs don't support "administrator defined authentication
+        * "usermod -l new old" clears the password for this user :-(. For
+        * now, just don't define AUTH_METHODS and all will be well. Most
+        * programs don't support "administrator defined authentication
         * methods" and PAM (when done) will be better anyway :-).  --marekm
         */
        if (lflg || (Aflg && strcmp (old_auth, user_auth) != 0)) {
                delete_auths (old_auth, user_auth, auth_buf);
                if (auth_buf[0] && pw_auth (auth_buf, user_name,
-                               PW_DELETE, (char *) 0)) {
-                       fprintf(stderr,
-                               _("%s: error deleting authentication method\n"),
-                               Prog);
-                       SYSLOG((LOG_ERR, "error deleting auth for `%s'\n",
-                               user_name));
-                       fail_exit(E_PW_UPDATE);
+                                           PW_DELETE, (char *) 0)) {
+                       fprintf (stderr,
+                                _
+                                ("%s: error deleting authentication method\n"),
+                                Prog);
+                       SYSLOG ((LOG_ERR, "error deleting auth for `%s'",
+                                user_name));
+                       fail_exit (E_PW_UPDATE);
                }
                add_auths (old_auth, user_auth, auth_buf);
                if (auth_buf[0] == '@' && pw_auth (auth_buf,
-                       lflg ? user_newname:user_name, PW_ADD, (char *) 0)) {
-                       fprintf(stderr,
-                               _("%s: error adding authentication method\n"),
-                               Prog);
-                       SYSLOG((LOG_ERR, "error adding auth for `%s'\n",
-                               lflg ? user_newname:user_name));
-                       fail_exit(E_PW_UPDATE);
+                                                  lflg ? user_newname :
+                                                  user_name, PW_ADD,
+                                                  (char *) 0)) {
+                       fprintf (stderr,
+                                _
+                                ("%s: error adding authentication method\n"),
+                                Prog);
+                       SYSLOG ((LOG_ERR, "error adding auth for `%s'",
+                                lflg ? user_newname : user_name));
+                       fail_exit (E_PW_UPDATE);
                }
                update_auths (old_auth, user_auth, auth_buf);
                if (lflg && auth_buf[0] == '@' && pw_auth (auth_buf,
-                               user_newname, PW_CHANGE, user_name)) {
-                       fprintf(stderr,
-                               _("%s: error changing authentication method\n"),
-                               Prog);
-                       SYSLOG((LOG_ERR, "error changing auth for `%s'\n",
-                               lflg ? user_newname:user_name));
-                       fail_exit(E_PW_UPDATE);
+                                                          user_newname,
+                                                          PW_CHANGE,
+                                                          user_name)) {
+                       fprintf (stderr,
+                                _
+                                ("%s: error changing authentication method\n"),
+                                Prog);
+                       SYSLOG ((LOG_ERR, "error changing auth for `%s'",
+                                lflg ? user_newname : user_name));
+                       fail_exit (E_PW_UPDATE);
                }
 #ifdef SHADOWPWD
                if (spwd)
@@ -1393,193 +1428,201 @@ usr_update(void)
 #endif
                        pwent.pw_passwd = user_auth;
        }
-#endif  /* AUTH_METHODS */
-       if (lflg || uflg || gflg || cflg || dflg || sflg || Aflg || pflg || Lflg || Uflg) {
-               if (! pw_update (&pwent)) {
-                       fprintf(stderr,
-                               _("%s: error changing password entry\n"),
-                               Prog);
-                       fail_exit(E_PW_UPDATE);
+#endif                         /* AUTH_METHODS */
+       if (lflg || uflg || gflg || cflg || dflg || sflg || Aflg || pflg
+           || Lflg || Uflg) {
+               if (!pw_update (&pwent)) {
+                       fprintf (stderr,
+                                _("%s: error changing password entry\n"),
+                                Prog);
+                       fail_exit (E_PW_UPDATE);
                }
-               if (lflg && ! pw_remove (user_name)) {
-                       fprintf(stderr,
-                               _("%s: error removing password entry\n"),
-                               Prog);
-                       fail_exit(E_PW_UPDATE);
+               if (lflg && !pw_remove (user_name)) {
+                       fprintf (stderr,
+                                _("%s: error removing password entry\n"),
+                                Prog);
+                       fail_exit (E_PW_UPDATE);
                }
 #ifdef NDBM
-               if (pw_dbm_present()) {
-                       if (! pw_dbm_update (&pwent)) {
-                               fprintf(stderr,
-                                       _("%s: error adding password dbm entry\n"),
-                                       Prog);
-                               fail_exit(E_PW_UPDATE);
+               if (pw_dbm_present ()) {
+                       if (!pw_dbm_update (&pwent)) {
+                               fprintf (stderr,
+                                        _
+                                        ("%s: error adding password dbm entry\n"),
+                                        Prog);
+                               fail_exit (E_PW_UPDATE);
                        }
                        if (lflg && (pwd = getpwnam (user_name)) &&
-                                       ! pw_dbm_remove (pwd)) {
-                               fprintf(stderr,
-                                       _("%s: error removing passwd dbm entry\n"),
-                                       Prog);
-                               fail_exit(E_PW_UPDATE);
+                           !pw_dbm_remove (pwd)) {
+                               fprintf (stderr,
+                                        _
+                                        ("%s: error removing passwd dbm entry\n"),
+                                        Prog);
+                               fail_exit (E_PW_UPDATE);
                        }
                }
 #endif
        }
 #ifdef SHADOWPWD
        if (spwd && (lflg || eflg || fflg || Aflg || pflg || Lflg || Uflg)) {
-               if (! spw_update (&spent)) {
-                       fprintf(stderr,
-                               _("%s: error adding new shadow password entry\n"),
-                               Prog);
-                       fail_exit(E_PW_UPDATE);
+               if (!spw_update (&spent)) {
+                       fprintf (stderr,
+                                _
+                                ("%s: error adding new shadow password entry\n"),
+                                Prog);
+                       fail_exit (E_PW_UPDATE);
                }
-               if (lflg && ! spw_remove (user_name)) {
-                       fprintf(stderr,
-                               _("%s: error removing shadow password entry\n"),
-                               Prog);
-                       fail_exit(E_PW_UPDATE);
+               if (lflg && !spw_remove (user_name)) {
+                       fprintf (stderr,
+                                _
+                                ("%s: error removing shadow password entry\n"),
+                                Prog);
+                       fail_exit (E_PW_UPDATE);
                }
        }
 #ifdef NDBM
-       if (spwd && sp_dbm_present()) {
-               if (! sp_dbm_update (&spent)) {
-                       fprintf(stderr,
-                               _("%s: error updating shadow passwd dbm entry\n"),
-                               Prog);
-                       fail_exit(E_PW_UPDATE);
+       if (spwd && sp_dbm_present ()) {
+               if (!sp_dbm_update (&spent)) {
+                       fprintf (stderr,
+                                _
+                                ("%s: error updating shadow passwd dbm entry\n"),
+                                Prog);
+                       fail_exit (E_PW_UPDATE);
                }
-               if (lflg && ! sp_dbm_remove (user_name)) {
-                       fprintf(stderr,
-                               _("%s: error removing shadow passwd dbm entry\n"),
-                               Prog);
-                       fail_exit(E_PW_UPDATE);
+               if (lflg && !sp_dbm_remove (user_name)) {
+                       fprintf (stderr,
+                                _
+                                ("%s: error removing shadow passwd dbm entry\n"),
+                                Prog);
+                       fail_exit (E_PW_UPDATE);
                }
        }
-#endif /* NDBM */
-#endif /* SHADOWPWD */
+#endif                         /* NDBM */
+#endif                         /* SHADOWPWD */
 }
 
 /*
  * 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.
+ *     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)
+static void move_home (void)
 {
-       struct  stat    sb;
+       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))
+               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);
+               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)) {
                        if (errno == EXDEV) {
-                               if (mkdir (user_newhome, sb.st_mode & 0777)) {
-                                       fprintf(stderr,
-                                               _("%s: can't create %s\n"),
-                                               Prog, user_newhome);
+                               if (mkdir
+                                   (user_newhome, sb.st_mode & 0777)) {
+                                       fprintf (stderr,
+                                                _
+                                                ("%s: can't create %s\n"),
+                                                Prog, user_newhome);
                                }
                                if (chown (user_newhome,
-                                               sb.st_uid, sb.st_gid)) {
-                                       fprintf(stderr,
-                                               _("%s: can't chown %s\n"),
-                                               Prog, user_newhome);
+                                          sb.st_uid, sb.st_gid)) {
+                                       fprintf (stderr,
+                                                _("%s: can't chown %s\n"),
+                                                Prog, user_newhome);
                                        rmdir (user_newhome);
-                                       fail_exit(E_HOMEDIR);
+                                       fail_exit (E_HOMEDIR);
                                }
                                if (copy_tree (user_home, user_newhome,
-                                               uflg ? user_newid:-1,
-                                               gflg ? user_newgid:-1) == 0 &&
-                                       remove_tree (user_home) == 0 &&
-                                               rmdir (user_home) == 0)
+                                              uflg ? user_newid : -1,
+                                              gflg ? user_newgid : -1) ==
+                                   0 && remove_tree (user_home) == 0
+                                   && rmdir (user_home) == 0)
                                        return;
 
                                (void) remove_tree (user_newhome);
                                (void) rmdir (user_newhome);
                        }
-                       fprintf(stderr,
-                               _("%s: cannot rename directory %s to %s\n"),
-                               Prog, user_home, user_newhome);
-                       fail_exit(E_HOMEDIR);
+                       fprintf (stderr,
+                                _
+                                ("%s: cannot rename directory %s to %s\n"),
+                                Prog, user_home, user_newhome);
+                       fail_exit (E_HOMEDIR);
                }
        }
        if (uflg || gflg)
-               chown (dflg ? user_newhome:user_home,
-                       uflg ? user_newid:user_id,
-                       gflg ? user_newgid:user_gid);
+               chown (dflg ? user_newhome : user_home,
+                      uflg ? user_newid : user_id,
+                      gflg ? user_newgid : user_gid);
 }
 
 /*
  * update_files - update the lastlog and faillog files
  */
 
-static void
-update_files(void)
+static void update_files (void)
 {
-       struct  lastlog ll;
-       struct  faillog fl;
-       int     fd;
+       struct lastlog ll;
+       struct faillog fl;
+       int fd;
 
        /*
-        * 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.
+        * 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.
         */
 
-       if ((fd = open(LASTLOG_FILE, O_RDWR)) != -1) {
-               lseek(fd, (off_t) user_id * sizeof ll, SEEK_SET);
-               if (read(fd, (char *) &ll, sizeof ll) == sizeof ll) {
-                       lseek(fd, (off_t) user_newid * sizeof ll, SEEK_SET);
-                       write(fd, (char *) &ll, sizeof ll);
+       if ((fd = open (LASTLOG_FILE, O_RDWR)) != -1) {
+               lseek (fd, (off_t) user_id * sizeof ll, SEEK_SET);
+               if (read (fd, (char *) &ll, sizeof ll) == sizeof ll) {
+                       lseek (fd, (off_t) user_newid * sizeof ll,
+                              SEEK_SET);
+                       write (fd, (char *) &ll, sizeof ll);
                }
-               close(fd);
+               close (fd);
        }
 
        /*
         * Relocate the "faillog" entries in the same manner.
         */
 
-       if ((fd = open(FAILLOG_FILE, O_RDWR)) != -1) {
-               lseek(fd, (off_t) user_id * sizeof fl, SEEK_SET);
-               if (read(fd, (char *) &fl, sizeof fl) == sizeof fl) {
-                       lseek(fd, (off_t) user_newid * sizeof fl, SEEK_SET);
-                       write(fd, (char *) &fl, sizeof fl);
+       if ((fd = open (FAILLOG_FILE, O_RDWR)) != -1) {
+               lseek (fd, (off_t) user_id * sizeof fl, SEEK_SET);
+               if (read (fd, (char *) &fl, sizeof fl) == sizeof fl) {
+                       lseek (fd, (off_t) user_newid * sizeof fl,
+                              SEEK_SET);
+                       write (fd, (char *) &fl, sizeof fl);
                }
-               close(fd);
+               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
+ * 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)
+static void move_mailbox (void)
 {
        const char *maildir;
        char mailfile[1024], newmailfile[1024];
        int fd;
        struct stat st;
 
-       maildir = getdef_str("MAIL_DIR");
+       maildir = getdef_str ("MAIL_DIR");
 #ifdef MAIL_SPOOL_DIR
-       if (!maildir && !getdef_str("MAIL_FILE"))
+       if (!maildir && !getdef_str ("MAIL_FILE"))
                maildir = MAIL_SPOOL_DIR;
 #endif
        if (!maildir)
@@ -1592,115 +1635,118 @@ move_mailbox(void)
         * between stat and chown).  --marekm
         */
 
-       snprintf(mailfile, sizeof mailfile, "%s/%s", maildir, user_name);
-       fd = open(mailfile, O_RDONLY | O_NONBLOCK, 0);
+       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);
+                       perror (mailfile);
                return;
        }
-       if (fstat(fd, &st) < 0) {
-               perror("fstat");
-               close(fd);
+       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);
+               fprintf (stderr, _("%s: warning: %s not owned by %s\n"),
+                        Prog, mailfile, user_name);
+               close (fd);
                return;
        }
-       if (uflg && fchown(fd, user_newid, (gid_t) -1) < 0)
-               perror(_("failed to change mailbox owner"));
+       if (uflg && fchown (fd, user_newid, (gid_t) - 1) < 0)
+               perror (_("failed to change mailbox owner"));
 
-       close(fd);
+       close (fd);
 
        if (lflg) {
-               snprintf(newmailfile, sizeof newmailfile, "%s/%s", maildir, user_newname);
-               if (link(mailfile, newmailfile) || unlink(mailfile))
-                       perror(_("failed to rename mailbox"));
+               snprintf (newmailfile, sizeof newmailfile, "%s/%s",
+                         maildir, user_newname);
+               if (link (mailfile, newmailfile) || unlink (mailfile))
+                       perror (_("failed to rename mailbox"));
        }
 }
 #endif
 
 #ifdef USE_PAM
 static struct pam_conv conv = {
-    misc_conv,
-    NULL
+       misc_conv,
+       NULL
 };
-#endif /* USE_PAM */
+#endif                         /* USE_PAM */
 
 /*
  * main - usermod command
  */
 
-int
-main(int argc, char **argv)
+int main (int argc, char **argv)
 {
        int grp_err = 0;
+
 #ifdef USE_PAM
        pam_handle_t *pamh = NULL;
        struct passwd *pampw;
        int retval;
 #endif
 
-       sys_ngroups=sysconf(_SC_NGROUPS_MAX);
-       user_groups=malloc((1+sys_ngroups)*sizeof(char *));
+       sys_ngroups = sysconf (_SC_NGROUPS_MAX);
+       user_groups = malloc ((1 + sys_ngroups) * sizeof (char *));
        /*
         * Get my name so that I can use it to report errors.
         */
-       Prog = Basename(argv[0]);
+       Prog = Basename (argv[0]);
 
-       setlocale(LC_ALL, "");
-       bindtextdomain(PACKAGE, LOCALEDIR);
-       textdomain(PACKAGE);
+       setlocale (LC_ALL, "");
+       bindtextdomain (PACKAGE, LOCALEDIR);
+       textdomain (PACKAGE);
 
 #ifdef USE_PAM
        retval = PAM_SUCCESS;
 
-       pampw = getpwuid(getuid());
+       pampw = getpwuid (getuid ());
        if (pampw == NULL) {
                retval = PAM_USER_UNKNOWN;
        }
 
        if (retval == PAM_SUCCESS) {
-               retval = pam_start("shadow", pampw->pw_name, &conv, &pamh);
+               retval =
+                   pam_start ("shadow", pampw->pw_name, &conv, &pamh);
        }
 
        if (retval == PAM_SUCCESS) {
-               retval = pam_authenticate(pamh, 0);
+               retval = pam_authenticate (pamh, 0);
                if (retval != PAM_SUCCESS) {
-                       pam_end(pamh, retval);
+                       pam_end (pamh, retval);
                }
        }
 
        if (retval == PAM_SUCCESS) {
-               retval = pam_acct_mgmt(pamh, 0);
+               retval = pam_acct_mgmt (pamh, 0);
                if (retval != PAM_SUCCESS) {
-                       pam_end(pamh, retval);
+                       pam_end (pamh, retval);
                }
        }
 
        if (retval != PAM_SUCCESS) {
-               fprintf (stderr, _("%s: PAM authentication failed\n"), Prog);
+               fprintf (stderr, _("%s: PAM authentication failed\n"),
+                        Prog);
                exit (1);
        }
-#endif /* USE_PAM */
+#endif                         /* USE_PAM */
 
-       OPENLOG(Prog);
+       OPENLOG (Prog);
 
 #ifdef SHADOWPWD
-       is_shadow_pwd = spw_file_present();
+       is_shadow_pwd = spw_file_present ();
 #endif
 #ifdef SHADOWGRP
-       is_shadow_grp = sgr_file_present();
+       is_shadow_grp = sgr_file_present ();
 #endif
 
        /*
-        * The open routines for the NDBM files don't use read-write
-        * as the mode, so we have to clue them in.
+        * The open routines for the NDBM files don't use read-write as the
+        * mode, so we have to clue them in.
         */
 
 #ifdef NDBM
@@ -1712,7 +1758,7 @@ main(int argc, char **argv)
 #ifdef SHADOWGRP
        sg_dbm_mode = O_RDWR;
 #endif
-#endif /* NDBM */
+#endif                         /* NDBM */
        process_flags (argc, argv);
 
        /*
@@ -1720,44 +1766,44 @@ main(int argc, char **argv)
         * change the home directory, then close and update the files.
         */
 
-       open_files();
+       open_files ();
 
-       usr_update();
+       usr_update ();
 
-       close_files();
+       close_files ();
 
        if (Gflg || lflg)
-               grp_err = grp_update();
+               grp_err = grp_update ();
 
        if (mflg)
-               move_home();
+               move_home ();
 
 #ifndef NO_MOVE_MAILBOX
        if (lflg || uflg)
-               move_mailbox();
+               move_mailbox ();
 #endif
 
        if (uflg) {
-               update_files();
+               update_files ();
 
                /*
-                * Change the UID on all of the files owned by `user_id'
-                * to `user_newid' in the user's home directory.
+                * 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);
+               chown_tree (dflg ? user_newhome : user_home,
+                           user_id, user_newid,
+                           user_gid, gflg ? user_newgid : user_gid);
        }
 
        if (grp_err)
-               exit(E_GRP_UPDATE);
+               exit (E_GRP_UPDATE);
 
 #ifdef USE_PAM
        if (retval == PAM_SUCCESS) {
-               retval = pam_chauthtok(pamh, 0);
+               retval = pam_chauthtok (pamh, 0);
                if (retval != PAM_SUCCESS) {
-                       pam_end(pamh, retval);
+                       pam_end (pamh, retval);
                }
        }
 
@@ -1767,9 +1813,8 @@ main(int argc, char **argv)
        }
 
        if (retval == PAM_SUCCESS)
-               pam_end(pamh, PAM_SUCCESS);
-#endif /* USE_PAM */
+               pam_end (pamh, PAM_SUCCESS);
+#endif                         /* USE_PAM */
 
-       exit(E_SUCCESS);
-       /*NOTREACHED*/
-}
+       exit (E_SUCCESS);
+ /*NOTREACHED*/}
index ed450d4788239a2b8b57b7ef09c43c73a7b5dcd0..cf2f8f1978072430002795cd5ec1adec59a0138f 100644 (file)
@@ -11,7 +11,7 @@
 
   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
+  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
 #include <config.h>
 
 #include "rcsid.h"
-RCSID(PKG_VER "$Id: vipw.c,v 1.2 2000/08/26 18:27:19 marekm Exp $")
-
+RCSID (PKG_VER "$Id: vipw.c,v 1.3 2002/01/05 15:41:44 kloczek Exp $")
 #include "defines.h"
-
 #include <errno.h>
 #include <sys/stat.h>
 #include <unistd.h>
@@ -40,67 +38,71 @@ RCSID(PKG_VER "$Id: vipw.c,v 1.2 2000/08/26 18:27:19 marekm Exp $")
 #include "shadowio.h"
 #include "groupio.h"
 #include "sgroupio.h"
-
-
 static const char *progname, *filename, *fileeditname;
 static int filelocked = 0, createedit = 0;
-static int (*unlock)(void);
+static int (*unlock) (void);
 
 /* local function prototypes */
-static int create_backup_file(FILE *, const char *, struct stat *);
-static void vipwexit(const char *, int, int);
-static void vipwedit(const char *, int (*)(void), int (*)(void));
+static int create_backup_file (FILE *, const char *, struct stat *);
+static void vipwexit (const char *, int, int);
+static void vipwedit (const char *, int (*)(void), int (*)(void));
 
 static int
-create_backup_file(FILE *fp, const char *backup, struct stat *sb)
+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");
-  umask(mask);
-  if (!bkfp) return -1;
-
-  rewind(fp);
-  while ((c = getc(fp)) != EOF) {
-    if (putc(c, bkfp) == EOF) break;
-  }
-
-  if (c != EOF || fflush(bkfp)) {
-    fclose(bkfp);
-    unlink(backup);
-    return -1;
-  }
-  if (fclose(bkfp)) {
-    unlink(backup);
-    return -1;
-  }
-
-  ub.actime = sb->st_atime;
-  ub.modtime = sb->st_mtime;
-  if (utime(backup, &ub) ||
-      chmod(backup, sb->st_mode) ||
-      chown(backup, sb->st_uid, sb->st_gid)) {
-    unlink(backup);
-    return -1;
-  }
-  return 0;
+       struct utimbuf ub;
+       FILE *bkfp;
+       int c;
+       mode_t mask;
+
+       mask = umask (077);
+       bkfp = fopen (backup, "w");
+       umask (mask);
+       if (!bkfp)
+               return -1;
+
+       rewind (fp);
+       while ((c = getc (fp)) != EOF) {
+               if (putc (c, bkfp) == EOF)
+                       break;
+       }
+
+       if (c != EOF || fflush (bkfp)) {
+               fclose (bkfp);
+               unlink (backup);
+               return -1;
+       }
+       if (fclose (bkfp)) {
+               unlink (backup);
+               return -1;
+       }
+
+       ub.actime = sb->st_atime;
+       ub.modtime = sb->st_mtime;
+       if (utime (backup, &ub) ||
+           chmod (backup, sb->st_mode) ||
+           chown (backup, sb->st_uid, sb->st_gid)) {
+               unlink (backup);
+               return -1;
+       }
+       return 0;
 }
 
 
-static void
-vipwexit(const char *msg, int syserr, int ret)
+static void vipwexit (const char *msg, int syserr, int ret)
 {
-  int err = errno;
-  if (filelocked) (*unlock)();
-  if (createedit) unlink(fileeditname);
-  if (msg) fprintf(stderr, "%s: %s", progname, msg);
-  if (syserr) fprintf(stderr, ": %s", strerror(err));
-  fprintf(stderr, _("\n%s: %s is unchanged\n"), progname, filename);
-  exit(ret);
+       int err = errno;
+
+       if (filelocked)
+               (*unlock) ();
+       if (createedit)
+               unlink (fileeditname);
+       if (msg)
+               fprintf (stderr, "%s: %s", progname, msg);
+       if (syserr)
+               fprintf (stderr, ": %s", strerror (err));
+       fprintf (stderr, _("\n%s: %s is unchanged\n"), progname, filename);
+       exit (ret);
 }
 
 #ifndef DEFAULT_EDITOR
@@ -108,145 +110,160 @@ vipwexit(const char *msg, int syserr, int ret)
 #endif
 
 static void
-vipwedit(const char *file, int (*file_lock)(void), int (*file_unlock)(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)) vipwexit(file, 1, 1);
-  if (!file_lock()) vipwexit(_("Couldn't lock file"), errno, 5);
-  filelocked = 1;
-
-  /* edited copy has same owners, perm */
-  if (stat(file, &st1)) vipwexit(file, 1, 1);
-  if (!(f = fopen(file, "r"))) vipwexit(file, 1, 1);
-  if (create_backup_file(f, fileedit, &st1))
-    vipwexit(_("Couldn't make backup"), errno, 1);
-  createedit = 1;
-  
-  editor = getenv("VISUAL");
-  if (!editor)
-    editor = getenv("EDITOR");
-  if (!editor)
-    editor = DEFAULT_EDITOR;
-  
-  if ((pid = fork()) == -1) vipwexit("fork", 1, 1);
-  else if (!pid) {
+       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))
+               vipwexit (file, 1, 1);
+       if (!file_lock ())
+               vipwexit (_("Couldn't lock file"), errno, 5);
+       filelocked = 1;
+
+       /* edited copy has same owners, perm */
+       if (stat (file, &st1))
+               vipwexit (file, 1, 1);
+       if (!(f = fopen (file, "r")))
+               vipwexit (file, 1, 1);
+       if (create_backup_file (f, fileedit, &st1))
+               vipwexit (_("Couldn't make backup"), errno, 1);
+       createedit = 1;
+
+       editor = getenv ("VISUAL");
+       if (!editor)
+               editor = getenv ("EDITOR");
+       if (!editor)
+               editor = DEFAULT_EDITOR;
+
+       if ((pid = fork ()) == -1)
+               vipwexit ("fork", 1, 1);
+       else if (!pid) {
 #if 0
-    execlp(editor, editor, fileedit, (char *) 0);
-    fprintf(stderr, "%s: %s: %s\n", progname, editor, strerror(errno));
-    exit(1);
+               execlp (editor, editor, fileedit, (char *) 0);
+               fprintf (stderr, "%s: %s: %s\n", progname, editor,
+                        strerror (errno));
+               exit (1);
 #else
-    /* 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);
+               /* 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);
 #endif
-  }
-
-  for (;;) {
-    pid = waitpid(pid, &status, WUNTRACED);
-    if (WIFSTOPPED(status)) {
-      kill(getpid(), SIGSTOP);
-      kill(getpid(), SIGCONT);
-    }
-    else break;
-  }
-
-  if (pid == -1 || !WIFEXITED(status) || WEXITSTATUS(status))
-    vipwexit(editor, 1, 1);
-
-  if (stat(fileedit, &st2)) vipwexit(fileedit, 1, 1);
-  if (st1.st_mtime == st2.st_mtime) vipwexit(0, 0, 0);
-
-  /* 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 = 0;
-  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);
-  }
-
-  (*file_unlock)();
+       }
+
+       for (;;) {
+               pid = waitpid (pid, &status, WUNTRACED);
+               if (WIFSTOPPED (status)) {
+                       kill (getpid (), SIGSTOP);
+                       kill (getpid (), SIGCONT);
+               } else
+                       break;
+       }
+
+       if (pid == -1 || !WIFEXITED (status) || WEXITSTATUS (status))
+               vipwexit (editor, 1, 1);
+
+       if (stat (fileedit, &st2))
+               vipwexit (fileedit, 1, 1);
+       if (st1.st_mtime == st2.st_mtime)
+               vipwexit (0, 0, 0);
+
+       /*
+        * 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 = 0;
+       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);
+       }
+
+       (*file_unlock) ();
 }
 
 
-int
-main(int argc, char **argv)
+int main (int argc, char **argv)
 {
-  int flag;
-  int editshadow = 0;
-  char *c;
-  int e = 1;
-  int do_vipw;
-
-  setlocale(LC_ALL, "");
-  bindtextdomain(PACKAGE, LOCALEDIR);
-  textdomain(PACKAGE);
-
-  progname = ((c = strrchr(*argv, '/')) ? c+1 : *argv);
-  do_vipw = (strcmp(progname, "vigr") != 0);
-
-  while ((flag = getopt(argc, argv, "ghps")) != EOF) {
-    switch (flag) {
-    case 'p':
-      do_vipw = 1;
-      break;
-    case 'g':
-      do_vipw = 0;
-      break;
-    case 's':
-      editshadow = 1;
-      break;
-    case 'h':
-      e = 0;
-    default:
-      printf(_("Usage:\n\
+       int flag;
+       int editshadow = 0;
+       char *c;
+       int e = 1;
+       int do_vipw;
+
+       setlocale (LC_ALL, "");
+       bindtextdomain (PACKAGE, LOCALEDIR);
+       textdomain (PACKAGE);
+
+       progname = ((c = strrchr (*argv, '/')) ? c + 1 : *argv);
+       do_vipw = (strcmp (progname, "vigr") != 0);
+
+       while ((flag = getopt (argc, argv, "ghps")) != EOF) {
+               switch (flag) {
+               case 'p':
+                       do_vipw = 1;
+                       break;
+               case 'g':
+                       do_vipw = 0;
+                       break;
+               case 's':
+                       editshadow = 1;
+                       break;
+               case 'h':
+                       e = 0;
+               default:
+                       printf (_("Usage:\n\
 `vipw' edits /etc/passwd        `vipw -s' edits /etc/shadow\n\
 `vigr' edits /etc/group         `vigr -s' edits /etc/gshadow\n\
 "));
-      exit(e);
-    }
-  }
+                       exit (e);
+               }
+       }
 
-  if (do_vipw) {
+       if (do_vipw) {
 #ifdef SHADOWPWD
-    if (editshadow)
-      vipwedit(SHADOW_FILE, spw_lock, spw_unlock);
-    else
+               if (editshadow)
+                       vipwedit (SHADOW_FILE, spw_lock, spw_unlock);
+               else
 #endif
-      vipwedit(PASSWD_FILE, pw_lock, pw_unlock);
-  }
-  else {
+                       vipwedit (PASSWD_FILE, pw_lock, pw_unlock);
+       } else {
 #ifdef SHADOWGRP
-    if (editshadow)
-      vipwedit(SGROUP_FILE, sgr_lock, sgr_unlock);
-    else
+               if (editshadow)
+                       vipwedit (SGROUP_FILE, sgr_lock, sgr_unlock);
+               else
 #endif
-      vipwedit(GROUP_FILE, gr_lock, gr_unlock);
-  }
+                       vipwedit (GROUP_FILE, gr_lock, gr_unlock);
+       }
 
-  return 0;
+       return 0;
 }