]> granicus.if.org Git - shadow/commitdiff
[svn-upgrade] Integrating new upstream version, shadow (20000826)
authornekral-guest <nekral-guest@5a98b0ae-9ef6-0310-add3-de5d479b70d7>
Sun, 7 Oct 2007 11:44:14 +0000 (11:44 +0000)
committernekral-guest <nekral-guest@5a98b0ae-9ef6-0310-add3-de5d479b70d7>
Sun, 7 Oct 2007 11:44:14 +0000 (11:44 +0000)
196 files changed:
Makefile.am
Makefile.in
ansi2knr.1 [deleted file]
ansi2knr.c [deleted file]
config.h.in
configure
configure.in
contrib/Makefile.am
contrib/Makefile.in
contrib/groupmems.shar [new file with mode: 0644]
debian/Makefile.in
debian/login.copyright
debian/passwd.copyright
debian/secure-su.copyright
doc/ANNOUNCE
doc/CHANGES
doc/LSM
doc/Makefile.in
doc/README
doc/README.linux
doc/README.mirrors
doc/README.pam
doc/WISHLIST
etc/Makefile.in
etc/login.defs.hurd
etc/login.defs.linux
etc/pam.d/Makefile.in
lib/Makefile.am
lib/Makefile.in
lib/commonio.c
lib/commonio.h
lib/defines.h
lib/dialchk.h
lib/dialup.h
lib/encrypt.c
lib/getdef.c
lib/getdef.h
lib/groupio.c
lib/groupio.h
lib/prototypes.h
lib/pwauth.c
lib/pwio.c
lib/pwio.h
lib/rad64.c
lib/sgroupio.c
lib/sgroupio.h
lib/shadowio.h
lib/tcfsio.h
libmisc/Makefile.in
libmisc/chkname.h
libmisc/chowndir.c
libmisc/copydir.c
libmisc/entry.c
libmisc/failure.h
libmisc/getdate.h
libmisc/hushed.c
libmisc/loginprompt.c
libmisc/setupenv.c
libmisc/suauth.c
libmisc/sulog.c
man/Makefile.am
man/Makefile.in
man/chage.1
man/chfn.1
man/chpasswd.8
man/chsh.1
man/dialups.5 [new file with mode: 0644]
man/dpasswd.8
man/faillog.5
man/faillog.8
man/groupadd.8
man/groupdel.8
man/groupmod.8
man/groups.1
man/grpck.8
man/id.1
man/lastlog.8
man/login.1
man/login.defs.5
man/logoutd.8
man/mkpasswd.8
man/newgrp.1
man/newusers.8
man/passwd.1
man/passwd.5
man/pl/Makefile.am [new file with mode: 0644]
man/pl/Makefile.in [moved from old/Makefile.in with 50% similarity]
man/pl/chage.1 [new file with mode: 0644]
man/pl/chfn.1 [new file with mode: 0644]
man/pl/chpasswd.8 [new file with mode: 0644]
man/pl/chsh.1 [new file with mode: 0644]
man/pl/d_passwd.5 [new file with mode: 0644]
man/pl/dialups.5 [new file with mode: 0644]
man/pl/dpasswd.8 [moved from old/pwunconv-old.8 with 62% similarity]
man/pl/faillog.5 [moved from old/pwconv.8 with 58% similarity]
man/pl/faillog.8 [new file with mode: 0644]
man/pl/gpasswd.1 [new file with mode: 0644]
man/pl/groupadd.8 [new file with mode: 0644]
man/pl/groupdel.8 [moved from old/pwconv-old.8 with 53% similarity]
man/pl/groupmod.8 [new file with mode: 0644]
man/pl/groups.1 [new file with mode: 0644]
man/pl/grpck.8 [new file with mode: 0644]
man/pl/id.1 [new file with mode: 0644]
man/pl/lastlog.8 [new file with mode: 0644]
man/pl/limits.5 [new file with mode: 0644]
man/pl/login.1 [new file with mode: 0644]
man/pl/login.access.5 [new file with mode: 0644]
man/pl/login.defs.5 [new file with mode: 0644]
man/pl/logoutd.8 [moved from old/pwunconv.8 with 67% similarity]
man/pl/mkpasswd.8 [new file with mode: 0644]
man/pl/newgrp.1 [new file with mode: 0644]
man/pl/newusers.8 [new file with mode: 0644]
man/pl/passwd.1 [new file with mode: 0644]
man/pl/passwd.5 [new file with mode: 0644]
man/pl/porttime.5 [new file with mode: 0644]
man/pl/pw_auth.3 [new file with mode: 0644]
man/pl/pwauth.8 [new file with mode: 0644]
man/pl/pwck.8 [new file with mode: 0644]
man/pl/pwconv.8 [new file with mode: 0644]
man/pl/shadow.3 [new file with mode: 0644]
man/pl/shadow.5 [new file with mode: 0644]
man/pl/shadowconfig.8 [new file with mode: 0644]
man/pl/su.1 [new file with mode: 0644]
man/pl/suauth.5 [new file with mode: 0644]
man/pl/sulogin.8 [new file with mode: 0644]
man/porttime.5
man/pw_auth.3
man/pwauth.8
man/pwck.8
man/shadow.3
man/shadow.5
man/su.1
man/sulogin.8
man/useradd.8
man/userdel.8
man/usermod.8
mkinstalldirs
old/Makefile.am [deleted file]
old/Makefile.linux [deleted file]
old/Makefile.sun4 [deleted file]
old/Makefile.svr4 [deleted file]
old/Makefile.xenix [deleted file]
old/config.h.linux [deleted file]
old/config.h.sun4 [deleted file]
old/config.h.svr4 [deleted file]
old/config.h.xenix [deleted file]
old/orig-config.h [deleted file]
old/pwconv-old.c [deleted file]
old/pwd.h.m4 [deleted file]
old/pwunconv-old.c [deleted file]
old/scologin.c [deleted file]
old/vipw.8 [deleted file]
po/cat-id-tbl.c
po/el.po
po/fr.gmo
po/fr.po
po/pl.gmo
po/pl.po
po/shadow.pot
po/sv.po
redhat/Makefile.in
redhat/shadow-utils.spec [deleted file]
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/groupdel.c
src/groupmod.c
src/groups.c
src/grpck.c
src/grpconv.c
src/grpunconv.c
src/id.c
src/lastlog.c
src/login.c
src/logoutd.c
src/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 5a55194b966315f1a4e91c9bd65a65d1196f5fe7..36b1db1e6f5f47ca63ae1f52c43f146d4566e860 100644 (file)
@@ -1,6 +1,6 @@
 ## Process this file with automake to produce Makefile.in
 
-AUTOMAKE_OPTIONS = 1.0 foreign ansi2knr
+AUTOMAKE_OPTIONS = 1.0 foreign
 
 SUBDIRS = intl po man lib libmisc src \
- contrib debian doc etc old redhat
+ contrib debian doc etc redhat # old
index 5babccf065e667719dd803f49e79fc0417bac940..b608fad7d8481d90fdaabca8fb0a69f3c095744c 100644 (file)
@@ -79,6 +79,7 @@ INTLOBJS = @INTLOBJS@
 LD = @LD@
 LIBCRACK = @LIBCRACK@
 LIBCRYPT = @LIBCRYPT@
+LIBMD = @LIBMD@
 LIBPAM = @LIBPAM@
 LIBSKEY = @LIBSKEY@
 LIBTCFS = @LIBTCFS@
@@ -101,18 +102,17 @@ VERSION = @VERSION@
 YACC = @YACC@
 l = @l@
 
-AUTOMAKE_OPTIONS = 1.0 foreign ansi2knr
+AUTOMAKE_OPTIONS = 1.0 foreign
 
-SUBDIRS = intl po man lib libmisc src  contrib debian doc etc old redhat
+SUBDIRS = intl po man lib libmisc src  contrib debian doc etc redhat # old
 
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
 CONFIG_HEADER = config.h
 CONFIG_CLEAN_FILES = 
 DIST_COMMON =  ./stamp-h.in ABOUT-NLS Makefile.am Makefile.in acconfig.h \
-aclocal.m4 ansi2knr.1 ansi2knr.c config.guess config.h.in config.sub \
-configure configure.in install-sh ltconfig ltmain.sh missing \
-mkinstalldirs
+aclocal.m4 config.guess config.h.in config.sub configure configure.in \
+install-sh ltconfig ltmain.sh missing mkinstalldirs
 
 
 DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
diff --git a/ansi2knr.1 b/ansi2knr.1
deleted file mode 100644 (file)
index f9ee5a6..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-.TH ANSI2KNR 1 "19 Jan 1996"
-.SH NAME
-ansi2knr \- convert ANSI C to Kernighan & Ritchie C
-.SH SYNOPSIS
-.I ansi2knr
-[--varargs] input_file [output_file]
-.SH DESCRIPTION
-If no output_file is supplied, output goes to stdout.
-.br
-There are no error messages.
-.sp
-.I ansi2knr
-recognizes function definitions by seeing a non-keyword identifier at the left
-margin, followed by a left parenthesis, with a right parenthesis as the last
-character on the line, and with a left brace as the first token on the
-following line (ignoring possible intervening comments).  It will recognize a
-multi-line header provided that no intervening line ends with a left or right
-brace or a semicolon.  These algorithms ignore whitespace and comments, except
-that the function name must be the first thing on the line.
-.sp
-The following constructs will confuse it:
-.br
-     - Any other construct that starts at the left margin and follows the
-above syntax (such as a macro or function call).
-.br
-     - Some macros that tinker with the syntax of the function header.
-.sp
-The --varargs switch is obsolete, and is recognized only for
-backwards compatibility.  The present version of
-.I ansi2knr
-will always attempt to convert a ... argument to va_alist and va_dcl.
-.SH AUTHOR
-L. Peter Deutsch <ghost@aladdin.com> wrote the original ansi2knr and
-continues to maintain the current version; most of the code in the current
-version is his work.  ansi2knr also includes contributions by Francois
-Pinard <pinard@iro.umontreal.ca> and Jim Avera <jima@netcom.com>.
diff --git a/ansi2knr.c b/ansi2knr.c
deleted file mode 100644 (file)
index 4962434..0000000
+++ /dev/null
@@ -1,609 +0,0 @@
-/* Copyright (C) 1989, 1997, 1998 Aladdin Enterprises.  All rights reserved. */
-
-/*$Id: ansi2knr.c,v 1.10 1998/12/02 12:42:23 tromey Exp $*/
-/* Convert ANSI C function definitions to K&R ("traditional C") syntax */
-
-/*
-ansi2knr is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY.  No author or distributor accepts responsibility to anyone for the
-consequences of using it or for whether it serves any particular purpose or
-works at all, unless he says so in writing.  Refer to the GNU General Public
-License (the "GPL") for full details.
-
-Everyone is granted permission to copy, modify and redistribute ansi2knr,
-but only under the conditions described in the GPL.  A copy of this license
-is supposed to have been given to you along with ansi2knr so you can know
-your rights and responsibilities.  It should be in a file named COPYLEFT,
-or, if there is no file named COPYLEFT, a file named COPYING.  Among other
-things, the copyright notice and this notice must be preserved on all
-copies.
-
-We explicitly state here what we believe is already implied by the GPL: if
-the ansi2knr program is distributed as a separate set of sources and a
-separate executable file which are aggregated on a storage medium together
-with another program, this in itself does not bring the other program under
-the GPL, nor does the mere fact that such a program or the procedures for
-constructing it invoke the ansi2knr executable bring any other part of the
-program under the GPL.
-*/
-
-/*
- * Usage:
-       ansi2knr [--filename FILENAME] [INPUT_FILE [OUTPUT_FILE]]
- * --filename provides the file name for the #line directive in the output,
- * overriding input_file (if present).
- * If no input_file is supplied, input is read from stdin.
- * If no output_file is supplied, output goes to stdout.
- * There are no error messages.
- *
- * ansi2knr recognizes function definitions by seeing a non-keyword
- * identifier at the left margin, followed by a left parenthesis,
- * with a right parenthesis as the last character on the line,
- * and with a left brace as the first token on the following line
- * (ignoring possible intervening comments), except that a line
- * consisting of only
- *     identifier1(identifier2)
- * will not be considered a function definition unless identifier2 is
- * the word "void".  ansi2knr will recognize a multi-line header provided
- * that no intervening line ends with a left or right brace or a semicolon.
- * These algorithms ignore whitespace and comments, except that
- * the function name must be the first thing on the line.
- * The following constructs will confuse it:
- *     - Any other construct that starts at the left margin and
- *         follows the above syntax (such as a macro or function call).
- *     - Some macros that tinker with the syntax of the function header.
- */
-
-/*
- * The original and principal author of ansi2knr is L. Peter Deutsch
- * <ghost@aladdin.com>.  Other authors are noted in the change history
- * that follows (in reverse chronological order):
-       lpd 1998-11-09 added further hack to recognize identifier(void)
-               as being a procedure
-       lpd 1998-10-23 added hack to recognize lines consisting of
-               identifier1(identifier2) as *not* being procedures
-       lpd 1997-12-08 made input_file optional; only closes input and/or
-               output file if not stdin or stdout respectively; prints
-               usage message on stderr rather than stdout; adds
-               --filename switch (changes suggested by
-               <ceder@lysator.liu.se>)
-       lpd 1996-01-21 added code to cope with not HAVE_CONFIG_H and with
-               compilers that don't understand void, as suggested by
-               Tom Lane
-       lpd 1996-01-15 changed to require that the first non-comment token
-               on the line following a function header be a left brace,
-               to reduce sensitivity to macros, as suggested by Tom Lane
-               <tgl@sss.pgh.pa.us>
-       lpd 1995-06-22 removed #ifndefs whose sole purpose was to define
-               undefined preprocessor symbols as 0; changed all #ifdefs
-               for configuration symbols to #ifs
-       lpd 1995-04-05 changed copyright notice to make it clear that
-               including ansi2knr in a program does not bring the entire
-               program under the GPL
-       lpd 1994-12-18 added conditionals for systems where ctype macros
-               don't handle 8-bit characters properly, suggested by
-               Francois Pinard <pinard@iro.umontreal.ca>;
-               removed --varargs switch (this is now the default)
-       lpd 1994-10-10 removed CONFIG_BROKETS conditional
-       lpd 1994-07-16 added some conditionals to help GNU `configure',
-               suggested by Francois Pinard <pinard@iro.umontreal.ca>;
-               properly erase prototype args in function parameters,
-               contributed by Jim Avera <jima@netcom.com>;
-               correct error in writeblanks (it shouldn't erase EOLs)
-       lpd 1989-xx-xx original version
- */
-
-/* Most of the conditionals here are to make ansi2knr work with */
-/* or without the GNU configure machinery. */
-
-#if HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <stdio.h>
-#include <ctype.h>
-
-#if HAVE_CONFIG_H
-
-/*
-   For properly autoconfiguring ansi2knr, use AC_CONFIG_HEADER(config.h).
-   This will define HAVE_CONFIG_H and so, activate the following lines.
- */
-
-# if STDC_HEADERS || HAVE_STRING_H
-#  include <string.h>
-# else
-#  include <strings.h>
-# endif
-
-#else /* not HAVE_CONFIG_H */
-
-/* Otherwise do it the hard way */
-
-# ifdef BSD
-#  include <strings.h>
-# else
-#  ifdef VMS
-    extern int strlen(), strncmp();
-#  else
-#   include <string.h>
-#  endif
-# endif
-
-#endif /* not HAVE_CONFIG_H */
-
-#if STDC_HEADERS
-# include <stdlib.h>
-#else
-/*
-   malloc and free should be declared in stdlib.h,
-   but if you've got a K&R compiler, they probably aren't.
- */
-# ifdef MSDOS
-#  include <malloc.h>
-# else
-#  ifdef VMS
-     extern char *malloc();
-     extern void free();
-#  else
-     extern char *malloc();
-     extern int free();
-#  endif
-# endif
-
-#endif
-
-/*
- * The ctype macros don't always handle 8-bit characters correctly.
- * Compensate for this here.
- */
-#ifdef isascii
-#  undef HAVE_ISASCII          /* just in case */
-#  define HAVE_ISASCII 1
-#else
-#endif
-#if STDC_HEADERS || !HAVE_ISASCII
-#  define is_ascii(c) 1
-#else
-#  define is_ascii(c) isascii(c)
-#endif
-
-#define is_space(c) (is_ascii(c) && isspace(c))
-#define is_alpha(c) (is_ascii(c) && isalpha(c))
-#define is_alnum(c) (is_ascii(c) && isalnum(c))
-
-/* Scanning macros */
-#define isidchar(ch) (is_alnum(ch) || (ch) == '_')
-#define isidfirstchar(ch) (is_alpha(ch) || (ch) == '_')
-
-/* Forward references */
-char *skipspace();
-int writeblanks();
-int test1();
-int convert1();
-
-/* The main program */
-int
-main(argc, argv)
-    int argc;
-    char *argv[];
-{      FILE *in = stdin;
-       FILE *out = stdout;
-       char *filename = 0;
-#define bufsize 5000                   /* arbitrary size */
-       char *buf;
-       char *line;
-       char *more;
-       char *usage =
-         "Usage: ansi2knr [--filename FILENAME] [INPUT_FILE [OUTPUT_FILE]]\n";
-       /*
-        * In previous versions, ansi2knr recognized a --varargs switch.
-        * If this switch was supplied, ansi2knr would attempt to convert
-        * a ... argument to va_alist and va_dcl; if this switch was not
-        * supplied, ansi2knr would simply drop any such arguments.
-        * Now, ansi2knr always does this conversion, and we only
-        * check for this switch for backward compatibility.
-        */
-       int convert_varargs = 1;
-
-       while ( argc > 1 && argv[1][0] == '-' ) {
-         if ( !strcmp(argv[1], "--varargs") ) {
-           convert_varargs = 1;
-           argc--;
-           argv++;
-           continue;
-         }
-         if ( !strcmp(argv[1], "--filename") && argc > 2 ) {
-           filename = argv[2];
-           argc -= 2;
-           argv += 2;
-           continue;
-         }
-         fprintf(stderr, "Unrecognized switch: %s\n", argv[1]);
-         fprintf(stderr, usage);
-         exit(1);
-       }
-       switch ( argc )
-          {
-       default:
-               fprintf(stderr, usage);
-               exit(0);
-       case 3:
-               out = fopen(argv[2], "w");
-               if ( out == NULL ) {
-                 fprintf(stderr, "Cannot open output file %s\n", argv[2]);
-                 exit(1);
-               }
-               /* falls through */
-       case 2:
-               in = fopen(argv[1], "r");
-               if ( in == NULL ) {
-                 fprintf(stderr, "Cannot open input file %s\n", argv[1]);
-                 exit(1);
-               }
-               if ( filename == 0 )
-                 filename = argv[1];
-               /* falls through */
-       case 1:
-               break;
-          }
-       if ( filename )
-         fprintf(out, "#line 1 \"%s\"\n", filename);
-       buf = malloc(bufsize);
-       line = buf;
-       while ( fgets(line, (unsigned)(buf + bufsize - line), in) != NULL )
-          {
-test:          line += strlen(line);
-               switch ( test1(buf) )
-                  {
-               case 2:                 /* a function header */
-                       convert1(buf, out, 1, convert_varargs);
-                       break;
-               case 1:                 /* a function */
-                       /* Check for a { at the start of the next line. */
-                       more = ++line;
-f:                     if ( line >= buf + (bufsize - 1) ) /* overflow check */
-                         goto wl;
-                       if ( fgets(line, (unsigned)(buf + bufsize - line), in) == NULL )
-                         goto wl;
-                       switch ( *skipspace(more, 1) )
-                         {
-                         case '{':
-                           /* Definitely a function header. */
-                           convert1(buf, out, 0, convert_varargs);
-                           fputs(more, out);
-                           break;
-                         case 0:
-                           /* The next line was blank or a comment: */
-                           /* keep scanning for a non-comment. */
-                           line += strlen(line);
-                           goto f;
-                         default:
-                           /* buf isn't a function header, but */
-                           /* more might be. */
-                           fputs(buf, out);
-                           strcpy(buf, more);
-                           line = buf;
-                           goto test;
-                         }
-                       break;
-               case -1:                /* maybe the start of a function */
-                       if ( line != buf + (bufsize - 1) ) /* overflow check */
-                         continue;
-                       /* falls through */
-               default:                /* not a function */
-wl:                    fputs(buf, out);
-                       break;
-                  }
-               line = buf;
-          }
-       if ( line != buf )
-         fputs(buf, out);
-       free(buf);
-       if ( out != stdout )
-         fclose(out);
-       if ( in != stdin )
-         fclose(in);
-       return 0;
-}
-
-/* Skip over space and comments, in either direction. */
-char *
-skipspace(p, dir)
-    register char *p;
-    register int dir;                  /* 1 for forward, -1 for backward */
-{      for ( ; ; )
-          {    while ( is_space(*p) )
-                 p += dir;
-               if ( !(*p == '/' && p[dir] == '*') )
-                 break;
-               p += dir;  p += dir;
-               while ( !(*p == '*' && p[dir] == '/') )
-                  {    if ( *p == 0 )
-                         return p;     /* multi-line comment?? */
-                       p += dir;
-                  }
-               p += dir;  p += dir;
-          }
-       return p;
-}
-
-/*
- * Write blanks over part of a string.
- * Don't overwrite end-of-line characters.
- */
-int
-writeblanks(start, end)
-    char *start;
-    char *end;
-{      char *p;
-       for ( p = start; p < end; p++ )
-         if ( *p != '\r' && *p != '\n' )
-           *p = ' ';
-       return 0;
-}
-
-/*
- * Test whether the string in buf is a function definition.
- * The string may contain and/or end with a newline.
- * Return as follows:
- *     0 - definitely not a function definition;
- *     1 - definitely a function definition;
- *     2 - definitely a function prototype (NOT USED);
- *     -1 - may be the beginning of a function definition,
- *             append another line and look again.
- * The reason we don't attempt to convert function prototypes is that
- * Ghostscript's declaration-generating macros look too much like
- * prototypes, and confuse the algorithms.
- */
-int
-test1(buf)
-    char *buf;
-{      register char *p = buf;
-       char *bend;
-       char *endfn;
-       int contin;
-
-       if ( !isidfirstchar(*p) )
-         return 0;             /* no name at left margin */
-       bend = skipspace(buf + strlen(buf) - 1, -1);
-       switch ( *bend )
-          {
-          case ';': contin = 0 /*2*/; break;
-          case ')': contin = 1; break;
-          case '{': return 0;          /* not a function */
-          case '}': return 0;          /* not a function */
-          default: contin = -1;
-          }
-       while ( isidchar(*p) )
-         p++;
-       endfn = p;
-       p = skipspace(p, 1);
-       if ( *p++ != '(' )
-         return 0;             /* not a function */
-       p = skipspace(p, 1);
-       if ( *p == ')' )
-         return 0;             /* no parameters */
-       /* Check that the apparent function name isn't a keyword. */
-       /* We only need to check for keywords that could be followed */
-       /* by a left parenthesis (which, unfortunately, is most of them). */
-          {    static char *words[] =
-                  {    "asm", "auto", "case", "char", "const", "double",
-                       "extern", "float", "for", "if", "int", "long",
-                       "register", "return", "short", "signed", "sizeof",
-                       "static", "switch", "typedef", "unsigned",
-                       "void", "volatile", "while", 0
-                  };
-               char **key = words;
-               char *kp;
-               int len = endfn - buf;
-
-               while ( (kp = *key) != 0 )
-                  {    if ( strlen(kp) == len && !strncmp(kp, buf, len) )
-                         return 0;     /* name is a keyword */
-                       key++;
-                  }
-          }
-          {
-              char *id = p;
-              int len;
-              /*
-               * Check for identifier1(identifier2) and not
-               * identifier1(void).
-               */
-
-              while ( isidchar(*p) )
-                  p++;
-              len = p - id;
-              p = skipspace(p, 1);
-              if ( *p == ')' && (len != 4 || strncmp(id, "void", 4)) )
-                  return 0;    /* not a function */
-          }
-       /*
-        * If the last significant character was a ), we need to count
-        * parentheses, because it might be part of a formal parameter
-        * that is a procedure.
-        */
-       if (contin > 0) {
-           int level = 0;
-
-           for (p = skipspace(buf, 1); *p; p = skipspace(p + 1, 1))
-               level += (*p == '(' ? 1 : *p == ')' ? -1 : 0);
-           if (level > 0)
-               contin = -1;
-       }
-       return contin;
-}
-
-/* Convert a recognized function definition or header to K&R syntax. */
-int
-convert1(buf, out, header, convert_varargs)
-    char *buf;
-    FILE *out;
-    int header;                        /* Boolean */
-    int convert_varargs;       /* Boolean */
-{      char *endfn;
-       register char *p;
-       /*
-        * The breaks table contains pointers to the beginning and end
-        * of each argument.
-        */
-       char **breaks;
-       unsigned num_breaks = 2;        /* for testing */
-       char **btop;
-       char **bp;
-       char **ap;
-       char *vararg = 0;
-
-       /* Pre-ANSI implementations don't agree on whether strchr */
-       /* is called strchr or index, so we open-code it here. */
-       for ( endfn = buf; *(endfn++) != '('; )
-         ;
-top:   p = endfn;
-       breaks = (char **)malloc(sizeof(char *) * num_breaks * 2);
-       if ( breaks == 0 )
-          {    /* Couldn't allocate break table, give up */
-               fprintf(stderr, "Unable to allocate break table!\n");
-               fputs(buf, out);
-               return -1;
-          }
-       btop = breaks + num_breaks * 2 - 2;
-       bp = breaks;
-       /* Parse the argument list */
-       do
-          {    int level = 0;
-               char *lp = NULL;
-               char *rp;
-               char *end = NULL;
-
-               if ( bp >= btop )
-                  {    /* Filled up break table. */
-                       /* Allocate a bigger one and start over. */
-                       free((char *)breaks);
-                       num_breaks <<= 1;
-                       goto top;
-                  }
-               *bp++ = p;
-               /* Find the end of the argument */
-               for ( ; end == NULL; p++ )
-                  {    switch(*p)
-                          {
-                          case ',':
-                               if ( !level ) end = p;
-                               break;
-                          case '(':
-                               if ( !level ) lp = p;
-                               level++;
-                               break;
-                          case ')':
-                               if ( --level < 0 ) end = p;
-                               else rp = p;
-                               break;
-                          case '/':
-                               p = skipspace(p, 1) - 1;
-                               break;
-                          default:
-                               ;
-                          }
-                  }
-               /* Erase any embedded prototype parameters. */
-               if ( lp )
-                 writeblanks(lp + 1, rp);
-               p--;                    /* back up over terminator */
-               /* Find the name being declared. */
-               /* This is complicated because of procedure and */
-               /* array modifiers. */
-               for ( ; ; )
-                  {    p = skipspace(p - 1, -1);
-                       switch ( *p )
-                          {
-                          case ']':    /* skip array dimension(s) */
-                          case ')':    /* skip procedure args OR name */
-                          {    int level = 1;
-                               while ( level )
-                                switch ( *--p )
-                                  {
-                                  case ']': case ')': level++; break;
-                                  case '[': case '(': level--; break;
-                                  case '/': p = skipspace(p, -1) + 1; break;
-                                  default: ;
-                                  }
-                          }
-                               if ( *p == '(' && *skipspace(p + 1, 1) == '*' )
-                                  {    /* We found the name being declared */
-                                       while ( !isidfirstchar(*p) )
-                                         p = skipspace(p, 1) + 1;
-                                       goto found;
-                                  }
-                               break;
-                          default:
-                               goto found;
-                          }
-                  }
-found:         if ( *p == '.' && p[-1] == '.' && p[-2] == '.' )
-                 {     if ( convert_varargs )
-                         {     *bp++ = "va_alist";
-                               vararg = p-2;
-                         }
-                       else
-                         {     p++;
-                               if ( bp == breaks + 1 ) /* sole argument */
-                                 writeblanks(breaks[0], p);
-                               else
-                                 writeblanks(bp[-1] - 1, p);
-                               bp--;
-                         }
-                  }
-               else
-                  {    while ( isidchar(*p) ) p--;
-                       *bp++ = p+1;
-                  }
-               p = end;
-          }
-       while ( *p++ == ',' );
-       *bp = p;
-       /* Make a special check for 'void' arglist */
-       if ( bp == breaks+2 )
-          {    p = skipspace(breaks[0], 1);
-               if ( !strncmp(p, "void", 4) )
-                  {    p = skipspace(p+4, 1);
-                       if ( p == breaks[2] - 1 )
-                          {    bp = breaks;    /* yup, pretend arglist is empty */
-                               writeblanks(breaks[0], p + 1);
-                          }
-                  }
-          }
-       /* Put out the function name and left parenthesis. */
-       p = buf;
-       while ( p != endfn ) putc(*p, out), p++;
-       /* Put out the declaration. */
-       if ( header )
-         {     fputs(");", out);
-               for ( p = breaks[0]; *p; p++ )
-                 if ( *p == '\r' || *p == '\n' )
-                   putc(*p, out);
-         }
-       else
-         {     for ( ap = breaks+1; ap < bp; ap += 2 )
-                 {     p = *ap;
-                       while ( isidchar(*p) )
-                         putc(*p, out), p++;
-                       if ( ap < bp - 1 )
-                         fputs(", ", out);
-                 }
-               fputs(")  ", out);
-               /* Put out the argument declarations */
-               for ( ap = breaks+2; ap <= bp; ap += 2 )
-                 (*ap)[-1] = ';';
-               if ( vararg != 0 )
-                 {     *vararg = 0;
-                       fputs(breaks[0], out);          /* any prior args */
-                       fputs("va_dcl", out);           /* the final arg */
-                       fputs(bp[0], out);
-                 }
-               else
-                 fputs(breaks[0], out);
-         }
-       free((char *)breaks);
-       return 0;
-}
index 6186810562a3808c7cabf486a467aa5e12a4740f..716b758377d749ffe154fd9c578d84887b8ca063 100644 (file)
 /* Define if you have the initgroups function.  */
 #undef HAVE_INITGROUPS
 
+/* Define if you have the lchown function.  */
+#undef HAVE_LCHOWN
+
 /* Define if you have the lckpwdf function.  */
 #undef HAVE_LCKPWDF
 
+/* Define if you have the lstat function.  */
+#undef HAVE_LSTAT
+
 /* Define if you have the memcpy function.  */
 #undef HAVE_MEMCPY
 
index 4a6617afa2eb7b2f4f966e85adb01210a9639529..4c7f3918a53a5a8cf82920eea35ba3a68d6ca028 100755 (executable)
--- a/configure
+++ b/configure
@@ -723,7 +723,7 @@ fi
 
 PACKAGE=shadow
 
-VERSION=19990827
+VERSION=20000826
 
 if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then
   { echo "configure: error: source directory already configured; run "make distclean" there first" 1>&2; exit 1; }
@@ -3231,7 +3231,7 @@ else
 fi
 done
 
-for ac_func in gettimeofday getusershell getutent initgroups lckpwdf
+for ac_func in gettimeofday getusershell getutent initgroups lchown lckpwdf
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
 echo "configure:3238: checking for $ac_func" >&5
@@ -3286,7 +3286,7 @@ else
 fi
 done
 
-for ac_func in memcpy memset setgroups sigaction strchr updwtmp updwtmpx
+for ac_func in lstat memcpy memset setgroups sigaction strchr updwtmp updwtmpx
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
 echo "configure:3293: checking for $ac_func" >&5
@@ -4410,17 +4410,58 @@ fi
 fi
 
 
+
 if test "$with_libskey" = "yes"; then
+       echo $ac_n "checking for MD5Init in -lmd""... $ac_c" 1>&6
+echo "configure:4417: checking for MD5Init in -lmd" >&5
+ac_lib_var=`echo md'_'MD5Init | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-lmd  $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 4425 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char MD5Init();
+
+int main() {
+MD5Init()
+; return 0; }
+EOF
+if { (eval echo configure:4436: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  LIBMD=-lmd
+else
+  echo "$ac_t""no" 1>&6
+fi
+
        echo $ac_n "checking for skeychallenge in -lskey""... $ac_c" 1>&6
-echo "configure:4416: checking for skeychallenge in -lskey" >&5
+echo "configure:4457: checking for skeychallenge in -lskey" >&5
 ac_lib_var=`echo skey'_'skeychallenge | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   ac_save_LIBS="$LIBS"
-LIBS="-lskey $LIBCRYPT $LIBS"
+LIBS="-lskey $LIBMD $LIBCRYPT $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 4424 "configure"
+#line 4465 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -4431,7 +4472,7 @@ int main() {
 skeychallenge()
 ; return 0; }
 EOF
-if { (eval echo configure:4435: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4476: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -4456,7 +4497,7 @@ fi
 
 elif test "$with_libopie" = "yes"; then
        echo $ac_n "checking for opiechallenge in -lopie""... $ac_c" 1>&6
-echo "configure:4460: checking for opiechallenge in -lopie" >&5
+echo "configure:4501: checking for opiechallenge in -lopie" >&5
 ac_lib_var=`echo opie'_'opiechallenge | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -4464,7 +4505,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lopie $LIBCRYPT $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 4468 "configure"
+#line 4509 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -4475,7 +4516,7 @@ int main() {
 opiechallenge()
 ; return 0; }
 EOF
-if { (eval echo configure:4479: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4520: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -4503,7 +4544,7 @@ fi
 
 if test "$with_libtcfs" = "yes"; then
        echo $ac_n "checking for tcfs_encrypt_key in -ltcfs""... $ac_c" 1>&6
-echo "configure:4507: checking for tcfs_encrypt_key in -ltcfs" >&5
+echo "configure:4548: checking for tcfs_encrypt_key in -ltcfs" >&5
 ac_lib_var=`echo tcfs'_'tcfs_encrypt_key | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -4511,7 +4552,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-ltcfs -lgdbm $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 4515 "configure"
+#line 4556 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -4522,7 +4563,7 @@ int main() {
 tcfs_encrypt_key()
 ; return 0; }
 EOF
-if { (eval echo configure:4526: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4567: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -4558,19 +4599,19 @@ if test "$with_libpam" = "yes"; then
 EOF
 
        echo $ac_n "checking whether pam_strerror needs two arguments""... $ac_c" 1>&6
-echo "configure:4562: checking whether pam_strerror needs two arguments" >&5
+echo "configure:4603: checking whether pam_strerror needs two arguments" >&5
 if eval "test \"`echo '$''{'ac_cv_pam_strerror_needs_two_args'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 4567 "configure"
+#line 4608 "configure"
 #include "confdefs.h"
 #include <security/pam_appl.h>
 int main() {
  pam_handle_t *pamh; pam_strerror(pamh, PAM_SUCCESS); 
 ; return 0; }
 EOF
-if { (eval echo configure:4574: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4615: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_pam_strerror_needs_two_args=yes
 else
@@ -4597,21 +4638,21 @@ LTLIBOBJS=`echo "$LIBOBJS" | sed 's/\.o/.lo/g'`
 
 
 echo $ac_n "checking for inline""... $ac_c" 1>&6
-echo "configure:4601: checking for inline" >&5
+echo "configure:4642: checking for inline" >&5
 if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   ac_cv_c_inline=no
 for ac_kw in inline __inline__ __inline; do
   cat > conftest.$ac_ext <<EOF
-#line 4608 "configure"
+#line 4649 "configure"
 #include "confdefs.h"
 
 int main() {
 } $ac_kw foo() {
 ; return 0; }
 EOF
-if { (eval echo configure:4615: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4656: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_inline=$ac_kw; break
 else
@@ -4637,12 +4678,12 @@ EOF
 esac
 
 echo $ac_n "checking for size_t""... $ac_c" 1>&6
-echo "configure:4641: checking for size_t" >&5
+echo "configure:4682: checking for size_t" >&5
 if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 4646 "configure"
+#line 4687 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -4672,19 +4713,19 @@ fi
 # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
 # for constant arguments.  Useless!
 echo $ac_n "checking for working alloca.h""... $ac_c" 1>&6
-echo "configure:4676: checking for working alloca.h" >&5
+echo "configure:4717: checking for working alloca.h" >&5
 if eval "test \"`echo '$''{'ac_cv_header_alloca_h'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 4681 "configure"
+#line 4722 "configure"
 #include "confdefs.h"
 #include <alloca.h>
 int main() {
 char *p = alloca(2 * sizeof(int));
 ; return 0; }
 EOF
-if { (eval echo configure:4688: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4729: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_cv_header_alloca_h=yes
 else
@@ -4705,12 +4746,12 @@ EOF
 fi
 
 echo $ac_n "checking for alloca""... $ac_c" 1>&6
-echo "configure:4709: checking for alloca" >&5
+echo "configure:4750: checking for alloca" >&5
 if eval "test \"`echo '$''{'ac_cv_func_alloca_works'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 4714 "configure"
+#line 4755 "configure"
 #include "confdefs.h"
 
 #ifdef __GNUC__
@@ -4738,7 +4779,7 @@ int main() {
 char *p = (char *) alloca(1);
 ; return 0; }
 EOF
-if { (eval echo configure:4742: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4783: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_cv_func_alloca_works=yes
 else
@@ -4770,12 +4811,12 @@ EOF
 
 
 echo $ac_n "checking whether alloca needs Cray hooks""... $ac_c" 1>&6
-echo "configure:4774: checking whether alloca needs Cray hooks" >&5
+echo "configure:4815: checking whether alloca needs Cray hooks" >&5
 if eval "test \"`echo '$''{'ac_cv_os_cray'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 4779 "configure"
+#line 4820 "configure"
 #include "confdefs.h"
 #if defined(CRAY) && ! defined(CRAY2)
 webecray
@@ -4800,12 +4841,12 @@ echo "$ac_t""$ac_cv_os_cray" 1>&6
 if test $ac_cv_os_cray = yes; then
 for ac_func in _getb67 GETB67 getb67; do
   echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:4804: checking for $ac_func" >&5
+echo "configure:4845: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 4809 "configure"
+#line 4850 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -4828,7 +4869,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:4832: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4873: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -4855,7 +4896,7 @@ done
 fi
 
 echo $ac_n "checking stack direction for C alloca""... $ac_c" 1>&6
-echo "configure:4859: checking stack direction for C alloca" >&5
+echo "configure:4900: checking stack direction for C alloca" >&5
 if eval "test \"`echo '$''{'ac_cv_c_stack_direction'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -4863,7 +4904,7 @@ else
   ac_cv_c_stack_direction=0
 else
   cat > conftest.$ac_ext <<EOF
-#line 4867 "configure"
+#line 4908 "configure"
 #include "confdefs.h"
 find_stack_direction ()
 {
@@ -4882,7 +4923,7 @@ main ()
   exit (find_stack_direction() < 0);
 }
 EOF
-if { (eval echo configure:4886: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:4927: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_c_stack_direction=1
 else
@@ -4907,17 +4948,17 @@ for ac_hdr in unistd.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:4911: checking for $ac_hdr" >&5
+echo "configure:4952: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 4916 "configure"
+#line 4957 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:4921: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:4962: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -4946,12 +4987,12 @@ done
 for ac_func in getpagesize
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:4950: checking for $ac_func" >&5
+echo "configure:4991: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 4955 "configure"
+#line 4996 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -4974,7 +5015,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:4978: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5019: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -4999,7 +5040,7 @@ fi
 done
 
 echo $ac_n "checking for working mmap""... $ac_c" 1>&6
-echo "configure:5003: checking for working mmap" >&5
+echo "configure:5044: checking for working mmap" >&5
 if eval "test \"`echo '$''{'ac_cv_func_mmap_fixed_mapped'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -5007,7 +5048,7 @@ else
   ac_cv_func_mmap_fixed_mapped=no
 else
   cat > conftest.$ac_ext <<EOF
-#line 5011 "configure"
+#line 5052 "configure"
 #include "confdefs.h"
 
 /* Thanks to Mike Haertel and Jim Avera for this test.
@@ -5147,7 +5188,7 @@ main()
 }
 
 EOF
-if { (eval echo configure:5151: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:5192: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_func_mmap_fixed_mapped=yes
 else
@@ -5175,17 +5216,17 @@ unistd.h sys/param.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:5179: checking for $ac_hdr" >&5
+echo "configure:5220: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5184 "configure"
+#line 5225 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:5189: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:5230: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -5215,12 +5256,12 @@ done
 strdup __argz_count __argz_stringify __argz_next
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:5219: checking for $ac_func" >&5
+echo "configure:5260: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5224 "configure"
+#line 5265 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -5243,7 +5284,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:5247: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5288: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -5272,12 +5313,12 @@ done
      for ac_func in stpcpy
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:5276: checking for $ac_func" >&5
+echo "configure:5317: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5281 "configure"
+#line 5322 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -5300,7 +5341,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:5304: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5345: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -5334,19 +5375,19 @@ EOF
 
    if test $ac_cv_header_locale_h = yes; then
     echo $ac_n "checking for LC_MESSAGES""... $ac_c" 1>&6
-echo "configure:5338: checking for LC_MESSAGES" >&5
+echo "configure:5379: checking for LC_MESSAGES" >&5
 if eval "test \"`echo '$''{'am_cv_val_LC_MESSAGES'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5343 "configure"
+#line 5384 "configure"
 #include "confdefs.h"
 #include <locale.h>
 int main() {
 return LC_MESSAGES
 ; return 0; }
 EOF
-if { (eval echo configure:5350: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5391: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   am_cv_val_LC_MESSAGES=yes
 else
@@ -5367,7 +5408,7 @@ EOF
     fi
   fi
    echo $ac_n "checking whether NLS is requested""... $ac_c" 1>&6
-echo "configure:5371: checking whether NLS is requested" >&5
+echo "configure:5412: checking whether NLS is requested" >&5
         # Check whether --enable-nls or --disable-nls was given.
 if test "${enable_nls+set}" = set; then
   enableval="$enable_nls"
@@ -5387,7 +5428,7 @@ fi
 EOF
 
       echo $ac_n "checking whether included gettext is requested""... $ac_c" 1>&6
-echo "configure:5391: checking whether included gettext is requested" >&5
+echo "configure:5432: checking whether included gettext is requested" >&5
       # Check whether --with-included-gettext or --without-included-gettext was given.
 if test "${with_included_gettext+set}" = set; then
   withval="$with_included_gettext"
@@ -5406,17 +5447,17 @@ fi
 
        ac_safe=`echo "libintl.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for libintl.h""... $ac_c" 1>&6
-echo "configure:5410: checking for libintl.h" >&5
+echo "configure:5451: checking for libintl.h" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5415 "configure"
+#line 5456 "configure"
 #include "confdefs.h"
 #include <libintl.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:5420: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:5461: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -5433,19 +5474,19 @@ fi
 if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
   echo "$ac_t""yes" 1>&6
   echo $ac_n "checking for gettext in libc""... $ac_c" 1>&6
-echo "configure:5437: checking for gettext in libc" >&5
+echo "configure:5478: checking for gettext in libc" >&5
 if eval "test \"`echo '$''{'gt_cv_func_gettext_libc'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5442 "configure"
+#line 5483 "configure"
 #include "confdefs.h"
 #include <libintl.h>
 int main() {
 return (int) gettext ("")
 ; return 0; }
 EOF
-if { (eval echo configure:5449: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5490: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   gt_cv_func_gettext_libc=yes
 else
@@ -5461,7 +5502,7 @@ echo "$ac_t""$gt_cv_func_gettext_libc" 1>&6
 
           if test "$gt_cv_func_gettext_libc" != "yes"; then
             echo $ac_n "checking for bindtextdomain in -lintl""... $ac_c" 1>&6
-echo "configure:5465: checking for bindtextdomain in -lintl" >&5
+echo "configure:5506: checking for bindtextdomain in -lintl" >&5
 ac_lib_var=`echo intl'_'bindtextdomain | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -5469,7 +5510,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lintl  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 5473 "configure"
+#line 5514 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -5480,7 +5521,7 @@ int main() {
 bindtextdomain()
 ; return 0; }
 EOF
-if { (eval echo configure:5484: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5525: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -5496,12 +5537,12 @@ fi
 if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
   echo "$ac_t""yes" 1>&6
   echo $ac_n "checking for gettext in libintl""... $ac_c" 1>&6
-echo "configure:5500: checking for gettext in libintl" >&5
+echo "configure:5541: checking for gettext in libintl" >&5
 if eval "test \"`echo '$''{'gt_cv_func_gettext_libintl'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   echo $ac_n "checking for gettext in -lintl""... $ac_c" 1>&6
-echo "configure:5505: checking for gettext in -lintl" >&5
+echo "configure:5546: checking for gettext in -lintl" >&5
 ac_lib_var=`echo intl'_'gettext | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -5509,7 +5550,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lintl  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 5513 "configure"
+#line 5554 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -5520,7 +5561,7 @@ int main() {
 gettext()
 ; return 0; }
 EOF
-if { (eval echo configure:5524: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5565: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -5559,7 +5600,7 @@ EOF
              # Extract the first word of "msgfmt", so it can be a program name with args.
 set dummy msgfmt; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:5563: checking for $ac_word" >&5
+echo "configure:5604: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_MSGFMT'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -5593,12 +5634,12 @@ fi
                for ac_func in dcgettext
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:5597: checking for $ac_func" >&5
+echo "configure:5638: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5602 "configure"
+#line 5643 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -5621,7 +5662,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:5625: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5666: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -5648,7 +5689,7 @@ done
                # Extract the first word of "gmsgfmt", so it can be a program name with args.
 set dummy gmsgfmt; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:5652: checking for $ac_word" >&5
+echo "configure:5693: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_GMSGFMT'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -5684,7 +5725,7 @@ fi
                # Extract the first word of "xgettext", so it can be a program name with args.
 set dummy xgettext; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:5688: checking for $ac_word" >&5
+echo "configure:5729: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_XGETTEXT'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -5716,7 +5757,7 @@ else
 fi
 
                cat > conftest.$ac_ext <<EOF
-#line 5720 "configure"
+#line 5761 "configure"
 #include "confdefs.h"
 
 int main() {
@@ -5724,7 +5765,7 @@ extern int _nl_msg_cat_cntr;
                               return _nl_msg_cat_cntr
 ; return 0; }
 EOF
-if { (eval echo configure:5728: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5769: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   CATOBJEXT=.gmo
                   DATADIRNAME=share
@@ -5747,7 +5788,7 @@ fi
 
         if test "$CATOBJEXT" = "NONE"; then
          echo $ac_n "checking whether catgets can be used""... $ac_c" 1>&6
-echo "configure:5751: checking whether catgets can be used" >&5
+echo "configure:5792: checking whether catgets can be used" >&5
          # Check whether --with-catgets or --without-catgets was given.
 if test "${with_catgets+set}" = set; then
   withval="$with_catgets"
@@ -5760,7 +5801,7 @@ fi
 
          if test "$nls_cv_use_catgets" = "yes"; then
                    echo $ac_n "checking for main in -li""... $ac_c" 1>&6
-echo "configure:5764: checking for main in -li" >&5
+echo "configure:5805: checking for main in -li" >&5
 ac_lib_var=`echo i'_'main | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -5768,14 +5809,14 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-li  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 5772 "configure"
+#line 5813 "configure"
 #include "confdefs.h"
 
 int main() {
 main()
 ; return 0; }
 EOF
-if { (eval echo configure:5779: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5820: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -5803,12 +5844,12 @@ else
 fi
 
            echo $ac_n "checking for catgets""... $ac_c" 1>&6
-echo "configure:5807: checking for catgets" >&5
+echo "configure:5848: checking for catgets" >&5
 if eval "test \"`echo '$''{'ac_cv_func_catgets'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5812 "configure"
+#line 5853 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char catgets(); below.  */
@@ -5831,7 +5872,7 @@ catgets();
 
 ; return 0; }
 EOF
-if { (eval echo configure:5835: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5876: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_catgets=yes"
 else
@@ -5853,7 +5894,7 @@ EOF
               # Extract the first word of "gencat", so it can be a program name with args.
 set dummy gencat; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:5857: checking for $ac_word" >&5
+echo "configure:5898: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_GENCAT'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -5889,7 +5930,7 @@ fi
                 # Extract the first word of "gmsgfmt", so it can be a program name with args.
 set dummy gmsgfmt; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:5893: checking for $ac_word" >&5
+echo "configure:5934: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_GMSGFMT'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -5926,7 +5967,7 @@ fi
                   # Extract the first word of "msgfmt", so it can be a program name with args.
 set dummy msgfmt; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:5930: checking for $ac_word" >&5
+echo "configure:5971: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_GMSGFMT'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -5961,7 +6002,7 @@ fi
                 # Extract the first word of "xgettext", so it can be a program name with args.
 set dummy xgettext; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:5965: checking for $ac_word" >&5
+echo "configure:6006: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_XGETTEXT'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -6019,7 +6060,7 @@ fi
         # Extract the first word of "msgfmt", so it can be a program name with args.
 set dummy msgfmt; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:6023: checking for $ac_word" >&5
+echo "configure:6064: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_MSGFMT'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -6053,7 +6094,7 @@ fi
         # Extract the first word of "gmsgfmt", so it can be a program name with args.
 set dummy gmsgfmt; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:6057: checking for $ac_word" >&5
+echo "configure:6098: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_GMSGFMT'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -6089,7 +6130,7 @@ fi
         # Extract the first word of "xgettext", so it can be a program name with args.
 set dummy xgettext; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:6093: checking for $ac_word" >&5
+echo "configure:6134: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_XGETTEXT'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -6182,7 +6223,7 @@ fi
        LINGUAS=
      else
        echo $ac_n "checking for catalogs to be installed""... $ac_c" 1>&6
-echo "configure:6186: checking for catalogs to be installed" >&5
+echo "configure:6227: checking for catalogs to be installed" >&5
        NEW_LINGUAS=
        for lang in ${LINGUAS=$ALL_LINGUAS}; do
          case "$ALL_LINGUAS" in
@@ -6210,17 +6251,17 @@ echo "configure:6186: checking for catalogs to be installed" >&5
    if test "$CATOBJEXT" = ".cat"; then
      ac_safe=`echo "linux/version.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for linux/version.h""... $ac_c" 1>&6
-echo "configure:6214: checking for linux/version.h" >&5
+echo "configure:6255: checking for linux/version.h" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 6219 "configure"
+#line 6260 "configure"
 #include "confdefs.h"
 #include <linux/version.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:6224: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:6265: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -6386,7 +6427,8 @@ done
 ac_given_srcdir=$srcdir
 ac_given_INSTALL="$INSTALL"
 
-trap 'rm -fr `echo "libmisc/Makefile man/Makefile lib/Makefile src/Makefile Makefile
+trap 'rm -fr `echo "libmisc/Makefile man/Makefile man/pl/Makefile
+       lib/Makefile src/Makefile Makefile
        contrib/Makefile debian/Makefile doc/Makefile etc/Makefile
        intl/Makefile intl/po2tbl.sed po/Makefile.in
        etc/pam.d/Makefile old/Makefile
@@ -6457,6 +6499,7 @@ s%@LIBOBJS@%$LIBOBJS%g
 s%@LIBCRYPT@%$LIBCRYPT%g
 s%@LIBCRACK@%$LIBCRACK%g
 s%@LIBSKEY@%$LIBSKEY%g
+s%@LIBMD@%$LIBMD%g
 s%@LIBTCFS@%$LIBTCFS%g
 s%@LIBPAM@%$LIBPAM%g
 s%@LTLIBOBJS@%$LTLIBOBJS%g
@@ -6523,7 +6566,8 @@ EOF
 
 cat >> $CONFIG_STATUS <<EOF
 
-CONFIG_FILES=\${CONFIG_FILES-"libmisc/Makefile man/Makefile lib/Makefile src/Makefile Makefile
+CONFIG_FILES=\${CONFIG_FILES-"libmisc/Makefile man/Makefile man/pl/Makefile
+       lib/Makefile src/Makefile Makefile
        contrib/Makefile debian/Makefile doc/Makefile etc/Makefile
        intl/Makefile intl/po2tbl.sed po/Makefile.in
        etc/pam.d/Makefile old/Makefile
index 13d2bc47e1087889b13e4de03c8f2718f2c8c529..aea7d55736264b4436f46a4a25ffcf969c9d05c4 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, 19990827)
+AM_INIT_AUTOMAKE(shadow, 20000826)
 AM_CONFIG_HEADER(config.h)
 
 dnl Some hacks...
@@ -111,8 +111,8 @@ AC_FUNC_STRFTIME
 dnl Disabled for now, strtoday.c has problems with year 2000 or later
 dnl AC_CHECK_FUNCS(strptime)
 AC_CHECK_FUNCS(a64l fchmod fchown fsync getgroups gethostname getspnam)
-AC_CHECK_FUNCS(gettimeofday getusershell getutent initgroups lckpwdf)
-AC_CHECK_FUNCS(memcpy memset setgroups sigaction strchr updwtmp updwtmpx)
+AC_CHECK_FUNCS(gettimeofday getusershell getutent initgroups lchown lckpwdf)
+AC_CHECK_FUNCS(lstat memcpy memset setgroups sigaction strchr updwtmp updwtmpx)
 
 AC_REPLACE_FUNCS(mkdir putgrent putpwent putspent rename rmdir)
 AC_REPLACE_FUNCS(sgetgrent sgetpwent sgetspent)
@@ -259,8 +259,10 @@ if test "$with_libcrack" != "no"; then
 fi
 
 AC_SUBST(LIBSKEY)
+AC_SUBST(LIBMD)
 if test "$with_libskey" = "yes"; then
-       AC_CHECK_LIB(skey, skeychallenge, AC_DEFINE(SKEY) LIBSKEY=-lskey, , $LIBCRYPT)
+       AC_CHECK_LIB(md, MD5Init, LIBMD=-lmd)
+       AC_CHECK_LIB(skey, skeychallenge, AC_DEFINE(SKEY) LIBSKEY=-lskey, , $LIBMD $LIBCRYPT)
 elif test "$with_libopie" = "yes"; then
        AC_CHECK_LIB(opie, opiechallenge, AC_DEFINE(OPIE) LIBSKEY=-lopie, , $LIBCRYPT)
 fi
@@ -299,7 +301,8 @@ dnl AC_SUBST(LTALLOCA)
 AM_GNU_GETTEXT
 dnl AC_LINK_FILES($nls_cv_header_libgt, $nls_cv_header_intl)
 
-AC_OUTPUT(libmisc/Makefile man/Makefile lib/Makefile src/Makefile Makefile
+AC_OUTPUT(libmisc/Makefile man/Makefile man/pl/Makefile
+       lib/Makefile src/Makefile Makefile
        contrib/Makefile debian/Makefile doc/Makefile etc/Makefile
        intl/Makefile intl/po2tbl.sed po/Makefile.in
        etc/pam.d/Makefile old/Makefile
index 05aabfefdc6c197db7d83cae64ae740d9da3a617..ea24774e5b46e78c7a5fcc06573194cb9c2be6a7 100644 (file)
@@ -2,4 +2,5 @@
 # and also cooperate to make a distribution for `make dist'
 
 EXTRA_DIST = README adduser.c adduser-old.c adduser.sh adduser2.sh \
- atudel pwdauth.c rpasswd.c shadow-anonftp.patch udbachk.v012.tgz
+ atudel groupmems.shar pwdauth.c rpasswd.c shadow-anonftp.patch \
+ udbachk.v012.tgz
index 3c4a344fb84d9e496032307ceea4096a9f7690ed..4f546120edb09d325d54d771935c2e46ad19d0d4 100644 (file)
@@ -82,6 +82,7 @@ INTLOBJS = @INTLOBJS@
 LD = @LD@
 LIBCRACK = @LIBCRACK@
 LIBCRYPT = @LIBCRYPT@
+LIBMD = @LIBMD@
 LIBPAM = @LIBPAM@
 LIBSKEY = @LIBSKEY@
 LIBTCFS = @LIBTCFS@
@@ -104,7 +105,7 @@ VERSION = @VERSION@
 YACC = @YACC@
 l = @l@
 
-EXTRA_DIST = README adduser.c adduser-old.c adduser.sh adduser2.sh  atudel pwdauth.c rpasswd.c shadow-anonftp.patch udbachk.v012.tgz
+EXTRA_DIST = README adduser.c adduser-old.c adduser.sh adduser2.sh  atudel groupmems.shar pwdauth.c rpasswd.c shadow-anonftp.patch  udbachk.v012.tgz
 
 mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
 CONFIG_HEADER = ../config.h
diff --git a/contrib/groupmems.shar b/contrib/groupmems.shar
new file mode 100644 (file)
index 0000000..d45efd2
--- /dev/null
@@ -0,0 +1,546 @@
+#!/bin/sh
+# This is a shell archive (produced by GNU sharutils 4.2.1).
+# To extract the files from this archive, save it to some FILE, remove
+# everything before the `!/bin/sh' line above, then type `sh FILE'.
+#
+# Made on 2000-05-25 14:41 CDT by <gk4@gnu.austin.ibm.com>.
+# Source directory was `/home/gk4/src/groupmem'.
+#
+# Existing files will *not* be overwritten unless `-c' is specified.
+#
+# This shar contains:
+# length mode       name
+# ------ ---------- ------------------------------------------
+#   1960 -rw-r--r-- Makefile
+#   6348 -rw-r--r-- groupmems.c
+#   3372 -rw------- groupmems.8
+#
+save_IFS="${IFS}"
+IFS="${IFS}:"
+gettext_dir=FAILED
+locale_dir=FAILED
+first_param="$1"
+for dir in $PATH
+do
+  if test "$gettext_dir" = FAILED && test -f $dir/gettext \
+     && ($dir/gettext --version >/dev/null 2>&1)
+  then
+    set `$dir/gettext --version 2>&1`
+    if test "$3" = GNU
+    then
+      gettext_dir=$dir
+    fi
+  fi
+  if test "$locale_dir" = FAILED && test -f $dir/shar \
+     && ($dir/shar --print-text-domain-dir >/dev/null 2>&1)
+  then
+    locale_dir=`$dir/shar --print-text-domain-dir`
+  fi
+done
+IFS="$save_IFS"
+if test "$locale_dir" = FAILED || test "$gettext_dir" = FAILED
+then
+  echo=echo
+else
+  TEXTDOMAINDIR=$locale_dir
+  export TEXTDOMAINDIR
+  TEXTDOMAIN=sharutils
+  export TEXTDOMAIN
+  echo="$gettext_dir/gettext -s"
+fi
+if touch -am -t 200112312359.59 $$.touch >/dev/null 2>&1 && test ! -f 200112312359.59 -a -f $$.touch; then
+  shar_touch='touch -am -t $1$2$3$4$5$6.$7 "$8"'
+elif touch -am 123123592001.59 $$.touch >/dev/null 2>&1 && test ! -f 123123592001.59 -a ! -f 123123592001.5 -a -f $$.touch; then
+  shar_touch='touch -am $3$4$5$6$1$2.$7 "$8"'
+elif touch -am 1231235901 $$.touch >/dev/null 2>&1 && test ! -f 1231235901 -a -f $$.touch; then
+  shar_touch='touch -am $3$4$5$6$2 "$8"'
+else
+  shar_touch=:
+  echo
+  $echo 'WARNING: not restoring timestamps.  Consider getting and'
+  $echo "installing GNU \`touch', distributed in GNU File Utilities..."
+  echo
+fi
+rm -f 200112312359.59 123123592001.59 123123592001.5 1231235901 $$.touch
+#
+if mkdir _sh10937; then
+  $echo 'x -' 'creating lock directory'
+else
+  $echo 'failed to create lock directory'
+  exit 1
+fi
+# ============= Makefile ==============
+if test -f 'Makefile' && test "$first_param" != -c; then
+  $echo 'x -' SKIPPING 'Makefile' '(file already exists)'
+else
+  $echo 'x -' extracting 'Makefile' '(text)'
+  sed 's/^X//' << 'SHAR_EOF' > 'Makefile' &&
+/*
+# Copyright 2000, International Business Machines, Inc.
+# All rights reserved.
+#
+# original author: George Kraft IV, gk4@us.ibm.com
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+# 3. Neither the name of International Business Machines, Inc., nor the 
+#    names of its contributors may be used to endorse or promote products 
+#    derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY INTERNATIONAL BUSINESS MACHINES, INC. AND
+# CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, 
+# BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL 
+# INTERNATIONAL BUSINESS MACHINES, INC. OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+# 
+X
+all: groupmems
+X
+groupmems: groupmems.c
+X      cc -g -o groupmems groupmems.c -L. -lshadow
+X
+install: groupmems
+X      -/usr/sbin/groupadd groups
+X      install -o root -g groups -m 4770 groupmems /usr/bin
+X
+install.man: groupmems.8
+X      install -o root -g root -m 644 groupmems.8 /usr/man/man8
+X
+SHAR_EOF
+  (set 20 00 05 25 14 40 28 'Makefile'; eval "$shar_touch") &&
+  chmod 0644 'Makefile' ||
+  $echo 'restore of' 'Makefile' 'failed'
+  if ( md5sum --help 2>&1 | grep 'sage: md5sum \[' ) >/dev/null 2>&1 \
+  && ( md5sum --version 2>&1 | grep -v 'textutils 1.12' ) >/dev/null; then
+    md5sum -c << SHAR_EOF >/dev/null 2>&1 \
+    || $echo 'Makefile:' 'MD5 check failed'
+b46cf7ef8d59149093c011ced3f3103c  Makefile
+SHAR_EOF
+  else
+    shar_count="`LC_ALL= LC_CTYPE= LANG= wc -c < 'Makefile'`"
+    test 1960 -eq "$shar_count" ||
+    $echo 'Makefile:' 'original size' '1960,' 'current size' "$shar_count!"
+  fi
+fi
+# ============= groupmems.c ==============
+if test -f 'groupmems.c' && test "$first_param" != -c; then
+  $echo 'x -' SKIPPING 'groupmems.c' '(file already exists)'
+else
+  $echo 'x -' extracting 'groupmems.c' '(text)'
+  sed 's/^X//' << 'SHAR_EOF' > 'groupmems.c' &&
+/*
+X * Copyright 2000, International Business Machines, Inc.
+X * All rights reserved.
+X *
+X * original author: George Kraft IV, gk4@us.ibm.com
+X *
+X * Redistribution and use in source and binary forms, with or without
+X * modification, are permitted provided that the following conditions
+X * are met:
+X *
+X * 1. Redistributions of source code must retain the above copyright
+X *    notice, this list of conditions and the following disclaimer.
+X * 2. Redistributions in binary form must reproduce the above copyright
+X *    notice, this list of conditions and the following disclaimer in the
+X *    documentation and/or other materials provided with the distribution.
+X * 3. Neither the name of International Business Machines, Inc., nor the 
+X *    names of its contributors may be used to endorse or promote products 
+X *    derived from this software without specific prior written permission.
+X *
+X * THIS SOFTWARE IS PROVIDED BY INTERNATIONAL BUSINESS MACHINES, INC. AND
+X * CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, 
+X * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 
+X * FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL 
+X * INTERNATIONAL BUSINESS MACHINES, INC. OR CONTRIBUTORS BE LIABLE
+X * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+X * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+X * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+X * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+X * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+X * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+X * SUCH DAMAGE.
+X */
+/*
+**
+**     Utility "groupmem" adds and deletes members from a user's group.
+**     
+**     Setup (as "root"):
+**     
+**             groupadd -r groups 
+**             chmod 2770 groupmems
+**             chown root.groups groupmems
+**             groupmems -g groups -a gk4
+**     
+**     Usage (as "gk4"):
+**     
+**             groupmems -a olive
+**             groupmems -a jordan
+**             groupmems -a meghan
+**             groupmems -a morgan
+**             groupmems -a jake
+**             groupmems -l 
+**             groupmems -d jake
+**             groupmems -l 
+*/
+X
+#include <stdio.h>
+#include <pwd.h>
+#include <grp.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include "defines.h"
+#include "groupio.h"
+X
+/* Exit Status Values */
+X
+#define EXIT_SUCCESS           0       /* success */
+#define EXIT_USAGE             1       /* invalid command syntax */
+#define EXIT_GROUP_FILE                2       /* group file access problems */
+#define EXIT_NOT_ROOT          3       /* not super user  */
+#define EXIT_NOT_EROOT         4       /* not effective super user  */
+#define EXIT_NOT_PRIMARY       5       /* not primary owner of group  */
+#define EXIT_NOT_MEMBER                6       /* member of group does not exist */
+#define EXIT_MEMBER_EXISTS     7       /* member of group already exists */
+X
+#define TRUE 1
+#define FALSE 0
+X
+/* Globals */
+X
+extern int optind;
+extern char *optarg;
+static char *adduser = NULL;
+static char *deluser = NULL;
+static char *thisgroup = NULL;
+static int purge = FALSE;
+static int list = FALSE;
+static int exclusive = 0;
+X
+static int isroot(void) {
+X      return getuid() ? FALSE : TRUE;
+}
+X
+static int isgroup(void) {
+X      gid_t g = getgid();
+X      struct group *grp = getgrgid(g);
+X
+X      return TRUE;
+}
+X
+static char *whoami(void) {
+X      struct group *grp = getgrgid(getgid());
+X      struct passwd *usr = getpwuid(getuid());
+X
+X      if (0 == strcmp(usr->pw_name, grp->gr_name)) {
+X              return (char *)strdup(usr->pw_name);
+X      } else {
+X              return NULL;
+X      } 
+}
+X
+static void
+addtogroup(char *user, char **members) {
+X      int i;
+X      char **pmembers;
+X
+X      for (i = 0; NULL != members[i]; i++ ) {
+X              if (0 == strcmp(user, members[i])) {
+X                      fprintf(stderr, "Member already exists\n");
+X                      exit(EXIT_MEMBER_EXISTS);
+X              }
+X      }
+X
+X      if (0 == i) {
+X              pmembers = (char **)calloc(2, sizeof(char *));
+X      } else {
+X              pmembers = (char **)realloc(members, sizeof(char *)*(i+1));
+X      }
+X
+X      *members = *pmembers;
+X      members[i] = user;
+X      members[i+1] = NULL;
+}
+X
+static void
+rmfromgroup(char *user, char **members) {
+X      int i;
+X      int found = FALSE;
+X
+X      i = 0;
+X      while (!found && NULL != members[i]) {
+X              if (0 == strcmp(user, members[i])) {
+X                      found = TRUE;
+X              } else {
+X                      i++;
+X              }
+X      }
+X
+X      while (found && NULL != members[i]) {
+X              members[i] = members[++i];
+X      }
+X
+X      if (!found) {
+X              fprintf(stderr, "Member to remove could not be found\n");
+X              exit(EXIT_NOT_MEMBER);
+X      }
+}
+X
+static void
+nomembers(char **members) {
+X      int i;
+X
+X      for (i = 0; NULL != members[i]; i++ ) {
+X              members[i] = NULL;
+X      }
+}
+X
+static void
+members(char **members) {
+X      int i;
+X
+X      for (i = 0; NULL != members[i]; i++ ) {
+X              printf("%s ", members[i]);
+X
+X              if (NULL == members[i+1]) {
+X                      printf("\n");
+X              } else {
+X                      printf(" ");
+X              }
+X      }
+}
+X
+static void usage(void) {
+X      fprintf(stderr, "usage: groupmems -a username | -d username | -D | -l [-g groupname]\n");
+X      exit(EXIT_USAGE);
+}
+X
+main(int argc, char **argv) {
+X      int arg, i;
+X      char *name;
+X      struct group *grp;
+X
+X      while ((arg = getopt(argc, argv, "a:d:g:Dl")) != EOF) {
+X              switch (arg) {
+X              case 'a':
+X                      adduser = strdup(optarg);
+X                      ++exclusive;
+X                      break;
+X              case 'd':
+X                      deluser = strdup(optarg);
+X                      ++exclusive;
+X                      break;
+X              case 'g':
+X                      thisgroup = strdup(optarg);
+X                      break;
+X              case 'D':
+X                      purge = TRUE;
+X                      ++exclusive;
+X                      break;
+X              case 'l':
+X                      list = TRUE;
+X                      ++exclusive;
+X                      break;
+X              default:
+X                      usage();
+X              }
+X      }
+X
+X      if (exclusive > 1 || optind < argc) {
+X              usage();
+X      }
+X
+X      if (!isroot() && NULL != thisgroup) {
+X              fprintf(stderr, "Only root can add members to different groups\n");
+X              exit(EXIT_NOT_ROOT);
+X      } else if (isroot() && NULL != thisgroup) {
+X              name = thisgroup;
+X      } else if (!isgroup()) {
+X              fprintf(stderr, "Group access is required\n");
+X              exit(EXIT_NOT_EROOT);
+X      } else if (NULL == (name = whoami())) {
+X              fprintf(stderr, "Not primary owner of current group\n");
+X              exit(EXIT_NOT_PRIMARY);
+X      }
+X
+X      if (!gr_lock()) {
+X              fprintf(stderr, "Unable to lock group file\n");
+X              exit(EXIT_GROUP_FILE);
+X      }
+X
+X      if (!gr_open(O_RDWR)) {
+X              fprintf(stderr, "Unable to open group file\n");
+X              exit(EXIT_GROUP_FILE);
+X      }
+X
+X      grp = (struct group *)gr_locate(name);
+X
+X      if (NULL != adduser) {
+X              addtogroup(adduser, grp->gr_mem);
+X              gr_update(grp);
+X      } else if (NULL != deluser) {
+X              rmfromgroup(deluser, grp->gr_mem);
+X              gr_update(grp);
+X      } else if (purge) {
+X              nomembers(grp->gr_mem);
+X              gr_update(grp);
+X      } else if (list) {
+X              members(grp->gr_mem);
+X      }
+X
+X      if (!gr_close()) {
+X              fprintf(stderr, "Cannot close group file\n");
+X              exit(EXIT_GROUP_FILE);
+X      }
+X
+X      gr_unlock();
+X
+X      exit(EXIT_SUCCESS);
+}
+X
+/* EOF */
+SHAR_EOF
+  (set 20 00 05 25 14 36 38 'groupmems.c'; eval "$shar_touch") &&
+  chmod 0644 'groupmems.c' ||
+  $echo 'restore of' 'groupmems.c' 'failed'
+  if ( md5sum --help 2>&1 | grep 'sage: md5sum \[' ) >/dev/null 2>&1 \
+  && ( md5sum --version 2>&1 | grep -v 'textutils 1.12' ) >/dev/null; then
+    md5sum -c << SHAR_EOF >/dev/null 2>&1 \
+    || $echo 'groupmems.c:' 'MD5 check failed'
+f0dd68f8d762d89d24d3ce1f4141f981  groupmems.c
+SHAR_EOF
+  else
+    shar_count="`LC_ALL= LC_CTYPE= LANG= wc -c < 'groupmems.c'`"
+    test 6348 -eq "$shar_count" ||
+    $echo 'groupmems.c:' 'original size' '6348,' 'current size' "$shar_count!"
+  fi
+fi
+# ============= groupmems.8 ==============
+if test -f 'groupmems.8' && test "$first_param" != -c; then
+  $echo 'x -' SKIPPING 'groupmems.8' '(file already exists)'
+else
+  $echo 'x -' extracting 'groupmems.8' '(text)'
+  sed 's/^X//' << 'SHAR_EOF' > 'groupmems.8' &&
+X.\"
+X.\" Copyright 2000, International Business Machines, Inc.
+X.\" All rights reserved.
+X.\"
+X.\" original author: George Kraft IV, gk4@us.ibm.com
+X.\"
+X.\" Redistribution and use in source and binary forms, with or without
+X.\" modification, are permitted provided that the following conditions
+X.\" are met:
+X.\"
+X.\" 1. Redistributions of source code must retain the above copyright
+X.\"    notice, this list of conditions and the following disclaimer.
+X.\" 2. Redistributions in binary form must reproduce the above copyright
+X.\"    notice, this list of conditions and the following disclaimer in the
+X.\"    documentation and/or other materials provided with the distribution.
+X.\" 3. Neither the name of International Business Machines, Inc., nor the 
+X.\"    names of its contributors may be used to endorse or promote products 
+X.\"    derived from this software without specific prior written permission.
+X.\"
+X.\" THIS SOFTWARE IS PROVIDED BY INTERNATIONAL BUSINESS MACHINES, INC. AND
+X.\" CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, 
+X.\" BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 
+X.\" FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL 
+X.\" INTERNATIONAL BUSINESS MACHINES, INC. OR CONTRIBUTORS BE LIABLE
+X.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+X.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+X.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+X.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+X.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+X.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+X.\" SUCH DAMAGE.
+X.\"
+X.\" $Id: groupmems.shar,v 1.1 2000/08/26 18:37:32 marekm Exp $
+X.\"
+X.TH GROUPMEMS 8
+X.SH NAME
+groupmems \- Administer members of a user's primary group
+X.SH SYNOPSIS
+X.B groupmems
+\fB-a\fI user_name \fR |
+\fB-d\fI user_name \fR |
+\fB-l\fR |
+\fB-D\fR |
+[\fB-g\fI group_name \fR]
+X.SH DESCRIPTION
+The \fBgroupmems\fR utility allows a user to administer his/her own
+group membership list without the requirement of super user privileges.
+The \fBgroupmems\fR utility is for systems that configure its users to
+be in their own name sake primary group (i.e., guest / guest).
+X.P
+Only the super user, as administrator, can use \fBgroupmems\fR to alter
+the memberships of other groups.
+X.IP "\fB-a \fIuser_name\fR"
+Add a new user to the group membership list.
+X.IP "\fB-d \fIuser_name\fR"
+Delete a user from the group membership list.
+X.IP "\fB-l\fR"
+List the group membership list.
+X.IP "\fB-D\fR"
+Delete all users from the group membership list.
+X.IP "\fB-g \fIgroup_name\fR"
+The super user can specify which group membership list to modify.
+X.SH SETUP
+The \fBgroupmems\fR executable should be in mode \fB2770\fR as user \fBroot\fR
+and in group \fBgroups\fR.   The system administrator can add users to
+group groups to allow or disallow them using the  \fBgroupmems\fR utility
+to manager their own group membership list.
+X.P
+X     $ groupadd -r groups
+X.br
+X     $ chmod 2770 groupmems
+X.br
+X     $ chown root.groups groupmems
+X.br
+X     $ groupmems -g groups -a gk4
+X.SH FILES
+/etc/group
+X.br
+/etc/gshadow
+X.SH SEE ALSO
+X.BR chfn (1),
+X.BR chsh (1),
+X.BR useradd (8),
+X.BR userdel (8),
+X.BR usermod (8),
+X.BR passwd (1),
+X.BR groupadd (8),
+X.BR groupdel (8)
+X.SH AUTHOR
+George Kraft IV (gk4@us.ibm.com)
+X.\" EOF
+SHAR_EOF
+  (set 20 00 05 25 14 38 23 'groupmems.8'; eval "$shar_touch") &&
+  chmod 0600 'groupmems.8' ||
+  $echo 'restore of' 'groupmems.8' 'failed'
+  if ( md5sum --help 2>&1 | grep 'sage: md5sum \[' ) >/dev/null 2>&1 \
+  && ( md5sum --version 2>&1 | grep -v 'textutils 1.12' ) >/dev/null; then
+    md5sum -c << SHAR_EOF >/dev/null 2>&1 \
+    || $echo 'groupmems.8:' 'MD5 check failed'
+181e6cd3a3c9d3df320197fa2cde2b4a  groupmems.8
+SHAR_EOF
+  else
+    shar_count="`LC_ALL= LC_CTYPE= LANG= wc -c < 'groupmems.8'`"
+    test 3372 -eq "$shar_count" ||
+    $echo 'groupmems.8:' 'original size' '3372,' 'current size' "$shar_count!"
+  fi
+fi
+rm -fr _sh10937
+exit 0
index f1ad4f6bdf77d20cc14783685144c087379c524a..4e64b18064971aa40e38520a694836a90732bfb2 100644 (file)
@@ -82,6 +82,7 @@ INTLOBJS = @INTLOBJS@
 LD = @LD@
 LIBCRACK = @LIBCRACK@
 LIBCRYPT = @LIBCRYPT@
+LIBMD = @LIBMD@
 LIBPAM = @LIBPAM@
 LIBSKEY = @LIBSKEY@
 LIBTCFS = @LIBTCFS@
index 727bc1b769ce543fc114120dc88a8388035166ec..a848548c3254acf1a64ac7fb7024365aa17b04c2 100644 (file)
@@ -32,7 +32,7 @@ SUCH DAMAGE.
 
 This source code is currently archived on ftp.uu.net in the
 comp.sources.misc portion of the USENET archives.  You may also contact
-the author, Julianne F. Haugh, at jfh@bga.com if you have
+the author, Julianne F. Haugh, at jfh@austin.ibm.com if you have
 any questions regarding this package.
 
 THIS SOFTWARE IS BEING DISTRIBUTED AS-IS.  THE AUTHORS DISCLAIM ALL
index e032df5f02a0478dd1736ea94a28edd952cb1e99..701d899f13cd5a9ecd27046a99c3b44b36b1f489 100644 (file)
@@ -32,7 +32,7 @@ SUCH DAMAGE.
 
 This source code is currently archived on ftp.uu.net in the
 comp.sources.misc portion of the USENET archives.  You may also contact
-the author, Julianne F. Haugh, at jfh@bga.com if you have
+the author, Julianne F. Haugh, at jfh@austin.ibm.com if you have
 any questions regarding this package.
 
 THIS SOFTWARE IS BEING DISTRIBUTED AS-IS.  THE AUTHORS DISCLAIM ALL
index 4e5a0ea70d6933aee9882df395c264b8bb90d249..de1479c631c63fbe784b7c81d74b6a2c7c21cc3c 100644 (file)
@@ -31,7 +31,7 @@ SUCH DAMAGE.
 
 This source code is currently archived on ftp.uu.net in the
 comp.sources.misc portion of the USENET archives.  You may also contact
-the author, Julianne F. Haugh, at jfh@bga.com if you have
+the author, Julianne F. Haugh, at jfh@austin.ibm.com if you have
 any questions regarding this package.
 
 THIS SOFTWARE IS BEING DISTRIBUTED AS-IS.  THE AUTHORS DISCLAIM ALL
index e4c241017a1143cb7c6986d936270ad92a47cb06..a19ad596d4f4bcf5bec01591a7a1a071b3e2b34c 100644 (file)
@@ -1,4 +1,4 @@
-$Id: ANNOUNCE,v 1.3 1998/01/29 23:22:25 marekm Exp $
+$Id: ANNOUNCE,v 1.4 2000/08/26 18:27:09 marekm Exp $
 
 [ This is the original comp.os.linux.announce posting (only the
   author's name and e-mail address has been updated), kept here
@@ -10,7 +10,7 @@ $Id: ANNOUNCE,v 1.3 1998/01/29 23:22:25 marekm Exp $
 This is a new beta release of the Shadow Password Suite for Linux.
 Many bugs have been reported (and fixed!), and the package is now
 under a BSD-style copyright.  It was written by Julianne F. Haugh
-<jfh@tab.com>, and the Linux port is now maintained by me.
+<jfh@austin.ibm.com>, and the Linux port is now maintained by me.
 
 Again, this is beta software which may still have some bugs, please
 treat it as such.  Please don't install it if you don't know what
@@ -34,7 +34,7 @@ Version:      3.3.3-951218
 Entered-date:  18DEC95
 Description:   
 Keywords:      login passwd security shadow
-Author:                jfh@tab.com (Julie Haugh)
+Author:                jfh@austin.ibm.com (Julie Haugh)
 Maintained-by: marekm@i17linuxb.ists.pwr.wroc.pl (Marek Michalkiewicz)
 Primary-site:  sunsite.unc.edu /pub/Linux/system/Admin
                220K shadow-951218.tar.gz
index 2e1c54be8efc1c74c17da5254157e3af9bf3d548..d25ec5b1da77712a8dc3b325b7c502ee11b96589 100644 (file)
@@ -1,4 +1,23 @@
-$Id: CHANGES,v 1.28 1999/08/27 19:02:50 marekm Exp $
+$Id: CHANGES,v 1.29 2000/08/26 18:27:09 marekm Exp $
+
+shadow-19990827 => shadow-20000826
+
+WARNING: this release is not tested (other than that it compiles for me),
+please be careful.  Previous release was a year ago, so it is really time
+to release something and start looking for a new, better maintainer...
+(I've been extremely busy recently.  Credit for most of the real work,
+such as complete PAM support, should go to Ben Collins <bcollins@debian.org>
+who maintains this package for Debian.)
+
+- merged most of the changes from Debian (not all of them yet, PAM support
+  should be complete but is not tested - need to upgrade to potato first)
+- added Polish translations of manual pages from PLD
+- change sulog() to not depend on global variables oldname, name
+- try to not follow symbolic links when deleting files recursively
+  in userdel (still not perfect, safest to do it in single user mode)
+- removed workarounds for ancient (pre-ANSI) C compilers - use gcc!
+  (a few ANSI C constructs were used already, and no one complained)
+- updated author's e-mail address (jfh@bga.com -> jfh@austin.ibm.com)
 
 shadow-19990709 => shadow-19990827
 
diff --git a/doc/LSM b/doc/LSM
index def653a35ba445648cc805d010c79e908b6f1639..39186a207b20cdcb884d25cf3253904a33b43e99 100644 (file)
--- a/doc/LSM
+++ b/doc/LSM
@@ -1,17 +1,17 @@
 Begin3
 Title:          Shadow Password Suite
-Version:        19990827
-Entered-date:   27AUG99
+Version:        20000826
+Entered-date:   26AUG00
 Description:    Shadow password file utilities.  This package includes
                 the programs necessary to convert traditional V7 UNIX
                 password files to the SVR4 shadow password format, and
                 additional tools to maintain password and group files
                 (that work with both shadow and non-shadow passwords).
 Keywords:       login passwd security shadow
-Author:         jfh@bga.com (Julianne F. Haugh)
+Author:         jfh@austin.ibm.com (Julianne F. Haugh)
 Maintained-by:  marekm@linux.org.pl (Marek Michalkiewicz)
 Primary-site:   piast.t19.ds.pwr.wroc.pl /pub/linux/shadow/
-                707K shadow-19990827.tar.gz
+                717K shadow-20000826.tar.gz
 Alternate-site: ftp.ists.pwr.wroc.pl /pub/linux/shadow/
 Original-site:  ftp.uu.net ?
 Platforms:      Linux, SunOS, ...
index 49102d75c10273b5b4bc1c620e57db8318a02664..b4ee0917dff6bfb92bcd66f78064610b6859d8df 100644 (file)
@@ -82,6 +82,7 @@ INTLOBJS = @INTLOBJS@
 LD = @LD@
 LIBCRACK = @LIBCRACK@
 LIBCRYPT = @LIBCRYPT@
+LIBMD = @LIBMD@
 LIBPAM = @LIBPAM@
 LIBSKEY = @LIBSKEY@
 LIBTCFS = @LIBTCFS@
index b94f3322f2d3a26abe9dc6558c44cc077972b89e..c177638f0f366169e9273b6211c28d62f032015b 100644 (file)
@@ -1,4 +1,4 @@
-[ $Id: README,v 1.3 1998/12/28 20:34:27 marekm Exp $ ]
+[ $Id: README,v 1.4 2000/08/26 18:27:09 marekm Exp $ ]
 
 This is the explanatory document for Julianne Frances Haugh's login
 replacement, release 3.  This document was last updated 16 Feb 1997.
@@ -32,7 +32,7 @@ SUCH DAMAGE.
 
 This source code is currently archived on ftp.uu.net in the
 comp.sources.misc portion of the USENET archives.  You may also contact
-the author, Julianne F. Haugh, at jfh@bga.com if you have any questions
+the author, Julianne F. Haugh, at jfh@austin.ibm.com if you have any questions
 regarding this package.
 
 THIS SOFTWARE IS BEING DISTRIBUTED AS-IS.  THE AUTHORS DISCLAIM ALL
index 4159b0a7e450cb8d2a69949c9bd75f2ade13461f..cd55c940ae0850127267e8bdd60985b77851f8a0 100644 (file)
@@ -1,4 +1,4 @@
-$Id: README.linux,v 1.19 1999/06/07 16:40:44 marekm Exp $
+$Id: README.linux,v 1.20 2000/08/26 18:27:09 marekm Exp $
 
 This is the shadow suite hacked a bit for Linux.  See CHANGES for
 short description of changes.  See also WISHLIST if you have too
@@ -66,7 +66,7 @@ The code feels like stabilizing now - while still BETA, it should
 work quite well.  Many bugs have been fixed, but there may be still
 a few lurking.  Again, please test it and report any problems.
 
-Thanks to Julianne Frances Haugh <jfh@bga.com> who wrote the thing
+Thanks to Julianne Frances Haugh <jfh@austin.ibm.com> who wrote the thing
 in the first place, sent me the latest version, and released it under
 a "free" BSD-style license, so that it can be included in Linux
 distributions (at least Debian 1.3 and Slackware 3.2 are already
@@ -75,6 +75,9 @@ the standard source tree).  David Frey <David.Frey@lugs.ch>, Michael
 Meskes <meskes@topsystem.de> and Guy Maor <maor@debian.org> have
 done a lot of work to integrate shadow passwords into Debian Linux.
 
+Ben Collins <bcollins@debian.org> maintains this package for Debian
+and added complete PAM support, now available in Debian 2.2.
+
 Thanks to Bradley Glonka <bradley@123.net> of Linux System Labs
 (http://www.lsl.com/) for sending me a free Red Hat 4.2 CD-ROM,
 making it possible to test this package on this distribution.
@@ -110,6 +113,7 @@ Judd Bourgeois <shagboy@bluesky.net>
 Ulisses Alonso Camaro <ulisses@pusa.eleinf.uv.es>
 Ed Carp <ecarp@netcom.com>
 Rani Chouha <ranibey@smartec.com>
+Ben Collins <bcollins@debian.org>
 Joshua Cowan <jcowan@hermit.reslife.okstate.edu>
 Alan Curry <pacman@tardis.mars.net>
 Frank Denis <j@4u.net>
index fbb3a57e9843720542b2b8dc4fc943d6dc98fe90..ddc961155576581f6db8c51f210ef4ba1bc27a03 100644 (file)
@@ -19,10 +19,12 @@ Working mirrors that I know of, sorted by country (note: I removed
 a few mirrors that didn't work when I tried to access them several
 times - if any of them are still alive, please let me know):
 
+(XXX - list may be out of date now.)
+
 Brazil:
 
- ftp://ftp.athena.del.ufrj.br/pub/linux/shadow_password/
-  Rafael Jorge Csura Szendrodi <szendro@santuario.del.ufrj.br>
+ ftp://ftp.athena.pads.ufrj.br/pub/linux/shadow/
+  Rafael Jorge Csura Szendrodi <szendro@santuario.pads.ufrj.br>
 
 Czech Republic:
 
index 222b5820552121ffe7cf755a9a7205b598ae31cb..4a873640f9bd031082b6319d49fb4a942e6b3cba 100644 (file)
@@ -1,18 +1,24 @@
 
 About PAM support in the Shadow Password Suite
 
-Warning: this code is still considered ALPHA.  It is still incomplete,
-and needs more testing.  Please let me know if it works, or if something
-doesn't work.
+Warning: this code is still considered BETA.  It needs more testing.
+Please let me know if it works, or if something doesn't work.
 
-Use "./configure --with-libpam" to enable PAM support.  Right now it only
-works for the passwd and su applications.  PAM support still needs to be
-implemented in login.
+Use "./configure --with-libpam" to enable PAM support in the login,
+passwd and su applications.
 
 When compiled with PAM support enabled, the following traditional features
 of the shadow suite are not implemented directly in the applications -
 instead, they should be implemented in the PAM modules.
 
+login:
+ - /etc/login.access
+ - /etc/porttime
+ - resource limits
+ - console groups
+ - password expiration / password strength checks
+ - /etc/motd and mail check
+
 passwd:
  - administrator defined authentication methods
  - TCFS support
@@ -27,10 +33,3 @@ su:
  - time restrictions
  - resource limits
 
-Known problems:
- - the pam_limits module doesn't work with su - it should be changed
-   to set the limits in pam_setcred() instead of pam_open_session()
-   (this version of su doesn't open any new sessions, like Solaris su
-   and unlike SimplePAMApps su)
- - PAM support still needs to be implemented in login
-
index abdb191997a50bc7b600f9e484c3e087a12e75b3..8ae49d504590f6a52a4e7f453a3fbb50595c6a7a 100644 (file)
@@ -1,4 +1,4 @@
-$Id: WISHLIST,v 1.23 1999/08/27 19:02:50 marekm Exp $
+$Id: WISHLIST,v 1.24 2000/08/26 18:27:09 marekm Exp $
 
 This is my wishlist for the shadow suite, in no particular order.  Feel
 free to do anything from this list and mail me the diffs :-).
@@ -16,7 +16,6 @@ New ideas to add to this list are welcome, too.  --marekm
 - update man pages to reflect all the changes (real programmers ... :-)
 - patch for rlogind/telnetd to create utmp entry and fill in ut_addr
 - fix the usermod -l bug properly [for now it's OK - #undef AUTH_METHODS]
-- IMPORTANT: finish PAM support (passwd, su - done, untested; login - started)
 - option to specify encrypted password in passwd (for yppasswdd, so it
   doesn't need to know about shadow/non-shadow); should probably use a pipe
   (less insecure than command line arguments)
@@ -28,7 +27,7 @@ New ideas to add to this list are welcome, too.  --marekm
 - poppassd (remote password change for eudora etc.)
 - add support for passwd/shadow db files (glibc)
 - better documentation
-- su -l, -m, -p, -s options (as in GNU su)
+- su -l, -m, -p, -s options (as in GNU su) - done in the Debian patches
 - vipw: check password files for errors after editing
 - clean up login utmp(x) handling code
 - add "maximum time users allowed to stay logged in" limit option to logoutd
@@ -46,10 +45,7 @@ New ideas to add to this list are welcome, too.  --marekm
   (and use UID_MIN, UID_MAX from login.defs)
 - newusers should be able to copy /etc/skel to the new home directory
   (like useradd)
-- include i18n files in Debian packages
-- integrate the latest upstream version into the Debian distribution
-  (as of this writing, they still have shadow-980403 with huge diff,
-  and many bugs have been fixed since then)
+- integrate the changes from Debian (complete PAM support, bug fixes)
 - add directories where other packages can add hooks for package-specific
   per-user configuration, to be executed with run-parts. Some hooks should
   be executed at package install time for existing users, likewise for
index 935cbba1a93f2f8bc750bfc20dfc5fc9aa9f3b49..c27dab488425884f97e71dc5a944145af720847a 100644 (file)
@@ -82,6 +82,7 @@ INTLOBJS = @INTLOBJS@
 LD = @LD@
 LIBCRACK = @LIBCRACK@
 LIBCRYPT = @LIBCRYPT@
+LIBMD = @LIBMD@
 LIBPAM = @LIBPAM@
 LIBSKEY = @LIBSKEY@
 LIBTCFS = @LIBTCFS@
index 0f4e8852177389c693206d6eb1846d9b2b623d15..e7cdb4dff7e5452b468eaeb43c907bd2ffb30522 100644 (file)
@@ -1,7 +1,7 @@
 #
 # /etc/login.defs - Configuration control definitions for the login package.
 #
-#      $Id: login.defs.hurd,v 1.1 1999/08/27 19:02:50 marekm Exp $
+#      $Id: login.defs.hurd,v 1.2 2000/08/26 18:27:10 marekm Exp $
 #
 # One item must be defined:  MAIL_DIR.
 # If unspecified, some arbitrary (and possibly incorrect) value will
@@ -137,5 +137,7 @@ CHFN_RESTRICT               rwh
 # (examples: 022 -> 002, 077 -> 007) for non-root users, if the uid is
 # the same as gid, and username is the same as the primary group name.
 #
+# This also enables userdel to remove user groups if no members exist.
+#
 USERGROUPS_ENAB yes
 
index 71eac8261a369d121e0a2dd42de7e200ad558a28..944029345d65ef4693a6b4cf23d88d8ba2cf84a2 100644 (file)
@@ -1,7 +1,7 @@
 #
 # /etc/login.defs - Configuration control definitions for the login package.
 #
-#      $Id: login.defs.linux,v 1.11 1999/08/27 19:02:50 marekm Exp $
+#      $Id: login.defs.linux,v 1.12 2000/08/26 18:27:10 marekm Exp $
 #
 # Three items must be defined:  MAIL_DIR, ENV_SUPATH, and ENV_PATH.
 # If unspecified, some arbitrary (and possibly incorrect) value will
@@ -364,5 +364,7 @@ ENVIRON_FILE        /etc/environment
 # (examples: 022 -> 002, 077 -> 007) for non-root users, if the uid is
 # the same as gid, and username is the same as the primary group name.
 #
+# This also enables userdel to remove user groups if no members exist.
+#
 USERGROUPS_ENAB yes
 
index 5319829471853a2caa9c4857597dc58cb6eef37c..83dbbb8bd0974561c201c043eee569ff5a922b91 100644 (file)
@@ -82,6 +82,7 @@ INTLOBJS = @INTLOBJS@
 LD = @LD@
 LIBCRACK = @LIBCRACK@
 LIBCRYPT = @LIBCRYPT@
+LIBMD = @LIBMD@
 LIBPAM = @LIBPAM@
 LIBSKEY = @LIBSKEY@
 LIBTCFS = @LIBTCFS@
index d9b8572f8d87e8bb058043cdd50d74a20bc182fa..f3de6fe0edc777b83be03082c09f543d6045ebd9 100644 (file)
@@ -45,7 +45,7 @@ libdir = ${exec_prefix}/lib
 #lib_PROGRAMS = libshadow.la
 lib_LTLIBRARIES = libshadow.la
 libshadow_la_SOURCES = ${libshadow_a_SOURCES}
-#libshadow_la_LIBADD = @LTLIBOBJS@
+libshadow_la_LIBADD = @LTLIBOBJS@
 #libshadow_la_LDFLAGS = -version-info 0:0:0 -rpath $(libdir)
 libshadow_la_LDFLAGS = -version-info 0:0:0
 
index 9def3a2b2a3d236af28febb86539010963f41a7e..d28a1db4724f5705cf7f9b36ee439de2bf827fea 100644 (file)
@@ -78,6 +78,7 @@ INTLOBJS = @INTLOBJS@
 LD = @LD@
 LIBCRACK = @LIBCRACK@
 LIBCRYPT = @LIBCRYPT@
+LIBMD = @LIBMD@
 LIBPAM = @LIBPAM@
 LIBSKEY = @LIBSKEY@
 LIBTCFS = @LIBTCFS@
@@ -138,7 +139,7 @@ libdir = ${exec_prefix}/lib
 #lib_PROGRAMS = libshadow.la
 lib_LTLIBRARIES = libshadow.la
 libshadow_la_SOURCES = ${libshadow_a_SOURCES}
-#libshadow_la_LIBADD = @LTLIBOBJS@
+libshadow_la_LIBADD = @LTLIBOBJS@
 #libshadow_la_LDFLAGS = -version-info 0:0:0 -rpath $(libdir)
 libshadow_la_LDFLAGS = -version-info 0:0:0
 mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
@@ -156,7 +157,7 @@ rad64.o sgroupio.o shadow.o shadowio.o utent.o tcfsio.o
 AR = ar
 LTLIBRARIES =  $(lib_LTLIBRARIES)
 
-libshadow_la_LIBADD = 
+libshadow_la_DEPENDENCIES =  @LTLIBOBJS@
 libshadow_la_OBJECTS =  commonio.lo dialchk.lo dialup.lo encrypt.lo \
 fputsx.lo getdef.lo getpass.lo groupio.lo gshadow.lo lockpw.lo port.lo \
 pwauth.lo pwio.lo rad64.lo sgroupio.lo shadow.lo shadowio.lo utent.lo \
@@ -335,14 +336,17 @@ gshadow.lo gshadow.o : gshadow.c ../config.h rcsid.h prototypes.h \
        defines.h gshadow_.h
 lockpw.lo lockpw.o : lockpw.c ../config.h
 port.lo port.o : port.c ../config.h rcsid.h defines.h gshadow_.h port.h
-putgrent.o: putgrent.c ../config.h prototypes.h defines.h gshadow_.h
+putgrent.lo putgrent.o : putgrent.c ../config.h prototypes.h defines.h \
+       gshadow_.h
 pwauth.lo pwauth.o : pwauth.c ../config.h rcsid.h prototypes.h defines.h \
        gshadow_.h pwauth.h getdef.h
 pwio.lo pwio.o : pwio.c ../config.h rcsid.h prototypes.h defines.h \
        gshadow_.h commonio.h pwio.h
 rad64.lo rad64.o : rad64.c ../config.h rcsid.h
-sgetgrent.o: sgetgrent.c ../config.h rcsid.h defines.h gshadow_.h
-sgetpwent.o: sgetpwent.c ../config.h rcsid.h defines.h gshadow_.h
+sgetgrent.lo sgetgrent.o : sgetgrent.c ../config.h rcsid.h defines.h \
+       gshadow_.h
+sgetpwent.lo sgetpwent.o : sgetpwent.c ../config.h rcsid.h defines.h \
+       gshadow_.h
 sgroupio.lo sgroupio.o : sgroupio.c ../config.h rcsid.h prototypes.h \
        defines.h gshadow_.h commonio.h sgroupio.h
 shadowio.lo shadowio.o : shadowio.c ../config.h rcsid.h prototypes.h \
index 2bee88385d80ef81198751785dc05b035193979e..6343f956bc9b15c419c7d54ff411f345d882be3f 100644 (file)
@@ -2,7 +2,7 @@
 #include <config.h>
 
 #include "rcsid.h"
-RCSID("$Id: commonio.c,v 1.14 1998/07/23 22:13:15 marekm Exp $")
+RCSID("$Id: commonio.c,v 1.15 2000/08/26 18:27:17 marekm Exp $")
 
 #include "defines.h"
 #include <sys/stat.h>
@@ -19,15 +19,15 @@ RCSID("$Id: commonio.c,v 1.14 1998/07/23 22:13:15 marekm Exp $")
 #include "commonio.h"
 
 /* local function prototypes */
-static int check_link_count P_((const char *));
-static int do_lock_file P_((const char *, const char *));
-static FILE *fopen_set_perms P_((const char *, const char *, const struct stat *));
-static int create_backup P_((const char *, FILE *));
-static void free_linked_list P_((struct commonio_db *));
-static void add_one_entry P_((struct commonio_db *, struct commonio_entry *));
-static int name_is_nis P_((const char *));
-static int write_all P_((const struct commonio_db *));
-static struct commonio_entry *find_entry_by_name P_((struct commonio_db *, const char *));
+static int check_link_count(const char *);
+static int do_lock_file(const char *, const char *);
+static FILE *fopen_set_perms(const char *, const char *, const struct stat *);
+static int create_backup(const char *, FILE *);
+static void free_linked_list(struct commonio_db *);
+static void add_one_entry(struct commonio_db *, struct commonio_entry *);
+static int name_is_nis(const char *);
+static int write_all(const struct commonio_db *);
+static struct commonio_entry *find_entry_by_name(struct commonio_db *, const char *);
 
 #ifdef HAVE_LCKPWDF
 static int lock_count = 0;
@@ -199,8 +199,8 @@ free_linked_list(struct commonio_db *db)
                if (p->line)
                        free(p->line);
 
-               if (p->entry)
-                       db->ops->free(p->entry);
+               if (p->eptr)
+                       db->ops->free(p->eptr);
 
                free(p);
        }
@@ -354,26 +354,26 @@ name_is_nis(const char *n)
 
 #if KEEP_NIS_AT_END
 /* prototype */
-static void add_one_entry_nis P_((struct commonio_db *, struct commonio_entry *));
+static void add_one_entry_nis(struct commonio_db *, struct commonio_entry *);
 
 static void
-add_one_entry_nis(struct commonio_db *db, struct commonio_entry *new)
+add_one_entry_nis(struct commonio_db *db, struct commonio_entry *newp)
 {
        struct commonio_entry *p;
 
        for (p = db->head; p; p = p->next) {
-               if (name_is_nis(p->entry ? db->ops->getname(p->entry) : p->line)) {
-                       new->next = p;
-                       new->prev = p->prev;
+               if (name_is_nis(p->eptr ? db->ops->getname(p->eptr) : p->line)) {
+                       newp->next = p;
+                       newp->prev = p->prev;
                        if (p->prev)
-                               p->prev->next = new;
+                               p->prev->next = newp;
                        else
-                               db->head = new;
-                       p->prev = new;
+                               db->head = newp;
+                       p->prev = newp;
                        return;
                }
        }
-       add_one_entry(db, new);
+       add_one_entry(db, newp);
 }
 #endif /* KEEP_NIS_AT_END */
 
@@ -385,7 +385,7 @@ commonio_open(struct commonio_db *db, int mode)
        char    *cp;
        char *line;
        struct commonio_entry *p;
-       void *entry;
+       void *eptr;
        int flags = mode;
 
        mode &= ~O_CREAT;
@@ -425,10 +425,10 @@ commonio_open(struct commonio_db *db, int mode)
                        goto cleanup;
 
                if (name_is_nis(line)) {
-                       entry = NULL;
-               } else if ((entry = db->ops->parse(line))) {
-                       entry = db->ops->dup(entry);
-                       if (!entry)
+                       eptr = NULL;
+               } else if ((eptr = db->ops->parse(line))) {
+                       eptr = db->ops->dup(eptr);
+                       if (!eptr)
                                goto cleanup_line;
                }
 
@@ -436,7 +436,7 @@ commonio_open(struct commonio_db *db, int mode)
                if (!p)
                        goto cleanup_entry;
 
-               p->entry = entry;
+               p->eptr = eptr;
                p->line = line;
                p->changed = 0;
 
@@ -447,8 +447,8 @@ commonio_open(struct commonio_db *db, int mode)
        return 1;
 
 cleanup_entry:
-       if (entry)
-               db->ops->free(entry);
+       if (eptr)
+               db->ops->free(eptr);
 cleanup_line:
        free(line);
 cleanup:
@@ -464,12 +464,12 @@ static int
 write_all(const struct commonio_db *db)
 {
        const struct commonio_entry *p;
-       void *entry;
+       void *eptr;
 
        for (p = db->head; p; p = p->next) {
                if (p->changed) {
-                       entry = p->entry;
-                       if (db->ops->put(entry, db->fp))
+                       eptr = p->eptr;
+                       if (db->ops->put(eptr, db->fp))
                                return -1;
                } else if (p->line) {
                        if (db->ops->fputs(p->line, db->fp) == EOF)
@@ -581,7 +581,7 @@ find_entry_by_name(struct commonio_db *db, const char *name)
        void *ep;
 
        for (p = db->head; p; p = p->next) {
-               ep = p->entry;
+               ep = p->eptr;
                if (ep && strcmp(db->ops->getname(ep), name) == 0)
                        break;
        }
@@ -590,7 +590,7 @@ find_entry_by_name(struct commonio_db *db, const char *name)
 
 
 int
-commonio_update(struct commonio_db *db, const void *entry)
+commonio_update(struct commonio_db *db, const void *eptr)
 {
        struct commonio_entry *p;
        void *nentry;
@@ -599,14 +599,14 @@ commonio_update(struct commonio_db *db, const void *entry)
                errno = EINVAL;
                return 0;
        }
-       if (!(nentry = db->ops->dup(entry))) {
+       if (!(nentry = db->ops->dup(eptr))) {
                errno = ENOMEM;
                return 0;
        }
-       p = find_entry_by_name(db, db->ops->getname(entry));
+       p = find_entry_by_name(db, db->ops->getname(eptr));
        if (p) {
-               db->ops->free(p->entry);
-               p->entry = nentry;
+               db->ops->free(p->eptr);
+               p->eptr = nentry;
                p->changed = 1;
                db->cursor = p;
 
@@ -621,7 +621,7 @@ commonio_update(struct commonio_db *db, const void *entry)
                return 0;
        }
 
-       p->entry = nentry;
+       p->eptr = nentry;
        p->line = NULL;
        p->changed = 1;
 
@@ -676,8 +676,8 @@ commonio_remove(struct commonio_db *db, const char *name)
        if (p->line)
                free(p->line);
 
-       if (p->entry)
-               db->ops->free(p->entry);
+       if (p->eptr)
+               db->ops->free(p->eptr);
 
        return 1;
 }
@@ -698,7 +698,7 @@ commonio_locate(struct commonio_db *db, const char *name)
                return NULL;
        }
        db->cursor = p;
-       return p->entry;
+       return p->eptr;
 }
 
 
@@ -717,7 +717,7 @@ commonio_rewind(struct commonio_db *db)
 const void *
 commonio_next(struct commonio_db *db)
 {
-       void *entry;
+       void *eptr;
 
        if (!db->isopen) {
                errno = EINVAL;
@@ -729,9 +729,9 @@ commonio_next(struct commonio_db *db)
                db->cursor = db->cursor->next;
 
        while (db->cursor) {
-               entry = db->cursor->entry;
-               if (entry)
-                       return entry;
+               eptr = db->cursor->eptr;
+               if (eptr)
+                       return eptr;
 
                db->cursor = db->cursor->next;
        }
index 98da1640b4969d5f7bbc29ad20853d7c68d2be51..6968692bb425417a0f7a28d0fed23500d759d46a 100644 (file)
@@ -1,11 +1,11 @@
-/* $Id: commonio.h,v 1.4 1998/01/29 23:22:27 marekm Exp $ */
+/* $Id: commonio.h,v 1.5 2000/08/26 18:27:17 marekm Exp $ */
 
 /*
  * Linked list entry.
  */
 struct commonio_entry {
        char *line;
-       void *entry;  /* struct passwd, struct spwd, ... */
+       void *eptr;  /* struct passwd, struct spwd, ... */
        struct commonio_entry *prev, *next;
        int changed:1;
 };
@@ -18,37 +18,37 @@ struct commonio_ops {
         * Make a copy of the object (for example, struct passwd)
         * and all strings pointed by it, in malloced memory.
         */
-       void * (*dup) P_((const void *));
+       void *(*dup)(const void *);
 
        /*
         * free() the object including any strings pointed by it.
         */
-       void (*free) P_((void *));
+       void (*free)(void *);
 
        /*
         * Return the name of the object (for example, pw_name
         * for struct passwd).
         */
-       const char * (*getname) P_((const void *));
+       const char *(*getname)(const void *);
 
        /*
         * Parse a string, return object (in static area -
         * should be copied using the dup operation above).
         */
-       void * (*parse) P_((const char *));
+       void *(*parse)(const char *);
 
        /*
         * Write the object to the file (this calls putpwent()
         * for struct passwd, for example).
         */
-       int (*put) P_((const void *, FILE *));
+       int (*put)(const void *, FILE *);
 
        /*
         * fgets and fputs (can be replaced by versions that
         * understand line continuation conventions).
         */
-       char * (*fgets) P_((char *, int, FILE *));
-       int (*fputs) P_((const char *, FILE *));
+       char *(*fgets)(char *, int, FILE *);
+       int (*fputs)(const char *, FILE *);
 };
 
 /*
@@ -85,17 +85,17 @@ struct commonio_db {
        int use_lckpwdf:1;
 };
 
-extern int commonio_setname P_((struct commonio_db *, const char *));
-extern int commonio_present P_((const struct commonio_db *));
-extern int commonio_lock P_((struct commonio_db *));
-extern int commonio_lock_nowait P_((struct commonio_db *));
-extern int commonio_open P_((struct commonio_db *, int));
-extern const void *commonio_locate P_((struct commonio_db *, const char *));
-extern int commonio_update P_((struct commonio_db *, const void *));
-extern int commonio_remove P_((struct commonio_db *, const char *));
-extern int commonio_rewind P_((struct commonio_db *));
-extern const void *commonio_next P_((struct commonio_db *));
-extern int commonio_close P_((struct commonio_db *));
-extern int commonio_unlock P_((struct commonio_db *));
-extern void commonio_del_entry P_((struct commonio_db *, const struct commonio_entry *));
+extern int commonio_setname(struct commonio_db *, const char *);
+extern int commonio_present(const struct commonio_db *);
+extern int commonio_lock(struct commonio_db *);
+extern int commonio_lock_nowait(struct commonio_db *);
+extern int commonio_open(struct commonio_db *, int);
+extern const void *commonio_locate(struct commonio_db *, const char *);
+extern int commonio_update(struct commonio_db *, const void *);
+extern int commonio_remove(struct commonio_db *, const char *);
+extern int commonio_rewind(struct commonio_db *);
+extern const void *commonio_next(struct commonio_db *);
+extern int commonio_close(struct commonio_db *);
+extern int commonio_unlock(struct commonio_db *);
+extern void commonio_del_entry(struct commonio_db *, const struct commonio_entry *);
 
index 9ee90f29bb2fc7b6360bd2438df32fb4698e0554..7294a7f98492215c9ae3405c59a810c36fa88e8b 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: defines.h,v 1.15 1999/08/27 19:02:50 marekm Exp $ */
+/* $Id: defines.h,v 1.16 2000/08/26 18:27:17 marekm Exp $ */
 /* some useful defines */
 
 #ifndef _DEFINES_H_
 # define _(Text) Text
 #endif
 
-#ifndef P_
-# ifdef PROTOTYPES
-#  define P_(x) x
-# else
-#  define P_(x) ()
-# endif
-#endif
-
 #if STDC_HEADERS
 # include <stdlib.h>
 # include <string.h>
@@ -194,7 +186,25 @@ char *strchr(), *strrchr(), *strtok();
 #ifdef STAT_MACROS_BROKEN
 # define S_ISDIR(x) ((x) & S_IFMT) == S_IFDIR)
 # define S_ISREG(x) ((x) & S_IFMT) == S_IFREG)
-# define S_ISLNK(x) ((x) & S_IFMT) == S_IFLNK)
+# ifdef S_IFLNK
+#  define S_ISLNK(x) ((x) & S_IFMT) == S_IFLNK)
+# endif
+#endif
+
+#ifndef S_ISLNK
+#define S_ISLNK(x) (0)
+#endif
+
+#if HAVE_LCHOWN
+#define LCHOWN lchown
+#else
+#define LCHOWN chown
+#endif
+
+#if HAVE_LSTAT
+#define LSTAT lstat
+#else
+#define LSTAT stat
 #endif
 
 #if HAVE_TERMIOS_H
index 9da2d31ef0e17cd6b1d5bff4be244b69ea9212d5..75f1829e293582a2330d1572e1e9866286948717 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: dialchk.h,v 1.1 1997/12/07 23:26:49 marekm Exp $ */
+/* $Id: dialchk.h,v 1.2 2000/08/26 18:27:17 marekm Exp $ */
 #ifndef _DIALCHK_H_
 #define _DIALCHK_H_
 
@@ -11,6 +11,6 @@
  *     line.  If so, a dialup password may be required if the shell
  *     is listed as one which requires a second password.
  */
-extern int dialcheck P_((const char *tty, const char *sh));
+extern int dialcheck(const char *, const char *);
 
 #endif
index e261b14ed93a550d035bc857a9b84f78b85afb62..2b3892bd188225897fb69770b6c63b2d726803fc 100644 (file)
@@ -41,7 +41,7 @@
  *     lines.  Each line consists of the last component of the path
  *     name.  The leading "/dev/" string is removed.
  *
- *     $Id: dialup.h,v 1.2 1997/05/01 23:14:39 marekm Exp $
+ *     $Id: dialup.h,v 1.3 2000/08/26 18:27:17 marekm Exp $
  */
 
 #ifndef        _DIALUP_H
@@ -52,13 +52,13 @@ struct      dialup {
        char    *du_passwd;
 };
 
-extern void setduent P_((void));
-extern void endduent P_((void));
-extern struct dialup *fgetduent P_((FILE *));
-extern struct dialup *getduent P_((void));
-extern struct dialup *getdushell P_((const char *));
-extern int putduent P_((const struct dialup *, FILE *));
-extern int isadialup P_((const char *));
+extern void setduent(void);
+extern void endduent(void);
+extern struct dialup *fgetduent(FILE *);
+extern struct dialup *getduent(void);
+extern struct dialup *getdushell(const char *);
+extern int putduent(const struct dialup *, FILE *);
+extern int isadialup(const char *);
 
 #define        DIALPWD "/etc/d_passwd"
 #define        DIALUPS "/etc/dialups"
index 42f04d66974e8e54cc6a70e62edc06fccdaf496d..51c16e7affc9f82dea99510229fa4abac31ee47d 100644 (file)
 #include <config.h>
 
 #include "rcsid.h"
-RCSID("$Id: encrypt.c,v 1.6 1999/03/07 19:14:35 marekm Exp $")
+RCSID("$Id: encrypt.c,v 1.7 2000/08/26 18:27:17 marekm Exp $")
 
 #include "prototypes.h"
 #include "defines.h"
 
 extern char    *crypt();
-extern char *libshadow_md5_crypt P_((const char *, const char *));
+extern char *libshadow_md5_crypt(const char *, const char *);
 
 char *
 pw_encrypt(const char *clear, const char *salt)
index f3cae104f8338b2f8ecf4fd47f52da2d99e83add..12ce99e8b09f3ef66252dbf67d9a02649e0adfbb 100644 (file)
@@ -30,7 +30,7 @@
 #include <config.h>
 
 #include "rcsid.h"
-RCSID("$Id: getdef.c,v 1.13 1999/08/27 19:02:51 marekm Exp $")
+RCSID("$Id: getdef.c,v 1.14 2000/08/26 18:27:17 marekm Exp $")
 
 #include "prototypes.h"
 #include "defines.h"
@@ -55,6 +55,9 @@ struct itemdef {
 static struct itemdef def_table[] = {
        { "CHFN_AUTH",                  NULL },
        { "CHFN_RESTRICT",              NULL },
+#ifdef USE_PAM
+       { "CLOSE_SESSIONS",             NULL },
+#endif
        { "CONSOLE",                    NULL },
        { "CONSOLE_GROUPS",             NULL },
        { "CRACKLIB_DICTPATH",          NULL },
@@ -63,7 +66,8 @@ static struct itemdef def_table[] = {
        { "DIALUPS_CHECK_ENAB",         NULL },
        { "ENVIRON_FILE",               NULL },
        { "ENV_HZ",                     NULL },
-       { "ENV_PATH" ,                  NULL },
+       { "ENV_PATH",                   NULL },
+       { "ENV_ROOTPATH",               NULL },  /* SuSE compatibility? */
        { "ENV_SUPATH",                 NULL },
        { "ENV_TZ",                     NULL },
        { "ERASECHAR",                  NULL },
@@ -130,8 +134,8 @@ static int def_loaded = 0;          /* are defs already loaded?     */
 extern long strtol();
 
 /* local function prototypes */
-static struct itemdef *def_find P_((const char *));
-static void def_load P_((void));
+static struct itemdef *def_find(const char *);
+static void def_load(void);
 
 
 /*
index 3b14d5ae740fefc6353be002695d127ddcba418e..304e10960d2bc9e03386da09e8810d287572682f 100644 (file)
@@ -2,10 +2,10 @@
 #define _GETDEF_H
 
 /* getdef.c */
-extern int getdef_bool P_((const char *));
-extern long getdef_long P_((const char *, long));
-extern int getdef_num P_((const char *, int));
-extern char *getdef_str P_((const char *));
-extern int putdef_str P_((const char *, const char *));
+extern int getdef_bool(const char *);
+extern long getdef_long(const char *, long);
+extern int getdef_num(const char *, int);
+extern char *getdef_str(const char *);
+extern int putdef_str(const char *, const char *);
 
 #endif /* _GETDEF_H */
index 5e67f9964e0445c83f8c45195dae6e4f6dd93588..04d470bdbd74173183e5518b91d73de4b0926f3b 100644 (file)
@@ -2,7 +2,7 @@
 #include <config.h>
 
 #include "rcsid.h"
-RCSID("$Id: groupio.c,v 1.7 1998/01/29 23:22:28 marekm Exp $")
+RCSID("$Id: groupio.c,v 1.8 2000/08/26 18:27:17 marekm Exp $")
 
 #include "prototypes.h"
 #include "defines.h"
@@ -10,8 +10,8 @@ RCSID("$Id: groupio.c,v 1.7 1998/01/29 23:22:28 marekm Exp $")
 #include "commonio.h"
 #include "groupio.h"
 
-extern int putgrent P_((const struct group *, FILE *));
-extern struct group *sgetgrent P_((const char *));
+extern int putgrent(const struct group *, FILE *);
+extern struct group *sgetgrent(const char *);
 
 struct group *
 __gr_dup(const struct group *grent)
index 37792fbb58acf066875015f8b3729db211e47f23..7c083cea0ecd2c146a1e2ce227fbc4da95163351 100644 (file)
@@ -1,12 +1,12 @@
-extern struct group *__gr_dup P_((const struct group *));
-extern void __gr_set_changed P_((void));
-extern int gr_close P_((void));
-extern const struct group *gr_locate P_((const char *));
-extern int gr_lock P_((void));
-extern int gr_name P_((const char *));
-extern const struct group *gr_next P_((void));
-extern int gr_open P_((int));
-extern int gr_remove P_((const char *));
-extern int gr_rewind P_((void));
-extern int gr_unlock P_((void));
-extern int gr_update P_((const struct group *));
+extern struct group *__gr_dup(const struct group *);
+extern void __gr_set_changed(void);
+extern int gr_close(void);
+extern const struct group *gr_locate(const char *);
+extern int gr_lock(void);
+extern int gr_name(const char *);
+extern const struct group *gr_next(void);
+extern int gr_open(int);
+extern int gr_remove(const char *);
+extern int gr_rewind(void);
+extern int gr_unlock(void);
+extern int gr_update(const struct group *);
index 4fff4f9b44186696c00f09d55ddb6b7a54c99a27..20436dcf8407f1425002fe75eed9a2c8807a46e0 100644 (file)
@@ -6,7 +6,7 @@
  * Juha Virtanen, <jiivee@hut.fi>; November 1995
  */
 /*
- * $Id: prototypes.h,v 1.13 1999/07/09 18:02:43 marekm Exp $
+ * $Id: prototypes.h,v 1.14 2000/08/26 18:27:17 marekm Exp $
  *
  * Added a macro to work around ancient (non-ANSI) compilers, just in case
  * someone ever tries to compile this with SunOS cc...  --marekm
 #include "defines.h"
 
 /* addgrps.c */
-extern int add_groups P_((const char *));
-extern void add_cons_grps P_((void));
+extern int add_groups(const char *);
+extern void add_cons_grps(void);
 
 /* age.c */
 #ifdef SHADOWPWD
-extern void agecheck P_((const struct passwd *pw, const struct spwd *sp));
-extern int expire P_((const struct passwd *pw, const struct spwd *sp));
-extern int isexpired P_((const struct passwd *pw, const struct spwd *sp));
+extern void agecheck(const struct passwd *, const struct spwd *);
+extern int expire(const struct passwd *, const struct spwd *);
+extern int isexpired(const struct passwd *, const struct spwd *);
 #else
-extern void agecheck P_((const struct passwd *pw));
-extern int expire P_((const struct passwd *pw));
-extern int isexpired P_((const struct passwd *pw));
+extern void agecheck(const struct passwd *);
+extern int expire(const struct passwd *);
+extern int isexpired(const struct passwd *);
 #endif
 
 /* basename() renamed to Basename() to avoid libc name space confusion */
 /* basename.c */
-extern char *Basename P_((char *str));
+extern char *Basename(char *str);
 
 /* chkshell.c */
-extern int check_shell P_((const char *));
+extern int check_shell(const char *);
 
 /* chowndir.c */
-extern int chown_tree P_((const char *, uid_t, uid_t, gid_t, gid_t));
+extern int chown_tree(const char *, uid_t, uid_t, gid_t, gid_t);
 
 /* chowntty.c */
-extern void chown_tty P_((const char *, const struct passwd *));
+extern void chown_tty(const char *, const struct passwd *);
 
 /* console.c */
-extern int console P_((const char *tty));
-extern int is_listed P_((const char *cfgin, const char *tty, int def));
+extern int console(const char *);
+extern int is_listed(const char *, const char *, int);
 
 /* copydir.c */
-extern int copy_tree P_((const char *, const char *, uid_t, gid_t));
-extern int remove_tree P_((const char *));
+extern int copy_tree(const char *, const char *, uid_t, gid_t);
+extern int remove_tree(const char *);
 
 /* encrypt.c */
-extern char *pw_encrypt P_((const char *, const char *));
+extern char *pw_encrypt(const char *, const char *);
 
 /* entry.c */
-extern void entry P_((const char *name, struct passwd *pwent));
+extern void pw_entry(const char *, struct passwd *);
 
 /* env.c */
-extern void addenv P_((const char *, const char *));
-extern void initenv P_((void));
-extern void set_env P_((int, char * const *));
-extern void sanitize_env P_((void));
+extern void addenv(const char *, const char *);
+extern void initenv(void);
+extern void set_env(int, char * const *);
+extern void sanitize_env(void);
 
 /* fields.c */
-extern void change_field P_((char *buf, size_t maxsize, const char *prompt));
-extern int valid_field P_((const char *field, const char *illegal));
+extern void change_field(char *, size_t, const char *);
+extern int valid_field(const char *, const char *);
 
 /* fputsx.c */
-extern char *fgetsx P_((char *, int, FILE *));
-extern int fputsx P_((const char *, FILE *));
+extern char *fgetsx(char *, int, FILE *);
+extern int fputsx(const char *, FILE *);
 
 /* grdbm.c */
-extern int gr_dbm_remove P_((const struct group *gr));
-extern int gr_dbm_update P_((const struct group *gr));
-extern int gr_dbm_present P_((void));
+extern int gr_dbm_remove(const struct group *);
+extern int gr_dbm_update(const struct group *);
+extern int gr_dbm_present(void);
 
 /* grent.c */
-extern int putgrent P_((const struct group *, FILE *));
+extern int putgrent(const struct group *, FILE *);
 
 /* grpack.c */
-extern int gr_pack P_((const struct group *group, char *buf));
-extern int gr_unpack P_((char *buf, int len, struct group *group));
+extern int gr_pack(const struct group *, char *);
+extern int gr_unpack(char *, int, struct group *);
 
 #ifdef SHADOWGRP
 /* gsdbm.c */
-extern int sg_dbm_remove P_((const char *name));
-extern int sg_dbm_update P_((const struct sgrp *sgr));
-extern int sg_dbm_present P_((void));
+extern int sg_dbm_remove(const char *);
+extern int sg_dbm_update(const struct sgrp *);
+extern int sg_dbm_present(void);
 
 /* gspack.c */
-extern int sgr_pack P_((const struct sgrp *sgrp, char *buf));
-extern int sgr_unpack P_((char *buf, int len, struct sgrp *sgrp));
+extern int sgr_pack(const struct sgrp *, char *);
+extern int sgr_unpack(char *, int, struct sgrp *);
 #endif
 
 /* hushed.c */
-extern int hushed P_((const struct passwd *pw));
+extern int hushed(const struct passwd *);
 
 /* limits.c */
-extern void setup_limits P_((const struct passwd *));
+extern void setup_limits(const struct passwd *);
 
 /* list.c */
-extern char **add_list P_((char **list, const char *member));
-extern char **del_list P_((char **list, const char *member));
-extern char **dup_list P_((char * const *list));
-extern int is_on_list P_((char * const *list, const char *member));
-extern char **comma_to_list P_((const char *comma));
+extern char **add_list(char **, const char *);
+extern char **del_list(char **, const char *);
+extern char **dup_list(char * const *);
+extern int is_on_list(char * const *, const char *);
+extern char **comma_to_list(const char *);
 
 /* login.c */
-extern void login_prompt P_((const char *, char *, int));
+extern void login_prompt(const char *, char *, int);
 
 /* login_desrpc.c */
-extern int login_desrpc P_((const char *));
+extern int login_desrpc(const char *);
 
 /* mail.c */
-extern void mailcheck P_((void));
+extern void mailcheck(void);
 
 /* motd.c */
-extern void motd P_((void));
+extern void motd(void);
 
 /* myname.c */
-extern struct passwd *get_my_pwent P_((void));
+extern struct passwd *get_my_pwent(void);
 
 /* obscure.c */
-extern int obscure P_((const char *, const char *, const struct passwd *));
+extern int obscure(const char *, const char *, const struct passwd *);
 
 /* pam_pass.c */
-extern int do_pam_passwd P_((const char *, int, int));
+extern int do_pam_passwd(const char *, int, int);
 
 /* port.c */
-extern int isttytime P_((const char *, const char *, time_t));
+extern int isttytime(const char *, const char *, time_t);
 
 /* pwd2spwd.c */
 #ifdef SHADOWPWD
-extern struct spwd *pwd_to_spwd P_((const struct passwd *pw));
+extern struct spwd *pwd_to_spwd(const struct passwd *);
 #endif
 
 /* pwdcheck.c */
-extern void passwd_check P_((const char *, const char *, const char *));
+extern void passwd_check(const char *, const char *, const char *);
 
 /* pwd_init.c */
-extern void pwd_init P_((void));
+extern void pwd_init(void);
 
 /* pwdbm.c */
-extern int pw_dbm_remove P_((const struct passwd *pw));
-extern int pw_dbm_update P_((const struct passwd *pw));
-extern int pw_dbm_present P_((void));
+extern int pw_dbm_remove(const struct passwd *);
+extern int pw_dbm_update(const struct passwd *);
+extern int pw_dbm_present(void);
 
 /* pwpack.c */
-extern int pw_pack P_((const struct passwd *passwd, char *buf));
-extern int pw_unpack P_((char *buf, int len, struct passwd *passwd));
+extern int pw_pack(const struct passwd *, char *);
+extern int pw_unpack(char *, int, struct passwd *);
 
 /* rad64.c */
-extern int c64i P_((char c));
-extern int i64c P_((int i));
+extern int c64i(int);
+extern int i64c(int);
 
 /* rlogin.c */
-extern int do_rlogin P_((const char *, char *, int, char *, int));
+extern int do_rlogin(const char *, char *, int, char *, int);
+
+/* salt.c */
+extern char *crypt_make_salt(void);
 
 /* setugid.c */
-extern int setup_groups P_((const struct passwd *));
-extern int change_uid P_((const struct passwd *));
-extern int setup_uid_gid P_((const struct passwd *, int));
+extern int setup_groups(const struct passwd *);
+extern int change_uid(const struct passwd *);
+extern int setup_uid_gid(const struct passwd *, int);
 
 /* setup.c */
-extern void setup P_((struct passwd *info));
+extern void setup(struct passwd *);
 
 /* setupenv.c */
-extern void setup_env P_((struct passwd *));
+extern void setup_env(struct passwd *);
 
 /* shell.c */
-extern void shell P_((const char *file, const char *arg));
+extern void shell(const char *, const char *);
 
 #ifdef SHADOWPWD
 /* spdbm.c */
-extern int sp_dbm_remove P_((const char *user));
-extern int sp_dbm_update P_((const struct spwd *sp));
-extern int sp_dbm_present P_((void));
+extern int sp_dbm_remove(const char *);
+extern int sp_dbm_update(const struct spwd *);
+extern int sp_dbm_present(void);
 
 /* sppack.c */
-extern int spw_pack P_((const struct spwd *spwd, char *buf));
-extern int spw_unpack P_((char *buf, int len, struct spwd *spwd));
+extern int spw_pack(const struct spwd *, char *);
+extern int spw_unpack(char *, int, struct spwd *);
 #endif
 
 /* strtoday.c */
-extern long strtoday P_((const char *str));
+extern long strtoday(const char *);
+
+/* suauth.c */
+extern int check_su_auth(const char *, const char *);
+
+/* sulog.c */
+extern void sulog(const char *, int, const char *, const char *);
+
+/* sub.c */
+extern void subsystem(const struct passwd *);
 
 /* ttytype.c */
-extern void ttytype P_((const char *line));
+extern void ttytype(const char *);
+
+/* tz.c */
+extern char *tz(const char *);
 
 /* ulimit.c */
-extern void set_filesize_limit P_((int));
+extern void set_filesize_limit(int);
 
 /* utmp.c */
-extern void checkutmp P_((int));
-extern void setutmp P_((const char *, const char *, const char *));
+extern void checkutmp(int);
+extern void setutmp(const char *, const char *, const char *);
 
 /* valid.c */
-extern int valid P_((const char *, const struct passwd *));
+extern int valid(const char *, const struct passwd *);
 
 /* xmalloc.c */
-extern char *xmalloc P_((size_t size));
-extern char *xstrdup P_((const char *str));
+extern char *xmalloc(size_t);
+extern char *xstrdup(const char *);
 
 #endif /* _PROTOTYPES_H */
index 67867ff661005365bd39bdd88714bd85269dc3d8..bce32f227f4138c00218ae7c78f4ad197f08df57 100644 (file)
@@ -30,7 +30,7 @@
 #include <config.h>
 
 #include "rcsid.h"
-RCSID("$Id: pwauth.c,v 1.10 1999/08/27 19:02:51 marekm Exp $")
+RCSID("$Id: pwauth.c,v 1.11 2000/08/26 18:27:17 marekm Exp $")
 
 #include <sys/types.h>
 #include <signal.h>
@@ -68,7 +68,7 @@ extern char *getpass_with_echo();
 
 struct method  {
        char    *name;
-       int     (*func) P_((const char *, int, const char *));
+       int     (*func)(const char *, int, const char *);
 };
 
 #ifdef PAD_AUTH
index 7dc7e9ad7d6d3f6d85500d9e50affbc92a48267d..4fa25da9ebb1837815e0f09cbfa4b66c8a4aba91 100644 (file)
@@ -2,7 +2,7 @@
 #include <config.h>
 
 #include "rcsid.h"
-RCSID("$Id: pwio.c,v 1.9 1998/01/29 23:22:31 marekm Exp $")
+RCSID("$Id: pwio.c,v 1.10 2000/08/26 18:27:17 marekm Exp $")
 
 #include "prototypes.h"
 #include "defines.h"
@@ -12,8 +12,8 @@ RCSID("$Id: pwio.c,v 1.9 1998/01/29 23:22:31 marekm Exp $")
 #include "commonio.h"
 #include "pwio.h"
 
-extern struct passwd *sgetpwent P_((const char *));
-extern int putpwent P_((const struct passwd *, FILE *));
+extern struct passwd *sgetpwent(const char *);
+extern int putpwent(const struct passwd *, FILE *);
 
 struct passwd *
 __pw_dup(const struct passwd *pwent)
index 88bace7776bd89c1e53e0e26d4f3b8117b57f57e..199f67da7d9b4418781f084f9a5cae7aabf3c2c8 100644 (file)
@@ -1,12 +1,12 @@
-extern struct passwd *__pw_dup P_((const struct passwd *));
-extern void __pw_set_changed P_((void));
-extern int pw_close P_((void));
-extern const struct passwd *pw_locate P_((const char *));
-extern int pw_lock P_((void));
-extern int pw_name P_((const char *));
-extern const struct passwd *pw_next P_((void));
-extern int pw_open P_((int));
-extern int pw_remove P_((const char *));
-extern int pw_rewind P_((void));
-extern int pw_unlock P_((void));
-extern int pw_update P_((const struct passwd *));
+extern struct passwd *__pw_dup(const struct passwd *);
+extern void __pw_set_changed(void);
+extern int pw_close(void);
+extern const struct passwd *pw_locate(const char *);
+extern int pw_lock(void);
+extern int pw_name(const char *);
+extern const struct passwd *pw_next(void);
+extern int pw_open(int);
+extern int pw_remove(const char *);
+extern int pw_rewind(void);
+extern int pw_unlock(void);
+extern int pw_update(const struct passwd *);
index 5b22e96e7345d774338072b69602a86974d3c3e7..249a71e12e215826d989aa4e263718851e953fa8 100644 (file)
 #include <config.h>
 
 #include "rcsid.h"
-RCSID("$Id: rad64.c,v 1.4 1997/12/07 23:26:56 marekm Exp $")
+RCSID("$Id: rad64.c,v 1.5 2000/08/26 18:27:17 marekm Exp $")
 
 /*
  * c64i - convert a radix 64 character to an integer
  */
 
 int
-c64i(char c)
+c64i(int c)
 {
        if (c == '.')
                return (0);
@@ -117,7 +117,7 @@ a64l(const char *s)
        long    shift = 0;
 
        for (i = 0, value = 0L;i < 6 && *s;s++) {
-               value += (c64i (*s) << shift);
+               value += (c64i ((int) *s) << shift);
                shift += 6;
        }
        return (value);
index a10e422e5de03cd0b38031c4f1804724c9cfca85..4f0c56b48dde58201d764646a9acd74a5ca8f839 100644 (file)
@@ -4,7 +4,7 @@
 #ifdef SHADOWGRP
 
 #include "rcsid.h"
-RCSID("$Id: sgroupio.c,v 1.9 1998/01/29 23:22:31 marekm Exp $")
+RCSID("$Id: sgroupio.c,v 1.10 2000/08/26 18:27:17 marekm Exp $")
 
 #include "prototypes.h"
 #include "defines.h"
@@ -12,8 +12,8 @@ RCSID("$Id: sgroupio.c,v 1.9 1998/01/29 23:22:31 marekm Exp $")
 #include "commonio.h"
 #include "sgroupio.h"
 
-extern int putsgent P_((const struct sgrp *, FILE *));
-extern struct sgrp *sgetsgent P_((const char *));
+extern int putsgent(const struct sgrp *, FILE *);
+extern struct sgrp *sgetsgent(const char *);
 
 struct sgrp *
 __sgr_dup(const struct sgrp *sgent)
index 7f41a8fa107700ba1c82518e30940f17ff17febd..e9c93bf6304b12640e93b6e977db3bef61994d48 100644 (file)
@@ -1,13 +1,13 @@
-extern struct sgrp *__sgr_dup P_((const struct sgrp *));
-extern void __sgr_set_changed P_((void));
-extern int sgr_close P_((void));
-extern int sgr_file_present P_((void));
-extern const struct sgrp *sgr_locate P_((const char *));
-extern int sgr_lock P_((void));
-extern int sgr_name P_((const char *));
-extern const struct sgrp *sgr_next P_((void));
-extern int sgr_open P_((int));
-extern int sgr_remove P_((const char *));
-extern int sgr_rewind P_((void));
-extern int sgr_unlock P_((void));
-extern int sgr_update P_((const struct sgrp *));
+extern struct sgrp *__sgr_dup(const struct sgrp *);
+extern void __sgr_set_changed(void);
+extern int sgr_close(void);
+extern int sgr_file_present(void);
+extern const struct sgrp *sgr_locate(const char *);
+extern int sgr_lock(void);
+extern int sgr_name(const char *);
+extern const struct sgrp *sgr_next(void);
+extern int sgr_open(int);
+extern int sgr_remove(const char *);
+extern int sgr_rewind(void);
+extern int sgr_unlock(void);
+extern int sgr_update(const struct sgrp *);
index 5c8934f6d2c7ff4abbb1379f6ac6f289c8a89a05..b3118d5c2c39b0d04c60c6d158820559bc17af14 100644 (file)
@@ -1,13 +1,13 @@
-extern struct spwd *__spw_dup P_((const struct spwd *));
-extern void __spw_set_changed P_((void));
-extern int spw_close P_((void));
-extern int spw_file_present P_((void));
-extern const struct spwd *spw_locate P_((const char *));
-extern int spw_lock P_((void));
-extern int spw_name P_((const char *));
-extern const struct spwd *spw_next P_((void));
-extern int spw_open P_((int));
-extern int spw_remove P_((const char *));
-extern int spw_rewind P_((void));
-extern int spw_unlock P_((void));
-extern int spw_update P_((const struct spwd *));
+extern struct spwd *__spw_dup(const struct spwd *);
+extern void __spw_set_changed(void);
+extern int spw_close(void);
+extern int spw_file_present(void);
+extern const struct spwd *spw_locate(const char *);
+extern int spw_lock(void);
+extern int spw_name(const char *);
+extern const struct spwd *spw_next(void);
+extern int spw_open(int);
+extern int spw_remove(const char *);
+extern int spw_rewind(void);
+extern int spw_unlock(void);
+extern int spw_update(const struct spwd *);
index 3a8ff6c5e10d5a97a6719c569d7d6403ea613c74..3f53fca51676d10307d8435e8e5208f6d9789a93 100644 (file)
@@ -3,12 +3,12 @@ struct tcfspwd {
        char tcfsorig[200]; /* old password */
 };
 
-extern int tcfs_close P_((void));
-extern int tcfs_file_present P_((void));
-extern tcfspwdb *tcfs_locate P_((char *));
-extern int tcfs_lock P_((void));
-extern int tcfs_name P_((char *));
-extern int tcfs_open P_((int));
-extern int tcfs_remove P_((char *));
-extern int tcfs_unlock P_((void));
-extern int tcfs_update P_((char *, struct tcfspwd *));
+extern int tcfs_close(void);
+extern int tcfs_file_present(void);
+extern tcfspwdb *tcfs_locate(char *);
+extern int tcfs_lock(void);
+extern int tcfs_name(char *);
+extern int tcfs_open(int);
+extern int tcfs_remove(char *);
+extern int tcfs_unlock(void);
+extern int tcfs_update(char *, struct tcfspwd *);
index 9b85780a92ff148754bf138eea14eec01692a68b..760788b55bfd32bf7ed8cbc3020976c9830f6d9c 100644 (file)
@@ -78,6 +78,7 @@ INTLOBJS = @INTLOBJS@
 LD = @LD@
 LIBCRACK = @LIBCRACK@
 LIBCRYPT = @LIBCRYPT@
+LIBMD = @LIBMD@
 LIBPAM = @LIBPAM@
 LIBSKEY = @LIBSKEY@
 LIBTCFS = @LIBTCFS@
@@ -339,8 +340,8 @@ suauth.o: suauth.c ../config.h ../lib/prototypes.h ../lib/defines.h \
        ../lib/gshadow_.h
 sub.o: sub.c ../config.h ../lib/rcsid.h ../lib/prototypes.h \
        ../lib/defines.h ../lib/gshadow_.h
-sulog.o: sulog.c ../config.h ../lib/rcsid.h ../lib/defines.h \
-       ../lib/gshadow_.h ../lib/getdef.h
+sulog.o: sulog.c ../config.h ../lib/rcsid.h ../lib/prototypes.h \
+       ../lib/defines.h ../lib/gshadow_.h ../lib/getdef.h
 ttytype.o: ttytype.c ../config.h ../lib/rcsid.h ../lib/prototypes.h \
        ../lib/defines.h ../lib/gshadow_.h ../lib/getdef.h
 tz.o: tz.c ../config.h ../lib/rcsid.h ../lib/defines.h ../lib/gshadow_.h \
index c706f15dd1cd668af3cf226d9f03d875b8301431..b9e3ae029f4abe353b2836e8c03e831e1af49988 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: chkname.h,v 1.1 1997/12/07 23:27:00 marekm Exp $ */
+/* $Id: chkname.h,v 1.2 2000/08/26 18:27:17 marekm Exp $ */
 #ifndef _CHKNAME_H_
 #define _CHKNAME_H_
 
@@ -9,7 +9,7 @@
 
 #include "defines.h"
 
-extern int check_user_name P_((const char *));
-extern int check_group_name P_((const char *name));
+extern int check_user_name(const char *);
+extern int check_group_name(const char *name);
 
 #endif
index b8fe4c0d1081adff5b058e70a7b122f140a79272..b89c5973d6f9449acdfdda6b0c5cd280540b4245 100644 (file)
@@ -30,7 +30,7 @@
 #include <config.h>
 
 #include "rcsid.h"
-RCSID("$Id: chowndir.c,v 1.5 1998/04/16 19:57:43 marekm Exp $")
+RCSID("$Id: chowndir.c,v 1.6 2000/08/26 18:27:17 marekm Exp $")
 
 #include <sys/types.h>
 #include <sys/stat.h>
@@ -94,10 +94,11 @@ chown_tree(const char *root, uid_t old_uid, uid_t new_uid, gid_t old_gid, gid_t
 
                snprintf(new_name, sizeof new_name, "%s/%s", root, ent->d_name);
 
-               if (stat (new_name, &sb) == -1)
+               /* Don't follow symbolic links! */
+               if (LSTAT(new_name, &sb) == -1)
                        continue;
 
-               if (S_ISDIR(sb.st_mode)) {
+               if (S_ISDIR(sb.st_mode) && !S_ISLNK(sb.st_mode)) {
 
                        /*
                         * Do the entire subdirectory.
@@ -107,8 +108,13 @@ chown_tree(const char *root, uid_t old_uid, uid_t new_uid, gid_t old_gid, gid_t
                                              old_gid, new_gid)))
                                break;
                }
+#ifndef HAVE_LCHOWN
+               /* don't use chown (follows symbolic links!) */
+               if (S_ISLNK(sb.st_mode))
+                       continue;
+#endif
                if (sb.st_uid == old_uid)
-                       chown (new_name, new_uid,
+                       LCHOWN(new_name, new_uid,
                                sb.st_gid == old_gid ? new_gid:sb.st_gid);
        }
        closedir (dir);
@@ -119,7 +125,7 @@ chown_tree(const char *root, uid_t old_uid, uid_t new_uid, gid_t old_gid, gid_t
 
        if (! stat (root, &sb)) {
                if (sb.st_uid == old_uid)
-                       chown (root, new_uid,
+                       LCHOWN(root, new_uid,
                                sb.st_gid == old_gid ? new_gid:sb.st_gid);
        }
        return rc;
index cb1a470a71b6e9227855c4f3c0c9ea5591f3f0d3..0f7fed2d544ce743c1d0610ed46cdf25b068a5f7 100644 (file)
@@ -30,7 +30,7 @@
 #include <config.h>
 
 #include "rcsid.h"
-RCSID("$Id: copydir.c,v 1.6 1998/06/25 22:10:42 marekm Exp $")
+RCSID("$Id: copydir.c,v 1.7 2000/08/26 18:27:17 marekm Exp $")
 
 
 #include <sys/stat.h>
@@ -192,11 +192,7 @@ copy_tree(const char *src_root, const char *dst_root, uid_t uid, gid_t gid)
                }
                snprintf(dst_name, sizeof dst_name, "%s/%s", dst_root, ent->d_name);
 
-#ifdef S_IFLNK
-               if (lstat (src_name, &sb) == -1)
-#else
-               if (stat (src_name, &sb) == -1)
-#endif
+               if (LSTAT(src_name, &sb) == -1)
                        continue;
 
                if (S_ISDIR(sb.st_mode)) {
@@ -380,11 +376,7 @@ remove_tree(const char *root)
                        break;
                }
                snprintf(new_name, sizeof new_name, "%s/%s", root, ent->d_name);
-#ifdef S_IFLNK
-               if (lstat (new_name, &sb) == -1)
-#else
-               if (stat (new_name, &sb) == -1)
-#endif
+               if (LSTAT(new_name, &sb) == -1)
                        continue;
 
                if (S_ISDIR(sb.st_mode)) {
index 5baa8ed651f34433fcc396e3da8853b0144c0257..746dfb0a57a32b4568f87e268a93933d3714fac9 100644 (file)
@@ -30,7 +30,7 @@
 #include <config.h>
 
 #include "rcsid.h"
-RCSID("$Id: entry.c,v 1.3 1997/12/07 23:27:03 marekm Exp $")
+RCSID("$Id: entry.c,v 1.4 2000/08/26 18:27:17 marekm Exp $")
 
 #include <sys/types.h>
 #include <stdio.h>
@@ -38,10 +38,10 @@ RCSID("$Id: entry.c,v 1.3 1997/12/07 23:27:03 marekm Exp $")
 #include "defines.h"
 #include <pwd.h>
 
-struct passwd  *fgetpwent ();
+extern struct  passwd  *fgetpwent ();
 
 void
-entry(const char *name, struct passwd *pwent)
+pw_entry(const char *name, struct passwd *pwent)
 {
        struct  passwd  *passwd;
 #ifdef SHADOWPWD
index 7fbac2bf3983af33b59b8e3a0cd5790b0ccc2f50..1795b50dc6404b1fdc2a27965b5bce3e67409bb5 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: failure.h,v 1.1 1997/12/07 23:27:04 marekm Exp $ */
+/* $Id: failure.h,v 1.2 2000/08/26 18:27:17 marekm Exp $ */
 #ifndef _FAILURE_H_
 #define _FAILURE_H_
 
@@ -12,7 +12,7 @@
  *     failure() creates a new (struct faillog) entry or updates an
  *     existing one with the current failed login information.
  */
-extern void failure P_((uid_t, const char *, struct faillog *));
+extern void failure(uid_t, const char *, struct faillog *);
 
 /*
  * failcheck - check for failures > allowable
@@ -22,7 +22,7 @@ extern void failure P_((uid_t, const char *, struct faillog *));
  *     returns FALSE to indicate that the login should be denied even though
  *     the password is valid.
  */
-extern int failcheck P_((uid_t, struct faillog *, int));
+extern int failcheck(uid_t, struct faillog *, int);
 
 /*
  * failprint - print line of failure information
@@ -30,7 +30,7 @@ extern int failcheck P_((uid_t, struct faillog *, int));
  *     failprint takes a (struct faillog) entry and formats it into a
  *     message which is displayed at login time.
  */
-extern void failprint P_((const struct faillog *));
+extern void failprint(const struct faillog *);
 
 /*
  * failtmp - update the cummulative failure log
@@ -38,7 +38,7 @@ extern void failprint P_((const struct faillog *));
  *     failtmp updates the (struct utmp) formatted failure log which
  *     maintains a record of all login failures.
  */
-extern void failtmp P_((const struct utmp *));
+extern void failtmp(const struct utmp *);
 
 #endif
 
index c866afcee46ead529f0f778460f507f618c43a4d..691a508fd0a71f8ec1fcacbf39fcdc456387f498 100644 (file)
@@ -4,5 +4,5 @@
 #include <config.h>
 #include "defines.h"
 
-time_t get_date P_((const char *p, const time_t *now));
+time_t get_date(const char *, const time_t *);
 #endif
index c9990d16161a0eccc302d49217b43d581a7521ee..fbc7a19db07df0a49e4baaa85064fd797b03280e 100644 (file)
@@ -30,7 +30,7 @@
 #include <config.h>
 
 #include "rcsid.h"
-RCSID("$Id: hushed.c,v 1.3 1997/12/07 23:27:05 marekm Exp $")
+RCSID("$Id: hushed.c,v 1.4 2000/08/26 18:27:17 marekm Exp $")
 
 #include <sys/types.h>
 #include <stdio.h>
@@ -68,7 +68,7 @@ hushed(const struct passwd *pw)
         */
 
        if (hushfile[0] != '/') {
-               strcat(strcat(strcpy(buf, pw->pw_dir), "/"), hushfile);
+               snprintf(buf, sizeof(buf), "%s/%s", pw->pw_dir, hushfile);
                return (access(buf, F_OK) == 0);
        }
 
index eb0958f1c170c8cd4cb9658e27fdf3138daef764..abe81d3a69a8c82df181b6396fd572401172147b 100644 (file)
@@ -30,7 +30,7 @@
 #include <config.h>
 
 #include "rcsid.h"
-RCSID("$Id: loginprompt.c,v 1.5 1998/04/16 19:57:44 marekm Exp $")
+RCSID("$Id: loginprompt.c,v 1.6 2000/08/26 18:27:17 marekm Exp $")
 
 #include <stdio.h>
 #include <signal.h>
@@ -62,9 +62,9 @@ login_prompt(const char *prompt, char *name, int namesize)
        char    *cp;
        int     i;
        FILE    *fp;
-       RETSIGTYPE      (*sigquit) P_((int));
+       RETSIGTYPE      (*sigquit)(int);
 #ifdef SIGTSTP
-       RETSIGTYPE      (*sigtstp) P_((int));
+       RETSIGTYPE      (*sigtstp)(int);
 #endif
 
        /*
index 90e5b179491fb55ddf73666f5e95153be69b094e..1e428ba7f320145095c20711a5446bb28564e65d 100644 (file)
@@ -34,7 +34,7 @@
 #include <config.h>
 
 #include "rcsid.h"
-RCSID("$Id: setupenv.c,v 1.9 1999/03/07 19:14:41 marekm Exp $")
+RCSID("$Id: setupenv.c,v 1.10 2000/08/26 18:27:17 marekm Exp $")
 
 #include <sys/types.h>
 #include <sys/stat.h>
@@ -235,8 +235,21 @@ setup_env(struct passwd *info)
         * Create the PATH environmental variable and export it.
         */
 
-       cp = getdef_str( info->pw_uid == 0 ? "ENV_SUPATH" : "ENV_PATH" );
+       cp = getdef_str((info->pw_uid == 0) ? "ENV_SUPATH" : "ENV_PATH");
+#if 0
        addenv(cp ? cp : "PATH=/bin:/usr/bin", NULL);
+#else
+       if (!cp) {
+               /* not specified, use a minimal default */
+               addenv("PATH=/bin:/usr/bin", NULL);
+       } else if (strchr(cp, '=')) {
+               /* specified as name=value (PATH=...) */
+               addenv(cp, NULL);
+       } else {
+               /* only value specified without "PATH=" */
+               addenv("PATH", cp);
+       }
+#endif
 
        /*
         * Export the user name.  For BSD derived systems, it's "USER", for
@@ -269,9 +282,11 @@ setup_env(struct passwd *info)
 #endif
        }
 
+#ifndef USE_PAM
        /*
         * Read environment from optional config file.  --marekm
         */
        if ((envf = getdef_str("ENVIRON_FILE")))
                read_env_file(envf);
+#endif
 }
index 313a6ec6ced7208c806d645924806ba4a5b23d45..77cf929230b3ada862980743def3c839838241be 100644 (file)
  * strings output to the user or the syslog. -- chris
  */
 
-static int applies P_((const char *, char *));
+static int applies(const char *, char *);
 
-int check_su_auth P_((const char *, const char *));
-int isgrp P_((const char *, const char *));
+int check_su_auth(const char *, const char *);
+int isgrp(const char *, const char *);
 
 static int lines = 0;
 
index f20152e774ca5f86d606c85a54f4710967d99a15..3de68692ea4f92784f99d11faf1d82fc60b1db72 100644 (file)
 #include <config.h>
 
 #include "rcsid.h"
-RCSID("$Id: sulog.c,v 1.4 1998/04/02 21:51:51 marekm Exp $")
+RCSID("$Id: sulog.c,v 1.5 2000/08/26 18:27:17 marekm Exp $")
 
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <stdio.h>
 #include <time.h>
+#include "prototypes.h"
 #include "defines.h"
 #include "getdef.h"
 
-extern char    name[];
-extern char    oldname[];
-extern struct tm *localtime ();
-
 /*
  * sulog - log a SU command execution result
  */
 
 void
-sulog(const char *tty, int success)
+sulog(const char *tty, int success, const char *oldname, const char *name)
 {
        char *sulog_file;
        time_t now;
index 22aacad9eecf93d33b0cdd42ba1a0e698ce5cb3d..16a40e7e42f012fcdad5436a8e144675e89c7703 100644 (file)
@@ -1,10 +1,12 @@
 
 AUTOMAKE_OPTIONS = 1.0 foreign
 
+SUBDIRS = pl
+
 man_MANS = chage.1 chfn.1 chsh.1 gpasswd.1 \
  login.1 newgrp.1 passwd.1 su.1 \
  shadow.3 \
- faillog.5 limits.5 login.access.5 login.defs.5 \
dialups.5 faillog.5 limits.5 login.access.5 login.defs.5 \
  passwd.5 porttime.5 shadow.5 suauth.5 \
  chpasswd.8 dpasswd.8 faillog.8 \
  groupadd.8 groupdel.8 groupmod.8 \
@@ -12,21 +14,8 @@ man_MANS = chage.1 chfn.1 chsh.1 gpasswd.1 \
  pwck.8 pwconv.8 shadowconfig.8 \
  useradd.8 userdel.8 usermod.8 vipw.8
 
-# XXX - for some reason "make dist" no longer distributes man_MANS
-# automatically after upgrade to automake-1.2 (it worked with 1.0).
-# So they are now all listed in EXTRA_DIST.  --marekm
-#
-#EXTRA_DIST = groups.1 id.1 pw_auth.3 pwauth.8 sulogin.8
+EXTRA_DIST = groups.1 id.1 pw_auth.3 pwauth.8 sulogin.8 ${man_MANS}
 
-EXTRA_DIST = groups.1 id.1 pw_auth.3 pwauth.8 sulogin.8 \
- chage.1 chfn.1 chsh.1 gpasswd.1 \
- login.1 newgrp.1 passwd.1 su.1 \
- shadow.3 \
- faillog.5 limits.5 login.access.5 login.defs.5 \
- passwd.5 porttime.5 shadow.5 suauth.5 \
- chpasswd.8 dpasswd.8 faillog.8 \
- groupadd.8 groupdel.8 groupmod.8 \
- grpck.8 lastlog.8 logoutd.8 mkpasswd.8 newusers.8 \
- pwck.8 pwconv.8 shadowconfig.8 \
- useradd.8 userdel.8 usermod.8 vipw.8
+# subdirectories for translated manual pages
+SUBDIRS = pl
 
index fe5efa2710302cfee6982d3f44d2dd40acde772e..076af868095da7f0356b4762881394e906f246e4 100644 (file)
@@ -79,6 +79,7 @@ INTLOBJS = @INTLOBJS@
 LD = @LD@
 LIBCRACK = @LIBCRACK@
 LIBCRYPT = @LIBCRYPT@
+LIBMD = @LIBMD@
 LIBPAM = @LIBPAM@
 LIBSKEY = @LIBSKEY@
 LIBTCFS = @LIBTCFS@
@@ -103,17 +104,13 @@ l = @l@
 
 AUTOMAKE_OPTIONS = 1.0 foreign
 
-man_MANS = chage.1 chfn.1 chsh.1 gpasswd.1  login.1 newgrp.1 passwd.1 su.1  shadow.3  faillog.5 limits.5 login.access.5 login.defs.5  passwd.5 porttime.5 shadow.5 suauth.5  chpasswd.8 dpasswd.8 faillog.8  groupadd.8 groupdel.8 groupmod.8  grpck.8 lastlog.8 logoutd.8 mkpasswd.8 newusers.8  pwck.8 pwconv.8 shadowconfig.8  useradd.8 userdel.8 usermod.8 vipw.8
+# subdirectories for translated manual pages
+SUBDIRS = pl
 
+man_MANS = chage.1 chfn.1 chsh.1 gpasswd.1  login.1 newgrp.1 passwd.1 su.1  shadow.3  dialups.5 faillog.5 limits.5 login.access.5 login.defs.5  passwd.5 porttime.5 shadow.5 suauth.5  chpasswd.8 dpasswd.8 faillog.8  groupadd.8 groupdel.8 groupmod.8  grpck.8 lastlog.8 logoutd.8 mkpasswd.8 newusers.8  pwck.8 pwconv.8 shadowconfig.8  useradd.8 userdel.8 usermod.8 vipw.8
 
-# XXX - for some reason "make dist" no longer distributes man_MANS
-# automatically after upgrade to automake-1.2 (it worked with 1.0).
-# So they are now all listed in EXTRA_DIST.  --marekm
-#
-#EXTRA_DIST = groups.1 id.1 pw_auth.3 pwauth.8 sulogin.8
-
-EXTRA_DIST = groups.1 id.1 pw_auth.3 pwauth.8 sulogin.8  chage.1 chfn.1 chsh.1 gpasswd.1  login.1 newgrp.1 passwd.1 su.1  shadow.3  faillog.5 limits.5 login.access.5 login.defs.5  passwd.5 porttime.5 shadow.5 suauth.5  chpasswd.8 dpasswd.8 faillog.8  groupadd.8 groupdel.8 groupmod.8  grpck.8 lastlog.8 logoutd.8 mkpasswd.8 newusers.8  pwck.8 pwconv.8 shadowconfig.8  useradd.8 userdel.8 usermod.8 vipw.8
 
+EXTRA_DIST = groups.1 id.1 pw_auth.3 pwauth.8 sulogin.8 ${man_MANS}
 mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
 CONFIG_HEADER = ../config.h
 CONFIG_CLEAN_FILES = 
@@ -280,9 +277,95 @@ uninstall-man:
        @$(NORMAL_UNINSTALL)
        $(MAKE) $(AM_MAKEFLAGS) uninstall-man1 uninstall-man3 uninstall-man5 \
         uninstall-man8
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+#     (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+
+@SET_MAKE@
+
+all-recursive install-data-recursive install-exec-recursive \
+installdirs-recursive install-recursive uninstall-recursive  \
+check-recursive installcheck-recursive info-recursive dvi-recursive:
+       @set fnord $(MAKEFLAGS); amf=$$2; \
+       dot_seen=no; \
+       target=`echo $@ | sed s/-recursive//`; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           dot_seen=yes; \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+          || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+       done; \
+       if test "$$dot_seen" = "no"; then \
+         $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+       fi; test -z "$$fail"
+
+mostlyclean-recursive clean-recursive distclean-recursive \
+maintainer-clean-recursive:
+       @set fnord $(MAKEFLAGS); amf=$$2; \
+       dot_seen=no; \
+       rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \
+         rev="$$subdir $$rev"; \
+         test "$$subdir" = "." && dot_seen=yes; \
+       done; \
+       test "$$dot_seen" = "no" && rev=". $$rev"; \
+       target=`echo $@ | sed s/-recursive//`; \
+       for subdir in $$rev; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+          || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+       done && test -z "$$fail"
+tags-recursive:
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+       done
+
 tags: TAGS
-TAGS:
 
+ID: $(HEADERS) $(SOURCES) $(LISP)
+       list='$(SOURCES) $(HEADERS)'; \
+       unique=`for i in $$list; do echo $$i; done | \
+         awk '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       here=`pwd` && cd $(srcdir) \
+         && mkid -f$$here/ID $$unique $(LISP)
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+   if test "$$subdir" = .; then :; else \
+           test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \
+   fi; \
+       done; \
+       list='$(SOURCES) $(HEADERS)'; \
+       unique=`for i in $$list; do echo $$i; done | \
+         awk '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \
+         || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags  $$unique $(LISP) -o $$here/TAGS)
+
+mostlyclean-tags:
+
+clean-tags:
+
+distclean-tags:
+       -rm -f TAGS ID
+
+maintainer-clean-tags:
 
 distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
 
@@ -299,30 +382,41 @@ distdir: $(DISTFILES)
            || cp -p $$d/$$file $(distdir)/$$file || :; \
          fi; \
        done
+       for subdir in $(SUBDIRS); do \
+         if test "$$subdir" = .; then :; else \
+           test -d $(distdir)/$$subdir \
+           || mkdir $(distdir)/$$subdir \
+           || exit 1; \
+           chmod 777 $(distdir)/$$subdir; \
+           (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(top_distdir) distdir=../$(distdir)/$$subdir distdir) \
+             || exit 1; \
+         fi; \
+       done
 info-am:
-info: info-am
+info: info-recursive
 dvi-am:
-dvi: dvi-am
+dvi: dvi-recursive
 check-am: all-am
-check: check-am
+check: check-recursive
 installcheck-am:
-installcheck: installcheck-am
+installcheck: installcheck-recursive
 install-exec-am:
-install-exec: install-exec-am
+install-exec: install-exec-recursive
 
 install-data-am: install-man
-install-data: install-data-am
+install-data: install-data-recursive
 
 install-am: all-am
        @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-install: install-am
+install: install-recursive
 uninstall-am: uninstall-man
-uninstall: uninstall-am
+uninstall: uninstall-recursive
 all-am: Makefile $(MANS)
-all-redirect: all-am
+all-redirect: all-recursive
 install-strip:
        $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
-installdirs:
+installdirs: installdirs-recursive
+installdirs-am:
        $(mkinstalldirs)  $(DESTDIR)$(mandir)/man1 $(DESTDIR)$(mandir)/man3 \
                $(DESTDIR)$(mandir)/man5 $(DESTDIR)$(mandir)/man8
 
@@ -336,33 +430,40 @@ distclean-generic:
        -rm -f config.cache config.log stamp-h stamp-h[0-9]*
 
 maintainer-clean-generic:
-mostlyclean-am:  mostlyclean-generic
+mostlyclean-am:  mostlyclean-tags mostlyclean-generic
 
-mostlyclean: mostlyclean-am
+mostlyclean: mostlyclean-recursive
 
-clean-am:  clean-generic mostlyclean-am
+clean-am:  clean-tags clean-generic mostlyclean-am
 
-clean: clean-am
+clean: clean-recursive
 
-distclean-am:  distclean-generic clean-am
+distclean-am:  distclean-tags distclean-generic clean-am
        -rm -f libtool
 
-distclean: distclean-am
+distclean: distclean-recursive
 
-maintainer-clean-am:  maintainer-clean-generic distclean-am
+maintainer-clean-am:  maintainer-clean-tags maintainer-clean-generic \
+               distclean-am
        @echo "This command is intended for maintainers to use;"
        @echo "it deletes files that may require special tools to rebuild."
 
-maintainer-clean: maintainer-clean-am
+maintainer-clean: maintainer-clean-recursive
 
 .PHONY: install-man1 uninstall-man1 install-man3 uninstall-man3 \
 install-man5 uninstall-man5 install-man8 uninstall-man8 install-man \
-uninstall-man tags distdir info-am info dvi-am dvi check check-am \
-installcheck-am installcheck install-exec-am install-exec \
-install-data-am install-data install-am install uninstall-am uninstall \
-all-redirect all-am all installdirs mostlyclean-generic \
-distclean-generic clean-generic maintainer-clean-generic clean \
-mostlyclean distclean maintainer-clean
+uninstall-man install-data-recursive uninstall-data-recursive \
+install-exec-recursive uninstall-exec-recursive installdirs-recursive \
+uninstalldirs-recursive all-recursive check-recursive \
+installcheck-recursive info-recursive dvi-recursive \
+mostlyclean-recursive distclean-recursive clean-recursive \
+maintainer-clean-recursive tags tags-recursive mostlyclean-tags \
+distclean-tags clean-tags maintainer-clean-tags distdir info-am info \
+dvi-am dvi check check-am installcheck-am installcheck install-exec-am \
+install-exec install-data-am install-data install-am install \
+uninstall-am uninstall all-redirect all-am all installdirs-am \
+installdirs mostlyclean-generic distclean-generic clean-generic \
+maintainer-clean-generic clean mostlyclean distclean maintainer-clean
 
 
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
index 86d0c1fac8f3f360a604298c4c0fb2cbb206332f..2c09fc7267c5e75ddc3d7885e3e8b6ad2bbe1b44 100644 (file)
@@ -25,7 +25,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\"    $Id: chage.1,v 1.5 1999/03/07 19:14:45 marekm Exp $
+.\"    $Id: chage.1,v 1.6 2000/08/26 18:27:17 marekm Exp $
 .\"
 .TH CHAGE 1
 .SH NAME
@@ -106,4 +106,4 @@ The current value is displayed between a pair of \fB[ ]\fR marks.
 .BR passwd (5),
 .BR shadow (5)
 .SH AUTHOR
-Julianne Frances Haugh (jfh@bga.com)
+Julianne Frances Haugh (jfh@austin.ibm.com)
index 6f62023b9b1961032d4384b92b7eabb7c1e8f09d..e0ae8828534026013b54672350fd5f32df16ea65 100644 (file)
@@ -25,7 +25,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\"    $Id: chfn.1,v 1.4 1998/12/28 20:34:58 marekm Exp $
+.\"    $Id: chfn.1,v 1.5 2000/08/26 18:27:17 marekm Exp $
 .\"
 .TH CHFN 1
 .SH NAME
@@ -63,4 +63,4 @@ Without options, chfn prompts for the current user account.
 .SH SEE ALSO
 .BR passwd (5)
 .SH AUTHOR
-Julianne Frances Haugh (jfh@bga.com)
+Julianne Frances Haugh (jfh@austin.ibm.com)
index 33aabd7498a1f4f9c352dc49e579a6b8f9768768..860a1cdc2bfab5e67b36ec3ef690265cd75a14b1 100644 (file)
@@ -25,7 +25,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\"    $Id: chpasswd.8,v 1.5 1998/12/28 20:34:59 marekm Exp $
+.\"    $Id: chpasswd.8,v 1.6 2000/08/26 18:27:17 marekm Exp $
 .\"
 .TH CHPASSWD 8
 .SH NAME
@@ -59,4 +59,4 @@ The input file must be protected if it contains unencrypted passwords.
 .BR useradd (8),
 .BR newusers (8)
 .SH AUTHOR
-Julianne Frances Haugh (jfh@bga.com)
+Julianne Frances Haugh (jfh@austin.ibm.com)
index 6b9ac9cc3414eb47d957607213258e0453c8b427..c2c1ee3ec59212413fe3ab5d96e36770cd671af8 100644 (file)
@@ -25,7 +25,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\"    $Id: chsh.1,v 1.4 1998/12/28 20:35:01 marekm Exp $
+.\"    $Id: chsh.1,v 1.5 2000/08/26 18:27:17 marekm Exp $
 .\"
 .TH CHSH 1
 .SH NAME
@@ -63,4 +63,4 @@ The current value is displayed between a pair of \fB[ ]\fR marks.
 .BR chfn (1),
 .BR passwd (5)
 .SH AUTHOR
-Julianne Frances Haugh (jfh@bga.com)
+Julianne Frances Haugh (jfh@austin.ibm.com)
diff --git a/man/dialups.5 b/man/dialups.5
new file mode 100644 (file)
index 0000000..df33d6c
--- /dev/null
@@ -0,0 +1,22 @@
+.TH DIALUPS 5 "03 Oct 1999"
+.SH NAME
+d_passwd \- The dialup shell password file
+.br
+dialups \- List of dialup lines
+.SH DESCRIPTION
+The \fBd_passwd\fR file contains the names of login shells which require
+dialup passwords.  Each line contains the fully qualified path name
+for the shell, followed by an optional password.  Each field is separated
+by a '\fB:\fR'.
+.PP
+The \fBdialups\fR file contains the names of ports which may be dialup
+lines. Each line consists of the last component of the path name. The
+leading "\fB/dev/\fR" string is removed.
+.SH FILES
+/etc/d_passwd \- dialup shell password file
+.br
+/etc/dialups \- dialup line list
+.SH SEE ALSO
+.BR login (1),
+.SH AUTHOR
+Ben Collins <bcollins@debian.org>
index 00d541059aa9cb7d2b5c0c43401b99898776f670..b19b36f8119cc559ca58c6873243519a90498957 100644 (file)
@@ -25,7 +25,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\"    $Id: dpasswd.8,v 1.4 1998/12/28 20:35:02 marekm Exp $
+.\"    $Id: dpasswd.8,v 1.5 2000/08/26 18:27:17 marekm Exp $
 .\"
 .TH DPASSWD 8
 .SH NAME
@@ -52,4 +52,4 @@ program.
 .SH SEE ALSO
 .BR login (1)
 .SH AUTHOR
-Julianne Frances Haugh (jfh@bga.com)
+Julianne Frances Haugh (jfh@austin.ibm.com)
index b1f39f3af096c15d6a6d8ce85e8c0e1c734400ac..8beffdf9ffc4249959929712ca6eeef1e8a866f8 100644 (file)
@@ -25,7 +25,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\"    $Id: faillog.5,v 1.4 1998/12/28 20:35:03 marekm Exp $
+.\"    $Id: faillog.5,v 1.5 2000/08/26 18:27:17 marekm Exp $
 .\"
 .TH FAILLOG 5
 .SH NAME
@@ -56,4 +56,4 @@ The structure of the file is
 .SH SEE ALSO
 .BR faillog (8)
 .SH AUTHOR
-Julianne Frances Haugh (jfh@bga.com)
+Julianne Frances Haugh (jfh@austin.ibm.com)
index d0a0d8712635bf687d3ac38169a2ffb8483935a2..3ce76a1e5184c6690b7f57174216d5c0a902826c 100644 (file)
@@ -25,7 +25,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\"    $Id: faillog.8,v 1.6 1999/07/09 18:02:43 marekm Exp $
+.\"    $Id: faillog.8,v 1.7 2000/08/26 18:27:17 marekm Exp $
 .\"
 .TH FAILLOG 8
 .SH NAME
@@ -97,4 +97,4 @@ Some systems may replace /var/log with /var/adm or /usr/adm.
 .BR login (1),
 .BR faillog (5)
 .SH AUTHOR
-Julianne Frances Haugh (jfh@bga.com)
+Julianne Frances Haugh (jfh@austin.ibm.com)
index 5a50351dffa08f8609fd5cf0c6f79fe1cc1ab847..2d3de403c8dc02a2dc8aa8321d48b5a846045293 100644 (file)
@@ -25,7 +25,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\"    $Id: groupadd.8,v 1.4 1998/12/28 20:35:05 marekm Exp $
+.\"    $Id: groupadd.8,v 1.5 2000/08/26 18:27:17 marekm Exp $
 .\"
 .TH GROUPADD 8
 .SH NAME
@@ -61,4 +61,4 @@ Values between 0 and 99 are typically reserved for system accounts.
 .BR groupdel (8),
 .BR groupmod (8)
 .SH AUTHOR
-Julianne Frances Haugh (jfh@bga.com)
+Julianne Frances Haugh (jfh@austin.ibm.com)
index 375b889d5c5e3f9e01794ad3671c3de6f406ebae..19621a6b5d189d84ad60c1adf1f0f18c6a95bbe5 100644 (file)
@@ -25,7 +25,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\"    $Id: groupdel.8,v 1.4 1998/12/28 20:35:06 marekm Exp $
+.\"    $Id: groupdel.8,v 1.5 2000/08/26 18:27:17 marekm Exp $
 .\"
 .TH GROUPDEL 8
 .SH NAME
@@ -57,4 +57,4 @@ You must remove the user before you remove the group.
 .BR groupadd (8),
 .BR groupmod (8)
 .SH AUTHOR
-Julianne Frances Haugh (jfh@bga.com)
+Julianne Frances Haugh (jfh@austin.ibm.com)
index ff3a537a9701fd3a06e37b4b410bf971087dbea9..28815dc85178ebd92d2d4b41a6f05ddac09dbefd 100644 (file)
@@ -25,7 +25,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\"    $Id: groupmod.8,v 1.4 1998/12/28 20:35:07 marekm Exp $
+.\"    $Id: groupmod.8,v 1.5 2000/08/26 18:27:17 marekm Exp $
 .\"
 .TH GROUPMOD 8
 .SH NAME
@@ -63,4 +63,4 @@ The name of the group will be changed from \fIgroup\fR to
 .BR groupadd (8),
 .BR groupdel (8)
 .SH AUTHOR
-Julianne Frances Haugh (jfh@bga.com)
+Julianne Frances Haugh (jfh@austin.ibm.com)
index 075a87b5d29d5f00e352f0ebeb512bfd997553f2..bae989899e2db521dedd7fc28dc7e071c2e67f74 100644 (file)
@@ -25,7 +25,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\"    $Id: groups.1,v 1.4 1998/12/28 20:35:08 marekm Exp $
+.\"    $Id: groups.1,v 1.5 2000/08/26 18:27:17 marekm Exp $
 .\"
 .TH GROUPS 1
 .SH NAME
@@ -54,4 +54,4 @@ effective group ID.
 .BR getgid (2),
 .BR getgroups (2)
 .SH AUTHOR
-Julianne Frances Haugh (jfh@bga.com)
+Julianne Frances Haugh (jfh@austin.ibm.com)
index 50109f37215cf16582b7971a6d9eedb591e7eebe..3d2f794887fb24363271597537d0ce0762936c81 100644 (file)
@@ -25,7 +25,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\"    $Id: grpck.8,v 1.4 1998/12/28 20:35:09 marekm Exp $
+.\"    $Id: grpck.8,v 1.5 2000/08/26 18:27:17 marekm Exp $
 .\"
 .TH GRPCK 1
 .SH NAME
@@ -98,4 +98,4 @@ Cannot lock group files
 .IP 5 5
 Cannot update group files
 .SH AUTHOR
-Julianne Frances Haugh (jfh@bga.com)
+Julianne Frances Haugh (jfh@austin.ibm.com)
index 40cfdeac49e52d8b7b673d37940870f2235ca0c0..19cf6a243f7a46acdf8672c2fac78b4a84563340 100644 (file)
--- a/man/id.1
+++ b/man/id.1
@@ -25,7 +25,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\"    $Id: id.1,v 1.4 1998/12/28 20:35:10 marekm Exp $
+.\"    $Id: id.1,v 1.5 2000/08/26 18:27:17 marekm Exp $
 .\"
 .TH ID 1
 .SH NAME
@@ -51,4 +51,4 @@ support multiple concurrent group membership.
 .BR getgid (2),
 .BR getgroups (2)
 .SH AUTHOR
-Julianne Frances Haugh (jfh@bga.com)
+Julianne Frances Haugh (jfh@austin.ibm.com)
index 2c2684797f19bcdd9893d3a6465d73541ea9b261..85acc13bb57313d34d38510d9dce6a9fcbbb2152 100644 (file)
@@ -26,7 +26,7 @@
 .\" SUCH DAMAGE.
 .\"
 .\"    @(#)lastlog.8   3.3     08:24:58        29 Sep 1993 (National Guard Release)
-.\"    $Id: lastlog.8,v 1.5 1998/12/28 20:35:11 marekm Exp $
+.\"    $Id: lastlog.8,v 1.6 2000/08/26 18:27:17 marekm Exp $
 .\"
 .TH LASTLOG 8
 .SH NAME
@@ -34,15 +34,15 @@ lastlog \- examine lastlog file
 .SH SYNOPSIS
 .B lastlog
 .RB [ -u
-.IR uid ]
+.IR login-name ]
 .RB [ -t
 .IR days ]
 .SH DESCRIPTION
 \fBlastlog\fR formats and prints the contents of the last login log,
 \fI/var/log/lastlog\fR.  The \fBlogin-name\fR, \fBport\fR, and \fBlast login 
 time\fR will be printed.
-The default (no flags) causes lastlog entries to be printed in UID
-order.
+The default (no flags) causes lastlog entries to be printed, sorted
+by the numerical UID.
 Entering \fB-u \fIlogin-name\fR flag will
 cause the lastlog record for \fIlogin-name\fR only to be printed.
 Entering \fB-t \fIdays\fR will cause only the
@@ -58,6 +58,6 @@ Large gaps in uid numbers will cause the lastlog program to run longer with
 no output to the screen (i.e. if mmdf=800 and last uid=170, program will
 appear to hang as it processes uid 171-799).
 .SH AUTHORS
-Julianne Frances Haugh (jfh@bga.com)
+Julianne Frances Haugh (jfh@austin.ibm.com)
 .br
 Phillip Street
index 8735ad80c02dba215e2dbcd18912f9dda55f5907..45a42b5fa2e0395d8113fe344868d104385cef77 100644 (file)
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\"    $Id: login.1,v 1.6 1999/06/07 16:40:44 marekm Exp $
+.\"    $Id: login.1,v 1.7 2000/08/26 18:27:17 marekm Exp $
 .\"
 .TH LOGIN 1
 .SH NAME
 login \- Begin session on the system
 .SH SYNOPSIS
-.B login
-.RI [ username " [" environmental-variables ]]
-.\" XXX - document -f -h -p -r options
+\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 DESCRIPTION
 .B login
 is used to establish a new session with the system.
@@ -94,6 +96,25 @@ An initialization script for your command interpreter may also be
 executed.
 Please see the appropriate manual section for more information on
 this function.
+.PP
+A subsystem login is indicated by the presense of a "*" as the first
+character of the login shell. The given home directory will be used as
+the root of a new filesystem which the user is actually logged into.
+.SH OPTIONS
+.TP
+.B -p
+Preserve environment.
+.TP
+.B -f
+Do not perform authentication, user is preauthenticated.
+.TP
+.B -h
+Name of the remote host for this login.
+.TP
+.B -r
+Perform autologin protocol for rlogin.
+.PP
+The \fB-r -h\fP and \fB-f\fP options are only used when \fBlogin\fP is invoked by root.
 .SH CAVEATS
 .PP
 This version of \fBlogin\fR has many compilation options, only some of which
@@ -131,4 +152,4 @@ $HOME/.hushlogin \- suppress printing of system messages
 .BR passwd (5),
 .BR nologin (5)
 .SH AUTHOR
-Julianne Frances Haugh (jfh@bga.com)
+Julianne Frances Haugh (jfh@austin.ibm.com)
index 69414238f397ea904b63ff3ba1c20fa0050c6834..d21a3cc9acacd6539e68fab74c027dcdc20b06b9 100644 (file)
@@ -25,7 +25,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\"    $Id: login.defs.5,v 1.6 1998/12/28 20:35:13 marekm Exp $
+.\"    $Id: login.defs.5,v 1.7 2000/08/26 18:27:17 marekm Exp $
 .\"
 .TH LOGIN 5
 .SH NAME
@@ -79,6 +79,14 @@ program.  It can be any combination of letters
 for Full name, Room number, Work phone, and Home phone, respectively.
 If not specified, only the superuser can make any changes.
 .\"
+.IP "CLOSE_SESSIONS (boolean)"
+Enable pam_close_session() calling. When using normal (pam_unix.so)
+session handling modules, this is not needed. However with modules
+(such as kerberos or other persistent session models),
+.B login
+needs to fork and wait for the shell to exit, so that sessions can be
+cleaned up.
+.\"
 .IP "CONSOLE (string)"
 If specified, this definition provides for a restricted set of lines
 on which root logins will be allowed.  An attempted root login which
@@ -134,7 +142,8 @@ dialups, one per line, for example:
 .fi
 .\"
 .IP "ENVIRON_FILE (string)"
-XXX needs to be documented.
+File containing a list of environment variables (one per line) to set
+when logging in or su'ing.
 .\"
 .IP "ENV_HZ (string)"
 This parameter specifies a value for an HZ environment parameter.
@@ -502,7 +511,8 @@ type and a terminal line, seperated by whitespace, for example:
 .ft R
 .sp
 .fi
-This information is used to initialize the TERM environment parameter.
+This information is only used to initialize the TERM environment parameter
+when it does not already exist.
 A line starting with a ``#'' pound sign will be treated as a comment.
 If this paramter is not specified, the file does not exist, or the terminal
 line is not found in the file, then the TERM environment parameter will not
@@ -558,6 +568,6 @@ manual page.
 .BR porttime (5),
 .BR faillog (8)
 .SH AUTHORS
-Julianne Frances Haugh (jfh@bga.com)
+Julianne Frances Haugh (jfh@austin.ibm.com)
 .br
 Chip Rosenthal (chip@unicom.com)
index 9acf4c31860445e76b9047d42d41452cdbfbea6a..b611d4f94349c16579b0eedf53e430459f4e6fdc 100644 (file)
@@ -25,7 +25,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\"    $Id: logoutd.8,v 1.4 1998/12/28 20:35:14 marekm Exp $
+.\"    $Id: logoutd.8,v 1.5 2000/08/26 18:27:17 marekm Exp $
 .\"
 .TH LOGOUTD 8
 .SH NAME
@@ -48,4 +48,4 @@ is terminated.
 .br
 /etc/utmp \- current login sessions
 .SH AUTHOR
-Julianne Frances Haugh (jfh@bga.com)
+Julianne Frances Haugh (jfh@austin.ibm.com)
index 13be2c439bea574e85cfc21c75220f489002ad32..ad4ed796bc838b8aacb81f79484d377d134ab989 100644 (file)
@@ -25,7 +25,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\"    $Id: mkpasswd.8,v 1.4 1998/12/28 20:35:15 marekm Exp $
+.\"    $Id: mkpasswd.8,v 1.5 2000/08/26 18:27:17 marekm Exp $
 .\"
 .TH MKPASSWD 1
 .SH NAME
@@ -78,4 +78,4 @@ deleted or corrupted database file.
 .BR group (5),
 .BR shadow (5)
 .SH AUTHOR
-Julianne Frances Haugh (jfh@bga.com)
+Julianne Frances Haugh (jfh@austin.ibm.com)
index bfd5a157c0d2a1d99bf42b0aa81077660722320f..f330835726f06a41bc3f719869f54d7f0355868e 100644 (file)
@@ -25,7 +25,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\"    $Id: newgrp.1,v 1.5 1999/08/27 19:02:51 marekm Exp $
+.\"    $Id: newgrp.1,v 1.6 2000/08/26 18:27:17 marekm Exp $
 .\"
 .TH NEWGRP 1
 .SH NAME
@@ -77,4 +77,4 @@ only some of which may be in use at any particular site.
 .BR id (1),
 .BR su (1)
 .SH AUTHOR
-Julianne Frances Haugh (jfh@bga.com)
+Julianne Frances Haugh (jfh@austin.ibm.com)
index 02c4c584c1f03bd72024b40a6abe75353ec68677..447b8d91a1686a5fb9cd6033e257735ddf2490c9 100644 (file)
@@ -25,7 +25,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\"    $Id: newusers.8,v 1.4 1998/12/28 20:35:17 marekm Exp $
+.\"    $Id: newusers.8,v 1.5 2000/08/26 18:27:17 marekm Exp $
 .\"
 .TH NEWUSERS 8
 .SH NAME
@@ -65,4 +65,4 @@ The input file must be protected since it contains unencrypted passwords.
 .BR passwd (1),
 .BR useradd (8)
 .SH AUTHOR
-Julianne Frances Haugh (jfh@bga.com)
+Julianne Frances Haugh (jfh@austin.ibm.com)
index 20c6b1ff9d1e562cd331b2faa3c3ed40e30b1a47..8090db76eda3e58c232c138473b5c72cc8833bb2 100644 (file)
@@ -25,7 +25,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\"    $Id: passwd.1,v 1.4 1998/12/28 20:35:18 marekm Exp $
+.\"    $Id: passwd.1,v 1.5 2000/08/26 18:27:17 marekm Exp $
 .\"
 .TH PASSWD 1
 .SH NAME
@@ -183,8 +183,8 @@ is enabled and they are not logged into the NIS server.
 /etc/shadow \- encrypted user passwords
 .SH SEE ALSO
 .BR passwd (3),
-.BR shadow (3),
+.\" .BR shadow (3),
 .BR group (5),
 .BR passwd (5)
 .SH AUTHOR
-Julianne Frances Haugh (jfh@bga.com)
+Julianne Frances Haugh (jfh@austin.ibm.com)
index d93758b1bd11948dbfa9a9f1e03d4f86be9f05a1..3b21d0926a599efa338a858c818b1384f7ba59c8 100644 (file)
@@ -25,7 +25,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\"    $Id: passwd.5,v 1.4 1998/12/28 20:35:19 marekm Exp $
+.\"    $Id: passwd.5,v 1.5 2000/08/26 18:27:17 marekm Exp $
 .\"
 .TH PASSWD 5
 .SH NAME
@@ -108,4 +108,4 @@ If this field is empty, it defaults to the value \fB/bin/sh\fR.
 .BR pwconv (8),
 .BR pwunconv (8)
 .SH AUTHOR
-Julianne Frances Haugh (jfh@bga.com)
+Julianne Frances Haugh (jfh@austin.ibm.com)
diff --git a/man/pl/Makefile.am b/man/pl/Makefile.am
new file mode 100644 (file)
index 0000000..2ef48e2
--- /dev/null
@@ -0,0 +1,60 @@
+AUTOMAKE_OPTIONS = 1.0 foreign
+
+manpldir = $(mandir)/pl
+manpl1dir = $(manpldir)/man1
+manpl3dir = $(manpldir)/man3
+manpl5dir = $(manpldir)/man5
+manpl8dir = $(manpldir)/man8
+
+
+manpl1_DATA = \
+       chage.1 \
+       chfn.1 \
+       chsh.1 \
+       groups.1 \
+       gpasswd.1 \
+       id.1 \
+       login.1 \
+       newgrp.1 \
+       passwd.1 \
+       su.1 
+       
+manpl3_DATA = \
+       pw_auth.3 \
+       shadow.3
+
+manpl5_DATA = \
+       d_passwd.5 \
+       dialups.5 \
+       faillog.5 \
+       limits.5 \
+       login.access.5 \
+       login.defs.5 \
+       passwd.5 \
+       porttime.5 \
+       shadow.5 \
+       suauth.5
+
+manpl8_DATA = \
+        chpasswd.8 \
+        dpasswd.8 \
+       faillog.8 \
+       groupadd.8 \
+       groupdel.8 \
+       groupmod.8 \
+       grpck.8 \
+       lastlog.8 \
+       logoutd.8 \
+       mkpasswd.8 \
+       newusers.8 \
+       pwauth.8 \
+       pwck.8 \
+       pwconv.8 \
+       shadowconfig.8 \
+       sulogin.8
+       useradd.8 \
+       userdel.8 \
+       usermod.8 \
+       vipw.8
+
+EXTRA_DIST = $(manpl1_DATA) $(manpl3_DATA) $(manpl5_DATA) $(manpl8_DATA)
similarity index 50%
rename from old/Makefile.in
rename to man/pl/Makefile.in
index 996e51fd00fbe7df52a3872af6ae006a32d3392a..277746bec2f0c80de093436431c384168f8a3416 100644 (file)
@@ -10,9 +10,6 @@
 # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
 # PARTICULAR PURPOSE.
 
-# This is a dummy Makefile.am to get automake work flawlessly,
-# and also cooperate to make a distribution for `make dist'
-
 
 SHELL = @SHELL@
 
@@ -41,7 +38,7 @@ pkgdatadir = $(datadir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 
-top_builddir = ..
+top_builddir = ../..
 
 ACLOCAL = @ACLOCAL@
 AUTOCONF = @AUTOCONF@
@@ -82,6 +79,7 @@ INTLOBJS = @INTLOBJS@
 LD = @LD@
 LIBCRACK = @LIBCRACK@
 LIBCRYPT = @LIBCRYPT@
+LIBMD = @LIBMD@
 LIBPAM = @LIBPAM@
 LIBSKEY = @LIBSKEY@
 LIBTCFS = @LIBTCFS@
@@ -104,11 +102,32 @@ VERSION = @VERSION@
 YACC = @YACC@
 l = @l@
 
-EXTRA_DIST = Makefile.linux Makefile.sun4 Makefile.svr4 Makefile.xenix  config.h.linux config.h.sun4 config.h.svr4 config.h.xenix  orig-config.h pwconv.8 pwconv-old.8 pwconv-old.c pwd.h.m4  pwunconv.8 pwunconv-old.8 pwunconv-old.c scologin.c vipw.8
+AUTOMAKE_OPTIONS = 1.0 foreign
+
+manpldir = $(mandir)/pl
+manpl1dir = $(manpldir)/man1
+manpl3dir = $(manpldir)/man3
+manpl5dir = $(manpldir)/man5
+manpl8dir = $(manpldir)/man8
+
+manpl1_DATA =          chage.1         chfn.1  chsh.1  groups.1        gpasswd.1       id.1    login.1         newgrp.1        passwd.1        su.1 
+
+
+manpl3_DATA =          pw_auth.3       shadow.3
+
+
+manpl5_DATA =          d_passwd.5      dialups.5       faillog.5       limits.5        login.access.5  login.defs.5    passwd.5        porttime.5      shadow.5        suauth.5
 
+
+manpl8_DATA =          chpasswd.8         dpasswd.8    faillog.8       groupadd.8      groupdel.8      groupmod.8      grpck.8         lastlog.8       logoutd.8       mkpasswd.8      newusers.8      pwauth.8        pwck.8  pwconv.8        shadowconfig.8  sulogin.8
+
+
+EXTRA_DIST = $(manpl1_DATA) $(manpl3_DATA) $(manpl5_DATA) $(manpl8_DATA)
 mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
-CONFIG_HEADER = ../config.h
+CONFIG_HEADER = ../../config.h
 CONFIG_CLEAN_FILES = 
+DATA =  $(manpl1_DATA) $(manpl3_DATA) $(manpl5_DATA) $(manpl8_DATA)
+
 DIST_COMMON =  Makefile.am Makefile.in
 
 
@@ -119,19 +138,95 @@ GZIP_ENV = --best
 all: all-redirect
 .SUFFIXES:
 $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) 
-       cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps old/Makefile
+       cd $(top_srcdir) && $(AUTOMAKE) --foreign --include-deps man/pl/Makefile
 
 Makefile: $(srcdir)/Makefile.in  $(top_builddir)/config.status
        cd $(top_builddir) \
          && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
 
+
+install-manpl1DATA: $(manpl1_DATA)
+       @$(NORMAL_INSTALL)
+       $(mkinstalldirs) $(DESTDIR)$(manpl1dir)
+       @list='$(manpl1_DATA)'; for p in $$list; do \
+         if test -f $(srcdir)/$$p; then \
+           echo " $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(manpl1dir)/$$p"; \
+           $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(manpl1dir)/$$p; \
+         else if test -f $$p; then \
+           echo " $(INSTALL_DATA) $$p $(DESTDIR)$(manpl1dir)/$$p"; \
+           $(INSTALL_DATA) $$p $(DESTDIR)$(manpl1dir)/$$p; \
+         fi; fi; \
+       done
+
+uninstall-manpl1DATA:
+       @$(NORMAL_UNINSTALL)
+       list='$(manpl1_DATA)'; for p in $$list; do \
+         rm -f $(DESTDIR)$(manpl1dir)/$$p; \
+       done
+
+install-manpl3DATA: $(manpl3_DATA)
+       @$(NORMAL_INSTALL)
+       $(mkinstalldirs) $(DESTDIR)$(manpl3dir)
+       @list='$(manpl3_DATA)'; for p in $$list; do \
+         if test -f $(srcdir)/$$p; then \
+           echo " $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(manpl3dir)/$$p"; \
+           $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(manpl3dir)/$$p; \
+         else if test -f $$p; then \
+           echo " $(INSTALL_DATA) $$p $(DESTDIR)$(manpl3dir)/$$p"; \
+           $(INSTALL_DATA) $$p $(DESTDIR)$(manpl3dir)/$$p; \
+         fi; fi; \
+       done
+
+uninstall-manpl3DATA:
+       @$(NORMAL_UNINSTALL)
+       list='$(manpl3_DATA)'; for p in $$list; do \
+         rm -f $(DESTDIR)$(manpl3dir)/$$p; \
+       done
+
+install-manpl5DATA: $(manpl5_DATA)
+       @$(NORMAL_INSTALL)
+       $(mkinstalldirs) $(DESTDIR)$(manpl5dir)
+       @list='$(manpl5_DATA)'; for p in $$list; do \
+         if test -f $(srcdir)/$$p; then \
+           echo " $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(manpl5dir)/$$p"; \
+           $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(manpl5dir)/$$p; \
+         else if test -f $$p; then \
+           echo " $(INSTALL_DATA) $$p $(DESTDIR)$(manpl5dir)/$$p"; \
+           $(INSTALL_DATA) $$p $(DESTDIR)$(manpl5dir)/$$p; \
+         fi; fi; \
+       done
+
+uninstall-manpl5DATA:
+       @$(NORMAL_UNINSTALL)
+       list='$(manpl5_DATA)'; for p in $$list; do \
+         rm -f $(DESTDIR)$(manpl5dir)/$$p; \
+       done
+
+install-manpl8DATA: $(manpl8_DATA)
+       @$(NORMAL_INSTALL)
+       $(mkinstalldirs) $(DESTDIR)$(manpl8dir)
+       @list='$(manpl8_DATA)'; for p in $$list; do \
+         if test -f $(srcdir)/$$p; then \
+           echo " $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(manpl8dir)/$$p"; \
+           $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(manpl8dir)/$$p; \
+         else if test -f $$p; then \
+           echo " $(INSTALL_DATA) $$p $(DESTDIR)$(manpl8dir)/$$p"; \
+           $(INSTALL_DATA) $$p $(DESTDIR)$(manpl8dir)/$$p; \
+         fi; fi; \
+       done
+
+uninstall-manpl8DATA:
+       @$(NORMAL_UNINSTALL)
+       list='$(manpl8_DATA)'; for p in $$list; do \
+         rm -f $(DESTDIR)$(manpl8dir)/$$p; \
+       done
 tags: TAGS
 TAGS:
 
 
 distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
 
-subdir = old
+subdir = man/pl
 
 distdir: $(DISTFILES)
        @for file in $(DISTFILES); do \
@@ -155,19 +250,23 @@ installcheck: installcheck-am
 install-exec-am:
 install-exec: install-exec-am
 
-install-data-am:
+install-data-am: install-manpl1DATA install-manpl3DATA \
+               install-manpl5DATA install-manpl8DATA
 install-data: install-data-am
 
 install-am: all-am
        @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
 install: install-am
-uninstall-am:
+uninstall-am: uninstall-manpl1DATA uninstall-manpl3DATA \
+               uninstall-manpl5DATA uninstall-manpl8DATA
 uninstall: uninstall-am
-all-am: Makefile
+all-am: Makefile $(DATA)
 all-redirect: all-am
 install-strip:
        $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
 installdirs:
+       $(mkinstalldirs)  $(DESTDIR)$(manpl1dir) $(DESTDIR)$(manpl3dir) \
+               $(DESTDIR)$(manpl5dir) $(DESTDIR)$(manpl8dir)
 
 
 mostlyclean-generic:
@@ -198,13 +297,19 @@ maintainer-clean-am:  maintainer-clean-generic distclean-am
 
 maintainer-clean: maintainer-clean-am
 
-.PHONY: tags distdir info-am info dvi-am dvi check check-am \
-installcheck-am installcheck install-exec-am install-exec \
-install-data-am install-data install-am install uninstall-am uninstall \
-all-redirect all-am all installdirs mostlyclean-generic \
-distclean-generic clean-generic maintainer-clean-generic clean \
-mostlyclean distclean maintainer-clean
-
+.PHONY: uninstall-manpl1DATA install-manpl1DATA uninstall-manpl3DATA \
+install-manpl3DATA uninstall-manpl5DATA install-manpl5DATA \
+uninstall-manpl8DATA install-manpl8DATA tags distdir info-am info \
+dvi-am dvi check check-am installcheck-am installcheck install-exec-am \
+install-exec install-data-am install-data install-am install \
+uninstall-am uninstall all-redirect all-am all installdirs \
+mostlyclean-generic distclean-generic clean-generic \
+maintainer-clean-generic clean mostlyclean distclean maintainer-clean
+
+       useradd.8 \
+       userdel.8 \
+       usermod.8 \
+       vipw.8
 
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/man/pl/chage.1 b/man/pl/chage.1
new file mode 100644 (file)
index 0000000..48f1c87
--- /dev/null
@@ -0,0 +1,110 @@
+.\" {PTM/WK/1999-09-16}
+.\" Copyright 1990 - 1994 Julianne Frances Haugh
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.TH CHAGE 1
+.SH NAZWA
+chage \- zmieñ informacjê o terminie wa¿no¶ci has³a u¿ytkownika
+.SH SK£ADNIA
+.TP 6
+.B chage
+.RB [ -m
+.IR mindni ]
+.RB [ -M
+.IR maxdni ]
+.RB [ -d
+.IR ostatni ]
+.RB [ -I
+.IR nieaktywne ]
+.br
+.RB [ -E
+.IR data_wa¿no¶ci ]
+.RB [ -W
+.IR dni_ostrzegania ]
+.I u¿ytkownik
+.TP 6
+.B chage -l \fIu¿ytkownik\fR
+.SH OPIS
+\fBchage\fR zmienia liczbê dni pomiêdzy zmianami has³a i datê ostatniej
+zmiany has³a. Informacjê tê system wykorzystuje do ustalenia, kiedy
+u¿ytkownik musi zmieniæ has³o.
+Polecenia \fBchage\fR mo¿e u¿yæ tylko u¿ytkownik root, za wyj±tkiem
+opcji \fB-l\fR. Mo¿e siê ni± pos³u¿yæ siê u¿ytkownik nieuprzywilejowany
+do stwierdzenia, kiedy wygasa jego w³asne has³o lub konto.
+.PP
+Opcja \fB-m\fR ustawia minimaln± liczbê dni pomiêdzy zmianami has³a
+na warto¶æ \fImindni\fR. Warto¶æ zerowa oznacza, ¿e u¿ytkownik mo¿e je zmieniaæ
+w dowolnym czasie.
+.PP
+Opcja \fB-M\fR ustawia maksymaln± liczbê dni, przez jakie has³o jest wa¿ne
+na warto¶æ \fImaxdni\fR.
+Gdy \fImaxdni\fR plus \fIostatni\fR jest mniejsze ni¿ bie¿±cy dzieñ,
+od u¿ytkownika wymagana jest zmiana has³a przed skorzystaniem z konta.
+Zdarzenie to mo¿e byæ zaplanowane z wyprzedzeniem przez wykorzystanie
+opcji \fB-W\fR, ostrzegaj±cej zawczasu u¿ytkownika o zbli¿aj±cym siê terminie
+zmiany.
+.PP
+Opcja \fB-d\fR ustawia liczbê dni od 1 stycznia 1970 do dnia kiedy ostatnio
+zmieniono has³o na \fIostatni\fR. Data mo¿e równie¿ zostaæ podana w postaci
+RRRR-MM-DD (lub postaci powszechniej u¿ywanej w twoim regionie).
+.PP
+Opcja \fB-E\fR s³u¿y do ustawiania daty, od której konto u¿ytkownika
+nie bêdzie ju¿ dostêpne.
+\fIdata_wa¿no¶ci\fR jest liczb± dni od 1 stycznia 1970, od której konto jest
+blokowane. Data mo¿e byæ te¿ wyra¿ona w postaci RRRR-MM-DD (lub innej,
+powszechniej u¿ywanej w twoim regionie).
+U¿ytkownik, którego konto jest zablokowane musi skontaktowaæ siê
+z administratorem systemu zanim bêdzie móg³ z niego ponownie skorzystaæ.
+.PP
+Opcja \fB-I\fR s³u¿y do ustawiania czasu nieaktywno¶ci po wyga¶niêciu
+has³a, po którym konto jest blokowane. Parametr \fInieaktywne\fR podaje
+liczbê dni nieaktywno¶ci. Warto¶æ 0 wy³±cza tê funkcjê.
+U¿ytkownik, którego konto jest zablokowane musi skontaktowaæ siê
+z administratorem systemu zanim bêdzie móg³ z niego ponownie skorzystaæ.
+.PP
+Opcja \fB-W\fR s³u¿y do ustawiania ostrzegania przed wymagan± zmian± has³a.
+Parametr \fIdni_ostrzegania\fR jest liczb± dni przed up³ywem wa¿no¶ci has³a;
+od tego dnia u¿ytkownik bêdzie ostrzegany o nadchodz±cym terminie.
+.PP
+Wszystkie powy¿sze warto¶ci przechowywane s± jako liczba dni, je¿eli u¿ywany
+jest dodatkowy, przes³aniany plik hase³ (shadow). Jednak je¿eli u¿ywany jest
+standardowy plik hase³, to s± one zamieniane (w obie strony) na liczbê tygodni.
+Z powodu powy¿szej konwersji mog± pojawiæ siê b³êdy zaokr±gleñ.
+.PP
+Je¶li nie podano ¿adnej opcji, to \fBchage\fR dzia³a w trybie interaktywnym,
+proponuj±c u¿ytkownikowi warto¶ci bie¿±ce dla ka¿dego z pól. Wprowad¼ now±
+warto¶æ by zmieniæ pole, lub pozostaw pust± by u¿yæ warto¶ci bie¿±cej.
+Bie¿±ca warto¶æ pola wy¶wietlana jest miêdzy par± znaczników \fB[ ]\fR.
+.SH PLIKI
+.IR /etc/passwd " - informacje o kontach u¿ytkowników"
+.br
+.IR /etc/shadow " - chronione informacje o kontach u¿ytkowników"
+.SH ZOBACZ TAK¯E
+.BR passwd (5),
+.BR shadow (5)
+.SH AUTOR
+Julianne Frances Haugh (jfh@austin.ibm.com)
diff --git a/man/pl/chfn.1 b/man/pl/chfn.1
new file mode 100644 (file)
index 0000000..8b25476
--- /dev/null
@@ -0,0 +1,77 @@
+.\" {PTM/WK/1999-09-25}
+.\" Copyright 1990 - 1994 Julianne Frances Haugh
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.TH CHFN 1
+.SH NAZWA
+chfn \- zmieñ nazwê u¿ytkownika i informacjê o nim
+.SH SK£ADNIA
+.TP 5
+.B chfn
+.RB [ -f
+.IR pe³na_nazwa ]
+.RB [ -r
+.IR nr_pokoju ]
+.br
+.RB [ -w
+.IR tel_s³u¿b ]
+.RB [ -h
+.IR tel_dom ]
+.RB [ -o
+.IR inne ]
+.RI [ u¿ytkownik ]
+.SH OPIS
+\fBchfn\fR zmienia pe³n± nazwê (imiê i nazwisko), telefon s³u¿bowy i domowy
+dla danego konta u¿ytkownika. Informacja ta jest zwykle drukowana przez
+\fBfinger\fR(1) i podobne mu programy.
+Zwyk³y u¿ytkownik mo¿e zmieniaæ wy³±cznie pola opisuj±ce w³asne konto.
+Tylko superu¿ytkownik mo¿e zmieniaæ pola dowolnego konta.
+Równie¿ tylko on mo¿e pos³u¿yæ siê opcj± \fB-o\fR by zmieniæ niezdefiniowane
+czê¶ci pola GECOS.
+.PP
+Jedynym ograniczeniem nak³adanym na zawarto¶æ pól jest zakaz u¿ywania w nich
+znaków kontrolnych oraz przecinka, dwukropka i znaku równo¶ci.
+Pola \fIinne\fR (other) nie obowi±zuje to ograniczenie. Pole to s³u¿y do
+przechowywania informacji rozliczeniowej u¿ywanej przez inne aplikacje.
+.PP
+Je¶li nie wybrano ¿adnej z opcji, to \fBchfn\fR dzia³a w trybie interaktywnym,
+proponuj±c u¿ytkownikowi warto¶ci bie¿±ce dla ka¿dego z pól. Wprowad¼ now±
+warto¶æ by zmieniæ pole, lub pozostaw pust± by u¿yæ warto¶ci bie¿±cej.
+Bie¿±ca warto¶æ pola wy¶wietlana jest miêdzy par± znaczników \fB[ ]\fR.
+Bez podania opcji \fBchfn\fR pyta o konto u¿ytkownika, które ma podlegaæ
+zmianie.
+.SH PLIKI
+.IR /etc/passwd " - informacja o kontach u¿ytkowników"
+.SH ZOBACZ TAK¯E
+.BR passwd (5)
+.SH AUTOR
+Julianne Frances Haugh (jfh@austin.ibm.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.
diff --git a/man/pl/chpasswd.8 b/man/pl/chpasswd.8
new file mode 100644 (file)
index 0000000..eea0189
--- /dev/null
@@ -0,0 +1,62 @@
+.\" {PTM/WK/1999-09-16}
+.\" Copyright 1991, Julianne Frances Haugh
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.TH CHPASSWD 8
+.SH NAZWA
+chpasswd - wsadowa aktualizacja pliku hase³
+.SH SK£ADNIA
+.B chpasswd
+.RB [ -e ]
+.SH OPIS
+\fBchpasswd\fR odczytuje ze standardowego wej¶cia plik zawieraj±cy pary:
+nazwa u¿ytkownika i has³o. Odczytan± informacje wykorzystuje do aktualizacji
+grupy istniej±cych u¿ytkowników.
+Bez prze³±cznika -e, has³a traktowane s± jako podane jawnie. Z prze³±cznikiem
+-e has³a powinny byæ dostarczone w postaci zakodowanej (encrypted).
+Ka¿dy wiersz ma postaæ
+.sp 1
+         \fInazwa_U¿ytkownika\fR:\fIhas³o\fR
+.sp 1
+Dany u¿ytkownik musi istnieæ.
+Je¿eli bêdzie to konieczne, podane has³o zostanie zakodowane a wiek has³a,
+je¶li wystêpuje, zaktualizowany.
+.PP
+Polecenie to przeznaczone jest do u¿ytku w du¿ych systemach, gdzie aktualizuje
+siê wiele kont naraz.
+.SH PRZESTROGI
+.\" Po u¿yciu \fBchpasswd\fR musi zostaæ wykonane polecenie \fImkpasswd\fR,
+.\" aktualizuj±ce pliki DBM hase³ (DBM password files).
+Plik ¼ród³owy, je¶li zawiera niezakodowane has³a, musi byæ chroniony.
+.\" Polecenie to mo¿e byæ zaniechane na rzecz polecenia newusers(8).
+.SH ZOBACZ TAK¯E
+.\" mkpasswd(8), passwd(1), useradd(1)
+.BR passwd (1),
+.BR useradd (8),
+.BR newusers (8)
+.SH AUTOR
+Julianne Frances Haugh (jfh@austin.ibm.com)
diff --git a/man/pl/chsh.1 b/man/pl/chsh.1
new file mode 100644 (file)
index 0000000..7f20e86
--- /dev/null
@@ -0,0 +1,70 @@
+.\" {PTM/WK/1999-09-25}
+.\" Copyright 1990, Julianne Frances Haugh
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.TH CHSH 1
+.SH NAZWA
+chsh \- zmieñ pow³okê zg³oszeniow±
+.SH SK£ADNIA
+.TP 5
+.B chsh
+.RB [ -s
+.IR pow³oka ]
+.RI [ u¿ytkownik ]
+.SH OPIS
+\fBchsh\fR zmienia pow³okê zg³oszeniow± u¿ytkownika.
+Okre¶la nazwê pocz±tkowego polecenia zg³oszeniowego u¿ytkownika.
+Zwyk³y u¿ytkownik mo¿e zmieniæ wy³±cznie pow³okê zg³oszeniow± w³asnego konta,
+superu¿ytkownik mo¿e zmieniæ pow³okê zg³oszeniow± dla dowolnego konta.
+.PP
+Jedynym ograniczeniem na³o¿onym na pow³okê zg³oszeniow± jest to, ¿e jej nazwa
+musi byæ ujêta w \fI/etc/shells\fR, chyba ¿e polecenie \fBchsh\fR wywo³ywane
+jest przez superu¿ytkownika, wówczas mo¿e byæ podana nazwa dowolnego polecenia.
+U¿ytkownicy kont z ograniczon± pow³ok± logowania nie mog± jej zmieniaæ.
+Odradza siê z tego powodu umieszczanie \fB/bin/rsh\fR w pliku \fI/etc/shells\fR,
+gdy¿ przypadkowa zmiana na pow³okê ograniczon± uniemo¿liwi u¿ytkownikowi
+jak±kolwiek zmianê pow³oki logowania, nawet z powrotem na dotychczasow±.
+.PP
+je¿eli nie podano opcji \fB-s\fR, to \fBchsh\fR dzia³a w trybie interaktywnym,
+proponuj±c u¿ytkownikowi bie¿±c± pow³okê logowania. Wprowad¼ now± warto¶æ
+do pola lub pozostaw je puste, by pozostawiæ aktualn± warto¶æ.
+Bie¿±ca warto¶æ wy¶wietlana jest pomiêdzy par± znaczników \fB[ ]\fR.
+.SH PLIKI
+.IR /etc/passwd " - informacja o kontach u¿ytkowników"
+.br
+.IR /etc/shells " - lista dozwolonych pow³ok zg³oszeniowych"
+.SH ZOBACZ TAK¯E
+.BR chfn (1),
+.BR passwd (5)
+.SH AUTOR
+Julianne Frances Haugh (jfh@austin.ibm.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.
diff --git a/man/pl/d_passwd.5 b/man/pl/d_passwd.5
new file mode 100644 (file)
index 0000000..0b3989b
--- /dev/null
@@ -0,0 +1,30 @@
+.\"
+.\" {PTM/WK/1999-09-22}
+.\"
+.TH D_PASSWD 5
+.SH NAZWA
+d_passwd - plik hase³ telefonicznych
+.SH OPIS
+Z dostêpem do systemu przez liniê telefoniczn± zwi±zane s± dwa pliki
+konfiguracyjne: \fI/etc/d_passwd\fR, zawieraj±cy has³a i \fI/etc/dialups\fR,
+zawieraj±cy linie.
+Ka¿dorazowo, zanim u¿ytkownik ³±cz±cy siê za po¶rednictwem modemu otrzyma
+dostêp do systemu, musi podaæ has³o telefoniczne. Has³a te s± niezale¿ne
+od hase³ u¿ytkowników i przypisane nie do u¿ytkownika, ani linii terminalowej,
+lecz do pow³oki zg³oszeniowej u¿ytkownika.
+Do rozpoczêcia sesji wymagane jest zarówno has³o u¿ytkownika jak
+i telefoniczne. Zauwa¿ jednak, ¿e has³a telefoniczne nie posiadaj± kontroli
+terminu wa¿no¶ci. Nale¿y, po uzgodnieniu, okresowo zmieniaæ je rêcznie.
+W pliku \fId_passwd\fR kolejne wiersze definiuj± has³a dla rozmaitych pow³ok:
+.br
+.sp 1
+         pow³oka:zakodowane_has³o:
+.br
+.sp 1
+Zauwa¿, ¿e po polu has³a wystêpuje dwukropek. Pow³oka powinna byæ
+okre¶lona przez bezwzglêdn± nazwê ¶cie¿kow± pliku interpretatora poleceñ.
+Do zarz±dzania has³ami telefonicznymi s³u¿y polecenie \fBdpasswd\fR (1).
+.SH ZOBACZ TAK¯E
+.BR dpasswd (1),
+.BR login (1),
+.BR dialups (5).
diff --git a/man/pl/dialups.5 b/man/pl/dialups.5
new file mode 100644 (file)
index 0000000..3edb8a2
--- /dev/null
@@ -0,0 +1,24 @@
+.\"
+.\" {PTM/WK/1999-09-22}
+.\"
+.TH DIALUPS
+.SH NAZWA
+dialups - plik terminalowych linii telefonicznych
+.SH OPIS
+Z dostêpem do systemu przez liniê telefoniczn± zwi±zane s± dwa pliki
+konfiguracyjne: \fI/etc/d_passwd\fR, zawieraj±cy has³a i \fI/etc/dialups\fR,
+zawieraj±cy linie. W ka¿dym wierszu pliku \fIdialups\fR zawarta jest nazwa
+pliku specjalnego linii terminalowej, do której pod³±czony jest modem:
+.br
+.sp 1
+         /dev/tty12
+         /dev/tty13
+.br
+.sp 1
+Warto jest uj±æ w nim \fBwszystkie\fR linie z dostêpem modemowym.
+Po³±czenie z linii pominiêtej nie bêdzie dodatkowo weryfikowane - u¿ytkownicy
+³±cz±cy siê ni± nie bêd± musieli podawaæ has³a telefonicznego.
+.SH ZOBACZ TAK¯E
+.BR dpasswd (1),
+.BR login (1),
+.BR d_passwd (5).
similarity index 62%
rename from old/pwunconv-old.8
rename to man/pl/dpasswd.8
index 381dc8086b45d2c5ef9743eea5dff7172b462e0e..b5cf5624a906d13a73cca4d1d33d67917e9e8410 100644 (file)
@@ -1,4 +1,5 @@
-.\" Copyright 1989 - 1993 Julianne Frances Haugh
+.\" {PTM/WK/1999-09-17}
+.\" Copyright 1991, Julianne Frances Haugh
 .\" All rights reserved.
 .\"
 .\" Redistribution and use in source and binary forms, with or without
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\"    $Id: pwunconv-old.8,v 1.1 1997/09/29 22:01:31 marekm Exp $
-.\"
-.TH PWUNCONV 8
-.SH NAME
-pwunconv \- restore old password file from shadow password file
-.SH SYNOPSIS
-.B pwunconv
-.SH DESCRIPTION
-\fBPwunconv\fR copies the password file information from the shadow
-password file,
-merging entries from an optional existing shadow file.
-The new password file is left in \fInpasswd\fR.
-This file is created with modes which allow read access for
-the owner only.
-There is no new shadow file.
-Password aging information is translated where possible.
-There is some loss of resolution in the password aging information.
-.SH FILES
-/etc/passwd \- old encrypted passwords and password aging
+.TH DPASSWD 8
+.SH NAZWA
+\fBdpasswd\fR - zmieñ has³o telefoniczne
+.SH SK£ADNIA
+.B dpasswd
+.RB [ - ( a | d )]
+.I pow³oka
+.SH OPIS
+\fBdpasswd\fR dodaje, usuwa i aktualizuje has³a telefoniczne (dialup
+passwords) dla pow³ok logowania u¿ytkowników.
+Ka¿dorazowo, gdy u¿ytkownik loguje siê przez liniê telefoniczn±,
+¿±dane jest od niego has³o telefoniczne (po poprawnym uwierzytelnieniu
+jego w³asnego has³a).
+.PP
+\fBdpasswd\fR bêdzie prosiæ o podanie nowego has³a dwukrotnie, by upewniæ
+siê, ¿e zosta³o ono poprawnie wprowadzone.
+.PP
+Argument \fIpow³oka\fR musi byæ pe³n±, ¶cie¿kow± nazw± programu zg³oszenia
+(logowania).
+.SH PLIKI
 .br
-/etc/shadow \- previously converted shadow password file
+.I /etc/d_passwd
 .br
-./npasswd \- new password file
-.SH SEE ALSO
-.BR passwd (1),
-.BR passwd (5),
-.BR shadow (5),
-.BR pwconv (8)
-.SH AUTHOR
-Julianne Frances Haugh (jfh@tab.com)
+.I /etc/dialups
+.SH ZOBACZ TAK¯E
+.BR login (1)
+.SH AUTOR
+Julianne Frances Haugh (jfh@austin.ibm.com)
similarity index 58%
rename from old/pwconv.8
rename to man/pl/faillog.5
index c13bdba4af32f1fdc20da7667a7a8f77d65ed692..6fc16cdf4d8c50ee09f2ab7272149f223d69999d 100644 (file)
@@ -1,4 +1,4 @@
-.\" Copyright 1989 - 1993, Julianne Frances Haugh
+.\" Copyright 1989 - 1994, Julianne Frances Haugh
 .\" All rights reserved.
 .\"
 .\" Redistribution and use in source and binary forms, with or without
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\"    $Id: pwconv.8,v 1.1 1997/12/07 23:27:13 marekm Exp $
+.\" Translation (c) 1998 "Gwidon S. Naskrent" <naskrent@hoth.amu.edu.pl>
+.\"    $Id: faillog.5,v 1.3 1999/09/20 20:56:42 wojtek2 Exp $
 .\"
-.TH PWCONV 8
-.SH NAME
-pwconv \- convert and update shadow password files
-.SH SYNOPSIS
-.B pwconv
-.SH DESCRIPTION
-\fBPwconv\fR copies the password file information from \fI/etc/passwd\fR
-to the shadow password file, \fI/etc/shadow\fR.
-If the \fI/etc/shadow\fR file does not exist, it is created with
-modes which only permit read access to the owner.
-Shadow entries in the System V Release 3.2 format will be silently
-converted to the new System V Release 4 format.
-Any entries which are missing fields will have those fields
-filled in with default values where appropriate.
-New entries are created with passwords which expire in 10000 days,
-with a last changed date of today,
-unless password aging information was already present.
-Shadow entries without corresponding entries in \fI/etc/passwd\fR
-are removed.
-.SH FILES
-/etc/passwd
-.br
-/etc/shadow
-.SH SEE ALSO
-.BR passwd (1),
-.BR passwd (5),
-.BR shadow (5),
-.BR pwunconv (8)
-.SH AUTHOR
-Julianne Frances Haugh (jfh@tab.com)
+.TH faillog 5
+.SH NAZWA
+faillog \- plik rejestruj±cy nieudane zalogowania
+.SH OPIS
+.I faillog
+prowadzi licznik nieudanych zalogowañ i limity dla ka¿dego konta.
+Plik ten sk³ada siê z rekordów o sta³ej d³ugo¶ci, indeksowanych
+liczbowym UID. Ka¿dy rekord zawiera licznik nieudanych zalogowañ
+od ostatniego pomy¶lnego logowania, maksymaln± liczbê pomy³ek
+przed zablokowaniem konta, konsolê na której nast±pi³o ostatnie
+nieudane logowanie, oraz datê tego¿.
+.PP
+Struktura tego pliku to
+.DS
+
+        struct faillog {
+                short   fail_cnt;
+                short   fail_max;
+                char    fail_line[12];
+                time_t  fail_time;
+        };
+
+.DE
+.SH PLIKI
+.IR /var/log/faillog " - rejestr nieudanych zalogowañ"
+.SH ZOBACZ TAK¯E
+.BR faillog (8)
+.SH AUTOR
+Julianne Frances Haugh (jfh@austin.ibm.com)
diff --git a/man/pl/faillog.8 b/man/pl/faillog.8
new file mode 100644 (file)
index 0000000..a180cc4
--- /dev/null
@@ -0,0 +1,95 @@
+.\" {PTM/WK/1999-09-18}
+.\" Copyright 1989 - 1994, Julianne Frances Haugh
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.TH FAILLOG 8
+.SH NAZWA
+faillog \- sprawd¼ faillog i ustaw limity b³êdnych logowañ
+.SH SK£ADNIA
+.TP 8
+.B faillog
+.RB [ -u
+.IR nazwa ]
+.RB [ -a ]
+.RB [ -t
+.IR dni ]
+.RB [ -m
+.IR max ]
+.RB [ -pr ] 
+.SH OPIS
+\fBfaillog\fR formatuje zawarto¶æ rejestru nieudanych prób rozpoczêcia sesji,
+\fI/var/log/faillog\fR, oraz obs³uguje ograniczenia i liczniki b³êdnych prób.
+Kolejno¶æ argumentów \fBfaillog\fR jest znacz±ca. Ka¿dy z argumentów jest
+natychmiast przetwarzany w zadanej kolejno¶ci.
+.PP
+Flaga \fB-p\fR powoduje, ¿e zapisy o nieudanych logowaniach wy¶wietlane bêd±
+w kolejno¶ci rosn±cych identyfikatorów u¿ytkowników (UID).
+Pos³u¿enie siê flag± \fB-u \fInazwa\fR spowoduje, ¿e zostanie wy¶wietlony
+wy³±cznie zapis dotycz±cy u¿ytkownika o tej \fInazwie\fR.
+U¿ycie \fB-t \fIdni\fR powoduje wy¶wietlanie wy³±cznie nieudanych prób
+logowania ¶wie¿szych ni¿ sprzed zadanej liczby \fIdni\fR.
+Flaga \fB-t\fR uniewa¿nia u¿ycie \fB-u\fR.
+Flaga \fB-a\fR powoduje wybranie wszystkich u¿ytkowników.
+W po³±czeniu z flag± \fB-p\fR flag, opcja ta wybiera wszystkich u¿ytkowników,
+dla których kiedykolwiek odnotowano niepomy¶ln± próbê logowania.
+Opcja ta nie ma znaczenia w po³±czeniu z flag± \fB-r\fR.
+.PP
+\fB-r\fR s³u¿y do zerowania licznika b³êdnych logowañ. Do poprawnego dzia³ania
+tej opcji wymagane jest prawo zapisu do \fI/var/log/faillog\fR.
+W po³±czeniu z \fB-u \fInazwa\fR s³u¿y do zerowania licznika b³êdów u¿ytkownika
+o podanej \fInazwie\fR.
+.PP
+Flaga \fB-m\fR ustawia maksymaln± liczbê b³êdów logowania, po której konto
+zostanie wy³±czone. Dla tej opcji wymagane jest prawo zapisu do
+\fI/var/log/faillog\fR.
+Argumenty \fB-m \fImax\fR powoduj±, ¿e wszystkie konta bêd± wy³±czane po
+\fImax\fR nieudanych próbach logowania.
+U¿ycie dodatkowo \fB-u \fInazwa\fR, ogranicza dzia³anie tej funkcji do
+u¿ytkownika o podanej \fInazwie\fR.
+Pos³u¿enie siê zerow± warto¶ci± \fImax\fR powoduje, ¿e liczba nieudanych prób
+rozpoczêcia sesji jest nieograniczona.
+Dla u¿ytkownika \fBroot\fR maksymalna liczba niepowodzeñ powinna byæ zawsze
+ustawiona na 0, by zapobiec atakom typu denial of service (odmowa obs³ugi).
+.PP
+Opcje mog± byæ ³±czone w praktycznie dowolny sposób. Ka¿da z opcji \fB-p\fR,
+\fB-r\fR i \fB-m\fR powoduje natychmiastowe wykonanie przy u¿yciu modyfikatora
+\fB-u\fR lub \fB-t\fR.
+.SH PRZESTROGI
+\fBfaillog\fR wy¶wietla wy³±cznie u¿ytkowników, którzy od ostatniej nieudanej
+próby nie mieli poprawnych logowañ.
+Chc±c wy¶wietliæ u¿ytkownika, który po ostatniej pora¿ce logowa³ siê ju¿
+pomy¶lnie, musisz jawnie za¿±daæ o nim informacji przy pomocy flagi \fB-u\fR.
+Mo¿esz tak¿e wy¶wietliæ wszystkich u¿ytkowników pos³uguj±c siê flag± \fB-a\fR.
+.PP
+W niektórych systemach zamiast /var/log wystêpuje /var/adm lub /usr/adm.
+.SH PLIKI
+.IR /var/log/faillog " - plik rejestracji b³êdów logowania"
+.SH ZOBACZ TAK¯E
+.BR login (1),
+.BR faillog (5)
+.SH AUTOR
+Julianne Frances Haugh (jfh@austin.ibm.com)
diff --git a/man/pl/gpasswd.1 b/man/pl/gpasswd.1
new file mode 100644 (file)
index 0000000..17f5e4b
--- /dev/null
@@ -0,0 +1,65 @@
+.\" {PTM/WK/1999-09-16}
+.\" 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.
+.\"
+.TH GPASSWD 1
+.SH NAZWA
+gpasswd \- administracja plikiem /etc/group
+.br
+.SH SK£ADNIA
+.B gpasswd \fIgrupa\fR
+.br
+.B gpasswd -a
+.I u¿ytkownik grupa
+.br
+.B gpasswd -d
+.I u¿ytkownik grupa
+.br
+.B gpasswd -R
+.I grupa
+.br
+.B gpasswd -r
+.I grupa
+.br
+.B gpasswd
+.RB [ -A
+.IR u¿ytkownik ,...]
+.RB [ -M
+.IR u¿ytkownik ,...]
+.I grupa
+.SH OPIS
+.B gpasswd
+s³u¿y do administrowania plikiem \fI/etc/group\fR (oraz \fI/etc/gshadow\fR
+je¶li zosta³a wykonana kompilacja ze zdefiniowanym SHADOWGRP). Ka¿da z grup
+mo¿e posiadaæ administratorów, cz³onków i has³o. Administrator systemu mo¿e
+pos³u¿yæ siê opcj± \fB-A\fR do zdefiniowania administratora(ów) grupy oraz
+opcj± \fB-M\fR do zdefiniowania jej cz³onków. Posiada on wszystkie prawa
+administratorów i cz³onków grup.
+.PP
+Administrator grupy mo¿e dodawaæ i usuwaæ u¿ytkowników przy pomocy,
+odpowiednio, opcji \fB-a\fR i \fB-d\fR. Administratorzy mog± te¿ u¿ywaæ opcji
+\fB-r\fR w celu usuniêcia has³a grupy. Je¿eli grupa nie posiada has³a,
+to polecenia 
+.BR newgrp (1)
+do przy³±czenia siê do grupy mog± u¿ywaæ tylko jej cz³onkowie.
+Opcja \fB-R\fR wy³±cza dostêp do grupy za pomoc± polecenia
+.BR newgrp (1).
+.PP
+.B gpasswd
+wywo³ane przez administratora grupy tylko z nazw± grupy pyta o jej has³o.
+Je¿eli has³o jest ustawione, to cz³onkowie grupy mog± nadal wykonywaæ
+.BR newgrp (1)
+bez has³a, inni musz± natomiast podaæ has³o.
+.SH PLIKI
+.IR /etc/group "   - informacja o grupach"
+.br
+.IR /etc/gshadow " - chroniona informacja o grupach"
+.SH ZOBACZ TAK¯E
+.BR newgrp (1),
+.BR groupadd (8),
+.BR groupdel (8),
+.BR groupmod (8),
+.BR grpck (8)
diff --git a/man/pl/groupadd.8 b/man/pl/groupadd.8
new file mode 100644 (file)
index 0000000..e80b4bd
--- /dev/null
@@ -0,0 +1,72 @@
+.\" {PTM/WK/0.1/VIII-1999}
+.\" 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: groupadd.8,v 1.1 2000/08/26 18:27:17 marekm Exp $
+.\"
+.TH GROUPADD 8
+.SH NAZWA
+groupadd - twórz now± grupê
+.SH SK£ADNIA
+.B groupadd
+.RB [ -g
+.I gid
+.RB [ -o ]]
+.I grupa
+.SH OPIS
+Polecenie \fBgroupadd\fR tworzy nowe konto grupy pos³uguj±c siê
+warto¶ciami podanymi w wierszu poleceñ i domy¶lnymi warto¶ciami z systemu.
+W razie potrzeby zostanie wprowadzona do systemu nowa grupa.
+Polecenie \fBgroupadd\fR posiada opcje:
+.TP
+.BI -g " gid"
+Numeryczna warto¶æ identyfikatora grupy. Warto¶æ ta musi byæ niepowtarzalna,
+chyba ¿e u¿yto opcji \fB-o\fR. Warto¶æ ID grupy nie mo¿e byæ ujemna. Domy¶lnie
+u¿ywana jest najmniejsza warto¶æ identyfikatora wiêksza ni¿ 99 a wiêksza ni¿
+jakiejkolwiek innej grupy.
+Warto¶ci miêdzy 0 a 99 s± zwykle zarezerwowane dla kont systemowych.
+.SH PLIKI
+.IR /etc/group "   - informacja o kontach grup"
+.br
+.IR /etc/gshadow " - bezpieczna informacja o kontach grup"
+.SH ZOBACZ TAK¯E
+.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 AUTOR
+Julianne Frances Haugh (jfh@austin.ibm.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.
similarity index 53%
rename from old/pwconv-old.8
rename to man/pl/groupdel.8
index a8ad7bbb8f0af2891f616cd8865535f3bec8ef3d..24cd254eb640f729d0ca0454dd76e4d889423002 100644 (file)
@@ -1,4 +1,5 @@
-.\" Copyright 1989 - 1993, Julianne Frances Haugh
+.\" {PTM/WK/0.1/VIII-1999}
+.\" Copyright 1991 - 1993, Julianne Frances Haugh
 .\" All rights reserved.
 .\"
 .\" Redistribution and use in source and binary forms, with or without
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\"    $Id: pwconv-old.8,v 1.1 1997/09/29 22:01:31 marekm Exp $
+.\"    $Id: groupdel.8,v 1.1 2000/08/26 18:27:17 marekm Exp $
 .\"
-.TH PWCONV 8
-.SH NAME
-pwconv \- convert and update shadow password files
-.SH SYNOPSIS
-.B pwconv
-.SH DESCRIPTION
-\fBPwconv\fR copies the old password file information to a new shadow
-password file,
-merging entries from an optional existing shadow file.
-The new password file is left in \fInpasswd\fR,
-the new shadow file is left in \fInshadow\fR.
-Both of these are files are created with modes which only permit
-read access to the owner.
-Existing shadow entries are copied as is.
-Shadow entries in the System V Release 3.2 format will be silently
-converted to the new System V Release 4 format on output.
-Any entries which are missing fields will have those fields
-filled in with default values where appropriate.
-New entries are created with passwords which expire in 10000 days,
-with a last changed date of today,
-unless password aging information was already present.
-Entries with blank passwords are not copied to the shadow file at all.
-.SH FILES
-/etc/passwd \- old encrypted passwords and password aging
+.TH GROUPDEL 8
+.SH NAZWA
+groupdel - usuñ grupê
+.SH SK£ADNIA
+.B groupdel
+.I grupa
+.SH OPIS
+Polecenie \fBgroupdel\fR zmienia systemowe pliki kont, usuwaj±c
+wszystkie zapisy odnosz±ce siê do \fIgrupy\fR.
+Wymieniona grupa musi istnieæ.
+.PP
+Musisz rêcznie sprawdziæ wszystkie systemy plików, by upewniæ siê, ¿e
+nie pozosta³y ¿adne pliki, dla których wymieniona grupa jest grup± w³a¶cicieli.
+.SH PRZESTROGI
+Nie mo¿esz usun±æ podstawowej grupy ¿adnego z istniej±cych u¿ytkowników.
+Musisz usun±æ u¿ytkownika przed usuniêciem takiej grupy.
+.SH PLIKI
+.IR /etc/group "   - informacja o grupach"
 .br
-/etc/shadow \- previously converted shadow password file
-.br
-./npasswd \- new password file
-.br
-./nshadow \- new shadow password file
-.SH SEE ALSO
+.IR /etc/gshadow " - bezpieczna informacja o grupach"
+.\" secure group information
+.SH ZOBACZ TAK¯E
+.BR chfn (1),
+.BR chsh (1),
+.BR useradd (8),
+.BR userdel (8),
+.BR usermod (8),
 .BR passwd (1),
-.BR passwd (5),
-.BR shadow (5),
-.BR pwunconv (8)
-.SH AUTHOR
-Julianne Frances Haugh (jfh@tab.com)
+.BR groupadd (8),
+.BR groupmod (8).
+.SH AUTOR
+Julianne Frances Haugh (jfh@austin.ibm.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.
diff --git a/man/pl/groupmod.8 b/man/pl/groupmod.8
new file mode 100644 (file)
index 0000000..bead76d
--- /dev/null
@@ -0,0 +1,77 @@
+.\" {PTM/WK/0.1/VIII-1999}
+.\" Copyright 1991, Julianne Frances Haugh
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\"    $Id: groupmod.8,v 1.1 2000/08/26 18:27:17 marekm Exp $
+.\"
+.TH GROUPMOD 8
+.SH NAZWA
+groupmod - zmieñ dane grupy
+.SH SK£ADNIA
+.B groupmod
+.RB [ -g
+.I gid
+.RB [ -o ]]
+.RB [ -n
+.IR nazwa_grupy ]
+.I grupa
+.SH OPIS
+Polecenie \fBgroupmod\fR modyfikuje systemowe pliki kont tak, by
+odzwierciedliæ w nich zmiany grup podane w wierszu poleceñ. Obs³uguje ono
+nastêpuj±ce opcje:
+.TP
+.BI -g " gid"
+Numeryczna warto¶æ identyfikatora grupy (group ID).
+Warto¶æ ta musi byæ niepowtarzalna, chyba ¿e u¿yto opcji \fB-o\fR.
+Nie mo¿e byæ ujemna. Warto¶ci pomiêdzy 0 a 99 s± zwykle zarezerwowane
+dla grup systemowych. 
+Pliki, dla których stary identyfikator jest identyfikatorem
+grupy pliku, wymagaj± rêcznej zmiany ID grupy.
+.TP
+.BI -n " nazwa_grupy"
+Nazwa grupy zostanie zmieniona z \fIgrupa\fR na \fInazwa_grupy\fR.
+.SH PLIKI
+.IR /etc/group "   - informacja o grupach"
+.br
+.IR /etc/gshadow " - bezpieczna informacja o grupach"
+.SH ZOBACZ TAK¯E
+.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 AUTOR
+Julianne Frances Haugh (jfh@austin.ibm.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.
diff --git a/man/pl/groups.1 b/man/pl/groups.1
new file mode 100644 (file)
index 0000000..6903d6c
--- /dev/null
@@ -0,0 +1,61 @@
+.\" {PRM/WK/1999-09-25}
+.\" Copyright 1991 - 1994, Julianne Frances Haugh
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.TH GROUPS 1
+.SH NAZWA
+groups \- wy¶wietl nazwy bie¿±cych grup
+.SH SK£ADNIA
+.B groups
+.RI [ u¿ytkownik ]
+.SH OPIS
+.B groups
+wy¶wietla nazwy lub warto¶ci bie¿±cych identyfikatorów grup.
+Je¿eli warto¶æ nie posiada odpowiedniego wpisu w \fI/etc/group\fR, to zostanie
+wy¶wietlona jako numeryczny identyfikator grupy.
+Opcjonalny parametr \fIu¿ytkownik\fR powoduje wy¶wietlenie grup dla danego
+\fIu¿ytkownika\fR.
+.SH UWAGA
+Systemy nie obs³uguj±ce równoczesnych grup (tj.takie, w których u¿ytkownik mo¿e
+w danej byæ cz³onkiem tylko jednej grupy, grupy aktywnej) bêd± wy¶wietlaæ
+informacjê z \fI/etc/group\fR.
+Do zmiany bie¿±cego rzeczywistego i efektywnego identyfikatora grupy u¿ytkownik
+musi u¿yæ polecenia \fBnewgrp\fR lub \fBsg\fR.
+.SH PLIKI
+.IR /etc/group " - informacja o grupach"
+.SH ZOBACZ TAK¯E
+.BR newgrp (1),
+.BR getuid (2),
+.BR getgid (2),
+.BR getgroups (2)
+.SH AUTOR
+Julianne Frances Haugh (jfh@austin.ibm.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.
diff --git a/man/pl/grpck.8 b/man/pl/grpck.8
new file mode 100644 (file)
index 0000000..55234e4
--- /dev/null
@@ -0,0 +1,103 @@
+.\" {PTM/WK/1999-09-17}
+.\" Copyright 1992 - 1993, Julianne Frances Haugh
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.TH GRPCK 1
+.SH NAZWA
+grpck \- weryfikacja spójno¶ci plików grup
+.SH SK£ADNIA
+.B grpck
+.RB [ -r ]
+.RI [ group
+.IR shadow ]
+.SH OPIS
+\fBgrpck\fR weryfikuje integralno¶æ informacji autentykacji systemowej.
+Sprawdzane s± wszystkie pozycje w plikach \fI/etc/group\fR
+i \fI/etc/gshadow\fR, by upewniæ siê, ¿e ka¿da z nich posiada w³a¶ciwy format
+i poprawne dane w ka¿dym z pól. U¿ytkownik monitowany jest o usuniêcie
+pozycji, które s± sformatowane niepoprawnie lub posiadaj± inne nie daj±ce
+siê skorygowaæ b³êdy.
+.P
+Kontrolowane jest czy ka¿da pozycja posiada
+.sp
+.in +.5i
+- w³a¶ciw± liczbê pól
+.br
+- unikaln± nazwê grupy
+.br
+- poprawn± listê cz³onków i administratorów
+.in -.5i
+.sp
+.P
+Kontrola w³a¶ciwej liczby pól i niepowtarzalnej nazwy grupy jest
+decyduj±ca. Je¿eli pozycja posiada b³êdn± liczbê pól, to u¿ytkownik jest
+proszony o usuniêcie ca³ej pozycji (wiersza).
+Je¿eli u¿ytkownik nie potwierdzi decyzji o usuniêciu, to pomijane s± wszelkie
+dalsze sprawdzenia.
+Pozycja z powtórzon± nazw± grupy powoduje monit o usuniêcie, ale nadal
+bêd± wykonywane pozosta³e sprawdzenia.
+Wszystkie inne b³êdy daj± ostrze¿enia a u¿ytkownik jest zachêcany
+do uruchomienia polecenia \fBgroupmod\fR, by je poprawiæ.
+.P
+Polecenia dzia³aj±ce na pliku \fI/etc/group\fR nie potrafi± zmieniaæ
+uszkodzonych lub powielonych pozycji. W takich okoliczno¶ciach powinien byæ
+u¿ywany \fBgrpck\fR, by usun±æ nieprawid³ow± pozycjê.
+.SH OPCJE
+Domy¶lnie \fBgrpck\fR dzia³a na plikach \fI/etc/group\fR oraz \fI/etc/gshadow\fR.
+Przy pomocy parametrów \fIgroup\fR i \fIshadow\fR u¿ytkownik mo¿e wybraæ inne
+pliki.
+Dodatkowo, u¿ytkownik mo¿e wykonaæ polecenie w trybie tylko-do-odczytu, poprzez
+podanie flagi \fB-r\fR.
+Powoduje to, ¿e na wszystkie pytania dotycz±ce zmian zostanie, bez ingerencji
+u¿ytkownika, u¿yta odpowied¼ \fBnie\fR.
+.SH PLIKI
+.IR /etc/group " - informacja o kontach grup"
+.br
+.IR /etc/gshadow " - zakodowana informacja o has³ach i administratorach grup"
+.br
+.IR /etc/passwd " -informacja o u¿ytkownikach"
+.SH ZOBACZ TAK¯E
+.BR groupmod (8),
+.BR group (5),
+.BR passwd (5),
+.BR shadow (5)
+.SH DIAGNOSTYKA
+Polecenie \fBgrpck\fR koñczy pracê z nastêpuj±cymi warto¶ciami kodów:
+.IP 0 5
+Powodzenie
+.IP 1 5
+B³±d sk³adni
+.IP 2 5
+Jedna lub wiêcej z³ych pozycji pliku grup
+.IP 3 5
+Niemo¿liwe otwarcie plików grup
+.IP 4 5
+Niemo¿liwa blokada plików grup
+.IP 5 5
+Niemo¿liwa aktualizacja plików grup
+.SH AUTOR
+Julianne Frances Haugh (jfh@austin.ibm.com)
diff --git a/man/pl/id.1 b/man/pl/id.1
new file mode 100644 (file)
index 0000000..71392b9
--- /dev/null
@@ -0,0 +1,57 @@
+.\" {PTM/WK/1999-09-25}
+.\" Copyright 1991, Julianne Frances Haugh
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.TH ID 1
+.SH NAZWA
+id - wy¶wietl nazwy bie¿±cych ID u¿ytkownika i grupy
+.SH SK£ADNIA
+.B id
+.RB [ -a ]
+.SH OPIS
+.B id
+wy¶wietla bie¿±ce nazwy (lub warto¶ci) rzeczywistych i efektywnych
+identyfikatorów u¿ytkownika i grupy.
+Je¿eli dana warto¶æ nie posiada odpowiedniego wpisu w \fI/etc/passwd\fR
+lub \fI/etc/group\fR, to zostanie wy¶wietlona bez odpowiedniej nazwy.
+Opcjonalna flaga \fB-a\fR wy¶wietla zestaw grup w systemach, które obs³uguj±
+równoczesne cz³onkostwo w wielu grupach.
+.SH PLIKI
+.IR /etc/passwd " - informacja o kontach u¿ytkowników"
+.br
+.IR /etc/group " - informacja o grupach"
+.SH ZOBACZ TAK¯E
+.BR getuid (2),
+.BR getgid (2),
+.BR getgroups (2)
+.SH AUTOR
+Julianne Frances Haugh (jfh@austin.ibm.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.
diff --git a/man/pl/lastlog.8 b/man/pl/lastlog.8
new file mode 100644 (file)
index 0000000..63d5e27
--- /dev/null
@@ -0,0 +1,64 @@
+.\" {PTM/WK/1999-09-18}
+.\" Copyright 1992, Phillip Street and Julianne Frances Haugh
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\"    @(#)lastlog.8   3.3     08:24:58        29 Sep 1993 (National Guard Release)
+.\"
+.TH LASTLOG 8
+.SH NAZWA
+lastlog \- sprawd¼ plik ostatnich logowañ (lastlog)
+.SH SK£ADNIA
+.B lastlog
+.RB [ -u
+.IR uid ]
+.RB [ -t
+.IR dni
+.SH OPIS
+\fBlastlog\fR formatuje i wy¶wietla zawarto¶æ dziennika ostatnich logowañ,
+\fI/var/log/lastlog\fR.  Wy¶wietlone zostan± \fBnazwa u¿ytkownika\fR,
+\fBport\fR i \fBczas ostatniego logowania\fR.
+Domy¶lnie (bez flag) pozycje pliku wy¶wietlane s± w kolejno¶ci identyfikatorów
+u¿ytkowników (UID).
+Wprowadzenie opcji \fB-u \fInazwa_u¿ytkownika\fR spowoduje wy¶wietlenie
+pozycji opisuj±cej ostatnie rozpoczêcie sesji tylko dla tego u¿ytkownika.
+U¿ycie \fB-t \fIdni\fR powoduje, ¿e bêd± wy¶wietlone ostatnie logowania
+u¿ytkowników nowsze ni¿ sprzed zadanej liczby \fIdni\fR.
+Opcja \fB-t\fR przes³ania u¿ycie opcji \fB-u\fR.
+.PP
+Je¿eli u¿ytkownik nigdy siê nie logowa³ to zamiast portu i czasu logowania
+zostanie wy¶wietlony komunikat \fB"**Never logged in**"\fR (nigdy siê nie
+logowa³).
+.SH PLIKI
+.IR /var/log/lastlog " - dziennik ostatnich logowañ"
+.SH PRZESTROGI
+Du¿e luki w numeracji UID powoduj±, ¿e program bêdzie pracowa³ d³u¿ej, nie
+wy¶wietlaj±c wyników (np. je¶li mmdf=800, za¶ ostatni uid=170, to program
+bêdzie sprawia³ wra¿enie zawieszonego w trakcie przetwarzania uid 171-799).
+.SH AUTORZY
+Julianne Frances Haugh (jfh@austin.ibm.com)
+.br
+Phillip Street
diff --git a/man/pl/limits.5 b/man/pl/limits.5
new file mode 100644 (file)
index 0000000..9ffa0f5
--- /dev/null
@@ -0,0 +1,79 @@
+.\" {PTM/WK/1999-09-18}
+.TH LIMITS 5
+.SH NAZWA
+limits \- definicja ograniczeñ zasobów
+.SH OPIS
+Plik
+.I limits
+(domy¶lnie /etc/limits lub LIMITS_FILE zdefiniowane w config.h)
+opisuje ograniczenia zasobów, jakie chcia³by¶ narzuciæ u¿ytkownikom.
+W³a¶cicielem tego pliku powinien byæ u¿ytkownik root i wy³±cznie dla niego
+plik ten powinien byæ dostêpny do odczytu.
+.PP
+Domy¶lnie u¿ytkownikowi 'root' nie s± narzucane ¿adne ograniczenia.
+W rzeczywisto¶ci, przy u¿yciu tego sposobu nie jest mo¿liwe narzucenie limitów
+dla kont równowa¿nych root (kont z UID równym 0).
+.PP
+Ka¿dy wiersz definiuje ograniczenie dla u¿ytkownika w postaci:
+.sp
+.I     u¿ytkownik £AÑCUCH_OGRANICZEÑ
+.PP
+\fB£AÑCUCH OGRANICZEÑ\fP sk³ada siê z po³±czonych definicji ograniczeñ zasobów.
+Ka¿de ograniczenie opisywane jest liter± z nastêpuj±c± po niej warto¶ci±
+numeryczn± limitu.
+.PP
+Dozwolone s± nastêpuj±ce identyfikatory:
+.sp
+A: max. przestrzeñ adresowa (KB)
+.br
+C: max. rozmiar pliku core (KB)
+.br
+D: max. rozmiar danych (KB)
+.br
+F: maksymalny rozmiar pliku (KB)
+.br
+M: max. locked-in-memory address space (KB)
+.br
+N: max. liczba otwartych plików
+.br
+R: max. resident set size (KB)
+.br
+S: max. rozmiar stosu (KB)
+.br
+T: max. czas procesora (CPU) (MIN)
+.br
+U: max. liczba procesów
+.br
+L: max. liczba sesji pracy dla tego u¿ytkownika
+.br
+P: priorytet procesu, ustawiany przez \fBsetpriority\fR(2).
+.PP
+Na przyk³ad, \fIL2D2048N5\fP jest poprawnym \fB£AÑCUCHEM OGRANICZEÑ\fP.
+Z uwagi na lepsz± czytelno¶ci przyjêto, ¿e poni¿sze zapisy s± równowa¿ne:
+.sp
+nazwa_u¿ytkownika L2D2048N5
+.br
+nazwa_u¿ytkownika L2 D2048 N5
+.PP
+Nale¿y podkre¶liæ, ¿e reszta wiersza po \fInazwie_u¿ytkownika\fP traktowana
+jest jako ³añcuch ograniczeñ, zatem komentarze nie s± dozwolone. Nieprawid³owy
+³añcuch ograniczeñ zostanie odrzucony (nie bêdzie brany pod uwagê) przez
+program login.
+.PP
+Nazwa u¿ytkownika równa "\fB*\fP" oznacza wpis domy¶lny.
+Je¿eli w pliku \fBLIMITS_FILE\fP posiadasz wiele takich wpisów, to jako
+domy¶lny zostanie u¿yty ostatni z nich.
+.PP
+Pojedyncza kreska "\fB-\fP" ca³kowicie wy³±cza ograniczenia dla u¿ytkownika.
+.PP
+Zauwa¿ te¿, proszê, ¿e wszystkie te ograniczenia definiowane s± w odniesieniu
+do pojedynczej sesji (per login). Nie s± one globalne ani sta³e. Byæ mo¿e bêd±
+kiedy¶ ograniczenia globalne, ale na razie tyle musi wystarczyæ ;)
+.SH PLIKI
+.I /etc/limits
+.SH ZOBACZ TAK¯E
+.BR login (1),
+.BR setpriority (2),
+.BR setrlimit (2)
+.SH AUTOR
+Cristian Gafton (gafton@sorosis.ro)
diff --git a/man/pl/login.1 b/man/pl/login.1
new file mode 100644 (file)
index 0000000..ecedc24
--- /dev/null
@@ -0,0 +1,134 @@
+.\" {PTM/WK/1999-09-25}
+.\" Copyright 1989 - 1994, Julianne Frances Haugh
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.TH LOGIN 1
+.SH NAZWA
+login \- rozpocznij sesjê pracy w systemie
+.SH SK£ADNIA
+.B login
+.RI [ u¿ytkownik " [" zmienne_¶rodowiska ]]
+.\" XXX - udokumentowaæ opcje -f -h -p -r
+.SH OPIS
+.B login
+s³u¿y do utworzenia nowej sesji pracy z systemem. Zwykle wywo³ywane jest
+automatycznie w odpowiedzi na zachêtê
+.I login:
+na terminalu u¿ytkownika.
+.B login
+mo¿e byæ specyficzne dla pow³oki i mo¿e zostaæ wywo³ane jako podproces.
+Najczê¶ciej,
+.B login
+traktowane jest przez pow³okê jako \fBexec login\fR, co powoduje opuszczenie
+przez u¿ytkownika bie¿±cej pow³oki.
+Próba wykonania \fBlogin\fR z pow³oki innej ni¿ zg³oszeniowa powoduje komunikat
+o b³êdzie.
+.PP
+Przy wywo³aniu polecenia z zachêty \fIlogin:\fR, u¿ytkownik mo¿e po swojej
+nazwie wprowadziæ zmienne ¶rodowiska. Zmienne te wprowadzane s± w postaci:
+\fBNAZWA=WARTO¦Æ\fR. Nie wszystkie zmienne mog± jednak byæ ustawione w ten
+sposób, szczególnie \fBPATH\fR, \fBHOME\fR i \fBSHELL\fR.
+Dodatkowo, zakazane mo¿e byæ \fBIFS\fR (input field separator: separator pól
+wej¶ciowych), je¿eli pow³ok± zg³oszeniow± u¿ytkownika \fB/bin/sh\fR.
+.PP
+U¿ytkownik pytany jest o has³o, je¶li takowe istnieje.
+Dla zapobie¿enia ujawnieniu has³a wy¶wietlanie wprowadzanych znaków jest
+wy³±czone. Dozwolona jest jedynie niewielka liczba nieudanych prób podania
+has³a. Po wyczerpaniu limitu prób \fBlogin\fR koñczy pracê za¶ po³±czenie
+komunikacyjne jest zrywane.
+.PP
+Je¿eli dla twego konta w³±czona jest kontrola wa¿no¶ci has³a, mo¿esz byæ
+proszony o podanie nowego has³a przed kontynuacj±. Bêdziesz wówczas musia³
+podaæ stare i nowe has³o. Wiêcej informacji na ten temat znajdziesz
+w \fBpasswd \fR(1).
+.PP
+Po poprawnym rozpoczêciu sesji (zalogowaniu siê), zostanie wy¶wietlona
+wiadomo¶æ dnia (je¶li jest) i informacja o stanie skrzynki pocztowej.
+Mo¿esz wy³±czyæ wy¶wietlanie zawarto¶ci pliku wiadomo¶ci dnia,
+\fI/etc/motd\fR, tworz±c zerowej wielko¶ci plik \fI.hushlogin\fR
+w swoim katalogu domowym.
+Informacja o stanie skrzynki pocztowej jest jedn± z:
+"\fBYou have new mail.\fR" (masz now± pocztê),
+"\fBYou have mail.\fR" (masz pocztê), lub "\fBNo Mail.\fR" (brak poczty) -
+stosownie do stanu skrzynki.
+.PP
+Identyfikator u¿ytkownika i grupy (UID i GID) zostan± ustawione wed³ug warto¶ci
+w pliku \fI/etc/passwd\fR.
+Warto¶ci \fB$HOME\fR, \fB$SHELL\fR, \fB$PATH\fR, \fB$LOGNAME\fR
+i \fB$MAIL\fR ustawiane s± stosownie do odpowiednich pól danego wpisu pliku
+hase³.
+Mog± byæ ustalane równie¿ warto¶ci ulimit, umask oraz nice wed³ug wpisów w polu
+GECOS.
+.PP
+W niektórych systemach zostanie ustawiona zmienna ¶rodowiskowa \fB$TERM\fR,
+wskazuj±ca na typ terminala na linii tty, jak podano w \fI/etc/ttytype\fR.
+.PP
+Mo¿e tak¿e zostaæ wykonany skrypt startowy (inicjacyjny) twojego interpretatora
+poleceñ.
+Przegl±dnij, proszê, odpowiedni± sekcjê dokumentacji opisuj±c± bardziej
+szczegó³owo tê funkcjê.
+.SH PRZESTROGI
+Niniejsza wersja \fBlogin\fR posiada wiele opcji kompilacji, z których tylko
+czê¶æ bêdzie mieæ zastosowanie w danej instalacji.
+.PP
+Po³o¿enie plików mo¿e byæ ró¿ne w zale¿no¶ci od konfiguracji systemu.
+.SH PLIKI
+.IR /etc/utmp " - lista bie¿±cych sesji pracy"
+.br
+.IR /etc/wtmp " - lista poprzednich sesji pracy"
+.br
+.IR /etc/passwd " - informacja o kontach u¿ytkowników"
+.br
+.IR /etc/shadow " - zakodowane has³a i informacja o ich wa¿no¶ci"
+.br
+.IR /etc/motd " - plik 'wiadomo¶ci dnia'"
+.br
+.IR /etc/nologin " - zapobiega logowaniu innych ni¿ root"
+.br
+.IR /etc/ttytype " - lista typów terminali"
+.br
+.IR $HOME/.profile " - skrypt startowy domy¶lnej pow³oki"
+.br
+.IR $HOME/.hushlogin " - zapobiega m.in. wy¶wietlaniu wiadomo¶ci dnia"
+.br
+.SH ZOBACZ TAK¯E
+.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 AUTOR
+Julianne Frances Haugh (jfh@austin.ibm.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.
diff --git a/man/pl/login.access.5 b/man/pl/login.access.5
new file mode 100644 (file)
index 0000000..cfcad56
--- /dev/null
@@ -0,0 +1,54 @@
+.\" {PTM/WK/1999-09-17}
+.TH LOGIN.ACCESS 5
+.\" .Dt SKEY.ACCESS 5
+.\" .Os FreeBSD 1.2
+.SH NAZWA
+login.access \- tabela kontroli dostêpu logowania
+.SH OPIS
+Plik
+.I login.access
+okre¶la kombinacje (u¿ytkownik, host) i/lub (u¿ytkownik, tty) 
+dla których logowanie bêdzie albo przyjête albo odrzucone.
+.PP
+Gdy kto¶ siê loguje, plik
+.I login.access
+przeszukiwany jest do znalezienia pierwszej pozycji pasuj±cej do danej
+kombinacji (u¿ytkownik, host), lub, w przypadku logowañ nie-sieciowych
+kombinacji (u¿ytkownik, tty). Pole zezwolenia w tej tablicy pozycji okre¶la
+czy logowanie bêdzie przyjête czy odrzucone.
+.PP
+Ka¿dy wiersz tabeli kontroli dostêpu logowania posiada trzy, oddzielone
+znakiem dwukropka, pola:
+.sp 1
+.IR    zezwolenie : u¿ytkownicy : pochodzenie
+.sp 1
+Pierwsze pole powinno zawieraæ znak "\fB+\fR" (dostêp zapewniony) lub "\fB-\fR"
+(zakaz dostêpu). Drugie z pól powinno zawieraæ listê jednego lub wiêcej nazw
+u¿ytkowników, grup lub s³owo
+.B ALL
+(zawsze pasuje do wszystkich). Trzecie pole powinno byæ list± jednej lub wiêcej
+nazw tty (dla logowañ nie-sieciowych), nazw hostów, domen (rozpoczynaj±cych siê
+od kropki), adresów hostów, internetowych numerów sieci (koñcz±cych siê
+kropk±), s³owem
+.B ALL
+(wszystkie - zawsze pasuje) lub
+.B LOCAL
+(dopasowuje dowolny ³añcuch nie zawieraj±cy kropki).
+Je¿eli uruchomisz NIS mo¿esz u¿yæ @nazwagrupysieciowej we wzorcu hosta
+lub u¿ytkownika.
+.\" @netgroupname
+.PP
+Operator
+.B EXCEPT
+(oprócz) umo¿liwia pisanie z³o¿onych regu³.
+.PP
+Plik grup przeszukiwany jest wy³±cznie wtedy, gdy nazwa nie pasuje do
+loguj±cego siê u¿ytkownika. Dopasowywane s± tylko te grupy, w których
+u¿ytkownik jest jawnie wymieniony: program nie sprawdza warto¶ci
+identyfikatora grupy g³ównej u¿ytkownika.
+.SH PLIKI
+.I /etc/login.access
+.SH ZOBACZ TAK¯E
+.BR login (1)
+.SH AUTOR
+Guido van Rooij
diff --git a/man/pl/login.defs.5 b/man/pl/login.defs.5
new file mode 100644 (file)
index 0000000..79c907d
--- /dev/null
@@ -0,0 +1,557 @@
+.\" {PTM/WK/1999-09-18}
+.\" Copyright 1991 - 1993, Julianne Frances Haugh and Chip Rosenthal
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.TH LOGIN 5
+.SH NAZWA
+/etc/login.defs \- konfiguracja logowania
+.SH OPIS
+Plik
+.I /etc/login.defs
+definiuje specyficzn± dla naszej maszyny konfiguracjê pakietu shadow login.
+Plik ten jest wymagany. Jego nieobecno¶æ nie wstrzyma dzia³ania systemu,
+ale prawdopodobnie spowoduje nieprzewidywalne dzia³anie.
+.PP
+Plik ten jest czytelnym plikiem tekstowym. Ka¿dy z jego wierszy opisuje jeden
+parametr konfiguracji. Wiersze sk³adaj± siê z nazwy parametru i jego warto¶ci,
+oddzielonych bia³ym znakiem. Ignorowane s± puste wiersze i wiersze komentarzy.
+Komentarze rozpoczynaj± siê od znaku '#', który musi byæ pierwszym znakiem
+wiersza (pomijaj±c bia³e znaki).
+.PP
+Istniej± cztery typy warto¶ci parametrów: napisy, logiczne (boolean),
+liczby i d³ugie liczby (long numbers). Napis jest z³o¿ony
+z dowolnych znaków drukowalnych. Parametr logiczny mo¿e mieæ albo warto¶æ
+"yes" albo "no". Niezdefiniowanemu parametrowi logicznemu lub parametrowi,
+któremu przypisano warto¶æ inn± od powy¿szych przypisane zostanie "no".
+Liczby (zarówno zwyk³e jak i d³ugie) mog± byæ warto¶ciami dziesiêtnymi,
+ósemkowymi (poprzed¼ warto¶æ cyfr± "0") albo szesnastkowymi (poprzed¼ warto¶æ
+sekwencj± "0x"). Maksymalne warto¶ci zwyk³ych i d³ugich parametrów
+numerycznych zale¿± od maszyny.
+.PP
+Obs³ugiwane s± nastêpuj±ce opcje konfiguracyjne:
+.\"
+.IP "CHFN_AUTH (logiczna)"
+Je¿eli ma warto¶æ
+.IR yes ,
+to programy
+.B chfn
+i
+.B chsh
+bêd± pytaæ o has³o przed dokonaniem zmian, chyba ¿e uruchamiane s± przez
+superu¿ytkownika.
+.\"
+.IP "CHFN_RESTRICT (napis)"
+Ten parametr okre¶la, jakie warto¶ci w polu
+.I gecos
+pliku
+.I passwd
+mog± byæ zmieniane przez zwyk³ych u¿ytkowników za pomoc± programu
+.B chfn
+Mo¿e on byæ dowoln± kombinacj± liter
+.IR f ,
+.IR r ,
+.IR w ,
+.IR h ,
+oznaczaj±cych odpowiednio: Full name (pe³na nazwa), Room number (numer pokoju),
+Work phone (telefon s³u¿bowy) i Home phone (telefon domowy).
+Je¶li parametr nie jest podany, to zmian mo¿e dokonywaæ wy³±cznie
+superu¿ytkownik.
+.\"
+.IP "CONSOLE (napis)"
+Je¶li podana, definicja ta okre¶la ograniczony zestaw linii, na których
+dozwolone jest rozpoczynanie sesji u¿ytkownika root. Próby logowania
+u¿ytkownika root niespe³niaj±ce ustalonych tu kryteriów zostan± odrzucone.
+Warto¶æ tego pola mo¿e wyst±piæ w jednej z dwu postaci: albo pe³nej nazwy
+¶cie¿kowej pliku, jak na przyk³ad
+.sp
+.ft I
+       CONSOLE /etc/consoles
+.ft R
+.sp
+albo listy linii terminalowych rozdzielonych dwukropkami, jak poni¿ej:
+.sp
+.ft I
+       CONSOLE console:tty01:tty02:tty03:tty04
+.ft R
+.sp
+(Zauwa¿, ¿e wymienione tu nazwy nie zawieraj± ¶cie¿ki /dev/).
+Je¿eli podano ¶cie¿kow± nazwê pliku, to ka¿dy jego wiersz powinien okre¶laæ
+jedn± liniê terminalow±. Je¶li parametr ten nie jest zdefiniowany albo podany
+plik nie istnieje, to u¿ytkownik root bêdzie móg³ siê logowaæ z dowolnej linii
+terminalowej. Poniewa¿ usuniêcie lub obciêcie pliku definiuj±cego
+dozwolone linie mo¿e spowodowaæ nieautoryzowane logowania roota, plik ten musi
+byæ chroniony. Tam, gdzie bezpieczeñstwo jest spraw± kluczow±, powinna byæ
+u¿ywana postaæ listy separowanej dwukropkami, co chroni przed potencjaln±
+prób± ataku w opisany sposób.
+.\"
+.IP "CONSOLE_GROUPS (napis)"
+XXX powinno zostaæ udokumentowane.
+.\"
+.IP "CRACKLIB_DICTPATH (napis)"
+XXX powinno zostaæ udokumentowane.
+.\"
+.IP "DEFAULT_HOME (logiczna)"
+XXX powinno zostaæ udokumentowane.
+.\"
+.IP "DIALUPS_CHECK_ENAB (logiczna)"
+Je¿eli ma warto¶æ
+.I yes
+a plik
+.I /etc/dialups
+istnieje, to na liniach telefonicznych wyszczególnionych w tym pliku s±
+w³±czane wtórne has³a (has³a telefoniczne).  Plik ten powinien zawieraæ listê
+linii telefonicznych (dialups), po jednej w wierszu, na przyk³ad:
+.nf
+.sp
+.ft I
+       ttyfm01
+       ttyfm02
+       \0\0.
+       \0\0.
+       \0\0.
+.ft R
+.sp
+.fi
+.\"
+.IP "ENVIRON_FILE (napis)"
+XXX powinno zostaæ udokumentowane.
+.\"
+.IP "ENV_HZ (napis)"
+Parametr ten okre¶la warto¶æ parametru ¶rodowiska HZ. Przyk³ad u¿ycia:
+.sp
+       \fIENV_HZ     HZ=50\fR
+.sp
+Je¿eli jest on zdefiniowany, to nie zostanie ustanowiona ¿adna warto¶æ HZ.
+.\"
+.IP "ENV_PATH (napis)"
+Parametr ten musi byæ zdefiniowany jako ¶cie¿ka przeszukiwania dla zwyk³ych
+u¿ytkowników. Przy logowaniu z UID innym ni¿ zero, zmienna ¶rodowiskowa PATH
+jest inicjowana t± w³a¶nie warto¶ci±. Jest to parametr wymagany; je¿eli nie
+zostanie zdefiniowany, to zostanie nadana, byæ mo¿e niepoprawna, warto¶æ
+domy¶lna.
+.\"
+.IP "ENV_SUPATH (napis)"
+Parametr ten musi byæ zdefiniowany jako ¶cie¿ka przeszukiwania dla
+superu¿ytkownika. Przy rozpoczynaniu sesji z UID równym zero, zmienna
+¶rodowiskowa PATH jest inicjowana t± w³a¶nie warto¶ci±. Jest to parametr
+wymagany; je¿eli nie zostanie zdefiniowany, to zostanie nadana, byæ mo¿e
+niepoprawna, warto¶æ domy¶lna.
+.\"
+.IP "ENV_TZ (napis)"
+Parametr ten zawiera informacjê s³u¿±c± do utworzenia zmiennej ¶rodowiskowej TZ.
+Jego warto¶æ musi byæ albo wprost wymagan± zawarto¶ci± TZ, albo
+pe³n± nazw± ¶cie¿kow± pliku zawieraj±cego tê informacjê. Przyk³ad u¿ycia:
+.sp
+       \fIENV_TZ\0\0\0\0TZ=CST6CDT\fP
+.sp
+lub
+.sp
+       \fIENV_TZ\0\0\0\0/etc/tzname\fP
+.sp
+Je¿eli podano nieistniej±cy plik, to TZ zostanie zainicjowane pewn± warto¶ci±
+domy¶ln±.  Je¿eli nie zdefiniowano tego parametru to nie bêdzie ustawiona
+¿adna warto¶æ TZ.
+.\"
+.IP "ERASECHAR (liczba)"
+T± warto¶ci± jest inicjowany terminalowy znak
+.I erase
+(kasowania). Jest to obs³ugiwane tylko w systemach z interfejsem
+.IR termio,
+np. System V. Je¿eli nie podano parametru, to znak kasowania zostanie
+zainicjowany na backspace. Informacjê powi±zan± znajdziesz w opisie KILLCHAR.
+.\"
+.IP "FAILLOG_ENAB (logiczna)"
+Je¿eli ustawiona na
+.I yes
+to nieudane logowania bêd± odnotowywane w pliku
+.I /var/log/faillog
+w formacie
+.BR faillog (8).
+.\"
+.IP "FAIL_DELAY (liczba)"
+Czas opó¼nienia, wyra¿ony w sekundach, po ka¿dej nieudanej próbie logowania.
+.\"
+.IP "FAKE_SHELL (napis)"
+Zamiast rzeczywistej pow³oki u¿ytkownika zostanie uruchomiony program okre¶lony
+warto¶ci± tego parametru. Nazwa widoczna (argv[0]) programu bêdzie jednak
+nazw± pow³oki. Program przed uruchomieniem faktycznej pow³oki mo¿e wykonywaæ
+dowoln± akcjê (logowanie, dodatkowe uwierzytelnianie, banner itp.).
+.\"
+.IP "FTMP_FILE (napis)"
+Okre¶la pe³n± ¶cie¿kow± nazwê pliku, w którym rejestrowane s± nieudane próby
+rozpoczynania sesji pracy. W przypadku nieudanej próby logowania do pliku
+dopisywana jest pozycja o formacie
+.IR utmp .
+Zauwa¿, ¿e ró¿ni siê to od rejestracji niepomy¶lnych logowañ do
+.IR /var/log/faillog ,
+gdy¿ opisywana funkcja odnotowuje wszystkie nieudane próby, podczas gdy 
+"faillog" kumuluje informacjê o pora¿kach danego u¿ytkownika. Je¶li nie
+podano tego parametru, to rejestracja bêdzie wy³±czona. Powi±zane informacje
+znajdziesz w opisie FAILLOG_ENAB i LOG_UNKFAIL_ENAB.
+.\"
+.IP "GID_MAX (liczba)"
+.IP "GID_MIN (liczba)"
+Zakres identyfikatorów grup, w obrêbie którego mo¿e wybieraæ program
+.BR groupadd .
+.\"
+.IP "HUSHLOGIN_FILE (nazwa)"
+Parametr u¿ywany do ustalenia okoliczno¶ci cichego logowania ("hushlogin").
+Okoliczno¶ci te mog± byæ ustalone na dwa sposoby. Po pierwsze, je¿eli warto¶ci±
+parametru jest nazwa pliku, a plik ten istnieje w katalogu domowym u¿ytkownika,
+to wprowadzane s± warunki cichego logowania. Zawarto¶æ pliku jest ignorowana;
+sama jego obecno¶æ powoduje ciche logowanie. Po drugie, je¿eli warto¶ci±
+parametru jest pe³na nazwa ¶cie¿kowa pliku a w pliku tym znaleziona zostanie
+nazwa u¿ytkownika lub nazwa jego pow³oki, to wprowadzone zostan± warunki
+cichego logowania. W tym przypadku, plik powinien mieæ format podobny do:
+.nf
+.sp
+.ft I
+       demo
+       /usr/lib/uucp/uucico
+       \0\0.
+       \0\0.
+       \0\0.
+.ft R
+.sp
+.fi
+Je¿eli nie zdefiniowano tego parametru, to warunki cichego logowania nigdy
+nie wyst±pi±. W trakcie cichego logowanie wstrzymane jest wy¶wietlanie
+wiadomo¶ci dnia (message of the day), ostatniego udanego i nieudanego
+rozpoczêcia sesji pracy, wy¶wietlanie stanu skrzynki pocztowej i sprawdzenie
+wieku has³a. Zauwa¿, ¿e zezwolenie na pliki cichego logowania w katalogach
+domowych u¿ytkowników pozwala im na wstrzymanie kontroli wa¿no¶ci
+has³a. Informacje zwi±zane z tym tematem znajdziesz w opisach MOTD_FILE,
+FILELOG_ENAB, LASTLOG_ENAB i MAIL_CHECK_ENAB.
+.\"
+.IP "ISSUE_FILE (napis)"
+Pe³na ¶cie¿kowa nazwa pliku wy¶wietlanego przed ka¿d± zachêt± do logowania.
+.\"
+.IP "KILLCHAR (liczba)"
+T± warto¶ci± inicjowany jest terminalowy znak
+.IR kill .
+Jest to obs³ugiwane tylko w systemach z interfejsem
+.IR termio,
+np. System V. Je¿eli nie podano parametru, to znak kasowania zostanie
+zainicjowany na \s-2CTRL/U\s0. Informacjê powi±zan± znajdziesz w opisie
+ERASECHAR.
+.\"
+.IP "LASTLOG_ENAB (logiczna)"
+Je¶li ma warto¶æ
+.IR yes ,
+i istnieje plik
+.IR /var/log/lastlog ,
+to w tym pliku bêdzie rejestrowane poprawne rozpoczêcie sesji pracy u¿ytkownika
+(zalogowanie siê). Ponadto, je¶li opcja ta jest w³±czona, to podczas logowania
+siê u¿ytkownika bêdzie wy¶wietlana informacja o liczbie ostatnich udanych
+i nieudanych logowañ. Zakoñczone niepowodzeniem logowania nie bêd± wy¶wietlane
+je¶li nie w³±czono FAILLOG_ENAB. W warunkach cichego logowanie nie
+bêd± wy¶wietlane informacje ani o pomy¶lnych ani o niepomy¶lnych logowaniach.
+.\"
+.IP "LOGIN_RETRIES (liczba)"
+Dozwolona liczba prób logowania przed zakoñczeniem pracy programu
+.BR login .
+.\"
+.IP "LOGIN_STRING (napis)"
+XXX powinno zostaæ udokumentowane.
+.IP "LOGIN_TIMEOUT (liczba)"
+XXX powinno zostaæ udokumentowane.
+.IP "LOG_OK_LOGINS (logiczna)"
+XXX powinno zostaæ udokumentowane.
+.IP "LOG_UNKFAIL_ENAB (logiczna)"
+Je¶li posiada warto¶æ
+.I yes
+to nieznane nazwy u¿ytkowników bêd± równie¿ odnotowywane je¶li w³±czone jest
+rejestrowanie nieudanych prób rozpoczêcia sesji. Zauwa¿, ¿e niesie to ze sob±
+potencjalne zagro¿enie bezpieczeñstwa: powszechn± przyczyn± nieudanego
+logowania jest zamiana nazwy u¿ytkownika i has³a, tryb ten zatem spowoduje,
+¿e czêsto w rejestrach nieudanych logowañ bêd± siê odk³adaæ jawne has³a.
+Je¿eli opcja ta jest wy³±czona, to nieznane nazwy u¿ytkowników bêd± pomijane
+w komunikatach o nieudanych próbach logowania.
+.\"
+.IP "MAIL_CHECK_ENAB (logiczna)"
+Je¿eli ma warto¶æ
+.IR yes ,
+to u¿ytkownik po rozpoczêciu sesji pracy bêdzie powiadamiany o stanie swojej
+skrzynki pocztowej. Informacjê zwi±zan± z tym tematem znajdziesz w opisie
+MAIL_DIR.
+.\"
+.IP "MAIL_DIR (napis)"
+Okre¶la pe³n± nazwê ¶cie¿kow± do katalogu zawieraj±cego pliki skrzynki
+pocztowej u¿ytkownika. Do powy¿szej ¶cie¿ki doklejana jest nazwa u¿ytkownika,
+tworz±c w ten sposób zmienn± ¶rodowiskow± MAIL - ¶cie¿kê do skrzynki
+u¿ytkownika. Musi byæ zdefiniowany albo niniejszy parametr albo parametr
+MAIL_FILE; je¶li nie zostan± zdefiniowane, to zostanie nadana, byæ mo¿e
+niepoprawna, warto¶æ domy¶lna. Zobacz tak¿e opis MAIL_CHECK_ENAB.
+.\"
+.IP "MAIL_FILE (napis)"
+Okre¶la nazwê pliku skrzynki pocztowej u¿ytkownika. Nazwa ta doklejana jest
+na koniec nazwy katalogu domowego u¿ytkownika tworz±c zmienn± ¶rodowiskow±
+MAIL - ¶cie¿kê do skrzynki u¿ytkownika. Musi byæ zdefiniowany albo niniejszy
+parametr albo parametr MAIL_DIR; je¶li nie zostan± zdefiniowane, to zostanie
+nadana, byæ mo¿e niepoprawna, warto¶æ domy¶lna. Zobacz tak¿e opis
+MAIL_CHECK_ENAB.
+.\"
+.IP "MD5_CRYPT_ENAB (logiczna)"
+Je¿eli ma warto¶æ
+.IR yes ,
+to program
+.B passwd
+bêdzie kodowaæ nowo zmieniane has³a przy pomocy nowego algorytmu
+.BR crypt (3),
+opartego o MD-5. Algorytm ten pierwotnie pojawi³ siê we FreeBSD i jest te¿
+obs³ugiwany przez libc-5.4.38 oraz glibc-2.0 (lub wy¿sz±) w Linuksie.
+Pozwala on na u¿ywanie hase³ d³u¿szych ni¿ 8 znaków (ograniczone przez
+.BR getpass (3)
+do 127 znaków), ale nie jest zgodny z tradycyjnymi implementacjami polecenia
+.BR crypt (3).
+.\"
+.IP "MOTD_FILE (napis)"
+Okre¶la listê rozdzielonych dwukropkami ¶cie¿ek do plików "wiadomo¶ci dnia"
+(message of the day, MOTD). Je¶li podany plik istnieje, to jego zawarto¶æ jest
+wy¶wietlana u¿ytkownikowi podczas rozpoczynania przez niego sesji pracy.
+Je¿eli parametr ten jest niezdefiniowany lub wykonywane jest ciche logowanie,
+to informacja ta bêdzie pomijana.
+.\"
+.IP "NOLOGINS_FILE (napis)"
+Okre¶la pe³n± nazwê ¶cie¿kow± pliku zabraniaj±cego logowañ dla u¿ytkowników
+innych ni¿ root. Je¿eli plik ten istnieje a u¿ytkownik inny ni¿ root usi³uje
+siê zalogowaæ, to wy¶wietlana zostanie zawarto¶æ pliku a u¿ytkownik bêdzie
+roz³±czony. Je¿eli nie podano tego parametru, to opisana funkcja bêdzie
+wy³±czona.
+.\"
+.IP "NOLOGIN_STR (napis)"
+XXX powinno zostaæ udokumentowane.
+.\"
+.IP "OBSCURE_CHECKS_ENAB (logiczna)"
+Je¿eli ma warto¶æ
+.IR yes ,
+to program
+.B passwd
+przed akceptacj± zmiany has³a bêdzie wykonywa³ dodatkowe sprawdzenia.
+Kontrole te s± do¶æ proste, a ich u¿ycie jest zalecane.
+Te sprawdzenia nieoczywisto¶ci s± pomijane, je¿eli
+.B passwd
+uruchamiane jest przez u¿ytkownika
+.IR root .
+Zobacz tak¿e opis PASS_MIN_LEN.
+.\"
+.IP "PASS_ALWAYS_WARN (logiczna)"
+XXX powinno zostaæ udokumentowane.
+.\"
+.IP "PASS_CHANGE_TRIES (liczba)"
+XXX powinno zostaæ udokumentowane.
+.\"
+.IP "PASS_MIN_DAYS (liczba)"
+Minimalna liczba dni miêdzy dozwolonymi zmianami has³a. Jakiekolwiek próby
+zmiany has³a podejmowane wcze¶niej zostan± odrzucone. Je¿eli nie podano tego
+parametru, to przyjêta zostanie warto¶æ zerowa.
+.\"
+.IP "PASS_MIN_LEN (liczba)"
+Minimalna liczba znaków w akceptowalnym ha¶le. Próba przypisania has³a o
+mniejszej liczbie znaków zostanie odrzucona. Warto¶æ zero wy³±cza tê
+kontrolê. Je¶li nie podano parametru, to przyjêta zostanie warto¶æ zerowa.
+.\"
+.IP "PASS_MAX_DAYS (liczba)"
+Maksymalna liczba dni, przez jak± mo¿e byæ u¿ywane has³o. Je¶li has³o jest
+stanie siê starsze, to rachunek zostanie zablokowany. Je¶li nie podano, to
+zostanie przyjêta bardzo du¿a warto¶æ.
+.\"
+.IP "PASS_MAX_LEN (liczba)"
+XXX powinno zostaæ udokumentowane.
+.\"
+.IP "PASS_WARN_AGE (liczba)"
+Liczba dni ostrzegania przed wyga¶niêciem has³a. Warto¶æ zerowa oznacza,
+¿e ostrze¿enie wyst±pi wy³±cznie w dniu utraty wa¿no¶ci has³a. Warto¶æ
+ujemna oznacza brak ostrze¿eñ. Brak parametru oznacza, ¿e ostrze¿enia nie
+bêd± wy¶wietlane.
+.\"
+.IP "PORTTIME_CHECKS_ENAB (logiczna)"
+Je¶li ma warto¶æ
+.IR yes ,
+za¶ plik
+.I /etc/porttime
+istnieje, to bêdzie on przegl±dany, by upewniæ siê czy u¿ytkownik mo¿e siê
+w danej chwili zalogowaæ na danej linii. Patrz tak¿e podrêcznik
+.BR porttime (5)
+.\"
+.IP "QMAIL_DIR (napis)"
+Dla u¿ytkowników Qmail, parametr ten okre¶la katalog, w którym przechowywana
+jest hierarchia Maildir.
+Zobacz te¿ MAIL_CHECK_ENAB.
+.\"
+.IP "QUOTAS_ENAB (logiczna)"
+Je¶li ma warto¶æ
+.I yes ,
+wówczas dla danego u¿ytkownika "ulimit," "umask" i "niceness" bêd±
+zainicjowane warto¶ciami podanymi (o ile s± podane) w polu
+.I gecos
+pliku
+.IR passwd .
+Patrz tak¿e podrêcznik
+.BR passwd (5).
+.\"
+.IP "SU_NAME (napis)"
+Przypisuje nazwê polecenia do uruchomionego "su -". Na przyk³ad, je¶li
+parametr ten jest zdefiniowany jako "su", to polecenie
+.BR ps (1)
+poka¿e uruchomione polecenie jako "-su". Je¶li parametr ten jest
+niezdefiniowany, to
+.BR ps (1)
+poka¿e nazwê faktycznie wykonywanej pow³oki, np. co¶ w rodzaju "-sh".
+.\"
+.IP "SULOG_FILE (napis)"
+Pokazuje pe³n± nazwê ¶cie¿kow± pliku, w którym rejestrowane jest wykorzystanie
+.BR su .
+Je¶li parametr ten nie jest okre¶lony, to rejestrowanie nie jest wykonywane.
+Poniewa¿ polecenie
+.B su
+mo¿e byæ u¿ywane podczas prób uwierzytelnienia has³a, do odnotowywania
+u¿ycia
+.B su
+powinny byæ u¿ywane albo niniejsza opcja
+albo
+.IR syslog .
+Zobacz te¿ opis SYSLOG_SU_ENAB.
+.\"
+.IP "SU_WHEEL_ONLY (logiczna)"
+XXX powinno zostaæ udokumentowane.
+.\"
+.IP "SYSLOG_SG_ENAB (logiczna)"
+XXX powinno zostaæ udokumentowane.
+.\"
+.IP "SYSLOG_SU_ENAB (logiczna)"
+Je¿eli ma warto¶æ
+.IR yes ,
+za¶ program
+.B login
+zosta³ skompilowany z obs³ug±
+.IR syslog ,
+to wszelkie dzia³ania
+.B su
+bêd± rejestrowane za pomoc±
+.IR syslog .
+Zobacz te¿ opis SULOG_FILE.
+.\"
+.IP "TTYGROUP (napis lub liczba)"
+Grupa (w³a¶cicielska) terminala inicjowana jest na nazwê b±d¼ numer tej grupy.
+Jeden z dobrze znanych ataków polega na wymuszeniu sekwencji kontrolnych
+terminala na linii terminalowej innego u¿ytkownika. Problemu tego mo¿na
+unikn±æ wy³±czaj±c prawa zezwalaj±ce innym u¿ytkownikom na dostêp do linii
+terminalowej, ale niestety zapobiega to równie¿ dzia³aniu programów takich
+jak
+.BR write .
+Innym rozwi±zaniem jest pos³u¿enie siê tak± wersj± programu
+.BR write ,
+która odfiltrowuje potencjalnie niebezpieczne sekwencje znaków. Nastêpnie
+programowi nale¿y przyznaæ rozszerzone prawa dostêpu (SGID) dla specjalnej
+grupy, ustawiæ grupê w³a¶cicieli terminala na tê grupê i nadaæ prawa dostêpu
+\fI0620\fR do linii. Definicja TTYGROUP powsta³a do obs³ugi tej w³a¶nie
+sytuacji.
+Je¶li pozycja ta nie jest zdefiniowana, to grupa terminala inicjowana jest
+na numer grupy u¿ytkownika.
+Zobacz tak¿e TTYPERM.
+.\"
+.IP "TTYPERM (liczba)"
+T± warto¶ci± inicjowane s± prawa terminala logowania. Typowymi warto¶ciami s±
+\fI0622\fR zezwalaj±ce innym na pisanie do linii lub \fI0600\fR zabezpieczaj±ce
+liniê przed innymi u¿ytkownikami. Je¿eli nie podano tego parametru, to prawa
+dostêpu do terminala zostan± zainicjowane warto¶ci± \fI0622\fR. Zobacz te¿
+TTYGROUP.
+.\"
+.IP "TTYTYPE_FILE (napis)"
+Okre¶la pe³n± nazwê ¶cie¿kow± pliku przypisuj±cego typy terminali do linii
+terminalowych. Ka¿dy z wierszy tego pliku zawiera rozdzielone bia³ym znakiem
+typ i liniê terminala. Na przyk³ad:
+.nf
+.sp
+.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 R
+.sp
+.fi
+Informacja ta s³u¿y do inicjowania zmiennej ¶rodowiska TERM. Wiersz
+rozpoczynaj±cy siê znakiem # bêdzie traktowany jak komentarz. Je¿eli nie
+podano tego parametru lub plik nie istnieje albo nie znaleziono w nim
+linii terminala, to zmienna TERM nie zostanie ustawiona.
+.\"
+.IP "UID_MAX (liczba)"
+XXX powinno zostaæ udokumentowane.
+.IP "UID_MIN (liczba)"
+XXX powinno zostaæ udokumentowane.
+.\"
+.IP "ULIMIT (d³uga liczba)"
+Warto¶ci± t± inicjowany jest limit wielko¶ci pliku. Cecha ta obs³ugiwana
+jest wy³±cznie w systemach posiadaj±cych
+.IR ulimit ,
+np. System V. Je¶li nie podano, to limit wielko¶ci pliku zostanie ustalony
+na pewn± wielk± warto¶æ.
+.\"
+.IP "UMASK (liczba)"
+T± warto¶ci± inicjowana jest maska praw dostêpu. Nie podana, ustawia mask±
+praw na zero.
+.\"
+.IP "USERDEL_CMD (napis)"
+XXX powinno zostaæ udokumentowane.
+.\"
+.SH POWI¡ZANIA
+Poni¿sze zestawienie pokazuje, które z programów wchodz±cych w sk³ad pakietu
+shadow wykorzystuj± jakie parametry.
+.na
+.IP login 12
+CONSOLE DIALUPS_CHECK_ENAB ENV_HZ ENV_SUPATH ENV_TZ ERASECHAR FAILLOG_ENAB
+FTMP_FILE HUSHLOGIN_FILE KILLCHAR LASTLOG_ENAB LOG_UNKFAIL_ENAB
+MAIL_CHECK_ENAB MAIL_DIR MOTD_FILE NOLOGINS_FILE PORTTIME_CHECKS_ENAB
+QUOTAS_ENAB TTYPERM TTYTYPE_FILE ULIMIT UMASK
+.IP newusers 12
+PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE UMASK
+.IP passwd 12
+OBSCURE_CHECKS_ENAB PASS_MIN_LEN
+.IP pwconv 12
+PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE
+.IP su 12
+ENV_HZ ENV_SUPATH ENV_TZ HUSHLOGIN_FILE MAIL_CHECK_ENAB MAIL_DIR
+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 B£ÊDY
+Niektóre z obs³ugiwanych parametrów konfiguracyjnych pozosta³y
+nieopisane w niniejszym podrêczniku.
+.SH ZOBACZ TAK¯E
+.BR login (1),
+.BR passwd (5),
+.BR faillog (5),
+.BR porttime (5),
+.BR faillog (8)
+.SH AUTORZY
+Julianne Frances Haugh (jfh@austin.ibm.com)
+.br
+Chip Rosenthal (chip@unicom.com)
similarity index 67%
rename from old/pwunconv.8
rename to man/pl/logoutd.8
index 7f6520db53efc89abdab5140fa62143a9ec9e0ea..d9f8f28a9886e201b888b50835cfd7ff3865d473 100644 (file)
@@ -1,4 +1,5 @@
-.\" Copyright 1989 - 1993 Julianne Frances Haugh
+.\" {PTM/WK/1999-09-17}
+.\" Copyright 1991, Julianne Frances Haugh
 .\" All rights reserved.
 .\"
 .\" Redistribution and use in source and binary forms, with or without
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\"    $Id: pwunconv.8,v 1.1 1997/12/14 20:07:22 marekm Exp $
-.\"
-.TH PWUNCONV 8
-.SH NAME
-pwunconv \- restore old password file from shadow password file
-.SH SYNOPSIS
-.B pwunconv
-.SH DESCRIPTION
-\fBPwunconv\fR copies the password file information from the shadow
-password file \fI/etc/shadow\fR, to the password file \fI/etc/passwd\fR.
-The \fI/etc/shadow\fR file is then removed.
-Password aging information is translated where possible.
-There is some loss of resolution in the password aging information.
-.SH FILES
-/etc/passwd
+.TH LOGOUTD 8
+.SH NAZWA
+logoutd \- wymuszenie ograniczeñ czasu logowania
+.SH SK£ADNIA
+.B logoutd
+.SH OPIS
+.B logoutd
+wymusza ograniczenia portów i czasów logowania podane w
+.IR /etc/porttime .
+.B logoutd
+powinno byæ uruchamiane z \fI/etc/rc\fR.
+Okresowo przegl±dany jest plik \fI/etc/utmp\fR. Sprawdzana jest ka¿da nazwa
+u¿ytkownika, by móc stwierdziæ czy posiada on zezwolenie na pracê w bie¿±cym
+czasie na danym porcie.
+Ka¿da sesja pracy (logowania) naruszaj±ca ograniczenia zawarte
+w \fI/etc/porttime\fR jest koñczona.
+.SH PLIKI
+.IR /etc/porttime " - zezwolenia dla logowania na portach"
 .br
-/etc/shadow
-.SH SEE ALSO
-.BR passwd (1),
-.BR passwd (5),
-.BR shadow (5),
-.BR pwconv (8)
-.SH AUTHOR
-Julianne Frances Haugh (jfh@tab.com)
+.IR /etc/utmp "     - bie¿±ce sesje pracy"
+.SH AUTOR
+Julianne Frances Haugh (jfh@austin.ibm.com)
diff --git a/man/pl/mkpasswd.8 b/man/pl/mkpasswd.8
new file mode 100644 (file)
index 0000000..815ea6a
--- /dev/null
@@ -0,0 +1,80 @@
+.\" {PTM/WK/1999-09-16}
+.\" 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: mkpasswd.8,v 1.1 1999/09/16 07:11:24 wojtek2 Exp $
+.\"
+.TH MKPASSWD 1
+.SH NAZWA
+mkpasswd \- aktualizuj pliki baz passwd i group
+.SH SK£ADNIA
+\fBmkpasswd\fR [\fB-fvgps\fR] \fIplik\fR
+.SH OPIS
+.B mkpasswd
+czyta plik w formacie okre¶lonym przez flagi i konwertuje go postaci
+odpowiedniego pliku bazy danych.
+Wymienione pliki baz danych u¿ywane s± do poprawienia wydajno¶ci dostêpu
+w systemach o du¿ej liczbie u¿ytkowników.
+Pliki wynikowe otrzymaj± nazwy \fIplik\fR.dir i \fIplik\fR.pag.
+.PP
+Opcja \fB-f\fR powoduje, ¿e \fBmkpasswd\fR ignoruje istnienie plików
+wynikowych i nadpisuje je.
+Normalnie \fBmkpasswd\fR skar¿y siê na istnienie plików wynikowych
+i koñczy pracê.
+.PP
+Opcja \fB-v\fR powoduje wy¶wietlanie informacji o ka¿dym konwertowanym
+rekordzie oraz komunikatu koñcowego.
+.PP
+Opcja \fB-g\fR traktuje plik ¼ród³owy tak, jak gdyby by³ on w formacie
+pliku \fI/etc/group\fR.
+Przy po³±czeniu z opcj± \fB-s\fR u¿ywany jest format pliku \fI/etc/gshadow\fR.
+.PP
+Opcja \fB-p\fR traktuje plik ¼ród³owy tak, jak gdyby by³ on w formacie
+pliku \fI/etc/passwd\fR.
+Jest to opcja domy¶lna.
+Przy po³±czeniu z opcj± \fB-s\fR u¿ywany jest format pliku \fI/etc/shadow\fR.
+.SH PRZESTROGI
+U¿ycie wiêcej ni¿ jednego pliku bazy ogranicza siê do systemów posiadaj±cych
+bibliotekê baz danych NDBM. Mo¿e zatem nie byæ dostêpne w ka¿dym systemie.
+.SH UWAGA
+Poniewa¿ wiêkszo¶æ poleceñ jest w stanie aktualizowaæ pliki bazy danych
+podczas dokonywania zmian, \fBmkpasswd\fR potrzebne jest jedynie
+do ponownego utworzenia usuniêtego lub zepsutego pliku bazy.
+.SH PLIKI
+.IR /etc/passwd "  - informacja o kontach u¿ytkowników"
+.br
+.IR /etc/shadow "  - chroniona informacja o u¿ytkownikach"
+.br
+.IR /etc/group "   - informacja o grupach"
+.br
+.IR /etc/gshadow " - chroniona informacja o grupach"
+.SH ZOBACZ TAK¯E
+.BR passwd (5),
+.BR group (5),
+.BR shadow (5)
+.SH AUTOR
+Julianne Frances Haugh (jfh@austin.ibm.com)
diff --git a/man/pl/newgrp.1 b/man/pl/newgrp.1
new file mode 100644 (file)
index 0000000..eaf3b18
--- /dev/null
@@ -0,0 +1,87 @@
+.\" {PTM/WK/1999-09-15}
+.\" 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: newgrp.1,v 1.2 1999/09/25 20:07:46 wojtek2 Exp $
+.\"
+.TH NEWGRP 1
+.SH NAZWA
+newgrp \- zmieñ identyfikator grupy
+.br
+sg \- wykonaj polecenie przy innym ID grupy
+.SH SK£ADNIA
+.BR newgrp " [" - ]
+.RI [ grupa ]
+.br
+.BR sg " [" - ]
+.RI [ grupa
+.RB [ -c
+.IR polecenie ]]
+.SH OPIS
+.B newgrp
+s³u¿y do zmiany bie¿±cego identyfikatora grupy (GID) podczas sesji logowania.
+Je¿eli podano opcjonaln± flagê \fB\-\fR, to ¶rodowisko u¿ytkownika zostanie
+ponownie zainicjowane, tak jak wówczas, gdy u¿ytkownik siê loguje. Je¿eli nie
+u¿yto flagi \fB\-\fR, to bie¿±ce ¶rodowisko, ³±cznie z bie¿±cym katalogiem
+roboczym, pozostaje bez zmian.
+.PP
+.B newgrp
+zmienia bie¿±cy faktyczny identyfikator grupy na identyfikator danej grupy
+lub, je¶li nie podano nazwy grupy, na identyfikator grupy domy¶lnej, podanej
+w \fI/etc/passwd\fR.
+Je¿eli grupa posiada has³o, za¶ u¿ytkownik nie ma has³a b±d¼ nie jest jej
+cz³onkiem, to zostanie poproszony o podanie has³a.
+Je¿eli has³o grupy jest puste za¶ u¿ytkownik nie jest jej cz³onkiem, to
+efektem bêdzie odmowa dostêpu.
+.PP
+Polecenie
+.B sg
+dzia³a podobnie do \fBnewgrp\fR, lecz nie zastêpuje pow³oki u¿ytkownika,
+wiêc po zakoñczeniu \fBsg\fR powracasz do swego poprzedniego identyfikatora
+grupy.
+.B sg
+przyjmuje tak¿e pojedyncze polecenie. Podane polecenie zostanie wykonane
+w pow³oce Bourne'a i musi byæ umieszczone w cudzys³owach.
+.\" enclosed in quotes.
+.SH PRZESTROGI
+Niniejsza wersja \fBnewgrp\fR posiada wiele opcji kompilacji,
+z których tylko czê¶æ mo¿e byæ u¿yteczna w konkretnej instalacji.
+.SH PLIKI
+.IR /etc/passwd " - informacja o kontach u¿ytkowników"
+.br
+.IR /etc/group  "  - informacja o grupach"
+.SH ZOBACZ TAK¯E
+.BR login (1),
+.BR id (1),
+.BR su (1)
+.SH AUTOR
+Julianne Frances Haugh (jfh@austin.ibm.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.
diff --git a/man/pl/newusers.8 b/man/pl/newusers.8
new file mode 100644 (file)
index 0000000..077da94
--- /dev/null
@@ -0,0 +1,69 @@
+.\" {PTM/WK/1999-09-15}
+.\" 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.3 1999/09/25 20:07:47 wojtek2 Exp $
+.\"
+.TH NEWUSERS 8
+.SH NAZWA
+newusers - wsadowa aktualizacja i tworzenie nowych u¿ytkowników
+.SH SK£ADNIA
+.B newusers
+.RI [ nowi_u¿ytkownicy ]
+.SH OPIS
+\fBnewusers\fR odczytuje plik zawieraj±cy pary: nazwa u¿ytkownika i podane
+jawnym tekstem has³o. Odczytan± informacjê wykorzystuje do aktualizacji grupy
+istniej±cych u¿ytkowników  lub utworzenia nowych.
+Ka¿dy wiersz pliku posiada taki sam format jak standardowy plik hase³ (patrz
+\fBpasswd\fR(5)), z nastêpuj±cymi wyj±tkami:
+.IP "\fIpw_passwd\fR" 10
+To pole zostanie zakodowane i u¿yte jako nowa warto¶æ zakodowanego has³a.
+.IP "\fIpw_age\fR"
+Dla chronionych hase³ (shadow) pole zostanie zignorowane je¶li u¿ytkownik ju¿
+istnieje.
+.IP "\fIpw_gid\fR"
+Pole to mo¿e zawieraæ nazwê istniej±cej grupy. Dany u¿ytkownik zostanie
+wówczas dodany do jej cz³onków. Je¿eli podano numeryczny identyfikator
+nieistniej±cej grupy, to zostanie za³o¿ona nowa grupa o tym identyfikatorze.
+.IP "\fIpw_dir\fR"
+Zostanie wykonane sprawdzenie czy istnieje katalog o tej nazwie. Je¿eli nie,
+to bêdzie on utworzony. W³a¶cicielem zostanie ustanowiony tworzony
+(lub aktualizowany) u¿ytkownik. Grupa katalogu zostanie ustawiona na grupê
+u¿ytkownika.
+.PP
+Polecenie to przeznaczone jest do u¿ytku w du¿ych systemach, gdzie aktualizuje
+siê wiele kont naraz.
+.SH PRZESTROGI
+.\" Po u¿yciu \fBnewusers\fR musi zostaæ wykonane polecenie \fImkpasswd\fR,
+.\" aktualizuj±ce pliki DBM hase³ (DBM password files).
+Plik ¼ród³owy, zawieraj±cy niezakodowane has³a, musi byæ chroniony.
+.SH ZOBACZ TAK¯E
+.\" mkpasswd(8), passwd(1), useradd(1)
+.BR passwd (1),
+.BR useradd (8)
+.SH AUTOR
+Julianne Frances Haugh (jfh@austin.ibm.com)
diff --git a/man/pl/passwd.1 b/man/pl/passwd.1
new file mode 100644 (file)
index 0000000..6e69c96
--- /dev/null
@@ -0,0 +1,201 @@
+.\" {PTM/WK/1999-09-20}
+.\" Copyright 1989 - 1994, Julianne Frances Haugh
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.TH PASSWD 1
+.SH NAZWA
+passwd \- zmieñ has³o u¿ytkownika
+.SH SK£ADNIA
+.B passwd
+.RB [ -f | -s ]
+.RI [ nazwa ]
+.br
+.B passwd
+.RB [ -g ]
+.RB [ -r | R ]
+.I grupa
+.br
+.B passwd
+.RB [ -x
+.IR max ]
+.RB [ -n
+.IR min ]
+.RB [ -w
+.IR ostrze¿ ]
+.RB [ -i
+.IR nieakt ]
+.I nazwa
+.br
+.B passwd
+.RB { -l | -u | -d | -S }
+.I nazwa
+.SH OPIS
+\fBpasswd\fR zmienia has³a kont u¿ytkowników i grup.
+Zwyk³y u¿ytkownik mo¿e zmieniæ wy³±cznie has³o w³asnego konta, superu¿ytkownik
+mo¿e zmieniaæ has³a dowolnych kont.
+Administrator grupy mo¿e zmieniæ has³o tej grupy.
+\fBpasswd\fR zmienia tak¿e informacje o koncie, takie jak pe³na nazwa
+u¿ytkownika, jego pow³oka zg³oszeniowa (logowania) czy daty i interwa³y dotycz±ce
+wa¿no¶ci has³a.
+.SS Zmiany has³a
+Na pocz±tku u¿ytkownik pytany jest o stare, dotychczasowe has³o, je¶li takie
+istnieje. Has³o to jest kodowane i porównywane z przechowywanym has³em.
+U¿ytkownik ma tylko jedn± próbê na wprowadzenie poprawnego has³a.
+Superu¿ytkownikowi zezwala siê na pominiêcie tego kroku, zatem mog± byæ
+zmienione has³a, których zapomniano.
+.PP
+Po wprowadzeniu has³a, sprawdzana jest informacja o jego wieku, by stwierdziæ
+czy u¿ytkownikowi wolno w danym czasie zmieniæ has³o.
+Je¿eli nie, to \fBpasswd\fR odmawia zmiany has³a i koñczy pracê.
+.PP
+Nastêpnie u¿ytkownik proszony jest o nowe, zastêpuj±ce dotychczasowe, has³o
+Has³o podlega sprawdzeniu jego zawi³o¶ci. Jako ogóln± wskazówk± mo¿na podaæ,
+¿e has³a powinny sk³adaæ siê z 6 do 8 znaków, zawieraj±c po jednym lub wiêcej
+znaków z ka¿dej z poni¿szych kategorii:
+.IP "" .5i
+ma³e litery alfabetu
+.IP "" .5i
+du¿e litery alfabetu
+.IP "" .5i
+cyfry od 0 do 9
+.IP "" .5i
+znaki interpunkcyjne
+.PP
+Nale¿y uwa¿aæ, by nie u¿yæ domy¶lnych systemowych znaków akcji erase lub kill.
+\fBpasswd\fR odrzuci ka¿de niedostatecznie skomplikowane has³o.
+.PP
+Je¶li has³o zostanie przyjête, to \fBpasswd\fR prosi o jego powtórzenie
+i porównuje drugi wpis z pierwszym.
+Oba wpisy musz± byæ takie same by has³o zosta³o zmienione.
+.SS Has³a grup
+Je¿eli pos³u¿ono siê opcj± \fB-g\fR, to zmieniane jest has³o podanej grupy.
+U¿ytkownik powinien byæ albo superu¿ytkownikiem albo administratorem tej grupy.
+Nie wystêpuje pytanie o bie¿±ce has³o grupy.
+Do usuwania bie¿±cego has³a danej grupy s³u¿y opcja \fB-g\fR w po³±czeniu
+z \fB-r\fR. Pozwala to na dostêp do grupy tylko jej cz³onkom.
+Opcja \fB-R\fR w po³±czeniu z \fR-g\fR ogranicza dostêp do grupy wszystkim
+u¿ytkownikom.
+.SS Informacja o wa¿no¶ci konta
+Superu¿ytkownik mo¿e zmieniaæ informacjê o wieku konta pos³uguj±c siê opcjami
+\fB-x\fR, \fB-n\fR, \fB-w\fR oraz \fB-i\fR.
+Opcja \fB-x\fR s³u¿y do ustawiania maksymalnej liczby dni, przez jakie has³o
+pozostaje wa¿ne.
+Po up³ywie \fImax\fR dni, has³o musi byæ zmienione.
+Opcja \fB-n\fR ustawia minimaln± liczbê dni, jakie musz± up³yn±æ zanim has³o
+bêdzie mog³o byæ zmienione.
+U¿ytkownik nie otrzyma zezwolenia na zmianê has³a przed up³ywem \fImin\fR dni.
+Opcja \fB-w\fR s³u¿y do ustawienia liczby dni przed up³ywem terminu wa¿no¶ci
+has³a, przez które u¿ytkownik bêdzie otrzymywa³ ostrze¿enie mówi±ce mu, ile dni
+pozosta³o do tej daty. Ostrze¿enia zaczn± pojawiaæ siê \fIostrze¿\fR dni przed
+up³ywem wa¿no¶ci has³a.
+Opcja \fB-i\fR (nieaktywno¶æ) s³u¿y do wy³±czania konta po up³ywie zadanej
+liczby dni po wyga¶niêciu has³a.
+Po up³ywie \fInieakt\fR dni od przeterminowania has³a u¿ytkownik nie mo¿e ju¿
+korzystaæ z konta.
+.SS Utrzymywanie i konserwacja konta
+Konta u¿ytkowników mog± byæ blokowane i odblokowywane przy pomocy flag \fB-l\fR
+i \fB-u\fR.
+Opcja \fB-l\fR wy³±cza konto zmieniaj±c jego has³o na warto¶æ nieodpowiadaj±c±
+¿adnemu mo¿liwemu zakodowanemu has³u.
+Opcja \fB-u\fR ponownie udostêpnia konto przywracaj±c uprzedni± warto¶æ has³a.
+.PP
+Stan konta mo¿na uzyskaæ przy pomocy opcji \fB-S\fR.
+Informacja o stanie sk³ada siê z 6 czê¶ci.
+Pierwsza wskazuje, czy konto u¿ytkownika jest zablokowane (L) (locked),
+nie posiada has³a (NP) (no password) lub ma funkcjonalne has³o (P) (password).
+Druga czê¶æ podaje datê ostatniej zmiany has³a.
+nastêpne cztery to minimalny wiek, maksymalny wiek, okres ostrzegania i okres
+nieaktywno¶ci has³a.
+.SS Podpowiedzi dotycz±ce hase³ u¿ytkownika
+Bezpieczeñstwo has³a zale¿y od si³y algorytmu koduj±cego oraz rozmiaru
+klucza. 
+Metoda kodowania u¿ywana w Systemie \fB\s-2UNIX\s+2\fR oparta jest o algorytm
+NBS DES i jest bardzo bezpieczna.
+Rozmiar klucza zale¿y od losowo¶ci wybranego has³a.
+.PP
+Naruszenia bezpieczeñstwa hase³ wynikaj± zwykle z beztroski przy wyborze lub
+przechowywaniu has³a.
+Z tego powodu powiniene¶ wybraæ has³o nie wystêpuj±ce w s³owniku. Has³o nie
+powinno te¿ byæ poprawn± nazw±, imieniem, nazwiskiem, numerem prawa jazdy,
+dat± urodzenia czy elementem adresu.
+Wszystkie z powy¿szych mog± byæ u¿yte do odgadniêcia has³a i naruszenia
+bezpieczeñstwa systemu.
+.PP
+Has³o musi byæ ³atwe do zapamiêtania, tak by nie byæ zmuszonym do jego
+zapisywania na kartce. Mo¿na to osi±gn±æ sklejaj±c ze sob± dwa krótkie s³owa,
+ze wstawionym pomiêdzy nie znakiem specjalnym lub cyfr±.
+Na przyk³ad, Pass%word, Lew7konia.
+.PP
+Inna metoda konstrukcji has³a polega na wyborze ³atwego do zapamiêtania zdania
+(np. z literatury) i wyborze pierwszej b±d¼ ostatniej litery ka¿dego wyrazu.
+Przyk³adem tego jest
+.IP "" .5i
+Ask not for whom the bell tolls.
+.PP
+co daje
+.IP "" .5i
+An4wtbt,
+.PP
+albo te¿
+.IP "" .5i
+A czy znasz Ty, bracie m³ody
+.PP
+co daje
+.IP "" .5i
+A3zTbm.
+.PP
+W zasadzie mo¿esz byæ pewien, ¿e niewielu crackerów bêdzie mieæ takie has³o
+w swoim s³owniku. Powiniene¶ jednak wybraæ w³asn± metodê konstrukcji hase³
+a nie polegaæ wy³±cznie na opisanych tutaj.
+.SS Uwagi o has³ach grup
+Has³a grup s± nieod³±cznym problemem bezpieczeñstwa, gdy¿ do ich znajomo¶ci
+uprawniona jest wiêcej ni¿ jedna osoba.
+Grupy s± jednak u¿ytecznym narzêdziem pozwalaj±cym na wspó³pracê miêdzy
+ró¿nymi u¿ytkownikami.
+.SH PRZESTROGI
+Mog± nie byæ obs³ugiwane wszystkie opcje. 
+Sprawdzanie z³o¿ono¶ci has³a mo¿e ró¿niæ siê w ró¿nych instalacjach. Zachêca
+siê u¿ytkownika do wyboru tak skomplikowanego has³a, z jakim bêdzie mu
+wygodnie.
+U¿ytkownicy mog± nie móc zmieniæ has³a w systemie przy w³±czonym NIS, je¶li
+nie s± zalogowani do serwera NIS.
+.SH PLIKI
+.IR /etc/passwd " - informacja o kontach u¿ytkowników"
+.br
+.IR /etc/shadow " - zakodowane has³a u¿ytkowników"
+.SH ZOBACZ TAK¯E
+.BR passwd (3),
+.BR shadow (3),
+.BR group (5),
+.BR passwd (5)
+.SH AUTOR
+Julianne Frances Haugh (jfh@austin.ibm.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.
diff --git a/man/pl/passwd.5 b/man/pl/passwd.5
new file mode 100644 (file)
index 0000000..e4bcad8
--- /dev/null
@@ -0,0 +1,88 @@
+.\" Copyright (c) 1993 Michael Haardt (u31b3hs@pool.informatik.rwth-aachen.de), Fri Apr  2 11:32:09 MET DST 1993
+.\"
+.\" This is free documentation; you can redistribute it and/or
+.\" modify it under the terms of the GNU General Public License as
+.\" published by the Free Software Foundation; either version 2 of
+.\" the License, or (at your option) any later version.
+.\"
+.\" The GNU General Public License's references to "object code"
+.\" and "executables" are to be interpreted as the output of any
+.\" document formatting or typesetting system, including
+.\" intermediate and printed output.
+.\"
+.\" This manual is distributed in the hope that it will be useful,
+.\" but WITHOUT ANY WARRANTY; without even the implied warranty of
+.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+.\" GNU General Public License for more details.
+.\"
+.\" You should have received a copy of the GNU General Public
+.\" License along with this manual; if not, write to the Free
+.\" Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139,
+.\" USA.
+.\"
+.\" Modified Sun Jul 25 10:46:28 1993 by Rik Faith (faith@cs.unc.edu)
+.\" Modified Sun Aug 21 18:12:27 1994 by Rik Faith (faith@cs.unc.edu)
+.\" Modified Sun Jun 18 01:53:57 1995 by Andries Brouwer (aeb@cwi.nl)
+.\"
+.\" Polish translation nov.1996 piotr.pogorzelski@ippt.gov.pl
+.\"
+.TH PASSWD 5 "24 Czerwiec 1993" "Linux" "Podrêcznik programisty linuxowego"
+.SH NAZWA
+passwd \- plik passwd definiuj±cy u¿ytkowników systemu
+.SH OPIS
+Plik 
+.B passwd
+jest plikiem tekstowym ASCII, który zawiera listê u¿ytkowników systemu
+oraz has³a jakich musz± u¿ywaæ aby otrzymaæ dostêp do systemu.
+Ka¿dy powinien móc odczytaæ informacje z pliku passwd (poniewa¿ has³a
+w tym pliku s± zakodowane jest to poprawne) lecz prawo do modyfikacji
+pliku powinien mieæ tylko administrator.
+Dodaj±c nowego u¿ytkownika nale¿y pole przeznaczone na has³o pozostawiæ puste
+i u¿yæ programu \fBpasswd\fP(1). Gwiazdka lub inny pojedynczy znak w polu
+has³a oznacza, ze u¿ytkownik nie mo¿e dostaæ siê do systemu przez \fBlogin\fP(1). 
+Je¶li g³ówny system plików jest na ram dysku (/dev/ram) nale¿y
+plik passwd skopiowaæ na dyskietkê przechowuj±c± g³ówny system plików
+przed zamkniêciem systemu. Trzeba równie¿ sprawdziæ prawa dostêpu do.
+Je¶li trzeba utworzyæ grupê u¿ytkowników, ich identyfikatory grupy
+GID musz± byæ równe oraz musi istnieæ odpowiednia pozycja w pliku
+\fI/etc/group\fP, lub grupa nie bêdzie istnia³a.  
+.PP
+Ka¿da pozycja zajmuje jeden wiersz w formacie:
+.sp
+login_name:has³o:UID:GID:imie_nazwisko:katalog:pow³oka
+.RS
+.RE
+.sp
+Krótki opis poszczególnych pól:
+.sp
+.RS
+.TP 1.0in
+.I login_name
+nazwa u¿ytkownika w systemie (radzê u¿ywaæ ma³ych liter).
+.TP
+.I has³o
+zakodowane has³o u¿ytkownika.
+.TP
+.I UID
+identyfikator u¿ytkownika (liczbowo).
+.TP
+.I GID
+identyfikator grupy (liczbowo).
+.TP
+.I imiê_nazwisko
+Opisowa nazwa u¿ytkownika, zwykle imiê i nazwisko (wykorzystywane
+przez programy pocztowe).
+.TP
+.I katalog
+katalog macierzysty ($HOME) u¿ytkownika.
+.TP
+.I pow³oka
+program jaki uruchomiæ po wej¶ciu u¿ytkownika do systemu.
+(je¶li pusty u¿yj /bin/sh, je¶li istnieje /etc/shells i
+dana pow³oka nie jest tam wymieniona, u¿ytkownik nie bêdzie móg³
+dostaæ siê do systemu wykorzystuj±c protokó³ ftp).
+.RE
+.SH PLIKI
+.I /etc/passwd
+.SH "ZOBACZ TAK¯E"
+.BR passwd "(1), " login "(1), " group (5)
diff --git a/man/pl/porttime.5 b/man/pl/porttime.5
new file mode 100644 (file)
index 0000000..83f0af6
--- /dev/null
@@ -0,0 +1,81 @@
+.\" {PTM/WK/1999-09-17}
+.\" Copyright 1989 - 1990, Julianne Frances Haugh
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.TH PORTTIME 5
+.SH NAZWA
+porttime \- plik czasów dostêpu do portów
+.SH OPIS
+.I porttime
+zawiera listê urz±dzeñ tty, nazw u¿ytkowników i dozwolonych czasów logowania.
+.PP
+Ka¿da pozycja sk³ada siê z trzech, rozdzielonych dwukropkiem, pól.
+Pierwsze pole zawiera listê oddzielonych przecinkami urz±dzeñ tty lub
+gwiazdkê, wskazuj±c±, ¿e pozycja ta pasuje do wszystkich urz±dzeñ tty.
+Drugie pole zawiera listê oddzielonych przecinkami nazw u¿ytkowników lub
+gwiazdkê, wskazuj±c±, ¿e pozycja dotyczy wszystkich u¿ytkowników.
+Trzecie pole jest list± oddzielonych przecinkami dozwolonych czasów dostêpu.
+.PP
+Ka¿da pozycja czasu dostêpu sk³ada siê z zera lub wiêcej dni tygodnia,
+skróconych do \fBSu\fR, \fBMo\fR, \fBTu\fR, \fBWe\fR, \fBTh\fR, \fBFr\fR
+i \fBSa\fR, po których nastêpuje para rozdzielonych my¶lnikiem czasów.
+Do okre¶lenia dni roboczych (od poniedzia³ku do pi±tku) mo¿e byæ u¿yty
+skrót \fBWk\fR. Skrót \fBAl\fR oznacza ka¿dy dzieñ. Je¿eli nie podano dni
+tygodnia przyjmowane jest \fBAl\fR.
+.SH PRZYK£ADY
+Poni¿szy wpis zezwala u¿ytkownikowi \fBjfh\fR na dostêp do ka¿dego portu
+w dni robocze od godziny 9-tej do 17-tej.
+.br
+.sp 1
+       *:jfh:Wk0900-1700
+.br
+.sp 1
+Poni¿sze pozycje pozwalaj± na dostêp do konsoli (/dev/console) wy³±cznie
+u¿ytkownikom \fBroot\fR i \fBoper\fR - w dowolnym czasie.
+Przyk³ad ten pokazuje, ¿e plik \fI/etc/porttime\fR stanowi uporz±dkowan±
+listê czasów dostêpu. Ka¿dy inny u¿ytkownik bêdzie pasowa³ do drugiej pozycji
+listy, nie zezwalaj±cej na dostêp w ¿adnym czasie.
+.br
+.sp 1
+       console:root,oper:Al0000-2400
+.br
+       console:*:
+.br
+.sp 1
+Poni¿szy wpis zezwala na dostêp do dowolnego portu u¿ytkownikowi \fBgames\fR
+poza godzinami pracy.
+.br
+.sp 1
+       *:games:Wk1700-0900,SaSu0000-2400
+.br
+.sp 1
+.SH PLIKI
+.IR /etc/porttime " - plik zawieraj±cy czasy dostêpu do portów"
+.SH ZOBACZ TAK¯E
+.BR login (1)
+.SH AUTOR
+Julianne Frances Haugh (jfh@austin.ibm.com)
diff --git a/man/pl/pw_auth.3 b/man/pl/pw_auth.3
new file mode 100644 (file)
index 0000000..ddebc0c
--- /dev/null
@@ -0,0 +1,152 @@
+.\" {PTM/WK/1999-09-15}
+.\" Copyright 1992 - 1993, Julianne Frances Haugh
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\"    $Id: pw_auth.3,v 1.1 1999/09/16 07:11:23 wojtek2 Exp $
+.\"
+.TH PWAUTH 3
+.SH NAZWA
+pwauth \- procedury uwierzytelniania hase³ zdefiniowane przez administratora
+.SH SK£ADNIA
+.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 OPIS
+.B pw_auth
+wywo³uje funkcje zdefiniowane przez administratora dla danego u¿ytkownika.
+.PP
+\fIcommand\fR jest nazw± programu uwierzytelniania (autentykacji).
+Jest ona otrzymywana z informacji zawartej pliku hase³ u¿ytkowników.
+Odpowiedni ³añcuch (z pola has³a) zawiera jedn± lub wiêcej, rozdzielonych
+¶rednikami, nazw plików wykonywalnych.
+Programy zostan± wykonane w zadanej kolejno¶ci.
+Dla ka¿dej z przyczyn (reason) podanych ni¿ej podane s± argumenty wiersza
+poleceñ.
+.PP
+\fIuser\fR jest nazw± sprawdzanego u¿ytkownika, w postaci podanej w pliku
+\fI/etc/passwd\fR.
+Pozycje opisuj±ce u¿ytkowników indeksowane s± nazw± u¿ytkownika.
+Pozwala to na istnienie powtarzaj±cych siê identyfikatorów (UID). Ka¿da
+z ró¿nych nazw u¿ytkownika o tym samym identyfikatorze mo¿e
+posiadaæ inny program i informacjê autentykuj±c±.
+.PP
+Ka¿da z dopuszczalnych przyczyn autentykacji obs³ugiwana jest w potencjalnie
+ró¿ny sposób.
+Do komunikacji z u¿ytkownikiem dostêpne s± standardowe deskryptory plików
+0, 1 i 2, chyba ¿e wspomniano inaczej.
+Do ustalenia to¿samo¶ci u¿ytkownika wykonuj±cego ¿±danie uwierzytelnienia
+mo¿e zostaæ u¿yty rzeczywisty identyfikator.
+Przyczyna (\fIreason\fR) jest jedn± z
+.IP \fBPW_SU\fR 1i
+Wykonaj uwierzytelnienie dla bie¿±cego rzeczywistego identyfikatora u¿ytkownika
+próbuj±c prze³±czyæ rzeczywisty ID na podanego u¿ytkownika.
+Program uwierzytelniaj±cy zostanie wywo³any z opcj± \fB-s\fR poprzedzaj±c±
+nazwê u¿ytkownika.
+.IP \fBPW_LOGIN\fR 1i
+Wykonaj uwierzytelnienie dla danego u¿ytkownika tworz±c now± sesjê pracy
+(loginow±). Program uwierzytelniaj±cy zostanie wywo³any z opcj± \fB-l\fR,
+po której wyst±pi nazwa u¿ytkownika.
+.IP \fBPW_ADD\fR 1i
+Utwórz nowy wpis dla danego u¿ytkownika.
+Pozwala to programowi uwierzytelniania na zainicjowanie miejsca dla nowego
+u¿ytkownika.
+Program zostanie wywo³any z opcj± \fB-a\fR, po której wyst±pi nazwa u¿ytkownika.
+.IP \fBPW_CHANGE\fR 1i
+Zmieñ istniej±cy wpis dla danego u¿ytkownika.
+Pozwala to na programowi uwierzytelniaj±cemu na zmianê informacji autentykuj±cej
+dla istniej±cego u¿ytkownika.
+Program zostanie wywo³any z opcj± \fB-c\fR poprzedzaj±c± nazwê u¿ytkownika.
+.IP \fBPW_DELETE\fR 1i
+Usuñ informacjê autentykuj±c± dla danego u¿ytkownika.
+Pozwala programowi uwierzytelniania na odzyskanie miejsca po u¿ytkowniku, który
+nie bêdzie ju¿ identyfikowany przy u¿yciu tego programu.
+Program uwierzytelniania zostanie wywo³any z opcj± \fB-d\fR,
+po której wyst±pi nazwa u¿ytkownika.
+.IP \fBPW_TELNET\fR 1i
+Wykonaj uwierzytelnianie u¿ytkownika pod³±czaj±cego siê do systemu przy pomocy
+polecenia \fBtelnet\fR.
+Program zostanie wywo³any z opcj± \fB-t\fR, po której wyst±pi nazwa u¿ytkownika.
+.IP \fBPW_RLOGIN\fR 1i
+Wykonaj uwierzytelnienie u¿ytkownika pod³±czaj±cego siê do systemu przy pomocy
+polecenia \fBrlogin\fR.
+Program zostanie wywo³any z opcj± \fB-r\fR, po której wyst±pi nazwa u¿ytkownika.
+.IP \fBPW_FTP\fR 1i
+Wykonaj uwierzytelnienie u¿ytkownika pod³±czaj±cego siê do systemu przy pomocy
+polecenia \fBftp\fR.
+Program uwierzytelniania zostanie wywo³any z opcj± \fB-f\fR,
+po której wyst±pi nazwa u¿ytkownika.
+Do komunikacji z u¿ytkownikiem NIE s± dostêpne standardowe deskryptory plików.
+Deskryptor standardowego wej¶cia zostanie pod³±czony do procesu macierzystego,
+za¶ pozosta³e dwa deskryptory plików dostan± pod³±czone do \fI/dev/null\fR.
+Funkcja \fBpw_auth\fR bêdzie potokowaæ pojedynczy wiersz danych do programu
+uwierzytelniania pos³uguj±c siê deskryptorem 0.
+.IP \fBPW_REXEC\fR 1i
+Wykonaj uwierzytelnienie u¿ytkownika pod³±czaj±cego siê do systemu przy pomocy
+polecenia \fIrexec\fR.
+Program zostanie wywo³any z opcj± \fB-x\fR, po której wyst±pi nazwa u¿ytkownika.
+Do komunikacji ze zdalnym u¿ytkownikiem NIE s± dostêpne standardowe
+deskryptory plików.
+Deskryptor standardowego wej¶cia zostanie pod³±czony do procesu macierzystego,
+za¶ pozosta³e dwa deskryptory plików dostan± pod³±czone do \fI/dev/null\fR.
+Funkcja \fBpw_auth\fR bêdzie potokowaæ pojedynczy wiersz danych do programu
+uwierzytelniania pos³uguj±c siê deskryptorem 0.
+.PP
+Ostatni argument stanowi dane autentykacji, u¿ywane przez
+.B PW_FTP
+oraz
+.B PW_REXEC
+Jest on traktowany jak pojedynczy wiersz tekstu potokowany do programu
+uwierzytelniaj±cego.
+Dla
+.B PW_CHANGE
+warto¶æ \fIinput\fR jest warto¶ci± poprzedniej nazwy u¿ytkownika,
+je¶li zmieniana jest nazwa.
+.SH PRZESTROGI
+Funkcja ta nie tworzy faktycznej sesji.
+Wskazuje jedynie, czy u¿ytkownik powinien otrzymaæ zezwolenie na jej
+utworzenie.
+.PP
+Obecnie opcje sieciowe nie s± jeszcze przetestowane.
+.SH DIAGNOSTYKA
+Funkcja \fBpw_auth\fR zwraca 0 je¶li program uwierzytelniania zakoñczy³
+dzia³anie z zerowym kodem powrotu, w przeciwnym wypadku warto¶æ niezerow±.
+.SH ZOBACZ TAK¯E
+.BR login (1),
+.BR passwd (1),
+.BR su (1),
+.BR useradd (8),
+.BR userdel (8),
+.BR usermod (8)
+.SH AUTOR
+Julianne Frances Haugh (jfh@austin.ibm.com)
diff --git a/man/pl/pwauth.8 b/man/pl/pwauth.8
new file mode 100644 (file)
index 0000000..e87926c
--- /dev/null
@@ -0,0 +1,65 @@
+.\" {PTM/WK/1999-09-15}
+.\" Copyright 1992, Julianne Frances Haugh
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\"    $Id: pwauth.8,v 1.2 1999/09/25 20:07:47 wojtek2 Exp $
+.\"
+.TH PWAUTH 8
+.SH NAZWA
+pwauth \- definiowane przez administratora uwierzytelnianie hase³
+.SH OPIS
+Administrator systemu mo¿e zdefiniowaæ listê programów, jakie s± u¿ywane
+do potwierdzenia to¿samo¶ci u¿ytkownika.
+Programy te podawane s± zamiast informacji o zakodowanym ha¶le obecnej
+w pliku \fI/etc/passwd\fR albo \fI/etc/shadow\fR.
+Narzêdzia administruj±ce kontami u¿ytkowników sprawdzaj± pole zakodowanego
+has³a i stwierdzaj± czy u¿ytkownik posiada zdefiniowany przez administratora
+program uwierzytelniaj±cy (autentykuj±cy).
+Funkcja \fBpw_auth\fR zostanie wywo³ana ka¿dorazowo, gdy jeden z tych
+programów administracyjnych stwierdzi, ¿e zmieniany u¿ytkownik posiada
+zdefiniowane programy uwierzytelniania.
+.PP
+Pocz±tkowy wpis tworzony jest przez polecenie \fBuseradd\fR.
+Zmiany, takie jak zmiana informacji autentykuj±cej lub usuniêcie konta
+u¿ytkownika, spowoduj± wywo³anie funkcji \fBpw_auth\fR. Pozwala to
+na utrzymanie aktualno¶ci informacji dla ka¿dego konta.
+.PP
+Programy uwierzytelniaj±ce nie tworz± sesji pracy (loginowych) ani
+sesji sieciowych. Kod zakoñczenia programu uwierzytelniaj±cego jest
+wskazaniem czy akcja bêdzie dozwolona.
+Proces wo³aj±cy musi posiadaæ odpowiednie uprawnienia do samodzielnego
+utworzenia sesji pracy lub sesji sieciowej.
+.SH ZOBACZ TAK¯E
+.BR login (1),
+.BR passwd (1),
+.BR su (1),
+.BR useradd (8),
+.BR userdel (8),
+.BR usermod (8),
+.BR pw_auth (3)
+.SH AUTOR
+Julianne Frances Haugh (jfh@austin.ibm.com)
diff --git a/man/pl/pwck.8 b/man/pl/pwck.8
new file mode 100644 (file)
index 0000000..2b71c61
--- /dev/null
@@ -0,0 +1,109 @@
+.\" {PTM/WK/1999-09-14}
+.\" Copyright 1992, Julianne Frances Haugh
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\"    $Id: pwck.8,v 1.3 1999/09/25 20:07:47 wojtek2 Exp $
+.\"
+.TH PWCK 1
+.SH NAZWA
+pwck - weryfikacja spójno¶ci plików hase³
+.SH OPIS
+\fBpwck\fR [\fB-r\fR] [\fIpasswd\fR \fIshadow\fR]
+.SH OPIS
+\fBpwck\fR weryfikuje integralno¶æ informacji autentykacji systemowej.
+W plikach \fI/etc/passwd\fR i \fI/etc/shadow\fR sprawdzane s± wszystkie
+pozycje, by upewniæ siê, ¿e ka¿da z nich posiada w³a¶ciwy format
+i poprawne dane w ka¿dym z pól. U¿ytkownik monitowany jest o usuniêcie
+pozycji, które s± sformatowane niepoprawnie lub posiadaj± inne nie daj±ce
+siê skorygowaæ b³êdy.
+.P
+Kontrolowane jest czy ka¿da pozycja posiada
+.sp
+.in +.5i
+- w³a¶ciw± liczbê pól
+.br
+- unikaln± nazwê u¿ytkownika
+.br
+- poprawny identyfikator u¿ytkownika i grupy
+.br
+- poprawn± grupê g³ówn±
+.br
+- poprawny katalog domowy
+.br
+- poprawn± pow³okê zg³oszeniow± (startow±)
+.in -.5i
+.sp
+.P
+Kontrola w³a¶ciwej liczby pól i niepowtarzalnej nazwy u¿ytkownika jest
+decyduj±ca. Je¿eli pozycja posiada b³êdn± liczbê pól, to u¿ytkownik jest
+proszony o usuniêcie ca³ej pozycji (wiersza).
+Je¿eli u¿ytkownik nie potwierdzi decyzji o usuniêciu, to pomijane s± wszelkie
+dalsze sprawdzenia.
+Pozycja z powtórzon± nazw± u¿ytkownika powoduje monit o usuniêcie, ale nadal
+bêd± wykonywane pozosta³e sprawdzenia.
+Wszystkie inne b³êdy daj± ostrze¿enia a u¿ytkownik jest zachêcany
+do uruchomienia polecenia \fBusermod\fR, by je poprawiæ.
+.P
+Polecenia dzia³aj±ce na pliku \fI/etc/passwd\fR nie potrafi± zmieniaæ
+uszkodzonych lub powielonych pozycji. W takich okoliczno¶ciach powinien byæ
+u¿ywany \fBpwck\fR, by usun±æ nieprawid³ow± pozycjê.
+.SH OPCJE
+Domy¶lnie \fBpwck\fR dzia³a na plikach \fI/etc/passwd\fR oraz \fI/etc/shadow\fR.
+Przy pomocy parametrów \fIpasswd\fR i \fIshadow\fR u¿ytkownik mo¿e wybraæ inne
+pliki.
+Dodatkowo, u¿ytkownik mo¿e wykonaæ polecenie w trybie tylko-do-odczytu, poprzez
+podanie flagi \fB-r\fR.
+Powoduje to, ¿e na wszystkie pytania dotycz±ce zmian zostanie, bez ingerencji
+u¿ytkownika, u¿yta odpowied¼ \fBnie\fR.
+.SH PLIKI
+.IR /etc/passwd " - informacja o kontach u¿ytkowników"
+.br
+.IR /etc/shadow " - zakodowana informacja o has³ach"
+.br
+.IR /etc/group "  - informacja o grupach"
+.SH ZOBACZ TAK¯E
+.BR usermod (8),
+.BR group (5),
+.BR passwd (5),
+.BR shadow (5)
+.SH DIAGNOSTYKA
+Polecenie \fBpwck\fR koñczy pracê z nastêpuj±cymi warto¶ciami kodów
+zakoñczenia:
+.IP 0 5
+Powodzenie
+.IP 1 5
+B³±d sk³adni
+.IP 2 5
+Jedna lub wiêcej z³ych pozycji pliku hase³
+.IP 3 5
+Niemo¿liwe otwarcie plików hase³
+.IP 4 5
+Niemo¿liwa blokada plików hase³
+.IP 5 5
+Niemo¿liwa aktualizacja plików hase³
+.SH AUTOR
+Julianne Frances Haugh (jfh@austin.ibm.com)
diff --git a/man/pl/pwconv.8 b/man/pl/pwconv.8
new file mode 100644 (file)
index 0000000..0916ca2
--- /dev/null
@@ -0,0 +1,66 @@
+.\" {PTM/WK/1999-09-14}
+.\" $Id: pwconv.8,v 1.1 1999/09/14 18:41:35 wojtek2 Exp $
+.TH PWCONV 8 "26 wrze¶nia 1997"
+.SH NAZWA
+pwconv, pwunconv, grpconv, grpunconv - konwersja dot. chronionych plików hase³ i grup
+.SH SK£ADNIA
+.B pwconv
+.br
+.B pwunconv
+.br
+.B grpconv
+.br
+.B grpunconv
+.SH OPIS
+Wszystkie te cztery programy dzia³aj± na zwyk³ych i dodatkowych (shadow)
+plikach hase³ i grup:
+.IR /etc/passwd ", " /etc/group ", " /etc/shadow " i " /etc/gshadow .
+
+.B pwconv
+.RI "tworzy " shadow " z " passwd " i opcjonalnie istniej±cego " shadow .
+.B pwunconv
+.RI "tworzy " passwd " z " passwd " i " shadow " a nastêpnie usuwa " shadow .
+.B grpconv
+.RI "tworzy " gshadow " z " group " i opcjonalnie istniej±cego " gshadow .
+.B grpunconv
+.RI "tworzy " group " z " group " i " gshadow " a nastêpnie usuwa " gshadow .
+
+Ka¿dy z programów zdobywa niezbêdne blokady przed konwersj±.
+
+.BR pwconv " i " grpconv
+s± podobne. Po pierwsze, z pliku dodatkowego usuwane s± pozycje, które
+nie istniej± w pliku g³ównym. Nastêpnie, w pliku dodatkowym aktualizowane s±
+pozycje nie posiadaj±ce 'x' jako has³a w pliku g³ównym. Dodawane s± pozycje
+brakuj±ce w stosunku do pliku g³ównego. Na koniec, has³a w pliku g³ównym
+zastêpowane s± przez 'x'. Programy te mog± s³u¿yæ zarówno do pocz±tkowej
+konwersji jak i do aktualizacji dodatkowego pliku hase³ je¶li plik g³ówny
+zmieniany by³ rêcznie.
+
+Przy dodawaniu nowych wpisów do
+.IR /etc/shadow
+.B pwconv
+u¿yje warto¶ci
+.BR PASS_MIN_DAYS ", " PASS_MAX_DAYS " i " PASS_WARN_AGE
+z pliku
+.IR /etc/login.defs .
+
+.RB "Podobnie, " pwunconv " oraz " grpunconv
+s± zbli¿one.  Has³a w pliku g³ównym aktualizowane s± na podstawie pliku
+dodatkowego (shadow). Wpisy istniej±ce w pliku g³ównym, a nie posiadaj±ce
+odpowiedników w dodatkowym s± pozostawiane bez zmian. Na koniec usuwany
+jest plik dodatkowy.
+
+Czê¶æ informacji o wa¿no¶ci hase³ jest tracona przez
+.BR pwunconv .
+Przeprowadza on konwersjê tego, co potrafi.
+.SH B£ÊDY
+B³êdy w plikach hase³ czy grup (takie jak nieprawid³owe czy powtórzone
+pozycje) mog± spowodowaæ zapêtlenie siê omawianych programów lub ró¿nego
+rodzaju inne b³êdne zachowanie. Przed konwersj± na lub z dodatkowych plików
+hase³ lub grup proszê uruchomiæ \fBpwck\fR i \fBgrpck\fR, by poprawiæ tego
+rodzaju b³êdy.
+.SH ZOBACZ TAK¯E
+.BR login.defs (5),
+.BR pwck (8),
+.BR grpck (8),
+.BR shadowconfig (8)
diff --git a/man/pl/shadow.3 b/man/pl/shadow.3
new file mode 100644 (file)
index 0000000..5ad19a2
--- /dev/null
@@ -0,0 +1,148 @@
+.\" {PTM/WK/1999-09-16}
+.\" Copyright 1989 - 1993, Julianne Frances Haugh
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\"    $Id: shadow.3,v 1.2 1999/09/25 20:07:47 wojtek2 Exp $
+.\"
+.TH SHADOW 3
+.SH NAZWA
+shadow \- procedury zakodowanego pliku hase³
+.SH SK£ADNIA
+.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 OPIS
+.I shadow
+operuje na zawarto¶ci dodatkowego pliku hase³ (shadow) \fI/etc/shadow\fR.
+Plik \fI#include\fR opisuje strukturê
+.sp
+struct spwd {
+.in +.4i
+.br
+char   *sp_namp; /* nazwa u¿ytkownika (login) */
+.br
+char   *sp_pwdp; /* zakodowane has³o */
+.br
+long   sp_lstchg; /* ostatnia zmiana has³a */
+.br
+int    sp_min; /* dni do dozwolonej zmiany */
+.br
+int    sp_max; /* dni przed wymagan± zmian± */
+.br
+int    sp_warn; /* dni ostrze¿enia o wyga¶niêciu */
+.br
+int    sp_inact; /* dni przed wy³±czeniem konta */
+.br
+int    sp_expire; /* data wa¿no¶ci konta */
+.br
+int    sp_flag; /* zarezerwowane do przysz³ego u¿ytku */
+.br
+.in -.5i
+}
+.PP
+Znaczenie poszczególnych pól:
+.sp
+sp_namp \- wska¼nik do zakoñczonej przez nul nazwy u¿ytkownika.
+.br
+sp_pwdp \- wska¼nik do zakoñczonego nul has³a.
+.br
+sp_lstchg \- dni od 1 stycznia 1970; data ostatniej zmiany has³a.
+.br
+sp_min \- dni, przed up³ywem których has³o nie mo¿e byæ zmienione.
+.br
+sp_max \- dni, po których has³o musi byæ zmienione.
+.br
+sp_warn \- dni przed dat± up³ywu wa¿no¶ci has³a, od których
+u¿ytkownik jest ostrzegany od nadchodz±cym terminie wa¿no¶ci.
+.br
+sp_inact \- dni po up³yniêciu wa¿no¶ci konta, po których konto jest
+uwa¿ane za nieaktywne i wy³±czane.
+.br
+sp_expire \- dni od 1 stycznia 1970, data gdy konto zostanie
+wy³±czone.
+.br
+sp_flag \- zarezerwowane do przysz³ego u¿ytku.
+.SH OPIS
+\fBgetspent\fR, \fBgetspname\fR, \fBfgetspent\fR i \fBsgetspent\fR
+zwracaj± wska¼nik do \fBstruct spwd\fR.
+\fBgetspent\fR zwraca nastêpn± pozycjê w pliku, za¶ \fBfgetspent\fR
+nastêpn± pozycjê z podanego strumienia. Zak³ada siê, ¿e strumieñ
+ten jest plikiem o poprawnym formacie.
+\fBsgetspent\fR zwraca wska¼nik do \fBstruct spwd\fR u¿ywaj±c jako
+wej¶cia dostarczonego ³añcucha.
+\fBgetspnam\fR wyszukuje od bie¿±cej pozycji w pliku pozycji pasuj±cej
+do \fBname\fR.
+.PP
+\fBsetspent\fR i \fBendspent\fR mog± zostaæ u¿yte do odpowiednio,
+rozpoczêcia i zakoñczenia dostêpu do chronionego pliku hase³ (shadow).
+.PP
+Do zapewnienia wy³±cznego dostêpu do pliku \fI/etc/shadow\fR powinny
+byæ u¿ywane procedury \fBlckpwdf\fR i \fBulckpwdf\fR.
+\fBlckpwdf\fR przez 15 sekund usi³uje uzyskaæ blokadê przy pomocy
+\fBpw_lock\fR.
+Kontynuuje próbê uzyskania drugiej blokady przy pomocy \fBspw_lock\fR
+przez czas pozosta³y z pocz±tkowych 15 sekund.
+Je¿eli po up³ywie 15 sekund którakolwiek z tych prób zawiedzie,
+to \fBlckpwdf\fR zwraca -1.
+Je¿eli uzyskano obie blokady, to zwracane jest 0.
+.SH DIAGNOSTYKA
+Je¿eli nie ma dalszych pozycji lub podczas przetwarzania pojawi siê b³±d,
+to procedury zwracaj± NULL.
+Procedury zwracaj±ce warto¶æ typu \fBint\fR zwracaj± 0 w przypadku powodzenia
+a -1 dla pora¿ki.
+.SH PRZESTROGI
+Procedury te mog± byæ u¿ywane wy³±cznie przez superu¿ytkownika, gdy¿ dostêp
+do dodatkowego, chronionego pliku hase³ jest ograniczony.
+.SH PLIKI
+.IR /etc/shadow " - zakodowane has³a u¿ytkowników"
+.SH ZOBACZ TAK¯E
+.BR getpwent (3),
+.BR shadow (5)
+.SH AUTOR
+Julianne Frances Haugh (jfh@austin.ibm.com)
diff --git a/man/pl/shadow.5 b/man/pl/shadow.5
new file mode 100644 (file)
index 0000000..8997bea
--- /dev/null
@@ -0,0 +1,92 @@
+.\" 1999 PTM Przemek Borys
+.\" Copyright 1989 - 1990, Julianne Frances Haugh
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\"    $Id: shadow.5,v 1.3 1999/09/20 20:56:42 wojtek2 Exp $
+.\"
+.TH SHADOW 5
+.SH NAZWA
+shadow \- zakodowany plik z has³ami
+.SH OPIS
+.I shadow
+zawiera zakodowane dane o has³ach dla kont u¿ytkowników oraz opcjonalne
+informacje o wieku (aging) has³a.
+Zawarte s± w nim
+.IP "" .5i
+Nazwa u¿ytkownika (nazwa logowania)
+.IP "" .5i
+Zakodowane has³o
+.IP "" .5i
+Dni, licz±c od 1 stycznia 1970, kiedy has³o by³o ostatni raz zmienione
+.IP "" .5i
+Dni przed których up³yniêciem niemo¿liwa jest zmiany has³a
+.IP "" .5i
+Dni, po których up³yniêciu konieczna jest zmiana has³a
+.IP "" .5i
+Ilo¶æ dni, jaka musi dzieliæ has³o od przedawnienia, by u¿ytkownik by³
+ostrzegany
+.IP "" .5i
+Ilo¶æ dni po przedawnieniu has³a, po których konto jest wy³±czane
+.IP "" .5i
+Dni od 1 stycznia 1970, okre¶laj±ce datê, kiedy konto jest wy³±czane
+.IP "" .5i
+Pole zarezerwowane
+.PP
+Pole has³a musi byæ wype³nione. Zakodowane has³o sk³ada siê z 13-24 znaków z
+64 znakowego alfabetu a-z, A-Z, 0-9, \. i /.
+Dla szczegó³ów interpretacji tego napisu, odsy³amy do \fIcrypt(3)\fR.
+.PP
+Data ostatniej zmiany has³a jest podawana jako liczba dni od 1 stycznia
+1970. Has³a nie mog± byæ zmieniane przed up³ywem odpowiedniej ilo¶ci dni, a
+musz± byæ zmieniane po up³ywie maksymalnej ilo¶ci dni.
+Je¶li minimalna liczba dni jest wiêksza od maksymalnej, has³o nie mo¿e byæ
+przez u¿ytkownika zmienione.
+.PP
+Je¶li has³o pozostaje niezmienione po up³ywie jego wa¿no¶ci, to konto jest
+uwa¿ane za nieaktywne i zostanie wy³±czone po ustalonej liczbie dni
+nieaktywno¶ci. Konto zostanie równie¿ wy³±czone w zadanym dniu wa¿no¶ci
+konta bez wzglêdu na informacjê o terminie wa¿no¶ci has³a.
+.PP
+Informacja w pliku \fIshadow\fR zastêpuje wszelkie has³a lub dane o ich
+wieku znajduj±ce siê w \fI/etc/passwd\fR.
+.PP
+Je¶li ma byæ utrzymywane bezpieczeñstwo hase³, to plik ten nie mo¿e byæ
+odczytywalny dla zwyk³ych u¿ytkowników.
+.SH Pliki
+.IR /etc/passwd " - informacje o kontach u¿ytkowników"
+.br
+.IR /etc/shadow " - zakodowane has³a u¿ytkowników"
+.SH ZOBACZ TAK¯E
+chage(1),
+login(1),
+passwd(1),
+su(1),
+sulogin(1M),
+shadow(3),
+passwd(5),
+pwconv(8),
+pwunconv(8)
diff --git a/man/pl/shadowconfig.8 b/man/pl/shadowconfig.8
new file mode 100644 (file)
index 0000000..2d37c1f
--- /dev/null
@@ -0,0 +1,27 @@
+.\" {PTM/WK/1999-09-14}
+.\" $Id: shadowconfig.8,v 1.1 1999/09/14 18:41:35 wojtek2 Exp $
+.TH SHADOWCONFIG 8 "19 kwietnia 1997" "Debian GNU/Linux"
+.SH NAZWA
+shadowconfig - prze³±cza ochronê hase³ i grup przez pliki shadow
+.SH SK£ADNIA
+.B "shadowconfig"
+.IR on " | " off
+.SH OPIS
+.PP
+.B shadowconfig on
+w³±cza ochronê hase³ i grup przez dodatkowe, przes³aniane pliki (shadow);
+.B shadowconfig off
+wy³±cza dodatkowe pliki hase³ i grup.
+.B shadowconfig
+wy¶wietla komunikat o b³êdzie i koñczy pracê z niezerowym kodem je¶li
+znajdzie co¶ nieprawid³owego. W takim wypadku powiniene¶ poprawiæ b³±d
+.\" if it finds anything awry.
+i uruchomiæ program ponownie.
+
+W³±czenie ochrony hase³, gdy jest ona ju¿ w³±czona lub jej wy³±czenie,
+gdy jest wy³±czona jest nieszkodliwe.
+
+Przeczytaj
+.IR /usr/doc/passwd/README.debian.gz ,
+gdzie znajdziesz krótkie wprowadzenie do ochrony hase³ z u¿yciem dodatkowych
+plików hase³ przes³anianych (shadow passwords) i zwi±zanych tematów.
diff --git a/man/pl/su.1 b/man/pl/su.1
new file mode 100644 (file)
index 0000000..d561e67
--- /dev/null
@@ -0,0 +1,87 @@
+.\" {PTM/WK/1999-09-25}
+.\" Copyright 1989 - 1990, Julianne Frances Haugh
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.TH SU 1
+.SH NAZWA
+su \- zmieñ ID u¿ytkownika lub stañ siê superu¿ytkownikiem
+.SH SK£ADNIA
+.BR su " [" - ]
+.RI [ nazwa_u¿ytkownika " [" argumenty ]]
+.SH OPIS
+.B su
+s³u¿y do stawania siê innym u¿ytkownikiem w trakcie w³asnej sesji pracy.
+Wywo³anie bez parametru - nazwy u¿ytkownika, domy¶lnie oznacza dla \fBsu\fR
+próbê stania siê superu¿ytkownikiem.
+Opcjonalnym argumentem \fB\-\fR mo¿na pos³u¿yæ siê do zasymulowania
+rzeczywistego rozpoczynania sesji pracy. Pozwala to na utworzenie ¶rodowiska
+u¿ytkownika. podobnego do tego, jakie wystêpuje przy bezpo¶rednim zg³oszeniu
+u¿ytkownika w systemie.
+.PP
+Po nazwie u¿ytkownika mog± wyst±piæ dodatkowe argumenty. Zostan± one
+dostarczone pow³oce zg³oszeniowej u¿ytkownika. W szczególno¶ci, argument
+\fB-c\fR spowoduje, ¿e nastêpny argument zostanie potraktowany jak polecenie
+przez wiêkszo¶æ interpretatorów poleceñ.
+.\" Polecenie zostanie wykonane przez pow³okê podan± w
+.\" \fB$SHELL\fR, albo je¶li jej nie zdefiniowano, przez podan± w
+.\" \fI/etc/passwd\fR.
+.\" XXX - powy¿sze nie by³o ca³kiem poprawne.  --marekm
+Polecenie zostanie wykonane przez pow³okê wymienion± w \fI/etc/passwd\fR dla
+docelowego u¿ytkownika.
+.PP
+U¿ytkownik pytany jest o odpowiednie has³o, je¶li takowe istnieje.
+B³êdne has³a powoduj± komunikat o b³êdzie. Wszystkie próby, udane i nieudane,
+s± rejestrowane do celów wykrywania nadu¿yæ systemu.
+.PP
+Do nowej pow³oki przekazywane jest bie¿±ce ¶rodowisko.
+Warto¶æ \fB$PATH\fR dla zwyk³ych u¿ytkowników ustawiana jest jest na
+\fB/bin:/usr/bin\fR, za¶ dla superu¿ytkownika
+na \fB/sbin:/bin:/usr/sbin:/usr/bin\fR.
+Mo¿na to zmieniæ przy pomocy definicji \fBENV_PATH\fR i \fBENV_SUPATH\fR
+w \fI/etc/login.defs\fR.
+.SH PRZESTROGI
+.PP
+Niniejsza wersja \fBsu\fR posiada wiele opcji kompilacji, z których tylko
+czê¶æ bêdzie mieæ zastosowanie w danej instalacji.
+.SH PLIKI
+.IR /etc/passwd " - informacja o kontach u¿ytkowników"
+.br
+.IR /etc/shadow " - zakodowane has³a i informacja o ich wa¿no¶ci"
+.br
+.IR $HOME/.profile " - plik startowy dla domy¶lnej pow³oki"
+.SH ZOBACZ TAK¯E
+.BR login (1),
+.BR sh (1),
+.BR suauth (5),
+.BR login.defs (5)
+.SH AUTOR
+Julianne Frances Haugh (jfh@austin.ibm.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.
diff --git a/man/pl/suauth.5 b/man/pl/suauth.5
new file mode 100644 (file)
index 0000000..c3a54ac
--- /dev/null
@@ -0,0 +1,115 @@
+.\" {PTM/WK/1999-09-14}
+.TH SUAUTH 5 "14 lutego 1996"
+.UC 5
+.SH NAZWA
+suauth - plik szczegó³owej kontroli su
+.\" detailed su control file
+.SH SK£ADNIA
+.B /etc/suauth
+.SH OPIS
+Plik
+.I /etc/suauth
+przeszukiwany jest przy ka¿dym wywo³aniu polecenia su. Mo¿e on zmieniaæ
+zachowanie siê polecenia su, w oparciu o
+.PP
+.RS
+.nf
+1) u¿ytkownika, na którego konto wykonywane jest su
+.fi
+2) u¿ytkownika wykonuj±cego polecenie su (lub dowoln± z grup, której mo¿e
+on byæ cz³onkiem)
+.RE
+.PP
+Plik sformatowany jest jak poni¿ej. Wiersze rozpoczynaj±ce siê od # s±
+traktowane jak wiersze komentarza i ignorowane.
+.PP
+.RS
+na-ID:z-ID:AKCJA
+.RE
+.PP
+Gdzie na-ID jest albo s³owem
+.B ALL
+(wszyscy), albo list± nazw u¿ytkowników rozdzielonych "," albo te¿ s³owami
+.B ALL EXCEPT
+(wszyscy oprócz), po których nastêpuje lista nazw u¿ytkowników
+rozdzielonych przecinkiem.
+.PP
+z-ID jest formatowane w taki sam sposób jak na-ID, z wyj±tkiem tego, ¿e
+rozpoznawane jest dodatkowe s³owo
+.BR GROUP.
+Zapis 
+.B ALL EXCEPT GROUP
+(wszyscy za wyj±tkiem grupy) jest równie¿ ca³kowicie poprawny.
+Po s³owie
+.B GROUP
+powinna wyst±piæ jedna lub wiêcej rozdzielonych przecinkiem nazw grup.
+Niewystarczaj±ce jest podanie g³ównego ID danej grupy - niezbêdny jest
+wpis w 
+.BR /etc/group (5).
+.PP
+Akcja mo¿e byæ tylko jedn± z obecnie obs³ugiwanych opcji:
+.TP 10
+.B DENY
+(zakaz) Próba wykonania su jest zatrzymywana jeszcze przed pytaniem o has³o.
+.TP 10
+.B NOPASS
+(bez has³a) Próba wykonania su jest automatycznie pomy¶lna; brak pytania
+o has³o.
+.TP 10
+.B OWNPASS
+(w³asne has³o) U¿ytkownik wywo³uj±cy su musi wprowadziæ w³asne has³o, by
+polecenie zosta³o pomy¶lnie wykonane. Jest on powiadamiany o konieczno¶ci
+podania w³asnego has³a.
+.PP
+Zauwa¿, ¿e istniej± trzy odrêbne pola rozdzielone dwukropkiem. Bia³e znaki
+wokó³ dwukropka nie s± dozwolone. Zauwa¿ te¿, ¿e plik analizowany jest
+sekwencyjnie, wiersz po wierszu, i stosowana jest pierwsza pasuj±ca regu³a
+bez analizy reszty pliku. Umo¿liwia to administratorowi systemu precyzyjn±
+kontrolê wed³ug w³asnych upodobañ.
+.SH PRZYK£AD
+.PP
+.nf
+# przyk³adowy plik /etc/suauth
+#
+# para uprzywilejowanych u¿ytkowników
+# mo¿e wykonaæ su na konto root
+# przy pomocy w³asnych hase³
+#
+root:chris,birddog:OWNPASS
+# 
+# Nikt inny nie mo¿e wykonaæ su na konto root,
+# chyba ¿e jest cz³onkiem grupy wheel.
+# Tak to robi BSD.
+#
+root:ALL EXCEPT GROUP wheel:DENY
+#
+# Byæ mo¿e terry i birddog s± kontami,
+# których u¿ywa ta sama osoba.
+# Mo¿na zrobiæ wzajemny dostêp
+# pomiêdzy nimi bez hase³.
+#
+terry:birddog:NOPASS
+birddog:terry:NOPASS
+#
+.fi
+.SH PLIKI
+.I /etc/suauth
+.SH B£ÊDY
+Mo¿e byæ sporo ukrytych. Analizator pliku jest szczególnie wra¿liwy
+na b³êdy sk³adniowe. Zak³ada on, ¿e nie bêdzie zbêdnych bia³ych znaków
+(za wyj±tkiem pocz±tków i koñców wierszy), a ró¿ne elementy bêd± separowane
+konkretnym znakiem ogranicznika.
+.SH DIAGNOSTYKA
+B³±d analizy pliku zg³aszany jest przy u¿yciu
+.BR syslogd (8)
+jako zagro¿enie o poziomie ERR (b³±d) w podsystemie AUTH (identyfikacji
+u¿ytkownika przy zg³oszeniu).
+.\" as level ERR on facility AUTH.
+.SH ZOBACZ TAK¯E
+.BR su (1)
+.SH AUTOR
+.nf
+Chris Evans (lady0110@sable.ox.ac.uk)
+Lady Margaret Hall
+Oxford University
+England
diff --git a/man/pl/sulogin.8 b/man/pl/sulogin.8
new file mode 100644 (file)
index 0000000..e8aca99
--- /dev/null
@@ -0,0 +1,94 @@
+.\" {PTM/WK/1999-09-14}
+.\" Copyright 1989 - 1992, Julianne Frances Haugh
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\"    $Id: sulogin.8,v 1.3 1999/09/25 20:07:47 wojtek2 Exp $
+.\"
+.TH SULOGIN 8
+.SH NAZWA
+sulogin - login w trybie jednou¿ytkownikowym
+.SH SK£ADNIA
+\fBsulogin\fR [\fIurz±dzenie-tty\fR]
+.SH OPIS
+.B sulogin
+wywo³ywane jest przez \fBinit\fR przed zezwoleniem u¿ytkownikowi
+na dostêp do systemu w trybie jednou¿ytkownikowym (single user mode).
+Funkcja ta mo¿e byæ dostêpna tylko w niektórych systemach, w których
+odpowiednio zmieniono \fBinit\fR lub plik \fB/etc/inittab\fR posiada
+pozycjê dla logowania siê w trybie jednou¿ytkownikowym.
+.PP
+Wy¶wietlany jest symbol zachêty
+.IP "" .5i
+Type control-d to proceed with normal startup,
+.br
+(or give root password for system maintenance):
+.br
+Naci¶nij control-d by kontynuowaæ zwyk³y start,
+.br
+(lub podaj has³o u¿ytkownika root do konserwacji systemu):
+.PP
+Wej¶cie i wyj¶cie bêd± obs³ugiwane przy u¿yciu standardowych deskryptorów
+plików, chyba ¿e u¿yto opcjonalnego argumentu - nazwy urz±dzenia.
+.PP
+Je¶li u¿ytkownik wprowadzi poprawne has³o superu¿ytkownika root,
+to rozpoczynana jest sesja pracy na koncie root.
+Je¿eli natomiast naci¶niêto \fBEOF\fR, to system przechodzi
+do wielou¿ytkownikowego trybu pracy.
+.PP
+Po opuszczeniu przez u¿ytkownika pow³oki przypisanej do
+jednou¿ytkownikowego trybu pracy lub po naci¶niêciu \fBEOF\fR, system
+wykonuje proces inicjacji wymagany do przej¶cia w tryb wielou¿ytkownikowy.
+.SH OSTRZE¯ENIA
+.PP
+Polecenie to mo¿e byæ u¿ywane wy³±cznie wtedy, gdy \fBinit\fR zosta³ zmieniony
+tak, by wywo³ywaæ \fBsulogin\fR zamiast \fB/bin/sh\fR,
+albo gdy u¿ytkownik skonfigurowa³ plik \fIinittab\fR tak, by obs³ugiwa³
+logowanie w trybie jednou¿ytkownikowym.
+Na przyk³ad, wiersz
+.br
+.sp 1
+co:s:respawn:/etc/sulogin /dev/console
+.br
+.sp 1
+powinien wykonaæ polecenie sulogin w trybie jednou¿ytkownikowym.
+.PP
+Na ile jest to mo¿liwe, tworzone jest pe³ne ¶rodowisko.
+Jednak¿e w efekcie mog± nie byæ do³±czone czy zainicjowane ró¿ne
+urz±dzenia, za¶ wiele poleceñ u¿ytkownika mo¿e byæ niedostêpnych lub
+nie funkcjonowaæ.
+.SH PLIKI
+.IR /etc/passwd " - informacja o kontach u¿ytkowników"
+.br
+.IR /etc/shadow " - zakodowane has³a i informacja o ich wa¿no¶ci"
+.br
+.IR /.profile " - skrypt startowy dla pow³oki trybu jednou¿ytkownikowego"
+.SH ZOBACZ TAK¯E
+.BR login (1),
+.BR init (8),
+.BR sh (1)
+.SH AUTOR
+Julianne Frances Haugh (jfh@austin.ibm.com)
index 04497e90fe99432d9537e9ac0cca47fda66faac6..82f0ebfda6946f846933742ed882396e782ca911 100644 (file)
@@ -25,7 +25,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\"    $Id: porttime.5,v 1.4 1998/12/28 20:35:20 marekm Exp $
+.\"    $Id: porttime.5,v 1.5 2000/08/26 18:27:17 marekm Exp $
 .\"
 .TH PORTTIME 5
 .SH NAME
@@ -81,4 +81,4 @@ port during non-working hours.
 .SH SEE ALSO
 .BR login (1)
 .SH AUTHOR
-Julianne Frances Haugh (jfh@bga.com)
+Julianne Frances Haugh (jfh@austin.ibm.com)
index 830529c44d305285958c8bf10e454595a744c6c9..b3e6d1c01e7c1dfc10de7df918720bc4be219a88 100644 (file)
@@ -25,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.4 1998/12/28 20:35:21 marekm Exp $
+.\"    $Id: pw_auth.3,v 1.5 2000/08/26 18:27:17 marekm Exp $
 .\"
 .TH PWAUTH 3
 .SH NAME
@@ -156,4 +156,4 @@ with a 0 exit code, and a non-zero value otherwise.
 .BR userdel (8),
 usermod(8)
 .SH AUTHOR
-Julianne Frances Haugh (jfh@bga.com)
+Julianne Frances Haugh (jfh@austin.ibm.com)
index 8f0da284ba5ce3f8c36f869c8c2f82a8e1502be3..156ec533bf03c77aad1cf74eda5795794ca24289 100644 (file)
@@ -25,7 +25,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\"    $Id: pwauth.8,v 1.4 1998/12/28 20:35:22 marekm Exp $
+.\"    $Id: pwauth.8,v 1.5 2000/08/26 18:27:17 marekm Exp $
 .\"
 .TH PWAUTH 8
 .SH NAME
@@ -64,4 +64,4 @@ the login or network session itself.
 .BR usermod (8),
 .BR pw_auth (3)
 .SH AUTHOR
-Julianne Frances Haugh (jfh@bga.com)
+Julianne Frances Haugh (jfh@austin.ibm.com)
index d0d38ea5e0ef2e65eba64c0a4db7ffd12d0d4a44..6e500fcb0cb6384c191ec995c1c4ab75ec7bd4ae 100644 (file)
@@ -25,7 +25,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\"    $Id: pwck.8,v 1.4 1998/12/28 20:35:23 marekm Exp $
+.\"    $Id: pwck.8,v 1.5 2000/08/26 18:27:17 marekm Exp $
 .\"
 .TH PWCK 1
 .SH NAME
@@ -104,4 +104,4 @@ Cannot lock password files
 .IP 5 5
 Cannot update password files
 .SH AUTHOR
-Julianne Frances Haugh (jfh@bga.com)
+Julianne Frances Haugh (jfh@austin.ibm.com)
index 74d2b2c20f2d640462e7d5ddc50845fd0c555278..0a3b74a9a74026c5b55310b7be98ef5a8edc115a 100644 (file)
@@ -25,7 +25,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\"    $Id: shadow.3,v 1.4 1998/12/28 20:35:24 marekm Exp $
+.\"    $Id: shadow.3,v 1.5 2000/08/26 18:27:17 marekm Exp $
 .\"
 .TH SHADOW 3
 .SH NAME
@@ -145,4 +145,4 @@ the shadow password file is restricted.
 .BR getpwent (3),
 .BR shadow (5)
 .SH AUTHOR
-Julianne Frances Haugh (jfh@bga.com)
+Julianne Frances Haugh (jfh@austin.ibm.com)
index b39f2402473d99f8f0c6edb776c468bb99a92e9a..bd3b09a32b61c58e46954daa9d2e78cda420712a 100644 (file)
@@ -25,7 +25,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\"    $Id: shadow.5,v 1.4 1998/12/28 20:35:25 marekm Exp $
+.\"    $Id: shadow.5,v 1.5 2000/08/26 18:27:17 marekm Exp $
 .\"
 .TH SHADOW 5
 .SH NAME
@@ -96,4 +96,4 @@ security is to be maintained.
 .BR pwconv (8),
 .BR pwunconv (8)
 .SH AUTHOR
-Julianne Frances Haugh (jfh@bga.com)
+Julianne Frances Haugh (jfh@austin.ibm.com)
index 15dc64a2ee0aa700b114297860dc1bfb10dc9ad1..69fe12c40a215e596b42527636b54017a9eed7f0 100644 (file)
--- a/man/su.1
+++ b/man/su.1
@@ -25,7 +25,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\"    $Id: su.1,v 1.5 1998/12/28 20:35:26 marekm Exp $
+.\"    $Id: su.1,v 1.6 2000/08/26 18:27:17 marekm Exp $
 .\"
 .TH SU 1
 .SH NAME
@@ -64,6 +64,10 @@ The current environment is passed to the new shell.  The value of
 \fB/sbin:/bin:/usr/sbin:/usr/bin\fR for the super user.  This may be
 changed with the \fBENV_PATH\fR and \fBENV_SUPATH\fR definitions in
 \fI/etc/login.defs\fR.
+.PP
+A subsystem login is indicated by the presense of a "*" as the first
+character of the login shell. The given home directory will be used as
+the root of a new filesystem which the user is actually logged into.
 .SH CAVEATS
 .PP
 This version of \fBsu\fR has many compilation options, only some of which
@@ -80,4 +84,4 @@ $HOME/.profile \- initialization script for default shell
 .BR suauth (5),
 .BR login.defs (5)
 .SH AUTHOR
-Julianne Frances Haugh (jfh@bga.com)
+Julianne Frances Haugh (jfh@austin.ibm.com)
index 2de827952cb54dc519cad7416a81e82eafa21fff..61d61cdb433ba9dc7bb6b644ce8a9a7b20842c0f 100644 (file)
@@ -25,7 +25,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\"    $Id: sulogin.8,v 1.4 1998/12/28 20:35:27 marekm Exp $
+.\"    $Id: sulogin.8,v 1.5 2000/08/26 18:27:17 marekm Exp $
 .\"
 .TH SULOGIN 8
 .SH NAME
@@ -85,4 +85,4 @@ of the user commands may be unavailable or nonfunctional as a result.
 .BR init (8),
 .BR sh (1)
 .SH AUTHOR
-Julianne Frances Haugh (jfh@bga.com)
+Julianne Frances Haugh (jfh@austin.ibm.com)
index 68f7a5bfa5af78735b38c9ef042aed0fbd627560..aa84b755735e154da0dcdb9521326965422d280a 100644 (file)
@@ -25,7 +25,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\"    $Id: useradd.8,v 1.6 1999/03/07 19:14:47 marekm Exp $
+.\"    $Id: useradd.8,v 1.7 2000/08/26 18:27:17 marekm Exp $
 .\"
 .TH USERADD 8
 .SH NAME
@@ -194,4 +194,4 @@ This must be performed on the NIS server.
 .BR userdel (8),
 .BR usermod (8)
 .SH AUTHOR
-Julianne Frances Haugh (jfh@bga.com)
+Julianne Frances Haugh (jfh@austin.ibm.com)
index eb9e5b89ddb555d4e2998422c64f682256d3a993..9a26713f1e296857690001ac44faf4f6bc5dc8f8 100644 (file)
@@ -25,7 +25,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\"    $Id: userdel.8,v 1.4 1998/12/28 20:35:29 marekm Exp $
+.\"    $Id: userdel.8,v 1.5 2000/08/26 18:27:17 marekm Exp $
 .\"
 .TH USERDEL 8
 .SH NAME
@@ -40,8 +40,8 @@ all entries that refer to \fIlogin\fR.
 The named user must exist.
 .IP \fB-r\fR
 Files in the user's home directory will be removed along with the
-home directory itself.
-Files located in other file system will have to be searched for
+home directory itself and the user's mail spool.
+Files located in other file systems will have to be searched for
 and deleted manually.
 .SH FILES
 /etc/passwd \- user account information
@@ -66,4 +66,4 @@ This must be performed on the NIS server.
 .BR useradd (8),
 .BR usermod (8)
 .SH AUTHOR
-Julianne Frances Haugh (jfh@bga.com)
+Julianne Frances Haugh (jfh@austin.ibm.com)
index 8aecfd369adc482f62be37aca724c100f53cca94..8e6bc0c11d6e4687d081e73ea71089d78e411c75 100644 (file)
@@ -25,7 +25,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\"    $Id: usermod.8,v 1.6 1999/03/07 19:14:48 marekm Exp $
+.\"    $Id: usermod.8,v 1.7 2000/08/26 18:27:17 marekm Exp $
 .\"
 .TH USERMOD 8
 .SH NAME
@@ -150,4 +150,4 @@ You must make any changes involving NIS on the NIS server.
 .BR useradd (8),
 .BR userdel (8)
 .SH AUTHOR
-Julianne Frances Haugh (jfh@bga.com)
+Julianne Frances Haugh (jfh@austin.ibm.com)
index 61cd1d95425289cec05f76c996fba5e544070e43..4f58503ea4e09c65165aa1ecaeac7c2c688648f3 100755 (executable)
@@ -4,7 +4,7 @@
 # Created: 1993-05-16
 # Public domain
 
-# $Id: mkinstalldirs,v 1.3 1998/01/29 23:22:23 marekm Exp $
+# $Id: mkinstalldirs,v 1.13 1999/01/05 03:18:55 bje Exp $
 
 errstatus=0
 
@@ -22,7 +22,7 @@ do
      esac
 
      if test ! -d "$pathcomp"; then
-        echo "mkdir $pathcomp" 1>&2
+        echo "mkdir $pathcomp"
 
         mkdir "$pathcomp" || lasterr=$?
 
diff --git a/old/Makefile.am b/old/Makefile.am
deleted file mode 100644 (file)
index 7c0fe14..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-# This is a dummy Makefile.am to get automake work flawlessly,
-# and also cooperate to make a distribution for `make dist'
-
-EXTRA_DIST = Makefile.linux Makefile.sun4 Makefile.svr4 Makefile.xenix \
- config.h.linux config.h.sun4 config.h.svr4 config.h.xenix \
- orig-config.h pwconv.8 pwconv-old.8 pwconv-old.c pwd.h.m4 \
- pwunconv.8 pwunconv-old.8 pwunconv-old.c scologin.c vipw.8
diff --git a/old/Makefile.linux b/old/Makefile.linux
deleted file mode 100644 (file)
index a2bbaf8..0000000
+++ /dev/null
@@ -1,751 +0,0 @@
-# 
-#  Copyright 1988 - 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.
-#
-#      %W%     %U%  - Shadow password system (Linux)
-#
-#      $Id: Makefile.linux,v 1.2 1997/05/01 23:11:54 marekm Exp $
-#
-SHELL = /bin/sh
-
-#
-# Set this flag to decide what level of code "get" returns.
-# The base USENET release was release 1.  It is no longer supported.
-# The version with the utilities added was release 2.  It is now unsupported.
-# The version with database-like file access is release 3.
-RELEASE = 3
-VERSION = ver3.3.2
-GFLAGS = -n $(VERSION)
-GET = get_file
-
-# Define the directory login is copied to.  Linux uses /bin.
-LOGINDIR = /bin
-
-# Define any special libraries required to access the directory routines.
-# Linux does not use any special libraries.
-NDIR =
-
-# Define some stuff for Cracklib.  This assumes that libcracklib.a is
-# in a system directory.
-# Add -DPWC_HIST to check password history using TS&SzS cracklib
-# CRACKDEF='-DUSE_CRACKLIB'
-# CRACKLIB=-lcrack
-
-# Pick your favorite C compiler and tags command
-CC = gcc
-TAGS = ctags
-
-# OS.  This is Linux.
-OS = -DUSG -DLINUX
-
-# Do you have to do ranlib (probably SUN, BSD and XENIX)?
-RANLIB = ranlib
-# RANLIB = echo
-
-# Configuration Flags
-#
-#      DEST_INCLUDE_DIR - local include files
-#      LIBS - system libraries
-#              -lsocket - needed for TCP/IP and possibly SYSLOG
-#              -ldbm or -lndbm - needed for DBM support
-#              -lcrypt - needed for SCO crypt() functions
-#      CFLAGS - C compiler flags
-#              -DLAI_TCP - needed for SCO Xenix Lachman TCP/IP
-
-prefix=/
-exec_prefix=$(prefix)
-bindir=$(exec_prefix)/bin
-sbindir=$(exec_prefix)/sbin
-usrbindir=$(exec_prefix)/usr/bin
-usrsbindir=$(exec_prefix)/usr/sbin
-includedir=$(prefix)/usr/include
-libdir=$(prefix)/usr/lib
-mandir=$(prefix)/usr/man
-man1dir=$(mandir)/man1
-man3dir=$(mandir)/man3
-man4dir=$(mandir)/man4
-man5dir=$(mandir)/man5
-man8dir=$(mandir)/man8
-
-login_perms=-m755
-# If you need "exec login", comment out the above line and uncomment below
-#login_perms=-m4755
-
-#DEST_INCLUDE_DIR = /usr/local/include
-DEST_INCLUDE_DIR = $(includedir)
-
-# Dirty hack to avoid name collisions (programs linked with libshadow
-# could have their own xmalloc/xstrdup, these names are quite common).
-# Don't look.  --marekm
-#HACK = -Dxmalloc=libshadow_xmalloc -Dxstrdup=libshadow_xstrdup
-# Flags for Linux
-CFLAGS = -O2 -fomit-frame-pointer -Wall $(CRACKDEF) $(OS) $(HACK)
-LIBS = #-ldbm #-lskey
-#LIBSHADOW = libshadow.a
-LIBSHADOW = shlib/libshadow.so
-STATIC = -static
-LDFLAGS = -s
-LTFLAGS = 
-
-# Where the login.defs file will be copied.  Must agree with config.h
-DEST_LOGIN_DEFS = /etc/login.defs
-
-# Rules for .L (lint) files.
-.SUFFIXES: .L
-LINT = lint
-LINTFLAGS = $(OS) -Dlint
-
-.c.L:
-       $(LINT) -pxu $(LINTFLAGS) $*.c > $*.L
-
-LOBJS = lmain.o login.o env.o valid.o setup.o shell.o age.o \
-       utmp.o sub.o mail.o motd.o log.o ttytype.o failure.o \
-       tz.o console.o hushed.o login_access.o setugid.o \
-       chowntty.o ulimit.o
-
-LSRCS = lmain.c login.c env.c valid.c setup.c shell.c age.c \
-       utmp.c sub.c mail.c motd.c log.c ttytype.c failure.c \
-       tz.c console.c hushed.c login_access.c setugid.c \
-       chowntty.c ulimit.c
-
-SOBJS = smain.o env.o entry.o setup.o shell.o \
-       sub.o mail.o motd.o sulog.o age.o tz.o hushed.o setugid.o \
-       suauth.o console.o ulimit.o
-
-SSRCS = smain.c env.c entry.c setup.c shell.c \
-       pwent.c sub.c mail.c motd.c sulog.c shadow.c age.c pwpack.c rad64.c \
-       tz.c hushed.c setugid.c suauth.c console.c ulimit.c
-
-POBJS = passwd.o obscure.o ulimit.o
-PSRCS = passwd.c obscure.c ulimit.c
-
-GPSRCS = gpmain.c
-
-GPOBJS = gpmain.o
-
-PWOBJS = pwconv.o
-
-PWSRCS = pwconv.c pwent.c shadow.c pwpack.c rad64.c
-
-PWUNOBJS = pwunconv.o
-
-PWUNSRCS = pwunconv.c pwent.c shadow.c pwpack.c rad64.c
-
-SULOGOBJS = sulogin.o entry.o env.o age.o setup.o \
-       valid.o shell.o tz.o setugid.o ulimit.o
-
-SULOGSRCS = sulogin.c entry.c env.c age.c pwent.c setup.c \
-       shadow.c shell.c valid.c pwpack.c tz.c setugid.c ulimit.c
-
-MKPWDOBJS = mkpasswd.o
-
-MKPWDSRCS = mkpasswd.c
-
-NGSRCS = newgrp.c env.c shell.c
-
-NGOBJS = newgrp.o env.o shell.o
-
-CHFNSRCS = chfn.c fields.c ulimit.c
-CHFNOBJS = chfn.o fields.o ulimit.o
-CHSHSRCS = chsh.c fields.c ulimit.c
-CHSHOBJS = chsh.o fields.o ulimit.o
-CHAGEOBJS = chage.o fields.o
-CHAGESRCS = chage.c fields.c
-CHPASSOBJS = chpasswd.o
-CHPASSSRCS = chpasswd.c
-DPSRCS = dpmain.c
-DPOBJS = dpmain.o
-
-ALLSRCS = age.c dialchk.c dialup.c entry.c env.c lmain.c log.c login.c mail.c \
-       motd.c obscure.c passwd.c pwconv.c pwent.c pwunconv.c getpass.c \
-       setup.c shadow.c shell.c smain.c sub.c sulog.c sulogin.c ttytype.c \
-       utmp.c valid.c port.c newgrp.c gpmain.c grent.c mkpasswd.c pwpack.c \
-       chfn.c chsh.c chage.c rad64.c encrypt.c chpasswd.c shadowio.c pwio.c \
-       newusers.c groupio.c fields.c pwdbm.c grpack.c grdbm.c sppack.c \
-       spdbm.c dpmain.c gshadow.c gsdbm.c gspack.c sgroupio.c useradd.c \
-       userdel.c patchlevel.h usermod.c copydir.c mkrmdir.c groupadd.c \
-       groupdel.c groupmod.c tz.c console.c hushed.c getdef.c scologin.c \
-       logoutd.c groups.c pwauth.c lockpw.c chowndir.c rename.c
-
-FILES1 = LICENSE README patchlevel.h newgrp.c Makefile config.h pwunconv.c obscure.c \
-       age.c id.c
-
-FILES2 = passwd.c port.c lmain.c sulogin.c pwpack.c dialup.c expiry.c \
-       gshadow.h
-
-FILES3 = chfn.c chsh.c smain.c faillog.c pwconv.c shadow.c pwck.c utent.c
-
-FILES4 = gpmain.c chage.c pwent.c valid.c setup.c entry.c ttytype.c port.h
-
-FILES5 = pwio.c encrypt.c chpasswd.c newusers.c rad64.c dialchk.c faillog.h \
-       pwdbm.c grdbm.c gshadow.c sppack.c grpck.c
-
-FILES6 = gspack.c spdbm.c lastlog.h shell.c login.c sub.c dpmain.c mail.c \
-       env.c pwd.h.m4 grpack.c shadow.h log.c grent.c motd.c dialup.h \
-       fields.c gsdbm.c utmp.c failure.c
-
-FILES7 = groupio.c shadowio.c sgroupio.c groups.c copydir.c mkrmdir.c \
-       mkpasswd.c pwauth.c pwauth.h lastlog.c
-
-FILES8 = useradd.c usermod.c login.defs rename.c
-
-FILES9 = groupadd.c groupdel.c groupmod.c tz.c console.c hushed.c getdef.c \
-       scologin.c logoutd.c sulog.c getpass.c userdel.c lockpw.c chowndir.c
-
-FILES_SUN4 = Makefile.sun4 README.sun4 config.h.sun4
-FILES_SVR4 = Makefile.svr4 config.h.svr4
-FILES_LINUX = Makefile.linux config.h.linux
-
-MAN_1 = chage.1 chfn.1 chsh.1 id.1 login.1 newgrp.1 passwd.1 su.1 \
-       useradd.1 userdel.1 usermod.1 groupadd.1 groupdel.1 groupmod.1 \
-       groups.1 pwck.1 grpck.1
-MAN_3 = shadow.3 pwauth.3
-MAN_4 = # faillog.4 passwd.4 porttime.4 shadow.4
-MAN_5 = login.5  faillog.5 passwd.5 porttime.5 shadow.5
-MAN_8 = chpasswd.8 dpasswd.8 faillog.8 newusers.8 pwconv.8 pwunconv.8 \
-       sulogin.8 mkpasswd.8 logoutd.8 pwauth.8 lastlog.8
-
-DOCS1 = $(MAN_1) $(MAN_3) $(MAN_4)
-DOCS2 = $(MAN_5) $(MAN_8)
-DOCS = $(DOCS1) $(DOCS2)
-
-BINS = su login login-static pwconv pwunconv passwd sulogin faillog newgrp \
-       sg gpasswd mkpasswd chfn chsh chage chpasswd newusers dpasswd id \
-       useradd userdel usermod groupadd groupdel groupmod $(SCOLOGIN) \
-       logoutd groups pwck grpck lastlog expiry
-
-all:   Linux $(BINS) $(DOCS)
-
-#
-# Linux has its own /usr/include/shadow.h.  Use it instead.
-#
-SHADOW = /usr/include/shadow.h
-PWD = /usr/include/pwd.h
-Linux:
-       -mv shadow.h oldshadow.h
-       touch Linux
-
-$(BINS): Linux
-
-.PRECIOUS: libshadow.a
-
-LIBOBJS = dialchk.o dialup.o encrypt.o salt.o md5crypt.o md5.o getdef.o \
-       getpass.o commonio.o grdbm.o grent.o groupio.o grpack.o gshadow.o \
-       gsdbm.o gspack.o sgroupio.o port.o pwdbm.o pwent.o pwio.o pwpack.o \
-       pwauth.o rad64.o spdbm.o shadow.o shadowio.o sppack.o lockpw.o \
-       rename.o utent.o list.o strtoday.o basename.o isexpired.o xmalloc.o
-
-libshadow.a: $(LIBOBJS)
-       $(AR) rc libshadow.a $^
-       $(RANLIB) libshadow.a
-
-shlib/libshadow.so: $(LIBOBJS)
-       cd shlib && \
-       $(MAKE) CC=$(CC) CFLAGS="$(CFLAGS)" LIBOBJS="$(LIBOBJS)" libshadow.so
-
-old-libshadow.a: \
-       libshadow.a(dialchk.o) \
-       libshadow.a(dialup.o) \
-       libshadow.a(encrypt.o) \
-       libshadow.a(salt.o) \
-       libshadow.a(md5crypt.o) \
-       libshadow.a(md5.o) \
-       libshadow.a(getdef.o) \
-       libshadow.a(getpass.o) \
-       libshadow.a(commonio.o) \
-       libshadow.a(grdbm.o) \
-       libshadow.a(grent.o) \
-       libshadow.a(groupio.o) \
-       libshadow.a(grpack.o) \
-       libshadow.a(gshadow.o) \
-       libshadow.a(gsdbm.o) \
-       libshadow.a(gspack.o) \
-       libshadow.a(sgroupio.o) \
-       libshadow.a(port.o) \
-       libshadow.a(pwdbm.o) \
-       libshadow.a(pwent.o) \
-       libshadow.a(pwio.o) \
-       libshadow.a(pwpack.o) \
-       libshadow.a(pwauth.o) \
-       libshadow.a(rad64.o) \
-       libshadow.a(spdbm.o) \
-       libshadow.a(shadow.o) \
-       libshadow.a(shadowio.o) \
-       libshadow.a(sppack.o) \
-       libshadow.a(lockpw.o) \
-       libshadow.a(rename.o) \
-       libshadow.a(utent.o) \
-       libshadow.a(list.o) \
-       libshadow.a(strtoday.o) \
-       libshadow.a(basename.o) \
-       libshadow.a(isexpired.o) \
-       libshadow.a(xmalloc.o)
-       $(RANLIB) libshadow.a
-
-# these two (from the original Makefile) don't work on Linux, see below
-#
-#save:
-#      [ ! -d save ] && mkdir save
-#      -cp $(LOGINDIR)/login save
-#      -cp /etc/mkpasswd /etc/pwconv /etc/pwunconv /etc/sulogin /etc/chpasswd \
-#              /etc/newusers /etc/useradd /etc/userdel /etc/usermod \
-#              /etc/groupadd /etc/groupdel /etc/groupmod /etc/logoutd \
-#              /etc/login.defs /etc/pwck /etc/grpck /bin/expiry save
-#      -cp /bin/su /bin/passwd /bin/gpasswd /bin/dpasswd /bin/faillog \
-#              /bin/newgrp /bin/chfn /bin/chsh /bin/chage /bin/id \
-#              /bin/scologin save
-#      -cp $(DEST_INCLUDE_DIR)/dialup.h $(DEST_INCLUDE_DIR)/gshadow.h save
-#
-#restore:
-#      [ -d save ]
-#      -(cd save ; cp login $(LOGINDIR) )
-#      -(cd save ; -cp mkpasswd pwconv pwunconv sulogin chpasswd \
-#              newusers useradd userdel usermod groupadd groupdel groupmod \
-#              logoutd login.defs pwck grpck /etc)
-#      -(cd save ; cp su passwd gpasswd dpasswd faillog newgrp chfn chsh \
-#              chage id scologin expiry /bin)
-#      -(cd save ; cp gshadow.h dialup.h $(DEST_INCLUDE_DIR) )
-
-# automatic pathnames detection, thanks to Rafal Maszkowski
-# (not tested by me; it is best to have a good backup anyway...  --marekm)
-
-save:
-       -( [ ! -d save ] && mkdir save )
-       -( whereis -b id groups chfn chsh chage login login-static sulogin \
-               newusers useradd userdel usermod groupadd groupdel \
-               groupmod pwck grpck lastlog faillog dpasswd chpasswd \
-               logoutd mkpasswd pwconv pwunconv su passwd gpasswd \
-               newgrp expiry | awk '{if ($$2!="") print $$2}' > save/list )
-       -( cat save/list | awk '{print "cp -p", $$1, "save"}' | sh )
-       -cp -p /etc/login.defs save
-       -cp -p $(includedir)/dialup.h $(includedir)/gshadow.h save
-       -cp -p $(libdir)/libshadow.a save
-
-restore:
-       [ -d save ]
-       -( cd save ; cp -p login.defs /etc ; \
-               cp -p dialup.h gshadow.h $(includedir) ; \
-               cp -p libshadow.a $(libdir) )
-       -( cat save/list | awk '{ last=split($$1,comp,"/"); print "cp -p", comp[last], $$1}' | sh)
-
-
-install: all
-       test -f /etc/login.defs || cp login.defs.linux $(DEST_LOGIN_DEFS)
-       install -d $(man1dir)
-       install -d $(man3dir)
-#      install -d $(man4dir)
-       install -d $(man5dir)
-       install -d $(man8dir)
-       install -d $(usrbindir)
-       install -d $(usrsbindir)
-       install -d $(LOGINDIR)
-       install -d $(bindir)
-       install -d $(includedir)
-       install -d $(libdir)
-       install -m 644 $(MAN_1) $(man1dir)/
-       install -m 644 $(MAN_3) $(man3dir)/
-#      install -m 644 $(MAN_4) $(man4dir)/
-       install -m 644 $(MAN_5) $(man5dir)/
-       install -m 644 $(MAN_8) $(man8dir)/
-#      install -m 755 id groups $(usrbindir)/
-       install -m 4755 chfn chsh chage $(usrbindir)/
-       install $(login_perms) login $(LOGINDIR)/login
-#      install $(login_perms) login-static $(LOGINDIR)/login-static
-       install -m 755 sulogin $(sbindir)/sulogin
-       install -m 755 newusers \
-               useradd userdel usermod groupadd groupdel groupmod \
-               pwck grpck lastlog faillog dpasswd \
-               chpasswd logoutd mkpasswd pwconv pwunconv $(usrsbindir)/
-       install -m 4755 su $(bindir)/
-       install -m 4755 passwd gpasswd newgrp expiry $(usrbindir)/
-       ln -sf $(usrbindir)/newgrp $(bindir)/sg
-       install -m 644 gshadow.h dialup.h $(includedir)/
-       install -m 644 libshadow.a $(libdir)/
-       $(RANLIB) $(libdir)/libshadow.a
-
-lint:  su.lint login.lint pwconv.lint pwunconv.lint passwd.lint sulogin.lint \
-       faillog.lint newgrp.lint gpasswd.lint mkpasswd.lint chfn.lint \
-       chsh.lint chage.lint dpasswd.lint id.lint useradd.lint userdel.lint \
-       usermod.lint groupadd.lint groupdel.lint groupmod.lint logoutd.lint \
-       pwck.lint grpck.lint expiry.lint \
-       $(ALLSRCS:.c=.L)
-
-tags:  $(ALLSRCS)
-       $(TAGS) $(ALLSRCS)
-
-README:
-       [ -f s.README ] && $(GET) $(GFLAGS) s.README
-       
-$(DOCS):
-       [ -f s.$@ ] && $(GET) $(GFLAGS) s.$@
-
-login.defs:
-       [ -f s.login.defs ] && $(GET) $(GFLAGS) s.login.defs
-
-Makefile.sun4:
-       [ -f s.Makefile.sun4 ] && $(GET) $(GFLAGS) s.Makefile.sun4
-
-Makefile.svr4:
-       [ -f s.Makefile.svr4 ] && $(GET) $(GFLAGS) s.Makefile.svr4
-
-README.sun4:
-       [ -f s.README.sun4 ] && $(GET) $(GFLAGS) s.README.sun4
-
-config.h.sun4:
-       [ -f s.config.h.sun4 ] && $(GET) $(GFLAGS) s.config.h.sun4
-
-config.h.svr4:
-       [ -f s.config.h.svr4 ] && $(GET) $(GFLAGS) s.config.h.svr4
-
-login: $(LOBJS) $(LIBSHADOW)
-       $(CC) -o login $(LDFLAGS) $(LOBJS) $(LIBSHADOW) $(LIBS)
-
-login-static:  $(LOBJS) libshadow.a
-       $(CC) -o login-static $(STATIC) $(LDFLAGS) $(LOBJS) $(LIBSHADOW) $(LIBS)
-
-login.lint: $(LSRCS)
-       $(LINT) $(LINTFLAGS) $(LSRCS) > login.lint
-
-su:    $(SOBJS) $(LIBSHADOW)
-       $(CC) -o su $(LDFLAGS) $(SOBJS) $(LIBSHADOW) $(LIBS)
-
-su.lint:       $(SSRCS)
-       $(LINT) $(LINTFLAGS) -DSU $(SSRCS) > su.lint
-
-passwd:        $(POBJS) $(LIBSHADOW)
-       $(CC) -o passwd $(LDFLAGS) $(POBJS) $(LIBSHADOW) $(LIBS) $(CRACKLIB)
-
-passwd.lint: $(PSRCS)
-       $(LINT) $(LINTFLAGS) -DPASSWD $(PSRCS) > passwd.lint
-
-gpasswd: $(GPOBJS) $(LIBSHADOW)
-       $(CC) -o gpasswd $(LDFLAGS) $(GPOBJS) $(LIBSHADOW) $(LIBS)
-
-gpasswd.lint: $(GPSRCS)
-       $(LINT) $(LINTFLAGS) $(GPSRCS) > gpasswd.lint
-
-dpasswd: $(DPOBJS) $(LIBSHADOW)
-       $(CC) -o dpasswd $(LDFLAGS) $(DPOBJS) $(LIBSHADOW) $(LIBS)
-
-dpasswd.lint: $(DPSRCS)
-       $(LINT) $(LINTFLAGS) $(DPSRCS) > dpasswd.lint
-
-pwconv:        $(PWOBJS) $(LIBSHADOW) config.h
-       $(CC) -o pwconv $(LDFLAGS) $(PWOBJS) $(LIBSHADOW) $(LIBS)
-
-pwconv.lint: $(PWSRCS) config.h
-       $(LINT) $(LINTFLAGS) -DPASSWD $(PWSRCS) > pwconv.lint
-
-pwunconv: $(PWUNOBJS) $(LIBSHADOW) config.h
-       $(CC) -o pwunconv $(LDFLAGS) $(PWUNOBJS) $(LIBSHADOW) $(LIBS)
-
-pwunconv.lint: $(PWUNSRCS)
-       $(LINT) $(LINTFLAGS) -DPASSWD $(PWUNSRCS) > pwunconv.lint
-
-sulogin: $(SULOGOBJS) $(LIBSHADOW)
-       $(CC) -o sulogin $(LDFLAGS) $(SULOGOBJS) $(LIBSHADOW) $(LIBS)
-
-sulogin.lint: $(SULOGSRCS)
-       $(LINT) $(LINTFLAGS) $(SULOGSRCS) > sulogin.lint
-
-faillog: faillog.o
-       $(CC) -o faillog $(LDFLAGS) faillog.o $(LIBS)
-
-faillog.lint: faillog.c faillog.h config.h
-       $(LINT) $(LINTFLAGS) faillog.c > faillog.lint
-
-lastlog: lastlog.o
-       $(CC) -o lastlog $(LDFLAGS) lastlog.o $(LIBS)
-
-lastlog.lint: lastlog.c config.h lastlog.h
-       $(LINT) $(LINTFLAGS) $(MKPWDSRCS) > lastlog.lint
-
-mkpasswd: $(MKPWDOBJS) $(LIBSHADOW)
-       $(CC) -o mkpasswd $(LDFLAGS) $(MKPWDOBJS) $(LIBSHADOW) $(LIBS)
-
-mkpasswd.lint: $(MKPWDSRCS)
-       $(LINT) $(LINTFLAGS) $(MKPWDSRCS) > mkpasswd.lint
-
-newgrp: $(NGOBJS) $(LIBSHADOW)
-       $(CC) -o newgrp $(LDFLAGS) $(NGOBJS) $(LIBSHADOW) $(LIBS)
-
-newgrp.lint: $(NGSRCS)
-       $(LINT) $(LINTFLAGS) $(NGSRCS) > newgrp.lint
-
-sg:    newgrp
-       rm -f sg
-       ln newgrp sg
-
-sg.lint: newgrp.lint
-       ln newgrp.lint sg.lint
-
-chfn:  $(CHFNOBJS) $(LIBSHADOW)
-       $(CC) -o chfn $(LDFLAGS) $(CHFNOBJS) $(LIBSHADOW) $(LIBS)
-
-chfn.lint:     $(CHFNSRCS)
-       $(LINT) $(LINTFLAGS) $(CHFNSRCS) > chfn.lint
-
-chsh:  $(CHSHOBJS) $(LIBSHADOW)
-       $(CC) -o chsh $(LDFLAGS) $(CHSHOBJS) $(LIBSHADOW) $(LIBS)
-
-chsh.lint: $(CHSHSRCS)
-       $(LINT) $(LINTFLAGS) $(CHSHSRCS) > chsh.lint
-
-chage: $(CHAGEOBJS) $(LIBSHADOW)
-       $(CC) -o chage $(LDFLAGS) $(CHAGEOBJS) $(LIBSHADOW) $(LIBS)
-
-chage.lint: $(CHAGESRCS)
-       $(LINT) $(LINTFLAGS) -DPASSWD $(CHAGESRCS) > chage.lint
-
-chpasswd: $(CHPASSOBJS) $(LIBSHADOW)
-       $(CC) -o chpasswd $(LDFLAGS) $(CHPASSOBJS) $(LIBSHADOW) $(LIBS)
-
-chpasswd.lint: $(CHPASSSRCS)
-       $(LINT) $(LINTFLAGS) $(CHPASSSRCS) > chpasswd.lint
-
-newusers: newusers.o $(LIBSHADOW)
-       $(CC) -o newusers $(LDFLAGS) newusers.o $(LIBSHADOW) $(LIBS)
-
-newusers.lint: newusers.c
-       $(LINT) $(LINTFLAGS) newusers.c > newusers.lint
-       
-id: id.o $(LIBSHADOW)
-       $(CC) -o id $(LDFLAGS) id.o $(LIBSHADOW) $(LIBS)
-
-id.lint: id.c
-       $(LINT) $(LINTFLAGS) id.c > id.lint
-
-groups: groups.o $(LIBSHADOW)
-       $(CC) -o groups $(LDFLAGS) groups.o $(LIBSHADOW) $(LIBS)
-
-groups.lint: groups.c
-       $(LINT) $(LINTFLAGS) groups.c > groups.lint
-
-useradd: useradd.o copydir.o mkrmdir.o $(LIBSHADOW)
-       $(CC) -o useradd $(LDFLAGS) useradd.o copydir.o mkrmdir.o \
-               $(LIBSHADOW) $(LIBS) $(NDIR)
-
-useradd.lint: useradd.c copydir.c mkrmdir.c
-       $(LINT) $(LINTFLAGS) useradd.c copydir.c mkrmdir.c > useradd.lint
-
-userdel: userdel.o copydir.o mkrmdir.o $(LIBSHADOW)
-       $(CC) -o userdel $(LDFLAGS) userdel.o copydir.o mkrmdir.o \
-               $(LIBSHADOW) $(LIBS) $(NDIR)
-
-userdel.lint: userdel.c copydir.c mkrmdir.c
-       $(LINT) $(LINTFLAGS) userdel.c copydir.c mkrmdir.c > userdel.lint
-
-usermod: usermod.o copydir.o mkrmdir.o chowndir.o $(LIBSHADOW)
-       $(CC) -o usermod $(LDFLAGS) usermod.o copydir.o mkrmdir.o \
-               chowndir.o $(LIBSHADOW) $(LIBS) $(NDIR)
-
-usermod.lint: usermod.c copydir.c mkrmdir.c chowndir.c
-       $(LINT) $(LINTFLAGS) usermod.c copydir.c mkrmdir.c \
-               chowndir.c > usermod.lint
-
-groupadd: groupadd.o chkgname.o $(LIBSHADOW)
-       $(CC) -o groupadd $(LDFLAGS) groupadd.o chkgname.o $(LIBSHADOW) $(LIBS)
-
-groupadd.lint: groupadd.c
-       $(LINT) $(LINTFLAGS) groupadd.c > groupadd.lint
-
-groupdel: groupdel.o $(LIBSHADOW)
-       $(CC) -o groupdel $(LDFLAGS) groupdel.o $(LIBSHADOW) $(LIBS)
-
-groupdel.lint: groupdel.c
-       $(LINT) $(LINTFLAGS) groupdel.c > groupdel.lint
-
-groupmod: groupmod.o chkgname.o $(LIBSHADOW)
-       $(CC) -o groupmod $(LDFLAGS) groupmod.o chkgname.o $(LIBSHADOW) $(LIBS)
-
-groupmod.lint: groupmod.c
-       $(LINT) $(LINTFLAGS) groupmod.c > groupmod.lint
-
-logoutd: logoutd.o $(LIBSHADOW)
-       $(CC) -o logoutd $(LDFLAGS) logoutd.o $(LIBSHADOW)
-
-logoutd.lint: logoutd.c
-       $(LINT) $(LINTFLAGS) logoutd.c > logoutd.lint
-
-pwck: pwck.o $(LIBSHADOW)
-       $(CC) -o pwck $(LDFLAGS) pwck.o $(LIBSHADOW) $(LIBS)
-
-pwck.lint: pwck.c
-       $(LINT) $(LINTFLAGS) pwck.c > pwck.lint
-
-grpck: grpck.o $(LIBSHADOW)
-       $(CC) -o grpck $(LDFLAGS) grpck.o $(LIBSHADOW) $(LIBS)
-
-grpck.lint: grpck.c
-       $(LINT) $(LINTFLAGS) grpck.c > grpck.lint
-
-expiry: expiry.o age.o setugid.o $(LIBSHADOW)
-       $(CC) -o expiry $(LDFLAGS) expiry.o age.o setugid.o $(LIBSHADOW) $(LIBS)
-
-expiry.lint: expiry.c
-       $(LINT) $(LINTFLAGS) expiry.c > expiry.lint
-
-sulog.o: config.h
-
-scologin: scologin.o
-       $(CC) -o scologin $(LDFLAGS) scologin.o -lsocket
-
-passwd.o: config.h $(SHADOW) $(PWD) pwauth.h
-lmain.o: config.h lastlog.h faillog.h $(PWD) pwauth.h
-smain.o: config.h lastlog.h $(PWD) $(SHADOW) pwauth.h
-sub.o: $(PWD)
-setup.o: config.h $(PWD)
-mkrmdir.o: config.h
-utmp.o: config.h
-mail.o: config.h
-motd.o: config.h
-age.o: config.h gshadow.h $(PWD)
-log.o: config.h lastlog.h $(PWD)
-lastlog.o: lastlog.h
-shell.o: config.h
-entry.o: config.h $(SHADOW) $(PWD)
-hushed.o: config.h $(PWD)
-valid.o: config.h $(PWD)
-failure.o: faillog.h config.h
-faillog.o: faillog.h config.h $(PWD)
-newgrp.o: config.h gshadow.h $(SHADOW) $(PWD)
-mkpasswd.o: config.h gshadow.h $(SHADOW) $(PWD)
-gpmain.o: config.h gshadow.h $(PWD)
-chfn.o: config.h $(PWD)
-chsh.o: config.h $(PWD)
-chage.o: config.h $(SHADOW) $(PWD)
-pwconv.o: config.h $(SHADOW)
-pwunconv.o: config.h $(SHADOW) $(PWD)
-chpasswd.o: config.h $(SHADOW) $(PWD)
-id.o: $(PWD)
-newusers.o: config.h $(SHADOW) $(PWD)
-dpmain.o: config.h dialup.h
-useradd.o: config.h gshadow.h $(SHADOW) $(PWD) pwauth.h
-userdel.o: config.h gshadow.h $(SHADOW) $(PWD) pwauth.h
-usermod.o: config.h gshadow.h $(SHADOW) $(PWD) pwauth.h
-groupadd.o: config.h gshadow.h
-groupdel.o: config.h gshadow.h
-groupmod.o: config.h gshadow.h
-logoutd.o: config.h
-sulogin.o: config.h pwauth.h
-copydir.o: config.h
-chowndir.o: config.h
-pwck.o: config.h $(SHADOW) $(PWD)
-grpck.o: config.h gshadow.h $(PWD)
-
-$(LIBSHADOW)(shadow.o): $(SHADOW) config.h
-$(LIBSHADOW)(shadowio.o): $(SHADOW) config.h
-$(LIBSHADOW)(grent.o): config.h gshadow.h
-$(LIBSHADOW)(groupio.o): config.h
-$(LIBSHADOW)(sgroupio.o): config.h gshadow.h
-$(LIBSHADOW)(dialup.o): dialup.h
-$(LIBSHADOW)(dialchk.o): dialup.h config.h
-$(LIBSHADOW)(getdef.o): config.h
-$(LIBSHADOW)(pwdbm.o): config.h $(PWD)
-$(LIBSHADOW)(spdbm.o): config.h $(SHADOW)
-$(LIBSHADOW)(grdbm.o): config.h
-$(LIBSHADOW)(gshadow.o): config.h
-$(LIBSHADOW)(gsdbm.o): config.h gshadow.h
-$(LIBSHADOW)(pwauth.o): config.h pwauth.h
-$(LIBSHADOW)(pwpack.o): config.h $(PWD)
-$(LIBSHADOW)(pwent.o): config.h $(PWD)
-$(LIBSHADOW)(pwio.o): $(PWD) config.h
-$(LIBSHADOW)(getpass.o): config.h
-$(LIBSHADOW)(encrypt.o): config.h
-$(LIBSHADOW)(salt.o): config.h
-$(LIBSHADOW)(md5crypt.o): config.h
-$(LIBSHADOW)(md5.o): config.h
-$(LIBSHADOW)(port.o): port.h
-$(LIBSHADOW)(rad64.o): config.h
-$(LIBSHADOW)(lockpw.o):
-$(LIBSHADOW)(rename.o): config.h
-$(LIBSHADOW)(gspack.o): config.h gshadow.h
-$(LIBSHADOW)(list.o):
-$(LIBSHADOW)(strtoday.o): config.h
-$(LIBSHADOW)(xmalloc.o):
-$(LIBSHADOW)(basename.o):
-$(LIBSHADOW)(isexpired.o): config.h $(SHADOW)
-$(LIBSHADOW)(commonio.o):
-
-shadow.h:
-       -rm -f Linux
-       -mv oldshadow.h shadow.h
-
-clean: shadow.h
-       -rm -f *.o a.out core npasswd nshadow *.pag *.dir
-
-clobber: clean
-       -rm -f $(BINS) *.lint *.L libshadow.a
-
-nuke:  clobber
-       -for file in * ; do \
-               if [ -f s.$$file -a ! -f p.$$file ] ; then \
-                       rm -f $$file ;\
-               fi ;\
-       done
-
-# File lists for this are out of sync with reality...  --marekm
-#
-#shar: login.sh.01 login.sh.02 login.sh.03 login.sh.04 login.sh.05 \
-#      login.sh.06 login.sh.07 login.sh.08 login.sh.09 login.sh.10 \
-#      login.sh.11 login.sh.12
-#
-#login.sh.01: $(FILES1) Makefile
-#      shar -Dc $(FILES1) > login.sh.01
-#
-#login.sh.02: $(FILES2) Makefile
-#      shar -Dc $(FILES2) > login.sh.02
-#
-#login.sh.03: $(FILES3) Makefile
-#      shar -Dc $(FILES3) > login.sh.03
-#
-#login.sh.04: $(FILES4) Makefile
-#      shar -Dc $(FILES4) > login.sh.04
-#
-#login.sh.05: $(FILES5) Makefile
-#      shar -Dc $(FILES5) > login.sh.05
-#
-#login.sh.06: $(FILES6) Makefile
-#      shar -Dc $(FILES6) > login.sh.06
-#
-#login.sh.07: $(FILES7) Makefile
-#      shar -Dc $(FILES7) > login.sh.07
-#
-#login.sh.08: $(FILES8) Makefile
-#      shar -Dc $(FILES8) > login.sh.08
-#
-#login.sh.09: $(FILES9) Makefile
-#      shar -Dc $(FILES9) > login.sh.09
-#
-#login.sh.10: $(DOCS1) Makefile
-#      shar -Dc $(DOCS1) > login.sh.10
-#
-#login.sh.11: $(DOCS2) Makefile
-#      shar -Dc $(DOCS2) > login.sh.11
-#
-#login.sh.12: $(FILES_SUN4) $(FILES_SVR4) $(FILES_LINUX) Makefile
-#      shar -Dc $(FILES_SUN4) $(FILES_SVR4) $(FILES_LINUX) > login.sh.12
diff --git a/old/Makefile.sun4 b/old/Makefile.sun4
deleted file mode 100644 (file)
index 0b9e94a..0000000
+++ /dev/null
@@ -1,685 +0,0 @@
-#
-# Copyright 1988 - 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.
-#
-#      %W%     %U%  - Shadow password system (SunOS 4.1.1 version)
-#
-#      $Id: Makefile.sun4,v 1.2 1997/05/01 23:11:55 marekm Exp $
-#
-SHELL = /bin/sh
-
-#
-# Set this flag to decide what level of code "get" returns.
-# The base USENET release was release 1.  It is no longer supported.
-# The version with the utilities added was release 2.
-# The version with database-like file access is release 3.
-RELEASE = 3
-GFLAGS = -t -r$(RELEASE)
-
-# SunOS 4.1.1 uses /usr/bin
-LOGINDIR = /usr/bin
-
-# SunOS 4.1.1 requires no extra libraries
-NDIR =
-
-# Define some stuff for Cracklib.  This assumes that libcracklib.a is
-# in a system directory.
-# CRACKDEF='-DUSE_CRACKLIB'
-# CRACKLIB=-lcrack
-
-# Pick your favorite C compiler and tags command
-CC = /usr/bin/cc
-TAGS = ctags
-
-# SunOS 4.1.1 is SUN4
-OS = -DSUN4
-
-# SunOS 4.1.1 uses ranlib
-RANLIB = ranlib
-
-# Configuration Flags
-#
-#      DEST_INCLUDE_DIR - local include files
-#      LIBS - system libraries
-#              -lsocket - needed for TCP/IP and possibly SYSLOG
-#              -ldbm or -lndbm - needed for DBM support
-#              -lcrypt - needed for SCO crypt() functions
-#      CFLAGS - C compiler flags
-#              -DLAI_TCP - needed for SCO Xenix Lachman TCP/IP
-
-DEST_INCLUDE_DIR = /usr/5include
-
-# Flags for SunOS 4.1.1
-CFLAGS = -O2 $(OS) -I$(DEST_INCLUDE_DIR) $(CRACKDEF)
-LIBS =
-LDFLAGS = 
-
-# Library for SunOS 4.1.1
-LIBSEC = libsec.a
-
-# Names for root user and group, and bin user and group.  See your
-# /etc/passwd and /etc/group files.  This is for SunOS 4.1.1
-RUID = root
-RGID = wheel
-BUID = bin
-BGID = bin
-
-# Where the login.defs file will be copied.  Must agree with config.h
-DEST_LOGIN_DEFS = /etc/login.defs
-
-# SunOS has its own pwd.h, use that one.
-PWD = /usr/include/pwd.h
-
-# Rules for .L (lint) files.
-.SUFFIXES: .L
-LINT = lint
-LINTFLAGS = $(OS) -Dlint
-
-.c.L:
-       $(LINT) -pxu $(LINTFLAGS) $*.c > $*.L
-
-LOBJS = lmain.o login.o env.o valid.o setup.o shell.o age.o \
-       utmp.o sub.o mail.o motd.o log.o ttytype.o failure.o \
-       tz.o console.o hushed.o
-
-LSRCS = lmain.c login.c env.c valid.c setup.c shell.c age.c \
-       utmp.c sub.c mail.c motd.c log.c ttytype.c failure.c \
-       tz.c console.c hushed.c
-
-SOBJS = smain.o env.o entry.o susetup.o shell.o \
-       sub.o mail.o motd.o sulog.o age.o tz.o hushed.o
-
-SSRCS = smain.c env.c entry.c setup.c shell.c \
-       pwent.c sub.c mail.c motd.c sulog.c shadow.c age.c pwpack.c rad64.c \
-       tz.c hushed.c
-
-POBJS = passwd.o obscure.o
-PSRCS = passwd.c obscure.c
-
-GPSRCS = gpmain.c
-
-GPOBJS = gpmain.o
-
-PWOBJS = pwconv.o
-
-PWSRCS = pwconv.c pwent.c shadow.c pwpack.c rad64.c
-
-PWUNOBJS = pwunconv.o
-
-PWUNSRCS = pwunconv.c pwent.c shadow.c pwpack.c rad64.c
-
-SULOGOBJS = sulogin.o entry.o env.o age.o setup.o \
-       valid.o shell.o tz.o
-
-SULOGSRCS = sulogin.c entry.c env.c age.c pwent.c setup.c \
-       shadow.c shell.c valid.c pwpack.c tz.c
-
-MKPWDOBJS = mkpasswd.o
-
-MKPWDSRCS = mkpasswd.c
-
-NGSRCS = newgrp.c env.c shell.c
-
-NGOBJS = newgrp.o env.o shell.o
-
-CHFNSRCS = chfn.c fields.c
-CHFNOBJS = chfn.o fields.o
-CHSHSRCS = chsh.c fields.c
-CHSHOBJS = chsh.o fields.o
-CHAGEOBJS = chage.o fields.o
-CHAGESRCS = chage.c fields.c
-CHPASSOBJS = chpasswd.o
-CHPASSSRCS = chpasswd.c
-DPSRCS = dpmain.c
-DPOBJS = dpmain.o
-
-ALLSRCS = age.c dialchk.c dialup.c entry.c env.c lmain.c log.c login.c mail.c \
-       motd.c obscure.c passwd.c pwconv.c pwent.c pwunconv.c getpass.c \
-       setup.c shadow.c shell.c smain.c sub.c sulog.c sulogin.c ttytype.c \
-       utmp.c valid.c port.c newgrp.c gpmain.c grent.c mkpasswd.c pwpack.c \
-       chfn.c chsh.c chage.c rad64.c encrypt.c chpasswd.c shadowio.c pwio.c \
-       newusers.c groupio.c fields.c pwdbm.c grpack.c grdbm.c sppack.c \
-       spdbm.c dpmain.c gshadow.c gsdbm.c gspack.c sgroupio.c useradd.c \
-       userdel.c patchlevel.h usermod.c copydir.c mkrmdir.c groupadd.c \
-       groupdel.c groupmod.c tz.c console.c hushed.c getdef.c scologin.c \
-       logoutd.c groups.c pwauth.c lockpw.c chowndir.c utent.c
-
-FILES1 = LICENSE README patchlevel.h newgrp.c Makefile config.h pwunconv.c obscure.c \
-       age.c id.c
-
-FILES2 = passwd.c port.c lmain.c sulogin.c pwpack.c dialup.c expiry.c \
-       gshadow.h
-
-FILES3 = chfn.c chsh.c smain.c faillog.c pwconv.c shadow.c pwck.c utent.c
-
-FILES4 = gpmain.c chage.c pwent.c valid.c setup.c entry.c ttytype.c port.h
-
-FILES5 = pwio.c encrypt.c chpasswd.c newusers.c rad64.c dialchk.c faillog.h \
-       pwdbm.c grdbm.c gshadow.c sppack.c grpck.c
-
-FILES6 = gspack.c spdbm.c lastlog.h shell.c login.c sub.c dpmain.c mail.c \
-       env.c pwd.h.m4 grpack.c shadow.h log.c grent.c motd.c dialup.h \
-       fields.c gsdbm.c utmp.c failure.c
-
-FILES7 = groupio.c shadowio.c sgroupio.c groups.c copydir.c mkrmdir.c \
-       mkpasswd.c pwauth.c pwauth.h lastlog.c
-
-FILES8 = useradd.c usermod.c login.defs
-
-FILES9 = groupadd.c groupdel.c groupmod.c tz.c console.c hushed.c getdef.c \
-       scologin.c logoutd.c sulog.c getpass.c userdel.c lockpw.c chowndir.c
-
-FILES_SUN4 = Makefile.sun4 README.sun4 config.h.sun4
-FILES_SVR4 = Makefile.svr4 config.h.svr4
-FILES_LINUX = Makefile.linux config.h.linux
-
-MAN_1 = chage.1 chfn.1 chsh.1 id.1 login.1 newgrp.1 passwd.1 su.1 \
-       useradd.1 userdel.1 usermod.1 groupadd.1 groupdel.1 groupmod.1 \
-       groups.1 pwck.1 grpck.1
-MAN_3 = shadow.3 pwauth.3
-MAN_4 = faillog.4 passwd.4 porttime.4 shadow.4
-MAN_5 = login.5
-MAN_8 = chpasswd.8 dpasswd.8 faillog.8 newusers.8 pwconv.8 pwunconv.8 \
-       sulogin.8 mkpasswd.8 logoutd.8 pwauth.8 lastlog.8
-
-DOCS1 = $(MAN_1) $(MAN_3) $(MAN_4)
-DOCS2 = $(MAN_5) $(MAN_8)
-DOCS = $(DOCS1) $(DOCS2)
-
-BINS = su login pwconv pwunconv passwd sulogin faillog newgrp gpasswd \
-       mkpasswd chfn chsh chage chpasswd newusers dpasswd id useradd \
-       userdel usermod groupadd groupdel groupmod logoutd groups \
-       pwck grpck lastlog expiry
-
-all:   $(BINS) $(DOCS)
-
-.PRECIOUS: libshadow.a
-
-libshadow.a: \
-       libshadow.a(dialchk.o) \
-       libshadow.a(dialup.o) \
-       libshadow.a(encrypt.o) \
-       libshadow.a(getdef.o) \
-       libshadow.a(getpass.o) \
-       libshadow.a(grdbm.o) \
-       libshadow.a(grent.o) \
-       libshadow.a(groupio.o) \
-       libshadow.a(grpack.o) \
-       libshadow.a(gshadow.o) \
-       libshadow.a(gsdbm.o) \
-       libshadow.a(gspack.o) \
-       libshadow.a(sgroupio.o) \
-       libshadow.a(port.o) \
-       libshadow.a(pwdbm.o) \
-       libshadow.a(pwent.o) \
-       libshadow.a(pwio.o) \
-       libshadow.a(pwpack.o) \
-       libshadow.a(pwauth.o) \
-       libshadow.a(rad64.o) \
-       libshadow.a(spdbm.o) \
-       libshadow.a(shadow.o) \
-       libshadow.a(shadowio.o) \
-       libshadow.a(sppack.o) \
-       libshadow.a(lockpw.o) \
-       libshadow.a(utent.o) \
-       libshadow.a(list.o) \
-       libshadow.a(strtoday.o) \
-       libshadow.a(basename.o) \
-       libshadow.a(isexpired.o) \
-       libshadow.a(xmalloc.o)
-       $(RANLIB) libshadow.a
-
-libsec: $(LIBSEC)(shadow.o)
-       $(RANLIB) $(LIBSEC)
-
-save:
-       [ ! -d save ] && mkdir save
-       -cp $(LOGINDIR)/login save
-       -cp /etc/mkpasswd /etc/pwconv /etc/pwunconv /etc/sulogin /etc/chpasswd \
-               /etc/newusers /etc/useradd /etc/userdel /etc/usermod \
-               /etc/groupadd /etc/groupdel /etc/groupmod /etc/logoutd \
-               /etc/login.defs /etc/pwck /etc/grpck /bin/expiry save
-       -cp /bin/su /bin/passwd /bin/gpasswd /bin/dpasswd /bin/faillog \
-               /bin/newgrp /bin/chfn /bin/chsh /bin/chage /bin/id \
-               /bin/scologin save
-       -cp $(DEST_INCLUDE_DIR)/dialup.h $(DEST_INCLUDE_DIR)/shadow.h \
-               save
-
-restore:
-       [ -d save ]
-       -(cd save ; cp login $(LOGINDIR) )
-       -(cd save ; -cp mkpasswd pwconv pwunconv sulogin chpasswd \
-               newusers useradd userdel usermod groupadd groupdel groupmod \
-               logoutd login.defs pwck grpck /etc)
-       -(cd save ; cp su passwd gpasswd dpasswd faillog newgrp chfn chsh \
-               chage id scologin expiry /bin)
-       -(cd save ; cp dialup.h shadow.h gshadow.h $(DEST_INCLUDE_DIR) )
-
-install: all
-       strip $(BINS)
-       cp login $(LOGINDIR)/login
-       cp mkpasswd /etc 
-       cp pwconv /etc 
-       cp pwunconv /etc 
-       cp sulogin /etc 
-       cp chpasswd /etc 
-       cp newusers /etc 
-       cp useradd /etc 
-       cp userdel /etc 
-       cp usermod /etc 
-       cp groupadd /etc 
-       cp groupdel /etc 
-       cp groupmod /etc 
-       cp logoutd /etc
-       cp pwck /etc
-       cp grpck /etc
-       cp su /bin
-       cp passwd /bin
-       cp gpasswd /bin
-       cp dpasswd /bin
-       cp faillog /bin
-       cp newgrp /bin
-       cp chfn /bin
-       cp chsh /bin
-       cp chage /bin
-       cp id /bin
-       cp expiry /bin
-       cp dialup.h shadow.h gshadow.h $(DEST_INCLUDE_DIR)
-       chown $(RUID) $(LOGINDIR)/login /etc/pwconv /etc/pwunconv /etc/sulogin \
-               /bin/su /bin/passwd /bin/gpasswd /bin/newgrp /etc/mkpasswd \
-               /bin/dpasswd /bin/chsh /bin/chfn /bin/chage /etc/useradd \
-               /etc/userdel /etc/usermod /etc/groupadd /etc/groupdel \
-               /etc/groupmod /etc/logoutd /etc/pwck /etc/grpck /bin/expiry
-       chgrp $(RGID) $(LOGINDIR)/login /etc/pwconv /etc/pwunconv /etc/sulogin \
-               /bin/su /bin/passwd /bin/gpasswd /bin/newgrp /etc/mkpasswd \
-               /bin/dpasswd /bin/chsh /bin/chfn /bin/chage /etc/useradd \
-               /etc/userdel /etc/usermod /etc/groupadd /etc/groupdel \
-               /etc/groupmod /etc/logoutd /etc/pwck /etc/grpck /bin/expiry
-       chown $(BUID) /bin/faillog /bin/id $(DEST_INCLUDE_DIR)/shadow.h \
-               $(DEST_INCLUDE_DIR)/dialup.h $(DEST_INCLUDE_DIR)/gshadow.h
-       chgrp $(BGID) /bin/faillog /bin/id $(DEST_INCLUDE_DIR)/shadow.h \
-               $(DEST_INCLUDE_DIR)/dialup.h $(DEST_INCLUDE_DIR)/gshadow.h
-       chmod 700 /etc/pwconv /etc/pwunconv /etc/sulogin /etc/mkpasswd \
-               /etc/chpasswd /etc/newusers /bin/dpasswd /bin/chage \
-               /etc/useradd /etc/userdel /etc/usermod /etc/groupadd \
-               /etc/groupdel /etc/groupmod /etc/logoutd /etc/pwck \
-               /etc/grpck
-       chmod 4711 $(LOGINDIR)/login /bin/su /bin/passwd /bin/gpasswd \
-               /bin/newgrp /bin/chfn /bin/chsh /bin/expiry
-       chmod 711 /bin/faillog /bin/id
-       chmod 444 $(DEST_INCLUDE_DIR)/shadow.h $(DEST_INCLUDE_DIR)/dialup.h \
-               $(DEST_INCLUDE_DIR)/gshadow.h
-       [ -f $(DEST_LOGIN_DEFS) ] || (cp login.defs $(DEST_LOGIN_DEFS) ; \
-               chown $(RUID) $(DEST_LOGIN_DEFS) ; \
-               chgrp $(RGID) $(DEST_LOGIN_DEFS) ; \
-               chmod 600 $(DEST_LOGIN_DEFS) )
-
-lint:  su.lint login.lint pwconv.lint pwunconv.lint passwd.lint sulogin.lint \
-       faillog.lint newgrp.lint gpasswd.lint mkpasswd.lint chfn.lint \
-       chsh.lint chage.lint dpasswd.lint id.lint useradd.lint userdel.lint \
-       usermod.lint groupadd.lint groupdel.lint groupmod.lint logoutd.lint \
-       pwck.lint grpck.lint expiry.lint \
-       $(ALLSRCS:.c=.L)
-
-tags:  $(ALLSRCS)
-       $(TAGS) $(ALLSRCS)
-
-README:
-       [ -f s.README ] && get -t -r$(RELEASE) s.README
-       
-$(DOCS):
-       [ -f s.$@ ] && get -t -r$(RELEASE) s.$@
-
-login.defs:
-       [ -f s.login.defs ] && get -t -r$(RELEASE) s.login.defs
-
-Makefile.sun4:
-       [ -f s.Makefile.sun4 ] && get -t -r$(RELEASE) s.Makefile.sun4
-
-README.sun4:
-       [ -f s.README.sun4 ] && get -t -r$(RELEASE) s.README.sun4
-
-config.h.sun4:
-       [ -f s.config.h.sun4 ] && get -t -r$(RELEASE) s.config.h.sun4
-
-login: $(LOBJS) libshadow.a
-       $(CC) -o login $(LDFLAGS) $(LOBJS) libshadow.a $(LIBS)
-
-login.lint: $(LSRCS)
-       $(LINT) $(LINTFLAGS) $(LSRCS) > login.lint
-
-su:    $(SOBJS) libshadow.a
-       $(CC) -o su $(LDFLAGS) $(SOBJS) libshadow.a $(LIBS)
-
-su.lint:       $(SSRCS)
-       $(LINT) $(LINTFLAGS) -DSU $(SSRCS) > su.lint
-
-passwd:        $(POBJS) libshadow.a
-       $(CC) -o passwd $(LDFLAGS) $(POBJS) libshadow.a $(LIBS) $(CRACKLIB)
-
-passwd.lint: $(PSRCS)
-       $(LINT) $(LINTFLAGS) -DPASSWD $(PSRCS) > passwd.lint
-
-gpasswd: $(GPOBJS) libshadow.a
-       $(CC) -o gpasswd $(LDFLAGS) $(GPOBJS) libshadow.a $(LIBS)
-
-gpasswd.lint: $(GPSRCS)
-       $(LINT) $(LINTFLAGS) $(GPSRCS) > gpasswd.lint
-
-dpasswd: $(DPOBJS) libshadow.a
-       $(CC) -o dpasswd $(LDFLAGS) $(DPOBJS) libshadow.a $(LIBS)
-
-dpasswd.lint: $(DPSRCS)
-       $(LINT) $(LINTFLAGS) $(DPSRCS) > dpasswd.lint
-
-pwconv:        $(PWOBJS) libshadow.a config.h
-       $(CC) -o pwconv $(LDFLAGS) $(PWOBJS) libshadow.a $(LIBS)
-
-pwconv.lint: $(PWSRCS) config.h
-       $(LINT) $(LINTFLAGS) -DPASSWD $(PWSRCS) > pwconv.lint
-
-pwunconv: $(PWUNOBJS) libshadow.a config.h
-       $(CC) -o pwunconv $(LDFLAGS) $(PWUNOBJS) libshadow.a $(LIBS)
-
-pwunconv.lint: $(PWUNSRCS)
-       $(LINT) $(LINTFLAGS) -DPASSWD $(PWUNSRCS) > pwunconv.lint
-
-sulogin: $(SULOGOBJS) libshadow.a
-       $(CC) -o sulogin $(LDFLAGS) $(SULOGOBJS) libshadow.a $(LIBS)
-
-sulogin.lint: $(SULOGSRCS)
-       $(LINT) $(LINTFLAGS) $(SULOGSRCS) > sulogin.lint
-
-faillog: faillog.o
-       $(CC) -o faillog $(LDFLAGS) faillog.o $(LIBS)
-
-faillog.lint: faillog.c faillog.h config.h
-       $(LINT) $(LINTFLAGS) faillog.c > faillog.lint
-
-lastlog: lastlog.o
-       $(CC) -o lastlog $(LDFLAGS) lastlog.o $(LIBS)
-
-lastlog.lint: lastlog.c config.h lastlog.h
-       $(LINT) $(LINTFLAGS) $(MKPWDSRCS) > lastlog.lint
-
-mkpasswd: $(MKPWDOBJS) libshadow.a
-       $(CC) -o mkpasswd $(LDFLAGS) $(MKPWDOBJS) libshadow.a $(LIBS)
-
-mkpasswd.lint: $(MKPWDSRCS)
-       $(LINT) $(LINTFLAGS) $(MKPWDSRCS) > mkpasswd.lint
-
-newgrp: $(NGOBJS) libshadow.a
-       $(CC) -o newgrp $(LDFLAGS) $(NGOBJS) libshadow.a $(LIBS)
-
-newgrp.lint: $(NGSRCS)
-       $(LINT) $(LINTFLAGS) $(NGSRCS) > newgrp.lint
-
-sg:    newgrp
-       rm -f sg
-       ln newgrp sg
-
-chfn:  $(CHFNOBJS) libshadow.a
-       $(CC) -o chfn $(LDFLAGS) $(CHFNOBJS) libshadow.a $(LIBS)
-
-chfn.lint:     $(CHFNSRCS)
-       $(LINT) $(LINTFLAGS) $(CHFNSRCS) > chfn.lint
-
-chsh:  $(CHSHOBJS) libshadow.a
-       $(CC) -o chsh $(LDFLAGS) $(CHSHOBJS) libshadow.a $(LIBS)
-
-chsh.lint: $(CHSHSRCS)
-       $(LINT) $(LINTFLAGS) $(CHSHSRCS) > chsh.lint
-
-chage: $(CHAGEOBJS) libshadow.a
-       $(CC) -o chage $(LDFLAGS) $(CHAGEOBJS) libshadow.a $(LIBS)
-
-chage.lint: $(CHAGESRCS)
-       $(LINT) $(LINTFLAGS) -DPASSWD $(CHAGESRCS) > chage.lint
-
-chpasswd: $(CHPASSOBJS) libshadow.a
-       $(CC) -o chpasswd $(LDFLAGS) $(CHPASSOBJS) libshadow.a $(LIBS)
-
-chpasswd.lint: $(CHPASSSRCS)
-       $(LINT) $(LINTFLAGS) $(CHPASSSRCS) > chpasswd.lint
-
-newusers: newusers.o libshadow.a
-       $(CC) -o newusers $(LDFLAGS) newusers.o libshadow.a $(LIBS)
-
-newusers.lint: newusers.c
-       $(LINT) $(LINTFLAGS) newusers.c > newusers.lint
-       
-id: id.o libshadow.a
-       $(CC) -o id $(LDFLAGS) id.o libshadow.a $(LIBS)
-
-id.lint: id.c
-       $(LINT) $(LINTFLAGS) id.c > id.lint
-
-groups: groups.o libshadow.a
-       $(CC) -o groups $(LDFLAGS) groups.o libshadow.a $(LIBS)
-
-groups.lint: groups.c
-       $(LINT) $(LINTFLAGS) groups.c > groups.lint
-
-useradd: useradd.o copydir.o mkrmdir.o libshadow.a
-       $(CC) -o useradd $(LDFLAGS) useradd.o copydir.o mkrmdir.o \
-               libshadow.a $(LIBS) $(NDIR)
-
-useradd.lint: useradd.c copydir.c mkrmdir.c
-       $(LINT) $(LINTFLAGS) useradd.c copydir.c mkrmdir.c > useradd.lint
-
-userdel: userdel.o copydir.o mkrmdir.o libshadow.a
-       $(CC) -o userdel $(LDFLAGS) userdel.o copydir.o mkrmdir.o \
-               libshadow.a $(LIBS) $(NDIR)
-
-userdel.lint: userdel.c copydir.c mkrmdir.c
-       $(LINT) $(LINTFLAGS) userdel.c copydir.c mkrmdir.c > userdel.lint
-
-usermod: usermod.o copydir.o mkrmdir.o chowndir.o libshadow.a
-       $(CC) -o usermod $(LDFLAGS) usermod.o copydir.o mkrmdir.o \
-               chowndir.o libshadow.a $(LIBS) $(NDIR)
-
-usermod.lint: usermod.c copydir.c mkrmdir.c chowndir.c
-       $(LINT) $(LINTFLAGS) usermod.c copydir.c mkrmdir.c \
-               chowndir.c > usermod.lint
-
-groupadd: groupadd.o libshadow.a
-       $(CC) -o groupadd $(LDFLAGS) groupadd.o libshadow.a $(LIBS)
-
-groupadd.lint: groupadd.c
-       $(LINT) $(LINTFLAGS) groupadd.c > groupadd.lint
-
-groupdel: groupdel.o libshadow.a
-       $(CC) -o groupdel $(LDFLAGS) groupdel.o libshadow.a $(LIBS)
-
-groupdel.lint: groupdel.c
-       $(LINT) $(LINTFLAGS) groupdel.c > groupdel.lint
-
-groupmod: groupmod.o libshadow.a
-       $(CC) -o groupmod $(LDFLAGS) groupmod.o libshadow.a $(LIBS)
-
-groupmod.lint: groupmod.c
-       $(LINT) $(LINTFLAGS) groupmod.c > groupmod.lint
-
-logoutd: logoutd.o libshadow.a
-       $(CC) -o logoutd $(LDFLAGS) logoutd.o libshadow.a
-
-logoutd.lint: logoutd.c
-       $(LINT) $(LINTFLAGS) logoutd.c > logoutd.lint
-
-pwck: pwck.o libshadow.a
-       $(CC) -o pwck $(LDFLAGS) pwck.o libshadow.a $(LIBS)
-
-pwck.lint: pwck.c
-       $(LINT) $(LINTFLAGS) pwck.c > pwck.lint
-
-grpck: grpck.o libshadow.a
-       $(CC) -o grpck $(LDFLAGS) grpck.o libshadow.a $(LIBS)
-
-grpck.lint: grpck.c
-       $(LINT) $(LINTFLAGS) grpck.c > grpck.lint
-
-expiry: expiry.o age.o libshadow.a
-       $(CC) -o expiry $(LDFLAGS) expiry.o age.o libshadow.a $(LIBS)
-
-expiry.lint: expiry.c
-       $(LINT) $(LINTFLAGS) expiry.c > expiry.lint
-
-sulog.o: config.h
-
-susetup.c: setup.c
-       cp setup.c susetup.c
-
-susetup.o: config.h susetup.c $(PWD)
-       $(CC) -c $(CFLAGS) -DSU susetup.c
-
-scologin: scologin.o
-       $(CC) -o scologin $(LDFLAGS) scologin.o -lsocket
-
-passwd.o: config.h shadow.h pwauth.h $(PWD)
-lmain.o: config.h lastlog.h faillog.h pwauth.h $(PWD)
-smain.o: config.h lastlog.h shadow.h pwauth.h $(PWD)
-sub.o: $(PWD)
-setup.o: config.h $(PWD)
-mkrmdir.o: config.h
-utmp.o: config.h
-mail.o: config.h
-motd.o: config.h
-age.o: config.h gshadow.h $(PWD)
-log.o: config.h lastlog.h $(PWD)
-lastlog.o: lastlog.h
-shell.o: config.h
-entry.o: config.h shadow.h $(PWD)
-hushed.o: config.h $(PWD)
-valid.o: config.h $(PWD)
-failure.o: faillog.h config.h
-faillog.o: faillog.h config.h $(PWD)
-newgrp.o: config.h shadow.h gshadow.h $(PWD)
-mkpasswd.o: config.h shadow.h gshadow.h $(PWD)
-gpmain.o: config.h gshadow.h $(PWD)
-chfn.o: config.h $(PWD)
-chsh.o: config.h $(PWD)
-chage.o: config.h shadow.h $(PWD)
-pwconv.o: config.h shadow.h
-pwunconv.o: config.h shadow.h $(PWD)
-chpasswd.o: config.h shadow.h $(PWD)
-id.o: $(PWD)
-newusers.o: config.h shadow.h $(PWD)
-dpmain.o: config.h dialup.h
-useradd.o: config.h shadow.h gshadow.h pwauth.h $(PWD)
-userdel.o: config.h shadow.h gshadow.h pwauth.h $(PWD)
-usermod.o: config.h shadow.h gshadow.h pwauth.h $(PWD)
-groupadd.o: config.h gshadow.h
-groupdel.o: config.h gshadow.h
-groupmod.o: config.h gshadow.h
-logoutd.o: config.h
-sulogin.o: config.h pwauth.h
-copydir.o: config.h
-chowndir.o: config.h
-pwck.o: config.h shadow.h $(PWD)
-grpck.o: config.h gshadow.h $(PWD)
-
-libshadow.a(shadow.o): shadow.h config.h
-libshadow.a(shadowio.o): shadow.h
-libshadow.a(grent.o): config.h gshadow.h
-libshadow.a(sgroupio.o): config.h gshadow.h
-libshadow.a(dialup.o): dialup.h
-libshadow.a(dialchk.o): dialup.h config.h
-libshadow.a(getdef.o): config.h
-libshadow.a(pwdbm.o): config.h $(PWD)
-libshadow.a(spdbm.o): config.h shadow.h
-libshadow.a(grdbm.o): config.h
-libshadow.a(gshadow.o): config.h
-libshadow.a(gsdbm.o): config.h gshadow.h
-libshadow.a(pwauth.o): config.h pwauth.h
-libshadow.a(pwpack.o): config.h $(PWD)
-libshadow.a(pwent.o): config.h $(PWD)
-libshadow.a(pwio.o): config.h $(PWD)
-libshadow.a(getpass.o): config.h
-libshadow.a(encrypt.o): config.h
-libshadow.a(port.o): port.h
-libshadow.a(rad64.o): config.h
-libshadow.a(lockpw.o):
-libshadow.a(gspack.o): config.h gshadow.h
-libshadow.a(utent.o): config.h
-libshadow.a(list.o):
-libshadow.a(strtoday.o): config.h
-libshadow.a(xmalloc.o):
-libshadow.a(basename.o):
-libshadow.a(isexpired.o): config.h shadow.h
-
-clean:
-       -rm -f susetup.c *.o a.out core npasswd nshadow *.pag *.dir
-
-clobber: clean
-       -rm -f $(BINS) *.lint *.L libshadow.a
-
-nuke:  clobber
-       -for file in * ; do \
-               if [ -f s.$$file -a ! -f p.$$file ] ; then \
-                       rm -f $$file ;\
-               fi ;\
-       done
-
-shar:  login.sh.01 login.sh.02 login.sh.03 login.sh.04 login.sh.05 \
-       login.sh.06 login.sh.07 login.sh.08 login.sh.09 login.sh.10 \
-       login.sh.11 login.sh.12
-
-login.sh.01: $(FILES1) Makefile
-       shar -a $(FILES1) > login.sh.01
-
-login.sh.02: $(FILES2) Makefile
-       shar -a $(FILES2) > login.sh.02
-
-login.sh.03: $(FILES3) Makefile
-       shar -a $(FILES3) > login.sh.03
-
-login.sh.04: $(FILES4) Makefile
-       shar -a $(FILES4) > login.sh.04
-
-login.sh.05: $(FILES5) Makefile
-       shar -a $(FILES5) > login.sh.05
-
-login.sh.06: $(FILES6) Makefile
-       shar -a $(FILES6) > login.sh.06
-
-login.sh.07: $(FILES7) Makefile
-       shar -a $(FILES7) > login.sh.07
-
-login.sh.08: $(FILES8) Makefile
-       shar -a $(FILES8) > login.sh.08
-
-login.sh.09: $(FILES9) Makefile
-       shar -a $(FILES9) > login.sh.09
-
-login.sh.10: $(DOCS1) Makefile
-       shar -a $(DOCS1) > login.sh.10
-
-login.sh.11: $(DOCS2) Makefile
-       shar -a $(DOCS2) > login.sh.11
-
-login.sh.12: $(FILES_SUN4) $(FILES_SVR4) $(FILES_LINUX) Makefile
-       shar -a $(FILES_SUN4) $(FILES_SVR4) $(FILES_LINUX) > login.sh.12
diff --git a/old/Makefile.svr4 b/old/Makefile.svr4
deleted file mode 100644 (file)
index 846e46c..0000000
+++ /dev/null
@@ -1,681 +0,0 @@
-#
-# Copyright 1988 - 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.
-#
-#      %W%     %U%  - Shadow password system (SVR4)
-#
-#      $Id: Makefile.svr4,v 1.2 1997/05/01 23:11:55 marekm Exp $
-#
-SHELL = /sbin/sh
-
-#
-# Set this flag to decide what level of code "get" returns.
-# The base USENET release was release 1.  It is no longer supported.
-# The version with the utilities added was release 2.
-# The version with database-like file access is release 3.
-RELEASE = 3
-VERSION = ver3.3.2
-GFLAGS = -n $(VERSION)
-GET = get_file
-
-# Define the directory login is copied to.  SVr4 uses /usr/bin.
-LOGINDIR = /usr/bin
-SBIN=/usr/sbin
-# system (admin) commands
-UBIN=/usr/bin
-# user commands
-
-# SVr4 doesn't need extra libraries
-NDIR =
-
-# Define some stuff for Cracklib.  This assumes that libcracklib.a is
-# in a system directory.
-CRACKDEF='-DUSE_CRACKLIB'
-CRACKLIB=-lcrack
-
-# Pick your favorite C compiler and tags command
-CC = cc
-TAGS = ctags
-
-# OS.  This is SVr4
-OS = -DUSG -DSVR4 -DUSE_NIS
-
-# SVr4 doesn't use ranlib
-RANLIB = echo
-
-# Configuration Flags
-#
-#      DEST_INCLUDE_DIR - local include files
-#      LIBS - system libraries
-#              -lsocket - needed for TCP/IP and possibly SYSLOG
-#              -ldbm or -lndbm - needed for DBM support
-#              -lcrypt - needed for SCO crypt() functions
-#              -lucb if -ldbm is defined
-#              -lsocket and -lnsl if RLOGIN is defined
-#      CFLAGS - C compiler flags
-#              -DLAI_TCP - needed for SCO Xenix Lachman TCP/IP
-
-DEST_INCLUDE_DIR = /usr/include
-
-# Flags for SVr4
-CFLAGS = -O -g $(OS) -I$(DEST_INCLUDE_DIR) $(CRACKDEF)
-LIBS = -lsocket -lnsl -ldbm -lucb
-LDFLAGS = -g
-
-# Library is libsec.a
-LIBSEC = libsec.a
-
-# Names for root user and group, and bin user and group.
-RUID = root
-RGID = root
-BUID = bin
-BGID = bin
-
-# Where the login.defs file will be copied.  Must agree with config.h
-DEST_LOGIN_DEFS = /etc/login.defs
-
-# Macros for files in SVR4 that aren't to be changed
-PWD = /usr/include/pwd.h
-SHADOW = /usr/include/shadow.h
-
-# Rules for .L (lint) files.
-.SUFFIXES: .L
-LINT = lint
-LINTFLAGS = $(OS) -Dlint
-
-.c.L:
-       $(LINT) -pxu $(LINTFLAGS) $*.c > $*.L
-
-LOBJS = lmain.o login.o env.o valid.o setup.o shell.o age.o \
-       utmp.o sub.o mail.o motd.o log.o ttytype.o failure.o \
-       tz.o console.o hushed.o
-
-LSRCS = lmain.c login.c env.c valid.c setup.c shell.c age.c \
-       utmp.c sub.c mail.c motd.c log.c ttytype.c failure.c \
-       tz.c console.c hushed.c
-
-SOBJS = smain.o env.o entry.o susetup.o shell.o \
-       sub.o mail.o motd.o sulog.o age.o tz.o hushed.o
-
-SSRCS = smain.c env.c entry.c setup.c shell.c \
-       pwent.c sub.c mail.c motd.c sulog.c shadow.c age.c pwpack.c rad64.c \
-       tz.c hushed.c
-
-POBJS = passwd.o obscure.o
-PSRCS = passwd.c obscure.c
-
-GPSRCS = gpmain.c
-
-GPOBJS = gpmain.o
-
-PWOBJS = pwconv.o
-
-PWSRCS = pwconv.c pwent.c shadow.c pwpack.c rad64.c
-
-PWUNOBJS = pwunconv.o
-
-PWUNSRCS = pwunconv.c pwent.c shadow.c pwpack.c rad64.c
-
-SULOGOBJS = sulogin.o entry.o env.o age.o setup.o \
-       valid.o shell.o tz.o
-
-SULOGSRCS = sulogin.c entry.c env.c age.c pwent.c setup.c \
-       shadow.c shell.c valid.c pwpack.c tz.c
-
-MKPWDOBJS = mkpasswd.o
-
-MKPWDSRCS = mkpasswd.c
-
-NGSRCS = newgrp.c env.c shell.c
-
-NGOBJS = newgrp.o env.o shell.o
-
-CHFNSRCS = chfn.c fields.c
-CHFNOBJS = chfn.o fields.o
-CHSHSRCS = chsh.c fields.c
-CHSHOBJS = chsh.o fields.o
-CHAGEOBJS = chage.o fields.o
-CHAGESRCS = chage.c fields.c
-CHPASSOBJS = chpasswd.o
-CHPASSSRCS = chpasswd.c
-DPSRCS = dpmain.c
-DPOBJS = dpmain.o
-
-ALLSRCS = age.c dialchk.c dialup.c entry.c env.c lmain.c log.c login.c mail.c \
-       motd.c obscure.c passwd.c pwconv.c pwent.c pwunconv.c getpass.c \
-       setup.c shadow.c shell.c smain.c sub.c sulog.c sulogin.c ttytype.c \
-       utmp.c valid.c port.c newgrp.c gpmain.c grent.c mkpasswd.c pwpack.c \
-       chfn.c chsh.c chage.c rad64.c encrypt.c chpasswd.c shadowio.c pwio.c \
-       newusers.c groupio.c fields.c pwdbm.c grpack.c grdbm.c sppack.c \
-       spdbm.c dpmain.c gshadow.c gsdbm.c gspack.c sgroupio.c useradd.c \
-       userdel.c patchlevel.h usermod.c copydir.c mkrmdir.c groupadd.c \
-       groupdel.c groupmod.c tz.c console.c hushed.c getdef.c \
-       logoutd.c groups.c pwauth.c lockpw.c chowndir.c
-
-FILES1 = LICENSE README patchlevel.h newgrp.c Makefile config.h pwunconv.c obscure.c \
-       age.c id.c
-
-FILES2 = passwd.c port.c lmain.c sulogin.c pwpack.c dialup.c expiry.c \
-       gshadow.h
-
-FILES3 = chfn.c chsh.c smain.c faillog.c pwconv.c shadow.c pwck.c
-
-FILES4 = gpmain.c chage.c pwent.c valid.c setup.c entry.c ttytype.c port.h
-
-FILES5 = pwio.c encrypt.c chpasswd.c newusers.c rad64.c dialchk.c faillog.h \
-       pwdbm.c grdbm.c gshadow.c sppack.c grpck.c
-
-FILES6 = gspack.c spdbm.c lastlog.h shell.c login.c sub.c dpmain.c mail.c \
-       env.c pwd.h.m4 grpack.c shadow.h log.c grent.c motd.c dialup.h \
-       fields.c gsdbm.c utmp.c failure.c
-
-FILES7 = groupio.c shadowio.c sgroupio.c groups.c copydir.c mkrmdir.c \
-       mkpasswd.c pwauth.c pwauth.h lastlog.c
-
-FILES8 = useradd.c usermod.c login.defs
-
-FILES9 = groupadd.c groupdel.c groupmod.c tz.c console.c hushed.c getdef.c \
-       scologin.c logoutd.c sulog.c getpass.c userdel.c lockpw.c chowndir.c
-
-FILES_SUN4 = Makefile.sun4 README.sun4 config.h.sun4
-FILES_SVR4 = Makefile.svr4 config.h.svr4
-FILES_LINUX = Makefile.linux config.h.linux
-
-MAN_1 = chage.1 chfn.1 chsh.1 id.1 login.1 newgrp.1 passwd.1 su.1 \
-       useradd.1 userdel.1 usermod.1 groupadd.1 groupdel.1 groupmod.1 \
-       groups.1 pwck.1 grpck.1
-MAN_3 = shadow.3 pwauth.3
-MAN_4 = faillog.4 passwd.4 porttime.4 shadow.4
-MAN_5 = login.5
-MAN_8 = chpasswd.8 dpasswd.8 faillog.8 newusers.8 pwconv.8 pwunconv.8 \
-       sulogin.8 mkpasswd.8 logoutd.8 pwauth.8 lastlog.8
-
-DOCS1 = $(MAN_1) $(MAN_3) $(MAN_4)
-DOCS2 = $(MAN_5) $(MAN_8)
-DOCS = $(DOCS1) $(DOCS2)
-
-BINS = su login pwconv pwunconv passwd sulogin faillog newgrp sg gpasswd \
-       mkpasswd chfn chsh chage chpasswd newusers dpasswd id useradd \
-       userdel usermod groupadd groupdel groupmod $(SCOLOGIN) logoutd \
-       groups pwck grpck lastlog expiry
-
-all:   $(BINS) $(DOCS)
-
-.PRECIOUS: libshadow.a
-
-libshadow.a: \
-       libshadow.a(dialchk.o) \
-       libshadow.a(dialup.o) \
-       libshadow.a(encrypt.o) \
-       libshadow.a(getdef.o) \
-       libshadow.a(getpass.o) \
-       libshadow.a(grdbm.o) \
-       libshadow.a(grent.o) \
-       libshadow.a(groupio.o) \
-       libshadow.a(grpack.o) \
-       libshadow.a(gshadow.o) \
-       libshadow.a(gsdbm.o) \
-       libshadow.a(gspack.o) \
-       libshadow.a(sgroupio.o) \
-       libshadow.a(port.o) \
-       libshadow.a(pwdbm.o) \
-       libshadow.a(pwent.o) \
-       libshadow.a(pwio.o) \
-       libshadow.a(pwpack.o) \
-       libshadow.a(pwauth.o) \
-       libshadow.a(rad64.o) \
-       libshadow.a(spdbm.o) \
-       libshadow.a(shadow.o) \
-       libshadow.a(shadowio.o) \
-       libshadow.a(sppack.o) \
-       libshadow.a(lockpw.o) \
-       libshadow.a(utent.o) \
-       libshadow.a(list.o) \
-       libshadow.a(strtoday.o) \
-       libshadow.a(basename.o) \
-       libshadow.a(isexpired.o) \
-       libshadow.a(xmalloc.o)
-       $(RANLIB) libshadow.a
-
-libsec: $(LIBSEC)(shadow.o)
-       $(RANLIB) $(LIBSEC)
-
-save:
-       [ ! -d save ] && mkdir save
-       -cp $(LOGINDIR)/login save
-       -cp $(SBIN)/mkpasswd $(SBIN)/pwconv $(SBIN)/pwunconv $(SBIN)/sulogin \
-               $(SBIN)/chpasswd $(SBIN)/newusers $(SBIN)/useradd \
-               $(SBIN)/userdel $(SBIN)/usermod $(SBIN)/groupadd \
-               $(SBIN)/groupdel $(SBIN)/groupmod $(SBIN)/logoutd \
-               $(SBIN)/login.defs $(SBIN)/pwck $(SBIN)/grpck save
-       -cp $(UBIN)/su $(UBIN)/passwd $(UBIN)/gpasswd $(UBIN)/dpasswd \
-               $(UBIN)/faillog $(UBIN)/newgrp $(UBIN)/chfn \
-               $(UBIN)/chsh $(UBIN)/chage $(UBIN)/id $(UBIN)/expiry save
-       -cp $(DEST_INCLUDE_DIR)/dialup.h $(DEST_INCLUDE_DIR)/gshadow.h save
-
-restore:
-       [ -d save ]
-       -(cd save ; cp login $(LOGINDIR) )
-       -(cd save ; -cp mkpasswd pwconv pwunconv sulogin chpasswd \
-               newusers useradd userdel usermod groupadd groupdel groupmod \
-               logoutd login.defs pwck grpck $(SBIN) )
-       -(cd save ; cp su passwd gpasswd dpasswd faillog newgrp chfn chsh \
-               chage id expiry $(UBIN) )
-       -(cd save ; cp dialup.h gshadow.h $(DEST_INCLUDE_DIR) )
-
-install: all
-       strip $(BINS)
-       mcs -da '@(#)shadow 3.3.3' $(BINS)
-       cp login $(LOGINDIR)/login
-       cp mkpasswd pwconv pwunconv sulogin chpasswd newusers \
-               useradd userdel usermod groupadd groupdel groupmod logoutd \
-               pwck grpck lastlog $(SBIN)
-       cp su passwd gpasswd dpasswd faillog newgrp chfn chsh chage id $(UBIN)
-       cp dialup.h gshadow.h /usr/include
-       chown $(RUID) $(LOGINDIR)/login $(SBIN)/pwconv $(SBIN)/pwunconv \
-               $(SBIN)/sulogin $(UBIN)/su $(UBIN)/passwd $(UBIN)/gpasswd \
-               $(UBIN)/newgrp $(SBIN)/mkpasswd $(UBIN)/dpasswd $(UBIN)/chsh \
-               $(UBIN)/chfn $(UBIN)/chage $(SBIN)/useradd $(SBIN)/userdel \
-               $(SBIN)/usermod $(SBIN)/groupadd $(SBIN)/groupdel \
-               $(SBIN)/groupmod $(SBIN)/logoutd $(SBIN)/pwck $(SBIN)/grpck \
-               $(UBIN)/expiry
-       chgrp $(RGID) $(LOGINDIR)/login $(SBIN)/pwconv $(SBIN)/pwunconv \
-               $(SBIN)/sulogin $(UBIN)/su $(UBIN)/passwd $(UBIN)/gpasswd \
-               $(UBIN)/newgrp $(SBIN)/mkpasswd $(UBIN)/dpasswd $(UBIN)/chsh \
-               $(UBIN)/chfn $(UBIN)/chage $(SBIN)/useradd $(SBIN)/userdel \
-               $(SBIN)/usermod $(SBIN)/groupadd $(SBIN)/groupdel \
-               $(SBIN)/groupmod $(SBIN)/logoutd $(SBIN)/pwck $(SBIN)/grpck \
-               $(UBIN)/expiry
-       chown $(BUID) $(UBIN)/faillog $(UBIN)/id /usr/include/gshadow.h \
-               /usr/include/dialup.h
-       chgrp $(BGID) $(UBIN)/faillog $(UBIN)/id /usr/include/gshadow.h \
-               /usr/include/dialup.h
-       chmod 700 $(SBIN)/pwconv $(SBIN)/pwunconv $(SBIN)/sulogin \
-               $(SBIN)/mkpasswd $(SBIN)/chpasswd $(SBIN)/newusers \
-               $(UBIN)/dpasswd $(UBIN)/chage $(SBIN)/useradd $(SBIN)/userdel \
-               $(SBIN)/usermod $(SBIN)/groupadd $(SBIN)/groupdel \
-               $(SBIN)/groupmod $(SBIN)/logoutd $(SBIN)/pwck $(SBIN)/grpck
-       chmod 4711 $(LOGINDIR)/login $(UBIN)/su $(UBIN)/passwd $(UBIN)/gpasswd \
-               $(UBIN)/newgrp $(UBIN)/chfn $(UBIN)/chsh $(UBIN)/expiry
-       chmod 711 $(UBIN)/faillog $(UBIN)/id
-       chmod 444 /usr/include/gshadow.h /usr/include/dialup.h
-       rm -f $(UBIN)/sg
-       ln $(UBIN)/newgrp $(UBIN)/sg
-       [ -f /etc/login.defs ] || (cp login.defs /etc ; \
-               chown $(RUID) /etc/login.defs ; \
-               chgrp $(RGID) /etc/login.defs ; \
-               chmod 600 /etc/login.defs )
-
-lint:  su.lint login.lint pwconv.lint pwunconv.lint passwd.lint sulogin.lint \
-       faillog.lint newgrp.lint gpasswd.lint mkpasswd.lint chfn.lint \
-       chsh.lint chage.lint dpasswd.lint id.lint useradd.lint userdel.lint \
-       usermod.lint groupadd.lint groupdel.lint groupmod.lint logoutd.lint \
-       pwck.lint grpck.lint expiry.lint \
-       $(ALLSRCS:.c=.L)
-
-tags:  $(ALLSRCS)
-       $(TAGS) $(ALLSRCS)
-
-README:
-       [ -f s.README ] && get -t -r$(RELEASE) s.README
-       
-$(DOCS):
-       [ -f s.$@ ] && get -t -r$(RELEASE) s.$@
-
-login.defs:
-       [ -f s.login.defs ] && get -t -r$(RELEASE) s.login.defs
-
-Makefile.sun4:
-       [ -f s.Makefile.sun4 ] && get -t -r$(RELEASE) s.Makefile.sun4
-
-Makefile.svr4:
-       [ -f s.Makefile.svr4 ] && get -t -r$(RELEASE) s.Makefile.svr4
-
-README.sun4:
-       [ -f s.README.sun4 ] && get -t -r$(RELEASE) s.README.sun4
-
-config.h.sun4:
-       [ -f s.config.h.sun4 ] && get -t -r$(RELEASE) s.config.h.sun4
-
-config.h.svr4:
-       [ -f s.config.h.svr4 ] && get -t -r$(RELEASE) s.config.h.svr4
-
-login: $(LOBJS) libshadow.a
-       $(CC) -o login $(LDFLAGS) $(LOBJS) libshadow.a $(LIBS)
-
-login.lint: $(LSRCS)
-       $(LINT) $(LINTFLAGS) $(LSRCS) > login.lint
-
-su:    $(SOBJS) libshadow.a
-       $(CC) -o su $(LDFLAGS) $(SOBJS) libshadow.a $(LIBS)
-
-su.lint:       $(SSRCS)
-       $(LINT) $(LINTFLAGS) -DSU $(SSRCS) > su.lint
-
-passwd:        $(POBJS) libshadow.a
-       $(CC) -o passwd $(LDFLAGS) $(POBJS) libshadow.a $(LIBS) $(CRACKLIB)
-
-passwd.lint: $(PSRCS)
-       $(LINT) $(LINTFLAGS) -DPASSWD $(PSRCS) > passwd.lint
-
-gpasswd: $(GPOBJS) libshadow.a
-       $(CC) -o gpasswd $(LDFLAGS) $(GPOBJS) libshadow.a $(LIBS)
-
-gpasswd.lint: $(GPSRCS)
-       $(LINT) $(LINTFLAGS) $(GPSRCS) > gpasswd.lint
-
-dpasswd: $(DPOBJS) libshadow.a
-       $(CC) -o dpasswd $(LDFLAGS) $(DPOBJS) libshadow.a $(LIBS)
-
-dpasswd.lint: $(DPSRCS)
-       $(LINT) $(LINTFLAGS) $(DPSRCS) > dpasswd.lint
-
-pwconv:        $(PWOBJS) libshadow.a config.h
-       $(CC) -o pwconv $(LDFLAGS) $(PWOBJS) libshadow.a $(LIBS)
-
-pwconv.lint: $(PWSRCS) config.h
-       $(LINT) $(LINTFLAGS) -DPASSWD $(PWSRCS) > pwconv.lint
-
-pwunconv: $(PWUNOBJS) libshadow.a config.h
-       $(CC) -o pwunconv $(LDFLAGS) $(PWUNOBJS) libshadow.a $(LIBS)
-
-pwunconv.lint: $(PWUNSRCS)
-       $(LINT) $(LINTFLAGS) -DPASSWD $(PWUNSRCS) > pwunconv.lint
-
-sulogin: $(SULOGOBJS) libshadow.a
-       $(CC) -o sulogin $(LDFLAGS) $(SULOGOBJS) libshadow.a $(LIBS)
-
-sulogin.lint: $(SULOGSRCS)
-       $(LINT) $(LINTFLAGS) $(SULOGSRCS) > sulogin.lint
-
-faillog: faillog.o
-       $(CC) -o faillog $(LDFLAGS) faillog.o $(LIBS)
-
-faillog.lint: faillog.c faillog.h config.h
-       $(LINT) $(LINTFLAGS) faillog.c > faillog.lint
-
-lastlog: lastlog.o
-       $(CC) -o lastlog $(LDFLAGS) lastlog.o $(LIBS)
-
-lastlog.lint: lastlog.c config.h lastlog.h
-       $(LINT) $(LINTFLAGS) $(MKPWDSRCS) > lastlog.lint
-
-mkpasswd: $(MKPWDOBJS) libshadow.a
-       $(CC) -o mkpasswd $(LDFLAGS) $(MKPWDOBJS) libshadow.a $(LIBS)
-
-mkpasswd.lint: $(MKPWDSRCS)
-       $(LINT) $(LINTFLAGS) $(MKPWDSRCS) > mkpasswd.lint
-
-newgrp: $(NGOBJS) libshadow.a
-       $(CC) -o newgrp $(LDFLAGS) $(NGOBJS) libshadow.a $(LIBS)
-
-newgrp.lint: $(NGSRCS)
-       $(LINT) $(LINTFLAGS) $(NGSRCS) > newgrp.lint
-
-sg:    newgrp
-       /bin/rm -f sg
-       ln newgrp sg
-
-sg.lint: newgrp.lint
-       ln newgrp.lint sg.lint
-
-chfn:  $(CHFNOBJS) libshadow.a
-       $(CC) -o chfn $(LDFLAGS) $(CHFNOBJS) libshadow.a $(LIBS)
-
-chfn.lint:     $(CHFNSRCS)
-       $(LINT) $(LINTFLAGS) $(CHFNSRCS) > chfn.lint
-
-chsh:  $(CHSHOBJS) libshadow.a
-       $(CC) -o chsh $(LDFLAGS) $(CHSHOBJS) libshadow.a $(LIBS)
-
-chsh.lint: $(CHSHSRCS)
-       $(LINT) $(LINTFLAGS) $(CHSHSRCS) > chsh.lint
-
-chage: $(CHAGEOBJS) libshadow.a
-       $(CC) -o chage $(LDFLAGS) $(CHAGEOBJS) libshadow.a $(LIBS)
-
-chage.lint: $(CHAGESRCS)
-       $(LINT) $(LINTFLAGS) -DPASSWD $(CHAGESRCS) > chage.lint
-
-chpasswd: $(CHPASSOBJS) libshadow.a
-       $(CC) -o chpasswd $(LDFLAGS) $(CHPASSOBJS) libshadow.a $(LIBS)
-
-chpasswd.lint: $(CHPASSSRCS)
-       $(LINT) $(LINTFLAGS) $(CHPASSSRCS) > chpasswd.lint
-
-newusers: newusers.o libshadow.a
-       $(CC) -o newusers $(LDFLAGS) newusers.o libshadow.a $(LIBS)
-
-newusers.lint: newusers.c
-       $(LINT) $(LINTFLAGS) newusers.c > newusers.lint
-       
-id: id.o libshadow.a
-       $(CC) -o id $(LDFLAGS) id.o libshadow.a $(LIBS)
-
-id.lint: id.c
-       $(LINT) $(LINTFLAGS) id.c > id.lint
-
-groups: groups.o libshadow.a
-       $(CC) -o groups $(LDFLAGS) groups.o libshadow.a $(LIBS)
-
-groups.lint: groups.c
-       $(LINT) $(LINTFLAGS) groups.c > groups.lint
-
-useradd: useradd.o copydir.o mkrmdir.o libshadow.a
-       $(CC) -o useradd $(LDFLAGS) useradd.o copydir.o mkrmdir.o \
-               libshadow.a $(LIBS) $(NDIR)
-
-useradd.lint: useradd.c copydir.c mkrmdir.c
-       $(LINT) $(LINTFLAGS) useradd.c copydir.c mkrmdir.c > useradd.lint
-
-userdel: userdel.o copydir.o mkrmdir.o libshadow.a
-       $(CC) -o userdel $(LDFLAGS) userdel.o copydir.o mkrmdir.o \
-               libshadow.a $(LIBS) $(NDIR)
-
-userdel.lint: userdel.c copydir.c mkrmdir.c
-       $(LINT) $(LINTFLAGS) userdel.c copydir.c mkrmdir.c > userdel.lint
-
-usermod: usermod.o copydir.o mkrmdir.o chowndir.o libshadow.a
-       $(CC) -o usermod $(LDFLAGS) usermod.o copydir.o mkrmdir.o \
-               chowndir.o libshadow.a $(LIBS) $(NDIR)
-
-usermod.lint: usermod.c copydir.c mkrmdir.c chowndir.c
-       $(LINT) $(LINTFLAGS) usermod.c copydir.c mkrmdir.c \
-               chowndir.c > usermod.lint
-
-groupadd: groupadd.o libshadow.a
-       $(CC) -o groupadd $(LDFLAGS) groupadd.o libshadow.a $(LIBS)
-
-groupadd.lint: groupadd.c
-       $(LINT) $(LINTFLAGS) groupadd.c > groupadd.lint
-
-groupdel: groupdel.o libshadow.a
-       $(CC) -o groupdel $(LDFLAGS) groupdel.o libshadow.a $(LIBS)
-
-groupdel.lint: groupdel.c
-       $(LINT) $(LINTFLAGS) groupdel.c > groupdel.lint
-
-groupmod: groupmod.o libshadow.a
-       $(CC) -o groupmod $(LDFLAGS) groupmod.o libshadow.a $(LIBS)
-
-groupmod.lint: groupmod.c
-       $(LINT) $(LINTFLAGS) groupmod.c > groupmod.lint
-
-logoutd: logoutd.o libshadow.a
-       $(CC) -o logoutd $(LDFLAGS) logoutd.o libshadow.a
-
-logoutd.lint: logoutd.c
-       $(LINT) $(LINTFLAGS) logoutd.c > logoutd.lint
-
-pwck: pwck.o libshadow.a
-       $(CC) -o pwck $(LDFLAGS) pwck.o libshadow.a $(LIBS)
-
-pwck.lint: pwck.c
-       $(LINT) $(LINTFLAGS) pwck.c > pwck.lint
-
-grpck: grpck.o libshadow.a
-       $(CC) -o grpck $(LDFLAGS) grpck.o libshadow.a $(LIBS)
-
-grpck.lint: grpck.c
-       $(LINT) $(LINTFLAGS) grpck.c > grpck.lint
-
-expiry: expiry.o age.o libshadow.a
-       $(CC) -o expiry $(LDFLAGS) expiry.o age.o libshadow.a $(LIBS)
-
-expiry.lint: expiry.c
-       $(LINT) $(LINTFLAGS) expiry.c > expiry.lint
-
-sulog.o: config.h
-
-susetup.c: setup.c
-       cp setup.c susetup.c
-
-susetup.o: config.h susetup.c $(PWD)
-       $(CC) -c $(CFLAGS) -DSU susetup.c
-
-passwd.o: config.h $(SHADOW) $(PWD) pwauth.h
-lmain.o: config.h lastlog.h faillog.h $(PWD) pwauth.h
-smain.o: config.h lastlog.h $(PWD) $(SHADOW) pwauth.h
-sub.o: $(PWD)
-setup.o: config.h $(PWD)
-mkrmdir.o: config.h
-utmp.o: config.h
-mail.o: config.h
-motd.o: config.h
-age.o: config.h gshadow.h $(PWD)
-log.o: config.h lastlog.h $(PWD)
-lastlog.o: lastlog.h
-shell.o: config.h
-entry.o: config.h $(SHADOW) $(PWD)
-hushed.o: config.h $(PWD)
-valid.o: config.h $(PWD)
-failure.o: faillog.h config.h
-faillog.o: faillog.h config.h $(PWD)
-newgrp.o: config.h $(SHADOW) $(PWD)
-mkpasswd.o: config.h $(SHADOW) $(PWD)
-gpmain.o: config.h $(PWD)
-chfn.o: config.h $(PWD)
-chsh.o: config.h $(PWD)
-chage.o: config.h $(SHADOW) $(PWD)
-pwconv.o: config.h $(SHADOW)
-pwunconv.o: config.h $(SHADOW) $(PWD)
-chpasswd.o: config.h $(SHADOW) $(PWD)
-id.o: $(PWD)
-newusers.o: config.h $(SHADOW) $(PWD)
-dpmain.o: config.h dialup.h
-useradd.o: config.h $(SHADOW) $(PWD) pwauth.h gshadow.h
-userdel.o: config.h $(SHADOW) $(PWD) pwauth.h gshadow.h
-usermod.o: config.h $(SHADOW) $(PWD) pwauth.h gshadow.h
-groupadd.o: config.h gshadow.h
-groupdel.o: config.h gshadow.h
-groupmod.o: config.h gshadow.h
-logoutd.o: config.h
-sulogin.o: config.h pwauth.h
-copydir.o: config.h
-chowndir.o: config.h
-pwck.o: config.h $(SHADOW) $(PWD)
-grpck.o: config.h gshadow.h $(PWD)
-
-libshadow.a(shadow.o): $(SHADOW) config.h
-libshadow.a(shadowio.o): $(SHADOW) config.h
-libshadow.a(grent.o): config.h gshadow.h
-libshadow.a(sgroupio.o): config.h gshadow.h
-libshadow.a(dialup.o): dialup.h
-libshadow.a(dialchk.o): dialup.h config.h
-libshadow.a(getdef.o): config.h
-libshadow.a(pwdbm.o): config.h $(PWD)
-libshadow.a(spdbm.o): config.h $(SHADOW)
-libshadow.a(grdbm.o): config.h
-libshadow.a(gsdbm.o): config.h gshadow.h
-libshadow.a(pwauth.o): config.h pwauth.h
-libshadow.a(pwpack.o): config.h $(PWD)
-libshadow.a(pwent.o): config.h $(PWD)
-libshadow.a(pwio.o): $(PWD)
-libshadow.a(getpass.o): config.h
-libshadow.a(encrypt.o): config.h
-libshadow.a(port.o): port.h
-libshadow.a(rad64.o): config.h
-libshadow.a(lockpw.o):
-libshadow.a(gspack.o): config.h gshadow.h
-libshadow.a(list.o):
-libshadow.a(strtoday.o): config.h
-libshadow.a(xmalloc.o):
-libshadow.a(basename.o):
-libshadow.a(isexpired.o): config.h $(SHADOW)
-
-clean:
-       -rm -f susetup.c *.o a.out core npasswd nshadow *.pag *.dir
-
-clobber: clean
-       -rm -f $(BINS) *.lint *.L libshadow.a
-
-nuke:  clobber
-       -for file in * ; do \
-               if [ -f s.$$file -a ! -f p.$$file ] ; then \
-                       rm -f $$file ;\
-               fi ;\
-       done
-
-shar:  login.sh.01 login.sh.02 login.sh.03 login.sh.04 login.sh.05 \
-       login.sh.06 login.sh.07 login.sh.08 login.sh.09 login.sh.10 \
-       login.sh.11 login.sh.12
-
-login.sh.01: $(FILES1) Makefile
-       shar -a $(FILES1) > login.sh.01
-
-login.sh.02: $(FILES2) Makefile
-       shar -a $(FILES2) > login.sh.02
-
-login.sh.03: $(FILES3) Makefile
-       shar -a $(FILES3) > login.sh.03
-
-login.sh.04: $(FILES4) Makefile
-       shar -a $(FILES4) > login.sh.04
-
-login.sh.05: $(FILES5) Makefile
-       shar -a $(FILES5) > login.sh.05
-
-login.sh.06: $(FILES6) Makefile
-       shar -a $(FILES6) > login.sh.06
-
-login.sh.07: $(FILES7) Makefile
-       shar -a $(FILES7) > login.sh.07
-
-login.sh.08: $(FILES8) Makefile
-       shar -a $(FILES8) > login.sh.08
-
-login.sh.09: $(FILES9) Makefile
-       shar -a $(FILES9) > login.sh.09
-
-login.sh.10: $(DOCS1) Makefile
-       shar -a $(DOCS1) > login.sh.10
-
-login.sh.11: $(DOCS2) Makefile
-       shar -a $(DOCS2) > login.sh.11
-
-login.sh.12: $(FILES_SUN4) $(FILES_SVR4) $(FILES_LINUX) Makefile
-       shar -a $(FILES_SUN4) $(FILES_SVR4) $(FILES_LINUX) > login.sh.12
diff --git a/old/Makefile.xenix b/old/Makefile.xenix
deleted file mode 100644 (file)
index 4368919..0000000
+++ /dev/null
@@ -1,723 +0,0 @@
-#
-# Copyright 1988 - 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.
-#
-#      %W%     %U%  - Shadow password system
-#
-#      $Id: Makefile.xenix,v 1.2 1997/05/01 23:11:55 marekm Exp $
-#
-SHELL = /bin/sh
-
-#
-# Set this flag to decide what level of code "get" returns.
-# The base USENET release was release 1.  It is no longer supported.
-# The version with the utilities added was release 2.  It is now unsupported.
-# The version with database-like file access is release 3.
-RELEASE = 3
-VERSION = ver3.3.2
-GFLAGS = -n $(VERSION)
-GET = get_file
-
-# Define the directory login is copied to.  BE VERY CAREFUL!!!  BSD old SunOS
-# seems to use /bin, USG seems to use /etc, SunOS 4.1.1 seems to use /usr/bin.
-# If you define SCOLOGIN, you MUST use /etc as LOGINDIR.
-# LOGINDIR = /bin
-LOGINDIR = /etc
-# LOGINDIR = /usr/bin
-
-# Define any special libraries required to access the directory routines.
-# Some systems require -lndir for the directory routines.  SCO Xenix uses
-# -lx for that.  Your system might need nothing.
-# NDIR = -lndir
-NDIR = -lx
-# NDIR =
-
-# Define some stuff for Cracklib.  This assumes that libcracklib.a is
-# in a system directory.
-# CRACKDEF='-DUSE_CRACKLIB'
-# CRACKLIB=-lcrack
-
-# Pick your favorite C compiler and tags command
-CC = cc
-TAGS = ctags
-
-# OS.  Pick one of USG (AT&T, SYSV, SYS3), BSD, SUN (SunOS 2 and 3),
-# SUN4 (SunOS 4.1.1.), UNIXPC (AT&T PC/7300, 3B1), or AIX (AIX v3)
-# OS = -DUSG -DSYS3
-OS = -DUSG
-# OS = -DBSD
-# OS = -DSUN
-# OS = -DSUN4
-# OS = -DUSG -DUNIXPC
-# OS = -DAIX
-
-# Do you have to do ranlib (probably SUN, BSD and XENIX)?
-RANLIB = ranlib
-# RANLIB = echo
-
-# Enable the following if you are running SCO TCP/IP.  It is a /bin/login
-# which understands the *ahem* novel way they do rlogin/telnet.
-# SCOLOGIN = scologin
-
-# Configuration Flags
-#
-#      DEST_INCLUDE_DIR - local include files
-#      LIBS - system libraries
-#              -lsocket - needed for TCP/IP and possibly SYSLOG
-#              -ldbm or -lndbm - needed for DBM support
-#              -lcrypt - needed for SCO crypt() functions
-#      CFLAGS - C compiler flags
-#              -DLAI_TCP - needed for SCO Xenix Lachman TCP/IP
-
-DEST_INCLUDE_DIR = /usr/include
-
-# Flags for SCO Xenix/386
-CFLAGS = -O -M3 -g $(OS) -I$(DEST_INCLUDE_DIR) $(CRACKDEF)
-LIBS = -lcrypt -lndbm
-# LIBS = -lcrypt -ldbm
-LDFLAGS = -M3 -g
-LTFLAGS = 
-
-# Flags for normal machines
-# CFLAGS = -O -g $(OS) -I$(DEST_INCLUDE_DIR) $(CRACKDEF)
-# LIBS =
-# LDFLAGS = -g
-
-# Flags for SunOS 4.1.1
-# CFLAGS = -O2 $(OS) -I$(DEST_INCLUDE_DIR) $(CRACKDEF)
-# LIBS =
-# LDFLAGS = 
-
-# This should be Slibsec.a for small model, or Llibsec.a for
-# large model or whatever.  MUST AGREE WITH CFLAGS!!!  For non-Intel
-# machines, just use libsec.a
-LIBSEC = Slibsec.a
-# LIBSEC = libsec.a
-
-# Names for root user and group, and bin user and group.  See your
-# /etc/passwd and /etc/group files.  BSD and SUN use "wheel", most
-# others use "root" for RGID.
-RUID = root
-RGID = root
-# RGID = wheel
-BUID = bin
-BGID = bin
-
-# Where the login.defs file will be copied.  Must agree with config.h
-DEST_LOGIN_DEFS = /etc/login.defs
-
-# Rules for .L (lint) files.
-.SUFFIXES: .L
-LINT = lint
-LINTFLAGS = $(OS) -Dlint
-
-.c.L:
-       $(LINT) -pxu $(LINTFLAGS) $*.c > $*.L
-
-LOBJS = lmain.o login.o env.o valid.o setup.o shell.o age.o \
-       utmp.o sub.o mail.o motd.o log.o ttytype.o failure.o \
-       tz.o console.o hushed.o
-
-LSRCS = lmain.c login.c env.c valid.c setup.c shell.c age.c \
-       utmp.c sub.c mail.c motd.c log.c ttytype.c failure.c \
-       tz.c console.c hushed.c
-
-SOBJS = smain.o env.o entry.o susetup.o shell.o \
-       sub.o mail.o motd.o sulog.o age.o tz.o hushed.o
-
-SSRCS = smain.c env.c entry.c setup.c shell.c \
-       pwent.c sub.c mail.c motd.c sulog.c shadow.c age.c pwpack.c rad64.c \
-       tz.c hushed.c
-
-POBJS = passwd.o obscure.o
-PSRCS = passwd.c obscure.c
-
-GPSRCS = gpmain.c
-
-GPOBJS = gpmain.o
-
-PWOBJS = pwconv.o
-
-PWSRCS = pwconv.c pwent.c shadow.c pwpack.c rad64.c
-
-PWUNOBJS = pwunconv.o
-
-PWUNSRCS = pwunconv.c pwent.c shadow.c pwpack.c rad64.c
-
-SULOGOBJS = sulogin.o entry.o env.o age.o setup.o \
-       valid.o shell.o tz.o
-
-SULOGSRCS = sulogin.c entry.c env.c age.c pwent.c setup.c \
-       shadow.c shell.c valid.c pwpack.c tz.c
-
-MKPWDOBJS = mkpasswd.o
-
-MKPWDSRCS = mkpasswd.c
-
-NGSRCS = newgrp.c env.c shell.c
-
-NGOBJS = newgrp.o env.o shell.o
-
-CHFNSRCS = chfn.c fields.c
-CHFNOBJS = chfn.o fields.o
-CHSHSRCS = chsh.c fields.c
-CHSHOBJS = chsh.o fields.o
-CHAGEOBJS = chage.o fields.o
-CHAGESRCS = chage.c fields.c
-CHPASSOBJS = chpasswd.o
-CHPASSSRCS = chpasswd.c
-DPSRCS = dpmain.c
-DPOBJS = dpmain.o
-
-ALLSRCS = age.c dialchk.c dialup.c entry.c env.c lmain.c log.c login.c mail.c \
-       motd.c obscure.c passwd.c pwconv.c pwent.c pwunconv.c getpass.c \
-       setup.c shadow.c shell.c smain.c sub.c sulog.c sulogin.c ttytype.c \
-       utmp.c valid.c port.c newgrp.c gpmain.c grent.c mkpasswd.c pwpack.c \
-       chfn.c chsh.c chage.c rad64.c encrypt.c chpasswd.c shadowio.c pwio.c \
-       newusers.c groupio.c fields.c pwdbm.c grpack.c grdbm.c sppack.c \
-       spdbm.c dpmain.c gshadow.c gsdbm.c gspack.c sgroupio.c useradd.c \
-       userdel.c patchlevel.h usermod.c copydir.c mkrmdir.c groupadd.c \
-       groupdel.c groupmod.c tz.c console.c hushed.c getdef.c scologin.c \
-       logoutd.c groups.c pwauth.c lockpw.c chowndir.c rename.c
-
-FILES1 = LICENSE README patchlevel.h newgrp.c Makefile config.h pwunconv.c obscure.c \
-       age.c id.c
-
-FILES2 = passwd.c port.c lmain.c sulogin.c pwpack.c dialup.c expiry.c \
-       gshadow.h
-
-FILES3 = chfn.c chsh.c smain.c faillog.c pwconv.c shadow.c pwck.c utent.c
-
-FILES4 = gpmain.c chage.c pwent.c valid.c setup.c entry.c ttytype.c port.h
-
-FILES5 = pwio.c encrypt.c chpasswd.c newusers.c rad64.c dialchk.c faillog.h \
-       pwdbm.c grdbm.c gshadow.c sppack.c grpck.c
-
-FILES6 = gspack.c spdbm.c lastlog.h shell.c login.c sub.c dpmain.c mail.c \
-       env.c pwd.h.m4 grpack.c shadow.h log.c grent.c motd.c dialup.h \
-       fields.c gsdbm.c utmp.c failure.c
-
-FILES7 = groupio.c shadowio.c sgroupio.c groups.c copydir.c mkrmdir.c \
-       mkpasswd.c pwauth.c pwauth.h lastlog.c
-
-FILES8 = useradd.c usermod.c login.defs rename.c
-
-FILES9 = groupadd.c groupdel.c groupmod.c tz.c console.c hushed.c getdef.c \
-       scologin.c logoutd.c sulog.c getpass.c userdel.c lockpw.c chowndir.c
-
-FILES_SUN4 = Makefile.sun4 README.sun4 config.h.sun4
-FILES_SVR4 = Makefile.svr4 config.h.svr4
-FILES_LINUX = Makefile.linux config.h.linux
-
-MAN_1 = chage.1 chfn.1 chsh.1 id.1 login.1 newgrp.1 passwd.1 su.1 \
-       useradd.1 userdel.1 usermod.1 groupadd.1 groupdel.1 groupmod.1 \
-       groups.1 pwck.1 grpck.1
-MAN_3 = shadow.3 pwauth.3
-MAN_4 = faillog.4 passwd.4 porttime.4 shadow.4
-MAN_5 = login.5
-MAN_8 = chpasswd.8 dpasswd.8 faillog.8 newusers.8 pwconv.8 pwunconv.8 \
-       sulogin.8 mkpasswd.8 logoutd.8 pwauth.8 lastlog.8
-
-DOCS1 = $(MAN_1) $(MAN_3) $(MAN_4)
-DOCS2 = $(MAN_5) $(MAN_8)
-DOCS = $(DOCS1) $(DOCS2)
-
-BINS = su login pwconv pwunconv passwd sulogin faillog newgrp sg gpasswd \
-       mkpasswd chfn chsh chage chpasswd newusers dpasswd id useradd \
-       userdel usermod groupadd groupdel groupmod $(SCOLOGIN) logoutd \
-       groups pwck grpck lastlog expiry
-
-all:   $(BINS) $(DOCS)
-
-.PRECIOUS: libshadow.a
-
-libshadow.a: \
-       libshadow.a(dialchk.o) \
-       libshadow.a(dialup.o) \
-       libshadow.a(encrypt.o) \
-       libshadow.a(getdef.o) \
-       libshadow.a(getpass.o) \
-       libshadow.a(grdbm.o) \
-       libshadow.a(grent.o) \
-       libshadow.a(groupio.o) \
-       libshadow.a(grpack.o) \
-       libshadow.a(gshadow.o) \
-       libshadow.a(gsdbm.o) \
-       libshadow.a(gspack.o) \
-       libshadow.a(sgroupio.o) \
-       libshadow.a(port.o) \
-       libshadow.a(pwdbm.o) \
-       libshadow.a(pwent.o) \
-       libshadow.a(pwio.o) \
-       libshadow.a(pwpack.o) \
-       libshadow.a(pwauth.o) \
-       libshadow.a(rad64.o) \
-       libshadow.a(spdbm.o) \
-       libshadow.a(shadow.o) \
-       libshadow.a(shadowio.o) \
-       libshadow.a(sppack.o) \
-       libshadow.a(lockpw.o) \
-       libshadow.a(rename.o) \
-       libshadow.a(utent.o) \
-       libshadow.a(list.o) \
-       libshadow.a(strtoday.o) \
-       libshadow.a(basename.o) \
-       libshadow.a(isexpired.o) \
-       libshadow.a(xmalloc.o)
-       $(RANLIB) libshadow.a
-
-libsec: $(LIBSEC)(shadow.o)
-       $(RANLIB) $(LIBSEC)
-
-save:
-       [ ! -d save ] && mkdir save
-       -cp $(LOGINDIR)/login save
-       -cp /etc/mkpasswd /etc/pwconv /etc/pwunconv /etc/sulogin /etc/chpasswd \
-               /etc/newusers /etc/useradd /etc/userdel /etc/usermod \
-               /etc/groupadd /etc/groupdel /etc/groupmod /etc/logoutd \
-               /etc/login.defs /etc/pwck /etc/grpck /bin/expiry save
-       -cp /bin/su /bin/passwd /bin/gpasswd /bin/dpasswd /bin/faillog \
-               /bin/newgrp /bin/chfn /bin/chsh /bin/chage /bin/id \
-               /bin/scologin save
-       -cp $(DEST_INCLUDE_DIR)/dialup.h $(DEST_INCLUDE_DIR)/shadow.h \
-               $(DEST_INCLUDE_DIR)/pwd.h $(DEST_INCLUDE_DIR)/gshadow.h save
-
-restore:
-       [ -d save ]
-       -(cd save ; cp login $(LOGINDIR) )
-       -(cd save ; -cp mkpasswd pwconv pwunconv sulogin chpasswd \
-               newusers useradd userdel usermod groupadd groupdel groupmod \
-               logoutd login.defs pwck grpck /etc)
-       -(cd save ; cp su passwd gpasswd dpasswd faillog newgrp chfn chsh \
-               chage id scologin expiry /bin)
-       -(cd save ; cp dialup.h shadow.h pwd.h gshadow.h $(DEST_INCLUDE_DIR) )
-
-install: all
-       strip $(BINS)
-       cp login $(LOGINDIR)/login
-       cp mkpasswd pwconv pwunconv sulogin chpasswd newusers \
-               useradd userdel usermod groupadd groupdel groupmod logoutd \
-               pwck grpck /etc
-       cp su passwd gpasswd dpasswd faillog newgrp chfn chsh chage id /bin
-       rm -f /bin/sg
-       ln /bin/newgrp /bin/sg
-       cp dialup.h shadow.h pwd.h gshadow.h $(DEST_INCLUDE_DIR)
-       chown $(RUID) $(LOGINDIR)/login /etc/pwconv /etc/pwunconv /etc/sulogin \
-               /bin/su /bin/passwd /bin/gpasswd /bin/newgrp /etc/mkpasswd \
-               /bin/dpasswd /bin/chsh /bin/chfn /bin/chage /etc/useradd \
-               /etc/userdel /etc/usermod /etc/groupadd /etc/groupdel \
-               /etc/groupmod /etc/logoutd /etc/pwck /etc/grpck /bin/expiry
-       chgrp $(RGID) $(LOGINDIR)/login /etc/pwconv /etc/pwunconv /etc/sulogin \
-               /bin/su /bin/passwd /bin/gpasswd /bin/newgrp /etc/mkpasswd \
-               /bin/dpasswd /bin/chsh /bin/chfn /bin/chage /etc/useradd \
-               /etc/userdel /etc/usermod /etc/groupadd /etc/groupdel \
-               /etc/groupmod /etc/logoutd /etc/pwck /etc/grpck /bin/expiry
-       chown $(BUID) /bin/faillog /bin/id $(DEST_INCLUDE_DIR)/shadow.h \
-               $(DEST_INCLUDE_DIR)/dialup.h $(DEST_INCLUDE_DIR)/pwd.h \
-               $(DEST_INCLUDE_DIR)/gshadow.h
-       chgrp $(BGID) /bin/faillog /bin/id $(DEST_INCLUDE_DIR)/shadow.h \
-               $(DEST_INCLUDE_DIR)/dialup.h $(DEST_INCLUDE_DIR)/pwd.h \
-               $(DEST_INCLUDE_DIR)/gshadow.h
-       chmod 700 /etc/pwconv /etc/pwunconv /etc/sulogin /etc/mkpasswd \
-               /etc/chpasswd /etc/newusers /bin/dpasswd /etc/logoutd \
-               /etc/useradd /etc/userdel /etc/usermod /etc/groupadd \
-               /etc/groupdel /etc/groupmod /etc/pwck /etc/grpck
-       chmod 4711 $(LOGINDIR)/login /bin/su /bin/passwd /bin/gpasswd \
-               /bin/newgrp /bin/chfn /bin/chsh /bin/chage /bin/expiry
-       chmod 711 /bin/faillog /bin/id
-       chmod 444 $(DEST_INCLUDE_DIR)/shadow.h $(DEST_INCLUDE_DIR)/dialup.h \
-               $(DEST_INCLUDE_DIR)/pwd.h $(DEST_INCLUDE_DIR)/gshadow.h
-       [ -f $(DEST_LOGIN_DEFS) ] || (cp login.defs $(DEST_LOGIN_DEFS) ; \
-               chown $(RUID) $(DEST_LOGIN_DEFS) ; \
-               chgrp $(RGID) $(DEST_LOGIN_DEFS) ; \
-               chmod 600 $(DEST_LOGIN_DEFS) )
-       [ -z "$(SCOLOGIN)" ] || (cp scologin /bin/login ; \
-               chown $(RUID) /bin/login ; \
-               chgrp $(RGID) /bin/login ; \
-               chmod 755 /bin/login )
-
-lint:  su.lint login.lint pwconv.lint pwunconv.lint passwd.lint sulogin.lint \
-       faillog.lint newgrp.lint gpasswd.lint mkpasswd.lint chfn.lint \
-       chsh.lint chage.lint dpasswd.lint id.lint useradd.lint userdel.lint \
-       usermod.lint groupadd.lint groupdel.lint groupmod.lint logoutd.lint \
-       pwck.lint grpck.lint expiry.lint \
-       $(ALLSRCS:.c=.L)
-
-tags:  $(ALLSRCS)
-       $(TAGS) $(ALLSRCS)
-
-README:
-       [ -f s.README ] && $(GET) $(GFLAGS) s.README
-       
-$(DOCS):
-       [ -f s.$@ ] && $(GET) $(GFLAGS) s.$@
-
-login.defs:
-       [ -f s.login.defs ] && $(GET) $(GFLAGS) s.login.defs
-
-Makefile.sun4:
-       [ -f s.Makefile.sun4 ] && $(GET) $(GFLAGS) s.Makefile.sun4
-
-Makefile.svr4:
-       [ -f s.Makefile.svr4 ] && $(GET) $(GFLAGS) s.Makefile.svr4
-
-README.sun4:
-       [ -f s.README.sun4 ] && $(GET) $(GFLAGS) s.README.sun4
-
-config.h.sun4:
-       [ -f s.config.h.sun4 ] && $(GET) $(GFLAGS) s.config.h.sun4
-
-config.h.svr4:
-       [ -f s.config.h.svr4 ] && $(GET) $(GFLAGS) s.config.h.svr4
-
-login: $(LOBJS) libshadow.a
-       $(CC) -o login $(LDFLAGS) $(LOBJS) libshadow.a $(LIBS)
-
-login.lint: $(LSRCS)
-       $(LINT) $(LINTFLAGS) $(LSRCS) > login.lint
-
-su:    $(SOBJS) libshadow.a
-       $(CC) -o su $(LDFLAGS) $(SOBJS) libshadow.a $(LIBS)
-
-su.lint:       $(SSRCS)
-       $(LINT) $(LINTFLAGS) -DSU $(SSRCS) > su.lint
-
-passwd:        $(POBJS) libshadow.a
-       $(CC) -o passwd $(LDFLAGS) $(POBJS) libshadow.a $(LIBS) $(CRACKLIB)
-
-passwd.lint: $(PSRCS)
-       $(LINT) $(LINTFLAGS) -DPASSWD $(PSRCS) > passwd.lint
-
-gpasswd: $(GPOBJS) libshadow.a
-       $(CC) -o gpasswd $(LDFLAGS) $(GPOBJS) libshadow.a $(LIBS)
-
-gpasswd.lint: $(GPSRCS)
-       $(LINT) $(LINTFLAGS) $(GPSRCS) > gpasswd.lint
-
-dpasswd: $(DPOBJS) libshadow.a
-       $(CC) -o dpasswd $(LDFLAGS) $(DPOBJS) libshadow.a $(LIBS)
-
-dpasswd.lint: $(DPSRCS)
-       $(LINT) $(LINTFLAGS) $(DPSRCS) > dpasswd.lint
-
-pwconv:        $(PWOBJS) libshadow.a config.h
-       $(CC) -o pwconv $(LDFLAGS) $(PWOBJS) libshadow.a $(LIBS)
-
-pwconv.lint: $(PWSRCS) config.h
-       $(LINT) $(LINTFLAGS) -DPASSWD $(PWSRCS) > pwconv.lint
-
-pwunconv: $(PWUNOBJS) libshadow.a config.h
-       $(CC) -o pwunconv $(LDFLAGS) $(PWUNOBJS) libshadow.a $(LIBS)
-
-pwunconv.lint: $(PWUNSRCS)
-       $(LINT) $(LINTFLAGS) -DPASSWD $(PWUNSRCS) > pwunconv.lint
-
-sulogin: $(SULOGOBJS) libshadow.a
-       $(CC) -o sulogin $(LDFLAGS) $(SULOGOBJS) libshadow.a $(LIBS)
-
-sulogin.lint: $(SULOGSRCS)
-       $(LINT) $(LINTFLAGS) $(SULOGSRCS) > sulogin.lint
-
-faillog: faillog.o
-       $(CC) -o faillog $(LDFLAGS) faillog.o $(LIBS)
-
-faillog.lint: faillog.c faillog.h config.h
-       $(LINT) $(LINTFLAGS) faillog.c > faillog.lint
-
-lastlog: lastlog.o
-       $(CC) -o lastlog $(LDFLAGS) lastlog.o $(LIBS)
-
-lastlog.lint: lastlog.c config.h lastlog.h
-       $(LINT) $(LINTFLAGS) $(MKPWDSRCS) > lastlog.lint
-
-mkpasswd: $(MKPWDOBJS) libshadow.a
-       $(CC) -o mkpasswd $(LDFLAGS) $(MKPWDOBJS) libshadow.a $(LIBS)
-
-mkpasswd.lint: $(MKPWDSRCS)
-       $(LINT) $(LINTFLAGS) $(MKPWDSRCS) > mkpasswd.lint
-
-newgrp: $(NGOBJS) libshadow.a
-       $(CC) -o newgrp $(LDFLAGS) $(NGOBJS) libshadow.a $(LIBS)
-
-newgrp.lint: $(NGSRCS)
-       $(LINT) $(LINTFLAGS) $(NGSRCS) > newgrp.lint
-
-sg:    newgrp
-       rm -f sg
-       ln newgrp sg
-
-sg.lint: newgrp.lint
-       ln newgrp.lint sg.lint
-
-chfn:  $(CHFNOBJS) libshadow.a
-       $(CC) -o chfn $(LDFLAGS) $(CHFNOBJS) libshadow.a $(LIBS)
-
-chfn.lint:     $(CHFNSRCS)
-       $(LINT) $(LINTFLAGS) $(CHFNSRCS) > chfn.lint
-
-chsh:  $(CHSHOBJS) libshadow.a
-       $(CC) -o chsh $(LDFLAGS) $(CHSHOBJS) libshadow.a $(LIBS)
-
-chsh.lint: $(CHSHSRCS)
-       $(LINT) $(LINTFLAGS) $(CHSHSRCS) > chsh.lint
-
-chage: $(CHAGEOBJS) libshadow.a
-       $(CC) -o chage $(LDFLAGS) $(CHAGEOBJS) libshadow.a $(LIBS)
-
-chage.lint: $(CHAGESRCS)
-       $(LINT) $(LINTFLAGS) -DPASSWD $(CHAGESRCS) > chage.lint
-
-chpasswd: $(CHPASSOBJS) libshadow.a
-       $(CC) -o chpasswd $(LDFLAGS) $(CHPASSOBJS) libshadow.a $(LIBS)
-
-chpasswd.lint: $(CHPASSSRCS)
-       $(LINT) $(LINTFLAGS) $(CHPASSSRCS) > chpasswd.lint
-
-newusers: newusers.o libshadow.a
-       $(CC) -o newusers $(LDFLAGS) newusers.o libshadow.a $(LIBS)
-
-newusers.lint: newusers.c
-       $(LINT) $(LINTFLAGS) newusers.c > newusers.lint
-       
-id: id.o libshadow.a
-       $(CC) -o id $(LDFLAGS) id.o libshadow.a $(LIBS)
-
-id.lint: id.c
-       $(LINT) $(LINTFLAGS) id.c > id.lint
-
-groups: groups.o libshadow.a
-       $(CC) -o groups $(LDFLAGS) groups.o libshadow.a $(LIBS)
-
-groups.lint: groups.c
-       $(LINT) $(LINTFLAGS) groups.c > groups.lint
-
-useradd: useradd.o copydir.o mkrmdir.o libshadow.a
-       $(CC) -o useradd $(LDFLAGS) useradd.o copydir.o mkrmdir.o \
-               libshadow.a $(LIBS) $(NDIR)
-
-useradd.lint: useradd.c copydir.c mkrmdir.c
-       $(LINT) $(LINTFLAGS) useradd.c copydir.c mkrmdir.c > useradd.lint
-
-userdel: userdel.o copydir.o mkrmdir.o libshadow.a
-       $(CC) -o userdel $(LDFLAGS) userdel.o copydir.o mkrmdir.o \
-               libshadow.a $(LIBS) $(NDIR)
-
-userdel.lint: userdel.c copydir.c mkrmdir.c
-       $(LINT) $(LINTFLAGS) userdel.c copydir.c mkrmdir.c > userdel.lint
-
-usermod: usermod.o copydir.o mkrmdir.o chowndir.o libshadow.a
-       $(CC) -o usermod $(LDFLAGS) usermod.o copydir.o mkrmdir.o \
-               chowndir.o libshadow.a $(LIBS) $(NDIR)
-
-usermod.lint: usermod.c copydir.c mkrmdir.c chowndir.c
-       $(LINT) $(LINTFLAGS) usermod.c copydir.c mkrmdir.c \
-               chowndir.c > usermod.lint
-
-groupadd: groupadd.o libshadow.a
-       $(CC) -o groupadd $(LDFLAGS) groupadd.o libshadow.a $(LIBS)
-
-groupadd.lint: groupadd.c
-       $(LINT) $(LINTFLAGS) groupadd.c > groupadd.lint
-
-groupdel: groupdel.o libshadow.a
-       $(CC) -o groupdel $(LDFLAGS) groupdel.o libshadow.a $(LIBS)
-
-groupdel.lint: groupdel.c
-       $(LINT) $(LINTFLAGS) groupdel.c > groupdel.lint
-
-groupmod: groupmod.o libshadow.a
-       $(CC) -o groupmod $(LDFLAGS) groupmod.o libshadow.a $(LIBS)
-
-groupmod.lint: groupmod.c
-       $(LINT) $(LINTFLAGS) groupmod.c > groupmod.lint
-
-pwd.h.m4:
-       [ -f s.pwd.h.m4 ] && $(GET) $(GFLAGS) s.pwd.h.m4
-
-pwd.h: pwd.h.m4 Makefile
-       m4 $(OS) < pwd.h.m4 > pwd.h
-
-logoutd: logoutd.o libshadow.a
-       $(CC) -o logoutd $(LDFLAGS) logoutd.o libshadow.a
-
-logoutd.lint: logoutd.c
-       $(LINT) $(LINTFLAGS) logoutd.c > logoutd.lint
-
-pwck: pwck.o libshadow.a
-       $(CC) -o pwck $(LDFLAGS) pwck.o libshadow.a $(LIBS)
-
-pwck.lint: pwck.c
-       $(LINT) $(LINTFLAGS) pwck.c > pwck.lint
-
-grpck: grpck.o libshadow.a
-       $(CC) -o grpck $(LDFLAGS) grpck.o libshadow.a $(LIBS)
-
-grpck.lint: grpck.c
-       $(LINT) $(LINTFLAGS) grpck.c > grpck.lint
-
-expiry: expiry.o age.o libshadow.a
-       $(CC) -o expiry $(LDFLAGS) age.o expiry.o libshadow.a $(LIBS)
-
-expiry.lint: expiry.c
-       $(LINT) $(LINTFLAGS) expiry.c > expiry.lint
-
-sulog.o: config.h
-
-susetup.c: setup.c
-       cp setup.c susetup.c
-
-susetup.o: config.h susetup.c pwd.h
-       $(CC) -c $(CFLAGS) -DSU susetup.c
-
-scologin: scologin.o
-       $(CC) -o scologin $(LDFLAGS) scologin.o -lsocket
-
-passwd.o: config.h shadow.h pwd.h pwauth.h
-lmain.o: config.h lastlog.h faillog.h pwd.h pwauth.h
-smain.o: config.h lastlog.h pwd.h shadow.h pwauth.h
-sub.o: pwd.h
-setup.o: config.h pwd.h
-mkrmdir.o: config.h
-utmp.o: config.h
-mail.o: config.h
-motd.o: config.h
-age.o: config.h pwd.h gshadow.h
-log.o: config.h lastlog.h pwd.h
-lastlog.o: lastlog.h
-shell.o: config.h
-entry.o: config.h shadow.h pwd.h
-hushed.o: config.h pwd.h
-valid.o: config.h pwd.h
-failure.o: faillog.h config.h
-faillog.o: faillog.h config.h pwd.h
-newgrp.o: config.h shadow.h gshadow.h pwd.h
-mkpasswd.o: config.h shadow.h gshadow.h pwd.h
-gpmain.o: config.h pwd.h gshadow.h
-chfn.o: config.h pwd.h
-chsh.o: config.h pwd.h
-chage.o: config.h shadow.h pwd.h
-pwconv.o: config.h shadow.h
-pwunconv.o: config.h shadow.h pwd.h
-chpasswd.o: config.h shadow.h pwd.h
-id.o: pwd.h
-newusers.o: config.h shadow.h pwd.h
-dpmain.o: config.h dialup.h
-useradd.o: config.h shadow.h pwd.h pwauth.h gshadow.h
-userdel.o: config.h shadow.h pwd.h pwauth.h gshadow.h
-usermod.o: config.h shadow.h pwd.h pwauth.h gshadow.h
-groupadd.o: config.h gshadow.h
-groupdel.o: config.h gshadow.h
-groupmod.o: config.h gshadow.h
-logoutd.o: config.h
-sulogin.o: config.h pwauth.h
-copydir.o: config.h
-chowndir.o: config.h
-pwck.o: config.h shadow.h pwd.h
-grpck.o: config.h pwd.h gshadow.h
-
-libshadow.a(shadow.o): shadow.h config.h
-libshadow.a(shadowio.o): shadow.h config.h
-libshadow.a(grent.o): config.h gshadow.h
-libshadow.a(groupio.o): config.h
-libshadow.a(sgroupio.o): config.h gshadow.h
-libshadow.a(dialup.o): dialup.h
-libshadow.a(dialchk.o): dialup.h config.h
-libshadow.a(getdef.o): config.h
-libshadow.a(pwdbm.o): config.h pwd.h
-libshadow.a(spdbm.o): config.h shadow.h
-libshadow.a(grdbm.o): config.h
-libshadow.a(gshadow.o): config.h
-libshadow.a(gsdbm.o): config.h gshadow.h
-libshadow.a(pwauth.o): config.h pwauth.h
-libshadow.a(pwpack.o): config.h pwd.h
-libshadow.a(pwent.o): config.h pwd.h
-libshadow.a(pwio.o): pwd.h config.h
-libshadow.a(getpass.o): config.h
-libshadow.a(encrypt.o): config.h
-libshadow.a(port.o): port.h
-libshadow.a(rad64.o): config.h
-libshadow.a(lockpw.o):
-libshadow.a(rename.o): config.h
-libshadow.a(gspack.o): config.h gshadow.h
-libshadow.a(list.o):
-libshadow.a(strtoday.o): config.h
-libshadow.a(xmalloc.o):
-libshadow.a(basename.o):
-libshadow.a(isexpired.o): config.h shadow.h
-
-clean:
-       -rm -f susetup.c *.o a.out core npasswd nshadow *.pag *.dir pwd.h
-
-clobber: clean
-       -rm -f $(BINS) *.lint *.L libshadow.a
-
-nuke:  clobber
-       -for file in * ; do \
-               if [ -f s.$$file -a ! -f p.$$file ] ; then \
-                       rm -f $$file ;\
-               fi ;\
-       done
-
-shar:  login.sh.01 login.sh.02 login.sh.03 login.sh.04 login.sh.05 \
-       login.sh.06 login.sh.07 login.sh.08 login.sh.09 login.sh.10 \
-       login.sh.11 login.sh.12
-
-login.sh.01: $(FILES1) Makefile
-       shar -Dc $(FILES1) > login.sh.01
-
-login.sh.02: $(FILES2) Makefile
-       shar -Dc $(FILES2) > login.sh.02
-
-login.sh.03: $(FILES3) Makefile
-       shar -Dc $(FILES3) > login.sh.03
-
-login.sh.04: $(FILES4) Makefile
-       shar -Dc $(FILES4) > login.sh.04
-
-login.sh.05: $(FILES5) Makefile
-       shar -Dc $(FILES5) > login.sh.05
-
-login.sh.06: $(FILES6) Makefile
-       shar -Dc $(FILES6) > login.sh.06
-
-login.sh.07: $(FILES7) Makefile
-       shar -Dc $(FILES7) > login.sh.07
-
-login.sh.08: $(FILES8) Makefile
-       shar -Dc $(FILES8) > login.sh.08
-
-login.sh.09: $(FILES9) Makefile
-       shar -Dc $(FILES9) > login.sh.09
-
-login.sh.10: $(DOCS1) Makefile
-       shar -Dc $(DOCS1) > login.sh.10
-
-login.sh.11: $(DOCS2) Makefile
-       shar -Dc $(DOCS2) > login.sh.11
-
-login.sh.12: $(FILES_SUN4) $(FILES_SVR4) $(FILES_LINUX) Makefile
-       shar -Dc $(FILES_SUN4) $(FILES_SVR4) $(FILES_LINUX) > login.sh.12
diff --git a/old/config.h.linux b/old/config.h.linux
deleted file mode 100644 (file)
index cdab702..0000000
+++ /dev/null
@@ -1,454 +0,0 @@
-/*
- * Copyright 1989 - 1994, Julianne Frances Haugh
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of Julianne F. Haugh nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-/*
- * Configuration file for login.
- *
- *     $Id: config.h.linux,v 1.2 1997/05/01 23:11:57 marekm Exp $
- */
-
-#ifndef _CONFIG_H
-#define _CONFIG_H
-
-#ifdef __linux__
-#include <sys/types.h>
-#include <sys/param.h>
-#include <stdio.h>
-#endif
-
-/*
- * Pathname to the run-time configuration definitions file.
- */
-
-#define LOGINDEFS "/etc/login.defs"
-
-/*
- * Define SHADOWPWD to use shadow [ unreadable ] password file.
- * Release 3 has a requirement that SHADOWPWD always be defined.
- */
-
-#define        SHADOWPWD
-
-/*
- * Define AUTOSHADOW to have root always copy sp_pwdp to pw_passwd
- * for getpwuid() and getpwnam().  This provides compatibility for
- * privileged applications which are shadow-ignorant.  YOU ARE
- * ENCOURAGED TO NOT USE THIS OPTION UNLESS ABSOLUTELY NECESSARY.
- */
-/*
- * Yes, don't do it (and don't build libc with the SHADOW_COMPAT=true
- * option) unless you REALLY know what you're doing.  It might work,
- * but can lead to unshadowing your passwords.  This is not the right
- * way to support shadow passwords!  You have been warned.  --marekm
- */
-
-#undef AUTOSHADOW
-
-/*
- * Define SHADOWGRP to user shadowed group files.  This feature adds
- * the concept of a group administrator.  You MUST NOT define this
- * if you disable SHADOWPWD.
- */
-
-#define        SHADOWGRP /**/
-
-/*
- * Define these if you have shadow password/group support functions in
- * your version of libc.  This removes these functions from libshadow.a
- * (the ones from libc will be used instead).
- *
- * Finally upgraded to ELF, so...
- */
-#define HAVE_SHADOWPWD
-#define HAVE_SHADOWGRP
-
-/*
- * Define MD5_CRYPT to support the MD5-based password hashing algorithm
- * compatible with FreeBSD.  All programs using pw_encrypt() instead of
- * crypt() will understand both styles: old (standard, DES-based), and
- * new (MD5-based).
- *
- * This means that it is possible to copy encrypted passwords from FreeBSD.
- * Programs to change passwords (like passwd) will still use the old style
- * crypt() for compatibility.
- *
- * To enable the use of the new crypt() for new passwords (if you don't
- * need to copy them to other systems, except FreeBSD and Linux), set the
- * MD5_CRYPT option in /etc/login.defs to "yes".
- *
- * This algorithm supports passwords of any length (the getpass() limit
- * is 127 on Linux) and salt strings up to 8 (instead of 2) characters.
- *
- * This is experimental, and currently requires that all programs use
- * pw_encrypt() from libshadow.a instead of crypt() from libc.  This is
- * problematic especially on ELF systems (libc5 has getspnam() so there
- * is otherwise no need to link with the static libshadow.a).  On most
- * a.out systems you have to link with libshadow.a anyway, no problem.
- */
-
-#define MD5_CRYPT
-
-/*
- * Define DOUBLESIZE to use 16 character passwords.  Define SW_CRYPT
- * to use 80 character passwords with SecureWare[tm]'s method of
- * generating ciphertext.
- * Not recommended because of some potential weaknesses.  --marekm
- */
-
-#undef DOUBLESIZE
-#undef SW_CRYPT
-
-/*
- * Define SKEY to allow dual-mode SKEY/normal logins
- */
-
-#undef SKEY
-
-/*
- * Define AGING if you want the password aging checks made.
- * Release 3 has a requirement that AGING always be defined.
- */
-
-#define        AGING
-
-/*
- * Pick your version of DBM.  If you define either DBM or NDBM, you must
- * define GETPWENT.  If you define NDBM you must define GETGRENT as well.
- */
-
-/*
- * DBM support is untested, not recommended yet.  It might make more
- * sense if someone could add it to getpwnam() etc. in libc so that all
- * programs (such as ls) can benefit from it.  Any volunteers?
- *
- * The old DBM (as opposed to NDBM) support may be removed in a future
- * release if no one complains.  It's too braindamaged for the number
- * of #ifdefs it adds (only one database per process at a time).
- *
- * On Linux, NDBM is actually implemented using GDBM, which is licensed
- * under the GPL (not LGPL!) - I'm not sure if it is legal to link it
- * with non-GPL code (such as the shadow suite).  Consult your lawyers,
- * or just modify the code to use db instead.  Welcome to the wonderful
- * world of copyrights.  Yuck!
- *
- * The current DBM support code has a subtle design flaw.  See my
- * comment in pwdbm.c for details...
- *
- * Unless you have 2000 users or so, DBM probably doesn't make things
- * much faster, and it does make things more complicated (= possibly
- * more buggy).  Do it only if you know what you're doing!  --marekm
- */
-
-#undef DBM
-#undef NDBM
-
-/*
- * Define USE_SYSLOG if you want to have SYSLOG functions included in your code.
- */
-
-#define        USE_SYSLOG
-
-/*
- * Enable RLOGIN to support the "-r" and "-h" options.
- * Also enable UT_HOST if your /etc/utmp provides for a host name.
- */
-
-#define RLOGIN
-#define UT_HOST
-
-/*
- * Define NO_RFLG to remove support for login -r flag if your system has
- * a new-style rlogind which doesn't need it.  --marekm
- */
-
-#define NO_RFLG
-
-/*
- * Define the "success" code from ruserok().  Most modern systems use 0
- * for success and -1 for failure, while certain older versions use 1
- * for success and 0 for failure.  Please check your manpage to be sure.
- */
-
-#define        RUSEROK 0
-
-/*
- * Select one of the following
- */
-
-#undef DIR_XENIX       /* include <sys/ndir.h>, use (struct direct)    */
-#undef DIR_BSD         /* include <ndir.h>, use (struct direct)        */
-#define DIR_SYSV       /* include <dirent.h>, use (struct dirent)      */
-
-/*
- * Various system environment definitions.
- */
-
-/*
- * Define if you have sgetgrent() in libc, to remove this function from
- * libshadow.a (some versions of libc5 reportedly have it, most reports
- * so far are from Red Hat 2.1 users, more information is welcome).
- */
-#undef HAVE_SGETGRENT
-
-/*
- * Only important if you compile with GETGRENT defined (use my getgr*()
- * but still use fgetgrent() from libc if HAVE_FGETGRENT defined).
- */
-#undef HAVE_FGETGRENT
-
-#define HAVE_SIGACTION
-#define HAVE_GETUSERSHELL /* Define if your UNIX supports getusershell() */
-#define HAVE_LL_HOST   /* Define if "struct lastlog" contains ll_host */
-#define        HAVE_ULIMIT     /* Define if your UNIX supports ulimit()        */
-#define        HAVE_RLIMIT     /* Define if your UNIX supports setrlimit()     */
-#undef GETPWENT        /* Define if you want my GETPWENT(3) routines   */
-#undef GETGRENT        /* Define if you want my GETGRENT(3) routines   */
-#define        NEED_AL64       /* Define if library does not include a64l()    */
-#undef NEED_MKDIR      /* Define if system does not have mkdir()       */
-#undef NEED_RMDIR      /* Define if system does not have rmdir()       */
-#undef NEED_RENAME     /* Define if system does not have rename()      */
-#undef NEED_STRSTR     /* Define if library does not include strstr()  */
-#undef NEED_PUTPWENT   /* Define if library does not include putpwent()*/
-#define        SIGTYPE void    /* Type returned by signal()                    */
-
-/*
- * These definitions MUST agree with the values defined in <pwd.h>.
- */
-
-#undef BSD_QUOTA       /* the pw_quota field exists */
-#undef ATT_AGE         /* the pw_age field exists */
-#undef ATT_COMMENT     /* the pw_comment field exists */
-
-#define        UID_T   uid_t   /* set to be the type of UID's */
-#define        GID_T   gid_t   /* set to be the type of GID's */
-
-#ifndef        UID_T
-#if defined(SVR4) || defined(_POSIX_SOURCE)
-#define        UID_T   uid_t
-#else
-#define        UID_T   int
-#endif
-#endif
-
-#ifndef        GID_T
-#if defined(SVR4) || defined(_POSIX_SOURCE)
-#define        GID_T   gid_t
-#else
-#define        GID_T   int
-#endif
-#endif
-
-/*
- * Define NDEBUG for production versions
- */
-
-#define        NDEBUG
-
-/*
- * Define PWDFILE and GRPFILE to the names of the password and
- * group files. //jiivee
- */
-
-#define        PASSWD_FILE     "/etc/passwd"
-#define        PASSWD_PAG_FILE "/etc/passwd.pag"
-#define        GROUP_FILE      "/etc/group"
-#define        GROUP_PAG_FILE  "/etc/group.pag"
-
-#ifdef SHADOWPWD
-#define SHADOW_FILE    "/etc/shadow"
-#define SHADOW_PAG_FILE        "/etc/shadow.pag"
-#ifdef SHADOWGRP
-#define SGROUP_FILE    "/etc/gshadow"
-#define SGROUP_PAG_FILE        "/etc/gshadow.pag"
-#endif
-#endif
-
-/*
- * The structure of the utmp file.  There are two kinds of UTMP files,
- * "BSD" and "USG".  "BSD" has no PID or type information, "USG" does.
- * If you define neither of these, the type will be defaulted by using
- * BSD, SUN, SYS3 and USG defines.
- */
-
-#define _UTMP_FILE "/var/run/utmp"
-#define _WTMP_FILE "/var/log/wtmp"
-
-#define USG_UTMP       /**/
-/* #define BSD_UTMP    */
-
-#if !defined(USG_UTMP) && !defined(BSD_UTMP)
-#if defined(BSD) || defined(SYS3) || defined(SUN)
-#define        BSD_UTMP
-#else
-#define USG_UTMP
-#endif /* BSD || SYS3 || SUN */
-#endif /* !USG_UTMP || !BSD_UTMP */
-
-/*
- * From where to look for legal user shells
- */
-
-#ifndef SHELLS_FILE
-#define SHELLS_FILE "/etc/shells"
-#endif
-
-/*
- * Default issue file location
- */
-
-#ifndef ISSUE_FILE
-#define ISSUE_FILE "/etc/issue"
-#endif
-
-/*
- * Logoutd message file
- */
-
-#define        HUP_MESG_FILE   "/etc/logoutd.mesg"
-
-/*
- * Mail spool directory. This is used if mailspool cannot be located otherwise
- */
-
-#ifndef MAIL_SPOOL_DIR
-#define MAIL_SPOOL_DIR "/var/spool/mail"
-#endif
-
-/*
- * Where are new user default setup files kept
- */
-
-#define SKEL_DIR "/etc/skel"
-
-/*
- * New user defaults. The NEW_USER_FILE must have 6 X's in the end of name
- */
-
-#define USER_DEFAULTS_FILE     "/etc/default/useradd"
-#define NEW_USER_FILE          "/etc/default/nuaddXXXXXX"
-
-/*
- * Telinit program.  If your system uses /etc/telinit to change run
- * level, define TELINIT and then define the RUNLEVEL macro to be the
- * run-level to switch INIT to.  This is used by sulogin to change
- * from single user to multi-user mode.
- *
- * From bluca@www.polimi.it: instead, set up /etc/inittab properly
- * ~0:S:wait:/sbin/sulogin
- * ~9:S:wait:/sbin/telinit -t0 2
- */
-
-#undef TELINIT
-#undef PATH_TELINIT    "/sbin/telinit"
-#undef RUNLEVEL        "2"
-
-/*
- * Crontab and atrm.  Used in userdel.c - see user_cancel().  Verify
- * that these are correct for your distribution.  --marekm
- */
-
-#if 0  /* old Slackware */
-#define CRONTAB_COMMAND "/usr/bin/crontab -d -u %s"
-#define CRONTAB_FILE "/var/cron/tabs/%s"
-#else
-/* Debian 0.93R6 (marekm): */
-#define        CRONTAB_COMMAND "/usr/bin/crontab -r -u %s"
-#define CRONTAB_FILE "/var/spool/cron/crontabs/%s"
-/* Red Hat 2.1 (jiivee@iki.fi): */
-/* #define CRONTAB_FILE "/var/spool/cron/%s" */
-#endif
-
-/*
- * Hmmm, had to #undef this since at-2.8a on Linux doesn't have an option
- * to remove all jobs owned by some user.
- *
- * Fortunately, atrun will not run any at jobs for users not listed in
- * /etc/passwd.  Unfortunately, if you remove a user and add a new user
- * with the same UID before it is time to run the old at job, atrun will
- * not notice this and run the old job.  Not good.  The best fix right
- * now is to remove any at jobs left over by hand, and not reuse any
- * previously used UID values.
- *
- * We probably should discuss this with the at maintainer...  It might
- * be better to store at jobs by user names, not UIDs.  --marekm
- */
-
-#undef ATRM_COMMAND
-
-/*
- * Login times log file location.
- */
-
-#define LASTLOG_FILE "/var/log/lastlog"
-
-/*
- * Linux FSSTND recommends that the chfn, chsh, gpasswd, passwd commands
- * are in /usr/bin, not /bin (not needed before mounting /usr).  --marekm
- */
-
-#define CHFN_PROGRAM "/usr/bin/chfn"
-#define CHSH_PROGRAM "/usr/bin/chsh"
-#define GPASSWD_PROGRAM "/usr/bin/gpasswd"
-#define PASSWD_PROGRAM "/usr/bin/passwd"
-
-/*
- * On most Linux systems, the login prompt is "hostname login: ".  Some
- * automatic login scripts depend on it.  If not defined, the default is
- * just "login: ".  %s is replaced by the hostname.  --marekm
- */
-
-#define LOGIN_PROMPT "%s login: "
-
-/*
- * Define to enable (warning: completely unsupported by me) administrator
- * defined authentication methods.  Most programs are not aware of them,
- * so we can remove some code and possibly some bugs :-).  PAM (when done)
- * will replace much of this anyway...  --marekm
- */
-
-/* #define AUTH_METHODS */
-
-/*
- * Define to enable detailed login access control (a la logdaemon/FreeBSD)
- * and su access control (much more powerful/fascist than the traditional
- * BSD-style "wheel group" feature).  Any volunteers to convince the GNU
- * folks that they should add access control to their version of su?
- * Call me a fascist, but then I'll have to call you a communist :-).
- */
-
-#define LOGIN_ACCESS
-#define SU_ACCESS
-
-/* see faillog.h for more info what it is */
-#define FAILLOG_LOCKTIME
-
-/* see lmain.c and login.defs.linux */
-#define CONSOLE_GROUPS
-
-#endif /* _CONFIG_H */
diff --git a/old/config.h.sun4 b/old/config.h.sun4
deleted file mode 100644 (file)
index 95527c0..0000000
+++ /dev/null
@@ -1,189 +0,0 @@
-/*
- * Copyright 1989 - 1994, Julianne Frances Haugh
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of Julianne F. Haugh nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-/*
- * Configuration file for login.
- *
- *     $Id: config.h.sun4,v 1.2 1997/05/01 23:11:58 marekm Exp $
- *     (SunOS 4.1.1)
- */
-
-
-/*
- * Pathname to the run-time configuration definitions file.
- */
-
-#define LOGINDEFS "/etc/login.defs"
-
-/*
- * Define SHADOWPWD to use shadow [ unreadable ] password file.
- * Release 3 has a requirement that SHADOWPWD always be defined.
- */
-
-#define        SHADOWPWD
-
-/*
- * Define AUTOSHADOW to have root always copy sp_pwdp to pw_passwd
- * for getpwuid() and getpwnam().  This provides compatibility for
- * privileged applications which are shadow-ignorant.  YOU ARE
- * ENCOURAGED TO NOT USE THIS OPTION UNLESS ABSOLUTELY NECESSARY.
- */
-
-#undef AUTOSHADOW
-
-/*
- * Define SHADOWGRP to user shadowed group files.  This feature adds
- * the concept of a group administrator.
- */
-
-#define        SHADOWGRP /**/
-
-/*
- * Define DOUBLESIZE to use 16 character passwords.  Define SW_CRYPT
- * to use 80 character passwords with SecureWare[tm]'s method of
- * generating ciphertext.
- */
-
-#define DOUBLESIZE
-#undef SW_CRYPT
-
-/*
- * Define SKEY to allow dual-mode SKEY/normal logins
- */
-
-#undef SKEY
-
-/*
- * Define AGING if you want the password aging checks made.
- * Release 3 has a requirement that AGING always be defined.
- */
-
-#define        AGING
-
-/*
- * Pick your version of DBM.  If you define either DBM or NDBM, you must
- * define GETPWENT.  If you define NDBM you must define GETGRENT as well.
- */
-
-/* #define     DBM     /**/
-#define        NDBM    /**/
-
-/*
- * Define USE_SYSLOG if you want to have SYSLOG functions included in your code.
- */
-
-#define        USE_SYSLOG
-
-/*
- * Enable RLOGIN to support the "-r" and "-h" options.
- * Also enable UT_HOST if your /etc/utmp provides for a host name.
- */
-
-#define RLOGIN
-#define UT_HOST
-
-/*
- * Define the "success" code from ruserok().  Most modern systems use 0
- * for success and -1 for failure, while certain older versions use 1
- * for success and 0 for failure.  Please check your manpage to be sure.
- */
-
-#define       RUSEROK 0
-
-/*
- * Select one of the following
- */
-
-/* #define DIR_XENIX   /* include <sys/ndir.h>, use (struct direct)    */
-/* #define DIR_BSD     /* include <ndir.h>, use (struct direct)        */
-#define DIR_SYSV       /* include <dirent.h>, use (struct dirent)      */
-
-/*
- * Various system environment definitions.
- */
-
-#define HAVE_LL_HOST   /* Define if "struct lastlog" contains ll_host */
-#define        HAVE_ULIMIT     /* Define if your UNIX supports ulimit()        */
-#define        GETPWENT        /* Define if you want my GETPWENT(3) routines   */
-#define        GETGRENT        /* Define if you want my GETGRENT(3) routines   */
-#undef NEED_AL64       /* Define if library does not include a64l()    */
-#undef NEED_MKDIR      /* Define if system does not have mkdir()       */
-#undef NEED_RMDIR      /* Define if system does not have rmdir()       */
-#undef NEED_RENAME     /* Define if system does not have rename()      */
-#define        NEED_STRSTR     /* Define if library does not include strstr()  */
-#undef NEED_PUTPWENT   /* Define if library does not include putpwent()*/
-#define        NEED_UTENT      /* Define if library does not include utent fncs*/
-#define        SIGTYPE void    /* Type returned by signal()                    */
-
-/*
- * These definitions MUST agree with the values defined in <pwd.h>.
- */
-
-#undef BSD_QUOTA       /* the pw_quota field exists */
-#define        ATT_AGE         /* the pw_age field exists */
-#define        ATT_COMMENT     /* the pw_comment field exists */
-
-#define        UID_T   uid_t   /* set to be the type of UID's */
-#define        GID_T   gid_t   /* set to be the type of GID's */
-
-#ifndef        UID_T
-#if defined(SVR4) || defined(_POSIX_SOURCE)
-#define        UID_T   uid_t
-#else
-#define        UID_T   int
-#endif
-#endif
-
-#ifndef        GID_T
-#if defined(SVR4) || defined(_POSIX_SOURCE)
-#define        GID_T   gid_t
-#else
-#define        GID_T   int
-#endif
-#endif
-
-/*
- * Define NDEBUG for production versions
- */
-
-#define        NDEBUG
-
-/*
- * Define PWDFILE and GRPFILE to the names of the password and
- * group files.
- */
-
-#define        PWDFILE "/etc/passwd"
-#define        GRPFILE "/etc/group"
-
-/*
- * Login times log file.
- */
-
-#define LASTFILE        "/var/adm/lastlog"
diff --git a/old/config.h.svr4 b/old/config.h.svr4
deleted file mode 100644 (file)
index 40c3d1c..0000000
+++ /dev/null
@@ -1,217 +0,0 @@
-/*
- * Copyright 1989 - 1994, Julianne Frances Haugh
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of Julianne F. Haugh nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-/*
- * Configuration file for login.
- *
- *     $Id: config.h.svr4,v 1.2 1997/05/01 23:11:58 marekm Exp $       (SVR4)
- */
-
-
-/*
- * Pathname to the run-time configuration definitions file.
- */
-
-#define LOGINDEFS "/etc/login.defs"
-
-/*
- * Define SHADOWPWD to use shadow [ unreadable ] password file.
- * Release 3 has a requirement that SHADOWPWD always be defined.
- */
-
-#define        SHADOWPWD
-
-/*
- * Define AUTOSHADOW to have root always copy sp_pwdp to pw_passwd
- * for getpwuid() and getpwnam().  This provides compatibility for
- * privileged applications which are shadow-ignorant.  YOU ARE
- * ENCOURAGED TO NOT USE THIS OPTION UNLESS ABSOLUTELY NECESSARY.
- *
- * SVR4 has always had /etc/shadow
- */
-
-#undef AUTOSHADOW
-
-/*
- * Define SHADOWGRP to user shadowed group files.  This feature adds
- * the concept of a group administrator.
- */
-
-/* #define     SHADOWGRP       /**/
-
-/*
- * Define DOUBLESIZE to use 16 character passwords.  Define SW_CRYPT
- * to use 80 character passwords with SecureWare[tm]'s method of
- * generating ciphertext.
- */
-
-#define DOUBLESIZE
-#undef SW_CRYPT
-
-/*
- * Define SKEY to allow dual-mode SKEY/normal logins
- */
-
-#undef SKEY
-
-/*
- * Define AGING if you want the password aging checks made.
- * Release 3 has a requirement that AGING always be defined.
- */
-
-#define        AGING
-
-/*
- * Pick your version of DBM.  If you define either DBM or NDBM, you must
- * define GETPWENT.  If you define NDBM you must define GETGRENT as well.
- *
- * SVR4 doesn't come with mkpasswd.
- */
-
-/* #define     DBM     /**/
-/* #define     NDBM    /**/
-
-/*
- * Define USE_SYSLOG if you want to have SYSLOG functions included in your code.
- *
- * SVR4 includes syslog()
- */
-
-#define        USE_SYSLOG
-
-/*
- * Enable RLOGIN to support the "-r" and "-h" options.
- * Don't define UT_HOST, it's in utmpx.
- */
-
-#define RLOGIN
-#undef UT_HOST
-
-/*
- * Define the "success" code from ruserok().  Most modern systems use 0
- * for success and -1 for failure, while certain older versions use 1
- * for success and 0 for failure.  Please check your manpage to be sure.
- */
-
-#define        RUSEROK 0
-
-/*
- * Use SVR4 directory functions.
- */
-
-#define DIR_SYSV       /* include <dirent.h>, use (struct dirent)      */
-
-/*
- * Various system environment definitions.
- */
-
-#undef HAVE_ULIMIT     /* Define if your UNIX supports ulimit()        */
-#define        HAVE_RLIMIT     /* Define if your UNIX supports setrlimit()     */
-#define        GETPWENT        /* Define if you want my GETPWENT(3) routines   */
-#undef GETGRENT        /* Define if you want my GETGRENT(3) routines   */
-#undef NEED_AL64       /* Define if library does not include a64l()    */
-#undef NEED_MKDIR      /* Define if system does not have mkdir()       */
-#undef NEED_RMDIR      /* Define if system does not have rmdir()       */
-#undef NEED_RENAME     /* Define if system does not have rename()      */
-#undef NEED_STRSTR     /* Define if library does not include strstr()  */
-#undef NEED_PUTPWENT   /* Define if library does not include putpwent()*/
-#define        SIGTYPE void    /* Type returned by signal()                    */
-
-/*
- * These definitions MUST agree with the values defined in <pwd.h>.
- */
-
-#undef BSD_QUOTA       /* the pw_quota field exists */
-#define        ATT_AGE         /* the pw_age field exists */
-#define        ATT_COMMENT     /* the pw_comment field exists */
-
-#define        UID_T   uid_t   /* set to be the type of UID's */
-#define        GID_T   gid_t   /* set to be the type of GID's */
-
-#ifndef        UID_T
-#if defined(SVR4) || defined(_POSIX_SOURCE)
-#define        UID_T   uid_t
-#else
-#define        UID_T   int
-#endif
-#endif
-
-#ifndef        GID_T
-#if defined(SVR4) || defined(_POSIX_SOURCE)
-#define        GID_T   gid_t
-#else
-#define        GID_T   int
-#endif
-#endif
-
-/*
- * Define NDEBUG for production versions
- */
-
-#define        NDEBUG
-
-/*
- * Define PWDFILE and GRPFILE to the names of the password and
- * group files.
- */
-
-#define        PWDFILE "/etc/passwd"
-#define        GRPFILE "/etc/group"
-
-/*
- * This is SVR4.
- */
-
-#define        USG_UTMP
-
-/*
- * Telinit program.  If your system uses /etc/telinit to change run
- * level, define TELINIT and then define the RUNLEVEL macro to be the
- * run-level to switch INIT to.  This is used by sulogin to change
- * from single user to multi-user mode.
- */
-
-#define        TELINIT         /**/
-#define        RUNLEVEL        "2"     /**/
-
-/*
- * Crontab and atrm.  If your system can "crontab -r -u <user>", define
- * HAS_CRONTAB.  If your system can "atrm <user>", define HAS_ATRM.
- *
- * SVR4 has both of these.
- */
-
-#define        HAS_CRONTAB
-#define        HAS_ATRM
-
-/*
- * Login times log file.
- */
-
-#define LASTFILE        "/var/adm/lastlog"
diff --git a/old/config.h.xenix b/old/config.h.xenix
deleted file mode 100644 (file)
index 4ee3d5b..0000000
+++ /dev/null
@@ -1,224 +0,0 @@
-/*
- * Copyright 1989 - 1993, Julianne Frances Haugh
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of Julianne F. Haugh nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-/*
- * Configuration file for login.
- *
- *     $Id: config.h.xenix,v 1.2 1997/05/01 23:11:58 marekm Exp $
- */
-
-
-/*
- * Pathname to the run-time configuration definitions file.
- */
-
-#define LOGINDEFS "/etc/login.defs"
-
-/*
- * Define SHADOWPWD to use shadow [ unreadable ] password file.
- * Release 3 has a requirement that SHADOWPWD always be defined.
- */
-
-#define        SHADOWPWD
-
-/*
- * Define AUTOSHADOW to have root always copy sp_pwdp to pw_passwd
- * for getpwuid() and getpwnam().  This provides compatibility for
- * privileged applications which are shadow-ignorant.  YOU ARE
- * ENCOURAGED TO NOT USE THIS OPTION UNLESS ABSOLUTELY NECESSARY.
- */
-
-#undef AUTOSHADOW
-
-/*
- * Define SHADOWGRP to user shadowed group files.  This feature adds
- * the concept of a group administrator.  You MUST NOT define this
- * if you disable SHADOWPWD.
- */
-
-/* #define     SHADOWGRP /**/
-
-/*
- * Define DOUBLESIZE to use 16 character passwords.  Define SW_CRYPT
- * to use 80 character passwords with SecureWare[tm]'s method of
- * generating ciphertext.
- */
-
-#define DOUBLESIZE
-#undef SW_CRYPT
-
-/*
- * Define SKEY to allow dual-mode SKEY/normal logins
- */
-
-#undef SKEY
-
-/*
- * Define AGING if you want the password aging checks made.
- * Release 3 has a requirement that AGING always be defined.
- */
-
-#define        AGING
-
-/*
- * Pick your version of DBM.  If you define either DBM or NDBM, you must
- * define GETPWENT.  If you define NDBM you must define GETGRENT as well.
- */
-
-/* #define     DBM     /**/
-/* #define     NDBM    /**/
-
-/*
- * Define USE_SYSLOG if you want to have SYSLOG functions included in your code.
- */
-
-#define        USE_SYSLOG
-
-/*
- * Enable RLOGIN to support the "-r" and "-h" options.
- * Also enable UT_HOST if your /etc/utmp provides for a host name.
- */
-
-#define RLOGIN
-#undef UT_HOST
-
-/*
- * Define the "success" code from ruserok().  Most modern systems use 0
- * for success and -1 for failure, while certain older versions use 1
- * for success and 0 for failure.  Please check your manpage to be sure.
- */
-
-#define        RUSEROK 0
-
-/*
- * Select one of the following
- */
-
-#define DIR_XENIX      /* include <sys/ndir.h>, use (struct direct)    */
-/* #define DIR_BSD     /* include <ndir.h>, use (struct direct)        */
-/* #define DIR_SYSV    /* include <dirent.h>, use (struct dirent)      */
-
-/*
- * Various system environment definitions.
- */
-
-#define        HAVE_ULIMIT     /* Define if your UNIX supports ulimit()        */
-#undef HAVE_RLIMIT     /* Define if your UNIX supports setrlimit()     */
-#define        GETPWENT        /* Define if you want my GETPWENT(3) routines   */
-#define        GETGRENT        /* Define if you want my GETGRENT(3) routines   */
-#define        NEED_AL64       /* Define if library does not include a64l()    */
-#define        NEED_MKDIR      /* Define if system does not have mkdir()       */
-#define        NEED_RMDIR      /* Define if system does not have rmdir()       */
-#define        NEED_RENAME     /* Define if system does not have rename()      */
-#define        NEED_STRSTR     /* Define if library does not include strstr()  */
-#undef NEED_PUTPWENT   /* Define if library does not include putpwent()*/
-#define        SIGTYPE int     /* Type returned by signal()                    */
-
-/*
- * These definitions MUST agree with the values defined in <pwd.h>.
- */
-
-#undef BSD_QUOTA       /* the pw_quota field exists */
-#define        ATT_AGE         /* the pw_age field exists */
-#define        ATT_COMMENT     /* the pw_comment field exists */
-
-#define        UID_T   uid_t   /* set to be the type of UID's */
-#define        GID_T   gid_t   /* set to be the type of GID's */
-
-#ifndef        UID_T
-#if defined(SVR4) || defined(_POSIX_SOURCE)
-#define        UID_T   uid_t
-#else
-#define        UID_T   int
-#endif
-#endif
-
-#ifndef        GID_T
-#if defined(SVR4) || defined(_POSIX_SOURCE)
-#define        GID_T   gid_t
-#else
-#define        GID_T   int
-#endif
-#endif
-
-/*
- * Define NDEBUG for production versions
- */
-
-#define        NDEBUG
-
-/*
- * Define PWDFILE and GRPFILE to the names of the password and
- * group files.
- */
-
-#define        PWDFILE "/etc/passwd"
-#define        GRPFILE "/etc/group"
-
-/*
- * The structure of the utmp file.  There are two kinds of UTMP files,
- * "BSD" and "USG".  "BSD" has no PID or type information, "USG" does.
- * If you define neither of these, the type will be defaulted by using
- * BSD, SUN, SYS3 and USG defines.
- */
-
-#define USG_UTMP       /**/
-/* #define BSD_UTMP    /**/
-
-#if !defined(USG_UTMP) && !defined(BSD_UTMP)
-#if defined(BSD) || defined(SYS3) || defined(SUN)
-#define        BSD_UTMP
-#else
-#define USG_UTMP
-#endif /* BSD || SYS3 || SUN */
-#endif /* !USG_UTMP || !BSD_UTMP */
-
-/*
- * Telinit program.  If your system uses /etc/telinit to change run
- * level, define TELINIT and then define the RUNLEVEL macro to be the
- * run-level to switch INIT to.  This is used by sulogin to change
- * from single user to multi-user mode.
- */
-
-#define        TELINIT         /**/
-#define        RUNLEVEL        "2"     /**/
-
-/*
- * Crontab and atrm.  If your system can "crontab -r -u <user>", define
- * HAS_CRONTAB.  If your system can "atrm <user>", define HAS_ATRM.
- */
-
-#undef HAS_CRONTAB
-#undef HAS_ATRM
-
-/*
- * Login times log file.
- */
-
-#define        LASTFILE        "/var/adm/lastlog"
diff --git a/old/orig-config.h b/old/orig-config.h
deleted file mode 100644 (file)
index 790db8e..0000000
+++ /dev/null
@@ -1,454 +0,0 @@
-/*
- * Copyright 1989 - 1994, Julianne Frances Haugh
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of Julianne F. Haugh nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-/*
- * Configuration file for login.
- *
- *     $Id: orig-config.h,v 1.2 1997/05/01 23:11:59 marekm Exp $
- */
-
-#ifndef _CONFIG_H
-#define _CONFIG_H
-
-#ifdef __linux__
-#include <sys/types.h>
-#include <sys/param.h>
-#include <stdio.h>
-#endif
-
-/*
- * Pathname to the run-time configuration definitions file.
- */
-
-#define LOGINDEFS "/etc/login.defs"
-
-/*
- * Define SHADOWPWD to use shadow [ unreadable ] password file.
- * Release 3 has a requirement that SHADOWPWD always be defined.
- */
-
-#define        SHADOWPWD
-
-/*
- * Define AUTOSHADOW to have root always copy sp_pwdp to pw_passwd
- * for getpwuid() and getpwnam().  This provides compatibility for
- * privileged applications which are shadow-ignorant.  YOU ARE
- * ENCOURAGED TO NOT USE THIS OPTION UNLESS ABSOLUTELY NECESSARY.
- */
-/*
- * Yes, don't do it (and don't build libc with the SHADOW_COMPAT=true
- * option) unless you REALLY know what you're doing.  It might work,
- * but can lead to unshadowing your passwords.  This is not the right
- * way to support shadow passwords!  You have been warned.  --marekm
- */
-
-#undef AUTOSHADOW
-
-/*
- * Define SHADOWGRP to user shadowed group files.  This feature adds
- * the concept of a group administrator.  You MUST NOT define this
- * if you disable SHADOWPWD.
- */
-
-#define        SHADOWGRP /**/
-
-/*
- * Define these if you have shadow password/group support functions in
- * your version of libc.  This removes these functions from libshadow.a
- * (the ones from libc will be used instead).
- *
- * Finally upgraded to ELF, so...
- */
-#define HAVE_SHADOWPWD
-#define HAVE_SHADOWGRP
-
-/*
- * Define MD5_CRYPT to support the MD5-based password hashing algorithm
- * compatible with FreeBSD.  All programs using pw_encrypt() instead of
- * crypt() will understand both styles: old (standard, DES-based), and
- * new (MD5-based).
- *
- * This means that it is possible to copy encrypted passwords from FreeBSD.
- * Programs to change passwords (like passwd) will still use the old style
- * crypt() for compatibility.
- *
- * To enable the use of the new crypt() for new passwords (if you don't
- * need to copy them to other systems, except FreeBSD and Linux), set the
- * MD5_CRYPT option in /etc/login.defs to "yes".
- *
- * This algorithm supports passwords of any length (the getpass() limit
- * is 127 on Linux) and salt strings up to 8 (instead of 2) characters.
- *
- * This is experimental, and currently requires that all programs use
- * pw_encrypt() from libshadow.a instead of crypt() from libc.  This is
- * problematic especially on ELF systems (libc5 has getspnam() so there
- * is otherwise no need to link with the static libshadow.a).  On most
- * a.out systems you have to link with libshadow.a anyway, no problem.
- */
-
-#define MD5_CRYPT
-
-/*
- * Define DOUBLESIZE to use 16 character passwords.  Define SW_CRYPT
- * to use 80 character passwords with SecureWare[tm]'s method of
- * generating ciphertext.
- * Not recommended because of some potential weaknesses.  --marekm
- */
-
-#undef DOUBLESIZE
-#undef SW_CRYPT
-
-/*
- * Define SKEY to allow dual-mode SKEY/normal logins
- */
-
-#undef SKEY
-
-/*
- * Define AGING if you want the password aging checks made.
- * Release 3 has a requirement that AGING always be defined.
- */
-
-#define        AGING
-
-/*
- * Pick your version of DBM.  If you define either DBM or NDBM, you must
- * define GETPWENT.  If you define NDBM you must define GETGRENT as well.
- */
-
-/*
- * DBM support is untested, not recommended yet.  It might make more
- * sense if someone could add it to getpwnam() etc. in libc so that all
- * programs (such as ls) can benefit from it.  Any volunteers?
- *
- * The old DBM (as opposed to NDBM) support may be removed in a future
- * release if no one complains.  It's too braindamaged for the number
- * of #ifdefs it adds (only one database per process at a time).
- *
- * On Linux, NDBM is actually implemented using GDBM, which is licensed
- * under the GPL (not LGPL!) - I'm not sure if it is legal to link it
- * with non-GPL code (such as the shadow suite).  Consult your lawyers,
- * or just modify the code to use db instead.  Welcome to the wonderful
- * world of copyrights.  Yuck!
- *
- * The current DBM support code has a subtle design flaw.  See my
- * comment in pwdbm.c for details...
- *
- * Unless you have 2000 users or so, DBM probably doesn't make things
- * much faster, and it does make things more complicated (= possibly
- * more buggy).  Do it only if you know what you're doing!  --marekm
- */
-
-#undef DBM
-#undef NDBM
-
-/*
- * Define USE_SYSLOG if you want to have SYSLOG functions included in your code.
- */
-
-#define        USE_SYSLOG
-
-/*
- * Enable RLOGIN to support the "-r" and "-h" options.
- * Also enable UT_HOST if your /etc/utmp provides for a host name.
- */
-
-#define RLOGIN
-#define UT_HOST
-
-/*
- * Define NO_RFLG to remove support for login -r flag if your system has
- * a new-style rlogind which doesn't need it.  --marekm
- */
-
-#define NO_RFLG
-
-/*
- * Define the "success" code from ruserok().  Most modern systems use 0
- * for success and -1 for failure, while certain older versions use 1
- * for success and 0 for failure.  Please check your manpage to be sure.
- */
-
-#define        RUSEROK 0
-
-/*
- * Select one of the following
- */
-
-#undef DIR_XENIX       /* include <sys/ndir.h>, use (struct direct)    */
-#undef DIR_BSD         /* include <ndir.h>, use (struct direct)        */
-#define DIR_SYSV       /* include <dirent.h>, use (struct dirent)      */
-
-/*
- * Various system environment definitions.
- */
-
-/*
- * Define if you have sgetgrent() in libc, to remove this function from
- * libshadow.a (some versions of libc5 reportedly have it, most reports
- * so far are from Red Hat 2.1 users, more information is welcome).
- */
-#undef HAVE_SGETGRENT
-
-/*
- * Only important if you compile with GETGRENT defined (use my getgr*()
- * but still use fgetgrent() from libc if HAVE_FGETGRENT defined).
- */
-#undef HAVE_FGETGRENT
-
-#define HAVE_SIGACTION
-#define HAVE_GETUSERSHELL /* Define if your UNIX supports getusershell() */
-#define HAVE_LL_HOST   /* Define if "struct lastlog" contains ll_host */
-#define        HAVE_ULIMIT     /* Define if your UNIX supports ulimit()        */
-#define        HAVE_RLIMIT     /* Define if your UNIX supports setrlimit()     */
-#undef GETPWENT        /* Define if you want my GETPWENT(3) routines   */
-#undef GETGRENT        /* Define if you want my GETGRENT(3) routines   */
-#define        NEED_AL64       /* Define if library does not include a64l()    */
-#undef NEED_MKDIR      /* Define if system does not have mkdir()       */
-#undef NEED_RMDIR      /* Define if system does not have rmdir()       */
-#undef NEED_RENAME     /* Define if system does not have rename()      */
-#undef NEED_STRSTR     /* Define if library does not include strstr()  */
-#undef NEED_PUTPWENT   /* Define if library does not include putpwent()*/
-#define        SIGTYPE void    /* Type returned by signal()                    */
-
-/*
- * These definitions MUST agree with the values defined in <pwd.h>.
- */
-
-#undef BSD_QUOTA       /* the pw_quota field exists */
-#undef ATT_AGE         /* the pw_age field exists */
-#undef ATT_COMMENT     /* the pw_comment field exists */
-
-#define        UID_T   uid_t   /* set to be the type of UID's */
-#define        GID_T   gid_t   /* set to be the type of GID's */
-
-#ifndef        UID_T
-#if defined(SVR4) || defined(_POSIX_SOURCE)
-#define        UID_T   uid_t
-#else
-#define        UID_T   int
-#endif
-#endif
-
-#ifndef        GID_T
-#if defined(SVR4) || defined(_POSIX_SOURCE)
-#define        GID_T   gid_t
-#else
-#define        GID_T   int
-#endif
-#endif
-
-/*
- * Define NDEBUG for production versions
- */
-
-#define        NDEBUG
-
-/*
- * Define PWDFILE and GRPFILE to the names of the password and
- * group files. //jiivee
- */
-
-#define        PASSWD_FILE     "/etc/passwd"
-#define        PASSWD_PAG_FILE "/etc/passwd.pag"
-#define        GROUP_FILE      "/etc/group"
-#define        GROUP_PAG_FILE  "/etc/group.pag"
-
-#ifdef SHADOWPWD
-#define SHADOW_FILE    "/etc/shadow"
-#define SHADOW_PAG_FILE        "/etc/shadow.pag"
-#ifdef SHADOWGRP
-#define SGROUP_FILE    "/etc/gshadow"
-#define SGROUP_PAG_FILE        "/etc/gshadow.pag"
-#endif
-#endif
-
-/*
- * The structure of the utmp file.  There are two kinds of UTMP files,
- * "BSD" and "USG".  "BSD" has no PID or type information, "USG" does.
- * If you define neither of these, the type will be defaulted by using
- * BSD, SUN, SYS3 and USG defines.
- */
-
-#define _UTMP_FILE "/var/run/utmp"
-#define _WTMP_FILE "/var/log/wtmp"
-
-#define USG_UTMP       /**/
-/* #define BSD_UTMP    */
-
-#if !defined(USG_UTMP) && !defined(BSD_UTMP)
-#if defined(BSD) || defined(SYS3) || defined(SUN)
-#define        BSD_UTMP
-#else
-#define USG_UTMP
-#endif /* BSD || SYS3 || SUN */
-#endif /* !USG_UTMP || !BSD_UTMP */
-
-/*
- * From where to look for legal user shells
- */
-
-#ifndef SHELLS_FILE
-#define SHELLS_FILE "/etc/shells"
-#endif
-
-/*
- * Default issue file location
- */
-
-#ifndef ISSUE_FILE
-#define ISSUE_FILE "/etc/issue"
-#endif
-
-/*
- * Logoutd message file
- */
-
-#define        HUP_MESG_FILE   "/etc/logoutd.mesg"
-
-/*
- * Mail spool directory. This is used if mailspool cannot be located otherwise
- */
-
-#ifndef MAIL_SPOOL_DIR
-#define MAIL_SPOOL_DIR "/var/spool/mail"
-#endif
-
-/*
- * Where are new user default setup files kept
- */
-
-#define SKEL_DIR "/etc/skel"
-
-/*
- * New user defaults. The NEW_USER_FILE must have 6 X's in the end of name
- */
-
-#define USER_DEFAULTS_FILE     "/etc/default/useradd"
-#define NEW_USER_FILE          "/etc/default/nuaddXXXXXX"
-
-/*
- * Telinit program.  If your system uses /etc/telinit to change run
- * level, define TELINIT and then define the RUNLEVEL macro to be the
- * run-level to switch INIT to.  This is used by sulogin to change
- * from single user to multi-user mode.
- *
- * From bluca@www.polimi.it: instead, set up /etc/inittab properly
- * ~0:S:wait:/sbin/sulogin
- * ~9:S:wait:/sbin/telinit -t0 2
- */
-
-#undef TELINIT
-#undef PATH_TELINIT    "/sbin/telinit"
-#undef RUNLEVEL        "2"
-
-/*
- * Crontab and atrm.  Used in userdel.c - see user_cancel().  Verify
- * that these are correct for your distribution.  --marekm
- */
-
-#if 0  /* old Slackware */
-#define CRONTAB_COMMAND "/usr/bin/crontab -d -u %s"
-#define CRONTAB_FILE "/var/cron/tabs/%s"
-#else
-/* Debian 0.93R6 (marekm): */
-#define        CRONTAB_COMMAND "/usr/bin/crontab -r -u %s"
-#define CRONTAB_FILE "/var/spool/cron/crontabs/%s"
-/* Red Hat 2.1 (jiivee@iki.fi): */
-/* #define CRONTAB_FILE "/var/spool/cron/%s" */
-#endif
-
-/*
- * Hmmm, had to #undef this since at-2.8a on Linux doesn't have an option
- * to remove all jobs owned by some user.
- *
- * Fortunately, atrun will not run any at jobs for users not listed in
- * /etc/passwd.  Unfortunately, if you remove a user and add a new user
- * with the same UID before it is time to run the old at job, atrun will
- * not notice this and run the old job.  Not good.  The best fix right
- * now is to remove any at jobs left over by hand, and not reuse any
- * previously used UID values.
- *
- * We probably should discuss this with the at maintainer...  It might
- * be better to store at jobs by user names, not UIDs.  --marekm
- */
-
-#undef ATRM_COMMAND
-
-/*
- * Login times log file location.
- */
-
-#define LASTLOG_FILE "/var/log/lastlog"
-
-/*
- * Linux FSSTND recommends that the chfn, chsh, gpasswd, passwd commands
- * are in /usr/bin, not /bin (not needed before mounting /usr).  --marekm
- */
-
-#define CHFN_PROGRAM "/usr/bin/chfn"
-#define CHSH_PROGRAM "/usr/bin/chsh"
-#define GPASSWD_PROGRAM "/usr/bin/gpasswd"
-#define PASSWD_PROGRAM "/usr/bin/passwd"
-
-/*
- * On most Linux systems, the login prompt is "hostname login: ".  Some
- * automatic login scripts depend on it.  If not defined, the default is
- * just "login: ".  %s is replaced by the hostname.  --marekm
- */
-
-#define LOGIN_PROMPT "%s login: "
-
-/*
- * Define to enable (warning: completely unsupported by me) administrator
- * defined authentication methods.  Most programs are not aware of them,
- * so we can remove some code and possibly some bugs :-).  PAM (when done)
- * will replace much of this anyway...  --marekm
- */
-
-/* #define AUTH_METHODS */
-
-/*
- * Define to enable detailed login access control (a la logdaemon/FreeBSD)
- * and su access control (much more powerful/fascist than the traditional
- * BSD-style "wheel group" feature).  Any volunteers to convince the GNU
- * folks that they should add access control to their version of su?
- * Call me a fascist, but then I'll have to call you a communist :-).
- */
-
-#define LOGIN_ACCESS
-#define SU_ACCESS
-
-/* see faillog.h for more info what it is */
-#define FAILLOG_LOCKTIME
-
-/* see lmain.c and login.defs.linux */
-#define CONSOLE_GROUPS
-
-#endif /* _CONFIG_H */
diff --git a/old/pwconv-old.c b/old/pwconv-old.c
deleted file mode 100644 (file)
index e8531fd..0000000
+++ /dev/null
@@ -1,217 +0,0 @@
-/*
- * Copyright 1989 - 1994, Julianne Frances Haugh
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of Julianne F. Haugh nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * pwconv - convert and update shadow password files
- *
- *     Pwconv copies the old password file information to a new shadow
- *     password file, merging entries from an optional existing shadow
- *     file.
- *
- *     The new password file is left in npasswd, the new shadow file is
- *     left in nshadow.  Existing shadow entries are copied as is.
- *     New entries are created with passwords which expire in MAXDAYS days,
- *     with a last changed date of today, unless password aging
- *     information was already present.  Likewise, the minimum number of
- *     days before which the password may be changed is controlled by
- *     MINDAYS.  The number of warning days is set to WARNAGE if that
- *     macro exists.  Entries with blank passwordsare not copied to the
- *     shadow file at all.
- */
-
-#include <config.h>
-#ifndef        SHADOWPWD
-
-main()
-{
-       fprintf (stderr, "Shadow passwords are not configured.\n");
-       exit (1);
-}
-
-#else /*{*/
-
-#include "rcsid.h"
-RCSID("$Id: pwconv-old.c,v 1.1 1997/05/01 23:11:59 marekm Exp $")
-
-#include <sys/types.h>
-#include <stdio.h>
-#include <fcntl.h>
-#include <pwd.h>
-#include "defines.h"
-
-#include "getdef.h"
-
-static char buf[BUFSIZ];
-
-long   a64l ();
-
-int
-main()
-{
-       long    today;
-       struct  passwd  *pw;
-       struct  passwd  *sgetpwent ();
-       FILE    *pwd;
-       FILE    *npwd;
-       FILE    *shadow;
-       struct  spwd    *spwd;
-       struct  spwd    tspwd;
-       int     fd;
-       char    *cp;
-
-       if (! (pwd = fopen (PASSWD_FILE, "r"))) {
-               perror (PASSWD_FILE);
-               exit (1);
-       }
-       unlink ("npasswd");
-       if ((fd = open ("npasswd", O_WRONLY|O_CREAT|O_EXCL, 0644)) < 0 ||
-                       ! (npwd = fdopen (fd, "w"))) {
-               perror ("npasswd");
-               exit (1);
-       }
-       unlink  ("nshadow");
-       if ((fd = open ("nshadow", O_WRONLY|O_CREAT|O_EXCL, 0600)) < 0 ||
-                       ! (shadow = fdopen (fd, "w"))) {
-               perror ("nshadow");
-               (void) unlink ("npasswd");
-               (void) unlink ("nshadow");
-               exit (1);
-       }
-
-       (void) time (&today);
-       today /= (24L * 60L * 60L);
-
-       while (fgets (buf, sizeof buf, pwd) == buf) {
-               if ((cp = strrchr (buf, '\n')))
-                       *cp = '\0';
-
-               if (buf[0] == '#') {    /* comment line */
-                       (void) fprintf (npwd, "%s\n", buf);
-                       continue;
-               }
-               if (! (pw = sgetpwent (buf))) { /* copy bad lines verbatim */
-                       (void) fprintf (npwd, "%s\n", buf);
-                       continue;
-               }
-#if 0  /* convert all entries, even if no passwd.  --marekm */
-               if (pw->pw_passwd[0] == '\0') { /* no password, skip */
-                       (void) fprintf (npwd, "%s\n", buf);
-                       continue;
-               }
-#endif
-               setspent ();            /* rewind old shadow file */
-
-#if 0
-               if ((spwd = getspnam(pw->pw_name))) {
-#else
-               /*
-                * If the user exists, getspnam() in NYS libc (at least
-                * on Red Hat 3.0.3) always succeeds if the user exists,
-                * even if there is no /etc/shadow file.  As a result,
-                * passwords are left in /etc/passwd after pwconv!
-                *
-                * Copy existing shadow entries only if the encrypted
-                * password field in /etc/passwd is "x" - this indicates
-                * that the shadow password is really there.  --marekm
-                */
-               spwd = getspnam(pw->pw_name);
-               if (spwd && strcmp(pw->pw_passwd, "x") == 0) {
-#endif
-                       if (putspent (spwd, shadow)) { /* copy old entry */
-                               perror ("nshadow");
-                               goto error;
-                       }
-               } else {                /* need a new entry. */
-                       tspwd.sp_namp = pw->pw_name;
-                       tspwd.sp_pwdp = pw->pw_passwd;
-                       pw->pw_passwd = "x";
-#ifdef ATT_AGE
-                       if (pw->pw_age) { /* copy old password age stuff */
-                               if ((int) strlen (pw->pw_age) >= 2) {
-                                       tspwd.sp_min = c64i (pw->pw_age[1]);
-                                       tspwd.sp_max = c64i (pw->pw_age[0]);
-                               } else {
-                                       tspwd.sp_min = tspwd.sp_max = -1;
-                               }
-                               if (strlen (pw->pw_age) == 4)
-                                       tspwd.sp_lstchg = a64l (&pw->pw_age[2]);
-                               else
-                                       tspwd.sp_lstchg = -1;
-
-                               /*
-                                * Convert weeks to days
-                                */
-
-                               if (tspwd.sp_min != -1)
-                                       tspwd.sp_min *= 7;
-
-                               if (tspwd.sp_max != -1)
-                                       tspwd.sp_max *= 7;
-
-                               if (tspwd.sp_lstchg != -1)
-                                       tspwd.sp_lstchg *= 7;
-                       } else
-#endif /* ATT_AGE */
-                       {       /* fake up new password age stuff */
-                               tspwd.sp_max = getdef_num("PASS_MAX_DAYS", -1);
-                               tspwd.sp_min = getdef_num("PASS_MIN_DAYS", 0);
-                               tspwd.sp_lstchg = today;
-                       }
-                       tspwd.sp_warn = getdef_num("PASS_WARN_AGE", -1);
-                       tspwd.sp_inact = tspwd.sp_expire = tspwd.sp_flag = -1;
-                       if (putspent (&tspwd, shadow)) { /* output entry */
-                               perror ("nshadow");
-                               goto error;
-                       }
-               }
-               (void) fprintf (npwd, "%s:%s:%d:%d:%s:%s:",
-                               pw->pw_name, pw->pw_passwd,
-                               pw->pw_uid, pw->pw_gid,
-                               pw->pw_gecos, pw->pw_dir);
-
-               if (fprintf (npwd, "%s\n",
-                               pw->pw_shell ? pw->pw_shell:"") == EOF) {
-                       perror ("npasswd");
-                       goto error;
-               }
-       }
-       endspent ();
-
-       if (ferror (npwd) || ferror (shadow)) {
-               perror ("pwconv");
-error:
-               (void) unlink ("npasswd");
-               (void) unlink ("nshadow");
-               exit (1);
-       }
-       (void) fclose (pwd);
-       (void) fclose (npwd);
-       (void) fclose (shadow);
-
-       exit (0);
-}
-#endif /*}*/
diff --git a/old/pwd.h.m4 b/old/pwd.h.m4
deleted file mode 100644 (file)
index 313f4a5..0000000
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * Copyright 1990, 1991, 1992, Julianne Frances Haugh and Steve Simmons
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce 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.
- */
-
-/*
- * Standard definitions for password files.  This is an independant
- * reimplementation of the definitions used by AT&T, BSD, and POSIX.
- * It is not derived from any of those sources.  Note that it can be
- * site-defined to have non-POSIX features as well.  Ideally this file
- * is simply replaced by the standard system supplied /usr/include/pwd.h
- * file.
- *
- *     @(#)pwd.h.m4    3.4.1.3 12:55:53        05 Feb 1994
- *     $Id: pwd.h.m4,v 1.2 1997/05/01 23:11:59 marekm Exp $
- */
-
-#ifndef        PWD_H
-#define        PWD_H
-
-#ifdef M_XENIX
-typedef int uid_t;
-typedef int gid_t;
-#endif
-
-#if defined(SUN) || defined(SUN4)
-#include <sys/types.h>
-#endif
-
-#ifdef SVR4
-#include <sys/types.h>
-#ifndef        _POSIX_SOURCE
-#define        _POSIX_SOURCE
-#include <limits.h>
-#undef _POSIX_SOURCE
-#else  /* _POSIX_SOURCE */
-#include <limits.h>
-#endif /* !_POSIX_SOURCE */
-#define NGROUPS NGROUPS_MAX
-#endif /* SVR4 */
-
-ifdef(`SUN4', `#define ATT_AGE')
-ifdef(`SUN4', `#define  ATT_COMMENT')
-ifdef(`SUN', `#define  BSD_QUOTA')
-ifdef(`BSD', `#define  BSD_QUOTA')
-ifdef(`AIX', `', `ifdef(`USG', `#define        ATT_AGE')')
-ifdef(`AIX', `', `ifdef(`USG', `#define        ATT_COMMENT')')
-
-/*
- * This is the data structure returned by the getpw* functions.  The
- * names of the elements and the structure are taken from traditional
- * usage.
- */
-
-struct passwd  {
-       char    *pw_name ;      /* User login name */
-       char    *pw_passwd ;    /* Encrypted passwd or dummy field */
-       uid_t   pw_uid ;        /* User uid number */
-       gid_t   pw_gid ;        /* User group id number */
-#ifdef BSD_QUOTA
-       /* Most BSD systems have quotas, most USG ones don't    */
-       int     pw_quota ;      /* The BSD magic doodah */
-#endif
-#ifdef ATT_AGE
-       /* Use ATT-style password aging */
-       char    *pw_age ;       /* ATT radix-64 encoded data */
-#endif
-#ifdef ATT_COMMENT
-       /* Provide the unused comment field */
-       char    *pw_comment;    /* Unused comment field */
-#endif
-       char    *pw_gecos ;     /* ASCII user name, other data */
-       char    *pw_dir ;       /* User home directory */
-       char    *pw_shell ;     /* User startup shell */
-} ;
-
-#ifdef ATT_COMMENT
-/* Provide the unused comment structure */
-struct comment {
-       char    *c_dept;
-       char    *c_name;
-       char    *c_acct;
-       char    *c_bin;
-};
-#endif
-
-#if    __STDC__
-
-extern struct  passwd  *getpwent( void ) ;
-extern struct  passwd  *getpwuid( uid_t user_uid ) ;
-extern struct  passwd  *getpwnam( char *name ) ;
-#ifdef SVR4
-void   setpwent( void );
-void   endpwent( void );
-#else
-int    setpwent( void );
-int    endpwent( void );
-#endif
-
-#else
-
-extern struct  passwd  *getpwent();
-extern struct  passwd  *getpwuid();
-extern struct  passwd  *getpwnam();
-#ifdef SVR4
-void   setpwent();
-void   endpwent();
-#else
-int    setpwent();
-int    endpwent();
-#endif
-#endif /* of if __STDC__ */
-
-#endif /* of ifdef PWD_H */
diff --git a/old/pwunconv-old.c b/old/pwunconv-old.c
deleted file mode 100644 (file)
index e54d83e..0000000
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- * Copyright 1989 - 1994, Julianne Frances Haugh
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of Julianne F. Haugh nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * pwunconv - restore old password file from shadow password file.
- *
- *     Pwunconv copies the password file information from the shadow
- *     password file, merging entries from an optional existing shadow
- *     file.
- *
- *     The new password file is left in npasswd.  There is no new
- *     shadow file.  Password aging information is translated where
- *     possible.
- */
-
-#include <config.h>
-
-#include "rcsid.h"
-RCSID("$Id: pwunconv-old.c,v 1.1 1997/05/01 23:11:59 marekm Exp $")
-
-#include "defines.h"
-#include <sys/types.h>
-#include <stdio.h>
-#include <fcntl.h>
-#include <pwd.h>
-
-#ifndef        SHADOWPWD
-int
-main()
-{
-       fprintf (stderr, "Shadow passwords are not configured.\n");
-       exit (1);
-}
-
-#else  /*{*/
-
-char   buf[BUFSIZ];
-char   *l64a ();
-
-int
-main()
-{
-       struct  passwd  *pw;
-       struct  passwd  *sgetpwent ();
-       FILE    *pwd;
-       FILE    *npwd;
-       struct  spwd    *spwd;
-       int     fd;
-#ifdef ATT_AGE
-       char    newage[5];
-#endif
-
-       if (! (pwd = fopen (PASSWD_FILE, "r"))) {
-               perror (PASSWD_FILE);
-               return (1);
-       }
-       unlink ("npasswd");
-       if ((fd = open ("npasswd", O_WRONLY|O_CREAT|O_EXCL, 0600)) < 0 ||
-                       ! (npwd = fdopen (fd, "w"))) {
-               perror ("npasswd");
-               return (1);
-       }
-       while (fgets (buf, sizeof buf, pwd) == buf) {
-               buf[strlen (buf) - 1] = '\0'; /* remove '\n' character */
-
-               if (buf[0] == '#') {    /* comment line */
-                       (void) fprintf (npwd, "%s\n", buf);
-                       continue;
-               }
-               if (! (pw = sgetpwent (buf))) { /* copy bad lines verbatim */
-                       (void) fprintf (npwd, "%s\n", buf);
-                       continue;
-               }
-               setspent ();            /* rewind shadow file */
-
-               if (! (spwd = getspnam (pw->pw_name))) {
-                       (void) fprintf (npwd, "%s\n", buf);
-                       continue;
-               }
-               pw->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.
-        */
-
-#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_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;
-
-                       strncpy (newage, l64a (spwd->sp_lstchg * (64L*64L) +
-                                 spwd->sp_min * (64L) + spwd->sp_max), 5);
-                       pw->pw_age = newage;
-               } else
-                       pw->pw_age = "";
-#endif /* ATT_AGE */
-               if (putpwent (pw, npwd)) {
-                       perror ("pwunconv: write error");
-                       exit (1);
-               }
-       }
-       endspent ();
-
-       if (ferror (npwd)) {
-               perror ("pwunconv");
-               (void) unlink ("npasswd");
-       }
-       (void) fclose (npwd);
-       (void) fclose (pwd);
-       return (0);
-}
-#endif
diff --git a/old/scologin.c b/old/scologin.c
deleted file mode 100644 (file)
index 0efe5a3..0000000
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * Copyright 1991, Julianne Frances Haugh and Chip Rosenthal
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of Julianne F. Haugh nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#ifndef lint
-static char rcsid[] = "$Id: scologin.c,v 1.1 1997/05/01 23:12:00 marekm Exp $";
-#endif
-
-#include <stdio.h>
-#include <pwd.h>
-
-#define USAGE  "usage: %s [ -r remote_host remote_user local_user [ term_type ] ]\n"
-#define LOGIN  "/etc/login"
-
-extern int errno;
-extern char *sys_errlist[];
-extern char **environ;
-
-int
-main(argc, argv)
-int argc;
-char *argv[];
-{
-       char *rhost, *ruser, *luser;
-       char term[1024], *nargv[8], *nenvp[2];
-       int root_user, i;
-       struct passwd *pw;
-
-       if (argc == 1) {
-
-               /*
-                * Called from telnetd.
-                */
-               nargv[0] = "login";
-               nargv[1] = "-p";
-               nargv[2] = NULL;
-
-       } else if (strcmp(argv[1], "-r") == 0 && argc >= 6) {
-
-               /*
-                * Called from rlogind.
-                */
-
-               rhost = argv[2];
-               ruser = argv[3];
-               luser = argv[4];
-               root_user = ((pw = getpwnam(luser)) != NULL && pw->pw_uid == 0);
-
-               i = 0;
-               if ( argc == 6 ) {
-                       strcpy(term, "TERM=");
-                       strncat(term+sizeof("TERM=")-1,
-                               argv[5], sizeof(term)-sizeof("TERM="));
-                       term[sizeof(term)-1] = '\0';
-                       nenvp[i++] = term;
-               }
-               nenvp[i++] = NULL;
-               environ = nenvp;
-
-               i = 0;
-               nargv[i++] = "login";
-               nargv[i++] = "-p";
-               nargv[i++] = "-h";
-               nargv[i++] = rhost;
-               if (ruserok(rhost, root_user, ruser, luser) == 0)
-                       nargv[i++] = "-f";
-               nargv[i++] = luser;
-               nargv[i++] = NULL;
-
-       } else {
-
-               fprintf(stderr, USAGE, argv[0]);
-               exit(1);
-
-       }
-
-       (void) execv(LOGIN, nargv);
-       fprintf(stderr, "%s: could not exec '%s' [%s]\n",
-               argv[0], LOGIN, sys_errlist[errno]);
-       exit(1);
-       /*NOTREACHED*/
-}
diff --git a/old/vipw.8 b/old/vipw.8
deleted file mode 100644 (file)
index b8503c9..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-.\" Copyright (c) 1983, 1991 The Regents of the University of California.
-.\" All rights reserved.
-.\"
-.\" Redistribution and use in source and binary forms, with or without
-.\" modification, are permitted provided that the following conditions
-.\" are met:
-.\" 1. Redistributions of source code must retain the above copyright
-.\"    notice, this list of conditions and the following disclaimer.
-.\" 2. Redistributions in binary form must reproduce the above copyright
-.\"    notice, this list of conditions and the following disclaimer in the
-.\"    documentation and/or other materials provided with the distribution.
-.\" 3. All advertising materials mentioning features or use of this software
-.\"    must display the following acknowledgement:
-.\"    This product includes software developed by the University of
-.\"    California, Berkeley and its contributors.
-.\" 4. Neither the name of the University nor the names of its contributors
-.\"    may be used to endorse or promote products derived from this software
-.\"    without specific prior written permission.
-.\"
-.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
-.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
-.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-.\" SUCH DAMAGE.
-.\"
-.\"     from: @(#)vipw.8       6.7 (Berkeley) 3/16/91
-.\"    $Id: vipw.8,v 1.1 1997/12/07 23:27:13 marekm Exp $
-.\"
-.Dd March 13, 1997
-.Dt VIPW 8
-.Os BSD 4
-.Sh NAME
-.Nm vipw, vigr
-.Nd edit the password, group, shadow, or sgroup file
-.Sh SYNOPSIS
-.Nm vipw [-s]
-.Nm vigr [-s]
-.Sh DESCRIPTION
-.Nm Vipw
-and
-.Nm vigr
-edit the password and group files, respectively, after setting the
-appropriate locks.  With the -s option, they will edit the shadow and
-sgroup files.  They do any necessary processing after
-the files are unlocked.  If the password or group file is already
-locked for editing by another user, you will be asked to try again
-later.
-The default editor under Debian GNU/Linux is
-.Xr ae 1 .
-.Sh ENVIRONMENT
-vipw and vigr will try the environment variables VISUAL and EDITOR
-before defaulting to
-.Xr ae 1 .
-.Sh SEE ALSO
-.Xr passwd 5 ,
-.Xr group 5 ,
-.Xr shadow 5 ,
-.Xr sgroup 5
-.Sh HISTORY
-The
-.Nm vipw
-command appeared in
-.Bx 4.0 .
index 40455d75a45b0c7e0d017bcd16aa8e7c6dacf07b..67e5badf25c448f98a79851d56163fbc9cdcc675 100644 (file)
@@ -446,57 +446,58 @@ Type control-d to proceed with normal startup,\n\
   {"usage: %s [-r] name\n", 413},
   {"%s: error updating group entry\n", 414},
   {"%s: cannot update dbm group entry\n", 415},
-  {"%s: cannot rewrite TCFS key file\n", 416},
-  {"%s: cannot lock TCFS key file\n", 417},
-  {"%s: cannot open TCFS key file\n", 418},
-  {"%s: cannot open group file\n", 419},
-  {"%s: cannot open shadow group file\n", 420},
-  {"%s: error deleting authentication\n", 421},
-  {"%s: error deleting password entry\n", 422},
-  {"%s: error deleting shadow password entry\n", 423},
-  {"%s: error deleting TCFS entry\n", 424},
-  {"%s: error deleting password dbm entry\n", 425},
-  {"%s: error deleting shadow passwd dbm entry\n", 426},
-  {"%s: user %s is currently logged in\n", 427},
-  {"%s: warning: %s not owned by %s, not removing\n", 428},
-  {"%s: warning: can't remove ", 429},
-  {"%s: user %s does not exist\n", 430},
-  {"%s: user %s is a NIS user\n", 431},
-  {"%s: %s not owned by %s, not removing\n", 432},
-  {"%s: not removing directory %s (would remove home of user %s)\n", 433},
-  {"%s: error removing directory %s\n", 434},
-  {"\t\t[-d home [-m]] [-s shell] [-c comment] [-l new_name]\n", 435},
-  {"[-A {DEFAULT|program},... ] ", 436},
-  {"%s: out of memory in update_group\n", 437},
-  {"%s: out of memory in update_gshadow\n", 438},
-  {"%s: no flags given\n", 439},
-  {"%s: shadow passwords required for -e and -f\n", 440},
-  {"%s: uid %ld is not unique\n", 441},
-  {"%s: error deleting authentication method\n", 442},
-  {"%s: error changing authentication method\n", 443},
-  {"%s: error changing password entry\n", 444},
-  {"%s: error removing password entry\n", 445},
-  {"%s: error adding password dbm entry\n", 446},
-  {"%s: error removing passwd dbm entry\n", 447},
-  {"%s: error removing shadow password entry\n", 448},
-  {"%s: error removing shadow passwd dbm entry\n", 449},
-  {"%s: directory %s exists\n", 450},
-  {"%s: can't create %s\n", 451},
-  {"%s: can't chown %s\n", 452},
-  {"%s: cannot rename directory %s to %s\n", 453},
-  {"%s: warning: %s not owned by %s\n", 454},
-  {"failed to change mailbox owner", 455},
-  {"failed to rename mailbox", 456},
+  {"%s: cannot remove dbm group entry\n", 416},
+  {"%s: cannot rewrite TCFS key file\n", 417},
+  {"%s: cannot lock TCFS key file\n", 418},
+  {"%s: cannot open TCFS key file\n", 419},
+  {"%s: cannot open group file\n", 420},
+  {"%s: cannot open shadow group file\n", 421},
+  {"%s: error deleting authentication\n", 422},
+  {"%s: error deleting password entry\n", 423},
+  {"%s: error deleting shadow password entry\n", 424},
+  {"%s: error deleting TCFS entry\n", 425},
+  {"%s: error deleting password dbm entry\n", 426},
+  {"%s: error deleting shadow passwd dbm entry\n", 427},
+  {"%s: user %s is currently logged in\n", 428},
+  {"%s: warning: %s not owned by %s, not removing\n", 429},
+  {"%s: warning: can't remove ", 430},
+  {"%s: user %s does not exist\n", 431},
+  {"%s: user %s is a NIS user\n", 432},
+  {"%s: %s not owned by %s, not removing\n", 433},
+  {"%s: not removing directory %s (would remove home of user %s)\n", 434},
+  {"%s: error removing directory %s\n", 435},
+  {"\t\t[-d home [-m]] [-s shell] [-c comment] [-l new_name]\n", 436},
+  {"[-A {DEFAULT|program},... ] ", 437},
+  {"%s: out of memory in update_group\n", 438},
+  {"%s: out of memory in update_gshadow\n", 439},
+  {"%s: no flags given\n", 440},
+  {"%s: shadow passwords required for -e and -f\n", 441},
+  {"%s: uid %ld is not unique\n", 442},
+  {"%s: error deleting authentication method\n", 443},
+  {"%s: error changing authentication method\n", 444},
+  {"%s: error changing password entry\n", 445},
+  {"%s: error removing password entry\n", 446},
+  {"%s: error adding password dbm entry\n", 447},
+  {"%s: error removing passwd dbm entry\n", 448},
+  {"%s: error removing shadow password entry\n", 449},
+  {"%s: error removing shadow passwd dbm entry\n", 450},
+  {"%s: directory %s exists\n", 451},
+  {"%s: can't create %s\n", 452},
+  {"%s: can't chown %s\n", 453},
+  {"%s: cannot rename directory %s to %s\n", 454},
+  {"%s: warning: %s not owned by %s\n", 455},
+  {"failed to change mailbox owner", 456},
+  {"failed to rename mailbox", 457},
   {"\
 \n\
-%s: %s is unchanged\n", 457},
-  {"Couldn't lock file", 458},
-  {"Couldn't make backup", 459},
-  {"%s: can't restore %s: %s (your changes are in %s)\n", 460},
+%s: %s is unchanged\n", 458},
+  {"Couldn't lock file", 459},
+  {"Couldn't make backup", 460},
+  {"%s: can't restore %s: %s (your changes are in %s)\n", 461},
   {"\
 Usage:\n\
 `vipw' edits /etc/passwd        `vipw -s' edits /etc/shadow\n\
-`vigr' edits /etc/group         `vigr -s' edits /etc/gshadow\n", 461},
+`vigr' edits /etc/group         `vigr -s' edits /etc/gshadow\n", 462},
 };
 
-int _msg_tbl_length = 461;
+int _msg_tbl_length = 462;
index 106451f6b6239d7f3b9709e71c71503f483a1cc0..e319dabd8f7ebd1f2fc00f6b5206bcc82f41d1af 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: 1999-08-27 21:03+0200\n"
+"POT-Creation-Date: 2000-08-26 20:28+0200\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"
@@ -111,7 +111,7 @@ msgstr "
 msgid "You have mail."
 msgstr "¸÷åôå ãñÜììáôá."
 
-#: libmisc/obscure.c:281 src/passwd.c:311
+#: libmisc/obscure.c:281 src/passwd.c:309
 #, c-format
 msgid "Bad password: %s.  "
 msgstr "Êáêü óõíèçìáôéêü: %s.  "
@@ -181,26 +181,26 @@ msgstr "
 msgid "Dialup Password: "
 msgstr "Óõíèçìáôéêü ôçëåöùíéêÞò óýíäåóçò: "
 
-#: lib/getdef.c:249
+#: lib/getdef.c:253
 msgid "Could not allocate space for config info.\n"
 msgstr "Áäõíáìßá äÝóìåõóçò ÷þñïõ ãéá ðëçñïöïñßåò äéáìüñöùóçò.\n"
 
 #.
 #. * Item was never found.
 #.
-#: lib/getdef.c:303
+#: lib/getdef.c:307
 #, c-format
 msgid "configuration error - unknown item '%s' (notify administrator)\n"
 msgstr ""
 "óöÜëìá äéáìüñöùóçò - Üãíùóôï áíôéêåßìåíï '%s' (åéäïðïéåßóôå ôïí "
 "äéá÷åéñéóôÞ)\n"
 
-#: lib/getdef.c:390
+#: lib/getdef.c:394
 #, c-format
 msgid "error - lookup '%s' failed\n"
 msgstr "óöÜëìá - ç áíáæÞôçóç '%s' áðÝôõ÷å\n"
 
-#: lib/getdef.c:398
+#: lib/getdef.c:402
 #, 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:297
+#: lib/pwauth.c:54 src/newgrp.c:305
 msgid "Password: "
 msgstr "Óõíèçìáôéêü: "
 
@@ -345,83 +345,83 @@ msgstr "
 msgid "Account Expires:\t"
 msgstr "Ôï óõíèçìáôéêü ëÞãåé:\t"
 
-#: src/chage.c:468
+#: src/chage.c:471
 #, c-format
 msgid "%s: do not include \"l\" with other flags\n"
 msgstr "%s: Íá ìçí óõìðåñéëáìâÜíåôå ôï \"l\" ìå ôéò Üëëåò åíäåßîåéò\n"
 
-#: src/chage.c:480 src/chage.c:592 src/login.c:529
+#: src/chage.c:483 src/chage.c:595 src/login.c:529
 #, c-format
 msgid "%s: permission denied\n"
 msgstr "%s: Üäåéá áðïññßöèçêå\n"
 
-#: src/chage.c:492 src/chpasswd.c:122
+#: src/chage.c:495 src/chpasswd.c:120
 #, c-format
 msgid "%s: can't lock password file\n"
 msgstr "%s: áäõíáìßá êëåéäþìáôïò ôïõ áñ÷åßïõ óõíèçìáôéêþí\n"
 
-#: src/chage.c:498 src/chpasswd.c:126
+#: src/chage.c:501 src/chpasswd.c:124
 #, c-format
 msgid "%s: can't open password file\n"
 msgstr "%s: áäõíáìßá áíïßãìáôïò ôïõ áñ÷åßïõ óõíèçìáôéêþí\n"
 
-#: src/chage.c:505
+#: src/chage.c:508
 #, c-format
 msgid "%s: unknown user: %s\n"
 msgstr "%s: Üãíùóôïò ÷ñÞóôçò: %s\n"
 
-#: src/chage.c:524
+#: src/chage.c:527
 #, c-format
 msgid "%s: can't lock shadow password file\n"
 msgstr "%s: áäõíáìßá êëåéäþìáôïò ôïõ áñ÷åßïõ óêéùäþí óõíèçìáôéêþí\n"
 
-#: src/chage.c:531
+#: src/chage.c:534
 #, c-format
 msgid "%s: can't open shadow password file\n"
 msgstr "%s: áäõíáìßá áíïßãìáôïò ôïõ áñ÷åßïõ óêéùäþí óõíèçìáôéêþí\n"
 
-#: src/chage.c:613
+#: src/chage.c:616
 #, c-format
 msgid "Changing the aging information for %s\n"
 msgstr "ÁëëáãÞ ðëçñïöïñéþí ÷ñüíïõ ãéá ôïí %s\n"
 
-#: src/chage.c:615
+#: src/chage.c:618
 #, c-format
 msgid "%s: error changing fields\n"
 msgstr "%s: ÓöÜëìá êáôÜ ôçí áëëáãÞ ðåäßùí\n"
 
-#: src/chage.c:642 src/chage.c:705 src/pwunconv.c:184
+#: src/chage.c:645 src/chage.c:708 src/pwunconv.c:183
 #, c-format
 msgid "%s: can't update password file\n"
 msgstr "%s: áäõíáìßá áíáíÝùóçò áñ÷åßïõ óõíèçìáôéêþí\n"
 
-#: src/chage.c:672 src/pwunconv.c:179
+#: src/chage.c:675 src/pwunconv.c:178
 #, c-format
 msgid "%s: can't update shadow password file\n"
 msgstr "%s: áäõíáìßá áíáíÝùóçò ôïõ áñ÷åßïõ óêéùäþí óõíèçìáôéêþí\n"
 
-#: src/chage.c:721 src/chage.c:736 src/chfn.c:572 src/chsh.c:411
-#: src/passwd.c:827 src/passwd.c:928
+#: src/chage.c:724 src/chage.c:739 src/chfn.c:571 src/chsh.c:410
+#: src/passwd.c:825 src/passwd.c:926
 msgid "Error updating the DBM password entry.\n"
 msgstr ""
 "ÓöÜëìá êáôÜ ôçí áíáíÝùóç ôçò êáôá÷þñçóçò óôï dbm áñ÷åßï óõíèçìáôéêþí.\n"
 
-#: src/chage.c:753
+#: src/chage.c:756
 #, c-format
 msgid "%s: can't rewrite shadow password file\n"
 msgstr "%s: áäõíáìßá åðáíåããñáöÞò áñ÷åßïõ óêéùäþí óõíèçìáôéêþí\n"
 
-#: src/chage.c:767
+#: src/chage.c:770
 #, c-format
 msgid "%s: can't rewrite password file\n"
 msgstr "%s: áäõíáìßá åðáíåããñáöÞò áñ÷åßïõ óõíèçìáôéêþí\n"
 
-#: src/chage.c:816
+#: src/chage.c:821
 #, c-format
 msgid "%s: no aging information present\n"
 msgstr "%s: Äåí õðÜñ÷ïõí ðëçñïöïñßåò ãÞñáíóçò\n"
 
-#: src/chfn.c:108
+#: src/chfn.c:107
 #, c-format
 msgid ""
 "Usage: %s [ -f full_name ] [ -r room_no ] [ -w work_ph ]\n"
@@ -430,7 +430,7 @@ msgstr ""
 "Usage: %s [ -f ðëÞñåò_üíïìá ] [ -r áñßèì_äùìáôßïõ ] [ -w ôçë_åñãáóßáò ]\n"
 "\t[ -h ôçë_ïéêßáò ] [ -o Üëëï ] [ ÷ñÞóôçò ]\n"
 
-#: src/chfn.c:112
+#: src/chfn.c:111
 #, c-format
 msgid ""
 "Usage: %s [ -f full_name ] [ -r room_no ] [ -w work_ph ] [ -h home_ph ]\n"
@@ -438,364 +438,364 @@ msgstr ""
 "×ñÞóç: %s [ -f ðëÞñåò_üíïìá ] [ -r áñéèì_äùìáôßïõ ] [ -w ôçë_äùìáôßïõ ]\n"
 "[ -h ôçë_ïéêßáò ]\n"
 
-#: src/chfn.c:164 src/chsh.c:120
+#: 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:167
+#: src/chfn.c:166
 msgid "Full Name"
 msgstr "ÐëÞñåò üíïìá"
 
-#: src/chfn.c:169
+#: src/chfn.c:168
 #, c-format
 msgid "\tFull Name: %s\n"
 msgstr "\tÐëÞñåò ¼íïìá: %s\n"
 
-#: src/chfn.c:172
+#: src/chfn.c:171
 msgid "Room Number"
 msgstr "Áñéèìüò äùìáôßïõ"
 
-#: src/chfn.c:174
+#: src/chfn.c:173
 #, c-format
 msgid "\tRoom Number: %s\n"
 msgstr "\tÁñéèìüò Äùìáôßïõ: %s\n"
 
-#: src/chfn.c:177
+#: src/chfn.c:176
 msgid "Work Phone"
 msgstr "ÔçëÝöùíï Åñãáóßáò"
 
-#: src/chfn.c:179
+#: src/chfn.c:178
 #, c-format
 msgid "\tWork Phone: %s\n"
 msgstr "\tÔçëÝöùíï Åñãáóßáò: %s\n"
 
-#: src/chfn.c:182
+#: src/chfn.c:181
 msgid "Home Phone"
 msgstr "ÔçëÝöùíï Ïéêßáò"
 
-#: src/chfn.c:184
+#: src/chfn.c:183
 #, c-format
 msgid "\tHome Phone: %s\n"
 msgstr "\tÔçëÝöùíï ïéêßáò: %s\n"
 
-#: src/chfn.c:187
+#: src/chfn.c:186
 msgid "Other"
 msgstr "Áëëï"
 
-#: src/chfn.c:300 src/chfn.c:308 src/chfn.c:316 src/chfn.c:324 src/chfn.c:332
-#: src/chfn.c:393 src/passwd.c:1228
+#: src/chfn.c:299 src/chfn.c:307 src/chfn.c:315 src/chfn.c:323 src/chfn.c:331
+#: src/chfn.c:392 src/passwd.c:1226
 #, c-format
 msgid "%s: Permission denied.\n"
 msgstr "%s: ¶äåéá áðïññßöèçêå.\n"
 
-#: src/chfn.c:353 src/chsh.c:226 src/passwd.c:1279
+#: src/chfn.c:352 src/chsh.c:225 src/passwd.c:1277
 #, c-format
 msgid "%s: Unknown user %s\n"
 msgstr "%s: Áãíùóôïò ï ÷ñÞóôçò %s\n"
 
-#: src/chfn.c:359 src/chsh.c:234 src/passwd.c:1209
+#: src/chfn.c:358 src/chsh.c:233 src/passwd.c:1207
 #, c-format
 msgid "%s: Cannot determine your user name.\n"
 msgstr "%s: Äåí åßíáé äõíáôüí íá êáèïñéóôåß ôï üíïìá ÷ñÞóôç óáò.\n"
 
-#: src/chfn.c:375 src/chsh.c:252
+#: src/chfn.c:374 src/chsh.c:251
 #, c-format
 msgid "%s: cannot change user `%s' on NIS client.\n"
 msgstr "%s: áäõíáìßá áëëáãÞò ÷ñÞóôç `%s' óôïí NIS åîõðçñåôïýìåíï.\n"
 
-#: src/chfn.c:380 src/chsh.c:259
+#: src/chfn.c:379 src/chsh.c:258
 #, c-format
 msgid "%s: `%s' is the NIS master for this client.\n"
 msgstr "%s: `%s' åßíáé ï êýñéïò äéáêïìéóôÞò NIS ãé'áõôüí ôïí åîõðçñåôïýìåíï.\n"
 
-#: src/chfn.c:455
+#: src/chfn.c:454
 #, c-format
 msgid "Changing the user information for %s\n"
 msgstr "ÁëëáãÞ ðëçñïöïñéþí ÷ñÞóôç ãéá ôïí %s\n"
 
-#: src/chfn.c:464
+#: src/chfn.c:463
 #, c-format
 msgid "%s: invalid name: \"%s\"\n"
 msgstr "%s: Ìç Ýãêõñï üíïìá: `%s'\n"
 
-#: src/chfn.c:469
+#: src/chfn.c:468
 #, c-format
 msgid "%s: invalid room number: \"%s\"\n"
 msgstr "%s: Ìç Ýãêõñïò áñéèìüò äùìáôßïõ: `%s'\n"
 
-#: src/chfn.c:474
+#: src/chfn.c:473
 #, c-format
 msgid "%s: invalid work phone: \"%s\"\n"
 msgstr "%s: Ìç Ýãêõñï ôçëÝöùíï åñãáóßáò: `%s'\n"
 
-#: src/chfn.c:479
+#: src/chfn.c:478
 #, c-format
 msgid "%s: invalid home phone: \"%s\"\n"
 msgstr "%s: Ìç Ýãêõñï ôçëÝöùíï ïéêßáò: `%s'\n"
 
-#: src/chfn.c:484
+#: src/chfn.c:483
 #, c-format
 msgid "%s: \"%s\" contains illegal characters\n"
 msgstr "%s: \"%s\" ðåñéÝ÷åé ìç Ýãêõñïõò ÷áñáêôÞñåò\n"
 
-#: src/chfn.c:496
+#: src/chfn.c:495
 #, c-format
 msgid "%s: fields too long\n"
 msgstr "%s: Ðïëý ìáêñéÜ ðåäßá\n"
 
-#: src/chfn.c:511 src/chsh.c:349 src/gpasswd.c:583 src/passwd.c:1390
+#: src/chfn.c:510 src/chsh.c:348 src/gpasswd.c:582 src/passwd.c:1388
 msgid "Cannot change ID to root.\n"
 msgstr "Áäõíáìßá áëëáãÞò ôáõôüôçôáò ÷ñÞóôç óå root.\n"
 
-#: src/chfn.c:524 src/chsh.c:363 src/passwd.c:737 src/passwd.c:882
+#: src/chfn.c:523 src/chsh.c:362 src/passwd.c:735 src/passwd.c:880
 msgid "Cannot lock the password file; try again later.\n"
 msgstr "Áäõíáìßá êëåéäþìáôïò ôïõ áñ÷åßïõ óõíèçìáôéêþí. ÄïêéìÜóôå áñãüôåñá.\n"
 
-#: src/chfn.c:530 src/chsh.c:369 src/passwd.c:742 src/passwd.c:887
+#: src/chfn.c:529 src/chsh.c:368 src/passwd.c:740 src/passwd.c:885
 msgid "Cannot open the password file.\n"
 msgstr "Áäõíáìßá áíïßãìáôïò ôïõ áñ÷åßïõ óõíèçìáôéêþí.\n"
 
-#: src/chfn.c:547 src/chsh.c:384 src/passwd.c:748 src/usermod.c:1272
+#: src/chfn.c:546 src/chsh.c:383 src/passwd.c:746 src/usermod.c:1271
 #, c-format
 msgid "%s: %s not found in /etc/passwd\n"
 msgstr "%s: Ï %s äåí âñÝèçêå óôï /etc/passwd\n"
 
-#: src/chfn.c:564 src/chsh.c:403 src/passwd.c:821 src/passwd.c:922
-#: src/passwd.c:962
+#: src/chfn.c:563 src/chsh.c:402 src/passwd.c:819 src/passwd.c:920
+#: src/passwd.c:960
 msgid "Error updating the password entry.\n"
 msgstr "ÓöÜëìá êáôÜ ôçí áíáíÝùóç êáôá÷þñçóçò óôï áñ÷åßï óõíèçìáôéêþí.\n"
 
-#: src/chfn.c:587 src/chsh.c:426 src/passwd.c:834 src/passwd.c:935
+#: src/chfn.c:586 src/chsh.c:425 src/passwd.c:832 src/passwd.c:933
 msgid "Cannot commit password file changes.\n"
 msgstr "Áäõíáìßá åéóáãùãÞò ôùí áëëáãþí óôï áñ÷åßï óõíèçìáôéêþí.\n"
 
-#: src/chfn.c:594 src/chsh.c:433
+#: src/chfn.c:593 src/chsh.c:432
 msgid "Cannot unlock the password file.\n"
 msgstr "Áäõíáìßá îåêëåéäþìáôïò ôïõ áñ÷åßïõ óõíèçìáôéêþí\n"
 
-#: src/chpasswd.c:78
+#: src/chpasswd.c:76
 #, c-format
 msgid "usage: %s [-e]\n"
 msgstr "÷ñÞóç: %s [-e]\n"
 
-#: src/chpasswd.c:134 src/pwconv.c:105
+#: src/chpasswd.c:132 src/pwconv.c:104
 #, c-format
 msgid "%s: can't lock shadow file\n"
 msgstr "%s: áäõíáìßá êëåéäþìáôïò ôïõ áñ÷åßïõ óêéùäþí óõíèçìáôéêþí\n"
 
-#: src/chpasswd.c:139 src/gpasswd.c:609 src/pwconv.c:110 src/pwunconv.c:119
-#: src/pwunconv.c:124
+#: src/chpasswd.c:137 src/gpasswd.c:608 src/pwconv.c:109 src/pwunconv.c:118
+#: src/pwunconv.c:123
 #, c-format
 msgid "%s: can't open shadow file\n"
 msgstr "%s: áäõíáìßá áíïßãìáôïò ôïõ áñ÷åßïõ óêéùäþí óõíèçìáôéêþí\n"
 
-#: src/chpasswd.c:161 src/newusers.c:418
+#: src/chpasswd.c:159 src/newusers.c:415
 #, c-format
 msgid "%s: line %d: line too long\n"
 msgstr "%s: ãñáììÞ %d: ðïëý ìåãÜëç ãñáììÞ\n"
 
-#: src/chpasswd.c:181
+#: src/chpasswd.c:179
 #, c-format
 msgid "%s: line %d: missing new password\n"
 msgstr "%s: ãñáììÞ %d: Ýëëåéøç íÝïõ óõíèçìáôéêïý\n"
 
-#: src/chpasswd.c:197
+#: src/chpasswd.c:195
 #, c-format
 msgid "%s: line %d: unknown user %s\n"
 msgstr "%s: ãñáììÞ %d: Üãíùóôïò ÷ñÞóôçò %s\n"
 
-#: src/chpasswd.c:249
+#: src/chpasswd.c:247
 #, c-format
 msgid "%s: line %d: cannot update password entry\n"
 msgstr "%s: ãñáììÞ %d: áäõíáìßá áíáíÝùóçò êáôá÷þñçóçò óõíèçìáôéêïý\n"
 
-#: src/chpasswd.c:265 src/newusers.c:538
+#: src/chpasswd.c:263 src/newusers.c:535
 #, c-format
 msgid "%s: error detected, changes ignored\n"
 msgstr "%s: Áíé÷íÝõôçêå óöÜëìá, ïé áëëáãÝò áãíïÞèçêáí\n"
 
-#: src/chpasswd.c:276
+#: src/chpasswd.c:274
 #, c-format
 msgid "%s: error updating shadow file\n"
 msgstr ""
 "%s: ÓöÜëìá êáôÜ ôçí áíáíÝùóç êáôá÷ùñÞóåùí óôï áñ÷åßï óêéùäþí óõíèçìáôéêþí\n"
 
-#: src/chpasswd.c:284
+#: src/chpasswd.c:282
 #, c-format
 msgid "%s: error updating password file\n"
 msgstr "%s: ÓöÜëìá êáôÜ ôçí áíáíÝùóç êáôá÷ùñÞóåùí óôï áñ÷åßï óõíèçìáôéêþí\n"
 
-#: src/chsh.c:106
+#: src/chsh.c:105
 #, c-format
 msgid "Usage: %s [ -s shell ] [ name ]\n"
 msgstr "×ñÞóç: %s [ -s öëïéüò ] [ üíïìá ]\n"
 
-#: src/chsh.c:121
+#: src/chsh.c:120
 msgid "Login Shell"
 msgstr "ÊÝëõöïò Åéóüäïõ"
 
-#: src/chsh.c:275 src/chsh.c:288
+#: src/chsh.c:274 src/chsh.c:287
 #, c-format
 msgid "You may not change the shell for %s.\n"
 msgstr "Äåí ìðïñåßôå íá áëëÜîåôå ôï öëïéü ãéá ôï(í) %s.\n"
 
-#: src/chsh.c:317
+#: src/chsh.c:316
 #, c-format
 msgid "Changing the login shell for %s\n"
 msgstr "ÁëëÜãÞ ôïõ öëïéïý ãéá ôïí %s\n"
 
-#: src/chsh.c:329
+#: src/chsh.c:328
 #, c-format
 msgid "%s: Invalid entry: %s\n"
 msgstr "%s: Ìç Ýãêõñç êáôá÷þñçóç: %s\n"
 
-#: src/chsh.c:334
+#: src/chsh.c:333
 #, c-format
 msgid "%s is an invalid shell.\n"
 msgstr "%s äåí åßíáé Ýãêõñïò öëïéüò.\n"
 
-#: src/dpasswd.c:71
+#: src/dpasswd.c:69
 #, c-format
 msgid "Usage: %s [ -(a|d) ] shell\n"
 msgstr "×ñÞóç: %s [ -(ald) ] öëïéüò\n"
 
-#: src/dpasswd.c:136
+#: src/dpasswd.c:134
 msgid "Shell password: "
 msgstr "Óõíèçìáôéêü öëïéïý: "
 
-#: src/dpasswd.c:142
+#: src/dpasswd.c:140
 msgid "re-enter Shell password: "
 msgstr "ÅðáíåéóÜãåôå ôï óõíèçìáôéêü öëïéïý: "
 
-#: src/dpasswd.c:149
+#: src/dpasswd.c:147
 #, c-format
 msgid "%s: Passwords do not match, try again.\n"
 msgstr "%s: Ôá óõíèçìáôéêÜ äåí ôáéñéÜæïõí, äïêéìÜóôå îáíÜ.\n"
 
-#: src/dpasswd.c:169
+#: src/dpasswd.c:167
 #, c-format
 msgid "%s: can't create %s"
 msgstr "%s: áäõíáìßá äçìéïõñãßáò ôïõ %s"
 
-#: src/dpasswd.c:174
+#: src/dpasswd.c:172
 #, c-format
 msgid "%s: can't open %s"
 msgstr "%s: áäõíáìßá áíïßãìáôïò ôïõ %s"
 
-#: src/dpasswd.c:202
+#: src/dpasswd.c:200
 #, c-format
 msgid "%s: Shell %s not found.\n"
 msgstr "%s: Ï öëïéüò %s äåí âñÝèçêå.\n"
 
-#: src/expiry.c:85
+#: src/expiry.c:84
 msgid "Usage: expiry { -f | -c }\n"
 msgstr "×ñÞóç: expiry { -f | -c }\n"
 
-#: src/expiry.c:138
+#: src/expiry.c:137
 #, c-format
 msgid "%s: WARNING!  Must be set-UID root!\n"
 msgstr ""
 "%s: ÐÑÏÓÏ×Ç!  ÐñÝðåé íá Ý÷åé ôåèåß ôï bit ðáñá÷þñçóçò ôáõôüôçôáò root!\n"
 
-#: src/expiry.c:149
+#: src/expiry.c:148
 #, c-format
 msgid "%s: unknown user\n"
 msgstr "%s: Üãíùóôïò ÷ñÞóôçò\n"
 
-#: src/faillog.c:80
+#: src/faillog.c:79
 #, 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:135 src/lastlog.c:95
+#: src/faillog.c:134 src/lastlog.c:94
 #, c-format
 msgid "Unknown User: %s\n"
 msgstr "Áãíùóôïò ÷ñÞóôçò: %s\n"
 
-#: src/faillog.c:216
+#: src/faillog.c:215
 msgid "Username   Failures  Maximum  Latest\n"
 msgstr "¼íïìá_×ñÞóôç Áðïôõ÷ßåò ÌÝãéóôï Ôåëåõôáßá\n"
 
-#: src/faillog.c:233
+#: src/faillog.c:232
 #, c-format
 msgid "  %s on %s"
 msgstr "  %s óôï %s"
 
-#: src/faillog.c:237
+#: src/faillog.c:236
 #, c-format
 msgid " [%lds left]"
 msgstr " [%lds áðÝìåéíáí]"
 
-#: src/faillog.c:240
+#: src/faillog.c:239
 #, c-format
 msgid " [%lds lock]"
 msgstr " [%lds êëåßäùìá]"
 
-#: src/gpasswd.c:91
+#: src/gpasswd.c:89
 #, c-format
 msgid "usage: %s [-r|-R] group\n"
 msgstr "÷ñÞóç: %s [-r|-R] ïìÜäá\n"
 
-#: src/gpasswd.c:92
+#: src/gpasswd.c:90
 #, c-format
 msgid "       %s [-a user] group\n"
 msgstr "       %s [-a ÷ñÞóôçò] ïìÜäá\n"
 
-#: src/gpasswd.c:93
+#: src/gpasswd.c:91
 #, c-format
 msgid "       %s [-d user] group\n"
 msgstr "       %s [-d ÷ñÞóôçò] ïìÜäá\n"
 
-#: src/gpasswd.c:95
+#: src/gpasswd.c:93
 #, c-format
 msgid "       %s [-A user,...] [-M user,...] group\n"
 msgstr "       %s [-A ÷ñÞóôçò,...] [-M ÷ñÞóôçò,...] ïìÜäá\n"
 
-#: src/gpasswd.c:98
+#: src/gpasswd.c:96
 #, c-format
 msgid "       %s [-M user,...] group\n"
 msgstr "       %s [-M ÷ñÞóôçò,...] ïìÜäá\n"
 
-#: src/gpasswd.c:162 src/gpasswd.c:247
+#: src/gpasswd.c:160 src/gpasswd.c:245
 #, c-format
 msgid "%s: unknown user %s\n"
 msgstr "%s: Üãíùóôïò ÷ñÞóôçò %s\n"
 
-#: src/gpasswd.c:174
+#: src/gpasswd.c:172
 msgid "Permission denied.\n"
 msgstr "¶äåéá áðïññßöèçêå.\n"
 
-#: src/gpasswd.c:259
+#: src/gpasswd.c:257
 #, c-format
 msgid "%s: shadow group passwords required for -A\n"
 msgstr "%s: óêéþäç óõíèçìáôéêÜ ïìÜäùí áðáéôïýíôáé ãéá ôï -A\n"
 
-#: src/gpasswd.c:310
+#: src/gpasswd.c:308
 msgid "Who are you?\n"
 msgstr "Ðïéïò åßóáé;\n"
 
-#: src/gpasswd.c:330 src/newgrp.c:247
+#: src/gpasswd.c:328 src/newgrp.c:251
 #, c-format
 msgid "unknown group: %s\n"
 msgstr "Üãíùóôç ïìÜäá: %s\n"
 
-#: src/gpasswd.c:438
+#: src/gpasswd.c:436
 #, c-format
 msgid "Adding user %s to group %s\n"
 msgstr "ÐñïóèÞêç ôïõ ÷ñÞóôç %s óôçí ïìÜäá %s\n"
 
-#: src/gpasswd.c:455
+#: src/gpasswd.c:453
 #, c-format
 msgid "Removing user %s from group %s\n"
 msgstr "ÄéáãñÜöç ôïõ ÷ñÞóôç %s áðü ôçí ïìÜäá %s\n"
 
-#: src/gpasswd.c:468
+#: src/gpasswd.c:466
 #, c-format
 msgid "%s: unknown member %s\n"
 msgstr "%s: Üãíùóôï ìÝëïò %s\n"
 
-#: src/gpasswd.c:515
+#: src/gpasswd.c:513
 #, c-format
 msgid "%s: Not a tty\n"
 msgstr "%s: Äåí åßíáé tty\n"
@@ -807,106 +807,106 @@ msgstr "%s: 
 #. * the old password since the invoker is either the group
 #. * owner, or root.
 #.
-#: src/gpasswd.c:537
+#: src/gpasswd.c:535
 #, c-format
 msgid "Changing the password for group %s\n"
 msgstr "ÁëëáãÞ ôïõ óõíèÞìáôïò ãéá ôçí ïìÜäá %s\n"
 
-#: src/gpasswd.c:540
+#: src/gpasswd.c:538
 msgid "New Password: "
 msgstr "ÍÝï Óõíèçìáôéêü: "
 
-#: src/gpasswd.c:545 src/passwd.c:424
+#: src/gpasswd.c:543 src/passwd.c:422
 msgid "Re-enter new password: "
 msgstr "ÅðáíåéóÜãåôå ôï íÝï óõíèçìáôéêü: "
 
-#: src/gpasswd.c:557
+#: src/gpasswd.c:555
 msgid "They don't match; try again"
 msgstr "Äåí ôáéñéÜæïõí. ÄïêéìÜóôå îáíÜ"
 
-#: src/gpasswd.c:561
+#: src/gpasswd.c:559
 #, c-format
 msgid "%s: Try again later\n"
 msgstr "%s: ÎáíáäïêéìÜóôå áñãüôåñá\n"
 
-#: src/gpasswd.c:591
+#: src/gpasswd.c:590
 #, c-format
 msgid "%s: can't get lock\n"
 msgstr "%s: Áäõíáìßá äçìéïõñãßáò êëåéäþìáôïò\n"
 
-#: src/gpasswd.c:597
+#: src/gpasswd.c:596
 #, c-format
 msgid "%s: can't get shadow lock\n"
 msgstr ""
 "%s: Áäõíáìßá äçìéïõñãßáò êëåéäþìáôïò ôïõ áñ÷åßïõ óêéùäþí óõíèçìáôéêþí\n"
 
-#: src/gpasswd.c:603
+#: src/gpasswd.c:602
 #, c-format
 msgid "%s: can't open file\n"
 msgstr "%s: áäõíáìßá áíïßãìáôïò ôïõ áñ÷åßïõ %s\n"
 
-#: src/gpasswd.c:615
+#: src/gpasswd.c:614
 #, c-format
 msgid "%s: can't update entry\n"
 msgstr "%s: áäõíáìßá áíáíÝùóçò êáôá÷þñçóçò\n"
 
-#: src/gpasswd.c:621
+#: src/gpasswd.c:620
 #, c-format
 msgid "%s: can't update shadow entry\n"
 msgstr "%s: áäõíáìßá áíáíÝùóçò êáôá÷þñçóçò óôï áñ÷åßï óêéùäþí óõíèçìáôéêþí\n"
 
-#: src/gpasswd.c:627
+#: src/gpasswd.c:626
 #, c-format
 msgid "%s: can't re-write file\n"
 msgstr "%s: áäõíáìßá åðáíåããñáöÞò áñ÷åßïõ\n"
 
-#: src/gpasswd.c:633
+#: src/gpasswd.c:632
 #, c-format
 msgid "%s: can't re-write shadow file\n"
 msgstr "%s: áäõíáìßá åðáíåããñáöÞò áñ÷åßïõ óêéùäþí óõíèçìáôéêþí\n"
 
-#: src/gpasswd.c:641
+#: src/gpasswd.c:640
 #, c-format
 msgid "%s: can't unlock file\n"
 msgstr "%s: áäõíáìßá îåêëåéäþìáôïò áñ÷åßïõ\n"
 
-#: src/gpasswd.c:646
+#: src/gpasswd.c:645
 #, c-format
 msgid "%s: can't update DBM files\n"
 msgstr "%s: áäõíáìßá áíáíÝùóçò ôùí DBM áñ÷åßùí\n"
 
-#: src/gpasswd.c:653
+#: src/gpasswd.c:652
 #, c-format
 msgid "%s: can't update DBM shadow files\n"
 msgstr "%s: áäõíáìßá áíáíÝùóçò ôùí DBM áñ÷åßùí óêéùäþí óõíèçìáôéêþí\n"
 
-#: src/groupadd.c:106
+#: src/groupadd.c:105
 msgid "usage: groupadd [-g gid [-o]] group\n"
 msgstr "÷ñÞóç: groupadd [-g gid [-o]] ïìÜäá\n"
 
-#: src/groupadd.c:174 src/groupadd.c:197 src/groupmod.c:184 src/groupmod.c:231
-#: src/useradd.c:932 src/usermod.c:513 src/usermod.c:649
+#: src/groupadd.c:173 src/groupadd.c:196 src/groupmod.c:183 src/groupmod.c:230
+#: src/useradd.c:931 src/usermod.c:512 src/usermod.c:648
 #, c-format
 msgid "%s: error adding new group entry\n"
 msgstr "%s: ÓöÜëìá êáôÜ ôçí ðñïóèÞêç íÝáò êáôá÷þñçóçò óôï áñ÷åßï ïìÜäùí\n"
 
-#: src/groupadd.c:184 src/groupadd.c:207 src/groupmod.c:200 src/useradd.c:943
-#: src/usermod.c:525 src/usermod.c:661
+#: src/groupadd.c:183 src/groupadd.c:206 src/groupmod.c:199 src/useradd.c:942
+#: src/usermod.c:524 src/usermod.c:660
 #, c-format
 msgid "%s: cannot add new dbm group entry\n"
 msgstr "%s: áäõíáìßá ðñïóèÞêçò íÝáò dbm êáôá÷þñçóçò óôï áñ÷åßï ïìÜäùí\n"
 
-#: src/groupadd.c:259 src/useradd.c:997
+#: src/groupadd.c:258 src/useradd.c:996
 #, c-format
 msgid "%s: name %s is not unique\n"
 msgstr "%s: Ôï üíïìá %s äåí åßíáé ìïíáäéêü\n"
 
-#: src/groupadd.c:274
+#: src/groupadd.c:273
 #, c-format
 msgid "%s: gid %ld is not unique\n"
 msgstr "%s: Ôï gid %ld äåí åßíáé ìïíáäéêü\n"
 
-#: src/groupadd.c:298
+#: src/groupadd.c:297
 #, c-format
 msgid "%s: can't get unique gid\n"
 msgstr "%s: áäõíáìßá åýñåóçò ìïíáäéêïý gid\n"
@@ -914,80 +914,80 @@ msgstr "%s: 
 #.
 #. * All invalid group names land here.
 #.
-#: src/groupadd.c:322 src/groupmod.c:342
+#: src/groupadd.c:321 src/groupmod.c:341
 #, c-format
 msgid "%s: %s is a not a valid group name\n"
 msgstr "%s: Ôï %s äåí åßíáé Ýãêõñï üíïìá ïìÜäáò\n"
 
-#: src/groupadd.c:351 src/groupmod.c:368
+#: src/groupadd.c:350 src/groupmod.c:367
 #, c-format
 msgid "%s: invalid group %s\n"
 msgstr "%s: Ìç Ýãêõñç ïìÜäá `%s'\n"
 
-#: src/groupadd.c:368 src/useradd.c:1273
+#: src/groupadd.c:367 src/useradd.c:1272
 #, c-format
 msgid "%s: -O requires NAME=VALUE\n"
 msgstr "%s: -O áðáéôåß ¼ÍÏÌÁ=ÔÉÌÇ\n"
 
-#: src/groupadd.c:413 src/groupdel.c:168 src/groupmod.c:404 src/useradd.c:1382
-#: src/userdel.c:273 src/usermod.c:537
+#: src/groupadd.c:412 src/groupdel.c:167 src/groupmod.c:403 src/useradd.c:1381
+#: src/userdel.c:303 src/usermod.c:536
 #, c-format
 msgid "%s: cannot rewrite group file\n"
 msgstr "%s: áäõíáìßá åðáíåããñáöÞò ôïõ áñ÷åßïõ ïìÜäùí\n"
 
-#: src/groupadd.c:419 src/groupdel.c:174 src/groupmod.c:410 src/useradd.c:1390
-#: src/userdel.c:279 src/usermod.c:674
+#: src/groupadd.c:418 src/groupdel.c:173 src/groupmod.c:409 src/useradd.c:1389
+#: src/userdel.c:309 src/usermod.c:673
 #, c-format
 msgid "%s: cannot rewrite shadow group file\n"
 msgstr "%s: áäõíáìßá åðáíåããñáöÞò ôïõ áñ÷åßïõ óêéùäþí óõíèçìáôéêþí ïìÜäùí\n"
 
-#: src/groupadd.c:438 src/groupdel.c:193 src/groupmod.c:429 src/userdel.c:359
+#: src/groupadd.c:437 src/groupdel.c:192 src/groupmod.c:428 src/userdel.c:389
 #, c-format
 msgid "%s: unable to lock group file\n"
 msgstr "%s: Áäõíáìßá êëåéäþìáôïò ôïõ áñ÷åßïõ ïìÜäùí\n"
 
-#: src/groupadd.c:442 src/groupdel.c:197 src/groupmod.c:433
+#: src/groupadd.c:441 src/groupdel.c:196 src/groupmod.c:432
 #, c-format
 msgid "%s: unable to open group file\n"
 msgstr "%s: Áäõíáìßá áíïßãìáôïò ôïõ áñ÷åßïõ ïìÜäùí\n"
 
-#: src/groupadd.c:447 src/groupdel.c:202 src/groupmod.c:438 src/userdel.c:368
+#: src/groupadd.c:446 src/groupdel.c:201 src/groupmod.c:437 src/userdel.c:398
 #, c-format
 msgid "%s: unable to lock shadow group file\n"
 msgstr "%s: Áäõíáìßá êëåéäþìáôïò ôïõ áñ÷åßïõ óêéùäþí óõíèçìáôéêþí ïìÜäùí\n"
 
-#: src/groupadd.c:452 src/groupdel.c:207 src/groupmod.c:443
+#: src/groupadd.c:451 src/groupdel.c:206 src/groupmod.c:442
 #, c-format
 msgid "%s: unable to open shadow group file\n"
 msgstr "%s: Áäõíáìßá áíïßãìáôïò ôïõ áñ÷åßïõ óêéùäþí óõíèçìáôéêþí ïìÜäùí\n"
 
-#: src/groupadd.c:519
+#: src/groupadd.c:518
 #, c-format
 msgid "%s: group %s exists\n"
 msgstr "%s: Ç ïìÜäá %s õðÜñ÷åé\n"
 
-#: src/groupdel.c:87
+#: src/groupdel.c:86
 msgid "usage: groupdel group\n"
 msgstr "÷ñÞóç: groupdel ïìÜäá\n"
 
-#: src/groupdel.c:105 src/groupmod.c:188 src/groupmod.c:235
+#: src/groupdel.c:104 src/groupmod.c:187 src/groupmod.c:234
 #, c-format
 msgid "%s: error removing group entry\n"
 msgstr "%s: ÓöÜëìá êáôÜ ôçí äéáãñáöÞ êáôá÷þñçóçò ïìÜäáò\n"
 
-#: src/groupdel.c:117 src/groupmod.c:207
+#: src/groupdel.c:116 src/groupmod.c:206
 #, c-format
 msgid "%s: error removing group dbm entry\n"
 msgstr "%s: ÓöÜëìá êáôÜ ôçí äéáãñáöÞ êáôá÷þñçóçò óôï dbm áñ÷åßï ïìÜäùí\n"
 
-#: src/groupdel.c:132
+#: src/groupdel.c:131
 #, c-format
 msgid "%s: error removing shadow group entry\n"
 msgstr ""
 "%s: ÓöÜëìá êáôÜ ôçí áöáßñåóç êáôá÷þñçóçò óôï áñ÷åßï óêéùäþí óõíèçìáôéêþí "
 "ïìÜäùí\n"
 
-#: src/groupdel.c:145 src/groupmod.c:253
+#: src/groupdel.c:144 src/groupmod.c:252
 #, c-format
 msgid "%s: error removing shadow group dbm entry\n"
 msgstr ""
@@ -996,78 +996,78 @@ msgstr ""
 #.
 #. * Can't remove the group.
 #.
-#: src/groupdel.c:249
+#: src/groupdel.c:248
 #, c-format
 msgid "%s: cannot remove user's primary group.\n"
 msgstr "%s: áäõíáìßá áöáßñåóçò ôçò ðñùôáñ÷éêÞò ïìÜäáò ôïõ ÷ñÞóôç.\n"
 
-#: src/groupdel.c:306 src/groupmod.c:502
+#: src/groupdel.c:305 src/groupmod.c:501
 #, c-format
 msgid "%s: group %s does not exist\n"
 msgstr "%s: Ç ïìÜäá %s äåí õðÜñ÷åé\n"
 
-#: src/groupdel.c:320 src/groupmod.c:518
+#: src/groupdel.c:319 src/groupmod.c:517
 #, c-format
 msgid "%s: group %s is a NIS group\n"
 msgstr "%s: Ç ïìÜäá %s åßíáé NIS ïìÜäá\n"
 
-#: src/groupdel.c:326 src/groupmod.c:524 src/userdel.c:731 src/usermod.c:990
+#: src/groupdel.c:325 src/groupmod.c:523 src/userdel.c:761 src/usermod.c:989
 #, c-format
 msgid "%s: %s is the NIS master\n"
 msgstr "%s: Ï %s åßíáé ï êýñéïò äéáêïìéóôÞò NIS\n"
 
-#: src/groupmod.c:106
+#: src/groupmod.c:105
 msgid "usage: groupmod [-g gid [-o]] [-n name] group\n"
 msgstr "÷ñÞóç: groupmod [-g gid [-o]] [-n üíïìá] ïìÜäá\n"
 
-#: src/groupmod.c:166
+#: src/groupmod.c:165
 #, fuzzy, c-format
 msgid "%s: %s not found in /etc/group\n"
 msgstr "%s: Ï %s äåí âñÝèçêå óôï /etc/passwd\n"
 
-#: src/groupmod.c:247
+#: src/groupmod.c:246
 #, c-format
 msgid "%s: cannot add new dbm shadow group entry\n"
 msgstr ""
 "%s: áäõíáìßá ðñïóèÞêçò íÝáò dbm êáôá÷þñçóçò óôï áñ÷åßï óêéùäþí óõíèçìáôéêþí "
 "ïìÜäùí\n"
 
-#: src/groupmod.c:300
+#: src/groupmod.c:299
 #, c-format
 msgid "%s: %ld is not a unique gid\n"
 msgstr "%s: Ôï %ld äåí åßíáé ìïíáäéêü gid\n"
 
-#: src/groupmod.c:331
+#: src/groupmod.c:330
 #, c-format
 msgid "%s: %s is not a unique name\n"
 msgstr "%s: Ôï %s äåí åßíáé ìïíáäéêü üíïìá\n"
 
-#: src/groups.c:63
+#: src/groups.c:62
 #, c-format
 msgid "unknown user %s\n"
 msgstr "Üãíùóôïò ÷ñÞóôçò: %s\n"
 
-#: src/grpck.c:99
+#: src/grpck.c:98
 #, c-format
 msgid "Usage: %s [ -r ] [ group [ gshadow ] ]\n"
 msgstr "×ñÞóç: %s [ -r ] [ group [ gshadow ] ]\n"
 
-#: src/grpck.c:101
+#: src/grpck.c:100
 #, c-format
 msgid "Usage: %s [ -r ] [ group ]\n"
 msgstr "×ñÞóç: %s [ -r ] [ group ]\n"
 
-#: src/grpck.c:120 src/pwck.c:120
+#: src/grpck.c:119 src/pwck.c:119
 msgid "No"
 msgstr "Ï÷é"
 
-#: src/grpck.c:235 src/grpck.c:243 src/pwck.c:217 src/pwck.c:226
+#: src/grpck.c:234 src/grpck.c:242 src/pwck.c:216 src/pwck.c:225
 #, c-format
 msgid "%s: cannot lock file %s\n"
 msgstr "%s: áäõíáìßá êëåéäþìáôïò ôïõ áñ÷åßïõ %s\n"
 
-#: src/grpck.c:258 src/grpck.c:266 src/mkpasswd.c:217 src/pwck.c:242
-#: src/pwck.c:251
+#: src/grpck.c:257 src/grpck.c:265 src/mkpasswd.c:216 src/pwck.c:241
+#: src/pwck.c:250
 #, c-format
 msgid "%s: cannot open file %s\n"
 msgstr "%s: áäõíáìßá áíïßãìáôïò áñ÷åßïõ %s\n"
@@ -1076,13 +1076,13 @@ msgstr "%s: 
 #. * Tell the user this entire line is bogus and
 #. * ask them to delete it.
 #.
-#: src/grpck.c:299
+#: src/grpck.c:298
 msgid "invalid group file entry\n"
 msgstr "Ìç Ýãêõñç êáôá÷þñçóç óôï áñ÷åßï ïìÜäùí\n"
 
-#: src/grpck.c:300 src/grpck.c:363 src/grpck.c:455 src/grpck.c:518
-#: src/grpck.c:535 src/pwck.c:287 src/pwck.c:349 src/pwck.c:456 src/pwck.c:518
-#: src/pwck.c:542
+#: src/grpck.c:299 src/grpck.c:362 src/grpck.c:454 src/grpck.c:517
+#: src/grpck.c:534 src/pwck.c:286 src/pwck.c:348 src/pwck.c:455 src/pwck.c:517
+#: src/pwck.c:541
 #, c-format
 msgid "delete line `%s'? "
 msgstr "äéáãñáöÞ ãñáììÞò `%s'; "
@@ -1091,26 +1091,26 @@ msgstr "
 #. * Tell the user this entry is a duplicate of
 #. * another and ask them to delete it.
 #.
-#: src/grpck.c:362
+#: src/grpck.c:361
 msgid "duplicate group entry\n"
 msgstr "áíôéãñáöÞ êáôá÷þñçóçò óôï áñ÷åßï ïìÜäùí\n"
 
-#: src/grpck.c:379
+#: src/grpck.c:378
 #, c-format
 msgid "invalid group name `%s'\n"
 msgstr "Ìç Ýãêõñï üíïìá ïìÜäáò `%s'\n"
 
-#: src/grpck.c:389
+#: src/grpck.c:388
 #, c-format
 msgid "group %s: bad GID (%d)\n"
 msgstr "ïìÜäá %s: ëÜèïò GID (%d)\n"
 
-#: src/grpck.c:415
+#: src/grpck.c:414
 #, c-format
 msgid "group %s: no user %s\n"
 msgstr "ïìÜäá %s: äåí õðÜñ÷åé ÷ñÞóôçò %s\n"
 
-#: src/grpck.c:417 src/grpck.c:586
+#: src/grpck.c:416 src/grpck.c:585
 #, c-format
 msgid "delete member `%s'? "
 msgstr "äéáãñáöÞ ìÝëïõò `%s'; "
@@ -1119,7 +1119,7 @@ msgstr "
 #. * Tell the user this entire line is bogus and
 #. * ask them to delete it.
 #.
-#: src/grpck.c:454
+#: src/grpck.c:453
 msgid "invalid shadow group file entry\n"
 msgstr "Ìç Ýãêõñç êáôá÷þñçóç óôï áñ÷åßï óêéùäþí óõíèçìáôéêþí ïìÜäùí\n"
 
@@ -1127,65 +1127,65 @@ msgstr "
 #. * Tell the user this entry is a duplicate of
 #. * another and ask them to delete it.
 #.
-#: src/grpck.c:517
+#: src/grpck.c:516
 msgid "duplicate shadow group entry\n"
 msgstr "áíôéãñáöÞ êáôá÷þñçóçò óôï áñ÷åßï óêéùäþí óõíèçìáôéêþí ïìÜäùí\n"
 
-#: src/grpck.c:534
+#: src/grpck.c:533
 msgid "no matching group file entry\n"
 msgstr "Äåí âñÝèçêå êáôá÷þñçóç óôï áñ÷åßï ïìÜäùí ðïõ íá ôáéñéÜæåé\n"
 
-#: src/grpck.c:554
+#: src/grpck.c:553
 #, c-format
 msgid "shadow group %s: no administrative user %s\n"
 msgstr "óêéþäçò ïìÜäá %s: Äåí õðÜñ÷åé äéá÷åéñéóôÞò ÷ñÞóôçò %s\n"
 
-#: src/grpck.c:556
+#: src/grpck.c:555
 #, c-format
 msgid "delete administrative member `%s'? "
 msgstr "äéáãñáöÞ äéá÷åéñéóôéêïý ìÝëïõò `%s'; "
 
-#: src/grpck.c:584
+#: src/grpck.c:583
 #, c-format
 msgid "shadow group %s: no user %s\n"
 msgstr "óêéþäçò ïìÜäá %s: äåí õðÜñ÷åé ÷ñÞóôçò %s\n"
 
-#: src/grpck.c:611 src/grpck.c:617 src/pwck.c:573 src/pwck.c:581
+#: src/grpck.c:610 src/grpck.c:616 src/pwck.c:572 src/pwck.c:580
 #, c-format
 msgid "%s: cannot update file %s\n"
 msgstr "%s: áäõíáìßá áíáíÝùóçò áñ÷åßïõ %s\n"
 
-#: src/grpck.c:641 src/pwck.c:607
+#: src/grpck.c:640 src/pwck.c:606
 #, c-format
 msgid "%s: the files have been updated; run mkpasswd\n"
 msgstr "%s: ôá áñ÷åßá áíáíåþèçêáí. ÅêôåëÝóôå mkpasswd\n"
 
-#: src/grpck.c:642 src/grpck.c:646 src/pwck.c:608 src/pwck.c:612
+#: src/grpck.c:641 src/grpck.c:645 src/pwck.c:607 src/pwck.c:611
 #, c-format
 msgid "%s: no changes\n"
 msgstr "%s: êáìéÜ áëëáãÞ\n"
 
-#: src/grpck.c:645 src/pwck.c:611
+#: src/grpck.c:644 src/pwck.c:610
 #, c-format
 msgid "%s: the files have been updated\n"
 msgstr "%s: ôá áñ÷åßá áíáíåþèçêáí\n"
 
-#: src/grpconv.c:63 src/grpunconv.c:64
+#: src/grpconv.c:62 src/grpunconv.c:63
 #, c-format
 msgid "%s: can't lock group file\n"
 msgstr "%s: áäõíáìßá êëåéäþìáôïò ôïõ áñ÷åßïõ ïìÜäùí\n"
 
-#: src/grpconv.c:68 src/grpunconv.c:69
+#: src/grpconv.c:67 src/grpunconv.c:68
 #, c-format
 msgid "%s: can't open group file\n"
 msgstr "%s: áäõíáìßá áíïßãìáôïò ôïõ áñ÷åßïõ ïìÜäùí\n"
 
-#: src/grpconv.c:73 src/grpunconv.c:74
+#: src/grpconv.c:72 src/grpunconv.c:73
 #, c-format
 msgid "%s: can't lock shadow group file\n"
 msgstr "%s: áäõíáìßá êëåéäþìáôïò ôïõ áñ÷åßïõ óêéùäþí óõíèçìáôéêþí ïìÜäùí\n"
 
-#: src/grpconv.c:78 src/grpunconv.c:79
+#: src/grpconv.c:77 src/grpunconv.c:78
 #, c-format
 msgid "%s: can't open shadow group file\n"
 msgstr "%s: áäõíáìßá áíïßãìáôïò ôïõ áñ÷åßïõ óêéùäþí óõíèçìáôéêþí ïìÜäùí\n"
@@ -1193,90 +1193,90 @@ msgstr "%s: 
 #.
 #. * This shouldn't happen (the entry exists) but...
 #.
-#: src/grpconv.c:94
+#: src/grpconv.c:93
 #, c-format
 msgid "%s: can't remove shadow group %s\n"
 msgstr ""
 "%s: áäõíáìßá áöáßñåóçò  ôçò ïìÜäáò %s, áðü ôï áñ÷åßï óêéùäþí óõíèçìáôéêþí\n"
 "ïìÜäùí\n"
 
-#: src/grpconv.c:135 src/pwconv.c:161
+#: src/grpconv.c:134 src/pwconv.c:160
 #, c-format
 msgid "%s: can't update shadow entry for %s\n"
 msgstr ""
 "%s: áäõíáìßá áíáíÝùóçò êáôá÷þñçóçò óôï áñ÷åßï óêéùäþí óõíèçìáôéêþí ãéá ôïí "
 "%s\n"
 
-#: src/grpconv.c:144 src/grpunconv.c:95
+#: src/grpconv.c:143 src/grpunconv.c:94
 #, c-format
 msgid "%s: can't update entry for group %s\n"
 msgstr "%s: áäõíáìßá áíáíÝùóçò êáôá÷þñçóçò ãéá ôçí ïìÜäá %s\n"
 
-#: src/grpconv.c:151 src/grpunconv.c:103
+#: src/grpconv.c:150 src/grpunconv.c:102
 #, c-format
 msgid "%s: can't update shadow group file\n"
 msgstr "%s: áäõíáìßá áíáíÝùóçò ôïõ áñ÷åßïõ óêéùäþí óõíèçìáôéêþí ïìÜäùí\n"
 
-#: src/grpconv.c:155 src/grpunconv.c:108
+#: src/grpconv.c:154 src/grpunconv.c:107
 #, c-format
 msgid "%s: can't update group file\n"
 msgstr "%s: áäõíáìßá áíáíÝùóçò ãéá ôï áñ÷åßï ïìÜäùí\n"
 
-#: src/grpconv.c:170 src/grpunconv.c:129
+#: src/grpconv.c:169 src/grpunconv.c:128
 #, c-format
 msgid "%s: not configured for shadow group support.\n"
 msgstr "%s: Äåí åßíáé äéáìïñöùìÝíï ãéá óêéþäç óõíèçìáôéêÜ ïìÜäùí.\n"
 
-#: src/grpunconv.c:113
+#: src/grpunconv.c:112
 #, c-format
 msgid "%s: can't delete shadow group file\n"
 msgstr ""
 "%s: Äåí åßíáé äõíáôüí íá äéáãñáöåß ôï áñ÷åßï óêéùäþí óõíèçìáôéêþí ïìÜäùí\n"
 
-#: src/id.c:57
+#: src/id.c:56
 msgid "usage: id [ -a ]\n"
 msgstr "÷ñÞóç: id [ -a ]\n"
 
-#: src/id.c:59
+#: src/id.c:58
 msgid "usage: id\n"
 msgstr "÷ñÞóç: id\n"
 
-#: src/id.c:119
+#: src/id.c:118
 #, c-format
 msgid "uid=%d(%s)"
 msgstr ""
 
-#: src/id.c:121
+#: src/id.c:120
 #, c-format
 msgid "uid=%d"
 msgstr ""
 
-#: src/id.c:125
+#: src/id.c:124
 #, c-format
 msgid " gid=%d(%s)"
 msgstr ""
 
-#: src/id.c:127
+#: src/id.c:126
 #, c-format
 msgid " gid=%d"
 msgstr ""
 
-#: src/id.c:137
+#: src/id.c:136
 #, c-format
 msgid " euid=%d(%s)"
 msgstr ""
 
-#: src/id.c:139
+#: src/id.c:138
 #, c-format
 msgid " euid=%d"
 msgstr ""
 
-#: src/id.c:144
+#: src/id.c:143
 #, c-format
 msgid " egid=%d(%s)"
 msgstr ""
 
-#: src/id.c:146
+#: src/id.c:145
 #, c-format
 msgid " egid=%d"
 msgstr ""
@@ -1289,42 +1289,42 @@ msgstr ""
 #. * where "###" is a numerical value and "aaa" is the
 #. * corresponding name for each respective numerical value.
 #.
-#: src/id.c:167
+#: src/id.c:166
 msgid " groups="
 msgstr " ïìÜäåò="
 
-#: src/lastlog.c:168
+#: src/lastlog.c:167
 msgid "Username         Port     From             Latest\n"
 msgstr "¼íïìá_×ñÞóôç     Èýñá     Áðü              Ôåëåõôáßá\n"
 
-#: src/lastlog.c:170
+#: src/lastlog.c:169
 msgid "Username                Port     Latest\n"
 msgstr "¼íïìá_×ñÞóôç            Èýñá     Ôåëåõôáßá\n"
 
-#: src/lastlog.c:184
+#: src/lastlog.c:183
 msgid "**Never logged in**"
 msgstr "**ÊáìéÜ åßóïäïò óôï óýóôçìá**"
 
-#: src/login.c:199
+#: src/login.c:198
 #, c-format
 msgid "usage: %s [-p] [name]\n"
 msgstr "÷ñÞóç: %s [-p] [üíïìá]\n"
 
-#: src/login.c:202
+#: src/login.c:201
 #, c-format
 msgid "       %s [-p] [-h host] [-f name]\n"
 msgstr "       %s [-p] [-h óýóôçìá] [-f üíïìá]\n"
 
-#: src/login.c:204
+#: src/login.c:203
 #, c-format
 msgid "       %s [-p] -r host\n"
 msgstr "       %s [-p] -r óýóôçìá\n"
 
-#: src/login.c:287
+#: src/login.c:286
 msgid "Invalid login time\n"
 msgstr "ÅóöáëìÝíç þñá åéóüäïõ\n"
 
-#: src/login.c:342
+#: src/login.c:341
 msgid ""
 "\n"
 "System closed for routine maintenance\n"
@@ -1332,7 +1332,7 @@ msgstr ""
 "\n"
 "Ôï óýóôçìá Ýêëåéóå ãéá óõíôÞñçóç ñïõôßíáò\n"
 
-#: src/login.c:352
+#: src/login.c:351
 msgid ""
 "\n"
 "[Disconnect bypassed -- root login allowed.]\n"
@@ -1340,7 +1340,7 @@ msgstr ""
 "\n"
 "[ÐáñÜêáìøç áðïóýíäåóçò -- Ç åßóïäïò ôïõ root åðåôñÜðç.]\n"
 
-#: src/login.c:391
+#: src/login.c:390
 #, c-format
 msgid ""
 "\n"
@@ -1359,7 +1359,7 @@ msgstr " 
 msgid " on `%.100s'"
 msgstr " óôï `%.100s'"
 
-#: src/login.c:807
+#: src/login.c:834
 #, c-format
 msgid ""
 "\n"
@@ -1368,35 +1368,35 @@ msgstr ""
 "\n"
 "%s login: "
 
-#: src/login.c:809
+#: src/login.c:836
 msgid "login: "
 msgstr "login: "
 
-#: src/login.c:991 src/sulogin.c:233
+#: src/login.c:1026 src/sulogin.c:231
 msgid "Login incorrect"
 msgstr "Äéáäéêáóßá åéóüäïõ áðÝôõ÷å"
 
-#: src/login.c:1163
+#: src/login.c:1213
 msgid "Warning: login re-enabled after temporary lockout.\n"
 msgstr ""
 "Ðñïåéäïðïßçóç: Ç åßóïäïò åðáíåíåñãïðïéÞèçêå ìåôÜ áðü ðñïóùñéíü áðïêëåéóìü.\n"
 
-#: src/login.c:1173
+#: src/login.c:1223
 #, c-format
 msgid "Last login: %s on %s"
 msgstr "Ôåëåõôáßá åßóïäïò: %s óôï %s"
 
-#: src/login.c:1176
+#: src/login.c:1226
 #, c-format
 msgid "Last login: %.19s on %s"
 msgstr "Ôåëåõôáßá åßóïäïò: %.19s óôï %s"
 
-#: src/login.c:1181
+#: src/login.c:1231
 #, c-format
 msgid " from %.*s"
 msgstr " áðü %.*s"
 
-#: src/login.c:1246
+#: src/login.c:1303
 msgid "Starting rad_login\n"
 msgstr "¸íáñîç rad_login\n"
 
@@ -1407,194 +1407,194 @@ msgstr ""
 "%s: Äåí õðÜñ÷åé DBM âÜóç äåäïìÝíùí óôï óýóôçìá - êáìéÜ åíÝñãåéá äåí "
 "åêôåëåßôáé\n"
 
-#: src/mkpasswd.c:246 src/mkpasswd.c:250
+#: src/mkpasswd.c:245 src/mkpasswd.c:249
 #, c-format
 msgid "%s: cannot overwrite file %s\n"
 msgstr "%s: áäõíáìßá åããñáöÞò ðÜíù áðü ôï áñ÷åßï %s\n"
 
-#: src/mkpasswd.c:264
+#: src/mkpasswd.c:263
 #, c-format
 msgid "%s: cannot open DBM files for %s\n"
 msgstr "%s: áäõíáìßá áíïßãìáôïò DBM áñ÷åßùí ãéá ôï %s\n"
 
-#: src/mkpasswd.c:297
+#: src/mkpasswd.c:296
 #, c-format
 msgid "%s: the beginning with "
 msgstr "%s: ç áñ÷Þ ìå "
 
-#: src/mkpasswd.c:322
+#: src/mkpasswd.c:321
 #, c-format
 msgid "%s: error parsing line \"%s\"\n"
 msgstr "%s: ÓöÜëìá êáôÜ ôçí åðåîåñãáóßá ôçò ãñáììÞò \"%s\"\n"
 
-#: src/mkpasswd.c:327 src/mkpasswd.c:329 src/mkpasswd.c:331 src/mkpasswd.c:333
+#: src/mkpasswd.c:326 src/mkpasswd.c:328 src/mkpasswd.c:330 src/mkpasswd.c:332
 msgid "adding record for name "
 msgstr "ðñïóèÞêç êáôá÷þñçóçò ãéá üíïìá "
 
-#: src/mkpasswd.c:337 src/mkpasswd.c:342 src/mkpasswd.c:346 src/mkpasswd.c:350
+#: src/mkpasswd.c:336 src/mkpasswd.c:341 src/mkpasswd.c:345 src/mkpasswd.c:349
 #, c-format
 msgid "%s: error adding record for "
 msgstr "%s: ÓöÜëìá êáôÜ ôçí ðñïóèÞêç êáôá÷þñçóçò ãéá "
 
-#: src/mkpasswd.c:368
+#: src/mkpasswd.c:367
 #, c-format
 msgid "added %d entries, longest was %d\n"
 msgstr "ðñïóôÝèçêáí %d êáôá÷ùñÞóåéò, ç ìåãáëýôåñç Þôáí %d\n"
 
-#: src/mkpasswd.c:383
+#: 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:385
+#: 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:388
+#: src/mkpasswd.c:387
 #, c-format
 msgid "Usage: %s [ -vf ] [ -p|g ] file\n"
 msgstr "×ñÞóç: %s [ -vf ] [ -p|g ] áñ÷åßï\n"
 
-#: src/newgrp.c:67
+#: src/newgrp.c:66
 msgid "usage: newgrp [ - ] [ group ]\n"
 msgstr "÷ñÞóç: newgrp [ - ] [ ïìÜäá ]\n"
 
-#: src/newgrp.c:69
+#: src/newgrp.c:68
 #, fuzzy
 msgid "usage: sg group [[-c] command ]\n"
 msgstr "÷ñÞóç: sg ïìÜäá [ åíôïëÞ ]\n"
 
-#: src/newgrp.c:122
+#: src/newgrp.c:125
 #, c-format
 msgid "unknown uid: %d\n"
 msgstr "Üãíùóôï uid: %d\n"
 
-#: src/newgrp.c:198
+#: src/newgrp.c:201
 #, c-format
 msgid "unknown gid: %ld\n"
 msgstr "Üãíùóôï gid: %ld\n"
 
-#: src/newgrp.c:242
+#: src/newgrp.c:245
 #, c-format
 msgid "unknown gid: %d\n"
 msgstr "Üãíùóôï gid: %d\n"
 
-#: src/newgrp.c:315 src/newgrp.c:324
+#: src/newgrp.c:323 src/newgrp.c:332
 msgid "Sorry.\n"
 msgstr "ËõðÜìáé.\n"
 
-#: src/newgrp.c:356
+#: src/newgrp.c:364
 msgid "too many groups\n"
 msgstr "ðÜñá ðïëëÝò ïìÜäåò\n"
 
-#: src/newusers.c:79
+#: src/newusers.c:76
 #, c-format
 msgid "Usage: %s [ input ]\n"
 msgstr "×ñÞóç: %s [ åßóïäïò ]\n"
 
-#: src/newusers.c:367
+#: src/newusers.c:364
 #, c-format
 msgid "%s: can't lock /etc/passwd.\n"
 msgstr "%s: áäõíáìßá êëåéäþìáôïò ôïõ /etc/passwd.\n"
 
-#: src/newusers.c:378
+#: src/newusers.c:375
 #, c-format
 msgid "%s: can't lock files, try again later\n"
 msgstr "%s: áäõíáìßá êëåéäþìáôïò áñ÷åßùí, îáíáäïêéìÜóôå áñãüôåñá\n"
 
-#: src/newusers.c:393
+#: src/newusers.c:390
 #, c-format
 msgid "%s: can't open files\n"
 msgstr "%s: áäõíáìßá áíïßãìáôïò ôùí áñ÷åßùí\n"
 
-#: src/newusers.c:438
+#: src/newusers.c:435
 #, c-format
 msgid "%s: line %d: invalid line\n"
 msgstr "%s: ãñáììÞ %d: ìç Ýãêõñç ãñáììÞ\n"
 
-#: src/newusers.c:456
+#: src/newusers.c:453
 #, c-format
 msgid "%s: line %d: can't create GID\n"
 msgstr "%s: ãñáììÞ %d: áäõíáìßá äçìéïõñãßáò GID\n"
 
-#: src/newusers.c:472
+#: src/newusers.c:469
 #, c-format
 msgid "%s: line %d: can't create UID\n"
 msgstr "%s: ãñáììÞ %d: áäõíáìßá äçìéïõñãßáò UID\n"
 
-#: src/newusers.c:484
+#: src/newusers.c:481
 #, c-format
 msgid "%s: line %d: cannot find user %s\n"
 msgstr "%s: ãñáììÞ %d: áäõíáìßá åýñåóçò ÷ñÞóôç %s\n"
 
-#: src/newusers.c:492
+#: src/newusers.c:489
 #, c-format
 msgid "%s: line %d: can't update password\n"
 msgstr "%s: ãñáììÞ %d: áäõíáìßá áíáíÝùóç óõíèçìáôéêïý\n"
 
-#: src/newusers.c:509
+#: src/newusers.c:506
 #, c-format
 msgid "%s: line %d: mkdir failed\n"
 msgstr "%s: ãñáììÞ %d: áðïôõ÷ßá äçìéïõñãßáò êáôáëüãïõ(mkdir)\n"
 
-#: src/newusers.c:513
+#: src/newusers.c:510
 #, c-format
 msgid "%s: line %d: chown failed\n"
 msgstr "%s: ãñáììÞ %d: áðïôõ÷ßá áëëáãÞò éäéïêôÞôç(chown)\n"
 
-#: src/newusers.c:522
+#: src/newusers.c:519
 #, c-format
 msgid "%s: line %d: can't update entry\n"
 msgstr "%s: ãñáììÞ %d: áäõíáìßá áíáíÝùóçò êáôá÷þñçóçò\n"
 
-#: src/newusers.c:553
+#: src/newusers.c:550
 #, c-format
 msgid "%s: error updating files\n"
 msgstr "%s: ÓöÜëìá êáôÜ ôçí åíçìÝñùóç áñ÷åßùí\n"
 
-#: src/passwd.c:241
+#: src/passwd.c:239
 #, c-format
 msgid "usage: %s [ -f | -s ] [ name ]\n"
 msgstr "÷ñÞóç: %s [ -f | -s ] [ üíïìá ]\n"
 
-#: src/passwd.c:244
+#: src/passwd.c:242
 #, c-format
 msgid "       %s [ -x max ] [ -n min ] [ -w warn ] [ -i inact ] name\n"
 msgstr ""
 "       %s [ -x ìåã. ] [ -n åëÜ÷. ] [ -w ðñïåéä. ] [ -i áíåíåñãü ] üíïìá\n"
 
-#: src/passwd.c:247
+#: src/passwd.c:245
 #, c-format
 msgid "       %s { -l | -u | -d | -S | -e } name\n"
 msgstr "       %s { -l | -u | -d | -S | -e } üíïìá\n"
 
-#: src/passwd.c:349
+#: src/passwd.c:347
 #, c-format
 msgid "User %s has a TCFS key, his old password is required.\n"
 msgstr "Ï ÷ñÞóôçò %s Ý÷åé êëåéäß TCFS, áðáéôåßôáé ôï ðáëéü óõíèçìáôéêü.\n"
 
-#: src/passwd.c:350
+#: src/passwd.c:348
 msgid "You can use -t option to force the change.\n"
 msgstr ""
 "Ìðïñåßôå íá ÷ñçóéìïðïéÞóåôå ôçí -t ðáñÜìåôñï ãéá íá åîáíáãêÜóåôå ôçí\n"
 "ðñáãìáôïðïßçóç ôçò áëëáãÞò.\n"
 
-#: src/passwd.c:356
+#: src/passwd.c:354
 msgid "Old password: "
 msgstr "Ðáëéü Óõíèçìáôéêü: "
 
-#: src/passwd.c:363
+#: src/passwd.c:361
 #, c-format
 msgid "Incorrect password for `%s'\n"
 msgstr "ÅóöáëìÝíï óõíèçìáôéêü ãéá ôïí `%s'\n"
 
-#: src/passwd.c:376
+#: src/passwd.c:374
 #, c-format
 msgid "Warning: user %s has a TCFS key.\n"
 msgstr "Ðñïåéäïðïßçóç: Ï ÷ñÞóôçò %s Ý÷åé êëåéäß TCFS.\n"
 
-#: src/passwd.c:394
+#: src/passwd.c:392
 #, c-format
 msgid ""
 "Enter the new password (minimum of %d, maximum of %d characters)\n"
@@ -1604,15 +1604,15 @@ msgstr ""
 "Ðáñáêáëþ ÷ñçóéìïðïéÞóôå Ýíá óõíäõáóìü áðü êåöáëáßá êáé ìéêñÜ ãñÜììáôá\n"
 "êáèþò êáé áñéèìïýò.\n"
 
-#: src/passwd.c:401
+#: src/passwd.c:399
 msgid "New password: "
 msgstr "ÍÝï Óõíèçìáôéêü: "
 
-#: src/passwd.c:411
+#: src/passwd.c:409
 msgid "Try again.\n"
 msgstr "ÎáíáäïêéìÜóôå.\n"
 
-#: src/passwd.c:420
+#: src/passwd.c:418
 msgid ""
 "\n"
 "Warning: weak password (enter it again to use it anyway).\n"
@@ -1620,81 +1620,81 @@ msgstr ""
 "\n"
 "Ðñïóï÷Þ: áäýíáìï óõíèçìáôéêü (åéóÜãåôÝ ôï ðÜëé ãéá íá ôï ÷ñçóéìïðïéÞóåôå).\n"
 
-#: src/passwd.c:429
+#: src/passwd.c:427
 msgid "They don't match; try again.\n"
 msgstr "Äåí ôáéñéÜæïõí. ÄïêéìÜóôå îáíÜ.\n"
 
-#: src/passwd.c:514 src/passwd.c:530
+#: src/passwd.c:512 src/passwd.c:528
 #, c-format
 msgid "The password for %s cannot be changed.\n"
 msgstr "Ôï óõíèçìáôéêü ãéá ôïí %s äåí ìðïñåß íá áëëÜîåé.\n"
 
-#: src/passwd.c:558
+#: src/passwd.c:556
 #, c-format
 msgid "Sorry, the password for %s cannot be changed yet.\n"
 msgstr "Óõãíþìç, ôï óõíèçìáôéêü ãéá ôïí %s äåí ìðïñåß íá áëëÜîåé áêüìç.\n"
 
-#: src/passwd.c:695
+#: src/passwd.c:693
 #, c-format
 msgid "%s: out of memory\n"
 msgstr "%s: äåí õðÜñ÷åé åëåýèåñç ìíÞìç\n"
 
-#: src/passwd.c:847
+#: src/passwd.c:845
 msgid "Cannot lock the TCFS key database; try again later\n"
 msgstr "Áäõíáìßá êëåéäþìáôïò ôçò âÜóçò êëåéäéþí ôïõ TCFS. ÄïêéìÜóôå áñãüôåñá\n"
 
-#: src/passwd.c:853
+#: src/passwd.c:851
 msgid "Cannot open the TCFS key database.\n"
 msgstr "Áäõíáìßá áíïßãìáôïò ôçò âÜóçò êëåéäéþí ôïõ TCFS.\n"
 
-#: src/passwd.c:859
+#: src/passwd.c:857
 msgid "Error updating the TCFS key database.\n"
 msgstr "ÓöÜëìá êáôÜ ôçí áíáíÝùóç ôçò âÜóçò êëåéäéþí ôïõ TCFS.\n"
 
-#: src/passwd.c:864
+#: src/passwd.c:862
 msgid "Cannot commit TCFS changes.\n"
 msgstr "Áäõíáìßá õëïðïßçóçò ôùí áëëáãþí óôï TCFS.\n"
 
-#: src/passwd.c:1071
+#: src/passwd.c:1069
 #, c-format
 msgid "%s: Cannot execute %s"
 msgstr "%s: Áäõíáìßá åêôÝëåóçò ôïõ %s"
 
-#: src/passwd.c:1178
+#: src/passwd.c:1176
 #, c-format
 msgid "%s: repository %s not supported\n"
 msgstr "%s: ç áðïèÞêç %s äåí õðïóôçñßæåôáé\n"
 
-#: src/passwd.c:1265
+#: src/passwd.c:1263
 #, c-format
 msgid "%s: Permission denied\n"
 msgstr "%s: ¶äåéá áðïññßöèçêå\n"
 
-#: src/passwd.c:1289
+#: src/passwd.c:1287
 #, c-format
 msgid "You may not change the password for %s.\n"
 msgstr "Äåí ìðïñåßôå íá áëëÜîåôå ôï óõíèçìáôéêü ãéá ôï(í) %s.\n"
 
-#: src/passwd.c:1354
+#: src/passwd.c:1352
 #, c-format
 msgid "Changing password for %s\n"
 msgstr "ÁëëáãÞ óõíèçìáôéêïý ãéá ôïí %s\n"
 
-#: src/passwd.c:1358
+#: src/passwd.c:1356
 #, c-format
 msgid "The password for %s is unchanged.\n"
 msgstr "Ôï óõíèçìáôéêü ãéá ôïí %s äåí Üëëáîå.\n"
 
-#: src/passwd.c:1414
+#: src/passwd.c:1412
 msgid "Password changed.\n"
 msgstr "Ôï óõíèçìáôéêü Üëëáîå.\n"
 
-#: src/pwck.c:99
+#: src/pwck.c:98
 #, c-format
 msgid "Usage: %s [ -qr ] [ passwd [ shadow ] ]\n"
 msgstr "×ñÞóç: %s [ -qr ] [ passwd [ shadow ] ]\n"
 
-#: src/pwck.c:101
+#: src/pwck.c:100
 #, c-format
 msgid "Usage: %s [ -qr ] [ passwd ]\n"
 msgstr "×ñÞóç: %s [ -qr ] [ passwd ]\n"
@@ -1703,7 +1703,7 @@ msgstr "
 #. * Tell the user this entire line is bogus and
 #. * ask them to delete it.
 #.
-#: src/pwck.c:286
+#: src/pwck.c:285
 msgid "invalid password file entry\n"
 msgstr "Ìç Ýãêõñç êáôá÷þñçóç óôï áñ÷åßï óõíèçìáôéêþí\n"
 
@@ -1711,16 +1711,16 @@ msgstr "
 #. * Tell the user this entry is a duplicate of
 #. * another and ask them to delete it.
 #.
-#: src/pwck.c:348
+#: src/pwck.c:347
 msgid "duplicate password entry\n"
 msgstr "áíôéãñáöÞ êáôá÷þñçóçò óôï áñ÷åßï óõíèçìáôéêþí\n"
 
-#: src/pwck.c:364
+#: src/pwck.c:363
 #, c-format
 msgid "invalid user name `%s'\n"
 msgstr "Ìç Ýãêõñï üíïìá ÷ñÞóôç `%s'\n"
 
-#: src/pwck.c:374
+#: src/pwck.c:373
 #, c-format
 msgid "user %s: bad UID (%d)\n"
 msgstr "÷ñÞóôçò %s: ëáíèáóìÝíï UID (%d)\n"
@@ -1728,7 +1728,7 @@ msgstr "
 #.
 #. * No primary group, just give a warning
 #.
-#: src/pwck.c:389
+#: src/pwck.c:388
 #, c-format
 msgid "user %s: no group %d\n"
 msgstr "÷ñÞóôçò %s: êáìéÜ ïìÜäá %d\n"
@@ -1736,7 +1736,7 @@ msgstr "
 #.
 #. * Home directory doesn't exist, give a warning
 #.
-#: src/pwck.c:404
+#: src/pwck.c:403
 #, c-format
 msgid "user %s: directory %s does not exist\n"
 msgstr "÷ñÞóôçò %s: ï êáôÜëïãïò %s äåí õðÜñ÷åé\n"
@@ -1744,7 +1744,7 @@ msgstr "
 #.
 #. * Login shell doesn't exist, give a warning
 #.
-#: src/pwck.c:419
+#: src/pwck.c:418
 #, c-format
 msgid "user %s: program %s does not exist\n"
 msgstr "÷ñÞóôçò %s: ôï ðñüãñáììá %s äåí õðÜñ÷åé\n"
@@ -1753,7 +1753,7 @@ msgstr "
 #. * Tell the user this entire line is bogus and
 #. * ask them to delete it.
 #.
-#: src/pwck.c:455
+#: src/pwck.c:454
 msgid "invalid shadow password file entry\n"
 msgstr "Ìç Ýãêõñç êáôá÷þñçóç óôï áñ÷åßï óêéùäþí óõíèçìáôéêþí\n"
 
@@ -1761,7 +1761,7 @@ msgstr "
 #. * Tell the user this entry is a duplicate of
 #. * another and ask them to delete it.
 #.
-#: src/pwck.c:517
+#: src/pwck.c:516
 msgid "duplicate shadow password entry\n"
 msgstr "áíôéãñáöÞ êáôá÷þñçóçò óôï áñ÷åßï óêéùäþí óõíèçìáôéêþí\n"
 
@@ -1769,43 +1769,43 @@ msgstr "
 #. * Tell the user this entry has no matching
 #. * /etc/passwd entry and ask them to delete it.
 #.
-#: src/pwck.c:541
+#: src/pwck.c:540
 msgid "no matching password file entry\n"
 msgstr "Äåí âñÝèçêå êáôá÷þñçóç óôï áñ÷åßï óõíèçìáôéêþí ðïõ íá ôáéñßáæåé\n"
 
-#: src/pwck.c:558
+#: src/pwck.c:557
 #, c-format
 msgid "user %s: last password change in the future\n"
 msgstr "÷ñÞóôçò %s: ôåëåõôáßá áëëáãÞ óõíèçìáôéêïý óôï ìÝëëïí\n"
 
-#: src/pwconv.c:95 src/pwunconv.c:109
+#: src/pwconv.c:94 src/pwunconv.c:108
 #, c-format
 msgid "%s: can't lock passwd file\n"
 msgstr "%s: áäõíáìßá êëåéäþìáôïò ôïõ áñ÷åßïõ óõíèçìáôéêþí\n"
 
-#: src/pwconv.c:100 src/pwunconv.c:114
+#: src/pwconv.c:99 src/pwunconv.c:113
 #, c-format
 msgid "%s: can't open passwd file\n"
 msgstr "%s: áäõíáìßá áíïßãìáôïò ôïõ áñ÷åßïõ óõíèçìáôéêþí\n"
 
-#: src/pwconv.c:127
+#: src/pwconv.c:126
 #, c-format
 msgid "%s: can't remove shadow entry for %s\n"
 msgstr ""
 "áäõíáìßá áöáßñåóçò êáôá÷þñçóçò ãéá ôïí %s, áðü ôï áñ÷åßï óêéùäþí "
 "óõíèçìáôéêþí\n"
 
-#: src/pwconv.c:170
+#: src/pwconv.c:169
 #, c-format
 msgid "%s: can't update passwd entry for %s\n"
 msgstr "%s: áäõíáìßá áíáíÝùóçò êáôá÷þñçóçò óõíèçìáôéêïý ãéá ôïí %s\n"
 
-#: src/pwconv.c:177
+#: src/pwconv.c:176
 #, c-format
 msgid "%s: can't update shadow file\n"
 msgstr "%s: áäõíáìßá áíáíÝùóçò êáôá÷þñçóçò ôïõ áñ÷åßïõ óêéùäþí óõíèçìáôéêþí\n"
 
-#: src/pwconv.c:181
+#: src/pwconv.c:180
 #, c-format
 msgid "%s: can't update passwd file\n"
 msgstr "%s: áäõíáìßá áíáíÝùóçò áñ÷åßïõ óõíèçìáôéêþí\n"
@@ -1815,52 +1815,52 @@ msgstr "%s: 
 msgid "%s: Shadow passwords are not configured.\n"
 msgstr "%s: Ôá óêéþäç óõíèçìáôéêÜ äåí Ý÷ïõí äéáìïñöùèåß.\n"
 
-#: src/pwunconv.c:172
+#: src/pwunconv.c:171
 #, c-format
 msgid "%s: can't update entry for user %s\n"
 msgstr "%s: áäõíáìßá áíáíÝùóçò êáôá÷þñçóçò ãéá ôïí ÷ñÞóôç %s\n"
 
-#: src/pwunconv.c:189
+#: src/pwunconv.c:188
 #, c-format
 msgid "%s: can't delete shadow password file\n"
 msgstr "%s: Äåí åßíáé äõíáôüí íá äéáãñáöåß ôï áñ÷åßï óêéùäþí óõíèçìáôéêþí\n"
 
-#: src/su.c:145
+#: src/su.c:140
 msgid "Sorry."
 msgstr "ËõðÜìáé."
 
-#: src/su.c:227
+#: src/su.c:222
 #, c-format
 msgid "%s: must be run from a terminal\n"
 msgstr "%s: ðñÝðåé íá åêôåëåóôåß áðü ôåñìáôéêü\n"
 
-#: src/su.c:319
+#: src/su.c:311
 #, c-format
 msgid "%s: pam_start: error %d\n"
 msgstr "%s: pam_start: óöÜëìá %d\n"
 
-#: src/su.c:345
+#: src/su.c:337
 #, c-format
 msgid "Unknown id: %s\n"
 msgstr "Áãíùóôç ôáõôüôçôá: %s\n"
 
 #. access denied (-1) or unexpected value
-#: src/su.c:380 src/su.c:395
+#: src/su.c:372 src/su.c:387
 #, c-format
 msgid "You are not authorized to su %s\n"
 msgstr "Äåí Ý÷åôå Üäåéá ãéá su %s\n"
 
 #. require own password
-#: src/su.c:391
+#: src/su.c:383
 msgid "(Enter your own password.)"
 msgstr "(ÅéóÜãåôå ôï äéêü óáò óõíèçìáôéêü.)"
 
-#: src/su.c:412
+#: src/su.c:404
 #, c-format
 msgid "%s: permission denied (shell).\n"
 msgstr "%s: Üäåéá áðïññßöèçêå (öëïéüò)\n"
 
-#: src/su.c:436
+#: src/su.c:428
 #, c-format
 msgid ""
 "%s: %s\n"
@@ -1869,19 +1869,19 @@ msgstr ""
 "%s: %s\n"
 "(ÁãíïÞèçêå)\n"
 
-#: src/su.c:605
+#: src/su.c:628
 msgid "No shell\n"
 msgstr "Äåí õðÜñ÷åé öëïéüò\n"
 
 #. must be a password file!
-#: src/sulogin.c:138
+#: src/sulogin.c:136
 msgid "No password file\n"
 msgstr "Äåí õðÜñ÷åé áñ÷åßï óõíèçìáôéêþí\n"
 
 #.
 #. * Fail secure
 #.
-#: src/sulogin.c:180
+#: src/sulogin.c:178
 msgid "No password entry for 'root'\n"
 msgstr "Äåí õðÜñ÷åé êáôá÷þñçóç óõíèçìáôéêïý ãéá ôïí 'root'\n"
 
@@ -1890,7 +1890,7 @@ msgstr "
 #. * given we just exit.
 #.
 #. get a password for root
-#: src/sulogin.c:194
+#: src/sulogin.c:192
 msgid ""
 "\n"
 "Type control-d to proceed with normal startup,\n"
@@ -1901,515 +1901,520 @@ msgstr ""
 "(Þ äþóôå ôï óõíèçìáôéêü ôïõ root ãéá óõíôÞñçóç ôïõ óõóôÞìáôïò):"
 
 #. make new environment active
-#: src/sulogin.c:243
+#: src/sulogin.c:241
 msgid "Entering System Maintenance Mode\n"
 msgstr "¸íáñîç ÊáôÜóôáóçò ÓõíôÞñçóçò ÓõóôÞìáôïò\n"
 
-#: src/useradd.c:244
+#: src/useradd.c:243
 #, c-format
 msgid "%s: rebuild the group database\n"
 msgstr "%s: åðáíáêôßóôå ôçí âÜóç äåäïìÝíùí ïìÜäùí\n"
 
-#: src/useradd.c:251
+#: src/useradd.c:250
 #, c-format
 msgid "%s: rebuild the shadow group database\n"
 msgstr "%s: åðáíáêôßóôå ôçí âÜóç äåäïìÝíùí ôùí óêéùäþí óõíèçìáôéêþí ïìÜäùí\n"
 
-#: src/useradd.c:288 src/usermod.c:941
+#: src/useradd.c:287 src/usermod.c:940
 #, c-format
 msgid "%s: invalid numeric argument `%s'\n"
 msgstr "%s: Ìç Ýãêõñç áñéèìçôéêÞ ðáñÜìåôñïò `%s'\n"
 
-#: src/useradd.c:344
+#: src/useradd.c:343
 #, c-format
 msgid "%s: unknown gid %s\n"
 msgstr "%s: Üãíùóôï gid %s\n"
 
-#: src/useradd.c:351 src/useradd.c:643 src/useradd.c:1229 src/usermod.c:253
-#: src/usermod.c:1072
+#: src/useradd.c:350 src/useradd.c:642 src/useradd.c:1228 src/usermod.c:252
+#: src/usermod.c:1071
 #, c-format
 msgid "%s: unknown group %s\n"
 msgstr "%s: Üãíùóôç ïìÜäá %s\n"
 
-#: src/useradd.c:419
+#: src/useradd.c:418
 #, c-format
 msgid "group=%s,%ld  basedir=%s  skel=%s\n"
 msgstr "ïìÜäá=%s,%ld  âáóéêüò_êáôáë=%s  óêåë=%s\n"
 
-#: src/useradd.c:422
+#: src/useradd.c:421
 #, c-format
 msgid "shell=%s  "
 msgstr "öëïéüò=%s  "
 
-#: src/useradd.c:424
+#: src/useradd.c:423
 #, c-format
 msgid "inactive=%ld  expire=%s"
 msgstr "áíåíåñãü=%ld  ëÞîç=%s"
 
-#: src/useradd.c:428
+#: src/useradd.c:427
 #, c-format
 msgid "GROUP=%ld\n"
 msgstr "ÏÌÁÄÁ=%ld\n"
 
-#: src/useradd.c:429
+#: src/useradd.c:428
 #, c-format
 msgid "HOME=%s\n"
 msgstr "ÌÇÔÑÉÊÏÓ_ÊÁÔÁËÏÃÏÓ=%s\n"
 
-#: src/useradd.c:431
+#: src/useradd.c:430
 #, c-format
 msgid "INACTIVE=%ld\n"
 msgstr "ÁÍÅÍÅÑÃÏÓ=%ld\n"
 
-#: src/useradd.c:432
+#: src/useradd.c:431
 #, c-format
 msgid "EXPIRE=%s\n"
 msgstr "ËÇÎÇ=%s\n"
 
-#: src/useradd.c:434
+#: src/useradd.c:433
 #, c-format
 msgid "SHELL=%s\n"
 msgstr "ÊÅËÕÖÏÓ=%s\n"
 
-#: src/useradd.c:435
+#: src/useradd.c:434
 #, c-format
 msgid "SKEL=%s\n"
 msgstr "ÓÊÅË=%s\n"
 
-#: src/useradd.c:471
+#: src/useradd.c:470
 #, c-format
 msgid "%s: cannot create new defaults file\n"
 msgstr "%s: áäõíáìßá äçìéïõñãßáò íÝïõ áñ÷åßïõ ðñïêáèïñéóìÝíùí ñõèìßóåùí\n"
 
-#: src/useradd.c:565 src/useradd.c:576
+#: src/useradd.c:564 src/useradd.c:575
 #, c-format
 msgid "%s: rename: %s"
 msgstr "%s: ìåôïíïìáóßá: %s"
 
-#: src/useradd.c:663 src/usermod.c:273
+#: src/useradd.c:662 src/usermod.c:272
 #, c-format
 msgid "%s: group `%s' is a NIS group.\n"
 msgstr "%s: Ç ïìÜäá `%s' åßíáé NIS ïìÜäá.\n"
 
-#: src/useradd.c:671 src/usermod.c:281
+#: src/useradd.c:670 src/usermod.c:280
 #, c-format
 msgid "%s: too many groups specified (max %d).\n"
 msgstr "%s: Ðñïóäéïñßóôçêáí õðåñâïëéêÝò ïìÜäåò (ìåã. %d).\n"
 
-#: src/useradd.c:703 src/usermod.c:313
+#: src/useradd.c:702 src/usermod.c:312
 #, 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:706
+#: src/useradd.c:705
 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:709 src/usermod.c:319
+#: src/useradd.c:708 src/usermod.c:318
 msgid "[-f inactive] [-e expire ] "
 msgstr "[-f áíåíåñãü] [-e ëÞîç ] "
 
-#: src/useradd.c:712
+#: src/useradd.c:711
 msgid "[-A program] "
 msgstr "[-A ðñüãñáììá] "
 
-#: src/useradd.c:714 src/usermod.c:324
+#: src/useradd.c:713 src/usermod.c:323
 msgid "[-p passwd] name\n"
 msgstr "[-p óõíèçìáôéêü] üíïìá\n"
 
-#: src/useradd.c:716
+#: src/useradd.c:715
 #, c-format
 msgid "       %s\t-D [-g group] [-b base] [-s shell]\n"
 msgstr "       %s\t-D [-g ïìÜäá] [-b âÜóç] [-s öëïéüò]\n"
 
-#: src/useradd.c:719
+#: src/useradd.c:718
 msgid "\t\t[-f inactive] [-e expire ]\n"
 msgstr "\t\t[-f áíåíåñãü] [-e ëÞîç ]\n"
 
-#: src/useradd.c:816 src/usermod.c:446
+#: src/useradd.c:815 src/usermod.c:445
 #, c-format
 msgid "%s: error locking group file\n"
 msgstr "%s: ÓöÜëìá êáôÜ ôï êëåßäùìá ôïõ áñ÷åßïõ ïìÜäùí\n"
 
-#: src/useradd.c:820 src/usermod.c:451
+#: src/useradd.c:819 src/usermod.c:450
 #, c-format
 msgid "%s: error opening group file\n"
 msgstr "%s: ÓöÜëìá êáôÜ ôï Üíïéãìá ôïõ áñ÷åßïõ ïìÜäùí\n"
 
-#: src/useradd.c:825 src/usermod.c:558
+#: src/useradd.c:824 src/usermod.c:557
 #, c-format
 msgid "%s: error locking shadow group file\n"
 msgstr "%s: ÓöÜëìá êáôÜ ôï êëåßäùìá ôïõ áñ÷åßïõ óêéùäþí óõíèçìáôéêþí ïìÜäùí\n"
 
-#: src/useradd.c:830 src/usermod.c:564
+#: src/useradd.c:829 src/usermod.c:563
 #, c-format
 msgid "%s: error opening shadow group file\n"
 msgstr "%s: ÓöÜëìá êáôÜ ôï Üíïéãìá ôïõ áñ÷åßïõ óêéùäþí óõíèçìáôéêþí ïìÜäùí\n"
 
-#: src/useradd.c:1002
+#: src/useradd.c:1001
 #, c-format
 msgid "%s: uid %d is not unique\n"
 msgstr "%s: Ôï uid %d äåí åßíáé ìïíáäéêü\n"
 
-#: src/useradd.c:1032
+#: src/useradd.c:1031
 #, c-format
 msgid "%s: can't get unique uid\n"
 msgstr "%s: áäõíáìßá åõñåóçò ìïíáäéêïý uid\n"
 
-#: src/useradd.c:1140 src/useradd.c:1284 src/usermod.c:1020 src/usermod.c:1031
-#: src/usermod.c:1041 src/usermod.c:1087 src/usermod.c:1122
+#: src/useradd.c:1139 src/useradd.c:1283 src/usermod.c:1019 src/usermod.c:1030
+#: src/usermod.c:1040 src/usermod.c:1086 src/usermod.c:1121
 #, c-format
 msgid "%s: invalid field `%s'\n"
 msgstr "%s: Ìç Ýãêõñï ðåäßï `%s'\n"
 
-#: src/useradd.c:1154
+#: src/useradd.c:1153
 #, c-format
 msgid "%s: invalid base directory `%s'\n"
 msgstr "%s: Ìç Ýãêõñïò êáôÜëïãïò âÜóçò `%s'\n"
 
-#: src/useradd.c:1164
+#: src/useradd.c:1163
 #, c-format
 msgid "%s: invalid comment `%s'\n"
 msgstr "%s: Ìç Ýãêõñï ó÷üëéï `%s'\n"
 
-#: src/useradd.c:1174
+#: src/useradd.c:1173
 #, c-format
 msgid "%s: invalid home directory `%s'\n"
 msgstr "%s: Ìç Ýãêõñïò ìçôñéêüò êáôÜëïãïò ÷ñÞóôç `%s'\n"
 
-#: src/useradd.c:1192 src/usermod.c:1054
+#: src/useradd.c:1191 src/usermod.c:1053
 #, c-format
 msgid "%s: invalid date `%s'\n"
 msgstr "%s: Ìç Ýãêõñç çìåñïìçíßá `%s'\n"
 
-#: src/useradd.c:1204
+#: src/useradd.c:1203
 #, c-format
 msgid "%s: shadow passwords required for -e\n"
 msgstr "%s: óêéþäç óõíèçìáôéêÜ áðáéôïýíôáé ãéá ôï -e\n"
 
-#: src/useradd.c:1219
+#: src/useradd.c:1218
 #, c-format
 msgid "%s: shadow passwords required for -f\n"
 msgstr "%s: óêéþäç óõíèçìáôéêÜ áðáéôïýíôáé ãéá -f\n"
 
-#: src/useradd.c:1293
+#: src/useradd.c:1292
 #, c-format
 msgid "%s: invalid shell `%s'\n"
 msgstr "%s: Ìç Ýãêõñïò öëïéüò `%s'\n"
 
-#: src/useradd.c:1334
+#: src/useradd.c:1333
 #, c-format
 msgid "%s: invalid user name `%s'\n"
 msgstr "%s: Ìç Ýãêõñï üíïìá ÷ñÞóôç `%s'\n"
 
-#: src/useradd.c:1370 src/userdel.c:262 src/usermod.c:1184
+#: src/useradd.c:1369 src/userdel.c:292 src/usermod.c:1183
 #, c-format
 msgid "%s: cannot rewrite password file\n"
 msgstr "%s: áäõíáìßá åðáíåããñáöÞò ôïõ áñ÷åßïõ óõíèçìáôéêþí\n"
 
-#: src/useradd.c:1375 src/userdel.c:265 src/usermod.c:1189
+#: src/useradd.c:1374 src/userdel.c:295 src/usermod.c:1188
 #, c-format
 msgid "%s: cannot rewrite shadow password file\n"
 msgstr "%s: áäõíáìßá åðáíåããñáöÞò ôïõ áñ÷åßïõ óêéùäþí óõíèçìáôéêþí\n"
 
-#: src/useradd.c:1415 src/userdel.c:329 src/usermod.c:1224
+#: src/useradd.c:1414 src/userdel.c:359 src/usermod.c:1223
 #, c-format
 msgid "%s: unable to lock password file\n"
 msgstr "%s: Áäõíáìßá êëåéäþìáôïò ôïõ áñ÷åßïõ óõíèçìáôéêþí\n"
 
-#: src/useradd.c:1419 src/userdel.c:333 src/usermod.c:1228
+#: src/useradd.c:1418 src/userdel.c:363 src/usermod.c:1227
 #, c-format
 msgid "%s: unable to open password file\n"
 msgstr "%s: Áäõíáìßá áíïßãìáôïò ôïõ áñ÷åßïõ óõíèçìáôéêþí\n"
 
-#: src/useradd.c:1425 src/userdel.c:338 src/usermod.c:1233
+#: src/useradd.c:1424 src/userdel.c:368 src/usermod.c:1232
 #, c-format
 msgid "%s: cannot lock shadow password file\n"
 msgstr "%s: áäõíáìßá êëåéäþìáôïò ôïõ áñ÷åßïõ óêéùäþí óõíèçìáôéêþí\n"
 
-#: src/useradd.c:1431 src/userdel.c:343 src/usermod.c:1238
+#: src/useradd.c:1430 src/userdel.c:373 src/usermod.c:1237
 #, c-format
 msgid "%s: cannot open shadow password file\n"
 msgstr "%s: áäõíáìßá áíïßãìáôïò áñ÷åßïõ óêéùäþí óõíèçìáôéêþí\n"
 
-#: src/useradd.c:1530 src/usermod.c:1325
+#: src/useradd.c:1529 src/usermod.c:1324
 #, c-format
 msgid "%s: error adding authentication method\n"
 msgstr "%s: ÓöÜëìá êáôÜ ôçí ðñïóèÞêç ìåèüäïõ åîáêñßâùóçò\n"
 
-#: src/useradd.c:1553
+#: src/useradd.c:1552
 #, c-format
 msgid "%s: error adding new password entry\n"
 msgstr ""
 "%s: ÓöÜëìá êáôÜ ôçí ðñïóèÞêç íÝáò êáôá÷þñçóçò óôï áñ÷åßï óõíèçìáôéêþí\n"
 
-#: src/useradd.c:1568
+#: src/useradd.c:1567
 #, c-format
 msgid "%s: error updating password dbm entry\n"
 msgstr ""
 "%s: ÓöÜëìá êáôÜ ôçí áíáíÝùóç êáôá÷ùñÞóåùí óôï dbm áñ÷åßï óõíèçìáôéêþí\n"
 
-#: src/useradd.c:1584 src/usermod.c:1384
+#: src/useradd.c:1583 src/usermod.c:1383
 #, c-format
 msgid "%s: error adding new shadow password entry\n"
 msgstr ""
 "%s: ÓöÜëìá êáôÜ ôçí ðñïóèÞêç íÝáò êáôá÷þñçóçò óôï áñ÷åßï óêéùäþí "
 "óõíèçìáôéêþí\n"
 
-#: src/useradd.c:1600 src/usermod.c:1399
+#: src/useradd.c:1599 src/usermod.c:1398
 #, c-format
 msgid "%s: error updating shadow passwd dbm entry\n"
 msgstr ""
 "%s: ÓöÜëìá êáôÜ ôçí áíáíÝùóç êáôá÷ùñÞóåùí óôï dbm áñ÷åßï óêéùäþí "
 "óõíèçìáôéêþí\n"
 
-#: src/useradd.c:1632
+#: src/useradd.c:1631
 #, c-format
 msgid "%s: cannot create directory %s\n"
 msgstr "%s: áäõíáìßá äçìéïõñãßáò êáôáëüãïõ %s\n"
 
-#: src/useradd.c:1709 src/usermod.c:1162
+#: src/useradd.c:1708 src/usermod.c:1161
 #, c-format
 msgid "%s: user %s exists\n"
 msgstr "%s: Ï ÷ñÞóôçò %s õðÜñ÷åé\n"
 
-#: src/useradd.c:1739
+#: src/useradd.c:1738
 #, c-format
 msgid "%s: warning: CREATE_HOME not supported, please use -m instead.\n"
 msgstr ""
 
-#: src/userdel.c:128
+#: src/userdel.c:127
 #, c-format
 msgid "usage: %s [-r] name\n"
 msgstr "÷ñÞóç: %s [-r] üíïìá\n"
 
-#: src/userdel.c:175 src/userdel.c:230
+#: src/userdel.c:178 src/userdel.c:260
 #, c-format
 msgid "%s: error updating group entry\n"
 msgstr "%s: ÓöÜëìá êáôÜ ôçí áíáíÝùóç êáôá÷ùñÞóçò ïìÜäáò\n"
 
-#: src/userdel.c:185 src/userdel.c:239
+#: src/userdel.c:188 src/userdel.c:269
 #, c-format
 msgid "%s: cannot update dbm group entry\n"
 msgstr "%s: áäõíáìßá áíáíÝùóçò ôçò dbm êáôá÷þñçóçò óôï áñ÷åßï ïìÜäùí\n"
 
-#: src/userdel.c:270
+#: src/userdel.c:215
+#, fuzzy, c-format
+msgid "%s: cannot remove dbm group entry\n"
+msgstr "%s: áäõíáìßá áíáíÝùóçò ôçò dbm êáôá÷þñçóçò óôï áñ÷åßï ïìÜäùí\n"
+
+#: src/userdel.c:300
 #, c-format
 msgid "%s: cannot rewrite TCFS key file\n"
 msgstr "%s: áäõíáìßá åðáíåããñáöÞò ôïõ áñ÷åßïõ êëåéäéþí ôïõ TCFS\n"
 
-#: src/userdel.c:350
+#: src/userdel.c:380
 #, c-format
 msgid "%s: cannot lock TCFS key file\n"
 msgstr "%s: áäõíáìßá êëåéäþìáôïò ôïõ áñ÷åßïõ êëåéäéþí ôïõ TCFS\n"
 
-#: src/userdel.c:354
+#: src/userdel.c:384
 #, c-format
 msgid "%s: cannot open TCFS key file\n"
 msgstr "%s: áäõíáìßá áíïßãìáôïò ôïõ áñ÷åßïõ êëåéäéþí ôïõ TCFS\n"
 
-#: src/userdel.c:363
+#: src/userdel.c:393
 #, c-format
 msgid "%s: cannot open group file\n"
 msgstr "%s: áäõíáìßá áíïßãìáôïò áñ÷åßïõ ïìÜäùí\n"
 
-#: src/userdel.c:373
+#: src/userdel.c:403
 #, c-format
 msgid "%s: cannot open shadow group file\n"
 msgstr "%s: áäõíáìßá áíïßãìáôïò áñ÷åßïõ óêéùäþí óõíèçìáôéêþí ïìÜäùí\n"
 
-#: src/userdel.c:404 src/userdel.c:419
+#: src/userdel.c:434 src/userdel.c:449
 #, c-format
 msgid "%s: error deleting authentication\n"
 msgstr "%s: ÓöÜëìá êáôÜ ôçí äéáãñáöÞ åîáêñßâùóçò\n"
 
-#: src/userdel.c:428
+#: src/userdel.c:458
 #, c-format
 msgid "%s: error deleting password entry\n"
 msgstr "%s: ÓöÜëìá êáôÜ ôçí äéáãñáöÞ êáôá÷þñçóçò óôï áñ÷åßï óõíèçìáôéêþí\n"
 
-#: src/userdel.c:431
+#: src/userdel.c:461
 #, c-format
 msgid "%s: error deleting shadow password entry\n"
 msgstr ""
 "%s: ÓöÜëìá êáôÜ ôçí äéáãñáöÞ êáôá÷þñçóçò óôï áñ÷åßï óêéùäþí óõíèçìáôéêþí\n"
 
-#: src/userdel.c:440
+#: src/userdel.c:470
 #, c-format
 msgid "%s: error deleting TCFS entry\n"
 msgstr "%s: ÓöÜëìá êáôÜ ôçí äéáãñáöÞ êáôá÷þñçóçò ôïõ TCFS\n"
 
-#: src/userdel.c:453
+#: src/userdel.c:483
 #, c-format
 msgid "%s: error deleting password dbm entry\n"
 msgstr "%s: ÓöÜëìá êáôÜ ôçí äéáãñáöÞ êáôá÷þñçóçò óôï dbm áñ÷åßï óõíèçìáôéêþí\n"
 
-#: src/userdel.c:472
+#: src/userdel.c:502
 #, c-format
 msgid "%s: error deleting shadow passwd dbm entry\n"
 msgstr ""
 "%s: ÓöÜëìá êáôÜ ôçí äéáãñáöÞ êáôá÷þñçóçò óôï dbm áñ÷åßï óêéùäþí "
 "óõíèçìáôéêþí\n"
 
-#: src/userdel.c:513
+#: src/userdel.c:543
 #, c-format
 msgid "%s: user %s is currently logged in\n"
 msgstr "%s: Ï ÷ñÞóôçò %s âñßóêåôáé óôï óýóôçìá\n"
 
-#: src/userdel.c:630
+#: src/userdel.c:660
 #, c-format
 msgid "%s: warning: %s not owned by %s, not removing\n"
 msgstr "%s: ðñïåéäïðïßçóç: Ôï %s äåí áíÞêåé óôïí %s, äåí äéáãñÜöåôáé\n"
 
-#: src/userdel.c:636
+#: src/userdel.c:666
 #, c-format
 msgid "%s: warning: can't remove "
 msgstr "%s: ðñïåéäïðïßçóç: áäõíáìßá äéáãñáöÞò "
 
-#: src/userdel.c:711 src/usermod.c:968
+#: src/userdel.c:741 src/usermod.c:967
 #, c-format
 msgid "%s: user %s does not exist\n"
 msgstr "%s: Ï ÷ñÞóôçò %s äåí õðÜñ÷åé\n"
 
-#: src/userdel.c:725 src/usermod.c:984
+#: src/userdel.c:755 src/usermod.c:983
 #, c-format
 msgid "%s: user %s is a NIS user\n"
 msgstr "%s: Ï ÷ñÞóôçò %s åßíáé NIS ÷ñÞóôçò\n"
 
-#: src/userdel.c:762
+#: src/userdel.c:792
 #, c-format
 msgid "%s: %s not owned by %s, not removing\n"
 msgstr "%s: Ôï %s äåí áíÞêåé óôïí %s, äåí áöáéñåßôáé\n"
 
-#: src/userdel.c:785
+#: src/userdel.c:815
 #, c-format
 msgid "%s: not removing directory %s (would remove home of user %s)\n"
 msgstr ""
 "%s: Äåí äéáãñÜöåôáé ï êáôÜëïãïò %s (èá áöáéñïýóå ôïí ìçôñéêü êáôÜëïãï ôïõ "
 "÷ñÞóôç %s)\n"
 
-#: src/userdel.c:798
+#: src/userdel.c:828
 #, c-format
 msgid "%s: error removing directory %s\n"
 msgstr "%s: ÓöÜëìá êáôÜ ôçí äéáãñáöÞ ôïõ êáôáëüãïõ %s\n"
 
-#: src/usermod.c:316
+#: src/usermod.c:315
 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:322
+#: src/usermod.c:321
 msgid "[-A {DEFAULT|program},... ] "
 msgstr "[-A {DEFAULT|ðñüãñáììá},... ] "
 
-#: src/usermod.c:478
+#: src/usermod.c:477
 #, c-format
 msgid "%s: out of memory in update_group\n"
 msgstr "%s: äåí õðÜñ÷åé åëåýèåñç ìíÞìç óôï update_group\n"
 
-#: src/usermod.c:601
+#: src/usermod.c:600
 #, c-format
 msgid "%s: out of memory in update_gshadow\n"
 msgstr "%s:  óôï update_gshadow\n"
 
-#: src/usermod.c:1139
+#: src/usermod.c:1138
 #, c-format
 msgid "%s: no flags given\n"
 msgstr "%s: Äåí äüèçêáí åíäåßîåéò\n"
 
-#: src/usermod.c:1146
+#: src/usermod.c:1145
 #, c-format
 msgid "%s: shadow passwords required for -e and -f\n"
 msgstr "%s: óêéþäç óõíèçìáôéêÜ áðáéôïýíôáé ãéá ôï -e êáé -f\n"
 
-#: src/usermod.c:1167
+#: src/usermod.c:1166
 #, c-format
 msgid "%s: uid %ld is not unique\n"
 msgstr "%s: Ôï uid %ld äåí åßíáé ìïíáäéêü\n"
 
-#: src/usermod.c:1315
+#: src/usermod.c:1314
 #, c-format
 msgid "%s: error deleting authentication method\n"
 msgstr "%s: ÓöÜëìá êáôÜ ôçí äéáãñáöÞ ìåèüäïõ åîáêñßâùóçò\n"
 
-#: src/usermod.c:1335
+#: src/usermod.c:1334
 #, c-format
 msgid "%s: error changing authentication method\n"
 msgstr "%s: ÓöÜëìá êáôÜ ôçí áëëáãÞ ìåèüäïõ åîáêñßâùóçò\n"
 
-#: src/usermod.c:1352
+#: src/usermod.c:1351
 #, c-format
 msgid "%s: error changing password entry\n"
 msgstr "%s: ÓöÜëìá êáôÜ ôçí áëëáãÞ êáôá÷þñçóçò óõíèçìáôéêïý\n"
 
-#: src/usermod.c:1358
+#: src/usermod.c:1357
 #, c-format
 msgid "%s: error removing password entry\n"
 msgstr "%s: ÓöÜëìá êáôÜ ôçí áöáßñåóç êáôá÷þñçóçò óôï áñ÷åßï óõíèçìáôéêþí\n"
 
-#: src/usermod.c:1366
+#: src/usermod.c:1365
 #, c-format
 msgid "%s: error adding password dbm entry\n"
 msgstr ""
 "%s: ÓöÜëìá êáôÜ ôçí ðñïóèÞêç íÝáò êáôá÷þñçóçò óôï dbm áñ÷åßï óõíèçìáôéêþí\n"
 
-#: src/usermod.c:1373
+#: src/usermod.c:1372
 #, c-format
 msgid "%s: error removing passwd dbm entry\n"
 msgstr ""
 "%s: ÓöÜëìá êáôÜ ôçí áöáßñåóç êáôá÷þñçóçò áðü ôï dbm áñ÷åßï óõíèçìáôéêþí\n"
 
-#: src/usermod.c:1390
+#: src/usermod.c:1389
 #, c-format
 msgid "%s: error removing shadow password entry\n"
 msgstr ""
 "%s: ÓöÜëìá êáôÜ ôçí áöáßñåóç êáôá÷þñçóçò óôï áñ÷åßï óêéùäþí óõíèçìáôéêþí\n"
 
-#: src/usermod.c:1405
+#: src/usermod.c:1404
 #, c-format
 msgid "%s: error removing shadow passwd dbm entry\n"
 msgstr ""
 "%s: ÓöÜëìá êáôÜ ôçí áöáßñåóç êáôá÷þñçóçò óôï dbm áñ÷åßï óêéùäþí "
 "óõíèçìáôéêþí\n"
 
-#: src/usermod.c:1436
+#: src/usermod.c:1435
 #, c-format
 msgid "%s: directory %s exists\n"
 msgstr "%s: ï êáôÜëïãïò %s õðÜñ÷åé\n"
 
-#: src/usermod.c:1443
+#: src/usermod.c:1442
 #, c-format
 msgid "%s: can't create %s\n"
 msgstr "%s: áäõíáìßá äçìéïõñãßáò ôïõ %s\n"
 
-#: src/usermod.c:1449
+#: src/usermod.c:1448
 #, c-format
 msgid "%s: can't chown %s\n"
 msgstr "%s: Áäõíáìßá áëëáãÞò éäéïêôÞôç(chown) ôïõ %s\n"
 
-#: src/usermod.c:1465
+#: src/usermod.c:1464
 #, c-format
 msgid "%s: cannot rename directory %s to %s\n"
 msgstr "%s: áäõíáìßá ìåôïíïìáóßáò ôïõ êáôáëüãïõ %s óå %s\n"
 
 #. better leave it alone
-#: src/usermod.c:1562
+#: src/usermod.c:1561
 #, c-format
 msgid "%s: warning: %s not owned by %s\n"
 msgstr "%s: ðñïåéäïðïßçóç: Ôï %s äåí áíÞêåé óôïí %s\n"
 
-#: src/usermod.c:1568
+#: src/usermod.c:1567
 msgid "failed to change mailbox owner"
 msgstr "áðïôõ÷ßá áëëáãÞò ôïõ éäéïêôÞôç ôïõ ãñáììáôïêéâùôßïõ"
 
-#: src/usermod.c:1575
+#: src/usermod.c:1574
 msgid "failed to rename mailbox"
 msgstr "áðïôõ÷ßá ìåôïíïìáóßáò ãñáììáôïêéâùôßïõ"
 
-#: src/vipw.c:103
+#: src/vipw.c:102
 #, c-format
 msgid ""
 "\n"
@@ -2418,21 +2423,21 @@ msgstr ""
 "\n"
 "%s: Ôï %s äåí Üëëáîå\n"
 
-#: src/vipw.c:128
+#: src/vipw.c:127
 #, fuzzy
 msgid "Couldn't lock file"
 msgstr "%s: áäõíáìßá îåêëåéäþìáôïò áñ÷åßïõ\n"
 
-#: src/vipw.c:135
+#: src/vipw.c:134
 msgid "Couldn't make backup"
 msgstr ""
 
-#: src/vipw.c:174
+#: src/vipw.c:187
 #, c-format
 msgid "%s: can't restore %s: %s (your changes are in %s)\n"
 msgstr "%s: áäõíáìßá åðáíáöïñÜò %s: %s (ïé áëëáãÝò åßíáé óôï %s)\n"
 
-#: src/vipw.c:213
+#: src/vipw.c:226
 msgid ""
 "Usage:\n"
 "`vipw' edits /etc/passwd        `vipw -s' edits /etc/shadow\n"
index 77ad53b8aa7659440cc44340966f256d90dda1b0..bb3ab8e0f7a3bbc6d2d7e1a105e0cf82a7f5fe57 100644 (file)
Binary files a/po/fr.gmo and b/po/fr.gmo differ
index 773fcd167017aee30b9aa0ed33e8336c699e5ea5..3abfaabe0fee7032a547dc3c2a169ba792259b18 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: 1999-08-27 21:03+0200\n"
+"POT-Creation-Date: 2000-08-26 20:28+0200\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"
@@ -111,7 +111,7 @@ msgstr "Pas de courier."
 msgid "You have mail."
 msgstr "Vous avez du courier."
 
-#: libmisc/obscure.c:281 src/passwd.c:311
+#: libmisc/obscure.c:281 src/passwd.c:309
 #, c-format
 msgid "Bad password: %s.  "
 msgstr "Mauvais mot de passe: %s.  "
@@ -181,26 +181,26 @@ msgstr "
 msgid "Dialup Password: "
 msgstr "Mot de passe dialup : "
 
-#: lib/getdef.c:249
+#: lib/getdef.c:253
 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:303
+#: lib/getdef.c:307
 #, 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:390
+#: lib/getdef.c:394
 #, c-format
 msgid "error - lookup '%s' failed\n"
 msgstr "erreur - échec de la recherche de '%s'\n"
 
-#: lib/getdef.c:398
+#: lib/getdef.c:402
 #, 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:297
+#: lib/pwauth.c:54 src/newgrp.c:305
 msgid "Password: "
 msgstr "Mot de passe: "
 
@@ -346,82 +346,82 @@ msgstr "Mot de passe d
 msgid "Account Expires:\t"
 msgstr "Expiration du mot de passe :\t"
 
-#: src/chage.c:468
+#: src/chage.c:471
 #, 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:480 src/chage.c:592 src/login.c:529
+#: src/chage.c:483 src/chage.c:595 src/login.c:529
 #, c-format
 msgid "%s: permission denied\n"
 msgstr "%s : permission refusée\n"
 
-#: src/chage.c:492 src/chpasswd.c:122
+#: src/chage.c:495 src/chpasswd.c:120
 #, 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:498 src/chpasswd.c:126
+#: src/chage.c:501 src/chpasswd.c:124
 #, 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:505
+#: src/chage.c:508
 #, c-format
 msgid "%s: unknown user: %s\n"
 msgstr "%s: utilisateur inconnu: %s\n"
 
-#: src/chage.c:524
+#: src/chage.c:527
 #, c-format
 msgid "%s: can't lock shadow password file\n"
 msgstr "%s : impossible de vérouiller le fichier shadow password\n"
 
-#: src/chage.c:531
+#: src/chage.c:534
 #, c-format
 msgid "%s: can't open shadow password file\n"
 msgstr "%s : impossible d'ouvrir le fichier shadow password\n"
 
-#: src/chage.c:613
+#: src/chage.c:616
 #, c-format
 msgid "Changing the aging information for %s\n"
 msgstr "Changement des informations sur l'age pour %s\n"
 
-#: src/chage.c:615
+#: src/chage.c:618
 #, c-format
 msgid "%s: error changing fields\n"
 msgstr "%s : erreur lors du changement des champs\n"
 
-#: src/chage.c:642 src/chage.c:705 src/pwunconv.c:184
+#: src/chage.c:645 src/chage.c:708 src/pwunconv.c:183
 #, c-format
 msgid "%s: can't update password file\n"
 msgstr "%s : impossible de mettre à jour le fichier passwd\n"
 
-#: src/chage.c:672 src/pwunconv.c:179
+#: src/chage.c:675 src/pwunconv.c:178
 #, 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:721 src/chage.c:736 src/chfn.c:572 src/chsh.c:411
-#: src/passwd.c:827 src/passwd.c:928
+#: src/chage.c:724 src/chage.c:739 src/chfn.c:571 src/chsh.c:410
+#: src/passwd.c:825 src/passwd.c:926
 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:753
+#: src/chage.c:756
 #, 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:767
+#: src/chage.c:770
 #, c-format
 msgid "%s: can't rewrite password file\n"
 msgstr "%s : impossible de re-écrire le fichier password\n"
 
-#: src/chage.c:816
+#: src/chage.c:821
 #, c-format
 msgid "%s: no aging information present\n"
 msgstr "%s : aucune information sur l'age\n"
 
-#: src/chfn.c:108
+#: src/chfn.c:107
 #, c-format
 msgid ""
 "Usage: %s [ -f full_name ] [ -r room_no ] [ -w work_ph ]\n"
@@ -430,368 +430,368 @@ msgstr ""
 "Usage: %s [ -f nom_complet ] [ -r no_bureau ] [ -w tel_bureau ]\n"
 "\t[ -h tel_perso ] [ -o autre ] [ utilisateur ]\n"
 
-#: src/chfn.c:112
+#: 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:164 src/chsh.c:120
+#: src/chfn.c:163 src/chsh.c:119
 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/chfn.c:167
+#: src/chfn.c:166
 msgid "Full Name"
 msgstr "Nom complet"
 
-#: src/chfn.c:169
+#: src/chfn.c:168
 #, c-format
 msgid "\tFull Name: %s\n"
 msgstr "\tNom complet : %s\n"
 
-#: src/chfn.c:172
+#: src/chfn.c:171
 msgid "Room Number"
 msgstr "No de bureau"
 
-#: src/chfn.c:174
+#: src/chfn.c:173
 #, c-format
 msgid "\tRoom Number: %s\n"
 msgstr "\tNo de bureau : %s\n"
 
-#: src/chfn.c:177
+#: src/chfn.c:176
 msgid "Work Phone"
 msgstr "Téléphone travail"
 
-#: src/chfn.c:179
+#: src/chfn.c:178
 #, c-format
 msgid "\tWork Phone: %s\n"
 msgstr "\tTéléphone travail : %s\n"
 
-#: src/chfn.c:182
+#: src/chfn.c:181
 msgid "Home Phone"
 msgstr "Téléphone perso"
 
-#: src/chfn.c:184
+#: src/chfn.c:183
 #, c-format
 msgid "\tHome Phone: %s\n"
 msgstr "\tTéléphone perso : %s\n"
 
-#: src/chfn.c:187
+#: src/chfn.c:186
 msgid "Other"
 msgstr "Autre"
 
-#: src/chfn.c:300 src/chfn.c:308 src/chfn.c:316 src/chfn.c:324 src/chfn.c:332
-#: src/chfn.c:393 src/passwd.c:1228
+#: src/chfn.c:299 src/chfn.c:307 src/chfn.c:315 src/chfn.c:323 src/chfn.c:331
+#: src/chfn.c:392 src/passwd.c:1226
 #, c-format
 msgid "%s: Permission denied.\n"
 msgstr "%s: Permission refusée.\n"
 
-#: src/chfn.c:353 src/chsh.c:226 src/passwd.c:1279
+#: src/chfn.c:352 src/chsh.c:225 src/passwd.c:1277
 #, c-format
 msgid "%s: Unknown user %s\n"
 msgstr "%s: Utilisateur %s inconnu\n"
 
-#: src/chfn.c:359 src/chsh.c:234 src/passwd.c:1209
+#: src/chfn.c:358 src/chsh.c:233 src/passwd.c:1207
 #, c-format
 msgid "%s: Cannot determine your user name.\n"
 msgstr "%s: Impossible de déterminer votre nom d'utilisateur.\n"
 
-#: src/chfn.c:375 src/chsh.c:252
+#: src/chfn.c:374 src/chsh.c:251
 #, 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:380 src/chsh.c:259
+#: src/chfn.c:379 src/chsh.c:258
 #, 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:455
+#: src/chfn.c:454
 #, c-format
 msgid "Changing the user information for %s\n"
 msgstr "Changement de l'information utilisateur pour %s\n"
 
-#: src/chfn.c:464
+#: src/chfn.c:463
 #, c-format
 msgid "%s: invalid name: \"%s\"\n"
 msgstr "%s : nom non valide : \"%s\"\n"
 
-#: src/chfn.c:469
+#: src/chfn.c:468
 #, c-format
 msgid "%s: invalid room number: \"%s\"\n"
 msgstr "%s : no de bureau non valide : \"%s\"\n"
 
-#: src/chfn.c:474
+#: src/chfn.c:473
 #, c-format
 msgid "%s: invalid work phone: \"%s\"\n"
 msgstr "%s : téléphone du bureau non valide : \"%s\"\n"
 
-#: src/chfn.c:479
+#: src/chfn.c:478
 #, c-format
 msgid "%s: invalid home phone: \"%s\"\n"
 msgstr "%s : téléphone perso non valide : \"%s\"\n"
 
-#: src/chfn.c:484
+#: src/chfn.c:483
 #, c-format
 msgid "%s: \"%s\" contains illegal characters\n"
 msgstr "%s : \"%s\" contient des caractères non valide\n"
 
-#: src/chfn.c:496
+#: src/chfn.c:495
 #, c-format
 msgid "%s: fields too long\n"
 msgstr "%s: champs trop longs\n"
 
-#: src/chfn.c:511 src/chsh.c:349 src/gpasswd.c:583 src/passwd.c:1390
+#: src/chfn.c:510 src/chsh.c:348 src/gpasswd.c:582 src/passwd.c:1388
 msgid "Cannot change ID to root.\n"
 msgstr "Impossible de changer l'ID en root.\n"
 
-#: src/chfn.c:524 src/chsh.c:363 src/passwd.c:737 src/passwd.c:882
+#: src/chfn.c:523 src/chsh.c:362 src/passwd.c:735 src/passwd.c:880
 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:530 src/chsh.c:369 src/passwd.c:742 src/passwd.c:887
+#: src/chfn.c:529 src/chsh.c:368 src/passwd.c:740 src/passwd.c:885
 msgid "Cannot open the password file.\n"
 msgstr "Impossible d'ouvrir le fichier de mots de passe.\n"
 
-#: src/chfn.c:547 src/chsh.c:384 src/passwd.c:748 src/usermod.c:1272
+#: src/chfn.c:546 src/chsh.c:383 src/passwd.c:746 src/usermod.c:1271
 #, c-format
 msgid "%s: %s not found in /etc/passwd\n"
 msgstr "%s: %s non trouvé dans /etc/passwd\n"
 
-#: src/chfn.c:564 src/chsh.c:403 src/passwd.c:821 src/passwd.c:922
-#: src/passwd.c:962
+#: src/chfn.c:563 src/chsh.c:402 src/passwd.c:819 src/passwd.c:920
+#: src/passwd.c:960
 msgid "Error updating the password entry.\n"
 msgstr "Erreur durant la mise à jour du mot de passe.\n"
 
-#: src/chfn.c:587 src/chsh.c:426 src/passwd.c:834 src/passwd.c:935
+#: src/chfn.c:586 src/chsh.c:425 src/passwd.c:832 src/passwd.c:933
 msgid "Cannot commit password file changes.\n"
 msgstr "Impossible de valider le changement de mot de passe.\n"
 
-#: src/chfn.c:594 src/chsh.c:433
+#: src/chfn.c:593 src/chsh.c:432
 msgid "Cannot unlock the password file.\n"
 msgstr "Impossible de dévérouiller le fichier de mots de passe.\n"
 
-#: src/chpasswd.c:78
+#: src/chpasswd.c:76
 #, c-format
 msgid "usage: %s [-e]\n"
 msgstr "usage: %s [-e]\n"
 
-#: src/chpasswd.c:134 src/pwconv.c:105
+#: src/chpasswd.c:132 src/pwconv.c:104
 #, c-format
 msgid "%s: can't lock shadow file\n"
 msgstr "%s: impossible de vérouiller le fichier shadow\n"
 
-#: src/chpasswd.c:139 src/gpasswd.c:609 src/pwconv.c:110 src/pwunconv.c:119
-#: src/pwunconv.c:124
+#: src/chpasswd.c:137 src/gpasswd.c:608 src/pwconv.c:109 src/pwunconv.c:118
+#: src/pwunconv.c:123
 #, c-format
 msgid "%s: can't open shadow file\n"
 msgstr "%s: impossible d'ouvrir le fichier shadow\n"
 
-#: src/chpasswd.c:161 src/newusers.c:418
+#: src/chpasswd.c:159 src/newusers.c:415
 #, c-format
 msgid "%s: line %d: line too long\n"
 msgstr "%s: ligne %d: ligne trop longue\n"
 
-#: src/chpasswd.c:181
+#: src/chpasswd.c:179
 #, c-format
 msgid "%s: line %d: missing new password\n"
 msgstr "%s: ligne %d: nouveau mot de passe manquant\n"
 
-#: src/chpasswd.c:197
+#: src/chpasswd.c:195
 #, c-format
 msgid "%s: line %d: unknown user %s\n"
 msgstr "%s: ligne %d: utilisateur %s inconnu\n"
 
-#: src/chpasswd.c:249
+#: src/chpasswd.c:247
 #, 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:265 src/newusers.c:538
+#: src/chpasswd.c:263 src/newusers.c:535
 #, c-format
 msgid "%s: error detected, changes ignored\n"
 msgstr "%s: erreur détectée; changements ignorés\n"
 
-#: src/chpasswd.c:276
+#: src/chpasswd.c:274
 #, c-format
 msgid "%s: error updating shadow file\n"
 msgstr "%s: erreur lors de la mise à jour du fichier shadow\n"
 
-#: src/chpasswd.c:284
+#: src/chpasswd.c:282
 #, 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:106
+#: src/chsh.c:105
 #, c-format
 msgid "Usage: %s [ -s shell ] [ name ]\n"
 msgstr "Usage: %s [ -s shell ] [ nom ]\n"
 
-#: src/chsh.c:121
+#: src/chsh.c:120
 msgid "Login Shell"
 msgstr "Shell de login"
 
-#: src/chsh.c:275 src/chsh.c:288
+#: src/chsh.c:274 src/chsh.c:287
 #, 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:317
+#: src/chsh.c:316
 #, c-format
 msgid "Changing the login shell for %s\n"
 msgstr "Changement du shell de login pour %s\n"
 
-#: src/chsh.c:329
+#: src/chsh.c:328
 #, c-format
 msgid "%s: Invalid entry: %s\n"
 msgstr "%s: Entrée non valide : %s\n"
 
-#: src/chsh.c:334
+#: src/chsh.c:333
 #, c-format
 msgid "%s is an invalid shell.\n"
 msgstr "%s n'est pas un shell valide.\n"
 
-#: src/dpasswd.c:71
+#: src/dpasswd.c:69
 #, c-format
 msgid "Usage: %s [ -(a|d) ] shell\n"
 msgstr "Usage: %s [ -(a|d) ] shell\n"
 
-#: src/dpasswd.c:136
+#: src/dpasswd.c:134
 msgid "Shell password: "
 msgstr "Mot de passe shell : "
 
-#: src/dpasswd.c:142
+#: src/dpasswd.c:140
 msgid "re-enter Shell password: "
 msgstr "Confirmez le mot de passe shell : "
 
-#: src/dpasswd.c:149
+#: src/dpasswd.c:147
 #, 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:169
+#: src/dpasswd.c:167
 #, c-format
 msgid "%s: can't create %s"
 msgstr "%s: impossible de créer %s"
 
-#: src/dpasswd.c:174
+#: src/dpasswd.c:172
 #, c-format
 msgid "%s: can't open %s"
 msgstr "%s : impossible d'ouvrir %s"
 
-#: src/dpasswd.c:202
+#: src/dpasswd.c:200
 #, c-format
 msgid "%s: Shell %s not found.\n"
 msgstr "%s : Shell %s non trouvé.\n"
 
-#: src/expiry.c:85
+#: src/expiry.c:84
 msgid "Usage: expiry { -f | -c }\n"
 msgstr "Usage : expiry { -f | -c }\n"
 
-#: src/expiry.c:138
+#: src/expiry.c:137
 #, c-format
 msgid "%s: WARNING!  Must be set-UID root!\n"
 msgstr "%s: AVERTISSEMENT! Devrait être set-UID root!\n"
 
-#: src/expiry.c:149
+#: src/expiry.c:148
 #, c-format
 msgid "%s: unknown user\n"
 msgstr "%s : utilisateur inconnu\n"
 
-#: src/faillog.c:80
+#: src/faillog.c:79
 #, 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:135 src/lastlog.c:95
+#: src/faillog.c:134 src/lastlog.c:94
 #, c-format
 msgid "Unknown User: %s\n"
 msgstr "Utilisateur %s inconnu\n"
 
-#: src/faillog.c:216
+#: src/faillog.c:215
 msgid "Username   Failures  Maximum  Latest\n"
 msgstr "Utilisateur Échecs   Maximum  Dernier\n"
 
-#: src/faillog.c:233
+#: src/faillog.c:232
 #, c-format
 msgid "  %s on %s"
 msgstr "  %s sur %s"
 
-#: src/faillog.c:237
+#: src/faillog.c:236
 #, c-format
 msgid " [%lds left]"
 msgstr " [%lds restant]"
 
-#: src/faillog.c:240
+#: src/faillog.c:239
 #, c-format
 msgid " [%lds lock]"
 msgstr " [%lds verrou]"
 
-#: src/gpasswd.c:91
+#: src/gpasswd.c:89
 #, c-format
 msgid "usage: %s [-r|-R] group\n"
 msgstr "usage: %s [-r|-R] groupe\n"
 
-#: src/gpasswd.c:92
+#: src/gpasswd.c:90
 #, c-format
 msgid "       %s [-a user] group\n"
 msgstr "       %s [-a utilisateur] groupe\n"
 
-#: src/gpasswd.c:93
+#: src/gpasswd.c:91
 #, c-format
 msgid "       %s [-d user] group\n"
 msgstr "       %s [-d utilisateur] groupe\n"
 
-#: src/gpasswd.c:95
+#: src/gpasswd.c:93
 #, c-format
 msgid "       %s [-A user,...] [-M user,...] group\n"
 msgstr "       %s [-A utilisateur,...] [-M utilisateur,...] groupe\n"
 
-#: src/gpasswd.c:98
+#: src/gpasswd.c:96
 #, c-format
 msgid "       %s [-M user,...] group\n"
 msgstr "       %s [-M utilisateur,...] groupe\n"
 
-#: src/gpasswd.c:162 src/gpasswd.c:247
+#: src/gpasswd.c:160 src/gpasswd.c:245
 #, c-format
 msgid "%s: unknown user %s\n"
 msgstr "%s : utilisateur %s inconnu\n"
 
-#: src/gpasswd.c:174
+#: src/gpasswd.c:172
 msgid "Permission denied.\n"
 msgstr "Permission refusée.\n"
 
-#: src/gpasswd.c:259
+#: src/gpasswd.c:257
 #, 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:310
+#: src/gpasswd.c:308
 msgid "Who are you?\n"
 msgstr "Qui êtes vous?\n"
 
-#: src/gpasswd.c:330 src/newgrp.c:247
+#: src/gpasswd.c:328 src/newgrp.c:251
 #, c-format
 msgid "unknown group: %s\n"
 msgstr "groupe inconnu : %s\n"
 
-#: src/gpasswd.c:438
+#: src/gpasswd.c:436
 #, c-format
 msgid "Adding user %s to group %s\n"
 msgstr "Ajout de l'utilisateur %s au groupe %s\n"
 
-#: src/gpasswd.c:455
+#: src/gpasswd.c:453
 #, c-format
 msgid "Removing user %s from group %s\n"
 msgstr "Retrait de l'utilisateur %s du groupe %s\n"
 
-#: src/gpasswd.c:468
+#: src/gpasswd.c:466
 #, c-format
 msgid "%s: unknown member %s\n"
 msgstr "%s : membre %s inconnu\n"
 
-#: src/gpasswd.c:515
+#: src/gpasswd.c:513
 #, c-format
 msgid "%s: Not a tty\n"
 msgstr "%s : N'est pas un tty\n"
@@ -803,105 +803,105 @@ msgstr "%s : N'est pas un tty\n"
 #. * the old password since the invoker is either the group
 #. * owner, or root.
 #.
-#: src/gpasswd.c:537
+#: src/gpasswd.c:535
 #, c-format
 msgid "Changing the password for group %s\n"
 msgstr "Changement du mot de passe pour le group %s\n"
 
-#: src/gpasswd.c:540
+#: src/gpasswd.c:538
 msgid "New Password: "
 msgstr "Nouveau mot de passe : "
 
-#: src/gpasswd.c:545 src/passwd.c:424
+#: src/gpasswd.c:543 src/passwd.c:422
 msgid "Re-enter new password: "
 msgstr "Nouveau mot de passe (à nouveau) : "
 
-#: src/gpasswd.c:557
+#: src/gpasswd.c:555
 msgid "They don't match; try again"
 msgstr "Ils ne sont pas identiques; essayez à nouveau"
 
-#: src/gpasswd.c:561
+#: src/gpasswd.c:559
 #, c-format
 msgid "%s: Try again later\n"
 msgstr "%s: Essayez à nouveau plus tard\n"
 
-#: src/gpasswd.c:591
+#: src/gpasswd.c:590
 #, c-format
 msgid "%s: can't get lock\n"
 msgstr "%s : impossible d'obtenir le verrou\n"
 
-#: src/gpasswd.c:597
+#: src/gpasswd.c:596
 #, c-format
 msgid "%s: can't get shadow lock\n"
 msgstr "%s : impossible d'obtenir le verrou sur shadow\n"
 
-#: src/gpasswd.c:603
+#: src/gpasswd.c:602
 #, c-format
 msgid "%s: can't open file\n"
 msgstr "%s : impossible d'ouvrir le fichier\n"
 
-#: src/gpasswd.c:615
+#: src/gpasswd.c:614
 #, c-format
 msgid "%s: can't update entry\n"
 msgstr "%s : impossible de mettre à jour l'entrée\n"
 
-#: src/gpasswd.c:621
+#: src/gpasswd.c:620
 #, c-format
 msgid "%s: can't update shadow entry\n"
 msgstr "%s : impossible de mettre à jour l'entrée shadow\n"
 
-#: src/gpasswd.c:627
+#: src/gpasswd.c:626
 #, c-format
 msgid "%s: can't re-write file\n"
 msgstr "%s : impossible de re-écrire le fichier\n"
 
-#: src/gpasswd.c:633
+#: src/gpasswd.c:632
 #, c-format
 msgid "%s: can't re-write shadow file\n"
 msgstr "%s : impossible de re-écrire le fichier shadow\n"
 
-#: src/gpasswd.c:641
+#: src/gpasswd.c:640
 #, c-format
 msgid "%s: can't unlock file\n"
 msgstr "%s : impossible de dévérouiller le fichier\n"
 
-#: src/gpasswd.c:646
+#: src/gpasswd.c:645
 #, c-format
 msgid "%s: can't update DBM files\n"
 msgstr "%s : impossible de mettre à jours les fichiers DBM\n"
 
-#: src/gpasswd.c:653
+#: src/gpasswd.c:652
 #, 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:106
+#: src/groupadd.c:105
 msgid "usage: groupadd [-g gid [-o]] group\n"
 msgstr "usage: groupadd [-g gid [-o]] groupe\n"
 
-#: src/groupadd.c:174 src/groupadd.c:197 src/groupmod.c:184 src/groupmod.c:231
-#: src/useradd.c:932 src/usermod.c:513 src/usermod.c:649
+#: src/groupadd.c:173 src/groupadd.c:196 src/groupmod.c:183 src/groupmod.c:230
+#: src/useradd.c:931 src/usermod.c:512 src/usermod.c:648
 #, c-format
 msgid "%s: error adding new group entry\n"
 msgstr "%s : erreur durant l'addition du nouveau groupe\n"
 
-#: src/groupadd.c:184 src/groupadd.c:207 src/groupmod.c:200 src/useradd.c:943
-#: src/usermod.c:525 src/usermod.c:661
+#: src/groupadd.c:183 src/groupadd.c:206 src/groupmod.c:199 src/useradd.c:942
+#: src/usermod.c:524 src/usermod.c:660
 #, 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:259 src/useradd.c:997
+#: src/groupadd.c:258 src/useradd.c:996
 #, c-format
 msgid "%s: name %s is not unique\n"
 msgstr "%s : le nom %s n'est pas unique\n"
 
-#: src/groupadd.c:274
+#: src/groupadd.c:273
 #, c-format
 msgid "%s: gid %ld is not unique\n"
 msgstr "%s : le gid %ld n'est pas unique\n"
 
-#: src/groupadd.c:298
+#: src/groupadd.c:297
 #, c-format
 msgid "%s: can't get unique gid\n"
 msgstr "%s : impossible d'obtenir un gid unique\n"
@@ -909,78 +909,78 @@ msgstr "%s : impossible d'obtenir un gid unique\n"
 #.
 #. * All invalid group names land here.
 #.
-#: src/groupadd.c:322 src/groupmod.c:342
+#: src/groupadd.c:321 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:351 src/groupmod.c:368
+#: src/groupadd.c:350 src/groupmod.c:367
 #, c-format
 msgid "%s: invalid group %s\n"
 msgstr "%s : groupe %s non valide\n"
 
-#: src/groupadd.c:368 src/useradd.c:1273
+#: src/groupadd.c:367 src/useradd.c:1272
 #, c-format
 msgid "%s: -O requires NAME=VALUE\n"
 msgstr "%s : -O requiert NAME=VALEUR\n"
 
-#: src/groupadd.c:413 src/groupdel.c:168 src/groupmod.c:404 src/useradd.c:1382
-#: src/userdel.c:273 src/usermod.c:537
+#: src/groupadd.c:412 src/groupdel.c:167 src/groupmod.c:403 src/useradd.c:1381
+#: src/userdel.c:303 src/usermod.c:536
 #, c-format
 msgid "%s: cannot rewrite group file\n"
 msgstr "%s : impossible de re-écrire le fichier group\n"
 
-#: src/groupadd.c:419 src/groupdel.c:174 src/groupmod.c:410 src/useradd.c:1390
-#: src/userdel.c:279 src/usermod.c:674
+#: src/groupadd.c:418 src/groupdel.c:173 src/groupmod.c:409 src/useradd.c:1389
+#: src/userdel.c:309 src/usermod.c:673
 #, c-format
 msgid "%s: cannot rewrite shadow group file\n"
 msgstr "%s : impossible de re-écrire le fichier shadow group\n"
 
-#: src/groupadd.c:438 src/groupdel.c:193 src/groupmod.c:429 src/userdel.c:359
+#: src/groupadd.c:437 src/groupdel.c:192 src/groupmod.c:428 src/userdel.c:389
 #, c-format
 msgid "%s: unable to lock group file\n"
 msgstr "%s : impossible de vérouiller le fichier group\n"
 
-#: src/groupadd.c:442 src/groupdel.c:197 src/groupmod.c:433
+#: src/groupadd.c:441 src/groupdel.c:196 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:447 src/groupdel.c:202 src/groupmod.c:438 src/userdel.c:368
+#: src/groupadd.c:446 src/groupdel.c:201 src/groupmod.c:437 src/userdel.c:398
 #, c-format
 msgid "%s: unable to lock shadow group file\n"
 msgstr "%s : impossible de vérouiller le fichier group\n"
 
-#: src/groupadd.c:452 src/groupdel.c:207 src/groupmod.c:443
+#: src/groupadd.c:451 src/groupdel.c:206 src/groupmod.c:442
 #, c-format
 msgid "%s: unable to open shadow group file\n"
 msgstr "%s : impossible d'ouvrir le fichier shadow group\n"
 
-#: src/groupadd.c:519
+#: src/groupadd.c:518
 #, c-format
 msgid "%s: group %s exists\n"
 msgstr "%s : le groupe %s existe\n"
 
-#: src/groupdel.c:87
+#: src/groupdel.c:86
 msgid "usage: groupdel group\n"
 msgstr "usage: groupdel groupe\n"
 
-#: src/groupdel.c:105 src/groupmod.c:188 src/groupmod.c:235
+#: src/groupdel.c:104 src/groupmod.c:187 src/groupmod.c:234
 #, 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:117 src/groupmod.c:207
+#: src/groupdel.c:116 src/groupmod.c:206
 #, c-format
 msgid "%s: error removing group dbm entry\n"
 msgstr "%s : erreur lors du retrait de l'entrée dbm du groupe\n"
 
-#: src/groupdel.c:132
+#: src/groupdel.c:131
 #, c-format
 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:145 src/groupmod.c:253
+#: src/groupdel.c:144 src/groupmod.c:252
 #, 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"
@@ -988,76 +988,76 @@ msgstr "%s : erreur lors du retrait de l'entr
 #.
 #. * Can't remove the group.
 #.
-#: src/groupdel.c:249
+#: src/groupdel.c:248
 #, c-format
 msgid "%s: cannot remove user's primary group.\n"
 msgstr "%s : impossible d'enlever l'utilisateur de son groupe primaire.\n"
 
-#: src/groupdel.c:306 src/groupmod.c:502
+#: src/groupdel.c:305 src/groupmod.c:501
 #, c-format
 msgid "%s: group %s does not exist\n"
 msgstr "%s : le groupe %s n'existe pas\n"
 
-#: src/groupdel.c:320 src/groupmod.c:518
+#: src/groupdel.c:319 src/groupmod.c:517
 #, c-format
 msgid "%s: group %s is a NIS group\n"
 msgstr "%s : le groupe %s est un groupe NIS\n"
 
-#: src/groupdel.c:326 src/groupmod.c:524 src/userdel.c:731 src/usermod.c:990
+#: src/groupdel.c:325 src/groupmod.c:523 src/userdel.c:761 src/usermod.c:989
 #, c-format
 msgid "%s: %s is the NIS master\n"
 msgstr "%s : %s est le maître NIS\n"
 
-#: src/groupmod.c:106
+#: src/groupmod.c:105
 msgid "usage: groupmod [-g gid [-o]] [-n name] group\n"
 msgstr "usage : groupmod [-g gid [-o]] [-n nom] groupe\n"
 
-#: src/groupmod.c:166
+#: src/groupmod.c:165
 #, c-format
 msgid "%s: %s not found in /etc/group\n"
 msgstr "%s : %s non trouvé dans /etc/group\n"
 
-#: src/groupmod.c:247
+#: src/groupmod.c:246
 #, 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:300
+#: src/groupmod.c:299
 #, c-format
 msgid "%s: %ld is not a unique gid\n"
 msgstr "%s : %ld n'est pas un gid unique\n"
 
-#: src/groupmod.c:331
+#: 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:63
+#: src/groups.c:62
 #, c-format
 msgid "unknown user %s\n"
 msgstr "utilisateur %s inconnu\n"
 
-#: src/grpck.c:99
+#: src/grpck.c:98
 #, c-format
 msgid "Usage: %s [ -r ] [ group [ gshadow ] ]\n"
 msgstr "Usage : %s [ -r ] ] groupe [ gshadow ] ]\n"
 
-#: src/grpck.c:101
+#: src/grpck.c:100
 #, c-format
 msgid "Usage: %s [ -r ] [ group ]\n"
 msgstr "Usage: %s [ -r ] [ groupe ]\n"
 
-#: src/grpck.c:120 src/pwck.c:120
+#: src/grpck.c:119 src/pwck.c:119
 msgid "No"
 msgstr "Non"
 
-#: src/grpck.c:235 src/grpck.c:243 src/pwck.c:217 src/pwck.c:226
+#: src/grpck.c:234 src/grpck.c:242 src/pwck.c:216 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:258 src/grpck.c:266 src/mkpasswd.c:217 src/pwck.c:242
-#: src/pwck.c:251
+#: src/grpck.c:257 src/grpck.c:265 src/mkpasswd.c:216 src/pwck.c:241
+#: src/pwck.c:250
 #, c-format
 msgid "%s: cannot open file %s\n"
 msgstr "%s : impossible d'ouvrir le fichier %s\n"
@@ -1066,13 +1066,13 @@ msgstr "%s : impossible d'ouvrir le fichier %s\n"
 #. * Tell the user this entire line is bogus and
 #. * ask them to delete it.
 #.
-#: src/grpck.c:299
+#: src/grpck.c:298
 msgid "invalid group file entry\n"
 msgstr "entrée dans le fichier group non valide\n"
 
-#: src/grpck.c:300 src/grpck.c:363 src/grpck.c:455 src/grpck.c:518
-#: src/grpck.c:535 src/pwck.c:287 src/pwck.c:349 src/pwck.c:456 src/pwck.c:518
-#: src/pwck.c:542
+#: src/grpck.c:299 src/grpck.c:362 src/grpck.c:454 src/grpck.c:517
+#: src/grpck.c:534 src/pwck.c:286 src/pwck.c:348 src/pwck.c:455 src/pwck.c:517
+#: src/pwck.c:541
 #, c-format
 msgid "delete line `%s'? "
 msgstr "effacer la ligne `%s'? "
@@ -1081,26 +1081,26 @@ msgstr "effacer la ligne `%s'? "
 #. * Tell the user this entry is a duplicate of
 #. * another and ask them to delete it.
 #.
-#: src/grpck.c:362
+#: src/grpck.c:361
 msgid "duplicate group entry\n"
 msgstr "entrée de groupe dupliquée\n"
 
-#: src/grpck.c:379
+#: src/grpck.c:378
 #, c-format
 msgid "invalid group name `%s'\n"
 msgstr "nom de groupe `%s' non valide\n"
 
-#: src/grpck.c:389
+#: src/grpck.c:388
 #, c-format
 msgid "group %s: bad GID (%d)\n"
 msgstr "groupe %s : mauvais GID (%d)\n"
 
-#: src/grpck.c:415
+#: src/grpck.c:414
 #, c-format
 msgid "group %s: no user %s\n"
 msgstr "groupe %s : pas d'utilisateur %s\n"
 
-#: src/grpck.c:417 src/grpck.c:586
+#: src/grpck.c:416 src/grpck.c:585
 #, c-format
 msgid "delete member `%s'? "
 msgstr "effacer le membre `%s'? "
@@ -1109,7 +1109,7 @@ msgstr "effacer le membre `%s'? "
 #. * Tell the user this entire line is bogus and
 #. * ask them to delete it.
 #.
-#: src/grpck.c:454
+#: src/grpck.c:453
 msgid "invalid shadow group file entry\n"
 msgstr "entrée non valide dans le fichier shadow group\n"
 
@@ -1117,65 +1117,65 @@ msgstr "entr
 #. * Tell the user this entry is a duplicate of
 #. * another and ask them to delete it.
 #.
-#: src/grpck.c:517
+#: src/grpck.c:516
 msgid "duplicate shadow group entry\n"
 msgstr "entrée dupliquée dans le fichier shadow group\n"
 
-#: src/grpck.c:534
+#: src/grpck.c:533
 msgid "no matching group file entry\n"
 msgstr "aucune entrée dans le fichier group correspondante\n"
 
-#: src/grpck.c:554
+#: src/grpck.c:553
 #, c-format
 msgid "shadow group %s: no administrative user %s\n"
 msgstr "groupe shadow %s : aucun administrateur %s\n"
 
-#: src/grpck.c:556
+#: src/grpck.c:555
 #, c-format
 msgid "delete administrative member `%s'? "
 msgstr "effacer le membre administrateur `%s' ?"
 
-#: src/grpck.c:584
+#: src/grpck.c:583
 #, c-format
 msgid "shadow group %s: no user %s\n"
 msgstr "groupe shadow %s : aucun utilisateur %s\n"
 
-#: src/grpck.c:611 src/grpck.c:617 src/pwck.c:573 src/pwck.c:581
+#: src/grpck.c:610 src/grpck.c:616 src/pwck.c:572 src/pwck.c:580
 #, c-format
 msgid "%s: cannot update file %s\n"
 msgstr "%s : impossible de mettre à jour le fichier %s\n"
 
-#: src/grpck.c:641 src/pwck.c:607
+#: src/grpck.c:640 src/pwck.c:606
 #, 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:642 src/grpck.c:646 src/pwck.c:608 src/pwck.c:612
+#: src/grpck.c:641 src/grpck.c:645 src/pwck.c:607 src/pwck.c:611
 #, c-format
 msgid "%s: no changes\n"
 msgstr ""
 
-#: src/grpck.c:645 src/pwck.c:611
+#: src/grpck.c:644 src/pwck.c:610
 #, c-format
 msgid "%s: the files have been updated\n"
 msgstr ""
 
-#: src/grpconv.c:63 src/grpunconv.c:64
+#: src/grpconv.c:62 src/grpunconv.c:63
 #, c-format
 msgid "%s: can't lock group file\n"
 msgstr ""
 
-#: src/grpconv.c:68 src/grpunconv.c:69
+#: src/grpconv.c:67 src/grpunconv.c:68
 #, c-format
 msgid "%s: can't open group file\n"
 msgstr ""
 
-#: src/grpconv.c:73 src/grpunconv.c:74
+#: src/grpconv.c:72 src/grpunconv.c:73
 #, c-format
 msgid "%s: can't lock shadow group file\n"
 msgstr ""
 
-#: src/grpconv.c:78 src/grpunconv.c:79
+#: src/grpconv.c:77 src/grpunconv.c:78
 #, c-format
 msgid "%s: can't open shadow group file\n"
 msgstr ""
@@ -1183,85 +1183,85 @@ msgstr ""
 #.
 #. * This shouldn't happen (the entry exists) but...
 #.
-#: src/grpconv.c:94
+#: src/grpconv.c:93
 #, c-format
 msgid "%s: can't remove shadow group %s\n"
 msgstr ""
 
-#: src/grpconv.c:135 src/pwconv.c:161
+#: src/grpconv.c:134 src/pwconv.c:160
 #, c-format
 msgid "%s: can't update shadow entry for %s\n"
 msgstr ""
 
-#: src/grpconv.c:144 src/grpunconv.c:95
+#: src/grpconv.c:143 src/grpunconv.c:94
 #, c-format
 msgid "%s: can't update entry for group %s\n"
 msgstr ""
 
-#: src/grpconv.c:151 src/grpunconv.c:103
+#: src/grpconv.c:150 src/grpunconv.c:102
 #, c-format
 msgid "%s: can't update shadow group file\n"
 msgstr ""
 
-#: src/grpconv.c:155 src/grpunconv.c:108
+#: src/grpconv.c:154 src/grpunconv.c:107
 #, c-format
 msgid "%s: can't update group file\n"
 msgstr ""
 
-#: src/grpconv.c:170 src/grpunconv.c:129
+#: src/grpconv.c:169 src/grpunconv.c:128
 #, c-format
 msgid "%s: not configured for shadow group support.\n"
 msgstr ""
 
-#: src/grpunconv.c:113
+#: src/grpunconv.c:112
 #, c-format
 msgid "%s: can't delete shadow group file\n"
 msgstr ""
 
-#: src/id.c:57
+#: src/id.c:56
 msgid "usage: id [ -a ]\n"
 msgstr "Usage : id [ -a ]\n"
 
-#: src/id.c:59
+#: src/id.c:58
 msgid "usage: id\n"
 msgstr "Usage : id\n"
 
-#: src/id.c:119
+#: src/id.c:118
 #, c-format
 msgid "uid=%d(%s)"
 msgstr "uid=%d(%s)"
 
-#: src/id.c:121
+#: src/id.c:120
 #, c-format
 msgid "uid=%d"
 msgstr "uid=%d"
 
-#: src/id.c:125
+#: src/id.c:124
 #, c-format
 msgid " gid=%d(%s)"
 msgstr " gid=%d(%s)"
 
-#: src/id.c:127
+#: src/id.c:126
 #, c-format
 msgid " gid=%d"
 msgstr " gid=%d"
 
-#: src/id.c:137
+#: src/id.c:136
 #, c-format
 msgid " euid=%d(%s)"
 msgstr " euid=%d(%s)"
 
-#: src/id.c:139
+#: src/id.c:138
 #, c-format
 msgid " euid=%d"
 msgstr " euid=%d"
 
-#: src/id.c:144
+#: src/id.c:143
 #, c-format
 msgid " egid=%d(%s)"
 msgstr " egid=%d(%s)"
 
-#: src/id.c:146
+#: src/id.c:145
 #, c-format
 msgid " egid=%d"
 msgstr " egid=%d"
@@ -1274,42 +1274,42 @@ msgstr " egid=%d"
 #. * where "###" is a numerical value and "aaa" is the
 #. * corresponding name for each respective numerical value.
 #.
-#: src/id.c:167
+#: src/id.c:166
 msgid " groups="
 msgstr " groupes="
 
-#: src/lastlog.c:168
+#: src/lastlog.c:167
 msgid "Username         Port     From             Latest\n"
 msgstr "Utilisateur      Port     Venant de        Dernière\n"
 
-#: src/lastlog.c:170
+#: src/lastlog.c:169
 msgid "Username                Port     Latest\n"
 msgstr "Utilisateur             Port     Dernière\n"
 
-#: src/lastlog.c:184
+#: src/lastlog.c:183
 msgid "**Never logged in**"
 msgstr "**Jamais connecté**"
 
-#: src/login.c:199
+#: src/login.c:198
 #, c-format
 msgid "usage: %s [-p] [name]\n"
 msgstr "Usage : %s [-p] [nom]\n"
 
-#: src/login.c:202
+#: src/login.c:201
 #, c-format
 msgid "       %s [-p] [-h host] [-f name]\n"
 msgstr "       %s [-p] [-h hôte] [-f nom]\n"
 
-#: src/login.c:204
+#: src/login.c:203
 #, c-format
 msgid "       %s [-p] -r host\n"
 msgstr "       %s [-p] -r hôte\n"
 
-#: src/login.c:287
+#: src/login.c:286
 msgid "Invalid login time\n"
 msgstr "Heure de connexion non valide\n"
 
-#: src/login.c:342
+#: src/login.c:341
 msgid ""
 "\n"
 "System closed for routine maintenance\n"
@@ -1317,7 +1317,7 @@ msgstr ""
 "\n"
 "Système fermé pour maintenance\n"
 
-#: src/login.c:352
+#: src/login.c:351
 msgid ""
 "\n"
 "[Disconnect bypassed -- root login allowed.]\n"
@@ -1325,7 +1325,7 @@ msgstr ""
 "\n"
 "[Disconnexion court-circuitée -- login root authorisé.]\n"
 
-#: src/login.c:391
+#: src/login.c:390
 #, c-format
 msgid ""
 "\n"
@@ -1344,7 +1344,7 @@ msgstr " sur `%.100s' 
 msgid " on `%.100s'"
 msgstr " sur `%.100s'"
 
-#: src/login.c:807
+#: src/login.c:834
 #, c-format
 msgid ""
 "\n"
@@ -1353,34 +1353,34 @@ msgstr ""
 "\n"
 "% login: "
 
-#: src/login.c:809
+#: src/login.c:836
 msgid "login: "
 msgstr "login: "
 
-#: src/login.c:991 src/sulogin.c:233
+#: src/login.c:1026 src/sulogin.c:231
 msgid "Login incorrect"
 msgstr "Login incorrect"
 
-#: src/login.c:1163
+#: src/login.c:1213
 msgid "Warning: login re-enabled after temporary lockout.\n"
 msgstr "Avertissement: login réactivé après une désactivation temporaire.\n"
 
-#: src/login.c:1173
+#: src/login.c:1223
 #, c-format
 msgid "Last login: %s on %s"
 msgstr "Dernière connexion : le %s sur %s"
 
-#: src/login.c:1176
+#: src/login.c:1226
 #, c-format
 msgid "Last login: %.19s on %s"
 msgstr "Dernière connexion : le %.19s sur %s"
 
-#: src/login.c:1181
+#: src/login.c:1231
 #, c-format
 msgid " from %.*s"
 msgstr " à partir de %.*s"
 
-#: src/login.c:1246
+#: src/login.c:1303
 msgid "Starting rad_login\n"
 msgstr "Démarrage de rad_login\n"
 
@@ -1389,192 +1389,192 @@ msgstr "D
 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:246 src/mkpasswd.c:250
+#: src/mkpasswd.c:245 src/mkpasswd.c:249
 #, c-format
 msgid "%s: cannot overwrite file %s\n"
 msgstr "%s : impossible d'écraser le fichier %s\n"
 
-#: src/mkpasswd.c:264
+#: src/mkpasswd.c:263
 #, 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:297
+#: src/mkpasswd.c:296
 #, c-format
 msgid "%s: the beginning with "
 msgstr ""
 
-#: src/mkpasswd.c:322
+#: src/mkpasswd.c:321
 #, c-format
 msgid "%s: error parsing line \"%s\"\n"
 msgstr "%s : erreur lors l'analyse de la ligne \"%s\"\n"
 
-#: src/mkpasswd.c:327 src/mkpasswd.c:329 src/mkpasswd.c:331 src/mkpasswd.c:333
+#: src/mkpasswd.c:326 src/mkpasswd.c:328 src/mkpasswd.c:330 src/mkpasswd.c:332
 msgid "adding record for name "
 msgstr ""
 
-#: src/mkpasswd.c:337 src/mkpasswd.c:342 src/mkpasswd.c:346 src/mkpasswd.c:350
+#: src/mkpasswd.c:336 src/mkpasswd.c:341 src/mkpasswd.c:345 src/mkpasswd.c:349
 #, c-format
 msgid "%s: error adding record for "
 msgstr ""
 
-#: src/mkpasswd.c:368
+#: src/mkpasswd.c:367
 #, c-format
 msgid "added %d entries, longest was %d\n"
 msgstr "%d entrées ajoutées, la plus longue fut %d\n"
 
-#: src/mkpasswd.c:383
+#: 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:385
+#: 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:388
+#: src/mkpasswd.c:387
 #, c-format
 msgid "Usage: %s [ -vf ] [ -p|g ] file\n"
 msgstr "Usage : %s [ -vf ] [ -p|g ] fichier\n"
 
-#: src/newgrp.c:67
+#: src/newgrp.c:66
 msgid "usage: newgrp [ - ] [ group ]\n"
 msgstr "Usage : newgrp [ - ] [ groupe ]\n"
 
-#: src/newgrp.c:69
+#: src/newgrp.c:68
 #, fuzzy
 msgid "usage: sg group [[-c] command ]\n"
 msgstr "Usage : sg groupe [ commande ]\n"
 
-#: src/newgrp.c:122
+#: src/newgrp.c:125
 #, c-format
 msgid "unknown uid: %d\n"
 msgstr "uid inconnue : %d\n"
 
-#: src/newgrp.c:198
+#: src/newgrp.c:201
 #, c-format
 msgid "unknown gid: %ld\n"
 msgstr "gid inconnu : %ld\n"
 
-#: src/newgrp.c:242
+#: src/newgrp.c:245
 #, c-format
 msgid "unknown gid: %d\n"
 msgstr "gid inconnu : %d\n"
 
-#: src/newgrp.c:315 src/newgrp.c:324
+#: src/newgrp.c:323 src/newgrp.c:332
 msgid "Sorry.\n"
 msgstr "Désolé ;-)\n"
 
-#: src/newgrp.c:356
+#: src/newgrp.c:364
 msgid "too many groups\n"
 msgstr "trop de groupes\n"
 
-#: src/newusers.c:79
+#: src/newusers.c:76
 #, c-format
 msgid "Usage: %s [ input ]\n"
 msgstr "Usage : %s [ entrée ] \n"
 
-#: src/newusers.c:367
+#: src/newusers.c:364
 #, c-format
 msgid "%s: can't lock /etc/passwd.\n"
 msgstr "%s : impossible de vérouiller /etc/passwd.\n"
 
-#: src/newusers.c:378
+#: src/newusers.c:375
 #, 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:393
+#: src/newusers.c:390
 #, c-format
 msgid "%s: can't open files\n"
 msgstr "%s : impossible d'ouvrir les fichiers\n"
 
-#: src/newusers.c:438
+#: src/newusers.c:435
 #, c-format
 msgid "%s: line %d: invalid line\n"
 msgstr "%s : ligne %d : ligne non valide\n"
 
-#: src/newusers.c:456
+#: src/newusers.c:453
 #, 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:472
+#: src/newusers.c:469
 #, 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:484
+#: src/newusers.c:481
 #, 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:492
+#: src/newusers.c:489
 #, 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:509
+#: src/newusers.c:506
 #, c-format
 msgid "%s: line %d: mkdir failed\n"
 msgstr "%s : ligne %d : échec de mkdir\n"
 
-#: src/newusers.c:513
+#: src/newusers.c:510
 #, c-format
 msgid "%s: line %d: chown failed\n"
 msgstr "%s : ligne %d : échec de chown\n"
 
-#: src/newusers.c:522
+#: src/newusers.c:519
 #, 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:553
+#: src/newusers.c:550
 #, c-format
 msgid "%s: error updating files\n"
 msgstr "%s : erreur lors de la mise à jour des fichiers\n"
 
-#: src/passwd.c:241
+#: src/passwd.c:239
 #, c-format
 msgid "usage: %s [ -f | -s ] [ name ]\n"
 msgstr "Usage : %s [ -f | -s ] [ nom ]\n"
 
-#: src/passwd.c:244
+#: 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:247
+#: src/passwd.c:245
 #, c-format
 msgid "       %s { -l | -u | -d | -S | -e } name\n"
 msgstr "       %s { -l | -u | -d | -S | -e } nom\n"
 
-#: src/passwd.c:349
+#: src/passwd.c:347
 #, 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:350
+#: src/passwd.c:348
 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:356
+#: src/passwd.c:354
 msgid "Old password: "
 msgstr "Ancien mot de passe : "
 
-#: src/passwd.c:363
+#: src/passwd.c:361
 #, c-format
 msgid "Incorrect password for `%s'\n"
 msgstr "Mot de passe incorrect pour `%s'\n"
 
-#: src/passwd.c:376
+#: src/passwd.c:374
 #, c-format
 msgid "Warning: user %s has a TCFS key.\n"
 msgstr "Avertissement : l'utilisateur %s a une clé TCFS.\n"
 
-#: src/passwd.c:394
+#: src/passwd.c:392
 #, c-format
 msgid ""
 "Enter the new password (minimum of %d, maximum of %d characters)\n"
@@ -1584,15 +1584,15 @@ msgstr ""
 "caractères). Utilisez une combinaison de lettres en majuscule/minuscule\n"
 "et de nombres.\n"
 
-#: src/passwd.c:401
+#: src/passwd.c:399
 msgid "New password: "
 msgstr "Nouveau mot de passe : "
 
-#: src/passwd.c:411
+#: src/passwd.c:409
 msgid "Try again.\n"
 msgstr "Essaye encore...\n"
 
-#: src/passwd.c:420
+#: src/passwd.c:418
 msgid ""
 "\n"
 "Warning: weak password (enter it again to use it anyway).\n"
@@ -1601,83 +1601,83 @@ msgstr ""
 "Avertissement : mot de passe simpliste (tapez le à nouveau pour l'utiliser\n"
 "quand même).\n"
 
-#: src/passwd.c:429
+#: src/passwd.c:427
 msgid "They don't match; try again.\n"
 msgstr "Ils ne sont pas identique; essaye encore...\n"
 
-#: src/passwd.c:514 src/passwd.c:530
+#: src/passwd.c:512 src/passwd.c:528
 #, 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:558
+#: src/passwd.c:556
 #, 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:695
+#: src/passwd.c:693
 #, c-format
 msgid "%s: out of memory\n"
 msgstr "%s : plus de mémoire\n"
 
-#: src/passwd.c:847
+#: src/passwd.c:845
 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:853
+#: src/passwd.c:851
 msgid "Cannot open the TCFS key database.\n"
 msgstr "Impossible d'ouvrir la base de clés TCFS.\n"
 
-#: src/passwd.c:859
+#: src/passwd.c:857
 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:864
+#: src/passwd.c:862
 msgid "Cannot commit TCFS changes.\n"
 msgstr "Impossible de valider les changements TCFS.\n"
 
-#: src/passwd.c:1071
+#: src/passwd.c:1069
 #, c-format
 msgid "%s: Cannot execute %s"
 msgstr "%s : Impossible d'exécuter %s"
 
-#: src/passwd.c:1178
+#: src/passwd.c:1176
 #, c-format
 msgid "%s: repository %s not supported\n"
 msgstr ""
 
-#: src/passwd.c:1265
+#: src/passwd.c:1263
 #, c-format
 msgid "%s: Permission denied\n"
 msgstr "%s : Permission refusée\n"
 
-#: src/passwd.c:1289
+#: src/passwd.c:1287
 #, 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:1354
+#: src/passwd.c:1352
 #, c-format
 msgid "Changing password for %s\n"
 msgstr "Changement du mot de passe de %s\n"
 
-#: src/passwd.c:1358
+#: src/passwd.c:1356
 #, c-format
 msgid "The password for %s is unchanged.\n"
 msgstr "Le mot de passe pour %s est inchangé.\n"
 
-#: src/passwd.c:1414
+#: src/passwd.c:1412
 msgid "Password changed.\n"
 msgstr "Mot de passe changé.\n"
 
-#: src/pwck.c:99
+#: src/pwck.c:98
 #, c-format
 msgid "Usage: %s [ -qr ] [ passwd [ shadow ] ]\n"
 msgstr "Usage : %s [ -qr ] [ passwd [ shadow ] ]\n"
 
-#: src/pwck.c:101
+#: src/pwck.c:100
 #, c-format
 msgid "Usage: %s [ -qr ] [ passwd ]\n"
 msgstr "Usage : %s [ -qr ] [ passwd ]\n"
@@ -1686,7 +1686,7 @@ msgstr "Usage : %s [ -qr ] [ passwd ]\n"
 #. * Tell the user this entire line is bogus and
 #. * ask them to delete it.
 #.
-#: src/pwck.c:286
+#: src/pwck.c:285
 msgid "invalid password file entry\n"
 msgstr "entrée non valide dans le fichier password\n"
 
@@ -1694,16 +1694,16 @@ msgstr "entr
 #. * Tell the user this entry is a duplicate of
 #. * another and ask them to delete it.
 #.
-#: src/pwck.c:348
+#: src/pwck.c:347
 msgid "duplicate password entry\n"
 msgstr "entrée dupliquée dans password\n"
 
-#: src/pwck.c:364
+#: src/pwck.c:363
 #, c-format
 msgid "invalid user name `%s'\n"
 msgstr "nom d'utilisateur `%s' non valide\n"
 
-#: src/pwck.c:374
+#: src/pwck.c:373
 #, c-format
 msgid "user %s: bad UID (%d)\n"
 msgstr "utilisateur %s : mauvais UID (%d)\n"
@@ -1711,7 +1711,7 @@ msgstr "utilisateur %s : mauvais UID (%d)\n"
 #.
 #. * No primary group, just give a warning
 #.
-#: src/pwck.c:389
+#: src/pwck.c:388
 #, c-format
 msgid "user %s: no group %d\n"
 msgstr "utilisateur %s : aucun groupe %d\n"
@@ -1719,7 +1719,7 @@ msgstr "utilisateur %s : aucun groupe %d\n"
 #.
 #. * Home directory doesn't exist, give a warning
 #.
-#: src/pwck.c:404
+#: src/pwck.c:403
 #, c-format
 msgid "user %s: directory %s does not exist\n"
 msgstr "utilisateur %s : le répertoire %s n'existe pas\n"
@@ -1727,7 +1727,7 @@ msgstr "utilisateur %s : le r
 #.
 #. * Login shell doesn't exist, give a warning
 #.
-#: src/pwck.c:419
+#: src/pwck.c:418
 #, c-format
 msgid "user %s: program %s does not exist\n"
 msgstr "utilisateur %s : le programme %s n'existe pas\n"
@@ -1736,7 +1736,7 @@ msgstr "utilisateur %s : le programme %s n'existe pas\n"
 #. * Tell the user this entire line is bogus and
 #. * ask them to delete it.
 #.
-#: src/pwck.c:455
+#: src/pwck.c:454
 msgid "invalid shadow password file entry\n"
 msgstr "entrée shadow password non valide\n"
 
@@ -1744,7 +1744,7 @@ msgstr "entr
 #. * Tell the user this entry is a duplicate of
 #. * another and ask them to delete it.
 #.
-#: src/pwck.c:517
+#: src/pwck.c:516
 msgid "duplicate shadow password entry\n"
 msgstr "entrée shadow password dupliquée\n"
 
@@ -1752,42 +1752,42 @@ msgstr "entr
 #. * Tell the user this entry has no matching
 #. * /etc/passwd entry and ask them to delete it.
 #.
-#: src/pwck.c:541
+#: src/pwck.c:540
 msgid "no matching password file entry\n"
 msgstr "aucune entrée correspondante dans le fichier password\n"
 
-#: src/pwck.c:558
+#: src/pwck.c:557
 #, 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:95 src/pwunconv.c:109
+#: src/pwconv.c:94 src/pwunconv.c:108
 #, c-format
 msgid "%s: can't lock passwd file\n"
 msgstr "%s : impossible de vérouiller le fichier passwd\n"
 
-#: src/pwconv.c:100 src/pwunconv.c:114
+#: src/pwconv.c:99 src/pwunconv.c:113
 #, c-format
 msgid "%s: can't open passwd file\n"
 msgstr "%s : impossible d'ouvrir le fichier passwd\n"
 
-#: src/pwconv.c:127
+#: src/pwconv.c:126
 #, 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:170
+#: src/pwconv.c:169
 #, 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:177
+#: src/pwconv.c:176
 #, c-format
 msgid "%s: can't update shadow file\n"
 msgstr "%s : impossible de mettre à jour le fichier shadow\n"
 
-#: src/pwconv.c:181
+#: src/pwconv.c:180
 #, c-format
 msgid "%s: can't update passwd file\n"
 msgstr "%s : impossible de mettre à jour le fichier passwd\n"
@@ -1797,52 +1797,52 @@ msgstr "%s : impossible de mettre 
 msgid "%s: Shadow passwords are not configured.\n"
 msgstr "%s : Les mots de passe shadow ne sont pas configurés.\n"
 
-#: src/pwunconv.c:172
+#: src/pwunconv.c:171
 #, 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:189
+#: src/pwunconv.c:188
 #, c-format
 msgid "%s: can't delete shadow password file\n"
 msgstr "%s : impossible d'effacer le fichier shadow\n"
 
-#: src/su.c:145
+#: src/su.c:140
 msgid "Sorry."
 msgstr "Désolé ;-)"
 
-#: src/su.c:227
+#: src/su.c:222
 #, c-format
 msgid "%s: must be run from a terminal\n"
 msgstr "%s : doit être lancé à partir d'un terminal\n"
 
-#: src/su.c:319
+#: src/su.c:311
 #, c-format
 msgid "%s: pam_start: error %d\n"
 msgstr "%s : pam_start : erreur %d\n"
 
-#: src/su.c:345
+#: src/su.c:337
 #, c-format
 msgid "Unknown id: %s\n"
 msgstr "ID inconnue : %s\n"
 
 #. access denied (-1) or unexpected value
-#: src/su.c:380 src/su.c:395
+#: src/su.c:372 src/su.c:387
 #, 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:391
+#: src/su.c:383
 msgid "(Enter your own password.)"
 msgstr "(Entrez votre propre mot de passe.)"
 
-#: src/su.c:412
+#: src/su.c:404
 #, c-format
 msgid "%s: permission denied (shell).\n"
 msgstr "%s : permission refusée (shell).\n"
 
-#: src/su.c:436
+#: src/su.c:428
 #, c-format
 msgid ""
 "%s: %s\n"
@@ -1851,19 +1851,19 @@ msgstr ""
 "%s: %s\n"
 "(Ignoré)\n"
 
-#: src/su.c:605
+#: src/su.c:628
 msgid "No shell\n"
 msgstr "Pas de shell\n"
 
 #. must be a password file!
-#: src/sulogin.c:138
+#: src/sulogin.c:136
 msgid "No password file\n"
 msgstr "Pas de fichier de mot de passe\n"
 
 #.
 #. * Fail secure
 #.
-#: src/sulogin.c:180
+#: src/sulogin.c:178
 msgid "No password entry for 'root'\n"
 msgstr "Pas d'entrée pour le mot de passe de 'root'\n"
 
@@ -1872,7 +1872,7 @@ msgstr "Pas d'entr
 #. * given we just exit.
 #.
 #. get a password for root
-#: src/sulogin.c:194
+#: src/sulogin.c:192
 msgid ""
 "\n"
 "Type control-d to proceed with normal startup,\n"
@@ -1883,498 +1883,503 @@ msgstr ""
 "(ou donnez le mot de passe de root pour la maintenance) : "
 
 #. make new environment active
-#: src/sulogin.c:243
+#: src/sulogin.c:241
 msgid "Entering System Maintenance Mode\n"
 msgstr "Entrée du système en mode maintenance\n"
 
-#: src/useradd.c:244
+#: src/useradd.c:243
 #, c-format
 msgid "%s: rebuild the group database\n"
 msgstr "%s : reconstruction de la base de données des groupes\n"
 
-#: src/useradd.c:251
+#: src/useradd.c:250
 #, 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:288 src/usermod.c:941
+#: src/useradd.c:287 src/usermod.c:940
 #, c-format
 msgid "%s: invalid numeric argument `%s'\n"
 msgstr "%s : argument numérique `%s' non valide\n"
 
-#: src/useradd.c:344
+#: src/useradd.c:343
 #, c-format
 msgid "%s: unknown gid %s\n"
 msgstr "%s : gid %s inconnu\n"
 
-#: src/useradd.c:351 src/useradd.c:643 src/useradd.c:1229 src/usermod.c:253
-#: src/usermod.c:1072
+#: src/useradd.c:350 src/useradd.c:642 src/useradd.c:1228 src/usermod.c:252
+#: src/usermod.c:1071
 #, c-format
 msgid "%s: unknown group %s\n"
 msgstr "%s : groupe %s inconnu\n"
 
-#: src/useradd.c:419
+#: src/useradd.c:418
 #, c-format
 msgid "group=%s,%ld  basedir=%s  skel=%s\n"
 msgstr "group=%s,%ld  rép_base=%s  skel=%s\n"
 
-#: src/useradd.c:422
+#: src/useradd.c:421
 #, c-format
 msgid "shell=%s  "
 msgstr "shell=%s  "
 
-#: src/useradd.c:424
+#: src/useradd.c:423
 #, c-format
 msgid "inactive=%ld  expire=%s"
 msgstr "inactif=%ld  expire=%s"
 
-#: src/useradd.c:428
+#: src/useradd.c:427
 #, c-format
 msgid "GROUP=%ld\n"
 msgstr "GROUP=%ld\n"
 
-#: src/useradd.c:429
+#: src/useradd.c:428
 #, c-format
 msgid "HOME=%s\n"
 msgstr "HOME=%s\n"
 
-#: src/useradd.c:431
+#: src/useradd.c:430
 #, c-format
 msgid "INACTIVE=%ld\n"
 msgstr "INACTIVE=%ld\n"
 
-#: src/useradd.c:432
+#: src/useradd.c:431
 #, c-format
 msgid "EXPIRE=%s\n"
 msgstr "EXPIRE=%s\n"
 
-#: src/useradd.c:434
+#: src/useradd.c:433
 #, c-format
 msgid "SHELL=%s\n"
 msgstr "SHELL=%s\n"
 
-#: src/useradd.c:435
+#: src/useradd.c:434
 #, c-format
 msgid "SKEL=%s\n"
 msgstr "SKEL=%s\n"
 
-#: src/useradd.c:471
+#: src/useradd.c:470
 #, 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:565 src/useradd.c:576
+#: src/useradd.c:564 src/useradd.c:575
 #, c-format
 msgid "%s: rename: %s"
 msgstr "%s : rename : %s"
 
-#: src/useradd.c:663 src/usermod.c:273
+#: src/useradd.c:662 src/usermod.c:272
 #, c-format
 msgid "%s: group `%s' is a NIS group.\n"
 msgstr "%s : le groupe `%s' est un groupe NIS.\n"
 
-#: src/useradd.c:671 src/usermod.c:281
+#: src/useradd.c:670 src/usermod.c:280
 #, 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:703 src/usermod.c:313
+#: src/useradd.c:702 src/usermod.c:312
 #, 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:706
+#: src/useradd.c:705
 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:709 src/usermod.c:319
+#: src/useradd.c:708 src/usermod.c:318
 msgid "[-f inactive] [-e expire ] "
 msgstr "[-f inactif] [-e expire ] "
 
-#: src/useradd.c:712
+#: src/useradd.c:711
 msgid "[-A program] "
 msgstr "[-A program] "
 
-#: src/useradd.c:714 src/usermod.c:324
+#: src/useradd.c:713 src/usermod.c:323
 msgid "[-p passwd] name\n"
 msgstr "[-p mot-de-passe] nom\n"
 
-#: src/useradd.c:716
+#: src/useradd.c:715
 #, 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:719
+#: src/useradd.c:718
 msgid "\t\t[-f inactive] [-e expire ]\n"
 msgstr "\t\t[-f inactif] [-e expire ]\n"
 
-#: src/useradd.c:816 src/usermod.c:446
+#: src/useradd.c:815 src/usermod.c:445
 #, c-format
 msgid "%s: error locking group file\n"
 msgstr "%s : erreur lors du vérouillage du fichier de groupe\n"
 
-#: src/useradd.c:820 src/usermod.c:451
+#: src/useradd.c:819 src/usermod.c:450
 #, c-format
 msgid "%s: error opening group file\n"
 msgstr "%s : erreur lors d'ouverture du fichier de groupe\n"
 
-#: src/useradd.c:825 src/usermod.c:558
+#: src/useradd.c:824 src/usermod.c:557
 #, 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:830 src/usermod.c:564
+#: src/useradd.c:829 src/usermod.c:563
 #, 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:1002
+#: src/useradd.c:1001
 #, c-format
 msgid "%s: uid %d is not unique\n"
 msgstr "%s : l'uid %d n'est pas unique\n"
 
-#: src/useradd.c:1032
+#: src/useradd.c:1031
 #, c-format
 msgid "%s: can't get unique uid\n"
 msgstr "%s : impossible d'obtenir un uid unique\n"
 
-#: src/useradd.c:1140 src/useradd.c:1284 src/usermod.c:1020 src/usermod.c:1031
-#: src/usermod.c:1041 src/usermod.c:1087 src/usermod.c:1122
+#: src/useradd.c:1139 src/useradd.c:1283 src/usermod.c:1019 src/usermod.c:1030
+#: src/usermod.c:1040 src/usermod.c:1086 src/usermod.c:1121
 #, c-format
 msgid "%s: invalid field `%s'\n"
 msgstr "%s : champs `%s' non valide\n"
 
-#: src/useradd.c:1154
+#: src/useradd.c:1153
 #, c-format
 msgid "%s: invalid base directory `%s'\n"
 msgstr "%s : répertoire de base non valide `%s'\n"
 
-#: src/useradd.c:1164
+#: src/useradd.c:1163
 #, c-format
 msgid "%s: invalid comment `%s'\n"
 msgstr "%s : commentaire `%s' non valide\n"
 
-#: src/useradd.c:1174
+#: src/useradd.c:1173
 #, c-format
 msgid "%s: invalid home directory `%s'\n"
 msgstr "%s : répertoire personnel `%s' non valide\n"
 
-#: src/useradd.c:1192 src/usermod.c:1054
+#: src/useradd.c:1191 src/usermod.c:1053
 #, c-format
 msgid "%s: invalid date `%s'\n"
 msgstr "%s : date `%s' non valide\n"
 
-#: src/useradd.c:1204
+#: src/useradd.c:1203
 #, c-format
 msgid "%s: shadow passwords required for -e\n"
 msgstr "%s : mots de passe shadow nécessaires pour -e\n"
 
-#: src/useradd.c:1219
+#: src/useradd.c:1218
 #, c-format
 msgid "%s: shadow passwords required for -f\n"
 msgstr "%s : mots de passe shadow nécessaires pour -f\n"
 
-#: src/useradd.c:1293
+#: src/useradd.c:1292
 #, c-format
 msgid "%s: invalid shell `%s'\n"
 msgstr "%s : shell `%s' non valide\n"
 
-#: src/useradd.c:1334
+#: src/useradd.c:1333
 #, c-format
 msgid "%s: invalid user name `%s'\n"
 msgstr "%s : nom d'utilisateur `%s' non valide\n"
 
-#: src/useradd.c:1370 src/userdel.c:262 src/usermod.c:1184
+#: src/useradd.c:1369 src/userdel.c:292 src/usermod.c:1183
 #, 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:1375 src/userdel.c:265 src/usermod.c:1189
+#: src/useradd.c:1374 src/userdel.c:295 src/usermod.c:1188
 #, c-format
 msgid "%s: cannot rewrite shadow password file\n"
 msgstr "%s : impossible de reécrire le fichier shadow\n"
 
-#: src/useradd.c:1415 src/userdel.c:329 src/usermod.c:1224
+#: src/useradd.c:1414 src/userdel.c:359 src/usermod.c:1223
 #, 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:1419 src/userdel.c:333 src/usermod.c:1228
+#: src/useradd.c:1418 src/userdel.c:363 src/usermod.c:1227
 #, 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:1425 src/userdel.c:338 src/usermod.c:1233
+#: src/useradd.c:1424 src/userdel.c:368 src/usermod.c:1232
 #, 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:1431 src/userdel.c:343 src/usermod.c:1238
+#: src/useradd.c:1430 src/userdel.c:373 src/usermod.c:1237
 #, c-format
 msgid "%s: cannot open shadow password file\n"
 msgstr "%s : impossible d'ouvrir le fichier shadow\n"
 
-#: src/useradd.c:1530 src/usermod.c:1325
+#: src/useradd.c:1529 src/usermod.c:1324
 #, 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:1553
+#: src/useradd.c:1552
 #, 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:1568
+#: src/useradd.c:1567
 #, 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:1584 src/usermod.c:1384
+#: src/useradd.c:1583 src/usermod.c:1383
 #, 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:1600 src/usermod.c:1399
+#: src/useradd.c:1599 src/usermod.c:1398
 #, 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:1632
+#: src/useradd.c:1631
 #, c-format
 msgid "%s: cannot create directory %s\n"
 msgstr "%s : impossible de créer le répertoire %s\n"
 
-#: src/useradd.c:1709 src/usermod.c:1162
+#: src/useradd.c:1708 src/usermod.c:1161
 #, c-format
 msgid "%s: user %s exists\n"
 msgstr "%s : l'utilisateur %s existe\n"
 
-#: src/useradd.c:1739
+#: src/useradd.c:1738
 #, 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:128
+#: src/userdel.c:127
 #, c-format
 msgid "usage: %s [-r] name\n"
 msgstr "Usage : %s [-r] nom\n"
 
-#: src/userdel.c:175 src/userdel.c:230
+#: src/userdel.c:178 src/userdel.c:260
 #, 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:185 src/userdel.c:239
+#: src/userdel.c:188 src/userdel.c:269
 #, 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:270
+#: src/userdel.c:215
+#, 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:300
 #, 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:350
+#: src/userdel.c:380
 #, 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:354
+#: src/userdel.c:384
 #, 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:363
+#: src/userdel.c:393
 #, c-format
 msgid "%s: cannot open group file\n"
 msgstr "%s : impossible d'ouvrir le fichier group\n"
 
-#: src/userdel.c:373
+#: src/userdel.c:403
 #, c-format
 msgid "%s: cannot open shadow group file\n"
 msgstr "%s : impossible d'ouvrir le fichier shadow group\n"
 
-#: src/userdel.c:404 src/userdel.c:419
+#: src/userdel.c:434 src/userdel.c:449
 #, c-format
 msgid "%s: error deleting authentication\n"
 msgstr "%s : erreur lors de l'effacement de l'authentification\n"
 
-#: src/userdel.c:428
+#: src/userdel.c:458
 #, 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:431
+#: src/userdel.c:461
 #, 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:440
+#: src/userdel.c:470
 #, 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:453
+#: src/userdel.c:483
 #, 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:472
+#: src/userdel.c:502
 #, 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:513
+#: src/userdel.c:543
 #, c-format
 msgid "%s: user %s is currently logged in\n"
 msgstr "%s : l'utilisateur %s est connecté\n"
 
-#: src/userdel.c:630
+#: src/userdel.c:660
 #, 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:636
+#: src/userdel.c:666
 #, c-format
 msgid "%s: warning: can't remove "
 msgstr "%s : impossible d'enlever "
 
-#: src/userdel.c:711 src/usermod.c:968
+#: src/userdel.c:741 src/usermod.c:967
 #, c-format
 msgid "%s: user %s does not exist\n"
 msgstr "%s : l'utilisateur %s n'existe pas\n"
 
-#: src/userdel.c:725 src/usermod.c:984
+#: src/userdel.c:755 src/usermod.c:983
 #, c-format
 msgid "%s: user %s is a NIS user\n"
 msgstr "%s : le compte %s est un compte NIS\n"
 
-#: src/userdel.c:762
+#: src/userdel.c:792
 #, 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:785
+#: src/userdel.c:815
 #, 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:798
+#: src/userdel.c:828
 #, c-format
 msgid "%s: error removing directory %s\n"
 msgstr "%s : erreur lors de l'effacement du répertoire %s\n"
 
-#: src/usermod.c:316
+#: src/usermod.c:315
 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:322
+#: src/usermod.c:321
 msgid "[-A {DEFAULT|program},... ] "
 msgstr "[-A {DÉFAUT|programme},... ] "
 
-#: src/usermod.c:478
+#: src/usermod.c:477
 #, c-format
 msgid "%s: out of memory in update_group\n"
 msgstr "%s : plus de mémoire pour update_group\n"
 
-#: src/usermod.c:601
+#: src/usermod.c:600
 #, c-format
 msgid "%s: out of memory in update_gshadow\n"
 msgstr "%s : plus de mémoire pour update_gshadow\n"
 
-#: src/usermod.c:1139
+#: src/usermod.c:1138
 #, c-format
 msgid "%s: no flags given\n"
 msgstr "%s : aucun drapeau donné\n"
 
-#: src/usermod.c:1146
+#: src/usermod.c:1145
 #, 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:1167
+#: src/usermod.c:1166
 #, c-format
 msgid "%s: uid %ld is not unique\n"
 msgstr "%s : l'uid %ld n'est pas unique\n"
 
-#: src/usermod.c:1315
+#: src/usermod.c:1314
 #, 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:1335
+#: src/usermod.c:1334
 #, 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:1352
+#: src/usermod.c:1351
 #, 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:1358
+#: src/usermod.c:1357
 #, c-format
 msgid "%s: error removing password entry\n"
 msgstr "%s : erreur lors de l'effacement du mot de passe\n"
 
-#: src/usermod.c:1366
+#: src/usermod.c:1365
 #, c-format
 msgid "%s: error adding password dbm entry\n"
 msgstr ""
 
-#: src/usermod.c:1373
+#: src/usermod.c:1372
 #, c-format
 msgid "%s: error removing passwd dbm entry\n"
 msgstr ""
 
-#: src/usermod.c:1390
+#: src/usermod.c:1389
 #, c-format
 msgid "%s: error removing shadow password entry\n"
 msgstr ""
 
-#: src/usermod.c:1405
+#: src/usermod.c:1404
 #, c-format
 msgid "%s: error removing shadow passwd dbm entry\n"
 msgstr ""
 
-#: src/usermod.c:1436
+#: src/usermod.c:1435
 #, c-format
 msgid "%s: directory %s exists\n"
 msgstr "%s : le répertoire %s existe\n"
 
-#: src/usermod.c:1443
+#: src/usermod.c:1442
 #, c-format
 msgid "%s: can't create %s\n"
 msgstr "%s : impossible de créer %s\n"
 
-#: src/usermod.c:1449
+#: src/usermod.c:1448
 #, c-format
 msgid "%s: can't chown %s\n"
 msgstr "%s : impossible de changer le propriètaire de %s\n"
 
-#: src/usermod.c:1465
+#: src/usermod.c:1464
 #, 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:1562
+#: src/usermod.c:1561
 #, c-format
 msgid "%s: warning: %s not owned by %s\n"
 msgstr "%s : avertissement : %s n'appartient pas à %s\n"
 
-#: src/usermod.c:1568
+#: src/usermod.c:1567
 msgid "failed to change mailbox owner"
 msgstr "échec du changement de propriètaire de la mailbox"
 
-#: src/usermod.c:1575
+#: src/usermod.c:1574
 msgid "failed to rename mailbox"
 msgstr "échec du renommage de la mailbox"
 
-#: src/vipw.c:103
+#: src/vipw.c:102
 #, c-format
 msgid ""
 "\n"
@@ -2383,20 +2388,20 @@ msgstr ""
 "\n"
 "%s : %s est inchangé\n"
 
-#: src/vipw.c:128
+#: src/vipw.c:127
 msgid "Couldn't lock file"
 msgstr "Impossible de vérouiller le fichier"
 
-#: src/vipw.c:135
+#: src/vipw.c:134
 msgid "Couldn't make backup"
 msgstr "Impossible de faire une sauvegarde"
 
-#: src/vipw.c:174
+#: src/vipw.c:187
 #, 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:213
+#: src/vipw.c:226
 msgid ""
 "Usage:\n"
 "`vipw' edits /etc/passwd        `vipw -s' edits /etc/shadow\n"
index 98b3c7f4a8d92a1ecf05b92c501cf67d21d517f5..5e395ff789746f854f95757ec511b538e084fe39 100644 (file)
Binary files a/po/pl.gmo and b/po/pl.gmo differ
index 3719a5deb1a30e4fe07d3b7f47369207d5293708..f0f89c040302331ac084085361074938ea767e93 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: 1999-08-27 21:03+0200\n"
+"POT-Creation-Date: 2000-08-26 20:28+0200\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"
@@ -110,7 +110,7 @@ msgstr "Nie masz poczty."
 msgid "You have mail."
 msgstr "Masz pocztê."
 
-#: libmisc/obscure.c:281 src/passwd.c:311
+#: libmisc/obscure.c:281 src/passwd.c:309
 #, c-format
 msgid "Bad password: %s.  "
 msgstr "Z³e has³o: %s.  "
@@ -180,25 +180,25 @@ msgstr "malloc(%d) nie powiod
 msgid "Dialup Password: "
 msgstr "Has³o dostêpu modemowego: "
 
-#: lib/getdef.c:249
+#: lib/getdef.c:253
 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:303
+#: lib/getdef.c:307
 #, 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:390
+#: lib/getdef.c:394
 #, c-format
 msgid "error - lookup '%s' failed\n"
 msgstr "b³±d - wyszukiwanie '%s' niepowiod³o siê\n"
 
-#: lib/getdef.c:398
+#: lib/getdef.c:402
 #, 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:297
+#: lib/pwauth.c:54 src/newgrp.c:305
 msgid "Password: "
 msgstr "Has³o: "
 
@@ -343,82 +343,82 @@ msgstr "Has
 msgid "Account Expires:\t"
 msgstr "Has³o traci wa¿no¶æ:\t"
 
-#: src/chage.c:468
+#: src/chage.c:471
 #, c-format
 msgid "%s: do not include \"l\" with other flags\n"
 msgstr "%s: nie ³±cz \"l\" z innymi flagami\n"
 
-#: src/chage.c:480 src/chage.c:592 src/login.c:529
+#: src/chage.c:483 src/chage.c:595 src/login.c:529
 #, c-format
 msgid "%s: permission denied\n"
 msgstr "%s: odmowa dostêpu\n"
 
-#: src/chage.c:492 src/chpasswd.c:122
+#: src/chage.c:495 src/chpasswd.c:120
 #, c-format
 msgid "%s: can't lock password file\n"
 msgstr "%s: nie mogê zablokowaæ pliku z has³ami\n"
 
-#: src/chage.c:498 src/chpasswd.c:126
+#: src/chage.c:501 src/chpasswd.c:124
 #, c-format
 msgid "%s: can't open password file\n"
 msgstr "%s: nie mogê otworzyæ pliku z has³ami\n"
 
-#: src/chage.c:505
+#: src/chage.c:508
 #, c-format
 msgid "%s: unknown user: %s\n"
 msgstr "%s: nieznany u¿ytkownik: %s\n"
 
-#: src/chage.c:524
+#: src/chage.c:527
 #, c-format
 msgid "%s: can't lock shadow password file\n"
 msgstr "%s: nie mogê zablokowaæ pliku z ukrytymi has³ami\n"
 
-#: src/chage.c:531
+#: src/chage.c:534
 #, c-format
 msgid "%s: can't open shadow password file\n"
 msgstr "%s: nie mogê otworzyæ pliku z ukrytymi has³ami\n"
 
-#: src/chage.c:613
+#: src/chage.c:616
 #, c-format
 msgid "Changing the aging information for %s\n"
 msgstr "Zmieniam informacjê o u¿ytkowniku %s\n"
 
-#: src/chage.c:615
+#: src/chage.c:618
 #, c-format
 msgid "%s: error changing fields\n"
 msgstr "%s: b³±d podczas zmieniania pól\n"
 
-#: src/chage.c:642 src/chage.c:705 src/pwunconv.c:184
+#: src/chage.c:645 src/chage.c:708 src/pwunconv.c:183
 #, c-format
 msgid "%s: can't update password file\n"
 msgstr "%s: nie mogê zaktualizowaæ pliku z has³ami\n"
 
-#: src/chage.c:672 src/pwunconv.c:179
+#: src/chage.c:675 src/pwunconv.c:178
 #, 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:721 src/chage.c:736 src/chfn.c:572 src/chsh.c:411
-#: src/passwd.c:827 src/passwd.c:928
+#: src/chage.c:724 src/chage.c:739 src/chfn.c:571 src/chsh.c:410
+#: src/passwd.c:825 src/passwd.c:926
 msgid "Error updating the DBM password entry.\n"
 msgstr "B³±d podczas aktualizacki bazy hase³ DBM.\n"
 
-#: src/chage.c:753
+#: src/chage.c:756
 #, 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:767
+#: src/chage.c:770
 #, c-format
 msgid "%s: can't rewrite password file\n"
 msgstr "%s: nie mogê przepisaæ pliku z has³ami\n"
 
-#: src/chage.c:816
+#: src/chage.c:821
 #, c-format
 msgid "%s: no aging information present\n"
 msgstr "%s: brak informacji\n"
 
-#: src/chfn.c:108
+#: src/chfn.c:107
 #, c-format
 msgid ""
 "Usage: %s [ -f full_name ] [ -r room_no ] [ -w work_ph ]\n"
@@ -427,7 +427,7 @@ msgstr ""
 "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:112
+#: src/chfn.c:111
 #, c-format
 msgid ""
 "Usage: %s [ -f full_name ] [ -r room_no ] [ -w work_ph ] [ -h home_ph ]\n"
@@ -435,361 +435,361 @@ msgstr ""
 "U¿ycie: %s [ -f imiê_nazwisko ] [ -r nr_pokoju ] [ -w tel_praca ] [ -h "
 "tel_dom ]\n"
 
-#: src/chfn.c:164 src/chsh.c:120
+#: 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:167
+#: src/chfn.c:166
 msgid "Full Name"
 msgstr "Imiê i nazwisko"
 
-#: src/chfn.c:169
+#: src/chfn.c:168
 #, c-format
 msgid "\tFull Name: %s\n"
 msgstr "\tImiê i nazwisko: %s\n"
 
-#: src/chfn.c:172
+#: src/chfn.c:171
 msgid "Room Number"
 msgstr "Numer pokoju"
 
-#: src/chfn.c:174
+#: src/chfn.c:173
 #, c-format
 msgid "\tRoom Number: %s\n"
 msgstr "\tNumer pokoju: %s\n"
 
-#: src/chfn.c:177
+#: src/chfn.c:176
 msgid "Work Phone"
 msgstr "Telefon do pracy"
 
-#: src/chfn.c:179
+#: src/chfn.c:178
 #, c-format
 msgid "\tWork Phone: %s\n"
 msgstr "\tTelefon do pracy: %s\n"
 
-#: src/chfn.c:182
+#: src/chfn.c:181
 msgid "Home Phone"
 msgstr "Telefon domowy"
 
-#: src/chfn.c:184
+#: src/chfn.c:183
 #, c-format
 msgid "\tHome Phone: %s\n"
 msgstr "\tTelefon domowy: %s\n"
 
-#: src/chfn.c:187
+#: src/chfn.c:186
 msgid "Other"
 msgstr "Inne"
 
-#: src/chfn.c:300 src/chfn.c:308 src/chfn.c:316 src/chfn.c:324 src/chfn.c:332
-#: src/chfn.c:393 src/passwd.c:1228
+#: src/chfn.c:299 src/chfn.c:307 src/chfn.c:315 src/chfn.c:323 src/chfn.c:331
+#: src/chfn.c:392 src/passwd.c:1226
 #, c-format
 msgid "%s: Permission denied.\n"
 msgstr "%s: Brak praw dostêpu.\n"
 
-#: src/chfn.c:353 src/chsh.c:226 src/passwd.c:1279
+#: src/chfn.c:352 src/chsh.c:225 src/passwd.c:1277
 #, c-format
 msgid "%s: Unknown user %s\n"
 msgstr "%s: Nieznany u¿ytkownik %s\n"
 
-#: src/chfn.c:359 src/chsh.c:234 src/passwd.c:1209
+#: src/chfn.c:358 src/chsh.c:233 src/passwd.c:1207
 #, c-format
 msgid "%s: Cannot determine your user name.\n"
 msgstr "%s: Nie mogê ustaliæ twojej nazwy u¿ytkownika.\n"
 
-#: src/chfn.c:375 src/chsh.c:252
+#: src/chfn.c:374 src/chsh.c:251
 #, 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:380 src/chsh.c:259
+#: src/chfn.c:379 src/chsh.c:258
 #, 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:455
+#: src/chfn.c:454
 #, c-format
 msgid "Changing the user information for %s\n"
 msgstr "Zmieniam informacjê o u¿ytkowniku %s\n"
 
-#: src/chfn.c:464
+#: src/chfn.c:463
 #, c-format
 msgid "%s: invalid name: \"%s\"\n"
 msgstr "%s: nieprawid³owa nazwa: \"%s\"\n"
 
-#: src/chfn.c:469
+#: src/chfn.c:468
 #, c-format
 msgid "%s: invalid room number: \"%s\"\n"
 msgstr "%s: nieprawid³owy numer pokoju: \"%s\"\n"
 
-#: src/chfn.c:474
+#: src/chfn.c:473
 #, c-format
 msgid "%s: invalid work phone: \"%s\"\n"
 msgstr "%s: nieprawid³owy numer telefonu do pracy: \"%s\"\n"
 
-#: src/chfn.c:479
+#: src/chfn.c:478
 #, c-format
 msgid "%s: invalid home phone: \"%s\"\n"
 msgstr "%s: nieprawid³owy numer telefonu domowego: \"%s\"\n"
 
-#: src/chfn.c:484
+#: src/chfn.c:483
 #, c-format
 msgid "%s: \"%s\" contains illegal characters\n"
 msgstr "%s: \"%s\" zawiera nieprawid³owe znaki\n"
 
-#: src/chfn.c:496
+#: src/chfn.c:495
 #, c-format
 msgid "%s: fields too long\n"
 msgstr "%s: pola zbyt d³ugie\n"
 
-#: src/chfn.c:511 src/chsh.c:349 src/gpasswd.c:583 src/passwd.c:1390
+#: src/chfn.c:510 src/chsh.c:348 src/gpasswd.c:582 src/passwd.c:1388
 msgid "Cannot change ID to root.\n"
 msgstr "Nie mogê zmieniæ ID na root.\n"
 
-#: src/chfn.c:524 src/chsh.c:363 src/passwd.c:737 src/passwd.c:882
+#: src/chfn.c:523 src/chsh.c:362 src/passwd.c:735 src/passwd.c:880
 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:530 src/chsh.c:369 src/passwd.c:742 src/passwd.c:887
+#: src/chfn.c:529 src/chsh.c:368 src/passwd.c:740 src/passwd.c:885
 msgid "Cannot open the password file.\n"
 msgstr "Nie mogê otworzyæ pliku z has³ami.\n"
 
-#: src/chfn.c:547 src/chsh.c:384 src/passwd.c:748 src/usermod.c:1272
+#: src/chfn.c:546 src/chsh.c:383 src/passwd.c:746 src/usermod.c:1271
 #, c-format
 msgid "%s: %s not found in /etc/passwd\n"
 msgstr "%s: %s nie znaleziony w /etc/passwd\n"
 
-#: src/chfn.c:564 src/chsh.c:403 src/passwd.c:821 src/passwd.c:922
-#: src/passwd.c:962
+#: src/chfn.c:563 src/chsh.c:402 src/passwd.c:819 src/passwd.c:920
+#: src/passwd.c:960
 msgid "Error updating the password entry.\n"
 msgstr "B³±d podczas aktualizacji wpisu do bazy hase³.\n"
 
-#: src/chfn.c:587 src/chsh.c:426 src/passwd.c:834 src/passwd.c:935
+#: src/chfn.c:586 src/chsh.c:425 src/passwd.c:832 src/passwd.c:933
 msgid "Cannot commit password file changes.\n"
 msgstr "Wprowadzenie zmian do pliku passwd jest niemo¿liwe.\n"
 
-#: src/chfn.c:594 src/chsh.c:433
+#: src/chfn.c:593 src/chsh.c:432
 msgid "Cannot unlock the password file.\n"
 msgstr "Nie mogê usun±c blokady z pliku z has³ami.\n"
 
-#: src/chpasswd.c:78
+#: src/chpasswd.c:76
 #, c-format
 msgid "usage: %s [-e]\n"
 msgstr "u¿ycie: %s [-e]\n"
 
-#: src/chpasswd.c:134 src/pwconv.c:105
+#: src/chpasswd.c:132 src/pwconv.c:104
 #, c-format
 msgid "%s: can't lock shadow file\n"
 msgstr "%s: nie mogê zablokowaæ pliku z ukrytymi has³ami\n"
 
-#: src/chpasswd.c:139 src/gpasswd.c:609 src/pwconv.c:110 src/pwunconv.c:119
-#: src/pwunconv.c:124
+#: src/chpasswd.c:137 src/gpasswd.c:608 src/pwconv.c:109 src/pwunconv.c:118
+#: src/pwunconv.c:123
 #, c-format
 msgid "%s: can't open shadow file\n"
 msgstr "%s: nie mogê otworzyæ pliku z ukrytymi has³ami\n"
 
-#: src/chpasswd.c:161 src/newusers.c:418
+#: src/chpasswd.c:159 src/newusers.c:415
 #, c-format
 msgid "%s: line %d: line too long\n"
 msgstr "%s: linia %d: linia zbyt d³uga\n"
 
-#: src/chpasswd.c:181
+#: src/chpasswd.c:179
 #, c-format
 msgid "%s: line %d: missing new password\n"
 msgstr "%s: linia %d: brakuje nowego has³a\n"
 
-#: src/chpasswd.c:197
+#: src/chpasswd.c:195
 #, c-format
 msgid "%s: line %d: unknown user %s\n"
 msgstr "%s: linia %d: nieznany u¿ytkownik %s\n"
 
-#: src/chpasswd.c:249
+#: src/chpasswd.c:247
 #, 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:265 src/newusers.c:538
+#: src/chpasswd.c:263 src/newusers.c:535
 #, c-format
 msgid "%s: error detected, changes ignored\n"
 msgstr "%s: wykryto b³±d, zignorowano modyfikacje\n"
 
-#: src/chpasswd.c:276
+#: src/chpasswd.c:274
 #, c-format
 msgid "%s: error updating shadow file\n"
 msgstr "%s: b³±d podczas aktualizacji pliku z ukrytymi has³ami\n"
 
-#: src/chpasswd.c:284
+#: src/chpasswd.c:282
 #, c-format
 msgid "%s: error updating password file\n"
 msgstr "%s: b³±d podczas aktualizacji pliku z has³ami\n"
 
-#: src/chsh.c:106
+#: 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:121
+#: src/chsh.c:120
 msgid "Login Shell"
 msgstr "Pow³oka logowania"
 
-#: src/chsh.c:275 src/chsh.c:288
+#: src/chsh.c:274 src/chsh.c:287
 #, 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:317
+#: src/chsh.c:316
 #, c-format
 msgid "Changing the login shell for %s\n"
 msgstr "Zmieniam pow³okê logowania dla %s\n"
 
-#: src/chsh.c:329
+#: src/chsh.c:328
 #, c-format
 msgid "%s: Invalid entry: %s\n"
 msgstr "%s: Nieprawid³owy wpis: %s\n"
 
-#: src/chsh.c:334
+#: src/chsh.c:333
 #, c-format
 msgid "%s is an invalid shell.\n"
 msgstr "%s jest nieprawid³ow± pow³ok±.\n"
 
-#: src/dpasswd.c:71
+#: 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:136
+#: src/dpasswd.c:134
 msgid "Shell password: "
 msgstr "Has³o pow³oki: "
 
-#: src/dpasswd.c:142
+#: src/dpasswd.c:140
 msgid "re-enter Shell password: "
 msgstr "Wpisz ponownie has³o pow³oki: "
 
-#: src/dpasswd.c:149
+#: src/dpasswd.c:147
 #, c-format
 msgid "%s: Passwords do not match, try again.\n"
 msgstr "%s: Has³a nie pasuj±, spróbuj ponownie.\n"
 
-#: src/dpasswd.c:169
+#: src/dpasswd.c:167
 #, c-format
 msgid "%s: can't create %s"
 msgstr "%s: nie mogê utworzyæ %s"
 
-#: src/dpasswd.c:174
+#: src/dpasswd.c:172
 #, c-format
 msgid "%s: can't open %s"
 msgstr "%s: nie mogê otworzyæ %s"
 
-#: src/dpasswd.c:202
+#: src/dpasswd.c:200
 #, c-format
 msgid "%s: Shell %s not found.\n"
 msgstr "%s: Pow³oka %s nie znaleziona.\n"
 
-#: src/expiry.c:85
+#: src/expiry.c:84
 msgid "Usage: expiry { -f | -c }\n"
 msgstr "U¿ycie: expiry { -f | -c }\n"
 
-#: src/expiry.c:138
+#: src/expiry.c:137
 #, c-format
 msgid "%s: WARNING!  Must be set-UID root!\n"
 msgstr "%s: OSTRZE¯ENIE! Program musi posiadaæ SUID root!\n"
 
-#: src/expiry.c:149
+#: src/expiry.c:148
 #, c-format
 msgid "%s: unknown user\n"
 msgstr "%s: nieznany u¿ytkownik\n"
 
-#: src/faillog.c:80
+#: src/faillog.c:79
 #, 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:135 src/lastlog.c:95
+#: src/faillog.c:134 src/lastlog.c:94
 #, c-format
 msgid "Unknown User: %s\n"
 msgstr "Nieznany u¿ytkownik: %s\n"
 
-#: src/faillog.c:216
+#: src/faillog.c:215
 msgid "Username   Failures  Maximum  Latest\n"
 msgstr "U¿ytkownik Niepowodzenia Maksymalnie Ostatnio\n"
 
-#: src/faillog.c:233
+#: src/faillog.c:232
 #, c-format
 msgid "  %s on %s"
 msgstr "  %s na %s"
 
-#: src/faillog.c:237
+#: src/faillog.c:236
 #, c-format
 msgid " [%lds left]"
 msgstr " [%lds pozosta³o]"
 
-#: src/faillog.c:240
+#: src/faillog.c:239
 #, c-format
 msgid " [%lds lock]"
 msgstr " [%lds blokada]"
 
-#: src/gpasswd.c:91
+#: src/gpasswd.c:89
 #, c-format
 msgid "usage: %s [-r|-R] group\n"
 msgstr "u¿ycie: %s [-r|-R] grupa\n"
 
-#: src/gpasswd.c:92
+#: src/gpasswd.c:90
 #, c-format
 msgid "       %s [-a user] group\n"
 msgstr "       %s [-a u¿ytkownik] grupa\n"
 
-#: src/gpasswd.c:93
+#: src/gpasswd.c:91
 #, c-format
 msgid "       %s [-d user] group\n"
 msgstr "       %s [-d u¿ytkownik] grupa\n"
 
-#: src/gpasswd.c:95
+#: src/gpasswd.c:93
 #, c-format
 msgid "       %s [-A user,...] [-M user,...] group\n"
 msgstr "       %s [-A u¿ytkownik,...] [-M u¿ytkownik,...] grupa\n"
 
-#: src/gpasswd.c:98
+#: src/gpasswd.c:96
 #, c-format
 msgid "       %s [-M user,...] group\n"
 msgstr "       %s [-M u¿ytkownik,...] grupa\n"
 
-#: src/gpasswd.c:162 src/gpasswd.c:247
+#: src/gpasswd.c:160 src/gpasswd.c:245
 #, c-format
 msgid "%s: unknown user %s\n"
 msgstr "%s: nieznany u¿ytkownik %s\n"
 
-#: src/gpasswd.c:174
+#: src/gpasswd.c:172
 msgid "Permission denied.\n"
 msgstr "Dostêp zabroniony.\n"
 
-#: src/gpasswd.c:259
+#: src/gpasswd.c:257
 #, 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:310
+#: src/gpasswd.c:308
 msgid "Who are you?\n"
 msgstr "Kim jeste¶?\n"
 
-#: src/gpasswd.c:330 src/newgrp.c:247
+#: src/gpasswd.c:328 src/newgrp.c:251
 #, c-format
 msgid "unknown group: %s\n"
 msgstr "nieznana grupa: %s\n"
 
-#: src/gpasswd.c:438
+#: src/gpasswd.c:436
 #, c-format
 msgid "Adding user %s to group %s\n"
 msgstr "Dodajê nowego u¿ytkownika %s do grupy %s\n"
 
-#: src/gpasswd.c:455
+#: src/gpasswd.c:453
 #, c-format
 msgid "Removing user %s from group %s\n"
 msgstr "Usuwam u¿ytkownika %s z grupy %s\n"
 
-#: src/gpasswd.c:468
+#: src/gpasswd.c:466
 #, c-format
 msgid "%s: unknown member %s\n"
 msgstr "%s: nieznany cz³onek %s\n"
 
-#: src/gpasswd.c:515
+#: src/gpasswd.c:513
 #, c-format
 msgid "%s: Not a tty\n"
 msgstr "%s: To nie tty\n"
@@ -801,105 +801,105 @@ msgstr "%s: To nie tty\n"
 #. * the old password since the invoker is either the group
 #. * owner, or root.
 #.
-#: src/gpasswd.c:537
+#: src/gpasswd.c:535
 #, c-format
 msgid "Changing the password for group %s\n"
 msgstr "Zmieniam has³o dla grupy %s\n"
 
-#: src/gpasswd.c:540
+#: src/gpasswd.c:538
 msgid "New Password: "
 msgstr "Nowe has³o: "
 
-#: src/gpasswd.c:545 src/passwd.c:424
+#: src/gpasswd.c:543 src/passwd.c:422
 msgid "Re-enter new password: "
 msgstr "Wpisz has³o ponownie: "
 
-#: src/gpasswd.c:557
+#: src/gpasswd.c:555
 msgid "They don't match; try again"
 msgstr "Nie pasuj±; spróbuj ponownie"
 
-#: src/gpasswd.c:561
+#: src/gpasswd.c:559
 #, c-format
 msgid "%s: Try again later\n"
 msgstr "%s: Spróbuj ponownie pó¼niej\n"
 
-#: src/gpasswd.c:591
+#: src/gpasswd.c:590
 #, c-format
 msgid "%s: can't get lock\n"
 msgstr "%s: nie mogê zablokowaæ\n"
 
-#: src/gpasswd.c:597
+#: src/gpasswd.c:596
 #, c-format
 msgid "%s: can't get shadow lock\n"
 msgstr "%s: nie mogê zablokowaæ pliku z ukrytymi has³ami\n"
 
-#: src/gpasswd.c:603
+#: src/gpasswd.c:602
 #, c-format
 msgid "%s: can't open file\n"
 msgstr "%s: nie mogê otworzyæ pliku\n"
 
-#: src/gpasswd.c:615
+#: src/gpasswd.c:614
 #, c-format
 msgid "%s: can't update entry\n"
 msgstr "%s: nie mogê zaktualizowaæ wpisu\n"
 
-#: src/gpasswd.c:621
+#: src/gpasswd.c:620
 #, 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:627
+#: src/gpasswd.c:626
 #, c-format
 msgid "%s: can't re-write file\n"
 msgstr "%s: nie mogê przepisaæ pliku\n"
 
-#: src/gpasswd.c:633
+#: src/gpasswd.c:632
 #, 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:641
+#: src/gpasswd.c:640
 #, c-format
 msgid "%s: can't unlock file\n"
 msgstr "%s: nie mogê usun±c blokady z pliku\n"
 
-#: src/gpasswd.c:646
+#: src/gpasswd.c:645
 #, c-format
 msgid "%s: can't update DBM files\n"
 msgstr "%s: nie mogê zaktualizwoaæ plików DBM\n"
 
-#: src/gpasswd.c:653
+#: src/gpasswd.c:652
 #, 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:106
+#: src/groupadd.c:105
 msgid "usage: groupadd [-g gid [-o]] group\n"
 msgstr "u¿ycie: groupadd [-g gid [-o]] grupa\n"
 
-#: src/groupadd.c:174 src/groupadd.c:197 src/groupmod.c:184 src/groupmod.c:231
-#: src/useradd.c:932 src/usermod.c:513 src/usermod.c:649
+#: src/groupadd.c:173 src/groupadd.c:196 src/groupmod.c:183 src/groupmod.c:230
+#: src/useradd.c:931 src/usermod.c:512 src/usermod.c:648
 #, c-format
 msgid "%s: error adding new group entry\n"
 msgstr "%s: b³±d podczas dodawania nowej grupy\n"
 
-#: src/groupadd.c:184 src/groupadd.c:207 src/groupmod.c:200 src/useradd.c:943
-#: src/usermod.c:525 src/usermod.c:661
+#: src/groupadd.c:183 src/groupadd.c:206 src/groupmod.c:199 src/useradd.c:942
+#: src/usermod.c:524 src/usermod.c:660
 #, 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:259 src/useradd.c:997
+#: src/groupadd.c:258 src/useradd.c:996
 #, c-format
 msgid "%s: name %s is not unique\n"
 msgstr "%s: nazwa %s nie jest niepowtarzalny\n"
 
-#: src/groupadd.c:274
+#: src/groupadd.c:273
 #, c-format
 msgid "%s: gid %ld is not unique\n"
 msgstr "%s: gid %ld nie jest niepowtarzalny\n"
 
-#: src/groupadd.c:298
+#: src/groupadd.c:297
 #, c-format
 msgid "%s: can't get unique gid\n"
 msgstr "%s: nie mogê uzyskaæ niepowtarzalnego gid\n"
@@ -907,78 +907,78 @@ msgstr "%s: nie mog
 #.
 #. * All invalid group names land here.
 #.
-#: src/groupadd.c:322 src/groupmod.c:342
+#: src/groupadd.c:321 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:351 src/groupmod.c:368
+#: src/groupadd.c:350 src/groupmod.c:367
 #, c-format
 msgid "%s: invalid group %s\n"
 msgstr "%s: nieprawid³owa grupa %s\n"
 
-#: src/groupadd.c:368 src/useradd.c:1273
+#: src/groupadd.c:367 src/useradd.c:1272
 #, c-format
 msgid "%s: -O requires NAME=VALUE\n"
 msgstr "%s: -O wymaga ZMIENNA=WARTO¦Æ\n"
 
-#: src/groupadd.c:413 src/groupdel.c:168 src/groupmod.c:404 src/useradd.c:1382
-#: src/userdel.c:273 src/usermod.c:537
+#: src/groupadd.c:412 src/groupdel.c:167 src/groupmod.c:403 src/useradd.c:1381
+#: src/userdel.c:303 src/usermod.c:536
 #, c-format
 msgid "%s: cannot rewrite group file\n"
 msgstr "%s: nie mogê przepisaæ pliku z grupami\n"
 
-#: src/groupadd.c:419 src/groupdel.c:174 src/groupmod.c:410 src/useradd.c:1390
-#: src/userdel.c:279 src/usermod.c:674
+#: src/groupadd.c:418 src/groupdel.c:173 src/groupmod.c:409 src/useradd.c:1389
+#: src/userdel.c:309 src/usermod.c:673
 #, c-format
 msgid "%s: cannot rewrite shadow group file\n"
 msgstr "%s: nie mogê przepisaæ pliku z ukrytymi grupami\n"
 
-#: src/groupadd.c:438 src/groupdel.c:193 src/groupmod.c:429 src/userdel.c:359
+#: src/groupadd.c:437 src/groupdel.c:192 src/groupmod.c:428 src/userdel.c:389
 #, c-format
 msgid "%s: unable to lock group file\n"
 msgstr "%s: nie mogê zablokowaæ pliku z grupami\n"
 
-#: src/groupadd.c:442 src/groupdel.c:197 src/groupmod.c:433
+#: src/groupadd.c:441 src/groupdel.c:196 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:447 src/groupdel.c:202 src/groupmod.c:438 src/userdel.c:368
+#: src/groupadd.c:446 src/groupdel.c:201 src/groupmod.c:437 src/userdel.c:398
 #, c-format
 msgid "%s: unable to lock shadow group file\n"
 msgstr "%s: nie mogê zablokowaæ pliku z ukrytymi grupami\n"
 
-#: src/groupadd.c:452 src/groupdel.c:207 src/groupmod.c:443
+#: src/groupadd.c:451 src/groupdel.c:206 src/groupmod.c:442
 #, c-format
 msgid "%s: unable to open shadow group file\n"
 msgstr "%s: nie mogê otworzyæ pliku z ukrytymi grupami\n"
 
-#: src/groupadd.c:519
+#: src/groupadd.c:518
 #, c-format
 msgid "%s: group %s exists\n"
 msgstr "%s: grupa %s istnieje\n"
 
-#: src/groupdel.c:87
+#: src/groupdel.c:86
 msgid "usage: groupdel group\n"
 msgstr "u¿ycie: groupdel grupa\n"
 
-#: src/groupdel.c:105 src/groupmod.c:188 src/groupmod.c:235
+#: src/groupdel.c:104 src/groupmod.c:187 src/groupmod.c:234
 #, c-format
 msgid "%s: error removing group entry\n"
 msgstr "%s: b³±d podczas usuwania grupy\n"
 
-#: src/groupdel.c:117 src/groupmod.c:207
+#: src/groupdel.c:116 src/groupmod.c:206
 #, c-format
 msgid "%s: error removing group dbm entry\n"
 msgstr "%s: b³±d podczas usuwania wpisu dbm o grupie\n"
 
-#: src/groupdel.c:132
+#: src/groupdel.c:131
 #, c-format
 msgid "%s: error removing shadow group entry\n"
 msgstr "%s: b³±d podczas usuwania wpisu o ukrytej grupie\n"
 
-#: src/groupdel.c:145 src/groupmod.c:253
+#: src/groupdel.c:144 src/groupmod.c:252
 #, c-format
 msgid "%s: error removing shadow group dbm entry\n"
 msgstr "%s: b³±d podczas usuwania wpisu dbm z pliku ukrytych grup\n"
@@ -986,76 +986,76 @@ msgstr "%s: b
 #.
 #. * Can't remove the group.
 #.
-#: src/groupdel.c:249
+#: src/groupdel.c:248
 #, c-format
 msgid "%s: cannot remove user's primary group.\n"
 msgstr "%s: nie mogê usun±æ podstawowej grupy u¿ytkowników.\n"
 
-#: src/groupdel.c:306 src/groupmod.c:502
+#: src/groupdel.c:305 src/groupmod.c:501
 #, c-format
 msgid "%s: group %s does not exist\n"
 msgstr "%s: grupa %s nie isnieje\n"
 
-#: src/groupdel.c:320 src/groupmod.c:518
+#: src/groupdel.c:319 src/groupmod.c:517
 #, c-format
 msgid "%s: group %s is a NIS group\n"
 msgstr "%s: grupa %s jest grup± NIS\n"
 
-#: src/groupdel.c:326 src/groupmod.c:524 src/userdel.c:731 src/usermod.c:990
+#: src/groupdel.c:325 src/groupmod.c:523 src/userdel.c:761 src/usermod.c:989
 #, c-format
 msgid "%s: %s is the NIS master\n"
 msgstr "%s: %s jest g³ównym serwerem NIS\n"
 
-#: src/groupmod.c:106
+#: src/groupmod.c:105
 msgid "usage: groupmod [-g gid [-o]] [-n name] group\n"
 msgstr "u¿ycie: groupmod [-g gid [-o]] [-n nazwa] grupa\n"
 
-#: src/groupmod.c:166
+#: src/groupmod.c:165
 #, fuzzy, c-format
 msgid "%s: %s not found in /etc/group\n"
 msgstr "%s: %s nie znaleziony w /etc/passwd\n"
 
-#: src/groupmod.c:247
+#: src/groupmod.c:246
 #, 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:300
+#: src/groupmod.c:299
 #, c-format
 msgid "%s: %ld is not a unique gid\n"
 msgstr "%s: %ld nie jest niepowtarzalnym gid\n"
 
-#: src/groupmod.c:331
+#: 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:63
+#: src/groups.c:62
 #, c-format
 msgid "unknown user %s\n"
 msgstr "nieznany u¿ytkownik %s\n"
 
-#: src/grpck.c:99
+#: src/grpck.c:98
 #, c-format
 msgid "Usage: %s [ -r ] [ group [ gshadow ] ]\n"
 msgstr "U¿ycie: %s [ -r ] [ grupa [ gshadow ] ]\n"
 
-#: src/grpck.c:101
+#: src/grpck.c:100
 #, c-format
 msgid "Usage: %s [ -r ] [ group ]\n"
 msgstr "U¿ycie: %s [ -r ] [ grupa ]\n"
 
-#: src/grpck.c:120 src/pwck.c:120
+#: src/grpck.c:119 src/pwck.c:119
 msgid "No"
 msgstr "Nie"
 
-#: src/grpck.c:235 src/grpck.c:243 src/pwck.c:217 src/pwck.c:226
+#: src/grpck.c:234 src/grpck.c:242 src/pwck.c:216 src/pwck.c:225
 #, c-format
 msgid "%s: cannot lock file %s\n"
 msgstr "%s: nie mogê zablokowaæ pliku %s\n"
 
-#: src/grpck.c:258 src/grpck.c:266 src/mkpasswd.c:217 src/pwck.c:242
-#: src/pwck.c:251
+#: src/grpck.c:257 src/grpck.c:265 src/mkpasswd.c:216 src/pwck.c:241
+#: src/pwck.c:250
 #, c-format
 msgid "%s: cannot open file %s\n"
 msgstr "%s: nie mogê otworzyæ pliku %s\n"
@@ -1064,13 +1064,13 @@ msgstr "%s: nie mog
 #. * Tell the user this entire line is bogus and
 #. * ask them to delete it.
 #.
-#: src/grpck.c:299
+#: src/grpck.c:298
 msgid "invalid group file entry\n"
 msgstr "nieprawid³owy wpis do pliku grup\n"
 
-#: src/grpck.c:300 src/grpck.c:363 src/grpck.c:455 src/grpck.c:518
-#: src/grpck.c:535 src/pwck.c:287 src/pwck.c:349 src/pwck.c:456 src/pwck.c:518
-#: src/pwck.c:542
+#: src/grpck.c:299 src/grpck.c:362 src/grpck.c:454 src/grpck.c:517
+#: src/grpck.c:534 src/pwck.c:286 src/pwck.c:348 src/pwck.c:455 src/pwck.c:517
+#: src/pwck.c:541
 #, c-format
 msgid "delete line `%s'? "
 msgstr "usun±c liniê `%s'? "
@@ -1079,26 +1079,26 @@ msgstr "usun
 #. * Tell the user this entry is a duplicate of
 #. * another and ask them to delete it.
 #.
-#: src/grpck.c:362
+#: src/grpck.c:361
 msgid "duplicate group entry\n"
 msgstr "duplikat wpisu grup\n"
 
-#: src/grpck.c:379
+#: src/grpck.c:378
 #, c-format
 msgid "invalid group name `%s'\n"
 msgstr "nieprawid³owa nazwa grupy `%s'\n"
 
-#: src/grpck.c:389
+#: src/grpck.c:388
 #, c-format
 msgid "group %s: bad GID (%d)\n"
 msgstr "grupa %s: z³y GID (%d)\n"
 
-#: src/grpck.c:415
+#: src/grpck.c:414
 #, c-format
 msgid "group %s: no user %s\n"
 msgstr "grupa %s: nie ma u¿ytkownika %s\n"
 
-#: src/grpck.c:417 src/grpck.c:586
+#: src/grpck.c:416 src/grpck.c:585
 #, c-format
 msgid "delete member `%s'? "
 msgstr "skasowaæ cz³onka `%s'? "
@@ -1107,7 +1107,7 @@ msgstr "skasowa
 #. * Tell the user this entire line is bogus and
 #. * ask them to delete it.
 #.
-#: src/grpck.c:454
+#: src/grpck.c:453
 msgid "invalid shadow group file entry\n"
 msgstr "nieprawid³owy wpis do pliku z ukrytymi has³ami\n"
 
@@ -1115,65 +1115,65 @@ msgstr "nieprawid
 #. * Tell the user this entry is a duplicate of
 #. * another and ask them to delete it.
 #.
-#: src/grpck.c:517
+#: src/grpck.c:516
 msgid "duplicate shadow group entry\n"
 msgstr "duplikuj±cy siê wpis w pliku  ukrytych grup\n"
 
-#: src/grpck.c:534
+#: src/grpck.c:533
 msgid "no matching group file entry\n"
 msgstr "brak pasuj±cego wpisu w pliku grup\n"
 
-#: src/grpck.c:554
+#: src/grpck.c:553
 #, c-format
 msgid "shadow group %s: no administrative user %s\n"
 msgstr "ukryta grupa %s: brak u¿ytkownika administracyjnego %s\n"
 
-#: src/grpck.c:556
+#: src/grpck.c:555
 #, c-format
 msgid "delete administrative member `%s'? "
 msgstr "usun±æ cz³onka administracyjnego `%s'? "
 
-#: src/grpck.c:584
+#: src/grpck.c:583
 #, c-format
 msgid "shadow group %s: no user %s\n"
 msgstr "ukryta grupa %s: nie ma u¿ytkownika %s\n"
 
-#: src/grpck.c:611 src/grpck.c:617 src/pwck.c:573 src/pwck.c:581
+#: src/grpck.c:610 src/grpck.c:616 src/pwck.c:572 src/pwck.c:580
 #, c-format
 msgid "%s: cannot update file %s\n"
 msgstr "%s: nie mogê zaktualizowaæ pliku %s\n"
 
-#: src/grpck.c:641 src/pwck.c:607
+#: src/grpck.c:640 src/pwck.c:606
 #, c-format
 msgid "%s: the files have been updated; run mkpasswd\n"
 msgstr "%s: pliki zosta³y zaktualizowane; uruchom mkpasswd\n"
 
-#: src/grpck.c:642 src/grpck.c:646 src/pwck.c:608 src/pwck.c:612
+#: src/grpck.c:641 src/grpck.c:645 src/pwck.c:607 src/pwck.c:611
 #, c-format
 msgid "%s: no changes\n"
 msgstr "%s: bez zmian\n"
 
-#: src/grpck.c:645 src/pwck.c:611
+#: src/grpck.c:644 src/pwck.c:610
 #, c-format
 msgid "%s: the files have been updated\n"
 msgstr "%s: pliku zost³y zaktualizowane\n"
 
-#: src/grpconv.c:63 src/grpunconv.c:64
+#: src/grpconv.c:62 src/grpunconv.c:63
 #, c-format
 msgid "%s: can't lock group file\n"
 msgstr "%s: nie mogê zablokowaæ pliku z grupami\n"
 
-#: src/grpconv.c:68 src/grpunconv.c:69
+#: src/grpconv.c:67 src/grpunconv.c:68
 #, c-format
 msgid "%s: can't open group file\n"
 msgstr "%s: nie mogê otworzyæ pliku z grupami\n"
 
-#: src/grpconv.c:73 src/grpunconv.c:74
+#: src/grpconv.c:72 src/grpunconv.c:73
 #, 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:78 src/grpunconv.c:79
+#: src/grpconv.c:77 src/grpunconv.c:78
 #, c-format
 msgid "%s: can't open shadow group file\n"
 msgstr "%s: nie mogê otworzyæ pliku z przes³oniêtymi grupami\n"
@@ -1181,85 +1181,85 @@ msgstr "%s: nie mog
 #.
 #. * This shouldn't happen (the entry exists) but...
 #.
-#: src/grpconv.c:94
+#: src/grpconv.c:93
 #, c-format
 msgid "%s: can't remove shadow group %s\n"
 msgstr "%s: nie mogê usun±æ ukrytej grupy %s\n"
 
-#: src/grpconv.c:135 src/pwconv.c:161
+#: src/grpconv.c:134 src/pwconv.c:160
 #, 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:144 src/grpunconv.c:95
+#: src/grpconv.c:143 src/grpunconv.c:94
 #, 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:151 src/grpunconv.c:103
+#: src/grpconv.c:150 src/grpunconv.c:102
 #, c-format
 msgid "%s: can't update shadow group file\n"
 msgstr "%s: nie mogê zaktualizowaæ pliku z ukrytymi grupami\n"
 
-#: src/grpconv.c:155 src/grpunconv.c:108
+#: src/grpconv.c:154 src/grpunconv.c:107
 #, c-format
 msgid "%s: can't update group file\n"
 msgstr "%s: nie mogê zaktualizowaæ pliku z grupami\n"
 
-#: src/grpconv.c:170 src/grpunconv.c:129
+#: src/grpconv.c:169 src/grpunconv.c:128
 #, c-format
 msgid "%s: not configured for shadow group support.\n"
 msgstr "%s: nie skonfigurowany dla wsparcia ukrytych grup.\n"
 
-#: src/grpunconv.c:113
+#: src/grpunconv.c:112
 #, c-format
 msgid "%s: can't delete shadow group file\n"
 msgstr "%s: nie mogê skasowaæ pliku z ukrytymi grupami\n"
 
-#: src/id.c:57
+#: src/id.c:56
 msgid "usage: id [ -a ]\n"
 msgstr "u¿ycie: id [ -a ]\n"
 
-#: src/id.c:59
+#: src/id.c:58
 msgid "usage: id\n"
 msgstr "u¿ycie: id\n"
 
-#: src/id.c:119
+#: src/id.c:118
 #, c-format
 msgid "uid=%d(%s)"
 msgstr "uid=%d(%s)"
 
-#: src/id.c:121
+#: src/id.c:120
 #, c-format
 msgid "uid=%d"
 msgstr "uid=%d"
 
-#: src/id.c:125
+#: src/id.c:124
 #, c-format
 msgid " gid=%d(%s)"
 msgstr " gid=%d(%s)"
 
-#: src/id.c:127
+#: src/id.c:126
 #, c-format
 msgid " gid=%d"
 msgstr " gid=%d"
 
-#: src/id.c:137
+#: src/id.c:136
 #, c-format
 msgid " euid=%d(%s)"
 msgstr " euid=%d(%s)"
 
-#: src/id.c:139
+#: src/id.c:138
 #, c-format
 msgid " euid=%d"
 msgstr " euid=%d"
 
-#: src/id.c:144
+#: src/id.c:143
 #, c-format
 msgid " egid=%d(%s)"
 msgstr " egid=%d(%s)"
 
-#: src/id.c:146
+#: src/id.c:145
 #, c-format
 msgid " egid=%d"
 msgstr " egid=%d"
@@ -1272,42 +1272,42 @@ msgstr " egid=%d"
 #. * where "###" is a numerical value and "aaa" is the
 #. * corresponding name for each respective numerical value.
 #.
-#: src/id.c:167
+#: src/id.c:166
 msgid " groups="
 msgstr " grupy="
 
-#: src/lastlog.c:168
+#: src/lastlog.c:167
 msgid "Username         Port     From             Latest\n"
 msgstr "U¿ytkownik       Port     Z                Ostatnio\n"
 
-#: src/lastlog.c:170
+#: src/lastlog.c:169
 msgid "Username                Port     Latest\n"
 msgstr "U¿ytkownik             Port     Ostatnio\n"
 
-#: src/lastlog.c:184
+#: src/lastlog.c:183
 msgid "**Never logged in**"
 msgstr "**Nigdy nie zalogowany**"
 
-#: src/login.c:199
+#: src/login.c:198
 #, c-format
 msgid "usage: %s [-p] [name]\n"
 msgstr "u¿ycie: %s [-p] [nazwa]\n"
 
-#: src/login.c:202
+#: src/login.c:201
 #, c-format
 msgid "       %s [-p] [-h host] [-f name]\n"
 msgstr "       %s [-p] [-h host] [-f nazwa]\n"
 
-#: src/login.c:204
+#: src/login.c:203
 #, c-format
 msgid "       %s [-p] -r host\n"
 msgstr "       %s [-p] -r host\n"
 
-#: src/login.c:287
+#: src/login.c:286
 msgid "Invalid login time\n"
 msgstr "Nieprawid³owy czas logowania\n"
 
-#: src/login.c:342
+#: src/login.c:341
 msgid ""
 "\n"
 "System closed for routine maintenance\n"
@@ -1315,7 +1315,7 @@ msgstr ""
 "\n"
 "System zamkniêty do rutynowej konserwacji.\n"
 
-#: src/login.c:352
+#: src/login.c:351
 msgid ""
 "\n"
 "[Disconnect bypassed -- root login allowed.]\n"
@@ -1323,7 +1323,7 @@ msgstr ""
 "\n"
 "[Roz³±czenie pominiête -- zezwolenie na logowanie siê root-a.]\n"
 
-#: src/login.c:391
+#: src/login.c:390
 #, c-format
 msgid ""
 "\n"
@@ -1342,7 +1342,7 @@ msgstr " na `%s.100s' z `%.200s'"
 msgid " on `%.100s'"
 msgstr " na `%.100s'"
 
-#: src/login.c:807
+#: src/login.c:834
 #, c-format
 msgid ""
 "\n"
@@ -1351,34 +1351,34 @@ msgstr ""
 "\n"
 "%s login: "
 
-#: src/login.c:809
+#: src/login.c:836
 msgid "login: "
 msgstr "login: "
 
-#: src/login.c:991 src/sulogin.c:233
+#: src/login.c:1026 src/sulogin.c:231
 msgid "Login incorrect"
 msgstr "Nieprawid³owe logowanie"
 
-#: src/login.c:1163
+#: src/login.c:1213
 msgid "Warning: login re-enabled after temporary lockout.\n"
 msgstr "Ostrze¿enie: logowanie ponownie odblokowanie po czasowej blokadzie.\n"
 
-#: src/login.c:1173
+#: src/login.c:1223
 #, c-format
 msgid "Last login: %s on %s"
 msgstr "Ostatnie logowanie: %s na %s"
 
-#: src/login.c:1176
+#: src/login.c:1226
 #, c-format
 msgid "Last login: %.19s on %s"
 msgstr "Ostatnie logowanie: %s na %s"
 
-#: src/login.c:1181
+#: src/login.c:1231
 #, c-format
 msgid " from %.*s"
 msgstr " z %.*s"
 
-#: src/login.c:1246
+#: src/login.c:1303
 msgid "Starting rad_login\n"
 msgstr "Startujê rad_login\n"
 
@@ -1388,191 +1388,191 @@ 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:246 src/mkpasswd.c:250
+#: src/mkpasswd.c:245 src/mkpasswd.c:249
 #, c-format
 msgid "%s: cannot overwrite file %s\n"
 msgstr "%s: nie mogê nadpisaæ pliku %s\n"
 
-#: src/mkpasswd.c:264
+#: src/mkpasswd.c:263
 #, 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:297
+#: src/mkpasswd.c:296
 #, c-format
 msgid "%s: the beginning with "
 msgstr "%s: rozpoczyna siê od "
 
-#: src/mkpasswd.c:322
+#: src/mkpasswd.c:321
 #, c-format
 msgid "%s: error parsing line \"%s\"\n"
 msgstr "%s: b³±d podczas przetwarzania lini \"%s\"\n"
 
-#: src/mkpasswd.c:327 src/mkpasswd.c:329 src/mkpasswd.c:331 src/mkpasswd.c:333
+#: src/mkpasswd.c:326 src/mkpasswd.c:328 src/mkpasswd.c:330 src/mkpasswd.c:332
 msgid "adding record for name "
 msgstr "dodajê rekord do nazwy "
 
-#: src/mkpasswd.c:337 src/mkpasswd.c:342 src/mkpasswd.c:346 src/mkpasswd.c:350
+#: src/mkpasswd.c:336 src/mkpasswd.c:341 src/mkpasswd.c:345 src/mkpasswd.c:349
 #, c-format
 msgid "%s: error adding record for "
 msgstr "%s: b³±d podczas dodawania rekordu dla "
 
-#: src/mkpasswd.c:368
+#: src/mkpasswd.c:367
 #, c-format
 msgid "added %d entries, longest was %d\n"
 msgstr "dodano %d wpisów, najd³u¿szy by³ %d\n"
 
-#: src/mkpasswd.c:383
+#: 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:385
+#: 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:388
+#: src/mkpasswd.c:387
 #, c-format
 msgid "Usage: %s [ -vf ] [ -p|g ] file\n"
 msgstr "U¿ycie: %s [ -vf ] [ -p|g ] plik\n"
 
-#: src/newgrp.c:67
+#: src/newgrp.c:66
 msgid "usage: newgrp [ - ] [ group ]\n"
 msgstr "u¿ycie: newgrp [ - ] [ grupa ]\n"
 
-#: src/newgrp.c:69
+#: src/newgrp.c:68
 #, fuzzy
 msgid "usage: sg group [[-c] command ]\n"
 msgstr "u¿ycie: sg grupa [ komenda ]\n"
 
-#: src/newgrp.c:122
+#: src/newgrp.c:125
 #, c-format
 msgid "unknown uid: %d\n"
 msgstr "nieznany uid: %d\n"
 
-#: src/newgrp.c:198
+#: src/newgrp.c:201
 #, c-format
 msgid "unknown gid: %ld\n"
 msgstr "nieznany gid: %ld\n"
 
-#: src/newgrp.c:242
+#: src/newgrp.c:245
 #, c-format
 msgid "unknown gid: %d\n"
 msgstr "nieznany gid: %d\n"
 
-#: src/newgrp.c:315 src/newgrp.c:324
+#: src/newgrp.c:323 src/newgrp.c:332
 msgid "Sorry.\n"
 msgstr "Wybacz.\n"
 
-#: src/newgrp.c:356
+#: src/newgrp.c:364
 msgid "too many groups\n"
 msgstr "zbyt wiele grup\n"
 
-#: src/newusers.c:79
+#: src/newusers.c:76
 #, c-format
 msgid "Usage: %s [ input ]\n"
 msgstr "U¿ycie: %s [ wej¶cie ]\n"
 
-#: src/newusers.c:367
+#: src/newusers.c:364
 #, c-format
 msgid "%s: can't lock /etc/passwd.\n"
 msgstr "%s: nie mogê zablokowaæ /etc/passwd.\n"
 
-#: src/newusers.c:378
+#: src/newusers.c:375
 #, 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:393
+#: src/newusers.c:390
 #, c-format
 msgid "%s: can't open files\n"
 msgstr "%s: nie mogê otworzyæ plików\n"
 
-#: src/newusers.c:438
+#: src/newusers.c:435
 #, c-format
 msgid "%s: line %d: invalid line\n"
 msgstr "%s: linia %d: nieprawid³owa linia\n"
 
-#: src/newusers.c:456
+#: src/newusers.c:453
 #, c-format
 msgid "%s: line %d: can't create GID\n"
 msgstr "%s: linia %d: nie mogê utworzyæ GID\n"
 
-#: src/newusers.c:472
+#: src/newusers.c:469
 #, c-format
 msgid "%s: line %d: can't create UID\n"
 msgstr "%s: linia %d: nie mogê utworzyæ UID\n"
 
-#: src/newusers.c:484
+#: src/newusers.c:481
 #, 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:492
+#: src/newusers.c:489
 #, 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:509
+#: src/newusers.c:506
 #, c-format
 msgid "%s: line %d: mkdir failed\n"
 msgstr "%s: linia %d: mkdir nie powiod³o siê\n"
 
-#: src/newusers.c:513
+#: src/newusers.c:510
 #, c-format
 msgid "%s: line %d: chown failed\n"
 msgstr "%s: linia %d: chown nie powiod³o siê\n"
 
-#: src/newusers.c:522
+#: src/newusers.c:519
 #, c-format
 msgid "%s: line %d: can't update entry\n"
 msgstr "%s: linia %d: nie mogê zaktualizowaæ wpisu\n"
 
-#: src/newusers.c:553
+#: src/newusers.c:550
 #, c-format
 msgid "%s: error updating files\n"
 msgstr "%s: b³±d podczas aktualizowania plików\n"
 
-#: src/passwd.c:241
+#: src/passwd.c:239
 #, c-format
 msgid "usage: %s [ -f | -s ] [ name ]\n"
 msgstr "u¿ycie: %s [ -f | -s ] [ nazwa ]\n"
 
-#: src/passwd.c:244
+#: 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:247
+#: src/passwd.c:245
 #, c-format
 msgid "       %s { -l | -u | -d | -S | -e } name\n"
 msgstr "       %s { -l | -u | -d | -S | -e } nazwa\n"
 
-#: src/passwd.c:349
+#: src/passwd.c:347
 #, 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:350
+#: src/passwd.c:348
 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:356
+#: src/passwd.c:354
 msgid "Old password: "
 msgstr "Stare has³o: "
 
-#: src/passwd.c:363
+#: src/passwd.c:361
 #, c-format
 msgid "Incorrect password for `%s'\n"
 msgstr "Nieprawid³owe has³o `%s'\n"
 
-#: src/passwd.c:376
+#: src/passwd.c:374
 #, c-format
 msgid "Warning: user %s has a TCFS key.\n"
 msgstr "Ostrze¿enie: u¿ytkownik %s posiada klucz TCFS.\n"
 
-#: src/passwd.c:394
+#: src/passwd.c:392
 #, c-format
 msgid ""
 "Enter the new password (minimum of %d, maximum of %d characters)\n"
@@ -1581,15 +1581,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:401
+#: src/passwd.c:399
 msgid "New password: "
 msgstr "Nowe has³o: "
 
-#: src/passwd.c:411
+#: src/passwd.c:409
 msgid "Try again.\n"
 msgstr "Spróbuj ponownie.\n"
 
-#: src/passwd.c:420
+#: src/passwd.c:418
 msgid ""
 "\n"
 "Warning: weak password (enter it again to use it anyway).\n"
@@ -1597,81 +1597,81 @@ msgstr ""
 "\n"
 "Ostrze¿enie: s³abe has³o (jednak wpisz je ponowie je¶li chcesz go u¿yæ).\n"
 
-#: src/passwd.c:429
+#: src/passwd.c:427
 msgid "They don't match; try again.\n"
 msgstr "Nie pasuj±; spróbuj ponownie.\n"
 
-#: src/passwd.c:514 src/passwd.c:530
+#: src/passwd.c:512 src/passwd.c:528
 #, 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:558
+#: src/passwd.c:556
 #, 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:695
+#: src/passwd.c:693
 #, c-format
 msgid "%s: out of memory\n"
 msgstr "%s: brak pamiêci\n"
 
-#: src/passwd.c:847
+#: src/passwd.c:845
 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:853
+#: src/passwd.c:851
 msgid "Cannot open the TCFS key database.\n"
 msgstr "Nie mogê otworzyæ bazy kluczy TCFS.\n"
 
-#: src/passwd.c:859
+#: src/passwd.c:857
 msgid "Error updating the TCFS key database.\n"
 msgstr "B³±d podczas aktualizacji bazy kluczy TCFS.\n"
 
-#: src/passwd.c:864
+#: src/passwd.c:862
 msgid "Cannot commit TCFS changes.\n"
 msgstr "Nie mogê potwierdziæ zmian TCFS.\n"
 
-#: src/passwd.c:1071
+#: src/passwd.c:1069
 #, c-format
 msgid "%s: Cannot execute %s"
 msgstr "%s: Nie mogê wykonaæ %s"
 
-#: src/passwd.c:1178
+#: src/passwd.c:1176
 #, c-format
 msgid "%s: repository %s not supported\n"
 msgstr "%s: ropozytorium %s nie jest obs³ugiwane\n"
 
-#: src/passwd.c:1265
+#: src/passwd.c:1263
 #, c-format
 msgid "%s: Permission denied\n"
 msgstr "%s: Dostêp zabroniony\n"
 
-#: src/passwd.c:1289
+#: src/passwd.c:1287
 #, 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:1354
+#: src/passwd.c:1352
 #, c-format
 msgid "Changing password for %s\n"
 msgstr "Zmieniam has³o dla %s\n"
 
-#: src/passwd.c:1358
+#: src/passwd.c:1356
 #, c-format
 msgid "The password for %s is unchanged.\n"
 msgstr "Has³o dla %s pozostaje niezmienione.\n"
 
-#: src/passwd.c:1414
+#: src/passwd.c:1412
 msgid "Password changed.\n"
 msgstr "Has³o zmienione.\n"
 
-#: src/pwck.c:99
+#: src/pwck.c:98
 #, c-format
 msgid "Usage: %s [ -qr ] [ passwd [ shadow ] ]\n"
 msgstr "U¿ycie: %s [ -qr ] [ has³o [ shadow ] ]\n"
 
-#: src/pwck.c:101
+#: src/pwck.c:100
 #, c-format
 msgid "Usage: %s [ -qr ] [ passwd ]\n"
 msgstr "U¿ycie: %s [ -qr ] [ has³o ]\n"
@@ -1680,7 +1680,7 @@ msgstr "U
 #. * Tell the user this entire line is bogus and
 #. * ask them to delete it.
 #.
-#: src/pwck.c:286
+#: src/pwck.c:285
 msgid "invalid password file entry\n"
 msgstr "nieprawid³owy wpis do pliku z has³ami\n"
 
@@ -1688,16 +1688,16 @@ msgstr "nieprawid
 #. * Tell the user this entry is a duplicate of
 #. * another and ask them to delete it.
 #.
-#: src/pwck.c:348
+#: src/pwck.c:347
 msgid "duplicate password entry\n"
 msgstr "duplikuj±cy siê wpis w pliku z has³ami\n"
 
-#: src/pwck.c:364
+#: src/pwck.c:363
 #, c-format
 msgid "invalid user name `%s'\n"
 msgstr "nieprawid³owa nazwa u¿ytkownika `%s'\n"
 
-#: src/pwck.c:374
+#: src/pwck.c:373
 #, c-format
 msgid "user %s: bad UID (%d)\n"
 msgstr "u¿ytkownik %s: z³y UID (%d)\n"
@@ -1705,7 +1705,7 @@ msgstr "u
 #.
 #. * No primary group, just give a warning
 #.
-#: src/pwck.c:389
+#: src/pwck.c:388
 #, c-format
 msgid "user %s: no group %d\n"
 msgstr "u¿ytkownik %s: brak grupy %d\n"
@@ -1713,7 +1713,7 @@ msgstr "u
 #.
 #. * Home directory doesn't exist, give a warning
 #.
-#: src/pwck.c:404
+#: src/pwck.c:403
 #, c-format
 msgid "user %s: directory %s does not exist\n"
 msgstr "u¿ytkownik %s: katalog %s nie istnieje\n"
@@ -1721,7 +1721,7 @@ msgstr "u
 #.
 #. * Login shell doesn't exist, give a warning
 #.
-#: src/pwck.c:419
+#: src/pwck.c:418
 #, c-format
 msgid "user %s: program %s does not exist\n"
 msgstr "u¿ytkownik %s: program %s nie istnieje\n"
@@ -1730,7 +1730,7 @@ msgstr "u
 #. * Tell the user this entire line is bogus and
 #. * ask them to delete it.
 #.
-#: src/pwck.c:455
+#: src/pwck.c:454
 msgid "invalid shadow password file entry\n"
 msgstr "nieprawid³owy wpis w pliku z has³ami\n"
 
@@ -1738,7 +1738,7 @@ msgstr "nieprawid
 #. * Tell the user this entry is a duplicate of
 #. * another and ask them to delete it.
 #.
-#: src/pwck.c:517
+#: src/pwck.c:516
 msgid "duplicate shadow password entry\n"
 msgstr "duplikuj±cy siê wpis w pliku z ukrytymi has³ami\n"
 
@@ -1746,41 +1746,41 @@ msgstr "duplikuj
 #. * Tell the user this entry has no matching
 #. * /etc/passwd entry and ask them to delete it.
 #.
-#: src/pwck.c:541
+#: src/pwck.c:540
 msgid "no matching password file entry\n"
 msgstr "brak pasuj±cego wpisu w pliku z has³ami\n"
 
-#: src/pwck.c:558
+#: src/pwck.c:557
 #, 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:95 src/pwunconv.c:109
+#: src/pwconv.c:94 src/pwunconv.c:108
 #, c-format
 msgid "%s: can't lock passwd file\n"
 msgstr "%s: nie mogê zablokowaæ pliku z has³ami\n"
 
-#: src/pwconv.c:100 src/pwunconv.c:114
+#: src/pwconv.c:99 src/pwunconv.c:113
 #, c-format
 msgid "%s: can't open passwd file\n"
 msgstr "%s: nie mogê otworzyæ pliku z has³ami\n"
 
-#: src/pwconv.c:127
+#: src/pwconv.c:126
 #, 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:170
+#: src/pwconv.c:169
 #, 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:177
+#: src/pwconv.c:176
 #, c-format
 msgid "%s: can't update shadow file\n"
 msgstr "%s: nie mogê zaktualizowaæ pliku z ukrytymi has³ami\n"
 
-#: src/pwconv.c:181
+#: src/pwconv.c:180
 #, c-format
 msgid "%s: can't update passwd file\n"
 msgstr "%s: nie mogê zaktualizowaæ pliku z has³ami\n"
@@ -1790,52 +1790,52 @@ msgstr "%s: nie mog
 msgid "%s: Shadow passwords are not configured.\n"
 msgstr "%s: Przes³oniête has³a nie s± skonfigurowane.\n"
 
-#: src/pwunconv.c:172
+#: src/pwunconv.c:171
 #, 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:189
+#: src/pwunconv.c:188
 #, 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:145
+#: src/su.c:140
 msgid "Sorry."
 msgstr "Wybacz."
 
-#: src/su.c:227
+#: src/su.c:222
 #, c-format
 msgid "%s: must be run from a terminal\n"
 msgstr "%s: musisz uruchamiaæ z terminala\n"
 
-#: src/su.c:319
+#: src/su.c:311
 #, c-format
 msgid "%s: pam_start: error %d\n"
 msgstr "%s: pam_start: b³±d %d\n"
 
-#: src/su.c:345
+#: src/su.c:337
 #, c-format
 msgid "Unknown id: %s\n"
 msgstr "Nieznany id: %s\n"
 
 #. access denied (-1) or unexpected value
-#: src/su.c:380 src/su.c:395
+#: src/su.c:372 src/su.c:387
 #, 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:391
+#: src/su.c:383
 msgid "(Enter your own password.)"
 msgstr "(Wpisz swoje w³asne has³o.)"
 
-#: src/su.c:412
+#: src/su.c:404
 #, c-format
 msgid "%s: permission denied (shell).\n"
 msgstr "%s: dostêp zabroniony (pow³oka).\n"
 
-#: src/su.c:436
+#: src/su.c:428
 #, c-format
 msgid ""
 "%s: %s\n"
@@ -1844,19 +1844,19 @@ msgstr ""
 "%s: %s\n"
 "(Zignorowano)\n"
 
-#: src/su.c:605
+#: src/su.c:628
 msgid "No shell\n"
 msgstr "Brak pow³oki\n"
 
 #. must be a password file!
-#: src/sulogin.c:138
+#: src/sulogin.c:136
 msgid "No password file\n"
 msgstr "Brak pliku z has³ami\n"
 
 #.
 #. * Fail secure
 #.
-#: src/sulogin.c:180
+#: src/sulogin.c:178
 msgid "No password entry for 'root'\n"
 msgstr "Brak wpisu do bazy hase³ dla 'root'\n"
 
@@ -1865,7 +1865,7 @@ msgstr "Brak wpisu do bazy hase
 #. * given we just exit.
 #.
 #. get a password for root
-#: src/sulogin.c:194
+#: src/sulogin.c:192
 msgid ""
 "\n"
 "Type control-d to proceed with normal startup,\n"
@@ -1876,495 +1876,500 @@ msgstr ""
 "(lub podaj has³o root-a by przej¶æ do trybu utrzymania systemu):"
 
 #. make new environment active
-#: src/sulogin.c:243
+#: src/sulogin.c:241
 msgid "Entering System Maintenance Mode\n"
 msgstr "Wchodzê w tryb utrzymania systemu\n"
 
-#: src/useradd.c:244
+#: src/useradd.c:243
 #, c-format
 msgid "%s: rebuild the group database\n"
 msgstr "%s: przebuduj bazê grup\n"
 
-#: src/useradd.c:251
+#: src/useradd.c:250
 #, c-format
 msgid "%s: rebuild the shadow group database\n"
 msgstr "%s: przebuduj bazê przes³oniêtych hase³\n"
 
-#: src/useradd.c:288 src/usermod.c:941
+#: src/useradd.c:287 src/usermod.c:940
 #, c-format
 msgid "%s: invalid numeric argument `%s'\n"
 msgstr "%s: nieprawid³owy argument numeryczny `%s'\n"
 
-#: src/useradd.c:344
+#: src/useradd.c:343
 #, c-format
 msgid "%s: unknown gid %s\n"
 msgstr "%s: nieznany gid %s\n"
 
-#: src/useradd.c:351 src/useradd.c:643 src/useradd.c:1229 src/usermod.c:253
-#: src/usermod.c:1072
+#: src/useradd.c:350 src/useradd.c:642 src/useradd.c:1228 src/usermod.c:252
+#: src/usermod.c:1071
 #, c-format
 msgid "%s: unknown group %s\n"
 msgstr "%s: nieznana grupa %s\n"
 
-#: src/useradd.c:419
+#: src/useradd.c:418
 #, c-format
 msgid "group=%s,%ld  basedir=%s  skel=%s\n"
 msgstr "grupa=%s,%ld kat_baz=%s  skel=%s\n"
 
-#: src/useradd.c:422
+#: src/useradd.c:421
 #, c-format
 msgid "shell=%s  "
 msgstr "pow³oka=%s  "
 
-#: src/useradd.c:424
+#: src/useradd.c:423
 #, c-format
 msgid "inactive=%ld  expire=%s"
 msgstr "nieaktywne=%ld  wyga¶niêcie=%s"
 
-#: src/useradd.c:428
+#: src/useradd.c:427
 #, c-format
 msgid "GROUP=%ld\n"
 msgstr "GRUPA=%ld\n"
 
-#: src/useradd.c:429
+#: src/useradd.c:428
 #, c-format
 msgid "HOME=%s\n"
 msgstr "KAT_DOM=%s\n"
 
-#: src/useradd.c:431
+#: src/useradd.c:430
 #, c-format
 msgid "INACTIVE=%ld\n"
 msgstr "NIEAKTYWNE=%ld\n"
 
-#: src/useradd.c:432
+#: src/useradd.c:431
 #, c-format
 msgid "EXPIRE=%s\n"
 msgstr "WYGA¦NIÊCIE=%s\n"
 
-#: src/useradd.c:434
+#: src/useradd.c:433
 #, c-format
 msgid "SHELL=%s\n"
 msgstr "POW£OKA=%s\n"
 
-#: src/useradd.c:435
+#: src/useradd.c:434
 #, c-format
 msgid "SKEL=%s\n"
 msgstr "SKEL=%s\n"
 
-#: src/useradd.c:471
+#: src/useradd.c:470
 #, c-format
 msgid "%s: cannot create new defaults file\n"
 msgstr "%s: nie mogê utworzyæ nowego pliku ze standardowymi ustawieniami\n"
 
-#: src/useradd.c:565 src/useradd.c:576
+#: src/useradd.c:564 src/useradd.c:575
 #, c-format
 msgid "%s: rename: %s"
 msgstr "%s: zmiana nazwy: %s"
 
-#: src/useradd.c:663 src/usermod.c:273
+#: src/useradd.c:662 src/usermod.c:272
 #, c-format
 msgid "%s: group `%s' is a NIS group.\n"
 msgstr "%s: grupa `%s' jest grup± NIS.\n"
 
-#: src/useradd.c:671 src/usermod.c:281
+#: src/useradd.c:670 src/usermod.c:280
 #, c-format
 msgid "%s: too many groups specified (max %d).\n"
 msgstr "%s: podano zbyt wiele grup (maks %d).\n"
 
-#: src/useradd.c:703 src/usermod.c:313
+#: src/useradd.c:702 src/usermod.c:312
 #, 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:706
+#: src/useradd.c:705
 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:709 src/usermod.c:319
+#: src/useradd.c:708 src/usermod.c:318
 msgid "[-f inactive] [-e expire ] "
 msgstr "[-f nieaktywne] [-e utrata_wa¿no¶ci ]"
 
-#: src/useradd.c:712
+#: src/useradd.c:711
 msgid "[-A program] "
 msgstr "[-A program] "
 
-#: src/useradd.c:714 src/usermod.c:324
+#: src/useradd.c:713 src/usermod.c:323
 msgid "[-p passwd] name\n"
 msgstr "[-p has³o] nazwa\n"
 
-#: src/useradd.c:716
+#: src/useradd.c:715
 #, 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:719
+#: src/useradd.c:718
 msgid "\t\t[-f inactive] [-e expire ]\n"
 msgstr "\t\t[-f nieaktywne] [-e utrata_wa¿no¶ci ]\n"
 
-#: src/useradd.c:816 src/usermod.c:446
+#: src/useradd.c:815 src/usermod.c:445
 #, c-format
 msgid "%s: error locking group file\n"
 msgstr "%s: b³±d podczas blokowania pliku z grupami\n"
 
-#: src/useradd.c:820 src/usermod.c:451
+#: src/useradd.c:819 src/usermod.c:450
 #, c-format
 msgid "%s: error opening group file\n"
 msgstr "%s: b³±d podczas otwierania pliku z grupami\n"
 
-#: src/useradd.c:825 src/usermod.c:558
+#: src/useradd.c:824 src/usermod.c:557
 #, 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:830 src/usermod.c:564
+#: src/useradd.c:829 src/usermod.c:563
 #, c-format
 msgid "%s: error opening shadow group file\n"
 msgstr "%s: b³±d podczas otwierania pliku z ukrytymi grupami\n"
 
-#: src/useradd.c:1002
+#: src/useradd.c:1001
 #, c-format
 msgid "%s: uid %d is not unique\n"
 msgstr "%s: uid %d nie jest niepowtarzalny\n"
 
-#: src/useradd.c:1032
+#: src/useradd.c:1031
 #, c-format
 msgid "%s: can't get unique uid\n"
 msgstr "%s: nie mogê uzyskaæ niepowtarzalnego uid\n"
 
-#: src/useradd.c:1140 src/useradd.c:1284 src/usermod.c:1020 src/usermod.c:1031
-#: src/usermod.c:1041 src/usermod.c:1087 src/usermod.c:1122
+#: src/useradd.c:1139 src/useradd.c:1283 src/usermod.c:1019 src/usermod.c:1030
+#: src/usermod.c:1040 src/usermod.c:1086 src/usermod.c:1121
 #, c-format
 msgid "%s: invalid field `%s'\n"
 msgstr "%s: nieprawid³owe pole `%s'\n"
 
-#: src/useradd.c:1154
+#: src/useradd.c:1153
 #, c-format
 msgid "%s: invalid base directory `%s'\n"
 msgstr "%s: nieprawid³owy katalog bazowy `%s'\n"
 
-#: src/useradd.c:1164
+#: src/useradd.c:1163
 #, c-format
 msgid "%s: invalid comment `%s'\n"
 msgstr "%s: nieprawid³owy komentarz `%s'\n"
 
-#: src/useradd.c:1174
+#: src/useradd.c:1173
 #, c-format
 msgid "%s: invalid home directory `%s'\n"
 msgstr "%s: nieprawid³owy katalog domowy `%s'\n"
 
-#: src/useradd.c:1192 src/usermod.c:1054
+#: src/useradd.c:1191 src/usermod.c:1053
 #, c-format
 msgid "%s: invalid date `%s'\n"
 msgstr "%s: nieprawid³owa data `%s'\n"
 
-#: src/useradd.c:1204
+#: src/useradd.c:1203
 #, c-format
 msgid "%s: shadow passwords required for -e\n"
 msgstr "%s: ukryte has³a wymagane dla -e\n"
 
-#: src/useradd.c:1219
+#: src/useradd.c:1218
 #, c-format
 msgid "%s: shadow passwords required for -f\n"
 msgstr "%s: ukryte has³a wymagane dla -f\n"
 
-#: src/useradd.c:1293
+#: src/useradd.c:1292
 #, c-format
 msgid "%s: invalid shell `%s'\n"
 msgstr "%s: nieprawid³owa pow³oka `%s'\n"
 
-#: src/useradd.c:1334
+#: src/useradd.c:1333
 #, c-format
 msgid "%s: invalid user name `%s'\n"
 msgstr "%s: nieprawid³owa nazwa u¿ytkownika `%s'\n"
 
-#: src/useradd.c:1370 src/userdel.c:262 src/usermod.c:1184
+#: src/useradd.c:1369 src/userdel.c:292 src/usermod.c:1183
 #, c-format
 msgid "%s: cannot rewrite password file\n"
 msgstr "%s: nie mogê przepisaæ pliku z has³ami\n"
 
-#: src/useradd.c:1375 src/userdel.c:265 src/usermod.c:1189
+#: src/useradd.c:1374 src/userdel.c:295 src/usermod.c:1188
 #, c-format
 msgid "%s: cannot rewrite shadow password file\n"
 msgstr "%s: nie mogê przepisaæ pliku z ukrytymi has³ami\n"
 
-#: src/useradd.c:1415 src/userdel.c:329 src/usermod.c:1224
+#: src/useradd.c:1414 src/userdel.c:359 src/usermod.c:1223
 #, c-format
 msgid "%s: unable to lock password file\n"
 msgstr "%s: nie mogê zablokowaæ pliku z has³ami\n"
 
-#: src/useradd.c:1419 src/userdel.c:333 src/usermod.c:1228
+#: src/useradd.c:1418 src/userdel.c:363 src/usermod.c:1227
 #, c-format
 msgid "%s: unable to open password file\n"
 msgstr "%s: nie mogê otworzyæ pliku z has³ami\n"
 
-#: src/useradd.c:1425 src/userdel.c:338 src/usermod.c:1233
+#: src/useradd.c:1424 src/userdel.c:368 src/usermod.c:1232
 #, c-format
 msgid "%s: cannot lock shadow password file\n"
 msgstr "%s: nie mogê zablokowaæ pliku z ukrytymi has³ami\n"
 
-#: src/useradd.c:1431 src/userdel.c:343 src/usermod.c:1238
+#: src/useradd.c:1430 src/userdel.c:373 src/usermod.c:1237
 #, c-format
 msgid "%s: cannot open shadow password file\n"
 msgstr "%s: nie mogê otworzyæ pliku z ukrytymi has³ami\n"
 
-#: src/useradd.c:1530 src/usermod.c:1325
+#: src/useradd.c:1529 src/usermod.c:1324
 #, c-format
 msgid "%s: error adding authentication method\n"
 msgstr "%s: b³±d podczas dodawania metody uwierzytelniania\n"
 
-#: src/useradd.c:1553
+#: src/useradd.c:1552
 #, 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:1568
+#: src/useradd.c:1567
 #, 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:1584 src/usermod.c:1384
+#: src/useradd.c:1583 src/usermod.c:1383
 #, 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:1600 src/usermod.c:1399
+#: src/useradd.c:1599 src/usermod.c:1398
 #, 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:1632
+#: src/useradd.c:1631
 #, c-format
 msgid "%s: cannot create directory %s\n"
 msgstr "%s: nie mogê utworzyæ katalogu %s\n"
 
-#: src/useradd.c:1709 src/usermod.c:1162
+#: src/useradd.c:1708 src/usermod.c:1161
 #, c-format
 msgid "%s: user %s exists\n"
 msgstr "%s: u¿ytkownik %s istnieje\n"
 
-#: src/useradd.c:1739
+#: src/useradd.c:1738
 #, c-format
 msgid "%s: warning: CREATE_HOME not supported, please use -m instead.\n"
 msgstr ""
 
-#: src/userdel.c:128
+#: src/userdel.c:127
 #, c-format
 msgid "usage: %s [-r] name\n"
 msgstr "u¿ycie: %s [-r] nazwa\n"
 
-#: src/userdel.c:175 src/userdel.c:230
+#: src/userdel.c:178 src/userdel.c:260
 #, c-format
 msgid "%s: error updating group entry\n"
 msgstr "%s: b³±d podczas aktualizacji wpisu grupy\n"
 
-#: src/userdel.c:185 src/userdel.c:239
+#: src/userdel.c:188 src/userdel.c:269
 #, 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:270
+#: src/userdel.c:215
+#, 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:300
 #, c-format
 msgid "%s: cannot rewrite TCFS key file\n"
 msgstr "%s: nie mogê przepisaæ pliku klucza TCFS\n"
 
-#: src/userdel.c:350
+#: src/userdel.c:380
 #, c-format
 msgid "%s: cannot lock TCFS key file\n"
 msgstr "%s: nie mogê zablokowaæ pliku klucza TCFS\n"
 
-#: src/userdel.c:354
+#: src/userdel.c:384
 #, c-format
 msgid "%s: cannot open TCFS key file\n"
 msgstr "%s: nie mogê otworzyæ pliku klucza TCFS\n"
 
-#: src/userdel.c:363
+#: src/userdel.c:393
 #, c-format
 msgid "%s: cannot open group file\n"
 msgstr "%s: nie mogê otworzyæ pliku z grupami\n"
 
-#: src/userdel.c:373
+#: src/userdel.c:403
 #, 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:404 src/userdel.c:419
+#: src/userdel.c:434 src/userdel.c:449
 #, c-format
 msgid "%s: error deleting authentication\n"
 msgstr "%s: b³±d podczas usuwania informacji uwierzytelniaj±cej\n"
 
-#: src/userdel.c:428
+#: src/userdel.c:458
 #, 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:431
+#: src/userdel.c:461
 #, 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:440
+#: src/userdel.c:470
 #, c-format
 msgid "%s: error deleting TCFS entry\n"
 msgstr "%s: b³±d podczas usuwania wpisu TCFS\n"
 
-#: src/userdel.c:453
+#: src/userdel.c:483
 #, 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:472
+#: src/userdel.c:502
 #, 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:513
+#: src/userdel.c:543
 #, c-format
 msgid "%s: user %s is currently logged in\n"
 msgstr "%s: u¿ytkownik %s jest aktualnie zalogowany\n"
 
-#: src/userdel.c:630
+#: src/userdel.c:660
 #, 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:636
+#: src/userdel.c:666
 #, c-format
 msgid "%s: warning: can't remove "
 msgstr "%s: ostrze¿enie: nie mogê usun±æ "
 
-#: src/userdel.c:711 src/usermod.c:968
+#: src/userdel.c:741 src/usermod.c:967
 #, c-format
 msgid "%s: user %s does not exist\n"
 msgstr "%s: u¿ytkownik %s nie istnieje\n"
 
-#: src/userdel.c:725 src/usermod.c:984
+#: src/userdel.c:755 src/usermod.c:983
 #, c-format
 msgid "%s: user %s is a NIS user\n"
 msgstr "%s: u¿ytkownik %s jest u¿ytkownikiem NIS\n"
 
-#: src/userdel.c:762
+#: src/userdel.c:792
 #, 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:785
+#: src/userdel.c:815
 #, 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:798
+#: src/userdel.c:828
 #, c-format
 msgid "%s: error removing directory %s\n"
 msgstr "%s: b³±d podczas usuwania katalogu %s\n"
 
-#: src/usermod.c:316
+#: src/usermod.c:315
 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:322
+#: src/usermod.c:321
 msgid "[-A {DEFAULT|program},... ] "
 msgstr "[-A {DEFAULT|program},... ] "
 
-#: src/usermod.c:478
+#: src/usermod.c:477
 #, c-format
 msgid "%s: out of memory in update_group\n"
 msgstr "%s: zabrak³o pamiêci w pdate_group\n"
 
-#: src/usermod.c:601
+#: src/usermod.c:600
 #, c-format
 msgid "%s: out of memory in update_gshadow\n"
 msgstr "%s: zabrak³o pamiêci w update_gshadow\n"
 
-#: src/usermod.c:1139
+#: src/usermod.c:1138
 #, c-format
 msgid "%s: no flags given\n"
 msgstr "%s: nie podano flag\n"
 
-#: src/usermod.c:1146
+#: src/usermod.c:1145
 #, 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:1167
+#: src/usermod.c:1166
 #, c-format
 msgid "%s: uid %ld is not unique\n"
 msgstr "%s: uid %ld nie jest niepowtarzalny\n"
 
-#: src/usermod.c:1315
+#: src/usermod.c:1314
 #, c-format
 msgid "%s: error deleting authentication method\n"
 msgstr "%s: b³±d podczas usuwania metody uwierzytelniania\n"
 
-#: src/usermod.c:1335
+#: src/usermod.c:1334
 #, c-format
 msgid "%s: error changing authentication method\n"
 msgstr "%s: b³±d podczas zmiany metody uwierzytelniania\n"
 
-#: src/usermod.c:1352
+#: src/usermod.c:1351
 #, 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:1358
+#: src/usermod.c:1357
 #, 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:1366
+#: src/usermod.c:1365
 #, 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:1373
+#: src/usermod.c:1372
 #, 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:1390
+#: src/usermod.c:1389
 #, 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:1405
+#: src/usermod.c:1404
 #, 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:1436
+#: src/usermod.c:1435
 #, c-format
 msgid "%s: directory %s exists\n"
 msgstr "%s: katalog %s isnieje\n"
 
-#: src/usermod.c:1443
+#: src/usermod.c:1442
 #, c-format
 msgid "%s: can't create %s\n"
 msgstr "%s: nie mogê utworzyæ %s\n"
 
-#: src/usermod.c:1449
+#: src/usermod.c:1448
 #, c-format
 msgid "%s: can't chown %s\n"
 msgstr "%s: nie mogê zmieniæ w³a¶ciciela %s\n"
 
-#: src/usermod.c:1465
+#: src/usermod.c:1464
 #, 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:1562
+#: src/usermod.c:1561
 #, 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:1568
+#: src/usermod.c:1567
 msgid "failed to change mailbox owner"
 msgstr "nie powiod³a siê zmiana w³a¶ciciela skrzynki pocztowej"
 
-#: src/usermod.c:1575
+#: src/usermod.c:1574
 msgid "failed to rename mailbox"
 msgstr "zmiana nazwy skrzynki pocztowej nie powiod³a siê"
 
-#: src/vipw.c:103
+#: src/vipw.c:102
 #, c-format
 msgid ""
 "\n"
@@ -2373,21 +2378,21 @@ msgstr ""
 "\n"
 "%s: %s jest niezmieniony\n"
 
-#: src/vipw.c:128
+#: src/vipw.c:127
 #, fuzzy
 msgid "Couldn't lock file"
 msgstr "%s: nie mogê usun±c blokady z pliku\n"
 
-#: src/vipw.c:135
+#: src/vipw.c:134
 msgid "Couldn't make backup"
 msgstr ""
 
-#: src/vipw.c:174
+#: src/vipw.c:187
 #, 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:213
+#: src/vipw.c:226
 msgid ""
 "Usage:\n"
 "`vipw' edits /etc/passwd        `vipw -s' edits /etc/shadow\n"
index d525967a05788d70c90613e9b6982275fc1d6665..8756bdba83a5755f002d7272118c7d7427bc2ad4 100644 (file)
@@ -6,7 +6,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
-"POT-Creation-Date: 1999-08-27 21:03+0200\n"
+"POT-Creation-Date: 2000-08-26 20:28+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -109,7 +109,7 @@ msgstr ""
 msgid "You have mail."
 msgstr ""
 
-#: libmisc/obscure.c:281 src/passwd.c:311
+#: libmisc/obscure.c:281 src/passwd.c:309
 #, c-format
 msgid "Bad password: %s.  "
 msgstr ""
@@ -179,24 +179,24 @@ msgstr ""
 msgid "Dialup Password: "
 msgstr ""
 
-#: lib/getdef.c:249
+#: lib/getdef.c:253
 msgid "Could not allocate space for config info.\n"
 msgstr ""
 
 #.
 #. * Item was never found.
 #.
-#: lib/getdef.c:303
+#: lib/getdef.c:307
 #, c-format
 msgid "configuration error - unknown item '%s' (notify administrator)\n"
 msgstr ""
 
-#: lib/getdef.c:390
+#: lib/getdef.c:394
 #, c-format
 msgid "error - lookup '%s' failed\n"
 msgstr ""
 
-#: lib/getdef.c:398
+#: lib/getdef.c:402
 #, 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:297
+#: lib/pwauth.c:54 src/newgrp.c:305
 msgid "Password: "
 msgstr ""
 
@@ -333,449 +333,449 @@ msgstr ""
 msgid "Account Expires:\t"
 msgstr ""
 
-#: src/chage.c:468
+#: src/chage.c:471
 #, c-format
 msgid "%s: do not include \"l\" with other flags\n"
 msgstr ""
 
-#: src/chage.c:480 src/chage.c:592 src/login.c:529
+#: src/chage.c:483 src/chage.c:595 src/login.c:529
 #, c-format
 msgid "%s: permission denied\n"
 msgstr ""
 
-#: src/chage.c:492 src/chpasswd.c:122
+#: src/chage.c:495 src/chpasswd.c:120
 #, c-format
 msgid "%s: can't lock password file\n"
 msgstr ""
 
-#: src/chage.c:498 src/chpasswd.c:126
+#: src/chage.c:501 src/chpasswd.c:124
 #, c-format
 msgid "%s: can't open password file\n"
 msgstr ""
 
-#: src/chage.c:505
+#: src/chage.c:508
 #, c-format
 msgid "%s: unknown user: %s\n"
 msgstr ""
 
-#: src/chage.c:524
+#: src/chage.c:527
 #, c-format
 msgid "%s: can't lock shadow password file\n"
 msgstr ""
 
-#: src/chage.c:531
+#: src/chage.c:534
 #, c-format
 msgid "%s: can't open shadow password file\n"
 msgstr ""
 
-#: src/chage.c:613
+#: src/chage.c:616
 #, c-format
 msgid "Changing the aging information for %s\n"
 msgstr ""
 
-#: src/chage.c:615
+#: src/chage.c:618
 #, c-format
 msgid "%s: error changing fields\n"
 msgstr ""
 
-#: src/chage.c:642 src/chage.c:705 src/pwunconv.c:184
+#: src/chage.c:645 src/chage.c:708 src/pwunconv.c:183
 #, c-format
 msgid "%s: can't update password file\n"
 msgstr ""
 
-#: src/chage.c:672 src/pwunconv.c:179
+#: src/chage.c:675 src/pwunconv.c:178
 #, c-format
 msgid "%s: can't update shadow password file\n"
 msgstr ""
 
-#: src/chage.c:721 src/chage.c:736 src/chfn.c:572 src/chsh.c:411
-#: src/passwd.c:827 src/passwd.c:928
+#: src/chage.c:724 src/chage.c:739 src/chfn.c:571 src/chsh.c:410
+#: src/passwd.c:825 src/passwd.c:926
 msgid "Error updating the DBM password entry.\n"
 msgstr ""
 
-#: src/chage.c:753
+#: src/chage.c:756
 #, c-format
 msgid "%s: can't rewrite shadow password file\n"
 msgstr ""
 
-#: src/chage.c:767
+#: src/chage.c:770
 #, c-format
 msgid "%s: can't rewrite password file\n"
 msgstr ""
 
-#: src/chage.c:816
+#: src/chage.c:821
 #, c-format
 msgid "%s: no aging information present\n"
 msgstr ""
 
-#: src/chfn.c:108
+#: src/chfn.c:107
 #, c-format
 msgid ""
 "Usage: %s [ -f full_name ] [ -r room_no ] [ -w work_ph ]\n"
 "\t[ -h home_ph ] [ -o other ] [ user ]\n"
 msgstr ""
 
-#: src/chfn.c:112
+#: src/chfn.c:111
 #, c-format
 msgid ""
 "Usage: %s [ -f full_name ] [ -r room_no ] [ -w work_ph ] [ -h home_ph ]\n"
 msgstr ""
 
-#: src/chfn.c:164 src/chsh.c:120
+#: src/chfn.c:163 src/chsh.c:119
 msgid "Enter the new value, or press return for the default\n"
 msgstr ""
 
-#: src/chfn.c:167
+#: src/chfn.c:166
 msgid "Full Name"
 msgstr ""
 
-#: src/chfn.c:169
+#: src/chfn.c:168
 #, c-format
 msgid "\tFull Name: %s\n"
 msgstr ""
 
-#: src/chfn.c:172
+#: src/chfn.c:171
 msgid "Room Number"
 msgstr ""
 
-#: src/chfn.c:174
+#: src/chfn.c:173
 #, c-format
 msgid "\tRoom Number: %s\n"
 msgstr ""
 
-#: src/chfn.c:177
+#: src/chfn.c:176
 msgid "Work Phone"
 msgstr ""
 
-#: src/chfn.c:179
+#: src/chfn.c:178
 #, c-format
 msgid "\tWork Phone: %s\n"
 msgstr ""
 
-#: src/chfn.c:182
+#: src/chfn.c:181
 msgid "Home Phone"
 msgstr ""
 
-#: src/chfn.c:184
+#: src/chfn.c:183
 #, c-format
 msgid "\tHome Phone: %s\n"
 msgstr ""
 
-#: src/chfn.c:187
+#: src/chfn.c:186
 msgid "Other"
 msgstr ""
 
-#: src/chfn.c:300 src/chfn.c:308 src/chfn.c:316 src/chfn.c:324 src/chfn.c:332
-#: src/chfn.c:393 src/passwd.c:1228
+#: src/chfn.c:299 src/chfn.c:307 src/chfn.c:315 src/chfn.c:323 src/chfn.c:331
+#: src/chfn.c:392 src/passwd.c:1226
 #, c-format
 msgid "%s: Permission denied.\n"
 msgstr ""
 
-#: src/chfn.c:353 src/chsh.c:226 src/passwd.c:1279
+#: src/chfn.c:352 src/chsh.c:225 src/passwd.c:1277
 #, c-format
 msgid "%s: Unknown user %s\n"
 msgstr ""
 
-#: src/chfn.c:359 src/chsh.c:234 src/passwd.c:1209
+#: src/chfn.c:358 src/chsh.c:233 src/passwd.c:1207
 #, c-format
 msgid "%s: Cannot determine your user name.\n"
 msgstr ""
 
-#: src/chfn.c:375 src/chsh.c:252
+#: src/chfn.c:374 src/chsh.c:251
 #, c-format
 msgid "%s: cannot change user `%s' on NIS client.\n"
 msgstr ""
 
-#: src/chfn.c:380 src/chsh.c:259
+#: src/chfn.c:379 src/chsh.c:258
 #, c-format
 msgid "%s: `%s' is the NIS master for this client.\n"
 msgstr ""
 
-#: src/chfn.c:455
+#: src/chfn.c:454
 #, c-format
 msgid "Changing the user information for %s\n"
 msgstr ""
 
-#: src/chfn.c:464
+#: src/chfn.c:463
 #, c-format
 msgid "%s: invalid name: \"%s\"\n"
 msgstr ""
 
-#: src/chfn.c:469
+#: src/chfn.c:468
 #, c-format
 msgid "%s: invalid room number: \"%s\"\n"
 msgstr ""
 
-#: src/chfn.c:474
+#: src/chfn.c:473
 #, c-format
 msgid "%s: invalid work phone: \"%s\"\n"
 msgstr ""
 
-#: src/chfn.c:479
+#: src/chfn.c:478
 #, c-format
 msgid "%s: invalid home phone: \"%s\"\n"
 msgstr ""
 
-#: src/chfn.c:484
+#: src/chfn.c:483
 #, c-format
 msgid "%s: \"%s\" contains illegal characters\n"
 msgstr ""
 
-#: src/chfn.c:496
+#: src/chfn.c:495
 #, c-format
 msgid "%s: fields too long\n"
 msgstr ""
 
-#: src/chfn.c:511 src/chsh.c:349 src/gpasswd.c:583 src/passwd.c:1390
+#: src/chfn.c:510 src/chsh.c:348 src/gpasswd.c:582 src/passwd.c:1388
 msgid "Cannot change ID to root.\n"
 msgstr ""
 
-#: src/chfn.c:524 src/chsh.c:363 src/passwd.c:737 src/passwd.c:882
+#: src/chfn.c:523 src/chsh.c:362 src/passwd.c:735 src/passwd.c:880
 msgid "Cannot lock the password file; try again later.\n"
 msgstr ""
 
-#: src/chfn.c:530 src/chsh.c:369 src/passwd.c:742 src/passwd.c:887
+#: src/chfn.c:529 src/chsh.c:368 src/passwd.c:740 src/passwd.c:885
 msgid "Cannot open the password file.\n"
 msgstr ""
 
-#: src/chfn.c:547 src/chsh.c:384 src/passwd.c:748 src/usermod.c:1272
+#: src/chfn.c:546 src/chsh.c:383 src/passwd.c:746 src/usermod.c:1271
 #, c-format
 msgid "%s: %s not found in /etc/passwd\n"
 msgstr ""
 
-#: src/chfn.c:564 src/chsh.c:403 src/passwd.c:821 src/passwd.c:922
-#: src/passwd.c:962
+#: src/chfn.c:563 src/chsh.c:402 src/passwd.c:819 src/passwd.c:920
+#: src/passwd.c:960
 msgid "Error updating the password entry.\n"
 msgstr ""
 
-#: src/chfn.c:587 src/chsh.c:426 src/passwd.c:834 src/passwd.c:935
+#: src/chfn.c:586 src/chsh.c:425 src/passwd.c:832 src/passwd.c:933
 msgid "Cannot commit password file changes.\n"
 msgstr ""
 
-#: src/chfn.c:594 src/chsh.c:433
+#: src/chfn.c:593 src/chsh.c:432
 msgid "Cannot unlock the password file.\n"
 msgstr ""
 
-#: src/chpasswd.c:78
+#: src/chpasswd.c:76
 #, c-format
 msgid "usage: %s [-e]\n"
 msgstr ""
 
-#: src/chpasswd.c:134 src/pwconv.c:105
+#: src/chpasswd.c:132 src/pwconv.c:104
 #, c-format
 msgid "%s: can't lock shadow file\n"
 msgstr ""
 
-#: src/chpasswd.c:139 src/gpasswd.c:609 src/pwconv.c:110 src/pwunconv.c:119
-#: src/pwunconv.c:124
+#: src/chpasswd.c:137 src/gpasswd.c:608 src/pwconv.c:109 src/pwunconv.c:118
+#: src/pwunconv.c:123
 #, c-format
 msgid "%s: can't open shadow file\n"
 msgstr ""
 
-#: src/chpasswd.c:161 src/newusers.c:418
+#: src/chpasswd.c:159 src/newusers.c:415
 #, c-format
 msgid "%s: line %d: line too long\n"
 msgstr ""
 
-#: src/chpasswd.c:181
+#: src/chpasswd.c:179
 #, c-format
 msgid "%s: line %d: missing new password\n"
 msgstr ""
 
-#: src/chpasswd.c:197
+#: src/chpasswd.c:195
 #, c-format
 msgid "%s: line %d: unknown user %s\n"
 msgstr ""
 
-#: src/chpasswd.c:249
+#: src/chpasswd.c:247
 #, c-format
 msgid "%s: line %d: cannot update password entry\n"
 msgstr ""
 
-#: src/chpasswd.c:265 src/newusers.c:538
+#: src/chpasswd.c:263 src/newusers.c:535
 #, c-format
 msgid "%s: error detected, changes ignored\n"
 msgstr ""
 
-#: src/chpasswd.c:276
+#: src/chpasswd.c:274
 #, c-format
 msgid "%s: error updating shadow file\n"
 msgstr ""
 
-#: src/chpasswd.c:284
+#: src/chpasswd.c:282
 #, c-format
 msgid "%s: error updating password file\n"
 msgstr ""
 
-#: src/chsh.c:106
+#: src/chsh.c:105
 #, c-format
 msgid "Usage: %s [ -s shell ] [ name ]\n"
 msgstr ""
 
-#: src/chsh.c:121
+#: src/chsh.c:120
 msgid "Login Shell"
 msgstr ""
 
-#: src/chsh.c:275 src/chsh.c:288
+#: src/chsh.c:274 src/chsh.c:287
 #, c-format
 msgid "You may not change the shell for %s.\n"
 msgstr ""
 
-#: src/chsh.c:317
+#: src/chsh.c:316
 #, c-format
 msgid "Changing the login shell for %s\n"
 msgstr ""
 
-#: src/chsh.c:329
+#: src/chsh.c:328
 #, c-format
 msgid "%s: Invalid entry: %s\n"
 msgstr ""
 
-#: src/chsh.c:334
+#: src/chsh.c:333
 #, c-format
 msgid "%s is an invalid shell.\n"
 msgstr ""
 
-#: src/dpasswd.c:71
+#: src/dpasswd.c:69
 #, c-format
 msgid "Usage: %s [ -(a|d) ] shell\n"
 msgstr ""
 
-#: src/dpasswd.c:136
+#: src/dpasswd.c:134
 msgid "Shell password: "
 msgstr ""
 
-#: src/dpasswd.c:142
+#: src/dpasswd.c:140
 msgid "re-enter Shell password: "
 msgstr ""
 
-#: src/dpasswd.c:149
+#: src/dpasswd.c:147
 #, c-format
 msgid "%s: Passwords do not match, try again.\n"
 msgstr ""
 
-#: src/dpasswd.c:169
+#: src/dpasswd.c:167
 #, c-format
 msgid "%s: can't create %s"
 msgstr ""
 
-#: src/dpasswd.c:174
+#: src/dpasswd.c:172
 #, c-format
 msgid "%s: can't open %s"
 msgstr ""
 
-#: src/dpasswd.c:202
+#: src/dpasswd.c:200
 #, c-format
 msgid "%s: Shell %s not found.\n"
 msgstr ""
 
-#: src/expiry.c:85
+#: src/expiry.c:84
 msgid "Usage: expiry { -f | -c }\n"
 msgstr ""
 
-#: src/expiry.c:138
+#: src/expiry.c:137
 #, c-format
 msgid "%s: WARNING!  Must be set-UID root!\n"
 msgstr ""
 
-#: src/expiry.c:149
+#: src/expiry.c:148
 #, c-format
 msgid "%s: unknown user\n"
 msgstr ""
 
-#: src/faillog.c:80
+#: src/faillog.c:79
 #, c-format
 msgid "usage: %s [-a|-u user] [-m max] [-r] [-t days] [-l locksecs]\n"
 msgstr ""
 
-#: src/faillog.c:135 src/lastlog.c:95
+#: src/faillog.c:134 src/lastlog.c:94
 #, c-format
 msgid "Unknown User: %s\n"
 msgstr ""
 
-#: src/faillog.c:216
+#: src/faillog.c:215
 msgid "Username   Failures  Maximum  Latest\n"
 msgstr ""
 
-#: src/faillog.c:233
+#: src/faillog.c:232
 #, c-format
 msgid "  %s on %s"
 msgstr ""
 
-#: src/faillog.c:237
+#: src/faillog.c:236
 #, c-format
 msgid " [%lds left]"
 msgstr ""
 
-#: src/faillog.c:240
+#: src/faillog.c:239
 #, c-format
 msgid " [%lds lock]"
 msgstr ""
 
-#: src/gpasswd.c:91
+#: src/gpasswd.c:89
 #, c-format
 msgid "usage: %s [-r|-R] group\n"
 msgstr ""
 
-#: src/gpasswd.c:92
+#: src/gpasswd.c:90
 #, c-format
 msgid "       %s [-a user] group\n"
 msgstr ""
 
-#: src/gpasswd.c:93
+#: src/gpasswd.c:91
 #, c-format
 msgid "       %s [-d user] group\n"
 msgstr ""
 
-#: src/gpasswd.c:95
+#: src/gpasswd.c:93
 #, c-format
 msgid "       %s [-A user,...] [-M user,...] group\n"
 msgstr ""
 
-#: src/gpasswd.c:98
+#: src/gpasswd.c:96
 #, c-format
 msgid "       %s [-M user,...] group\n"
 msgstr ""
 
-#: src/gpasswd.c:162 src/gpasswd.c:247
+#: src/gpasswd.c:160 src/gpasswd.c:245
 #, c-format
 msgid "%s: unknown user %s\n"
 msgstr ""
 
-#: src/gpasswd.c:174
+#: src/gpasswd.c:172
 msgid "Permission denied.\n"
 msgstr ""
 
-#: src/gpasswd.c:259
+#: src/gpasswd.c:257
 #, c-format
 msgid "%s: shadow group passwords required for -A\n"
 msgstr ""
 
-#: src/gpasswd.c:310
+#: src/gpasswd.c:308
 msgid "Who are you?\n"
 msgstr ""
 
-#: src/gpasswd.c:330 src/newgrp.c:247
+#: src/gpasswd.c:328 src/newgrp.c:251
 #, c-format
 msgid "unknown group: %s\n"
 msgstr ""
 
-#: src/gpasswd.c:438
+#: src/gpasswd.c:436
 #, c-format
 msgid "Adding user %s to group %s\n"
 msgstr ""
 
-#: src/gpasswd.c:455
+#: src/gpasswd.c:453
 #, c-format
 msgid "Removing user %s from group %s\n"
 msgstr ""
 
-#: src/gpasswd.c:468
+#: src/gpasswd.c:466
 #, c-format
 msgid "%s: unknown member %s\n"
 msgstr ""
 
-#: src/gpasswd.c:515
+#: src/gpasswd.c:513
 #, c-format
 msgid "%s: Not a tty\n"
 msgstr ""
@@ -787,105 +787,105 @@ msgstr ""
 #. * the old password since the invoker is either the group
 #. * owner, or root.
 #.
-#: src/gpasswd.c:537
+#: src/gpasswd.c:535
 #, c-format
 msgid "Changing the password for group %s\n"
 msgstr ""
 
-#: src/gpasswd.c:540
+#: src/gpasswd.c:538
 msgid "New Password: "
 msgstr ""
 
-#: src/gpasswd.c:545 src/passwd.c:424
+#: src/gpasswd.c:543 src/passwd.c:422
 msgid "Re-enter new password: "
 msgstr ""
 
-#: src/gpasswd.c:557
+#: src/gpasswd.c:555
 msgid "They don't match; try again"
 msgstr ""
 
-#: src/gpasswd.c:561
+#: src/gpasswd.c:559
 #, c-format
 msgid "%s: Try again later\n"
 msgstr ""
 
-#: src/gpasswd.c:591
+#: src/gpasswd.c:590
 #, c-format
 msgid "%s: can't get lock\n"
 msgstr ""
 
-#: src/gpasswd.c:597
+#: src/gpasswd.c:596
 #, c-format
 msgid "%s: can't get shadow lock\n"
 msgstr ""
 
-#: src/gpasswd.c:603
+#: src/gpasswd.c:602
 #, c-format
 msgid "%s: can't open file\n"
 msgstr ""
 
-#: src/gpasswd.c:615
+#: src/gpasswd.c:614
 #, c-format
 msgid "%s: can't update entry\n"
 msgstr ""
 
-#: src/gpasswd.c:621
+#: src/gpasswd.c:620
 #, c-format
 msgid "%s: can't update shadow entry\n"
 msgstr ""
 
-#: src/gpasswd.c:627
+#: src/gpasswd.c:626
 #, c-format
 msgid "%s: can't re-write file\n"
 msgstr ""
 
-#: src/gpasswd.c:633
+#: src/gpasswd.c:632
 #, c-format
 msgid "%s: can't re-write shadow file\n"
 msgstr ""
 
-#: src/gpasswd.c:641
+#: src/gpasswd.c:640
 #, c-format
 msgid "%s: can't unlock file\n"
 msgstr ""
 
-#: src/gpasswd.c:646
+#: src/gpasswd.c:645
 #, c-format
 msgid "%s: can't update DBM files\n"
 msgstr ""
 
-#: src/gpasswd.c:653
+#: src/gpasswd.c:652
 #, c-format
 msgid "%s: can't update DBM shadow files\n"
 msgstr ""
 
-#: src/groupadd.c:106
+#: src/groupadd.c:105
 msgid "usage: groupadd [-g gid [-o]] group\n"
 msgstr ""
 
-#: src/groupadd.c:174 src/groupadd.c:197 src/groupmod.c:184 src/groupmod.c:231
-#: src/useradd.c:932 src/usermod.c:513 src/usermod.c:649
+#: src/groupadd.c:173 src/groupadd.c:196 src/groupmod.c:183 src/groupmod.c:230
+#: src/useradd.c:931 src/usermod.c:512 src/usermod.c:648
 #, c-format
 msgid "%s: error adding new group entry\n"
 msgstr ""
 
-#: src/groupadd.c:184 src/groupadd.c:207 src/groupmod.c:200 src/useradd.c:943
-#: src/usermod.c:525 src/usermod.c:661
+#: src/groupadd.c:183 src/groupadd.c:206 src/groupmod.c:199 src/useradd.c:942
+#: src/usermod.c:524 src/usermod.c:660
 #, c-format
 msgid "%s: cannot add new dbm group entry\n"
 msgstr ""
 
-#: src/groupadd.c:259 src/useradd.c:997
+#: src/groupadd.c:258 src/useradd.c:996
 #, c-format
 msgid "%s: name %s is not unique\n"
 msgstr ""
 
-#: src/groupadd.c:274
+#: src/groupadd.c:273
 #, c-format
 msgid "%s: gid %ld is not unique\n"
 msgstr ""
 
-#: src/groupadd.c:298
+#: src/groupadd.c:297
 #, c-format
 msgid "%s: can't get unique gid\n"
 msgstr ""
@@ -893,78 +893,78 @@ msgstr ""
 #.
 #. * All invalid group names land here.
 #.
-#: src/groupadd.c:322 src/groupmod.c:342
+#: src/groupadd.c:321 src/groupmod.c:341
 #, c-format
 msgid "%s: %s is a not a valid group name\n"
 msgstr ""
 
-#: src/groupadd.c:351 src/groupmod.c:368
+#: src/groupadd.c:350 src/groupmod.c:367
 #, c-format
 msgid "%s: invalid group %s\n"
 msgstr ""
 
-#: src/groupadd.c:368 src/useradd.c:1273
+#: src/groupadd.c:367 src/useradd.c:1272
 #, c-format
 msgid "%s: -O requires NAME=VALUE\n"
 msgstr ""
 
-#: src/groupadd.c:413 src/groupdel.c:168 src/groupmod.c:404 src/useradd.c:1382
-#: src/userdel.c:273 src/usermod.c:537
+#: src/groupadd.c:412 src/groupdel.c:167 src/groupmod.c:403 src/useradd.c:1381
+#: src/userdel.c:303 src/usermod.c:536
 #, c-format
 msgid "%s: cannot rewrite group file\n"
 msgstr ""
 
-#: src/groupadd.c:419 src/groupdel.c:174 src/groupmod.c:410 src/useradd.c:1390
-#: src/userdel.c:279 src/usermod.c:674
+#: src/groupadd.c:418 src/groupdel.c:173 src/groupmod.c:409 src/useradd.c:1389
+#: src/userdel.c:309 src/usermod.c:673
 #, c-format
 msgid "%s: cannot rewrite shadow group file\n"
 msgstr ""
 
-#: src/groupadd.c:438 src/groupdel.c:193 src/groupmod.c:429 src/userdel.c:359
+#: src/groupadd.c:437 src/groupdel.c:192 src/groupmod.c:428 src/userdel.c:389
 #, c-format
 msgid "%s: unable to lock group file\n"
 msgstr ""
 
-#: src/groupadd.c:442 src/groupdel.c:197 src/groupmod.c:433
+#: src/groupadd.c:441 src/groupdel.c:196 src/groupmod.c:432
 #, c-format
 msgid "%s: unable to open group file\n"
 msgstr ""
 
-#: src/groupadd.c:447 src/groupdel.c:202 src/groupmod.c:438 src/userdel.c:368
+#: src/groupadd.c:446 src/groupdel.c:201 src/groupmod.c:437 src/userdel.c:398
 #, c-format
 msgid "%s: unable to lock shadow group file\n"
 msgstr ""
 
-#: src/groupadd.c:452 src/groupdel.c:207 src/groupmod.c:443
+#: src/groupadd.c:451 src/groupdel.c:206 src/groupmod.c:442
 #, c-format
 msgid "%s: unable to open shadow group file\n"
 msgstr ""
 
-#: src/groupadd.c:519
+#: src/groupadd.c:518
 #, c-format
 msgid "%s: group %s exists\n"
 msgstr ""
 
-#: src/groupdel.c:87
+#: src/groupdel.c:86
 msgid "usage: groupdel group\n"
 msgstr ""
 
-#: src/groupdel.c:105 src/groupmod.c:188 src/groupmod.c:235
+#: src/groupdel.c:104 src/groupmod.c:187 src/groupmod.c:234
 #, c-format
 msgid "%s: error removing group entry\n"
 msgstr ""
 
-#: src/groupdel.c:117 src/groupmod.c:207
+#: src/groupdel.c:116 src/groupmod.c:206
 #, c-format
 msgid "%s: error removing group dbm entry\n"
 msgstr ""
 
-#: src/groupdel.c:132
+#: src/groupdel.c:131
 #, c-format
 msgid "%s: error removing shadow group entry\n"
 msgstr ""
 
-#: src/groupdel.c:145 src/groupmod.c:253
+#: src/groupdel.c:144 src/groupmod.c:252
 #, c-format
 msgid "%s: error removing shadow group dbm entry\n"
 msgstr ""
@@ -972,76 +972,76 @@ msgstr ""
 #.
 #. * Can't remove the group.
 #.
-#: src/groupdel.c:249
+#: src/groupdel.c:248
 #, c-format
 msgid "%s: cannot remove user's primary group.\n"
 msgstr ""
 
-#: src/groupdel.c:306 src/groupmod.c:502
+#: src/groupdel.c:305 src/groupmod.c:501
 #, c-format
 msgid "%s: group %s does not exist\n"
 msgstr ""
 
-#: src/groupdel.c:320 src/groupmod.c:518
+#: src/groupdel.c:319 src/groupmod.c:517
 #, c-format
 msgid "%s: group %s is a NIS group\n"
 msgstr ""
 
-#: src/groupdel.c:326 src/groupmod.c:524 src/userdel.c:731 src/usermod.c:990
+#: src/groupdel.c:325 src/groupmod.c:523 src/userdel.c:761 src/usermod.c:989
 #, c-format
 msgid "%s: %s is the NIS master\n"
 msgstr ""
 
-#: src/groupmod.c:106
+#: src/groupmod.c:105
 msgid "usage: groupmod [-g gid [-o]] [-n name] group\n"
 msgstr ""
 
-#: src/groupmod.c:166
+#: src/groupmod.c:165
 #, c-format
 msgid "%s: %s not found in /etc/group\n"
 msgstr ""
 
-#: src/groupmod.c:247
+#: src/groupmod.c:246
 #, c-format
 msgid "%s: cannot add new dbm shadow group entry\n"
 msgstr ""
 
-#: src/groupmod.c:300
+#: src/groupmod.c:299
 #, c-format
 msgid "%s: %ld is not a unique gid\n"
 msgstr ""
 
-#: src/groupmod.c:331
+#: src/groupmod.c:330
 #, c-format
 msgid "%s: %s is not a unique name\n"
 msgstr ""
 
-#: src/groups.c:63
+#: src/groups.c:62
 #, c-format
 msgid "unknown user %s\n"
 msgstr ""
 
-#: src/grpck.c:99
+#: src/grpck.c:98
 #, c-format
 msgid "Usage: %s [ -r ] [ group [ gshadow ] ]\n"
 msgstr ""
 
-#: src/grpck.c:101
+#: src/grpck.c:100
 #, c-format
 msgid "Usage: %s [ -r ] [ group ]\n"
 msgstr ""
 
-#: src/grpck.c:120 src/pwck.c:120
+#: src/grpck.c:119 src/pwck.c:119
 msgid "No"
 msgstr ""
 
-#: src/grpck.c:235 src/grpck.c:243 src/pwck.c:217 src/pwck.c:226
+#: src/grpck.c:234 src/grpck.c:242 src/pwck.c:216 src/pwck.c:225
 #, c-format
 msgid "%s: cannot lock file %s\n"
 msgstr ""
 
-#: src/grpck.c:258 src/grpck.c:266 src/mkpasswd.c:217 src/pwck.c:242
-#: src/pwck.c:251
+#: src/grpck.c:257 src/grpck.c:265 src/mkpasswd.c:216 src/pwck.c:241
+#: src/pwck.c:250
 #, c-format
 msgid "%s: cannot open file %s\n"
 msgstr ""
@@ -1050,13 +1050,13 @@ msgstr ""
 #. * Tell the user this entire line is bogus and
 #. * ask them to delete it.
 #.
-#: src/grpck.c:299
+#: src/grpck.c:298
 msgid "invalid group file entry\n"
 msgstr ""
 
-#: src/grpck.c:300 src/grpck.c:363 src/grpck.c:455 src/grpck.c:518
-#: src/grpck.c:535 src/pwck.c:287 src/pwck.c:349 src/pwck.c:456 src/pwck.c:518
-#: src/pwck.c:542
+#: src/grpck.c:299 src/grpck.c:362 src/grpck.c:454 src/grpck.c:517
+#: src/grpck.c:534 src/pwck.c:286 src/pwck.c:348 src/pwck.c:455 src/pwck.c:517
+#: src/pwck.c:541
 #, c-format
 msgid "delete line `%s'? "
 msgstr ""
@@ -1065,26 +1065,26 @@ msgstr ""
 #. * Tell the user this entry is a duplicate of
 #. * another and ask them to delete it.
 #.
-#: src/grpck.c:362
+#: src/grpck.c:361
 msgid "duplicate group entry\n"
 msgstr ""
 
-#: src/grpck.c:379
+#: src/grpck.c:378
 #, c-format
 msgid "invalid group name `%s'\n"
 msgstr ""
 
-#: src/grpck.c:389
+#: src/grpck.c:388
 #, c-format
 msgid "group %s: bad GID (%d)\n"
 msgstr ""
 
-#: src/grpck.c:415
+#: src/grpck.c:414
 #, c-format
 msgid "group %s: no user %s\n"
 msgstr ""
 
-#: src/grpck.c:417 src/grpck.c:586
+#: src/grpck.c:416 src/grpck.c:585
 #, c-format
 msgid "delete member `%s'? "
 msgstr ""
@@ -1093,7 +1093,7 @@ msgstr ""
 #. * Tell the user this entire line is bogus and
 #. * ask them to delete it.
 #.
-#: src/grpck.c:454
+#: src/grpck.c:453
 msgid "invalid shadow group file entry\n"
 msgstr ""
 
@@ -1101,65 +1101,65 @@ msgstr ""
 #. * Tell the user this entry is a duplicate of
 #. * another and ask them to delete it.
 #.
-#: src/grpck.c:517
+#: src/grpck.c:516
 msgid "duplicate shadow group entry\n"
 msgstr ""
 
-#: src/grpck.c:534
+#: src/grpck.c:533
 msgid "no matching group file entry\n"
 msgstr ""
 
-#: src/grpck.c:554
+#: src/grpck.c:553
 #, c-format
 msgid "shadow group %s: no administrative user %s\n"
 msgstr ""
 
-#: src/grpck.c:556
+#: src/grpck.c:555
 #, c-format
 msgid "delete administrative member `%s'? "
 msgstr ""
 
-#: src/grpck.c:584
+#: src/grpck.c:583
 #, c-format
 msgid "shadow group %s: no user %s\n"
 msgstr ""
 
-#: src/grpck.c:611 src/grpck.c:617 src/pwck.c:573 src/pwck.c:581
+#: src/grpck.c:610 src/grpck.c:616 src/pwck.c:572 src/pwck.c:580
 #, c-format
 msgid "%s: cannot update file %s\n"
 msgstr ""
 
-#: src/grpck.c:641 src/pwck.c:607
+#: src/grpck.c:640 src/pwck.c:606
 #, c-format
 msgid "%s: the files have been updated; run mkpasswd\n"
 msgstr ""
 
-#: src/grpck.c:642 src/grpck.c:646 src/pwck.c:608 src/pwck.c:612
+#: src/grpck.c:641 src/grpck.c:645 src/pwck.c:607 src/pwck.c:611
 #, c-format
 msgid "%s: no changes\n"
 msgstr ""
 
-#: src/grpck.c:645 src/pwck.c:611
+#: src/grpck.c:644 src/pwck.c:610
 #, c-format
 msgid "%s: the files have been updated\n"
 msgstr ""
 
-#: src/grpconv.c:63 src/grpunconv.c:64
+#: src/grpconv.c:62 src/grpunconv.c:63
 #, c-format
 msgid "%s: can't lock group file\n"
 msgstr ""
 
-#: src/grpconv.c:68 src/grpunconv.c:69
+#: src/grpconv.c:67 src/grpunconv.c:68
 #, c-format
 msgid "%s: can't open group file\n"
 msgstr ""
 
-#: src/grpconv.c:73 src/grpunconv.c:74
+#: src/grpconv.c:72 src/grpunconv.c:73
 #, c-format
 msgid "%s: can't lock shadow group file\n"
 msgstr ""
 
-#: src/grpconv.c:78 src/grpunconv.c:79
+#: src/grpconv.c:77 src/grpunconv.c:78
 #, c-format
 msgid "%s: can't open shadow group file\n"
 msgstr ""
@@ -1167,85 +1167,85 @@ msgstr ""
 #.
 #. * This shouldn't happen (the entry exists) but...
 #.
-#: src/grpconv.c:94
+#: src/grpconv.c:93
 #, c-format
 msgid "%s: can't remove shadow group %s\n"
 msgstr ""
 
-#: src/grpconv.c:135 src/pwconv.c:161
+#: src/grpconv.c:134 src/pwconv.c:160
 #, c-format
 msgid "%s: can't update shadow entry for %s\n"
 msgstr ""
 
-#: src/grpconv.c:144 src/grpunconv.c:95
+#: src/grpconv.c:143 src/grpunconv.c:94
 #, c-format
 msgid "%s: can't update entry for group %s\n"
 msgstr ""
 
-#: src/grpconv.c:151 src/grpunconv.c:103
+#: src/grpconv.c:150 src/grpunconv.c:102
 #, c-format
 msgid "%s: can't update shadow group file\n"
 msgstr ""
 
-#: src/grpconv.c:155 src/grpunconv.c:108
+#: src/grpconv.c:154 src/grpunconv.c:107
 #, c-format
 msgid "%s: can't update group file\n"
 msgstr ""
 
-#: src/grpconv.c:170 src/grpunconv.c:129
+#: src/grpconv.c:169 src/grpunconv.c:128
 #, c-format
 msgid "%s: not configured for shadow group support.\n"
 msgstr ""
 
-#: src/grpunconv.c:113
+#: src/grpunconv.c:112
 #, c-format
 msgid "%s: can't delete shadow group file\n"
 msgstr ""
 
-#: src/id.c:57
+#: src/id.c:56
 msgid "usage: id [ -a ]\n"
 msgstr ""
 
-#: src/id.c:59
+#: src/id.c:58
 msgid "usage: id\n"
 msgstr ""
 
-#: src/id.c:119
+#: src/id.c:118
 #, c-format
 msgid "uid=%d(%s)"
 msgstr ""
 
-#: src/id.c:121
+#: src/id.c:120
 #, c-format
 msgid "uid=%d"
 msgstr ""
 
-#: src/id.c:125
+#: src/id.c:124
 #, c-format
 msgid " gid=%d(%s)"
 msgstr ""
 
-#: src/id.c:127
+#: src/id.c:126
 #, c-format
 msgid " gid=%d"
 msgstr ""
 
-#: src/id.c:137
+#: src/id.c:136
 #, c-format
 msgid " euid=%d(%s)"
 msgstr ""
 
-#: src/id.c:139
+#: src/id.c:138
 #, c-format
 msgid " euid=%d"
 msgstr ""
 
-#: src/id.c:144
+#: src/id.c:143
 #, c-format
 msgid " egid=%d(%s)"
 msgstr ""
 
-#: src/id.c:146
+#: src/id.c:145
 #, c-format
 msgid " egid=%d"
 msgstr ""
@@ -1258,54 +1258,54 @@ msgstr ""
 #. * where "###" is a numerical value and "aaa" is the
 #. * corresponding name for each respective numerical value.
 #.
-#: src/id.c:167
+#: src/id.c:166
 msgid " groups="
 msgstr ""
 
-#: src/lastlog.c:168
+#: src/lastlog.c:167
 msgid "Username         Port     From             Latest\n"
 msgstr ""
 
-#: src/lastlog.c:170
+#: src/lastlog.c:169
 msgid "Username                Port     Latest\n"
 msgstr ""
 
-#: src/lastlog.c:184
+#: src/lastlog.c:183
 msgid "**Never logged in**"
 msgstr ""
 
-#: src/login.c:199
+#: src/login.c:198
 #, c-format
 msgid "usage: %s [-p] [name]\n"
 msgstr ""
 
-#: src/login.c:202
+#: src/login.c:201
 #, c-format
 msgid "       %s [-p] [-h host] [-f name]\n"
 msgstr ""
 
-#: src/login.c:204
+#: src/login.c:203
 #, c-format
 msgid "       %s [-p] -r host\n"
 msgstr ""
 
-#: src/login.c:287
+#: src/login.c:286
 msgid "Invalid login time\n"
 msgstr ""
 
-#: src/login.c:342
+#: src/login.c:341
 msgid ""
 "\n"
 "System closed for routine maintenance\n"
 msgstr ""
 
-#: src/login.c:352
+#: src/login.c:351
 msgid ""
 "\n"
 "[Disconnect bypassed -- root login allowed.]\n"
 msgstr ""
 
-#: src/login.c:391
+#: src/login.c:390
 #, c-format
 msgid ""
 "\n"
@@ -1322,41 +1322,41 @@ msgstr ""
 msgid " on `%.100s'"
 msgstr ""
 
-#: src/login.c:807
+#: src/login.c:834
 #, c-format
 msgid ""
 "\n"
 "%s login: "
 msgstr ""
 
-#: src/login.c:809
+#: src/login.c:836
 msgid "login: "
 msgstr ""
 
-#: src/login.c:991 src/sulogin.c:233
+#: src/login.c:1026 src/sulogin.c:231
 msgid "Login incorrect"
 msgstr ""
 
-#: src/login.c:1163
+#: src/login.c:1213
 msgid "Warning: login re-enabled after temporary lockout.\n"
 msgstr ""
 
-#: src/login.c:1173
+#: src/login.c:1223
 #, c-format
 msgid "Last login: %s on %s"
 msgstr ""
 
-#: src/login.c:1176
+#: src/login.c:1226
 #, c-format
 msgid "Last login: %.19s on %s"
 msgstr ""
 
-#: src/login.c:1181
+#: src/login.c:1231
 #, c-format
 msgid " from %.*s"
 msgstr ""
 
-#: src/login.c:1246
+#: src/login.c:1303
 msgid "Starting rad_login\n"
 msgstr ""
 
@@ -1365,285 +1365,285 @@ msgstr ""
 msgid "%s: no DBM database on system - no action performed\n"
 msgstr ""
 
-#: src/mkpasswd.c:246 src/mkpasswd.c:250
+#: src/mkpasswd.c:245 src/mkpasswd.c:249
 #, c-format
 msgid "%s: cannot overwrite file %s\n"
 msgstr ""
 
-#: src/mkpasswd.c:264
+#: src/mkpasswd.c:263
 #, c-format
 msgid "%s: cannot open DBM files for %s\n"
 msgstr ""
 
-#: src/mkpasswd.c:297
+#: src/mkpasswd.c:296
 #, c-format
 msgid "%s: the beginning with "
 msgstr ""
 
-#: src/mkpasswd.c:322
+#: src/mkpasswd.c:321
 #, c-format
 msgid "%s: error parsing line \"%s\"\n"
 msgstr ""
 
-#: src/mkpasswd.c:327 src/mkpasswd.c:329 src/mkpasswd.c:331 src/mkpasswd.c:333
+#: src/mkpasswd.c:326 src/mkpasswd.c:328 src/mkpasswd.c:330 src/mkpasswd.c:332
 msgid "adding record for name "
 msgstr ""
 
-#: src/mkpasswd.c:337 src/mkpasswd.c:342 src/mkpasswd.c:346 src/mkpasswd.c:350
+#: src/mkpasswd.c:336 src/mkpasswd.c:341 src/mkpasswd.c:345 src/mkpasswd.c:349
 #, c-format
 msgid "%s: error adding record for "
 msgstr ""
 
-#: src/mkpasswd.c:368
+#: src/mkpasswd.c:367
 #, c-format
 msgid "added %d entries, longest was %d\n"
 msgstr ""
 
-#: src/mkpasswd.c:383
+#: src/mkpasswd.c:382
 #, c-format
 msgid "Usage: %s [ -vf ] [ -p|g|sp|sg ] file\n"
 msgstr ""
 
-#: src/mkpasswd.c:385
+#: src/mkpasswd.c:384
 #, c-format
 msgid "Usage: %s [ -vf ] [ -p|g|sp ] file\n"
 msgstr ""
 
-#: src/mkpasswd.c:388
+#: src/mkpasswd.c:387
 #, c-format
 msgid "Usage: %s [ -vf ] [ -p|g ] file\n"
 msgstr ""
 
-#: src/newgrp.c:67
+#: src/newgrp.c:66
 msgid "usage: newgrp [ - ] [ group ]\n"
 msgstr ""
 
-#: src/newgrp.c:69
+#: src/newgrp.c:68
 msgid "usage: sg group [[-c] command ]\n"
 msgstr ""
 
-#: src/newgrp.c:122
+#: src/newgrp.c:125
 #, c-format
 msgid "unknown uid: %d\n"
 msgstr ""
 
-#: src/newgrp.c:198
+#: src/newgrp.c:201
 #, c-format
 msgid "unknown gid: %ld\n"
 msgstr ""
 
-#: src/newgrp.c:242
+#: src/newgrp.c:245
 #, c-format
 msgid "unknown gid: %d\n"
 msgstr ""
 
-#: src/newgrp.c:315 src/newgrp.c:324
+#: src/newgrp.c:323 src/newgrp.c:332
 msgid "Sorry.\n"
 msgstr ""
 
-#: src/newgrp.c:356
+#: src/newgrp.c:364
 msgid "too many groups\n"
 msgstr ""
 
-#: src/newusers.c:79
+#: src/newusers.c:76
 #, c-format
 msgid "Usage: %s [ input ]\n"
 msgstr ""
 
-#: src/newusers.c:367
+#: src/newusers.c:364
 #, c-format
 msgid "%s: can't lock /etc/passwd.\n"
 msgstr ""
 
-#: src/newusers.c:378
+#: src/newusers.c:375
 #, c-format
 msgid "%s: can't lock files, try again later\n"
 msgstr ""
 
-#: src/newusers.c:393
+#: src/newusers.c:390
 #, c-format
 msgid "%s: can't open files\n"
 msgstr ""
 
-#: src/newusers.c:438
+#: src/newusers.c:435
 #, c-format
 msgid "%s: line %d: invalid line\n"
 msgstr ""
 
-#: src/newusers.c:456
+#: src/newusers.c:453
 #, c-format
 msgid "%s: line %d: can't create GID\n"
 msgstr ""
 
-#: src/newusers.c:472
+#: src/newusers.c:469
 #, c-format
 msgid "%s: line %d: can't create UID\n"
 msgstr ""
 
-#: src/newusers.c:484
+#: src/newusers.c:481
 #, c-format
 msgid "%s: line %d: cannot find user %s\n"
 msgstr ""
 
-#: src/newusers.c:492
+#: src/newusers.c:489
 #, c-format
 msgid "%s: line %d: can't update password\n"
 msgstr ""
 
-#: src/newusers.c:509
+#: src/newusers.c:506
 #, c-format
 msgid "%s: line %d: mkdir failed\n"
 msgstr ""
 
-#: src/newusers.c:513
+#: src/newusers.c:510
 #, c-format
 msgid "%s: line %d: chown failed\n"
 msgstr ""
 
-#: src/newusers.c:522
+#: src/newusers.c:519
 #, c-format
 msgid "%s: line %d: can't update entry\n"
 msgstr ""
 
-#: src/newusers.c:553
+#: src/newusers.c:550
 #, c-format
 msgid "%s: error updating files\n"
 msgstr ""
 
-#: src/passwd.c:241
+#: src/passwd.c:239
 #, c-format
 msgid "usage: %s [ -f | -s ] [ name ]\n"
 msgstr ""
 
-#: src/passwd.c:244
+#: src/passwd.c:242
 #, c-format
 msgid "       %s [ -x max ] [ -n min ] [ -w warn ] [ -i inact ] name\n"
 msgstr ""
 
-#: src/passwd.c:247
+#: src/passwd.c:245
 #, c-format
 msgid "       %s { -l | -u | -d | -S | -e } name\n"
 msgstr ""
 
-#: src/passwd.c:349
+#: src/passwd.c:347
 #, c-format
 msgid "User %s has a TCFS key, his old password is required.\n"
 msgstr ""
 
-#: src/passwd.c:350
+#: src/passwd.c:348
 msgid "You can use -t option to force the change.\n"
 msgstr ""
 
-#: src/passwd.c:356
+#: src/passwd.c:354
 msgid "Old password: "
 msgstr ""
 
-#: src/passwd.c:363
+#: src/passwd.c:361
 #, c-format
 msgid "Incorrect password for `%s'\n"
 msgstr ""
 
-#: src/passwd.c:376
+#: src/passwd.c:374
 #, c-format
 msgid "Warning: user %s has a TCFS key.\n"
 msgstr ""
 
-#: src/passwd.c:394
+#: src/passwd.c:392
 #, 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:401
+#: src/passwd.c:399
 msgid "New password: "
 msgstr ""
 
-#: src/passwd.c:411
+#: src/passwd.c:409
 msgid "Try again.\n"
 msgstr ""
 
-#: src/passwd.c:420
+#: src/passwd.c:418
 msgid ""
 "\n"
 "Warning: weak password (enter it again to use it anyway).\n"
 msgstr ""
 
-#: src/passwd.c:429
+#: src/passwd.c:427
 msgid "They don't match; try again.\n"
 msgstr ""
 
-#: src/passwd.c:514 src/passwd.c:530
+#: src/passwd.c:512 src/passwd.c:528
 #, c-format
 msgid "The password for %s cannot be changed.\n"
 msgstr ""
 
-#: src/passwd.c:558
+#: src/passwd.c:556
 #, c-format
 msgid "Sorry, the password for %s cannot be changed yet.\n"
 msgstr ""
 
-#: src/passwd.c:695
+#: src/passwd.c:693
 #, c-format
 msgid "%s: out of memory\n"
 msgstr ""
 
-#: src/passwd.c:847
+#: src/passwd.c:845
 msgid "Cannot lock the TCFS key database; try again later\n"
 msgstr ""
 
-#: src/passwd.c:853
+#: src/passwd.c:851
 msgid "Cannot open the TCFS key database.\n"
 msgstr ""
 
-#: src/passwd.c:859
+#: src/passwd.c:857
 msgid "Error updating the TCFS key database.\n"
 msgstr ""
 
-#: src/passwd.c:864
+#: src/passwd.c:862
 msgid "Cannot commit TCFS changes.\n"
 msgstr ""
 
-#: src/passwd.c:1071
+#: src/passwd.c:1069
 #, c-format
 msgid "%s: Cannot execute %s"
 msgstr ""
 
-#: src/passwd.c:1178
+#: src/passwd.c:1176
 #, c-format
 msgid "%s: repository %s not supported\n"
 msgstr ""
 
-#: src/passwd.c:1265
+#: src/passwd.c:1263
 #, c-format
 msgid "%s: Permission denied\n"
 msgstr ""
 
-#: src/passwd.c:1289
+#: src/passwd.c:1287
 #, c-format
 msgid "You may not change the password for %s.\n"
 msgstr ""
 
-#: src/passwd.c:1354
+#: src/passwd.c:1352
 #, c-format
 msgid "Changing password for %s\n"
 msgstr ""
 
-#: src/passwd.c:1358
+#: src/passwd.c:1356
 #, c-format
 msgid "The password for %s is unchanged.\n"
 msgstr ""
 
-#: src/passwd.c:1414
+#: src/passwd.c:1412
 msgid "Password changed.\n"
 msgstr ""
 
-#: src/pwck.c:99
+#: src/pwck.c:98
 #, c-format
 msgid "Usage: %s [ -qr ] [ passwd [ shadow ] ]\n"
 msgstr ""
 
-#: src/pwck.c:101
+#: src/pwck.c:100
 #, c-format
 msgid "Usage: %s [ -qr ] [ passwd ]\n"
 msgstr ""
@@ -1652,7 +1652,7 @@ msgstr ""
 #. * Tell the user this entire line is bogus and
 #. * ask them to delete it.
 #.
-#: src/pwck.c:286
+#: src/pwck.c:285
 msgid "invalid password file entry\n"
 msgstr ""
 
@@ -1660,16 +1660,16 @@ msgstr ""
 #. * Tell the user this entry is a duplicate of
 #. * another and ask them to delete it.
 #.
-#: src/pwck.c:348
+#: src/pwck.c:347
 msgid "duplicate password entry\n"
 msgstr ""
 
-#: src/pwck.c:364
+#: src/pwck.c:363
 #, c-format
 msgid "invalid user name `%s'\n"
 msgstr ""
 
-#: src/pwck.c:374
+#: src/pwck.c:373
 #, c-format
 msgid "user %s: bad UID (%d)\n"
 msgstr ""
@@ -1677,7 +1677,7 @@ msgstr ""
 #.
 #. * No primary group, just give a warning
 #.
-#: src/pwck.c:389
+#: src/pwck.c:388
 #, c-format
 msgid "user %s: no group %d\n"
 msgstr ""
@@ -1685,7 +1685,7 @@ msgstr ""
 #.
 #. * Home directory doesn't exist, give a warning
 #.
-#: src/pwck.c:404
+#: src/pwck.c:403
 #, c-format
 msgid "user %s: directory %s does not exist\n"
 msgstr ""
@@ -1693,7 +1693,7 @@ msgstr ""
 #.
 #. * Login shell doesn't exist, give a warning
 #.
-#: src/pwck.c:419
+#: src/pwck.c:418
 #, c-format
 msgid "user %s: program %s does not exist\n"
 msgstr ""
@@ -1702,7 +1702,7 @@ msgstr ""
 #. * Tell the user this entire line is bogus and
 #. * ask them to delete it.
 #.
-#: src/pwck.c:455
+#: src/pwck.c:454
 msgid "invalid shadow password file entry\n"
 msgstr ""
 
@@ -1710,7 +1710,7 @@ msgstr ""
 #. * Tell the user this entry is a duplicate of
 #. * another and ask them to delete it.
 #.
-#: src/pwck.c:517
+#: src/pwck.c:516
 msgid "duplicate shadow password entry\n"
 msgstr ""
 
@@ -1718,41 +1718,41 @@ msgstr ""
 #. * Tell the user this entry has no matching
 #. * /etc/passwd entry and ask them to delete it.
 #.
-#: src/pwck.c:541
+#: src/pwck.c:540
 msgid "no matching password file entry\n"
 msgstr ""
 
-#: src/pwck.c:558
+#: src/pwck.c:557
 #, c-format
 msgid "user %s: last password change in the future\n"
 msgstr ""
 
-#: src/pwconv.c:95 src/pwunconv.c:109
+#: src/pwconv.c:94 src/pwunconv.c:108
 #, c-format
 msgid "%s: can't lock passwd file\n"
 msgstr ""
 
-#: src/pwconv.c:100 src/pwunconv.c:114
+#: src/pwconv.c:99 src/pwunconv.c:113
 #, c-format
 msgid "%s: can't open passwd file\n"
 msgstr ""
 
-#: src/pwconv.c:127
+#: src/pwconv.c:126
 #, c-format
 msgid "%s: can't remove shadow entry for %s\n"
 msgstr ""
 
-#: src/pwconv.c:170
+#: src/pwconv.c:169
 #, c-format
 msgid "%s: can't update passwd entry for %s\n"
 msgstr ""
 
-#: src/pwconv.c:177
+#: src/pwconv.c:176
 #, c-format
 msgid "%s: can't update shadow file\n"
 msgstr ""
 
-#: src/pwconv.c:181
+#: src/pwconv.c:180
 #, c-format
 msgid "%s: can't update passwd file\n"
 msgstr ""
@@ -1762,71 +1762,71 @@ msgstr ""
 msgid "%s: Shadow passwords are not configured.\n"
 msgstr ""
 
-#: src/pwunconv.c:172
+#: src/pwunconv.c:171
 #, c-format
 msgid "%s: can't update entry for user %s\n"
 msgstr ""
 
-#: src/pwunconv.c:189
+#: src/pwunconv.c:188
 #, c-format
 msgid "%s: can't delete shadow password file\n"
 msgstr ""
 
-#: src/su.c:145
+#: src/su.c:140
 msgid "Sorry."
 msgstr ""
 
-#: src/su.c:227
+#: src/su.c:222
 #, c-format
 msgid "%s: must be run from a terminal\n"
 msgstr ""
 
-#: src/su.c:319
+#: src/su.c:311
 #, c-format
 msgid "%s: pam_start: error %d\n"
 msgstr ""
 
-#: src/su.c:345
+#: src/su.c:337
 #, c-format
 msgid "Unknown id: %s\n"
 msgstr ""
 
 #. access denied (-1) or unexpected value
-#: src/su.c:380 src/su.c:395
+#: src/su.c:372 src/su.c:387
 #, c-format
 msgid "You are not authorized to su %s\n"
 msgstr ""
 
 #. require own password
-#: src/su.c:391
+#: src/su.c:383
 msgid "(Enter your own password.)"
 msgstr ""
 
-#: src/su.c:412
+#: src/su.c:404
 #, c-format
 msgid "%s: permission denied (shell).\n"
 msgstr ""
 
-#: src/su.c:436
+#: src/su.c:428
 #, c-format
 msgid ""
 "%s: %s\n"
 "(Ignored)\n"
 msgstr ""
 
-#: src/su.c:605
+#: src/su.c:628
 msgid "No shell\n"
 msgstr ""
 
 #. must be a password file!
-#: src/sulogin.c:138
+#: src/sulogin.c:136
 msgid "No password file\n"
 msgstr ""
 
 #.
 #. * Fail secure
 #.
-#: src/sulogin.c:180
+#: src/sulogin.c:178
 msgid "No password entry for 'root'\n"
 msgstr ""
 
@@ -1835,7 +1835,7 @@ msgstr ""
 #. * given we just exit.
 #.
 #. get a password for root
-#: src/sulogin.c:194
+#: src/sulogin.c:192
 msgid ""
 "\n"
 "Type control-d to proceed with normal startup,\n"
@@ -1843,515 +1843,520 @@ msgid ""
 msgstr ""
 
 #. make new environment active
-#: src/sulogin.c:243
+#: src/sulogin.c:241
 msgid "Entering System Maintenance Mode\n"
 msgstr ""
 
-#: src/useradd.c:244
+#: src/useradd.c:243
 #, c-format
 msgid "%s: rebuild the group database\n"
 msgstr ""
 
-#: src/useradd.c:251
+#: src/useradd.c:250
 #, c-format
 msgid "%s: rebuild the shadow group database\n"
 msgstr ""
 
-#: src/useradd.c:288 src/usermod.c:941
+#: src/useradd.c:287 src/usermod.c:940
 #, c-format
 msgid "%s: invalid numeric argument `%s'\n"
 msgstr ""
 
-#: src/useradd.c:344
+#: src/useradd.c:343
 #, c-format
 msgid "%s: unknown gid %s\n"
 msgstr ""
 
-#: src/useradd.c:351 src/useradd.c:643 src/useradd.c:1229 src/usermod.c:253
-#: src/usermod.c:1072
+#: src/useradd.c:350 src/useradd.c:642 src/useradd.c:1228 src/usermod.c:252
+#: src/usermod.c:1071
 #, c-format
 msgid "%s: unknown group %s\n"
 msgstr ""
 
-#: src/useradd.c:419
+#: src/useradd.c:418
 #, c-format
 msgid "group=%s,%ld  basedir=%s  skel=%s\n"
 msgstr ""
 
-#: src/useradd.c:422
+#: src/useradd.c:421
 #, c-format
 msgid "shell=%s  "
 msgstr ""
 
-#: src/useradd.c:424
+#: src/useradd.c:423
 #, c-format
 msgid "inactive=%ld  expire=%s"
 msgstr ""
 
-#: src/useradd.c:428
+#: src/useradd.c:427
 #, c-format
 msgid "GROUP=%ld\n"
 msgstr ""
 
-#: src/useradd.c:429
+#: src/useradd.c:428
 #, c-format
 msgid "HOME=%s\n"
 msgstr ""
 
-#: src/useradd.c:431
+#: src/useradd.c:430
 #, c-format
 msgid "INACTIVE=%ld\n"
 msgstr ""
 
-#: src/useradd.c:432
+#: src/useradd.c:431
 #, c-format
 msgid "EXPIRE=%s\n"
 msgstr ""
 
-#: src/useradd.c:434
+#: src/useradd.c:433
 #, c-format
 msgid "SHELL=%s\n"
 msgstr ""
 
-#: src/useradd.c:435
+#: src/useradd.c:434
 #, c-format
 msgid "SKEL=%s\n"
 msgstr ""
 
-#: src/useradd.c:471
+#: src/useradd.c:470
 #, c-format
 msgid "%s: cannot create new defaults file\n"
 msgstr ""
 
-#: src/useradd.c:565 src/useradd.c:576
+#: src/useradd.c:564 src/useradd.c:575
 #, c-format
 msgid "%s: rename: %s"
 msgstr ""
 
-#: src/useradd.c:663 src/usermod.c:273
+#: src/useradd.c:662 src/usermod.c:272
 #, c-format
 msgid "%s: group `%s' is a NIS group.\n"
 msgstr ""
 
-#: src/useradd.c:671 src/usermod.c:281
+#: src/useradd.c:670 src/usermod.c:280
 #, c-format
 msgid "%s: too many groups specified (max %d).\n"
 msgstr ""
 
-#: src/useradd.c:703 src/usermod.c:313
+#: src/useradd.c:702 src/usermod.c:312
 #, c-format
 msgid "usage: %s\t[-u uid [-o]] [-g group] [-G group,...] \n"
 msgstr ""
 
-#: src/useradd.c:706
+#: src/useradd.c:705
 msgid "\t\t[-d home] [-s shell] [-c comment] [-m [-k template]]\n"
 msgstr ""
 
-#: src/useradd.c:709 src/usermod.c:319
+#: src/useradd.c:708 src/usermod.c:318
 msgid "[-f inactive] [-e expire ] "
 msgstr ""
 
-#: src/useradd.c:712
+#: src/useradd.c:711
 msgid "[-A program] "
 msgstr ""
 
-#: src/useradd.c:714 src/usermod.c:324
+#: src/useradd.c:713 src/usermod.c:323
 msgid "[-p passwd] name\n"
 msgstr ""
 
-#: src/useradd.c:716
+#: src/useradd.c:715
 #, c-format
 msgid "       %s\t-D [-g group] [-b base] [-s shell]\n"
 msgstr ""
 
-#: src/useradd.c:719
+#: src/useradd.c:718
 msgid "\t\t[-f inactive] [-e expire ]\n"
 msgstr ""
 
-#: src/useradd.c:816 src/usermod.c:446
+#: src/useradd.c:815 src/usermod.c:445
 #, c-format
 msgid "%s: error locking group file\n"
 msgstr ""
 
-#: src/useradd.c:820 src/usermod.c:451
+#: src/useradd.c:819 src/usermod.c:450
 #, c-format
 msgid "%s: error opening group file\n"
 msgstr ""
 
-#: src/useradd.c:825 src/usermod.c:558
+#: src/useradd.c:824 src/usermod.c:557
 #, c-format
 msgid "%s: error locking shadow group file\n"
 msgstr ""
 
-#: src/useradd.c:830 src/usermod.c:564
+#: src/useradd.c:829 src/usermod.c:563
 #, c-format
 msgid "%s: error opening shadow group file\n"
 msgstr ""
 
-#: src/useradd.c:1002
+#: src/useradd.c:1001
 #, c-format
 msgid "%s: uid %d is not unique\n"
 msgstr ""
 
-#: src/useradd.c:1032
+#: src/useradd.c:1031
 #, c-format
 msgid "%s: can't get unique uid\n"
 msgstr ""
 
-#: src/useradd.c:1140 src/useradd.c:1284 src/usermod.c:1020 src/usermod.c:1031
-#: src/usermod.c:1041 src/usermod.c:1087 src/usermod.c:1122
+#: src/useradd.c:1139 src/useradd.c:1283 src/usermod.c:1019 src/usermod.c:1030
+#: src/usermod.c:1040 src/usermod.c:1086 src/usermod.c:1121
 #, c-format
 msgid "%s: invalid field `%s'\n"
 msgstr ""
 
-#: src/useradd.c:1154
+#: src/useradd.c:1153
 #, c-format
 msgid "%s: invalid base directory `%s'\n"
 msgstr ""
 
-#: src/useradd.c:1164
+#: src/useradd.c:1163
 #, c-format
 msgid "%s: invalid comment `%s'\n"
 msgstr ""
 
-#: src/useradd.c:1174
+#: src/useradd.c:1173
 #, c-format
 msgid "%s: invalid home directory `%s'\n"
 msgstr ""
 
-#: src/useradd.c:1192 src/usermod.c:1054
+#: src/useradd.c:1191 src/usermod.c:1053
 #, c-format
 msgid "%s: invalid date `%s'\n"
 msgstr ""
 
-#: src/useradd.c:1204
+#: src/useradd.c:1203
 #, c-format
 msgid "%s: shadow passwords required for -e\n"
 msgstr ""
 
-#: src/useradd.c:1219
+#: src/useradd.c:1218
 #, c-format
 msgid "%s: shadow passwords required for -f\n"
 msgstr ""
 
-#: src/useradd.c:1293
+#: src/useradd.c:1292
 #, c-format
 msgid "%s: invalid shell `%s'\n"
 msgstr ""
 
-#: src/useradd.c:1334
+#: src/useradd.c:1333
 #, c-format
 msgid "%s: invalid user name `%s'\n"
 msgstr ""
 
-#: src/useradd.c:1370 src/userdel.c:262 src/usermod.c:1184
+#: src/useradd.c:1369 src/userdel.c:292 src/usermod.c:1183
 #, c-format
 msgid "%s: cannot rewrite password file\n"
 msgstr ""
 
-#: src/useradd.c:1375 src/userdel.c:265 src/usermod.c:1189
+#: src/useradd.c:1374 src/userdel.c:295 src/usermod.c:1188
 #, c-format
 msgid "%s: cannot rewrite shadow password file\n"
 msgstr ""
 
-#: src/useradd.c:1415 src/userdel.c:329 src/usermod.c:1224
+#: src/useradd.c:1414 src/userdel.c:359 src/usermod.c:1223
 #, c-format
 msgid "%s: unable to lock password file\n"
 msgstr ""
 
-#: src/useradd.c:1419 src/userdel.c:333 src/usermod.c:1228
+#: src/useradd.c:1418 src/userdel.c:363 src/usermod.c:1227
 #, c-format
 msgid "%s: unable to open password file\n"
 msgstr ""
 
-#: src/useradd.c:1425 src/userdel.c:338 src/usermod.c:1233
+#: src/useradd.c:1424 src/userdel.c:368 src/usermod.c:1232
 #, c-format
 msgid "%s: cannot lock shadow password file\n"
 msgstr ""
 
-#: src/useradd.c:1431 src/userdel.c:343 src/usermod.c:1238
+#: src/useradd.c:1430 src/userdel.c:373 src/usermod.c:1237
 #, c-format
 msgid "%s: cannot open shadow password file\n"
 msgstr ""
 
-#: src/useradd.c:1530 src/usermod.c:1325
+#: src/useradd.c:1529 src/usermod.c:1324
 #, c-format
 msgid "%s: error adding authentication method\n"
 msgstr ""
 
-#: src/useradd.c:1553
+#: src/useradd.c:1552
 #, c-format
 msgid "%s: error adding new password entry\n"
 msgstr ""
 
-#: src/useradd.c:1568
+#: src/useradd.c:1567
 #, c-format
 msgid "%s: error updating password dbm entry\n"
 msgstr ""
 
-#: src/useradd.c:1584 src/usermod.c:1384
+#: src/useradd.c:1583 src/usermod.c:1383
 #, c-format
 msgid "%s: error adding new shadow password entry\n"
 msgstr ""
 
-#: src/useradd.c:1600 src/usermod.c:1399
+#: src/useradd.c:1599 src/usermod.c:1398
 #, c-format
 msgid "%s: error updating shadow passwd dbm entry\n"
 msgstr ""
 
-#: src/useradd.c:1632
+#: src/useradd.c:1631
 #, c-format
 msgid "%s: cannot create directory %s\n"
 msgstr ""
 
-#: src/useradd.c:1709 src/usermod.c:1162
+#: src/useradd.c:1708 src/usermod.c:1161
 #, c-format
 msgid "%s: user %s exists\n"
 msgstr ""
 
-#: src/useradd.c:1739
+#: src/useradd.c:1738
 #, c-format
 msgid "%s: warning: CREATE_HOME not supported, please use -m instead.\n"
 msgstr ""
 
-#: src/userdel.c:128
+#: src/userdel.c:127
 #, c-format
 msgid "usage: %s [-r] name\n"
 msgstr ""
 
-#: src/userdel.c:175 src/userdel.c:230
+#: src/userdel.c:178 src/userdel.c:260
 #, c-format
 msgid "%s: error updating group entry\n"
 msgstr ""
 
-#: src/userdel.c:185 src/userdel.c:239
+#: src/userdel.c:188 src/userdel.c:269
 #, c-format
 msgid "%s: cannot update dbm group entry\n"
 msgstr ""
 
-#: src/userdel.c:270
+#: src/userdel.c:215
+#, c-format
+msgid "%s: cannot remove dbm group entry\n"
+msgstr ""
+
+#: src/userdel.c:300
 #, c-format
 msgid "%s: cannot rewrite TCFS key file\n"
 msgstr ""
 
-#: src/userdel.c:350
+#: src/userdel.c:380
 #, c-format
 msgid "%s: cannot lock TCFS key file\n"
 msgstr ""
 
-#: src/userdel.c:354
+#: src/userdel.c:384
 #, c-format
 msgid "%s: cannot open TCFS key file\n"
 msgstr ""
 
-#: src/userdel.c:363
+#: src/userdel.c:393
 #, c-format
 msgid "%s: cannot open group file\n"
 msgstr ""
 
-#: src/userdel.c:373
+#: src/userdel.c:403
 #, c-format
 msgid "%s: cannot open shadow group file\n"
 msgstr ""
 
-#: src/userdel.c:404 src/userdel.c:419
+#: src/userdel.c:434 src/userdel.c:449
 #, c-format
 msgid "%s: error deleting authentication\n"
 msgstr ""
 
-#: src/userdel.c:428
+#: src/userdel.c:458
 #, c-format
 msgid "%s: error deleting password entry\n"
 msgstr ""
 
-#: src/userdel.c:431
+#: src/userdel.c:461
 #, c-format
 msgid "%s: error deleting shadow password entry\n"
 msgstr ""
 
-#: src/userdel.c:440
+#: src/userdel.c:470
 #, c-format
 msgid "%s: error deleting TCFS entry\n"
 msgstr ""
 
-#: src/userdel.c:453
+#: src/userdel.c:483
 #, c-format
 msgid "%s: error deleting password dbm entry\n"
 msgstr ""
 
-#: src/userdel.c:472
+#: src/userdel.c:502
 #, c-format
 msgid "%s: error deleting shadow passwd dbm entry\n"
 msgstr ""
 
-#: src/userdel.c:513
+#: src/userdel.c:543
 #, c-format
 msgid "%s: user %s is currently logged in\n"
 msgstr ""
 
-#: src/userdel.c:630
+#: src/userdel.c:660
 #, c-format
 msgid "%s: warning: %s not owned by %s, not removing\n"
 msgstr ""
 
-#: src/userdel.c:636
+#: src/userdel.c:666
 #, c-format
 msgid "%s: warning: can't remove "
 msgstr ""
 
-#: src/userdel.c:711 src/usermod.c:968
+#: src/userdel.c:741 src/usermod.c:967
 #, c-format
 msgid "%s: user %s does not exist\n"
 msgstr ""
 
-#: src/userdel.c:725 src/usermod.c:984
+#: src/userdel.c:755 src/usermod.c:983
 #, c-format
 msgid "%s: user %s is a NIS user\n"
 msgstr ""
 
-#: src/userdel.c:762
+#: src/userdel.c:792
 #, c-format
 msgid "%s: %s not owned by %s, not removing\n"
 msgstr ""
 
-#: src/userdel.c:785
+#: src/userdel.c:815
 #, c-format
 msgid "%s: not removing directory %s (would remove home of user %s)\n"
 msgstr ""
 
-#: src/userdel.c:798
+#: src/userdel.c:828
 #, c-format
 msgid "%s: error removing directory %s\n"
 msgstr ""
 
-#: src/usermod.c:316
+#: src/usermod.c:315
 msgid "\t\t[-d home [-m]] [-s shell] [-c comment] [-l new_name]\n"
 msgstr ""
 
-#: src/usermod.c:322
+#: src/usermod.c:321
 msgid "[-A {DEFAULT|program},... ] "
 msgstr ""
 
-#: src/usermod.c:478
+#: src/usermod.c:477
 #, c-format
 msgid "%s: out of memory in update_group\n"
 msgstr ""
 
-#: src/usermod.c:601
+#: src/usermod.c:600
 #, c-format
 msgid "%s: out of memory in update_gshadow\n"
 msgstr ""
 
-#: src/usermod.c:1139
+#: src/usermod.c:1138
 #, c-format
 msgid "%s: no flags given\n"
 msgstr ""
 
-#: src/usermod.c:1146
+#: src/usermod.c:1145
 #, c-format
 msgid "%s: shadow passwords required for -e and -f\n"
 msgstr ""
 
-#: src/usermod.c:1167
+#: src/usermod.c:1166
 #, c-format
 msgid "%s: uid %ld is not unique\n"
 msgstr ""
 
-#: src/usermod.c:1315
+#: src/usermod.c:1314
 #, c-format
 msgid "%s: error deleting authentication method\n"
 msgstr ""
 
-#: src/usermod.c:1335
+#: src/usermod.c:1334
 #, c-format
 msgid "%s: error changing authentication method\n"
 msgstr ""
 
-#: src/usermod.c:1352
+#: src/usermod.c:1351
 #, c-format
 msgid "%s: error changing password entry\n"
 msgstr ""
 
-#: src/usermod.c:1358
+#: src/usermod.c:1357
 #, c-format
 msgid "%s: error removing password entry\n"
 msgstr ""
 
-#: src/usermod.c:1366
+#: src/usermod.c:1365
 #, c-format
 msgid "%s: error adding password dbm entry\n"
 msgstr ""
 
-#: src/usermod.c:1373
+#: src/usermod.c:1372
 #, c-format
 msgid "%s: error removing passwd dbm entry\n"
 msgstr ""
 
-#: src/usermod.c:1390
+#: src/usermod.c:1389
 #, c-format
 msgid "%s: error removing shadow password entry\n"
 msgstr ""
 
-#: src/usermod.c:1405
+#: src/usermod.c:1404
 #, c-format
 msgid "%s: error removing shadow passwd dbm entry\n"
 msgstr ""
 
-#: src/usermod.c:1436
+#: src/usermod.c:1435
 #, c-format
 msgid "%s: directory %s exists\n"
 msgstr ""
 
-#: src/usermod.c:1443
+#: src/usermod.c:1442
 #, c-format
 msgid "%s: can't create %s\n"
 msgstr ""
 
-#: src/usermod.c:1449
+#: src/usermod.c:1448
 #, c-format
 msgid "%s: can't chown %s\n"
 msgstr ""
 
-#: src/usermod.c:1465
+#: src/usermod.c:1464
 #, c-format
 msgid "%s: cannot rename directory %s to %s\n"
 msgstr ""
 
 #. better leave it alone
-#: src/usermod.c:1562
+#: src/usermod.c:1561
 #, c-format
 msgid "%s: warning: %s not owned by %s\n"
 msgstr ""
 
-#: src/usermod.c:1568
+#: src/usermod.c:1567
 msgid "failed to change mailbox owner"
 msgstr ""
 
-#: src/usermod.c:1575
+#: src/usermod.c:1574
 msgid "failed to rename mailbox"
 msgstr ""
 
-#: src/vipw.c:103
+#: src/vipw.c:102
 #, c-format
 msgid ""
 "\n"
 "%s: %s is unchanged\n"
 msgstr ""
 
-#: src/vipw.c:128
+#: src/vipw.c:127
 msgid "Couldn't lock file"
 msgstr ""
 
-#: src/vipw.c:135
+#: src/vipw.c:134
 msgid "Couldn't make backup"
 msgstr ""
 
-#: src/vipw.c:174
+#: src/vipw.c:187
 #, c-format
 msgid "%s: can't restore %s: %s (your changes are in %s)\n"
 msgstr ""
 
-#: src/vipw.c:213
+#: src/vipw.c:226
 msgid ""
 "Usage:\n"
 "`vipw' edits /etc/passwd        `vipw -s' edits /etc/shadow\n"
index 3017b51886102739c40d04ef3e6893acf8346df6..64e0eb49a104bf12707435db8be7e4a7ae23e0a7 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: 1999-08-27 21:03+0200\n"
+"POT-Creation-Date: 2000-08-26 20:28+0200\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"
@@ -110,7 +110,7 @@ msgstr "Ingen post."
 msgid "You have mail."
 msgstr "Du har post."
 
-#: libmisc/obscure.c:281 src/passwd.c:311
+#: libmisc/obscure.c:281 src/passwd.c:309
 #, c-format
 msgid "Bad password: %s.  "
 msgstr "Felaktigt lösenord: %s.  "
@@ -180,24 +180,24 @@ msgstr "malloc(%d) misslyckades\n"
 msgid "Dialup Password: "
 msgstr "Uppringningslösenord: "
 
-#: lib/getdef.c:249
+#: lib/getdef.c:253
 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:303
+#: lib/getdef.c:307
 #, 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:390
+#: lib/getdef.c:394
 #, c-format
 msgid "error - lookup '%s' failed\n"
 msgstr "fel - kunde inte hitta \"%s\"\n"
 
-#: lib/getdef.c:398
+#: lib/getdef.c:402
 #, 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:297
+#: lib/pwauth.c:54 src/newgrp.c:305
 msgid "Password: "
 msgstr "Lösenord: "
 
@@ -342,82 +342,82 @@ msgstr "L
 msgid "Account Expires:\t"
 msgstr "Lösenordet upphör:\t"
 
-#: src/chage.c:468
+#: src/chage.c:471
 #, 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:480 src/chage.c:592 src/login.c:529
+#: src/chage.c:483 src/chage.c:595 src/login.c:529
 #, c-format
 msgid "%s: permission denied\n"
 msgstr "%s: tillåtelse nekas\n"
 
-#: src/chage.c:492 src/chpasswd.c:122
+#: src/chage.c:495 src/chpasswd.c:120
 #, c-format
 msgid "%s: can't lock password file\n"
 msgstr "%s: kan inte låsa lösenordsfilen\n"
 
-#: src/chage.c:498 src/chpasswd.c:126
+#: src/chage.c:501 src/chpasswd.c:124
 #, c-format
 msgid "%s: can't open password file\n"
 msgstr "%s: kan inte öppna lösenordsfilen\n"
 
-#: src/chage.c:505
+#: src/chage.c:508
 #, c-format
 msgid "%s: unknown user: %s\n"
 msgstr "%s: okänd användare: %s\n"
 
-#: src/chage.c:524
+#: src/chage.c:527
 #, c-format
 msgid "%s: can't lock shadow password file\n"
 msgstr "%s: kan inte låsa skugglösenordsfilen\n"
 
-#: src/chage.c:531
+#: src/chage.c:534
 #, c-format
 msgid "%s: can't open shadow password file\n"
 msgstr "%s: kan inte öppna skugglösenordsfilen\n"
 
-#: src/chage.c:613
+#: src/chage.c:616
 #, c-format
 msgid "Changing the aging information for %s\n"
 msgstr "Ändrar åldringsinformation för %s\n"
 
-#: src/chage.c:615
+#: src/chage.c:618
 #, c-format
 msgid "%s: error changing fields\n"
 msgstr "%s: fel uppstod under byte av fält\n"
 
-#: src/chage.c:642 src/chage.c:705 src/pwunconv.c:184
+#: src/chage.c:645 src/chage.c:708 src/pwunconv.c:183
 #, c-format
 msgid "%s: can't update password file\n"
 msgstr "%s: kan inte uppdatera lösenordsfilen\n"
 
-#: src/chage.c:672 src/pwunconv.c:179
+#: src/chage.c:675 src/pwunconv.c:178
 #, c-format
 msgid "%s: can't update shadow password file\n"
 msgstr "%s: kan inte uppdatera skugglösenordsfilen\n"
 
-#: src/chage.c:721 src/chage.c:736 src/chfn.c:572 src/chsh.c:411
-#: src/passwd.c:827 src/passwd.c:928
+#: src/chage.c:724 src/chage.c:739 src/chfn.c:571 src/chsh.c:410
+#: src/passwd.c:825 src/passwd.c:926
 msgid "Error updating the DBM password entry.\n"
 msgstr "Fel under uppdatering av DBM-lösenordsnoteringen.\n"
 
-#: src/chage.c:753
+#: src/chage.c:756
 #, c-format
 msgid "%s: can't rewrite shadow password file\n"
 msgstr "%s: kan inte skriva om skugglösenordsfilen\n"
 
-#: src/chage.c:767
+#: src/chage.c:770
 #, c-format
 msgid "%s: can't rewrite password file\n"
 msgstr "%s: kan inte skriva om lösenordsfilen\n"
 
-#: src/chage.c:816
+#: src/chage.c:821
 #, c-format
 msgid "%s: no aging information present\n"
 msgstr "%s: ingen åldringsinformation finns tillgänglig\n"
 
-#: src/chfn.c:108
+#: src/chfn.c:107
 #, c-format
 msgid ""
 "Usage: %s [ -f full_name ] [ -r room_no ] [ -w work_ph ]\n"
@@ -426,7 +426,7 @@ msgstr ""
 "%s [ -f hela_namnet ] [ -r rumsnummer ] [ -w arbetstele ]\n"
 "\t[ -h hemtele ] [ -o övrigt ] [ användare ]\n"
 
-#: src/chfn.c:112
+#: src/chfn.c:111
 #, c-format
 msgid ""
 "Usage: %s [ -f full_name ] [ -r room_no ] [ -w work_ph ] [ -h home_ph ]\n"
@@ -434,362 +434,362 @@ msgstr ""
 "Användning: %s [ -f hela_namnet ] [ -r rumsnummer ] [ -w arbetstele ] [ -h "
 "hemtele ]\n"
 
-#: src/chfn.c:164 src/chsh.c:120
+#: 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:167
+#: src/chfn.c:166
 msgid "Full Name"
 msgstr "Hela namnet"
 
-#: src/chfn.c:169
+#: src/chfn.c:168
 #, c-format
 msgid "\tFull Name: %s\n"
 msgstr "\tHela namnet: %s\n"
 
-#: src/chfn.c:172
+#: src/chfn.c:171
 msgid "Room Number"
 msgstr "Rumsnummer"
 
-#: src/chfn.c:174
+#: src/chfn.c:173
 #, c-format
 msgid "\tRoom Number: %s\n"
 msgstr "\tRumsnummer: %s\n"
 
-#: src/chfn.c:177
+#: src/chfn.c:176
 msgid "Work Phone"
 msgstr "Arbetstelefonnummer"
 
-#: src/chfn.c:179
+#: src/chfn.c:178
 #, c-format
 msgid "\tWork Phone: %s\n"
 msgstr "\tArbetstelefonnummer: %s\n"
 
-#: src/chfn.c:182
+#: src/chfn.c:181
 msgid "Home Phone"
 msgstr "Hemtelefonnummer"
 
-#: src/chfn.c:184
+#: src/chfn.c:183
 #, c-format
 msgid "\tHome Phone: %s\n"
 msgstr "\tHemtelefonnummer: %s\n"
 
-#: src/chfn.c:187
+#: src/chfn.c:186
 msgid "Other"
 msgstr "Övrigt"
 
-#: src/chfn.c:300 src/chfn.c:308 src/chfn.c:316 src/chfn.c:324 src/chfn.c:332
-#: src/chfn.c:393 src/passwd.c:1228
+#: src/chfn.c:299 src/chfn.c:307 src/chfn.c:315 src/chfn.c:323 src/chfn.c:331
+#: src/chfn.c:392 src/passwd.c:1226
 #, c-format
 msgid "%s: Permission denied.\n"
 msgstr "%s: Tillåtelse nekas.\n"
 
-#: src/chfn.c:353 src/chsh.c:226 src/passwd.c:1279
+#: src/chfn.c:352 src/chsh.c:225 src/passwd.c:1277
 #, c-format
 msgid "%s: Unknown user %s\n"
 msgstr "%s: Okänd användare %s\n"
 
-#: src/chfn.c:359 src/chsh.c:234 src/passwd.c:1209
+#: src/chfn.c:358 src/chsh.c:233 src/passwd.c:1207
 #, c-format
 msgid "%s: Cannot determine your user name.\n"
 msgstr "%s: Kan inte avgöra ditt användarnamn.\n"
 
-#: src/chfn.c:375 src/chsh.c:252
+#: src/chfn.c:374 src/chsh.c:251
 #, 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:380 src/chsh.c:259
+#: src/chfn.c:379 src/chsh.c:258
 #, 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:455
+#: src/chfn.c:454
 #, c-format
 msgid "Changing the user information for %s\n"
 msgstr "Ändrar användarinformation för %s\n"
 
-#: src/chfn.c:464
+#: src/chfn.c:463
 #, c-format
 msgid "%s: invalid name: \"%s\"\n"
 msgstr "%s: felaktigt namn: \"%s\"\n"
 
-#: src/chfn.c:469
+#: src/chfn.c:468
 #, c-format
 msgid "%s: invalid room number: \"%s\"\n"
 msgstr "%s: felaktigt rumsnummer: \"%s\"\n"
 
-#: src/chfn.c:474
+#: src/chfn.c:473
 #, c-format
 msgid "%s: invalid work phone: \"%s\"\n"
 msgstr "%s: felaktigt arbetstelefonnummer: \"%s\"\n"
 
-#: src/chfn.c:479
+#: src/chfn.c:478
 #, c-format
 msgid "%s: invalid home phone: \"%s\"\n"
 msgstr "%s: felaktigt hemtelefonnummer: \"%s\"\n"
 
-#: src/chfn.c:484
+#: src/chfn.c:483
 #, c-format
 msgid "%s: \"%s\" contains illegal characters\n"
 msgstr "%s: \"%s\" innehåller otillåtna tecken\n"
 
-#: src/chfn.c:496
+#: src/chfn.c:495
 #, c-format
 msgid "%s: fields too long\n"
 msgstr "%s: för långa fält\n"
 
-#: src/chfn.c:511 src/chsh.c:349 src/gpasswd.c:583 src/passwd.c:1390
+#: src/chfn.c:510 src/chsh.c:348 src/gpasswd.c:582 src/passwd.c:1388
 msgid "Cannot change ID to root.\n"
 msgstr "Kan inte ändra ID till root.\n"
 
-#: src/chfn.c:524 src/chsh.c:363 src/passwd.c:737 src/passwd.c:882
+#: src/chfn.c:523 src/chsh.c:362 src/passwd.c:735 src/passwd.c:880
 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:530 src/chsh.c:369 src/passwd.c:742 src/passwd.c:887
+#: src/chfn.c:529 src/chsh.c:368 src/passwd.c:740 src/passwd.c:885
 msgid "Cannot open the password file.\n"
 msgstr "Kan inte öppna lösenordsfilen.\n"
 
-#: src/chfn.c:547 src/chsh.c:384 src/passwd.c:748 src/usermod.c:1272
+#: src/chfn.c:546 src/chsh.c:383 src/passwd.c:746 src/usermod.c:1271
 #, c-format
 msgid "%s: %s not found in /etc/passwd\n"
 msgstr "%s: %s hittades inte i /etc/passwd\n"
 
-#: src/chfn.c:564 src/chsh.c:403 src/passwd.c:821 src/passwd.c:922
-#: src/passwd.c:962
+#: src/chfn.c:563 src/chsh.c:402 src/passwd.c:819 src/passwd.c:920
+#: src/passwd.c:960
 msgid "Error updating the password entry.\n"
 msgstr "Fel under uppdatering av lösenordsnoteringen.\n"
 
-#: src/chfn.c:587 src/chsh.c:426 src/passwd.c:834 src/passwd.c:935
+#: src/chfn.c:586 src/chsh.c:425 src/passwd.c:832 src/passwd.c:933
 msgid "Cannot commit password file changes.\n"
 msgstr "Kan inte genomföra ändringar i lösenordsfilen.\n"
 
-#: src/chfn.c:594 src/chsh.c:433
+#: src/chfn.c:593 src/chsh.c:432
 msgid "Cannot unlock the password file.\n"
 msgstr "Kan inte låsa upp lösenordsfilen.\n"
 
-#: src/chpasswd.c:78
+#: src/chpasswd.c:76
 #, c-format
 msgid "usage: %s [-e]\n"
 msgstr "Användning: %s [-e]\n"
 
-#: src/chpasswd.c:134 src/pwconv.c:105
+#: src/chpasswd.c:132 src/pwconv.c:104
 #, c-format
 msgid "%s: can't lock shadow file\n"
 msgstr "%s: kan inte låsa skuggfilen\n"
 
-#: src/chpasswd.c:139 src/gpasswd.c:609 src/pwconv.c:110 src/pwunconv.c:119
-#: src/pwunconv.c:124
+#: src/chpasswd.c:137 src/gpasswd.c:608 src/pwconv.c:109 src/pwunconv.c:118
+#: src/pwunconv.c:123
 #, c-format
 msgid "%s: can't open shadow file\n"
 msgstr "%s: kan inte öppna skuggfilen\n"
 
-#: src/chpasswd.c:161 src/newusers.c:418
+#: src/chpasswd.c:159 src/newusers.c:415
 #, c-format
 msgid "%s: line %d: line too long\n"
 msgstr "%s: rad %d: för lång rad\n"
 
-#: src/chpasswd.c:181
+#: src/chpasswd.c:179
 #, c-format
 msgid "%s: line %d: missing new password\n"
 msgstr "%s: rad %d: det nya lösenordet saknas\n"
 
-#: src/chpasswd.c:197
+#: src/chpasswd.c:195
 #, c-format
 msgid "%s: line %d: unknown user %s\n"
 msgstr "%s: rad %d: okänd användare %s\n"
 
-#: src/chpasswd.c:249
+#: src/chpasswd.c:247
 #, c-format
 msgid "%s: line %d: cannot update password entry\n"
 msgstr "%s: rad %d: kan inte uppdatera lösenordsnoteringen\n"
 
-#: src/chpasswd.c:265 src/newusers.c:538
+#: src/chpasswd.c:263 src/newusers.c:535
 #, c-format
 msgid "%s: error detected, changes ignored\n"
 msgstr "%s: fel upptäcktes, ändringarna ignorerades\n"
 
-#: src/chpasswd.c:276
+#: src/chpasswd.c:274
 #, c-format
 msgid "%s: error updating shadow file\n"
 msgstr "%s: fel under uppdatering av skuggfilen\n"
 
-#: src/chpasswd.c:284
+#: src/chpasswd.c:282
 #, c-format
 msgid "%s: error updating password file\n"
 msgstr "%s: fel under uppdatering av lösenordsfilen\n"
 
-#: src/chsh.c:106
+#: src/chsh.c:105
 #, c-format
 msgid "Usage: %s [ -s shell ] [ name ]\n"
 msgstr "Användning: %s [ -s skal ] [ namn ]\n"
 
-#: src/chsh.c:121
+#: src/chsh.c:120
 msgid "Login Shell"
 msgstr "Inloggningsskal"
 
-#: src/chsh.c:275 src/chsh.c:288
+#: src/chsh.c:274 src/chsh.c:287
 #, 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:317
+#: src/chsh.c:316
 #, c-format
 msgid "Changing the login shell for %s\n"
 msgstr "Ändrar inloggningsskal åt %s\n"
 
-#: src/chsh.c:329
+#: src/chsh.c:328
 #, c-format
 msgid "%s: Invalid entry: %s\n"
 msgstr "%s: Felaktig notering: %s\n"
 
-#: src/chsh.c:334
+#: src/chsh.c:333
 #, c-format
 msgid "%s is an invalid shell.\n"
 msgstr "%s är ett felaktigt skal.\n"
 
-#: src/dpasswd.c:71
+#: src/dpasswd.c:69
 #, c-format
 msgid "Usage: %s [ -(a|d) ] shell\n"
 msgstr "Användning: %s [ -(a|d) ] skal\n"
 
-#: src/dpasswd.c:136
+#: src/dpasswd.c:134
 msgid "Shell password: "
 msgstr "Skallösenord: "
 
-#: src/dpasswd.c:142
+#: src/dpasswd.c:140
 msgid "re-enter Shell password: "
 msgstr "skriv in skallösenordet igen: "
 
-#: src/dpasswd.c:149
+#: src/dpasswd.c:147
 #, 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:169
+#: src/dpasswd.c:167
 #, c-format
 msgid "%s: can't create %s"
 msgstr "%s: kan inte skapa %s"
 
-#: src/dpasswd.c:174
+#: src/dpasswd.c:172
 #, c-format
 msgid "%s: can't open %s"
 msgstr "%s: kan inte öppna %s"
 
-#: src/dpasswd.c:202
+#: src/dpasswd.c:200
 #, c-format
 msgid "%s: Shell %s not found.\n"
 msgstr "%s: Hittade inte skalet %s.\n"
 
-#: src/expiry.c:85
+#: src/expiry.c:84
 msgid "Usage: expiry { -f | -c }\n"
 msgstr "Användning: expiry { -f | -c }\n"
 
-#: src/expiry.c:138
+#: src/expiry.c:137
 #, c-format
 msgid "%s: WARNING!  Must be set-UID root!\n"
 msgstr "%s: VARNING!  Måste vara set-UID root!\n"
 
-#: src/expiry.c:149
+#: src/expiry.c:148
 #, c-format
 msgid "%s: unknown user\n"
 msgstr "%s: okänd användare\n"
 
-#: src/faillog.c:80
+#: src/faillog.c:79
 #, 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:135 src/lastlog.c:95
+#: src/faillog.c:134 src/lastlog.c:94
 #, c-format
 msgid "Unknown User: %s\n"
 msgstr "Okänd användare: %s\n"
 
-#: src/faillog.c:216
+#: src/faillog.c:215
 msgid "Username   Failures  Maximum  Latest\n"
 msgstr "Användarnamn  Felaktiga inloggningar  Högsta  Senaste\n"
 
-#: src/faillog.c:233
+#: src/faillog.c:232
 #, c-format
 msgid "  %s on %s"
 msgstr "  %s på %s"
 
-#: src/faillog.c:237
+#: src/faillog.c:236
 #, c-format
 msgid " [%lds left]"
 msgstr " [%lds kvar]"
 
-#: src/faillog.c:240
+#: src/faillog.c:239
 #, c-format
 msgid " [%lds lock]"
 msgstr " [%lds låsning]"
 
-#: src/gpasswd.c:91
+#: src/gpasswd.c:89
 #, c-format
 msgid "usage: %s [-r|-R] group\n"
 msgstr "Användning: %s [-r|-R] grupp\n"
 
-#: src/gpasswd.c:92
+#: src/gpasswd.c:90
 #, c-format
 msgid "       %s [-a user] group\n"
 msgstr "       %s [-a användare] grupp\n"
 
-#: src/gpasswd.c:93
+#: src/gpasswd.c:91
 #, c-format
 msgid "       %s [-d user] group\n"
 msgstr "       %s [-d användare] grupp\n"
 
-#: src/gpasswd.c:95
+#: src/gpasswd.c:93
 #, c-format
 msgid "       %s [-A user,...] [-M user,...] group\n"
 msgstr "       %s [-A användare,...] [-M användare,...] grupp\n"
 
-#: src/gpasswd.c:98
+#: src/gpasswd.c:96
 #, c-format
 msgid "       %s [-M user,...] group\n"
 msgstr "       %s [-M användare,...] grupp\n"
 
-#: src/gpasswd.c:162 src/gpasswd.c:247
+#: src/gpasswd.c:160 src/gpasswd.c:245
 #, c-format
 msgid "%s: unknown user %s\n"
 msgstr "%s: okänd användare %s\n"
 
-#: src/gpasswd.c:174
+#: src/gpasswd.c:172
 msgid "Permission denied.\n"
 msgstr "Tillåtelse nekas.\n"
 
-#: src/gpasswd.c:259
+#: src/gpasswd.c:257
 #, c-format
 msgid "%s: shadow group passwords required for -A\n"
 msgstr "%s: skuggrupplösenord krävs för -A\n"
 
-#: src/gpasswd.c:310
+#: src/gpasswd.c:308
 msgid "Who are you?\n"
 msgstr "Vem är du?\n"
 
-#: src/gpasswd.c:330 src/newgrp.c:247
+#: src/gpasswd.c:328 src/newgrp.c:251
 #, c-format
 msgid "unknown group: %s\n"
 msgstr "okänd grupp: %s\n"
 
-#: src/gpasswd.c:438
+#: src/gpasswd.c:436
 #, c-format
 msgid "Adding user %s to group %s\n"
 msgstr "Lägger till användare %s till grupp %s\n"
 
-#: src/gpasswd.c:455
+#: src/gpasswd.c:453
 #, c-format
 msgid "Removing user %s from group %s\n"
 msgstr "Tar bort användare %s från grupp %s\n"
 
-#: src/gpasswd.c:468
+#: src/gpasswd.c:466
 #, c-format
 msgid "%s: unknown member %s\n"
 msgstr "%s: okänd medlem %s\n"
 
-#: src/gpasswd.c:515
+#: src/gpasswd.c:513
 #, c-format
 msgid "%s: Not a tty\n"
 msgstr "%s: Inte en tty\n"
@@ -801,105 +801,105 @@ msgstr "%s: Inte en tty\n"
 #. * the old password since the invoker is either the group
 #. * owner, or root.
 #.
-#: src/gpasswd.c:537
+#: src/gpasswd.c:535
 #, c-format
 msgid "Changing the password for group %s\n"
 msgstr "Ändrar lösenordet för grupp %s\n"
 
-#: src/gpasswd.c:540
+#: src/gpasswd.c:538
 msgid "New Password: "
 msgstr "Nytt lösenord: "
 
-#: src/gpasswd.c:545 src/passwd.c:424
+#: src/gpasswd.c:543 src/passwd.c:422
 msgid "Re-enter new password: "
 msgstr "Skriv in det nya lösenordet igen: "
 
-#: src/gpasswd.c:557
+#: src/gpasswd.c:555
 msgid "They don't match; try again"
 msgstr "De matchar inte; försök igen"
 
-#: src/gpasswd.c:561
+#: src/gpasswd.c:559
 #, c-format
 msgid "%s: Try again later\n"
 msgstr "%s: Försök igen senare\n"
 
-#: src/gpasswd.c:591
+#: src/gpasswd.c:590
 #, c-format
 msgid "%s: can't get lock\n"
 msgstr "%s: kan inte låsa\n"
 
-#: src/gpasswd.c:597
+#: src/gpasswd.c:596
 #, c-format
 msgid "%s: can't get shadow lock\n"
 msgstr "%s: kan inte låsa skuggfilen\n"
 
-#: src/gpasswd.c:603
+#: src/gpasswd.c:602
 #, c-format
 msgid "%s: can't open file\n"
 msgstr "%s: kan inte öppna filen\n"
 
-#: src/gpasswd.c:615
+#: src/gpasswd.c:614
 #, c-format
 msgid "%s: can't update entry\n"
 msgstr "%s: kan inte uppdatera noteringen\n"
 
-#: src/gpasswd.c:621
+#: src/gpasswd.c:620
 #, c-format
 msgid "%s: can't update shadow entry\n"
 msgstr "%s: kan inte uppdatera noteringen i skuggfilen\n"
 
-#: src/gpasswd.c:627
+#: src/gpasswd.c:626
 #, c-format
 msgid "%s: can't re-write file\n"
 msgstr "%s: kan inte skriva om filen\n"
 
-#: src/gpasswd.c:633
+#: src/gpasswd.c:632
 #, c-format
 msgid "%s: can't re-write shadow file\n"
 msgstr "%s: kan inte skriva om skuggfilen\n"
 
-#: src/gpasswd.c:641
+#: src/gpasswd.c:640
 #, c-format
 msgid "%s: can't unlock file\n"
 msgstr "%s: kan inte låsa upp filen\n"
 
-#: src/gpasswd.c:646
+#: src/gpasswd.c:645
 #, c-format
 msgid "%s: can't update DBM files\n"
 msgstr "%s: kan inte uppdatera DBM-filer\n"
 
-#: src/gpasswd.c:653
+#: src/gpasswd.c:652
 #, c-format
 msgid "%s: can't update DBM shadow files\n"
 msgstr "%s: kan inte uppdatera DBM-skuggfiler\n"
 
-#: src/groupadd.c:106
+#: src/groupadd.c:105
 msgid "usage: groupadd [-g gid [-o]] group\n"
 msgstr "Användning: groupadd [-g gid [-o]] grupp\n"
 
-#: src/groupadd.c:174 src/groupadd.c:197 src/groupmod.c:184 src/groupmod.c:231
-#: src/useradd.c:932 src/usermod.c:513 src/usermod.c:649
+#: src/groupadd.c:173 src/groupadd.c:196 src/groupmod.c:183 src/groupmod.c:230
+#: src/useradd.c:931 src/usermod.c:512 src/usermod.c:648
 #, 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:184 src/groupadd.c:207 src/groupmod.c:200 src/useradd.c:943
-#: src/usermod.c:525 src/usermod.c:661
+#: src/groupadd.c:183 src/groupadd.c:206 src/groupmod.c:199 src/useradd.c:942
+#: src/usermod.c:524 src/usermod.c:660
 #, 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:259 src/useradd.c:997
+#: src/groupadd.c:258 src/useradd.c:996
 #, c-format
 msgid "%s: name %s is not unique\n"
 msgstr "%s: namnet %s är inte unikt\n"
 
-#: src/groupadd.c:274
+#: src/groupadd.c:273
 #, c-format
 msgid "%s: gid %ld is not unique\n"
 msgstr "%s: gid %ld är inte unikt\n"
 
-#: src/groupadd.c:298
+#: src/groupadd.c:297
 #, c-format
 msgid "%s: can't get unique gid\n"
 msgstr "%s: kan inte hitta ett unikt gid\n"
@@ -907,78 +907,78 @@ msgstr "%s: kan inte hitta ett unikt gid\n"
 #.
 #. * All invalid group names land here.
 #.
-#: src/groupadd.c:322 src/groupmod.c:342
+#: src/groupadd.c:321 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:351 src/groupmod.c:368
+#: src/groupadd.c:350 src/groupmod.c:367
 #, c-format
 msgid "%s: invalid group %s\n"
 msgstr "%s: ogiltig grupp %s\n"
 
-#: src/groupadd.c:368 src/useradd.c:1273
+#: src/groupadd.c:367 src/useradd.c:1272
 #, c-format
 msgid "%s: -O requires NAME=VALUE\n"
 msgstr "%s: -O kräver NAME=VÄRDE\n"
 
-#: src/groupadd.c:413 src/groupdel.c:168 src/groupmod.c:404 src/useradd.c:1382
-#: src/userdel.c:273 src/usermod.c:537
+#: src/groupadd.c:412 src/groupdel.c:167 src/groupmod.c:403 src/useradd.c:1381
+#: src/userdel.c:303 src/usermod.c:536
 #, c-format
 msgid "%s: cannot rewrite group file\n"
 msgstr "%s: kan inte skriva om gruppfilen\n"
 
-#: src/groupadd.c:419 src/groupdel.c:174 src/groupmod.c:410 src/useradd.c:1390
-#: src/userdel.c:279 src/usermod.c:674
+#: src/groupadd.c:418 src/groupdel.c:173 src/groupmod.c:409 src/useradd.c:1389
+#: src/userdel.c:309 src/usermod.c:673
 #, c-format
 msgid "%s: cannot rewrite shadow group file\n"
 msgstr "%s: kan inte skriva om skuggruppfilen\n"
 
-#: src/groupadd.c:438 src/groupdel.c:193 src/groupmod.c:429 src/userdel.c:359
+#: src/groupadd.c:437 src/groupdel.c:192 src/groupmod.c:428 src/userdel.c:389
 #, c-format
 msgid "%s: unable to lock group file\n"
 msgstr "%s: kan inte låsa gruppfilen\n"
 
-#: src/groupadd.c:442 src/groupdel.c:197 src/groupmod.c:433
+#: src/groupadd.c:441 src/groupdel.c:196 src/groupmod.c:432
 #, c-format
 msgid "%s: unable to open group file\n"
 msgstr "%s: kan inte öppna gruppfilen\n"
 
-#: src/groupadd.c:447 src/groupdel.c:202 src/groupmod.c:438 src/userdel.c:368
+#: src/groupadd.c:446 src/groupdel.c:201 src/groupmod.c:437 src/userdel.c:398
 #, c-format
 msgid "%s: unable to lock shadow group file\n"
 msgstr "%s: kan inte låsa skuggruppfilen\n"
 
-#: src/groupadd.c:452 src/groupdel.c:207 src/groupmod.c:443
+#: src/groupadd.c:451 src/groupdel.c:206 src/groupmod.c:442
 #, c-format
 msgid "%s: unable to open shadow group file\n"
 msgstr "%s: kan inte öppna skuggruppfilen\n"
 
-#: src/groupadd.c:519
+#: src/groupadd.c:518
 #, c-format
 msgid "%s: group %s exists\n"
 msgstr "%s: grupp %s existerar\n"
 
-#: src/groupdel.c:87
+#: src/groupdel.c:86
 msgid "usage: groupdel group\n"
 msgstr "Användning: groupdel grupp\n"
 
-#: src/groupdel.c:105 src/groupmod.c:188 src/groupmod.c:235
+#: src/groupdel.c:104 src/groupmod.c:187 src/groupmod.c:234
 #, c-format
 msgid "%s: error removing group entry\n"
 msgstr "%s: fel under borttagning av gruppnotering\n"
 
-#: src/groupdel.c:117 src/groupmod.c:207
+#: src/groupdel.c:116 src/groupmod.c:206
 #, c-format
 msgid "%s: error removing group dbm entry\n"
 msgstr "%s: fel under borttagning av dbm-gruppnotering\n"
 
-#: src/groupdel.c:132
+#: src/groupdel.c:131
 #, c-format
 msgid "%s: error removing shadow group entry\n"
 msgstr "%s: fel under borttagning av skuggruppnotering\n"
 
-#: src/groupdel.c:145 src/groupmod.c:253
+#: src/groupdel.c:144 src/groupmod.c:252
 #, c-format
 msgid "%s: error removing shadow group dbm entry\n"
 msgstr "%s: fel under borttagning av dbm-skuggruppnotering\n"
@@ -986,76 +986,76 @@ msgstr "%s: fel under borttagning av dbm-skuggruppnotering\n"
 #.
 #. * Can't remove the group.
 #.
-#: src/groupdel.c:249
+#: src/groupdel.c:248
 #, c-format
 msgid "%s: cannot remove user's primary group.\n"
 msgstr "%s: kan inte ta bort användarens primära grupp.\n"
 
-#: src/groupdel.c:306 src/groupmod.c:502
+#: src/groupdel.c:305 src/groupmod.c:501
 #, c-format
 msgid "%s: group %s does not exist\n"
 msgstr "%s: grupp %s existerar inte\n"
 
-#: src/groupdel.c:320 src/groupmod.c:518
+#: src/groupdel.c:319 src/groupmod.c:517
 #, c-format
 msgid "%s: group %s is a NIS group\n"
 msgstr "%s: grupp %s är en NIS-grupp\n"
 
-#: src/groupdel.c:326 src/groupmod.c:524 src/userdel.c:731 src/usermod.c:990
+#: src/groupdel.c:325 src/groupmod.c:523 src/userdel.c:761 src/usermod.c:989
 #, c-format
 msgid "%s: %s is the NIS master\n"
 msgstr "%s: %s är NIS-mästeren\n"
 
-#: src/groupmod.c:106
+#: src/groupmod.c:105
 msgid "usage: groupmod [-g gid [-o]] [-n name] group\n"
 msgstr "Användning: groupmod [-g gid [-o]] [-n namn] grupp\n"
 
-#: src/groupmod.c:166
+#: src/groupmod.c:165
 #, c-format
 msgid "%s: %s not found in /etc/group\n"
 msgstr "%s: %s hittades inte i /etc/group\n"
 
-#: src/groupmod.c:247
+#: src/groupmod.c:246
 #, 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:300
+#: src/groupmod.c:299
 #, c-format
 msgid "%s: %ld is not a unique gid\n"
 msgstr "%s: %ld är inte ett unikt gid\n"
 
-#: src/groupmod.c:331
+#: 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:63
+#: src/groups.c:62
 #, c-format
 msgid "unknown user %s\n"
 msgstr "okänd användare %s\n"
 
-#: src/grpck.c:99
+#: src/grpck.c:98
 #, c-format
 msgid "Usage: %s [ -r ] [ group [ gshadow ] ]\n"
 msgstr "Användning: %s [ -r ] [ grupp [ gshadow ] ]\n"
 
-#: src/grpck.c:101
+#: src/grpck.c:100
 #, c-format
 msgid "Usage: %s [ -r ] [ group ]\n"
 msgstr "Användning: %s [ -r ] [ grupp ]\n"
 
-#: src/grpck.c:120 src/pwck.c:120
+#: src/grpck.c:119 src/pwck.c:119
 msgid "No"
 msgstr "Nej"
 
-#: src/grpck.c:235 src/grpck.c:243 src/pwck.c:217 src/pwck.c:226
+#: src/grpck.c:234 src/grpck.c:242 src/pwck.c:216 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:258 src/grpck.c:266 src/mkpasswd.c:217 src/pwck.c:242
-#: src/pwck.c:251
+#: src/grpck.c:257 src/grpck.c:265 src/mkpasswd.c:216 src/pwck.c:241
+#: src/pwck.c:250
 #, c-format
 msgid "%s: cannot open file %s\n"
 msgstr "%s: kan inte öppna filen %s\n"
@@ -1064,13 +1064,13 @@ msgstr "%s: kan inte 
 #. * Tell the user this entire line is bogus and
 #. * ask them to delete it.
 #.
-#: src/grpck.c:299
+#: src/grpck.c:298
 msgid "invalid group file entry\n"
 msgstr "felaktig gruppfilsnotering\n"
 
-#: src/grpck.c:300 src/grpck.c:363 src/grpck.c:455 src/grpck.c:518
-#: src/grpck.c:535 src/pwck.c:287 src/pwck.c:349 src/pwck.c:456 src/pwck.c:518
-#: src/pwck.c:542
+#: src/grpck.c:299 src/grpck.c:362 src/grpck.c:454 src/grpck.c:517
+#: src/grpck.c:534 src/pwck.c:286 src/pwck.c:348 src/pwck.c:455 src/pwck.c:517
+#: src/pwck.c:541
 #, c-format
 msgid "delete line `%s'? "
 msgstr "ta bort rad \"%s\"? "
@@ -1079,26 +1079,26 @@ msgstr "ta bort rad \"%s\"? "
 #. * Tell the user this entry is a duplicate of
 #. * another and ask them to delete it.
 #.
-#: src/grpck.c:362
+#: src/grpck.c:361
 msgid "duplicate group entry\n"
 msgstr "dubblett av gruppnotering\n"
 
-#: src/grpck.c:379
+#: src/grpck.c:378
 #, c-format
 msgid "invalid group name `%s'\n"
 msgstr "ogiltigt gruppnamn \"%s\"\n"
 
-#: src/grpck.c:389
+#: src/grpck.c:388
 #, c-format
 msgid "group %s: bad GID (%d)\n"
 msgstr "grupp %s: felaktigt GID (%d)\n"
 
-#: src/grpck.c:415
+#: src/grpck.c:414
 #, c-format
 msgid "group %s: no user %s\n"
 msgstr "grupp %s: användaren %s finns inte\n"
 
-#: src/grpck.c:417 src/grpck.c:586
+#: src/grpck.c:416 src/grpck.c:585
 #, c-format
 msgid "delete member `%s'? "
 msgstr "ta bort medlem \"%s\"? "
@@ -1107,7 +1107,7 @@ msgstr "ta bort medlem \"%s\"? "
 #. * Tell the user this entire line is bogus and
 #. * ask them to delete it.
 #.
-#: src/grpck.c:454
+#: src/grpck.c:453
 msgid "invalid shadow group file entry\n"
 msgstr "felaktig skuggruppfilsnotering\n"
 
@@ -1115,65 +1115,65 @@ msgstr "felaktig skuggruppfilsnotering\n"
 #. * Tell the user this entry is a duplicate of
 #. * another and ask them to delete it.
 #.
-#: src/grpck.c:517
+#: src/grpck.c:516
 msgid "duplicate shadow group entry\n"
 msgstr "dubblett av skuggruppfilsnotering\n"
 
-#: src/grpck.c:534
+#: src/grpck.c:533
 msgid "no matching group file entry\n"
 msgstr "inga matchande gruppfilsnoteringar\n"
 
-#: src/grpck.c:554
+#: src/grpck.c:553
 #, c-format
 msgid "shadow group %s: no administrative user %s\n"
 msgstr "skuggrupp %s: finns ingen administrativ användare %s\n"
 
-#: src/grpck.c:556
+#: src/grpck.c:555
 #, c-format
 msgid "delete administrative member `%s'? "
 msgstr "ta bort administrativa medlemmen \"%s\"? "
 
-#: src/grpck.c:584
+#: src/grpck.c:583
 #, c-format
 msgid "shadow group %s: no user %s\n"
 msgstr "skuggrupp %s: finns ingen användare %s\n"
 
-#: src/grpck.c:611 src/grpck.c:617 src/pwck.c:573 src/pwck.c:581
+#: src/grpck.c:610 src/grpck.c:616 src/pwck.c:572 src/pwck.c:580
 #, c-format
 msgid "%s: cannot update file %s\n"
 msgstr "%s: kan inte uppdatera filen %s\n"
 
-#: src/grpck.c:641 src/pwck.c:607
+#: src/grpck.c:640 src/pwck.c:606
 #, c-format
 msgid "%s: the files have been updated; run mkpasswd\n"
 msgstr "%s: filerna är uppdaterade; kör mkpasswd\n"
 
-#: src/grpck.c:642 src/grpck.c:646 src/pwck.c:608 src/pwck.c:612
+#: src/grpck.c:641 src/grpck.c:645 src/pwck.c:607 src/pwck.c:611
 #, c-format
 msgid "%s: no changes\n"
 msgstr "%s: inga ändringar\n"
 
-#: src/grpck.c:645 src/pwck.c:611
+#: src/grpck.c:644 src/pwck.c:610
 #, c-format
 msgid "%s: the files have been updated\n"
 msgstr "%s: filerna är uppdaterade\n"
 
-#: src/grpconv.c:63 src/grpunconv.c:64
+#: src/grpconv.c:62 src/grpunconv.c:63
 #, c-format
 msgid "%s: can't lock group file\n"
 msgstr "%s: kan inte låsa gruppfilen\n"
 
-#: src/grpconv.c:68 src/grpunconv.c:69
+#: src/grpconv.c:67 src/grpunconv.c:68
 #, c-format
 msgid "%s: can't open group file\n"
 msgstr "%s: kan inte öppna gruppfilen\n"
 
-#: src/grpconv.c:73 src/grpunconv.c:74
+#: src/grpconv.c:72 src/grpunconv.c:73
 #, c-format
 msgid "%s: can't lock shadow group file\n"
 msgstr "%s: kan inte låsa skuggruppfilen\n"
 
-#: src/grpconv.c:78 src/grpunconv.c:79
+#: src/grpconv.c:77 src/grpunconv.c:78
 #, c-format
 msgid "%s: can't open shadow group file\n"
 msgstr "%s: kan inte öppna skuggruppfilen\n"
@@ -1181,85 +1181,85 @@ msgstr "%s: kan inte 
 #.
 #. * This shouldn't happen (the entry exists) but...
 #.
-#: src/grpconv.c:94
+#: src/grpconv.c:93
 #, c-format
 msgid "%s: can't remove shadow group %s\n"
 msgstr "%s: kan inte ta bort skuggruppen %s\n"
 
-#: src/grpconv.c:135 src/pwconv.c:161
+#: src/grpconv.c:134 src/pwconv.c:160
 #, 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:144 src/grpunconv.c:95
+#: src/grpconv.c:143 src/grpunconv.c:94
 #, 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:151 src/grpunconv.c:103
+#: src/grpconv.c:150 src/grpunconv.c:102
 #, c-format
 msgid "%s: can't update shadow group file\n"
 msgstr "%s: kan inte uppdatera skuggruppfilen\n"
 
-#: src/grpconv.c:155 src/grpunconv.c:108
+#: src/grpconv.c:154 src/grpunconv.c:107
 #, c-format
 msgid "%s: can't update group file\n"
 msgstr "%s: kan inte uppdatera gruppfilen\n"
 
-#: src/grpconv.c:170 src/grpunconv.c:129
+#: src/grpconv.c:169 src/grpunconv.c:128
 #, 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:113
+#: src/grpunconv.c:112
 #, c-format
 msgid "%s: can't delete shadow group file\n"
 msgstr "%s: kan inte ta bort skuggruppfilen\n"
 
-#: src/id.c:57
+#: src/id.c:56
 msgid "usage: id [ -a ]\n"
 msgstr "Användning: id [ -a ]\n"
 
-#: src/id.c:59
+#: src/id.c:58
 msgid "usage: id\n"
 msgstr "Användning: id\n"
 
-#: src/id.c:119
+#: src/id.c:118
 #, c-format
 msgid "uid=%d(%s)"
 msgstr "uid=%d(%s)"
 
-#: src/id.c:121
+#: src/id.c:120
 #, c-format
 msgid "uid=%d"
 msgstr "uid=%d"
 
-#: src/id.c:125
+#: src/id.c:124
 #, c-format
 msgid " gid=%d(%s)"
 msgstr " gid=%d(%s)"
 
-#: src/id.c:127
+#: src/id.c:126
 #, c-format
 msgid " gid=%d"
 msgstr " gid=%d"
 
-#: src/id.c:137
+#: src/id.c:136
 #, c-format
 msgid " euid=%d(%s)"
 msgstr " euid=%d(%s)"
 
-#: src/id.c:139
+#: src/id.c:138
 #, c-format
 msgid " euid=%d"
 msgstr " euid=%d"
 
-#: src/id.c:144
+#: src/id.c:143
 #, c-format
 msgid " egid=%d(%s)"
 msgstr " egid=%d(%s)"
 
-#: src/id.c:146
+#: src/id.c:145
 #, c-format
 msgid " egid=%d"
 msgstr " egid=%d"
@@ -1272,42 +1272,42 @@ msgstr " egid=%d"
 #. * where "###" is a numerical value and "aaa" is the
 #. * corresponding name for each respective numerical value.
 #.
-#: src/id.c:167
+#: src/id.c:166
 msgid " groups="
 msgstr " grupper="
 
-#: src/lastlog.c:168
+#: src/lastlog.c:167
 msgid "Username         Port     From             Latest\n"
 msgstr "Användarnamn     Port     Från             Senaste\n"
 
-#: src/lastlog.c:170
+#: src/lastlog.c:169
 msgid "Username                Port     Latest\n"
 msgstr "Användarnamn            Port     Senaste\n"
 
-#: src/lastlog.c:184
+#: src/lastlog.c:183
 msgid "**Never logged in**"
 msgstr "**Aldrig inloggad**"
 
-#: src/login.c:199
+#: src/login.c:198
 #, c-format
 msgid "usage: %s [-p] [name]\n"
 msgstr "Användning: %s [-p] [namn]\n"
 
-#: src/login.c:202
+#: src/login.c:201
 #, c-format
 msgid "       %s [-p] [-h host] [-f name]\n"
 msgstr "       %s [-p] [-h värd] [-f namn]\n"
 
-#: src/login.c:204
+#: src/login.c:203
 #, c-format
 msgid "       %s [-p] -r host\n"
 msgstr "       %s [-p] -r värd\n"
 
-#: src/login.c:287
+#: src/login.c:286
 msgid "Invalid login time\n"
 msgstr "Felaktig inloggningstid\n"
 
-#: src/login.c:342
+#: src/login.c:341
 msgid ""
 "\n"
 "System closed for routine maintenance\n"
@@ -1315,7 +1315,7 @@ msgstr ""
 "\n"
 "Systemet är stängt för rutinunderhåll\n"
 
-#: src/login.c:352
+#: src/login.c:351
 msgid ""
 "\n"
 "[Disconnect bypassed -- root login allowed.]\n"
@@ -1323,7 +1323,7 @@ msgstr ""
 "\n"
 "[Nerkoppling kringgicks -- root inloggning tillåten.]\n"
 
-#: src/login.c:391
+#: src/login.c:390
 #, c-format
 msgid ""
 "\n"
@@ -1342,7 +1342,7 @@ msgstr " p
 msgid " on `%.100s'"
 msgstr " på \"%.100s\""
 
-#: src/login.c:807
+#: src/login.c:834
 #, c-format
 msgid ""
 "\n"
@@ -1351,34 +1351,34 @@ msgstr ""
 "\n"
 "%s användare: "
 
-#: src/login.c:809
+#: src/login.c:836
 msgid "login: "
 msgstr "användare: "
 
-#: src/login.c:991 src/sulogin.c:233
+#: src/login.c:1026 src/sulogin.c:231
 msgid "Login incorrect"
 msgstr "Felaktig inloggning"
 
-#: src/login.c:1163
+#: src/login.c:1213
 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:1173
+#: src/login.c:1223
 #, c-format
 msgid "Last login: %s on %s"
 msgstr "Senaste inloggning: %s på %s"
 
-#: src/login.c:1176
+#: src/login.c:1226
 #, c-format
 msgid "Last login: %.19s on %s"
 msgstr "Senaste inloggning: %.19s på %s"
 
-#: src/login.c:1181
+#: src/login.c:1231
 #, c-format
 msgid " from %.*s"
 msgstr " från %.*s"
 
-#: src/login.c:1246
+#: src/login.c:1303
 msgid "Starting rad_login\n"
 msgstr "Startar rad_login\n"
 
@@ -1387,191 +1387,191 @@ msgstr "Startar rad_login\n"
 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:246 src/mkpasswd.c:250
+#: src/mkpasswd.c:245 src/mkpasswd.c:249
 #, c-format
 msgid "%s: cannot overwrite file %s\n"
 msgstr "%s: kan inte skriva över filen %s\n"
 
-#: src/mkpasswd.c:264
+#: src/mkpasswd.c:263
 #, 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:297
+#: src/mkpasswd.c:296
 #, c-format
 msgid "%s: the beginning with "
 msgstr "%s: början med "
 
-#: src/mkpasswd.c:322
+#: src/mkpasswd.c:321
 #, c-format
 msgid "%s: error parsing line \"%s\"\n"
 msgstr "%s: fel under analysering av rad \"%s\"\n"
 
-#: src/mkpasswd.c:327 src/mkpasswd.c:329 src/mkpasswd.c:331 src/mkpasswd.c:333
+#: src/mkpasswd.c:326 src/mkpasswd.c:328 src/mkpasswd.c:330 src/mkpasswd.c:332
 msgid "adding record for name "
 msgstr "lägger till notering för namn "
 
-#: src/mkpasswd.c:337 src/mkpasswd.c:342 src/mkpasswd.c:346 src/mkpasswd.c:350
+#: src/mkpasswd.c:336 src/mkpasswd.c:341 src/mkpasswd.c:345 src/mkpasswd.c:349
 #, c-format
 msgid "%s: error adding record for "
 msgstr "%s: fel under tillägg av notering för "
 
-#: src/mkpasswd.c:368
+#: src/mkpasswd.c:367
 #, c-format
 msgid "added %d entries, longest was %d\n"
 msgstr "lade till %d noteringar, den längsta var %d\n"
 
-#: src/mkpasswd.c:383
+#: 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:385
+#: 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:388
+#: src/mkpasswd.c:387
 #, c-format
 msgid "Usage: %s [ -vf ] [ -p|g ] file\n"
 msgstr "Användning: %s [ -vf ] [ -p|g ] fil\n"
 
-#: src/newgrp.c:67
+#: src/newgrp.c:66
 msgid "usage: newgrp [ - ] [ group ]\n"
 msgstr "Användning: newgrp [ - ] [ grupp ]\n"
 
-#: src/newgrp.c:69
+#: src/newgrp.c:68
 #, fuzzy
 msgid "usage: sg group [[-c] command ]\n"
 msgstr "Användning: sg grupp [ kommando ]\n"
 
-#: src/newgrp.c:122
+#: src/newgrp.c:125
 #, c-format
 msgid "unknown uid: %d\n"
 msgstr "okänt uid: %d\n"
 
-#: src/newgrp.c:198
+#: src/newgrp.c:201
 #, c-format
 msgid "unknown gid: %ld\n"
 msgstr "okänt gid: %ld\n"
 
-#: src/newgrp.c:242
+#: src/newgrp.c:245
 #, c-format
 msgid "unknown gid: %d\n"
 msgstr "okänt gid: %d\n"
 
-#: src/newgrp.c:315 src/newgrp.c:324
+#: src/newgrp.c:323 src/newgrp.c:332
 msgid "Sorry.\n"
 msgstr "Tyvärr.\n"
 
-#: src/newgrp.c:356
+#: src/newgrp.c:364
 msgid "too many groups\n"
 msgstr "för många grupper\n"
 
-#: src/newusers.c:79
+#: src/newusers.c:76
 #, c-format
 msgid "Usage: %s [ input ]\n"
 msgstr "Användning: %s [ indata ]\n"
 
-#: src/newusers.c:367
+#: src/newusers.c:364
 #, c-format
 msgid "%s: can't lock /etc/passwd.\n"
 msgstr "%s: kan inte låsa /etc/passwd.\n"
 
-#: src/newusers.c:378
+#: src/newusers.c:375
 #, 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:393
+#: src/newusers.c:390
 #, c-format
 msgid "%s: can't open files\n"
 msgstr "%s: kan inte öppna filerna\n"
 
-#: src/newusers.c:438
+#: src/newusers.c:435
 #, c-format
 msgid "%s: line %d: invalid line\n"
 msgstr "%s: rad %d: ogiltig rad\n"
 
-#: src/newusers.c:456
+#: src/newusers.c:453
 #, c-format
 msgid "%s: line %d: can't create GID\n"
 msgstr "%s: rad %d: kan inte skapa GID\n"
 
-#: src/newusers.c:472
+#: src/newusers.c:469
 #, c-format
 msgid "%s: line %d: can't create UID\n"
 msgstr "%s: rad %d: kan inte skapa UID\n"
 
-#: src/newusers.c:484
+#: src/newusers.c:481
 #, 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:492
+#: src/newusers.c:489
 #, c-format
 msgid "%s: line %d: can't update password\n"
 msgstr "%s: rad %d: kan inte uppdatera lösenordet\n"
 
-#: src/newusers.c:509
+#: src/newusers.c:506
 #, c-format
 msgid "%s: line %d: mkdir failed\n"
 msgstr "%s: rad %d: mkdir misslyckades\n"
 
-#: src/newusers.c:513
+#: src/newusers.c:510
 #, c-format
 msgid "%s: line %d: chown failed\n"
 msgstr "%s: rad %d: chown misslyckades\n"
 
-#: src/newusers.c:522
+#: src/newusers.c:519
 #, c-format
 msgid "%s: line %d: can't update entry\n"
 msgstr "%s: rad %d: kan inte uppdatera notering\n"
 
-#: src/newusers.c:553
+#: src/newusers.c:550
 #, c-format
 msgid "%s: error updating files\n"
 msgstr "%s: kunde inte uppdatera filerna\n"
 
-#: src/passwd.c:241
+#: src/passwd.c:239
 #, c-format
 msgid "usage: %s [ -f | -s ] [ name ]\n"
 msgstr "Användning: %s [ -f | -s ] [ namn ]\n"
 
-#: src/passwd.c:244
+#: src/passwd.c:242
 #, 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"
 
-#: src/passwd.c:247
+#: src/passwd.c:245
 #, c-format
 msgid "       %s { -l | -u | -d | -S | -e } name\n"
 msgstr "       %s { -l | -u | -d | -S | -e } namn\n"
 
-#: src/passwd.c:349
+#: src/passwd.c:347
 #, 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:350
+#: src/passwd.c:348
 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:356
+#: src/passwd.c:354
 msgid "Old password: "
 msgstr "Förra lösenordet: "
 
-#: src/passwd.c:363
+#: src/passwd.c:361
 #, c-format
 msgid "Incorrect password for `%s'\n"
 msgstr "Felaktigt lösenord för \"%s\"\n"
 
-#: src/passwd.c:376
+#: src/passwd.c:374
 #, c-format
 msgid "Warning: user %s has a TCFS key.\n"
 msgstr "Varning: användare %s har en TCFS-nyckel.\n"
 
-#: src/passwd.c:394
+#: src/passwd.c:392
 #, c-format
 msgid ""
 "Enter the new password (minimum of %d, maximum of %d characters)\n"
@@ -1580,15 +1580,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:401
+#: src/passwd.c:399
 msgid "New password: "
 msgstr "Nytt lösenord: "
 
-#: src/passwd.c:411
+#: src/passwd.c:409
 msgid "Try again.\n"
 msgstr "Försök igen.\n"
 
-#: src/passwd.c:420
+#: src/passwd.c:418
 msgid ""
 "\n"
 "Warning: weak password (enter it again to use it anyway).\n"
@@ -1596,81 +1596,81 @@ msgstr ""
 "\n"
 "Varning: svagt lösenord (skriv in det igen för att använda det ändå).\n"
 
-#: src/passwd.c:429
+#: src/passwd.c:427
 msgid "They don't match; try again.\n"
 msgstr "De matchar inte; försök igen.\n"
 
-#: src/passwd.c:514 src/passwd.c:530
+#: src/passwd.c:512 src/passwd.c:528
 #, c-format
 msgid "The password for %s cannot be changed.\n"
 msgstr "Lösenordet för %s kan inte bytas.\n"
 
-#: src/passwd.c:558
+#: src/passwd.c:556
 #, 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:695
+#: src/passwd.c:693
 #, c-format
 msgid "%s: out of memory\n"
 msgstr "%s: slut på minne\n"
 
-#: src/passwd.c:847
+#: src/passwd.c:845
 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:853
+#: src/passwd.c:851
 msgid "Cannot open the TCFS key database.\n"
 msgstr "Kan inte öppna TCFS-nyckeldatabasen.\n"
 
-#: src/passwd.c:859
+#: src/passwd.c:857
 msgid "Error updating the TCFS key database.\n"
 msgstr "Fel under uppdatering av TCFS-nyckeldatabasen.\n"
 
-#: src/passwd.c:864
+#: src/passwd.c:862
 msgid "Cannot commit TCFS changes.\n"
 msgstr "Kan inte utföra TCFS ändringar.\n"
 
-#: src/passwd.c:1071
+#: src/passwd.c:1069
 #, c-format
 msgid "%s: Cannot execute %s"
 msgstr "%s: Kan inte starta %s"
 
-#: src/passwd.c:1178
+#: src/passwd.c:1176
 #, c-format
 msgid "%s: repository %s not supported\n"
 msgstr "%s: förvaringsplatsen %s stöds ej\n"
 
-#: src/passwd.c:1265
+#: src/passwd.c:1263
 #, c-format
 msgid "%s: Permission denied\n"
 msgstr "%s: Tillåtelse nekas\n"
 
-#: src/passwd.c:1289
+#: src/passwd.c:1287
 #, 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:1354
+#: src/passwd.c:1352
 #, c-format
 msgid "Changing password for %s\n"
 msgstr "Ändrar lösenord för %s\n"
 
-#: src/passwd.c:1358
+#: src/passwd.c:1356
 #, c-format
 msgid "The password for %s is unchanged.\n"
 msgstr "Lösenordet för %s är oförändrat.\n"
 
-#: src/passwd.c:1414
+#: src/passwd.c:1412
 msgid "Password changed.\n"
 msgstr "Lösenordet ändrat.\n"
 
-#: src/pwck.c:99
+#: src/pwck.c:98
 #, c-format
 msgid "Usage: %s [ -qr ] [ passwd [ shadow ] ]\n"
 msgstr "Användning: %s [ -qr ] [ passwd [ shadow ] ]\n"
 
-#: src/pwck.c:101
+#: src/pwck.c:100
 #, c-format
 msgid "Usage: %s [ -qr ] [ passwd ]\n"
 msgstr "Användning: %s [ -qr ] [ passwd ]\n"
@@ -1679,7 +1679,7 @@ msgstr "Anv
 #. * Tell the user this entire line is bogus and
 #. * ask them to delete it.
 #.
-#: src/pwck.c:286
+#: src/pwck.c:285
 msgid "invalid password file entry\n"
 msgstr "felaktig notering i lösenordsfilen\n"
 
@@ -1687,16 +1687,16 @@ msgstr "felaktig notering i l
 #. * Tell the user this entry is a duplicate of
 #. * another and ask them to delete it.
 #.
-#: src/pwck.c:348
+#: src/pwck.c:347
 msgid "duplicate password entry\n"
 msgstr "dubblett av lösenords notering\n"
 
-#: src/pwck.c:364
+#: src/pwck.c:363
 #, c-format
 msgid "invalid user name `%s'\n"
 msgstr "ogiltigt användarnamn \"%s\"\n"
 
-#: src/pwck.c:374
+#: src/pwck.c:373
 #, c-format
 msgid "user %s: bad UID (%d)\n"
 msgstr "användare %s: felaktigt UID (%d)\n"
@@ -1704,7 +1704,7 @@ msgstr "anv
 #.
 #. * No primary group, just give a warning
 #.
-#: src/pwck.c:389
+#: src/pwck.c:388
 #, c-format
 msgid "user %s: no group %d\n"
 msgstr "användare %s: ingen grupp %d\n"
@@ -1712,7 +1712,7 @@ msgstr "anv
 #.
 #. * Home directory doesn't exist, give a warning
 #.
-#: src/pwck.c:404
+#: src/pwck.c:403
 #, c-format
 msgid "user %s: directory %s does not exist\n"
 msgstr "användare %s: katalogen %s finns inte\n"
@@ -1720,7 +1720,7 @@ msgstr "anv
 #.
 #. * Login shell doesn't exist, give a warning
 #.
-#: src/pwck.c:419
+#: src/pwck.c:418
 #, c-format
 msgid "user %s: program %s does not exist\n"
 msgstr "användare %s: programmet %s finns inte\n"
@@ -1729,7 +1729,7 @@ msgstr "anv
 #. * Tell the user this entire line is bogus and
 #. * ask them to delete it.
 #.
-#: src/pwck.c:455
+#: src/pwck.c:454
 msgid "invalid shadow password file entry\n"
 msgstr "felaktig notering i skugglösenordsfilen\n"
 
@@ -1737,7 +1737,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:517
+#: src/pwck.c:516
 msgid "duplicate shadow password entry\n"
 msgstr "dubblett av notering i skugglösenordsfilen\n"
 
@@ -1745,41 +1745,41 @@ 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:541
+#: src/pwck.c:540
 msgid "no matching password file entry\n"
 msgstr "ingen matchande notering i lösenordsfilen\n"
 
-#: src/pwck.c:558
+#: src/pwck.c:557
 #, 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:95 src/pwunconv.c:109
+#: src/pwconv.c:94 src/pwunconv.c:108
 #, c-format
 msgid "%s: can't lock passwd file\n"
 msgstr "%s: kan inte låsa lösenordsfilen\n"
 
-#: src/pwconv.c:100 src/pwunconv.c:114
+#: src/pwconv.c:99 src/pwunconv.c:113
 #, c-format
 msgid "%s: can't open passwd file\n"
 msgstr "%s: kan inte öppna lösenordsfilen\n"
 
-#: src/pwconv.c:127
+#: src/pwconv.c:126
 #, 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:170
+#: src/pwconv.c:169
 #, 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:177
+#: src/pwconv.c:176
 #, c-format
 msgid "%s: can't update shadow file\n"
 msgstr "%s: kan inte uppdatera skuggfilen\n"
 
-#: src/pwconv.c:181
+#: src/pwconv.c:180
 #, c-format
 msgid "%s: can't update passwd file\n"
 msgstr "%s: kan inte uppdatera lösenordsfilen\n"
@@ -1789,52 +1789,52 @@ msgstr "%s: kan inte uppdatera l
 msgid "%s: Shadow passwords are not configured.\n"
 msgstr "%s: Shadowlösenord är inte konfigurerade.\n"
 
-#: src/pwunconv.c:172
+#: src/pwunconv.c:171
 #, 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:189
+#: src/pwunconv.c:188
 #, c-format
 msgid "%s: can't delete shadow password file\n"
 msgstr "%s: kan inte ta bort skugglösenordsfilen\n"
 
-#: src/su.c:145
+#: src/su.c:140
 msgid "Sorry."
 msgstr "Tyvärr."
 
-#: src/su.c:227
+#: src/su.c:222
 #, 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:319
+#: src/su.c:311
 #, c-format
 msgid "%s: pam_start: error %d\n"
 msgstr "%s: pam_start: fel %d\n"
 
-#: src/su.c:345
+#: src/su.c:337
 #, c-format
 msgid "Unknown id: %s\n"
 msgstr "Okänt id: %s\n"
 
 #. access denied (-1) or unexpected value
-#: src/su.c:380 src/su.c:395
+#: src/su.c:372 src/su.c:387
 #, 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:391
+#: src/su.c:383
 msgid "(Enter your own password.)"
 msgstr "(Skriv in ditt eget lösenord.)"
 
-#: src/su.c:412
+#: src/su.c:404
 #, c-format
 msgid "%s: permission denied (shell).\n"
 msgstr "%s: tillåtelse nekas (skal).\n"
 
-#: src/su.c:436
+#: src/su.c:428
 #, c-format
 msgid ""
 "%s: %s\n"
@@ -1843,19 +1843,19 @@ msgstr ""
 "%s: %s\n"
 "(Ignorerad)\n"
 
-#: src/su.c:605
+#: src/su.c:628
 msgid "No shell\n"
 msgstr "Inget skal\n"
 
 #. must be a password file!
-#: src/sulogin.c:138
+#: src/sulogin.c:136
 msgid "No password file\n"
 msgstr "Ingen lösenordsfil\n"
 
 #.
 #. * Fail secure
 #.
-#: src/sulogin.c:180
+#: src/sulogin.c:178
 msgid "No password entry for 'root'\n"
 msgstr "Ingen lösenordsnotering för \"root\"\n"
 
@@ -1864,7 +1864,7 @@ msgstr "Ingen l
 #. * given we just exit.
 #.
 #. get a password for root
-#: src/sulogin.c:194
+#: src/sulogin.c:192
 msgid ""
 "\n"
 "Type control-d to proceed with normal startup,\n"
@@ -1875,495 +1875,500 @@ msgstr ""
 "(eller skriv in lösenordet för root för systemunderhåll):"
 
 #. make new environment active
-#: src/sulogin.c:243
+#: src/sulogin.c:241
 msgid "Entering System Maintenance Mode\n"
 msgstr "Går in i systemunderhållsläge\n"
 
-#: src/useradd.c:244
+#: src/useradd.c:243
 #, c-format
 msgid "%s: rebuild the group database\n"
 msgstr "%s: bygg om gruppdatabasen\n"
 
-#: src/useradd.c:251
+#: src/useradd.c:250
 #, c-format
 msgid "%s: rebuild the shadow group database\n"
 msgstr "%s: bygg om skuggruppdatabasen\n"
 
-#: src/useradd.c:288 src/usermod.c:941
+#: src/useradd.c:287 src/usermod.c:940
 #, c-format
 msgid "%s: invalid numeric argument `%s'\n"
 msgstr "%s: ogiltigt numeriskt argument \"%s\"\n"
 
-#: src/useradd.c:344
+#: src/useradd.c:343
 #, c-format
 msgid "%s: unknown gid %s\n"
 msgstr "%s: okänt gid %s\n"
 
-#: src/useradd.c:351 src/useradd.c:643 src/useradd.c:1229 src/usermod.c:253
-#: src/usermod.c:1072
+#: src/useradd.c:350 src/useradd.c:642 src/useradd.c:1228 src/usermod.c:252
+#: src/usermod.c:1071
 #, c-format
 msgid "%s: unknown group %s\n"
 msgstr "%s: okänd grupp %s\n"
 
-#: src/useradd.c:419
+#: src/useradd.c:418
 #, c-format
 msgid "group=%s,%ld  basedir=%s  skel=%s\n"
 msgstr "grupp=%s,%ld  baskatalog=%s  skel=%s\n"
 
-#: src/useradd.c:422
+#: src/useradd.c:421
 #, c-format
 msgid "shell=%s  "
 msgstr "skal=%s  "
 
-#: src/useradd.c:424
+#: src/useradd.c:423
 #, c-format
 msgid "inactive=%ld  expire=%s"
 msgstr "inaktiv=%ld  upphör=%s"
 
-#: src/useradd.c:428
+#: src/useradd.c:427
 #, c-format
 msgid "GROUP=%ld\n"
 msgstr "GRUPP=%ld\n"
 
-#: src/useradd.c:429
+#: src/useradd.c:428
 #, c-format
 msgid "HOME=%s\n"
 msgstr "HEM=%s\n"
 
-#: src/useradd.c:431
+#: src/useradd.c:430
 #, c-format
 msgid "INACTIVE=%ld\n"
 msgstr "INAKTIV=%ld\n"
 
-#: src/useradd.c:432
+#: src/useradd.c:431
 #, c-format
 msgid "EXPIRE=%s\n"
 msgstr "UPPHÖR=%s\n"
 
-#: src/useradd.c:434
+#: src/useradd.c:433
 #, c-format
 msgid "SHELL=%s\n"
 msgstr "SKAL=%s\n"
 
-#: src/useradd.c:435
+#: src/useradd.c:434
 #, c-format
 msgid "SKEL=%s\n"
 msgstr "SKEL=%s\n"
 
-#: src/useradd.c:471
+#: src/useradd.c:470
 #, c-format
 msgid "%s: cannot create new defaults file\n"
 msgstr "%s: kan inte skapa en ny standardfil\n"
 
-#: src/useradd.c:565 src/useradd.c:576
+#: src/useradd.c:564 src/useradd.c:575
 #, c-format
 msgid "%s: rename: %s"
 msgstr "%s: rename: %s"
 
-#: src/useradd.c:663 src/usermod.c:273
+#: src/useradd.c:662 src/usermod.c:272
 #, c-format
 msgid "%s: group `%s' is a NIS group.\n"
 msgstr "%s: grupp \"%s\" är en NIS-grupp.\n"
 
-#: src/useradd.c:671 src/usermod.c:281
+#: src/useradd.c:670 src/usermod.c:280
 #, 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:703 src/usermod.c:313
+#: src/useradd.c:702 src/usermod.c:312
 #, 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:706
+#: src/useradd.c:705
 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:709 src/usermod.c:319
+#: src/useradd.c:708 src/usermod.c:318
 msgid "[-f inactive] [-e expire ] "
 msgstr "[-f inaktiv] [-e upphör ] "
 
-#: src/useradd.c:712
+#: src/useradd.c:711
 msgid "[-A program] "
 msgstr "[-A program] "
 
-#: src/useradd.c:714 src/usermod.c:324
+#: src/useradd.c:713 src/usermod.c:323
 msgid "[-p passwd] name\n"
 msgstr "[-p passwd] namn\n"
 
-#: src/useradd.c:716
+#: src/useradd.c:715
 #, 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:719
+#: src/useradd.c:718
 msgid "\t\t[-f inactive] [-e expire ]\n"
 msgstr "\t\t[-f inaktiv] [-e utgång ]\n"
 
-#: src/useradd.c:816 src/usermod.c:446
+#: src/useradd.c:815 src/usermod.c:445
 #, c-format
 msgid "%s: error locking group file\n"
 msgstr "%s: fel under låsning av gruppfilen\n"
 
-#: src/useradd.c:820 src/usermod.c:451
+#: src/useradd.c:819 src/usermod.c:450
 #, c-format
 msgid "%s: error opening group file\n"
 msgstr "%s: fel under öppning av gruppfilen\n"
 
-#: src/useradd.c:825 src/usermod.c:558
+#: src/useradd.c:824 src/usermod.c:557
 #, c-format
 msgid "%s: error locking shadow group file\n"
 msgstr "%s: fel under låsning av skuggruppfilen\n"
 
-#: src/useradd.c:830 src/usermod.c:564
+#: src/useradd.c:829 src/usermod.c:563
 #, c-format
 msgid "%s: error opening shadow group file\n"
 msgstr "%s: fel under öppning av skuggruppfilen\n"
 
-#: src/useradd.c:1002
+#: src/useradd.c:1001
 #, c-format
 msgid "%s: uid %d is not unique\n"
 msgstr "%s: uid %d är inte unikt\n"
 
-#: src/useradd.c:1032
+#: src/useradd.c:1031
 #, c-format
 msgid "%s: can't get unique uid\n"
 msgstr "%s: kan inte hitta ett unikt uid\n"
 
-#: src/useradd.c:1140 src/useradd.c:1284 src/usermod.c:1020 src/usermod.c:1031
-#: src/usermod.c:1041 src/usermod.c:1087 src/usermod.c:1122
+#: src/useradd.c:1139 src/useradd.c:1283 src/usermod.c:1019 src/usermod.c:1030
+#: src/usermod.c:1040 src/usermod.c:1086 src/usermod.c:1121
 #, c-format
 msgid "%s: invalid field `%s'\n"
 msgstr "%s: felaktigt fält \"%s\"\n"
 
-#: src/useradd.c:1154
+#: src/useradd.c:1153
 #, c-format
 msgid "%s: invalid base directory `%s'\n"
 msgstr "%s: felaktig baskatalog \"%s\"\n"
 
-#: src/useradd.c:1164
+#: src/useradd.c:1163
 #, c-format
 msgid "%s: invalid comment `%s'\n"
 msgstr "%s: felaktig kommentar \"%s\"\n"
 
-#: src/useradd.c:1174
+#: src/useradd.c:1173
 #, c-format
 msgid "%s: invalid home directory `%s'\n"
 msgstr "%s: felaktig hemkatalog \"%s\"\n"
 
-#: src/useradd.c:1192 src/usermod.c:1054
+#: src/useradd.c:1191 src/usermod.c:1053
 #, c-format
 msgid "%s: invalid date `%s'\n"
 msgstr "%s: felaktigt datum \"%s\"\n"
 
-#: src/useradd.c:1204
+#: src/useradd.c:1203
 #, c-format
 msgid "%s: shadow passwords required for -e\n"
 msgstr "%s: skugglösenord krävs för -e\n"
 
-#: src/useradd.c:1219
+#: src/useradd.c:1218
 #, c-format
 msgid "%s: shadow passwords required for -f\n"
 msgstr "%s: skugglösenord krävs för -f\n"
 
-#: src/useradd.c:1293
+#: src/useradd.c:1292
 #, c-format
 msgid "%s: invalid shell `%s'\n"
 msgstr "%s: felaktigt skal \"%s\"\n"
 
-#: src/useradd.c:1334
+#: src/useradd.c:1333
 #, c-format
 msgid "%s: invalid user name `%s'\n"
 msgstr "%s: felaktigt användar namn \"%s\"\n"
 
-#: src/useradd.c:1370 src/userdel.c:262 src/usermod.c:1184
+#: src/useradd.c:1369 src/userdel.c:292 src/usermod.c:1183
 #, c-format
 msgid "%s: cannot rewrite password file\n"
 msgstr "%s: kan inte skriva om lösenordsfilen\n"
 
-#: src/useradd.c:1375 src/userdel.c:265 src/usermod.c:1189
+#: src/useradd.c:1374 src/userdel.c:295 src/usermod.c:1188
 #, c-format
 msgid "%s: cannot rewrite shadow password file\n"
 msgstr "%s: kan inte skriva om skugglösenordsfilen\n"
 
-#: src/useradd.c:1415 src/userdel.c:329 src/usermod.c:1224
+#: src/useradd.c:1414 src/userdel.c:359 src/usermod.c:1223
 #, c-format
 msgid "%s: unable to lock password file\n"
 msgstr "%s: kan inte låsa lösenordsfilen\n"
 
-#: src/useradd.c:1419 src/userdel.c:333 src/usermod.c:1228
+#: src/useradd.c:1418 src/userdel.c:363 src/usermod.c:1227
 #, c-format
 msgid "%s: unable to open password file\n"
 msgstr "%s: kan inte öppna lösenordsfilen\n"
 
-#: src/useradd.c:1425 src/userdel.c:338 src/usermod.c:1233
+#: src/useradd.c:1424 src/userdel.c:368 src/usermod.c:1232
 #, c-format
 msgid "%s: cannot lock shadow password file\n"
 msgstr "%s: kan inte låsa skugglösenordsfilen\n"
 
-#: src/useradd.c:1431 src/userdel.c:343 src/usermod.c:1238
+#: src/useradd.c:1430 src/userdel.c:373 src/usermod.c:1237
 #, c-format
 msgid "%s: cannot open shadow password file\n"
 msgstr "%s: kan inte öppna skugglösenordsfilen\n"
 
-#: src/useradd.c:1530 src/usermod.c:1325
+#: src/useradd.c:1529 src/usermod.c:1324
 #, c-format
 msgid "%s: error adding authentication method\n"
 msgstr "%s: fel under tillägning av metod för äkthetsbevisning\n"
 
-#: src/useradd.c:1553
+#: src/useradd.c:1552
 #, c-format
 msgid "%s: error adding new password entry\n"
 msgstr "%s: fel under tilläggning av ny lösenordsnotering\n"
 
-#: src/useradd.c:1568
+#: src/useradd.c:1567
 #, c-format
 msgid "%s: error updating password dbm entry\n"
 msgstr "%s: fel under uppdatering av dbm-lösenordsnotering\n"
 
-#: src/useradd.c:1584 src/usermod.c:1384
+#: src/useradd.c:1583 src/usermod.c:1383
 #, 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:1600 src/usermod.c:1399
+#: src/useradd.c:1599 src/usermod.c:1398
 #, c-format
 msgid "%s: error updating shadow passwd dbm entry\n"
 msgstr "%s: fel under uppdatering av dbm-skugglösenordsnotering\n"
 
-#: src/useradd.c:1632
+#: src/useradd.c:1631
 #, c-format
 msgid "%s: cannot create directory %s\n"
 msgstr "%s: kan inte skapa katalog %s\n"
 
-#: src/useradd.c:1709 src/usermod.c:1162
+#: src/useradd.c:1708 src/usermod.c:1161
 #, c-format
 msgid "%s: user %s exists\n"
 msgstr "%s: användare %s existerar\n"
 
-#: src/useradd.c:1739
+#: src/useradd.c:1738
 #, 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:128
+#: src/userdel.c:127
 #, c-format
 msgid "usage: %s [-r] name\n"
 msgstr "Användning: %s [-r] namn\n"
 
-#: src/userdel.c:175 src/userdel.c:230
+#: src/userdel.c:178 src/userdel.c:260
 #, c-format
 msgid "%s: error updating group entry\n"
 msgstr "%s: fel under uppdatering av gruppnotering\n"
 
-#: src/userdel.c:185 src/userdel.c:239
+#: src/userdel.c:188 src/userdel.c:269
 #, c-format
 msgid "%s: cannot update dbm group entry\n"
 msgstr "%s: kan inte uppdatera dbm-gruppnotering\n"
 
-#: src/userdel.c:270
+#: src/userdel.c:215
+#, fuzzy, c-format
+msgid "%s: cannot remove dbm group entry\n"
+msgstr "%s: kan inte uppdatera dbm-gruppnotering\n"
+
+#: src/userdel.c:300
 #, c-format
 msgid "%s: cannot rewrite TCFS key file\n"
 msgstr "%s: kan inte skriva om TCFS-nyckelfilen\n"
 
-#: src/userdel.c:350
+#: src/userdel.c:380
 #, c-format
 msgid "%s: cannot lock TCFS key file\n"
 msgstr "%s: kan inte låsa TCFS-nyckelfilen\n"
 
-#: src/userdel.c:354
+#: src/userdel.c:384
 #, c-format
 msgid "%s: cannot open TCFS key file\n"
 msgstr "%s: kan inte öppna TCFS-nyckelfilen\n"
 
-#: src/userdel.c:363
+#: src/userdel.c:393
 #, c-format
 msgid "%s: cannot open group file\n"
 msgstr "%s: kan inte öppna gruppfilen\n"
 
-#: src/userdel.c:373
+#: src/userdel.c:403
 #, c-format
 msgid "%s: cannot open shadow group file\n"
 msgstr "%s: kan inte öppna skuggruppfilen\n"
 
-#: src/userdel.c:404 src/userdel.c:419
+#: src/userdel.c:434 src/userdel.c:449
 #, c-format
 msgid "%s: error deleting authentication\n"
 msgstr "%s: fel under borttagning av metod för äkthetsbevisning\n"
 
-#: src/userdel.c:428
+#: src/userdel.c:458
 #, c-format
 msgid "%s: error deleting password entry\n"
 msgstr "%s: fel under borttagning av lösenordsnotering\n"
 
-#: src/userdel.c:431
+#: src/userdel.c:461
 #, c-format
 msgid "%s: error deleting shadow password entry\n"
 msgstr "%s: fel under borttagning av skugglösenordsnotering\n"
 
-#: src/userdel.c:440
+#: src/userdel.c:470
 #, c-format
 msgid "%s: error deleting TCFS entry\n"
 msgstr "%s: fel under borttagning av TCFS-notering\n"
 
-#: src/userdel.c:453
+#: src/userdel.c:483
 #, c-format
 msgid "%s: error deleting password dbm entry\n"
 msgstr "%s: fel under borttagning av dbm-lösenordsnotering\n"
 
-#: src/userdel.c:472
+#: src/userdel.c:502
 #, c-format
 msgid "%s: error deleting shadow passwd dbm entry\n"
 msgstr "%s: fel under borttagning av dbm-skugglösenordsnotering\n"
 
-#: src/userdel.c:513
+#: src/userdel.c:543
 #, c-format
 msgid "%s: user %s is currently logged in\n"
 msgstr "%s: användare %s är inloggad\n"
 
-#: src/userdel.c:630
+#: src/userdel.c:660
 #, 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:636
+#: src/userdel.c:666
 #, c-format
 msgid "%s: warning: can't remove "
 msgstr "%s: varning: kan inte ta bort "
 
-#: src/userdel.c:711 src/usermod.c:968
+#: src/userdel.c:741 src/usermod.c:967
 #, c-format
 msgid "%s: user %s does not exist\n"
 msgstr "%s: användare %s finns inte\n"
 
-#: src/userdel.c:725 src/usermod.c:984
+#: src/userdel.c:755 src/usermod.c:983
 #, 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:762
+#: src/userdel.c:792
 #, 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:785
+#: src/userdel.c:815
 #, 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:798
+#: src/userdel.c:828
 #, c-format
 msgid "%s: error removing directory %s\n"
 msgstr "%s: fel under borttagning av katalogen %s\n"
 
-#: src/usermod.c:316
+#: src/usermod.c:315
 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:322
+#: src/usermod.c:321
 msgid "[-A {DEFAULT|program},... ] "
 msgstr "[-A {DEFAULT|program},... ] "
 
-#: src/usermod.c:478
+#: src/usermod.c:477
 #, c-format
 msgid "%s: out of memory in update_group\n"
 msgstr "%s: slut på minne i update_group\n"
 
-#: src/usermod.c:601
+#: src/usermod.c:600
 #, c-format
 msgid "%s: out of memory in update_gshadow\n"
 msgstr "%s: slut på minne i update_gshadow\n"
 
-#: src/usermod.c:1139
+#: src/usermod.c:1138
 #, c-format
 msgid "%s: no flags given\n"
 msgstr "%s: inga flaggor givna\n"
 
-#: src/usermod.c:1146
+#: src/usermod.c:1145
 #, 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:1167
+#: src/usermod.c:1166
 #, c-format
 msgid "%s: uid %ld is not unique\n"
 msgstr "%s: uid %ld är inte unikt\n"
 
-#: src/usermod.c:1315
+#: src/usermod.c:1314
 #, c-format
 msgid "%s: error deleting authentication method\n"
 msgstr "%s: fel under borttagning av metod för äkthetsbevisning\n"
 
-#: src/usermod.c:1335
+#: src/usermod.c:1334
 #, c-format
 msgid "%s: error changing authentication method\n"
 msgstr "%s: fel under ändring av metod för äkthetsbevisning\n"
 
-#: src/usermod.c:1352
+#: src/usermod.c:1351
 #, c-format
 msgid "%s: error changing password entry\n"
 msgstr "%s: fel under ändring av lösenordsnotering\n"
 
-#: src/usermod.c:1358
+#: src/usermod.c:1357
 #, c-format
 msgid "%s: error removing password entry\n"
 msgstr "%s: fel under borttagning av lösenordsnotering\n"
 
-#: src/usermod.c:1366
+#: src/usermod.c:1365
 #, c-format
 msgid "%s: error adding password dbm entry\n"
 msgstr "%s: fel under tilläggning av dbm-lösenordsnotering\n"
 
-#: src/usermod.c:1373
+#: src/usermod.c:1372
 #, c-format
 msgid "%s: error removing passwd dbm entry\n"
 msgstr "%s: fel under borttagning av dbm-lösenordsnotering\n"
 
-#: src/usermod.c:1390
+#: src/usermod.c:1389
 #, c-format
 msgid "%s: error removing shadow password entry\n"
 msgstr "%s: fel under borttagning av skugglösenordsnotering\n"
 
-#: src/usermod.c:1405
+#: src/usermod.c:1404
 #, c-format
 msgid "%s: error removing shadow passwd dbm entry\n"
 msgstr "%s: fel under borttagning av dbm-skugglösenordsnotering\n"
 
-#: src/usermod.c:1436
+#: src/usermod.c:1435
 #, c-format
 msgid "%s: directory %s exists\n"
 msgstr "%s: katalogen %s existerar\n"
 
-#: src/usermod.c:1443
+#: src/usermod.c:1442
 #, c-format
 msgid "%s: can't create %s\n"
 msgstr "%s: kan inte skapa %s\n"
 
-#: src/usermod.c:1449
+#: src/usermod.c:1448
 #, c-format
 msgid "%s: can't chown %s\n"
 msgstr "%s: kan inte byta ägare på %s\n"
 
-#: src/usermod.c:1465
+#: src/usermod.c:1464
 #, 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:1562
+#: src/usermod.c:1561
 #, c-format
 msgid "%s: warning: %s not owned by %s\n"
 msgstr "%s: varning: %s ägs inte av %s\n"
 
-#: src/usermod.c:1568
+#: src/usermod.c:1567
 msgid "failed to change mailbox owner"
 msgstr "kunde inte byta ägare av brevlådan"
 
-#: src/usermod.c:1575
+#: src/usermod.c:1574
 msgid "failed to rename mailbox"
 msgstr "kunde inte byta namn på brevlådan"
 
-#: src/vipw.c:103
+#: src/vipw.c:102
 #, c-format
 msgid ""
 "\n"
@@ -2372,20 +2377,20 @@ msgstr ""
 "\n"
 "%s: %s är oförändrad\n"
 
-#: src/vipw.c:128
+#: src/vipw.c:127
 msgid "Couldn't lock file"
 msgstr "Kunde inte låsa filen"
 
-#: src/vipw.c:135
+#: src/vipw.c:134
 msgid "Couldn't make backup"
 msgstr "Kunde inte göra en backup"
 
-#: src/vipw.c:174
+#: src/vipw.c:187
 #, 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:213
+#: src/vipw.c:226
 msgid ""
 "Usage:\n"
 "`vipw' edits /etc/passwd        `vipw -s' edits /etc/shadow\n"
index d3e8c8d5b038abeb17f79294a47b15189f311c74..7aa97334ab5ee838bb63eb045e4db1b59aa1bbb1 100644 (file)
@@ -82,6 +82,7 @@ INTLOBJS = @INTLOBJS@
 LD = @LD@
 LIBCRACK = @LIBCRACK@
 LIBCRYPT = @LIBCRYPT@
+LIBMD = @LIBMD@
 LIBPAM = @LIBPAM@
 LIBSKEY = @LIBSKEY@
 LIBTCFS = @LIBTCFS@
diff --git a/redhat/shadow-utils.spec b/redhat/shadow-utils.spec
deleted file mode 100644 (file)
index 10ce897..0000000
+++ /dev/null
@@ -1,151 +0,0 @@
-# shadow-utils.spec generated automatically from shadow-utils.spec.in
-# $Id: shadow-utils.spec.in,v 1.2 1999/06/07 16:40:45 marekm Exp $
-Summary: Shadow password file utilities for Linux
-Name: shadow-utils
-Version: 19990827
-Release: 1
-Copyright: Free
-Group: Utilities/System
-Source: ftp://ftp.ists.pwr.wroc.pl/pub/linux/shadow/shadow-19990827.tar.gz
-BuildRoot: /var/tmp/shadow-utils
-Packager: Timo Karjalainen <timok@iki.fi>
-# Obsoletes: adduser
-
-%description
-This package includes the programs necessary to convert traditional
-V7 UNIX password files to the SVR4 shadow password format and additional
-tools to work with shadow passwords.
-       - 'pwconv' converts everything to the shadow password format.
-       - 'pwunconv' converts back to non-shadow passwords.
-       - 'pwck' checks the integrity of the password and shadow files.
-       - 'lastlog' prints out the last login times of all users.
-       - 'useradd', 'userdel', 'usermod' to manage user accounts.
-       - 'groupadd', 'groupdel', 'groupmod' to manage groups.
-
-A number of man pages are also included that relate to these utilities,
-and shadow passwords in general.
-
-%changelog
-
-* Sun Dec 14 1997 Marek Michalkiewicz <marekm@piast.t19.ds.pwr.wroc.pl>
-
-- Lots of changes, see doc/CHANGES for more details
-
-* Sun Jun 08 1997 Timo Karjalainen <timok@iki.fi>
-
-- Initial release
-
-%prep
-# This is just a few of the core utilities from the shadow suite...
-# packaged up for use w/PAM
-%setup -n shadow-19990827
-
-%build
-# shared lib support is untested, so...
-CFLAGS="$RPM_OPT_FLAGS" ./configure --disable-shared --prefix=/usr --exec-prefix=/usr
-make
-
-%install
-if [ -d $RPM_BUILD_ROOT ] ; then
-       rm -rf $RPM_BUILD_ROOT
-fi
-mkdir -p $RPM_BUILD_ROOT/usr
-# neato trick, heh ? :-)
-./configure --prefix=$RPM_BUILD_ROOT/usr
-make install
-mkdir -p $RPM_BUILD_ROOT/etc/default
-
-# FIXME
-#install -m 0600 -o root $RPM_SOURCE_DIR/shadow-970616.useradd $RPM_BUILD_ROOT/etc/default/useradd
-#install -m 0644 -o root $RPM_SOURCE_DIR/shadow-970616.login.defs $RPM_BUILD_ROOT/etc/login.defs
-#ln -s useradd $RPM_BUILD_ROOT/usr/sbin/adduser
-#ln -s useradd.8 $RPM_BUILD_ROOT/usr/man/man8/adduser.8
-
-#make prefix=$RPM_BUILD_ROOT/usr exec_prefix=$RPM_BUILD_ROOT/usr install
-#touch $RPM_BUILD_ROOT/etc/{login.defs,default/useradd}
-#chmod 640 $RPM_BUILD_ROOT/etc/{login.defs,default/useradd}
-#chown root $RPM_BUILD_ROOT/etc/{login.defs,default/useradd}
-#chgrp root $RPM_BUILD_ROOT/etc/{login.defs,default/useradd}
-
-%clean
-rm -rf $RPM_BUILD_ROOT
-
-%files
-%doc doc/ANNOUNCE doc/CHANGES doc/HOWTO
-%doc doc/LICENSE doc/README doc/README.linux
-%dir /etc/default
-%config /etc/default/useradd
-# %config /etc/limits
-# %config /etc/login.access
-%config /etc/login.defs
-# %config /etc/limits
-# %config /etc/porttime
-# %config /etc/securetty
-# %config /etc/shells
-# %config /etc/suauth
-# /bin/login
-# /bin/su
-/usr/bin/chage
-# /usr/bin/chfn
-# /usr/bin/chsh
-# /usr/bin/expiry
-# /usr/bin/faillog
-/usr/bin/gpasswd
-/usr/bin/lastlog
-# /usr/bin/newgrp
-# /usr/bin/passwd
-# /usr/bin/sg
-/usr/man/man1/chage.1
-# /usr/man/man1/chfn.1
-# /usr/man/man1/chsh.1
-/usr/man/man1/gpasswd.1
-# /usr/man/man1/login.1
-# /usr/man/man1/passwd.1
-# /usr/man/man1/sg.1
-# /usr/man/man1/su.1
-/usr/man/man3/shadow.3
-# /usr/man/man5/faillog.5
-# /usr/man/man5/limits.5
-# /usr/man/man5/login.access.5
-# /usr/man/man5/login.defs.5
-# /usr/man/man5/passwd.5
-# /usr/man/man5/porttime.5
-/usr/man/man5/shadow.5
-# /usr/man/man5/suauth.5
-# /usr/man/man8/adduser.8
-/usr/man/man8/chpasswd.8
-# /usr/man/man8/faillog.8
-/usr/man/man8/groupadd.8
-/usr/man/man8/groupdel.8
-/usr/man/man8/groupmod.8
-/usr/man/man8/grpck.8
-/usr/man/man8/lastlog.8
-# /usr/man/man8/logoutd.8
-/usr/man/man8/newusers.8
-/usr/man/man8/pwck.8
-/usr/man/man8/pwconv.8
-# /usr/man/man8/shadowconfig.8
-/usr/man/man8/useradd.8
-/usr/man/man8/userdel.8
-/usr/man/man8/usermod.8
-# /usr/man/man8/vigr.8
-# /usr/man/man8/vipw.8
-# /usr/sbin/adduser
-/usr/sbin/chpasswd
-/usr/sbin/groupadd
-/usr/sbin/groupdel
-/usr/sbin/groupmod
-/usr/sbin/grpck
-/usr/sbin/grpconv
-/usr/sbin/grpunconv
-# /usr/sbin/logoutd
-/usr/sbin/newusers
-/usr/sbin/pwck
-/usr/sbin/pwconv
-/usr/sbin/pwunconv
-# /usr/sbin/shadowconfig
-/usr/sbin/useradd
-/usr/sbin/userdel
-/usr/sbin/usermod
-# /usr/sbin/vigr
-# /usr/sbin/vipw
index be5206bb71e4f9524f6644d851b155a69ace14e3..db8203fd360320fb5fe8fadf2028b335b79ef14b 100644 (file)
@@ -47,15 +47,15 @@ suidubins = chage chfn chsh expiry gpasswd newgrp passwd
 
 install-exec-hook:
        for i in $(suidbins); do \
-               chmod 4755 $(bindir)/$$i; \
+               chmod 4755 $(DESTDIR)$(bindir)/$$i; \
        done
 
 install-data-hook:
        for i in $(suidubins); do \
-               chmod 4755 $(ubindir)/$$i; \
+               chmod 4755 $(DESTDIR)$(ubindir)/$$i; \
        done
-       rm -f $(ubindir)/sg
-       ln -s newgrp $(ubindir)/sg
+       rm -f $(DESTDIR)$(ubindir)/sg
+       ln -s newgrp $(DESTDIR)$(ubindir)/sg
 
 noinst_PROGRAMS = groups id sulogin
 
@@ -79,7 +79,7 @@ noinst_PROGRAMS = groups id sulogin
 shlibs = ../lib/libshadow.la
 # With glibc2, almost all programs need libcrypt for some reason,
 # even those that don't actually use crypt().
-LDADD = ${shlibs} ../libmisc/libmisc.a ../lib/libshadow.a @INTLLIBS@ @LIBCRYPT@ @LIBTCFS@ @LIBSKEY@
+LDADD = ${shlibs} ../libmisc/libmisc.a ../lib/libshadow.a @INTLLIBS@ @LIBCRYPT@ @LIBTCFS@ @LIBSKEY@ @LIBMD@
 INCLUDES = -I${top_srcdir}/lib -I$(top_srcdir)/libmisc
 
 chfn_LDADD = ${LDADD} @LIBPAM@
index fb3fdb004bdee59663bb4491aa3e5fded3de0ce2..773a3b3c972254d19b58ce05bd551c0343bba97c 100644 (file)
@@ -76,6 +76,7 @@ INTLOBJS = @INTLOBJS@
 LD = @LD@
 LIBCRACK = @LIBCRACK@
 LIBCRYPT = @LIBCRYPT@
+LIBMD = @LIBMD@
 LIBPAM = @LIBPAM@
 LIBSKEY = @LIBSKEY@
 LIBTCFS = @LIBTCFS@
@@ -164,7 +165,7 @@ noinst_PROGRAMS = groups id sulogin
 shlibs = ../lib/libshadow.la
 # With glibc2, almost all programs need libcrypt for some reason,
 # even those that don't actually use crypt().
-LDADD = ${shlibs} ../libmisc/libmisc.a ../lib/libshadow.a @INTLLIBS@ @LIBCRYPT@ @LIBTCFS@ @LIBSKEY@
+LDADD = ${shlibs} ../libmisc/libmisc.a ../lib/libshadow.a @INTLLIBS@ @LIBCRYPT@ @LIBTCFS@ @LIBSKEY@ @LIBMD@
 INCLUDES = -I${top_srcdir}/lib -I$(top_srcdir)/libmisc
 
 chfn_LDADD = ${LDADD} @LIBPAM@
@@ -879,15 +880,15 @@ mostlyclean distclean maintainer-clean
 
 install-exec-hook:
        for i in $(suidbins); do \
-               chmod 4755 $(bindir)/$$i; \
+               chmod 4755 $(DESTDIR)$(bindir)/$$i; \
        done
 
 install-data-hook:
        for i in $(suidubins); do \
-               chmod 4755 $(ubindir)/$$i; \
+               chmod 4755 $(DESTDIR)$(ubindir)/$$i; \
        done
-       rm -f $(ubindir)/sg
-       ln -s newgrp $(ubindir)/sg
+       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.
index ebc204f60d1faa39a05f202ba41ff3f4ed77a238..9eed0da847be9feadad07546a66cebdd9e1eb714 100644 (file)
@@ -30,7 +30,7 @@
 #include <config.h>
 
 #include "rcsid.h"
-RCSID(PKG_VER "$Id: chage.c,v 1.16 1999/08/27 19:02:51 marekm Exp $")
+RCSID(PKG_VER "$Id: chage.c,v 1.17 2000/08/26 18:27:18 marekm Exp $")
 
 #include <sys/types.h>
 #include <stdio.h>
@@ -59,6 +59,7 @@ RCSID(PKG_VER "$Id: chage.c,v 1.16 1999/08/27 19:02:51 marekm Exp $")
 #endif /* SHADOWPWD */
 
 static char    *Prog;
+static int amroot;
 
 #ifdef AGING   /*{*/
 
@@ -122,13 +123,12 @@ extern    int     sp_dbm_mode;
 #endif
 
 /* local function prototypes */
-static void usage P_((void));
-static void date_to_str P_((char *, size_t, time_t));
-static int new_fields P_((void));
-static void print_date P_((time_t));
-static void list_fields P_((void));
-int main P_((int, char **));
-static void cleanup P_((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);
 
 /*
  * usage - print command line syntax and exit
@@ -371,7 +371,7 @@ main(int argc, char **argv)
 #else
        char    new_age[5];
 #endif
-       uid_t ruid = getuid ();
+       uid_t ruid;
        const struct passwd *pw;
        struct passwd pwent;
        char    name[BUFSIZ];
@@ -381,6 +381,9 @@ main(int argc, char **argv)
        bindtextdomain(PACKAGE, LOCALEDIR);
        textdomain(PACKAGE);
 
+       ruid = getuid();
+       amroot = (ruid == 0);
+
        /*
         * Get the program name so that error messages can use it.
         */
@@ -476,7 +479,7 @@ main(int argc, char **argv)
         * information.
         */
 
-       if (ruid != 0 && ! lflg) {
+       if (!amroot && !lflg) {
                fprintf (stderr, _("%s: permission denied\n"), Prog);
                closelog();
                exit (1);
@@ -487,14 +490,14 @@ main(int argc, char **argv)
         * password file entries into memory.  Then we get a pointer
         * to the password file entry for the requested user.
         */
-
-       if (!pw_lock()) {
+       /* 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((ruid != 0 || lflg) ? O_RDONLY:O_RDWR)) {
+       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));
@@ -519,15 +522,15 @@ main(int argc, char **argv)
         * a new entry will be created for this user if one does
         * not exist already.
         */
-
-       if (!spw_lock()) {
+       /* 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 (!spw_open((ruid != 0 || lflg) ? O_RDONLY:O_RDWR)) {
+       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));
@@ -588,7 +591,7 @@ main(int argc, char **argv)
         */
 
        if (lflg) {
-               if (ruid != 0 && ruid != pwent.pw_uid) {
+               if (!amroot && (ruid != pwent.pw_uid)) {
                        fprintf(stderr, _("%s: permission denied\n"), Prog);
                        closelog();
                        exit(1);
@@ -785,14 +788,16 @@ static void
 cleanup(int state)
 {
        switch (state) {
-               case 2:
+       case 2:
 #ifdef SHADOWPWD
-                       spw_unlock ();
+               if (amroot)
+                       spw_unlock();
 #endif
-               case 1:
-                       pw_unlock ();
-               case 0:
-                       break;
+       case 1:
+               if (amroot)
+                       pw_unlock();
+       case 0:
+               break;
        }
 }
 
index c9b2b0edcb5f4410b5b52c11e4cd886370694694..9bf74b66a0dbbd64c3bc758da2b15830dea3e476 100644 (file)
@@ -30,7 +30,7 @@
 #include <config.h>
 
 #include "rcsid.h"
-RCSID(PKG_VER "$Id: chfn.c,v 1.15 1999/07/09 18:02:43 marekm Exp $")
+RCSID(PKG_VER "$Id: chfn.c,v 1.16 2000/08/26 18:27:18 marekm Exp $")
 
 #include <sys/types.h>
 #include <stdio.h>
@@ -90,11 +90,10 @@ extern      int     pw_dbm_mode;
 #define        CHGGECOS        "changed user `%s' information.\n"
 
 /* local function prototypes */
-static void usage P_((void));
-static int may_change_field P_((int));
-static void new_fields P_((void));
-static char *copy_field P_((char *, char *, char *));
-int main P_((int, 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
index 09ba0061ade03e12fd55fc5e5bd18d0d8e704ca3..dc46498fb64a328a3a8f8d08a88200cdc1d96aeb 100644 (file)
@@ -43,7 +43,7 @@
 #include <config.h>
 
 #include "rcsid.h"
-RCSID(PKG_VER "$Id: chpasswd.c,v 1.9 1999/06/07 16:40:45 marekm Exp $")
+RCSID(PKG_VER "$Id: chpasswd.c,v 1.10 2000/08/26 18:27:18 marekm Exp $")
 
 #include <stdio.h>
 #include "prototypes.h"
@@ -61,12 +61,10 @@ static int eflg = 0;
 static int is_shadow_pwd;
 #endif
 
-extern char *crypt_make_salt P_((void));
 extern char    *l64a();
 
 /* local function prototypes */
-static void usage P_((void));
-int main P_((int, char **));
+static void usage(void);
 
 /*
  * usage - display usage message and exit
index 9737ff20f453092d570a6fc713440b3be35f5531..6f51875347fb3c08cc4ffae58e9808cfbc78785b 100644 (file)
@@ -30,7 +30,7 @@
 #include <config.h>
 
 #include "rcsid.h"
-RCSID(PKG_VER "$Id: chsh.c,v 1.15 1999/07/09 18:02:43 marekm Exp $")
+RCSID(PKG_VER "$Id: chsh.c,v 1.16 2000/08/26 18:27:18 marekm Exp $")
 
 #include <sys/types.h>
 #include <stdio.h>
@@ -91,10 +91,9 @@ extern       int     pw_dbm_mode;
 #define        CHGSHELL        "changed user `%s' shell to `%s'\n"
 
 /* local function prototypes */
-static void usage P_((void));
-static void new_fields P_((void));
-static int restricted_shell P_((const char *));
-int main P_((int, char **));
+static void usage(void);
+static void new_fields(void);
+static int restricted_shell(const char *);
 
 /*
  * usage - print command line syntax and exit
index 92eb0dc4072df316148d8a08c56fc800be1eeafb..b6baa7dfaaac1eb4e1bd0619c9526f9f331e81ca 100644 (file)
@@ -30,7 +30,7 @@
 #include <config.h>
 
 #include "rcsid.h"
-RCSID(PKG_VER "$Id: dpasswd.c,v 1.10 1999/08/27 19:02:51 marekm Exp $")
+RCSID(PKG_VER "$Id: dpasswd.c,v 1.11 2000/08/26 18:27:18 marekm Exp $")
 
 #include <sys/types.h>
 #include <sys/stat.h>
@@ -58,12 +58,10 @@ static char *Prog;
 extern int optind;
 extern char *optarg;
 
-extern char *crypt_make_salt P_((void));
 extern char *getpass();
 
 /* local function prototypes */
-static void usage P_((void));
-int main P_((int, char **));
+static void usage(void);
 
 static void
 usage(void)
index d0a913b95d5435b4f8af426c16eec222c04022e6..b8d09b50e99ca5e191edd28b608c5c46c836eac0 100644 (file)
@@ -30,7 +30,7 @@
 #include <config.h>
 
 #include "rcsid.h"
-RCSID(PKG_VER "$Id: expiry.c,v 1.8 1999/06/07 16:40:45 marekm Exp $")
+RCSID(PKG_VER "$Id: expiry.c,v 1.9 2000/08/26 18:27:18 marekm Exp $")
 
 #include <sys/types.h>
 #include <signal.h>
@@ -45,7 +45,6 @@ RCSID(PKG_VER "$Id: expiry.c,v 1.8 1999/06/07 16:40:45 marekm Exp $")
 #endif
 #endif
 
-int main P_((int, char **));
 
 #if !defined(SHADOWPWD) && !defined(AGING) /*{*/
 
@@ -62,8 +61,8 @@ main(int argc, char **argv)
 #else  /*} AGING || SHADOWPWD {*/
 
 /* local function prototypes */
-static RETSIGTYPE catch P_((int));
-static void usage P_((void));
+static RETSIGTYPE catch(int);
+static void usage(void);
 
 /*
  * catch - signal catcher
index 492a9978157a69851d491dcc0fe4fa2eb9c453fc..beb418ba370845a3cdb2d24666b379333c8b238e 100644 (file)
@@ -30,7 +30,7 @@
 #include <config.h>
 
 #include "rcsid.h"
-RCSID(PKG_VER "$Id: faillog.c,v 1.9 1999/07/09 18:02:43 marekm Exp $")
+RCSID(PKG_VER "$Id: faillog.c,v 1.10 2000/08/26 18:27:18 marekm Exp $")
 
 #include <sys/types.h>
 #include <sys/stat.h>
@@ -61,16 +61,15 @@ extern      char    *optarg;
 #define        NOW     (time((time_t *) 0))
 
 /* local function prototypes */
-static void usage P_((void));
-int main P_((int, char **));
-static void print P_((void));
-static void print_one P_((const struct faillog *, uid_t));
-static void reset P_((void));
-static int reset_one P_((uid_t));
-static void setmax P_((int));
-static void setmax_one P_((uid_t, int));
-static void set_locktime P_((long));
-static void set_locktime_one P_((uid_t, long));
+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
index 43bd9e9eee2a03cd0d136d2eeeb9df6aba5a3302..1221918d666ab4dbcb692c664ba7995d87cd2e2e 100644 (file)
@@ -30,7 +30,7 @@
 #include <config.h>
 
 #include "rcsid.h"
-RCSID(PKG_VER "$Id: gpasswd.c,v 1.15 1999/08/27 19:02:51 marekm Exp $")
+RCSID(PKG_VER "$Id: gpasswd.c,v 1.16 2000/08/26 18:27:18 marekm Exp $")
 
 #include <sys/types.h>
 #include <stdio.h>
@@ -65,7 +65,6 @@ static int
 #define        RETRIES 3
 #endif
 
-extern char *crypt_make_salt P_((void));
 extern int optind;
 extern char *optarg;
 #ifdef NDBM
@@ -76,10 +75,9 @@ extern       int     gr_dbm_mode;
 #endif
 
 /* local function prototypes */
-static void usage P_((void));
-static RETSIGTYPE die P_((int));
-static int check_list P_((const char *));
-int main P_((int, char **));
+static void usage(void);
+static RETSIGTYPE die(int);
+static int check_list(const char *);
 
 /*
  * usage - display usage message
@@ -564,11 +562,12 @@ main(int argc, char **argv)
 
        cp = pw_encrypt(pass, crypt_make_salt());
        memzero(pass, sizeof pass);
-#ifdef SHADOWGRP
-       sgent.sg_passwd = cp;
-#else
-       grent.gr_passwd = cp;
+#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));
 
        /*
index 6af3861c902a1d4710665383fff4db57c2c5ad1e..24200e56a89cd4c67634949bc75a2c62be2a38d1 100644 (file)
@@ -30,7 +30,7 @@
 #include <config.h>
 
 #include "rcsid.h"
-RCSID(PKG_VER "$Id: groupadd.c,v 1.14 1999/06/07 16:40:45 marekm Exp $")
+RCSID(PKG_VER "$Id: groupadd.c,v 1.15 2000/08/26 18:27:18 marekm Exp $")
 
 #include <sys/types.h>
 #include <stdio.h>
@@ -82,19 +82,18 @@ extern int optind;
 extern char *optarg;
 
 /* local function prototypes */
-static void usage P_((void));
-static void new_grent P_((struct group *));
+static void usage(void);
+static void new_grent(struct group *);
 #ifdef SHADOWGRP
-static void new_sgent P_((struct sgrp *));
+static void new_sgent(struct sgrp *);
 #endif
-static void grp_update P_((void));
-static void find_new_gid P_((void));
-static void check_new_name P_((void));
-static void process_flags P_((int, char **));
-static void close_files P_((void));
-static void open_files P_((void));
-static void fail_exit P_((int));
-int main P_((int, char **));
+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
index 82e9b311cf55582e8b6b5a4b93aba193d9130afa..38efa9a62466c62dfe023d2b87c5276cd7ef1d69 100644 (file)
@@ -30,7 +30,7 @@
 #include <config.h>
 
 #include "rcsid.h"
-RCSID(PKG_VER "$Id: groupdel.c,v 1.10 1999/06/07 16:40:45 marekm Exp $")
+RCSID(PKG_VER "$Id: groupdel.c,v 1.11 2000/08/26 18:27:18 marekm Exp $")
 
 #include <sys/types.h>
 #include <stdio.h>
@@ -70,12 +70,11 @@ static int is_shadow_grp;
 #define E_GRP_UPDATE   10      /* can't update group file */
 
 /* local function prototypes */
-static void usage P_((void));
-static void grp_update P_((void));
-static void close_files P_((void));
-static void open_files P_((void));
-static void group_busy P_((gid_t));
-int main P_((int, char **));
+static void usage(void);
+static void grp_update(void);
+static void close_files(void);
+static void open_files(void);
+static void group_busy(gid_t);
 
 /*
  * usage - display usage message and exit
index a12e78e83208d55e850fb3ac81718294237dbf44..9ed679cf21db9ec1ab60349f4ef4ded8b6f7ac2e 100644 (file)
@@ -30,7 +30,7 @@
 #include <config.h>
 
 #include "rcsid.h"
-RCSID(PKG_VER "$Id: groupmod.c,v 1.12 1999/07/09 18:02:43 marekm Exp $")
+RCSID(PKG_VER "$Id: groupmod.c,v 1.13 2000/08/26 18:27:18 marekm Exp $")
 
 #include <sys/types.h>
 #include <stdio.h>
@@ -83,18 +83,17 @@ extern int optind;
 extern char *optarg;
 
 /* local function prototypes */
-static void usage P_((void));
-static void new_grent P_((struct group *));
+static void usage(void);
+static void new_grent(struct group *);
 #ifdef SHADOWGRP
-static void new_sgent P_((struct sgrp *));
+static void new_sgent(struct sgrp *);
 #endif
-static void grp_update P_((void));
-static void check_new_gid P_((void));
-static void check_new_name P_((void));
-static void process_flags P_((int, char **));
-static void close_files P_((void));
-static void open_files P_((void));
-int main P_((int, char **));
+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
index b3d4d23ff5ccfd06a66dbafa4c081ffbcf422839..875272c8704c0a168d9e5d99444a9a56f38d0277 100644 (file)
@@ -30,7 +30,7 @@
 #include <config.h>
 
 #include "rcsid.h"
-RCSID(PKG_VER "$Id: groups.c,v 1.5 1999/06/07 16:40:45 marekm Exp $")
+RCSID(PKG_VER "$Id: groups.c,v 1.6 2000/08/26 18:27:18 marekm Exp $")
 
 #include <stdio.h>
 #include <pwd.h>
@@ -39,8 +39,7 @@ RCSID(PKG_VER "$Id: groups.c,v 1.5 1999/06/07 16:40:45 marekm Exp $")
 #include "defines.h"
 
 /* local function prototypes */
-static void print_groups P_((const char *));
-int main P_((int, char **));
+static void print_groups(const char *);
 
 /*
  * print_groups - print the groups which the named user is a member of
index 47cd91d998b201375e66be86a419855a3bb5897e..dec6782bc52b5c541dc8d875e77aff57a82cd577 100644 (file)
@@ -30,7 +30,7 @@
 #include <config.h>
 
 #include "rcsid.h"
-RCSID(PKG_VER "$Id: grpck.c,v 1.12 1999/06/07 16:40:45 marekm Exp $")
+RCSID(PKG_VER "$Id: grpck.c,v 1.13 2000/08/26 18:27:18 marekm Exp $")
 
 #include <stdio.h>
 #include <fcntl.h>
@@ -44,13 +44,13 @@ RCSID(PKG_VER "$Id: grpck.c,v 1.12 1999/06/07 16:40:45 marekm Exp $")
 #include "commonio.h"
 
 #include "groupio.h"
-extern void __gr_del_entry P_((const struct commonio_entry *));
-extern struct commonio_entry *__gr_get_head P_((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 P_((const struct commonio_entry *));
-extern struct commonio_entry *__sgr_get_head P_((void));
+extern void __sgr_del_entry(const struct commonio_entry *);
+extern struct commonio_entry *__sgr_get_head(void);
 #endif
 
 /*
@@ -83,10 +83,9 @@ static const char *sgr_file = SGROUP_FILE;
 static int read_only = 0;
 
 /* local function prototypes */
-static void usage P_((void));
-static int yes_or_no P_((void));
-static void delete_member P_((char **, const char *));
-int main P_((int, char **));
+static void usage(void);
+static int yes_or_no(void);
+static void delete_member(char **, const char *);
 
 /*
  * usage - print syntax message and exit
@@ -289,7 +288,7 @@ main(int argc, char **argv)
                 * be parsed properly.
                 */
 
-               if (!gre->entry) {
+               if (!gre->eptr) {
 
                        /*
                         * Tell the user this entire line is bogus and
@@ -327,7 +326,7 @@ delete_gr:
                 * Group structure is good, start using it.
                 */
 
-               grp = gre->entry;
+               grp = gre->eptr;
 
                /*
                 * Make sure this entry has a unique name.
@@ -335,7 +334,7 @@ delete_gr:
 
                for (tgre = __gr_get_head(); tgre; tgre = tgre->next) {
 
-                       const struct group *ent = tgre->entry;
+                       const struct group *ent = tgre->eptr;
 
                        /*
                         * Don't check this entry
@@ -444,7 +443,7 @@ delete_gr:
                 * be parsed properly.
                 */
 
-               if (!sge->entry) {
+               if (!sge->eptr) {
 
                        /*
                         * Tell the user this entire line is bogus and
@@ -482,7 +481,7 @@ delete_sg:
                 * Shadow group structure is good, start using it.
                 */
 
-               sgr = sge->entry;
+               sgr = sge->eptr;
 
                /*
                 * Make sure this entry has a unique name.
@@ -490,7 +489,7 @@ delete_sg:
 
                for (tsge = __sgr_get_head(); tsge; tsge = tsge->next) {
 
-                       const struct sgrp *ent = tsge->entry;
+                       const struct sgrp *ent = tsge->eptr;
 
                        /*
                         * Don't check this entry
index 3a62d123905c0b3853f51d89ee66ee5378f937bd..8e641fd3a89dfd07b4f32db147710a65d9b94580 100644 (file)
 #include "sgroupio.h"
 
 #include "rcsid.h"
-RCSID(PKG_VER "$Id: grpconv.c,v 1.10 1999/07/09 18:02:43 marekm Exp $")
+RCSID(PKG_VER "$Id: grpconv.c,v 1.11 2000/08/26 18:27:18 marekm Exp $")
 
 static int group_locked = 0;
 static int gshadow_locked = 0;
 
 /* local function prototypes */
-static void fail_exit P_((int));
-int main P_((int, char **));
+static void fail_exit(int);
 
 static void
 fail_exit(int status)
index 3f836ed60e7984ed5dd1c62499a3ab4a47ff3ca4..59cb4994b834a580c51b637e73da6fef23074526 100644 (file)
@@ -11,7 +11,7 @@
 #include <config.h>
 
 #include "rcsid.h"
-RCSID(PKG_VER "$Id: grpunconv.c,v 1.9 1999/07/09 18:02:43 marekm Exp $")
+RCSID(PKG_VER "$Id: grpunconv.c,v 1.10 2000/08/26 18:27:18 marekm Exp $")
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -32,8 +32,7 @@ static int group_locked = 0;
 static int gshadow_locked = 0;
 
 /* local function prototypes */
-static void fail_exit P_((int));
-int main P_((int, char **));
+static void fail_exit(int);
 
 static void
 fail_exit(int status)
index fa452f8956788ebe24c5c708efdd266c77ba8450..28839a024b7e21b211e7d79accad752b4c70ec33 100644 (file)
--- a/src/id.c
+++ b/src/id.c
@@ -38,7 +38,7 @@
 #include <config.h>
 
 #include "rcsid.h"
-RCSID(PKG_VER "$Id: id.c,v 1.5 1999/06/07 16:40:45 marekm Exp $")
+RCSID(PKG_VER "$Id: id.c,v 1.6 2000/08/26 18:27:18 marekm Exp $")
 
 #include <sys/types.h>
 #include <stdio.h>
@@ -47,8 +47,7 @@ RCSID(PKG_VER "$Id: id.c,v 1.5 1999/06/07 16:40:45 marekm Exp $")
 #include "defines.h"
 
 /* local function prototypes */
-static void usage P_((void));
-int main P_((int, char **));
+static void usage(void);
 
 static void
 usage(void)
index fc7eb14395067a6a51217991a9a2dec6392327d7..a7957ac7cc3b3a6c5575f90e4b38e6ab676726a6 100644 (file)
@@ -30,7 +30,7 @@
 #include <config.h>
 
 #include "rcsid.h"
-RCSID(PKG_VER "$Id: lastlog.c,v 1.5 1999/06/07 16:40:45 marekm Exp $")
+RCSID(PKG_VER "$Id: lastlog.c,v 1.6 2000/08/26 18:27:18 marekm Exp $")
 
 #include <sys/types.h>
 #include <sys/stat.h>
@@ -69,9 +69,8 @@ extern        char    *optarg;
 #define        NOW     (time ((time_t *) 0))
 
 /* local function prototypes */
-int main P_((int, char **));
-static void print P_((void));
-static void print_one P_((const struct passwd *));
+static void print(void);
+static void print_one(const struct passwd *);
 
 int
 main(int argc, char **argv)
index 224dd5e877883dde944724e8145118e3d9c24c0f..719005c0476c8d69ab90edd2171fc185604b4d2f 100644 (file)
@@ -30,7 +30,7 @@
 #include <config.h>
 
 #include "rcsid.h"
-RCSID(PKG_VER "$Id: login.c,v 1.16 1999/08/27 19:02:51 marekm Exp $")
+RCSID(PKG_VER "$Id: login.c,v 1.17 2000/08/26 18:27:18 marekm Exp $")
 
 #include "prototypes.h"
 #include "defines.h"
@@ -78,7 +78,7 @@ RCSID(PKG_VER "$Id: login.c,v 1.16 1999/08/27 19:02:51 marekm Exp $")
 #include <netdb.h>
 #endif
 
-#ifdef USE_PAM_not_yet
+#ifdef USE_PAM
 #include "pam_defs.h"
 
 static const struct pam_conv conv = {
@@ -96,7 +96,7 @@ static pam_handle_t *pamh = NULL;
 #define PAM_END { retcode = pam_close_session(pamh,0); \
                pam_end(pamh,retcode); }
 
-#endif /* USE_PAM_not_yet */
+#endif /* USE_PAM */
 
 /*
  * Needed for MkLinux DR1/2/2.1 - J.
@@ -140,16 +140,14 @@ static int timeout;
 extern char **newenvp;
 extern size_t newenvc;
 
-extern char *tz P_((const char *));
-extern void subsystem P_((const struct passwd *));
-extern void dolastlog P_((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 int login_access P_((const char *user, const char *from));
-extern void login_fbtab P_((const char *tty, uid_t uid, gid_t gid));
+extern int login_access(const char *, const char *);
+extern void login_fbtab(const char *, uid_t, gid_t);
 
 #ifndef        ALARM
 #define        ALARM   60
@@ -175,14 +173,15 @@ static struct faillog faillog;
 #define MANY_FAILS     "REPEATED login failures%s\n"
 
 /* local function prototypes */
-static void usage P_((void));
-static void setup_tty P_((void));
-static void bad_time_notify P_((void));
-static void check_flags P_((int, char * const *));
-static void check_nologin P_((void));
-static void init_env P_((void));
-static RETSIGTYPE alarm_handler P_((int));
-int main P_((int, char **));
+static void usage(void);
+static void setup_tty(void);
+static void bad_time_notify(void);
+static void check_flags(int, char * const *);
+#ifndef USE_PAM
+static void check_nologin(void);
+#endif
+static void init_env(void);
+static RETSIGTYPE alarm_handler(int);
 
 /*
  * usage - print login command usage and exit
@@ -305,7 +304,7 @@ check_flags(int argc, char * const *argv)
        }
 }
 
-
+#ifndef USE_PAM
 static void
 check_nologin(void)
 {
@@ -352,7 +351,7 @@ check_nologin(void)
                printf(_("\n[Disconnect bypassed -- root login allowed.]\n"));
        }
 }
-
+#endif /* !USE_PAM */
 
 static void
 init_env(void)
@@ -436,10 +435,11 @@ main(int argc, char **argv)
        char    **envp = environ;
        static char temp_pw[2];
        static char temp_shell[] = "/bin/sh";
-#ifdef USE_PAM_not_yet
+#ifdef USE_PAM
        int retcode;
        pid_t child;
-#endif /* USE_PAM_not_yet */
+       char *pam_user;
+#endif /* USE_PAM */
 #ifdef SHADOWPWD
        struct  spwd    *spwd=NULL;
 #endif
@@ -704,7 +704,7 @@ top:
        delay = getdef_num("FAIL_DELAY", 1);
        retries = getdef_num("LOGIN_RETRIES", RETRIES);
 
-#ifdef USE_PAM_not_yet
+#ifdef USE_PAM
        retcode = pam_start("login", username, &conv, &pamh);
        if(retcode != PAM_SUCCESS) {
                fprintf(stderr,"login: PAM Failure, aborting: %s\n",
@@ -714,15 +714,38 @@ top:
                exit(99);
        }
        /* hostname & tty are either set to NULL or their correct values,
-          depending on how much we know */
+          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;
+               int failcount;
+               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);
 
                /* there may be better ways to deal with some of these
                   conditions, but at least this way I don't think we'll
@@ -737,30 +760,33 @@ top:
                        (retcode == PAM_USER_UNKNOWN) ||
                        (retcode == PAM_CRED_INSUFFICIENT) ||
                        (retcode == PAM_AUTHINFO_UNAVAIL))) {
-                       pam_get_item(pamh, PAM_USER, (const void **) &username);
+                       pam_get_item(pamh, PAM_USER, (const void **) &pam_user);
                        syslog(LOG_NOTICE,"FAILED LOGIN %d FROM %s FOR %s, %s",
-                               failcount, hostname, username,
+                               failcount, hostname, pam_user,
                                PAM_STRERROR(pamh, retcode));
-                       fprintf(stderr,"Login incorrect\n\n");
-                       pam_set_item(pamh,PAM_USER,NULL);
+#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);
                }
 
                if (retcode != PAM_SUCCESS) {
-                       pam_get_item(pamh, PAM_USER, (const void **) &username);
+                       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, username,
+                                       failcount, hostname, pam_user,
                                        PAM_STRERROR(pamh, retcode));
                        else
                                syslog(LOG_NOTICE,
                                        "FAILED LOGIN SESSION FROM %s FOR %s, %s",
-                                       hostname, username,
+                                       hostname, pam_user,
                                        PAM_STRERROR(pamh, retcode));
 
-                       fprintf(stderr,"\nLogin incorrect\n");
+                       fprintf(stderr, "\nLogin incorrect\n");
                        pam_end(pamh, retcode);
                        exit(0);
                }
@@ -777,11 +803,12 @@ top:
        /* 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 **) &username);
+       retcode = pam_get_item(pamh, PAM_USER, (const void **) &pam_user);
        setpwent();
-       pwd = getpwnam(username);
-       if (pwd)
-               initgroups(username, pwd->pw_gid);
+       pwd = getpwnam(pam_user);
+
+       if (!pwd || setup_groups(pwd))
+               exit(1);
 
        retcode = pam_setcred(pamh, PAM_ESTABLISH_CRED);
        PAM_FAIL_CHECK;
@@ -790,7 +817,7 @@ top:
        PAM_FAIL_CHECK;
 
 
-#else  /* ! USE_PAM_not_yet */
+#else  /* ! USE_PAM */
        while (1) {     /* repeatedly get login/password pairs */
                failed = 0;             /* haven't failed authentication yet */
 #ifdef RADIUS
@@ -813,8 +840,15 @@ top:
 #endif
                        continue;
                }
-               if (! (pwd = getpwnam(username))) {
+#endif /* ! USE_PAM */
+
+#ifdef USE_PAM
+               if (!(pwd = getpwnam(pam_user))) {
+                       pwent.pw_name = pam_user;
+#else
+               if (!(pwd = getpwnam(username))) {
                        pwent.pw_name = username;
+#endif
                        strcpy(temp_pw, "!");
                        pwent.pw_passwd = temp_pw;
                        pwent.pw_shell = temp_shell;
@@ -824,7 +858,8 @@ top:
                } else {
                        pwent = *pwd;
                }
-#ifdef SHADOWPWD
+#ifndef USE_PAM
+#ifdef SHADOWPWD
                spwd = NULL;
                if (pwd && strcmp(pwd->pw_passwd, SHADOW_PASSWD_STRING) == 0) {
                        spwd = getspnam(username);
@@ -833,7 +868,7 @@ top:
                        else
                                SYSLOG((LOG_WARN, NO_SHADOW, username, fromhost));
                }
-#endif /* SHADOWPWD */
+#endif /* SHADOWPWD */
 
                /*
                 * If the encrypted password begins with a "!", the account
@@ -996,9 +1031,9 @@ auth_ok:
                        exit(1);
                }
        }  /* while (1) */
-#endif /* ! USE_PAM_not_yet */
+#endif /* ! USE_PAM */
        (void) alarm (0);               /* turn off alarm clock */
-#if 1
+#ifndef USE_PAM  /* PAM does this */
        /*
         * porttime checks moved here, after the user has been
         * authenticated.  now prints a message, as suggested
@@ -1011,14 +1046,18 @@ auth_ok:
                bad_time_notify();
                exit(1);
        }
-#endif
 
        check_nologin();
+#endif
 
        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 */
+#else
        setutmp(username, tty, hostname); /* make entry in utmp & wtmp files */
+#endif
        if (pwent.pw_shell[0] == '*') { /* subsystem root */
                subsystem (&pwent);     /* figure out what to execute */
                subroot++;              /* say i was here again */
@@ -1032,14 +1071,17 @@ auth_ok:
 #endif
                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);
+#endif
 
 #ifdef SVR4_SI86_EUA
        sysi86(SI86LIMUSER, EUA_ADD_USER);      /* how do we test for fail? */
 #endif
 
-#ifdef AGING
+#ifndef USE_PAM /* PAM handles this as well */
+#ifdef AGING
        /*
         * Have to do this while we still have root privileges, otherwise
         * we don't have access to /etc/shadow.  expire() closes password
@@ -1066,7 +1108,7 @@ auth_ok:
        }
 #endif /* ATT_AGE */
 #endif /* SHADOWPWD */
-#endif /* AGING */
+#endif /* AGING */
 
 #ifdef RADIUS
        if (is_rad_login) {
@@ -1082,6 +1124,7 @@ auth_ok:
        }
 #endif
        setup_limits(&pwent);  /* nice, ulimit etc. */
+#endif /* ! USE_PAM */
        chown_tty(tty, &pwent);
 
 #ifdef LOGIN_FBTAB
@@ -1117,7 +1160,12 @@ auth_ok:
        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))
+#else
+       if (change_uid(&pwent))
+#endif
                exit(1);
 
 #ifdef KERBEROS
@@ -1135,7 +1183,7 @@ auth_ok:
 
        setup_env(&pwent);  /* set env vars, cd to the home dir */
 
-#ifdef USE_PAM_not_yet
+#ifdef USE_PAM
        {
                int i;
                const char * const * env;
@@ -1154,6 +1202,8 @@ auth_ok:
 
        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);
@@ -1192,6 +1242,7 @@ auth_ok:
 #endif
 #endif /* AGING */
                mailcheck();    /* report on the status of mail */
+#endif /* !USE_PAM */
        } else
                addenv("HUSHLOGIN=TRUE", NULL);
 
@@ -1203,7 +1254,7 @@ auth_ok:
        signal(SIGALRM, SIG_DFL);       /* default alarm signal */
        signal(SIGHUP, SIG_DFL);        /* added this.  --marekm */
 
-#ifdef USE_PAM_not_yet
+#ifdef USE_PAM
        /* We must fork before setuid() because we need to call
         * pam_close_session() as root.
         */
@@ -1211,20 +1262,26 @@ auth_ok:
           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 */
-       signal(SIGINT, SIG_IGN);
-       child = fork();
-       if (child < 0) {
-               /* error in fork() */
-               fprintf(stderr,"login: failure forking: %s", strerror(errno));
-               PAM_END;
-               exit(0);
-       } else if (child) {
-               /* parent - wait for child to finish, then cleanup session */
-               wait(NULL);
-               PAM_END;
-               exit(0);
+       /* 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 (child < 0) {
+                       /* error in fork() */
+                       fprintf(stderr, "login: failure forking: %s",
+                               strerror(errno));
+                       PAM_END;
+                       exit(0);
+               } else if (child) {
+                       /* parent - wait for child to finish,
+                          then cleanup session */
+                       wait(NULL);
+                       PAM_END;
+                       exit(0);
+               }
+               /* child */
        }
-       /* child */
 #endif
        signal(SIGINT, SIG_DFL);        /* default interrupt signal */
 
index 44c6b2c953f0d2eeaad7594d7aa65a5017294081..fa285f067719d25f994c39c3f7977ff06177872d 100644 (file)
@@ -30,7 +30,7 @@
 #include <config.h>
 
 #include "rcsid.h"
-RCSID(PKG_VER "$Id: logoutd.c,v 1.14 1999/08/27 19:02:51 marekm Exp $")
+RCSID(PKG_VER "$Id: logoutd.c,v 1.15 2000/08/26 18:27:18 marekm Exp $")
 
 #include <sys/types.h>
 #include <sys/stat.h>
@@ -60,8 +60,7 @@ static char   *Prog;
 #endif
 
 /* local function prototypes */
-static int check_login P_((const struct utmp *));
-int main P_((int, char **));
+static int check_login(const struct utmp *);
 
 
 /*
index 8f7c28344097fa504dae741d861ba83d93c453d4..e35da31fe1a5a075c0d2d60e83da17228f545858 100644 (file)
@@ -30,7 +30,7 @@
 #include <config.h>
 
 #include "rcsid.h"
-RCSID(PKG_VER "$Id: mkpasswd.c,v 1.6 1999/06/07 16:40:45 marekm Exp $")
+RCSID(PKG_VER "$Id: mkpasswd.c,v 1.7 2000/08/26 18:27:18 marekm Exp $")
 
 #include <sys/stat.h>
 #include "prototypes.h"
@@ -103,8 +103,7 @@ extern      int     sg_dbm_update();
 #endif
 
 /* local function prototypes */
-int main P_((int, char **));
-static void usage P_((void));
+static void usage(void);
 
 /*
  * mkpasswd - create DBM files for /etc/passwd-like input file
index cf22f499d7394618caee7dbd4f1fe52a2ae709ba..0b461ebaa88ae0b0d089d3c9791dcf0bf0536560 100644 (file)
@@ -30,7 +30,7 @@
 #include <config.h>
 
 #include "rcsid.h"
-RCSID(PKG_VER "$Id: newgrp.c,v 1.14 1999/08/27 19:02:51 marekm Exp $")
+RCSID(PKG_VER "$Id: newgrp.c,v 1.15 2000/08/26 18:27:18 marekm Exp $")
 
 #include <stdio.h>
 #include <errno.h>
@@ -53,8 +53,7 @@ static char *Prog;
 static int is_newgrp;
 
 /* local function prototypes */
-static void usage P_((void));
-int main P_((int, char **));
+static void usage(void);
 
 /*
  * usage - print command usage message
@@ -79,6 +78,7 @@ main(int argc, char **argv)
        int     initflag = 0;
        int     needspasswd = 0;
        int     i;
+       int their_grp = 0;
        int cflag = 0;
        gid_t gid;
        char *cp;
@@ -95,7 +95,10 @@ main(int argc, char **argv)
        struct sgrp *sgrp;
 #endif
 
+#if ENABLE_NLS
+       /* XXX - remove when gettext is safe to use in setuid programs */
        sanitize_env();
+#endif
 
        setlocale(LC_ALL, "");
        bindtextdomain(PACKAGE, LOCALEDIR);
@@ -243,6 +246,7 @@ main(int argc, char **argv)
                        goto failure;
                }
                group = grp->gr_name;
+               their_grp = 1;
        } else if (! (grp = getgrnam (group))) {
                fprintf (stderr, _("unknown group: %s\n"), group);
                goto failure;
@@ -259,9 +263,13 @@ main(int argc, char **argv)
         * 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))
+       if (!is_on_list(grp->gr_mem, name) && !their_grp)
                needspasswd = 1;
 
        /*
index a91413302b50d826455d3f6d359682d9f9b08682..fd313c4b7d3daab5858443aba0eea8d6e10531cd 100644 (file)
@@ -36,7 +36,7 @@
 #include <config.h>
 
 #include "rcsid.h"
-RCSID(PKG_VER "$Id: newusers.c,v 1.10 1999/06/07 16:40:45 marekm Exp $")
+RCSID(PKG_VER "$Id: newusers.c,v 1.11 2000/08/26 18:27:18 marekm Exp $")
 
 #include <sys/types.h>
 #include <sys/stat.h>
@@ -49,8 +49,6 @@ RCSID(PKG_VER "$Id: newusers.c,v 1.10 1999/06/07 16:40:45 marekm Exp $")
 
 static char *Prog;
 
-extern char *crypt_make_salt P_((void));
-
 #include "getdef.h"
 #include "pwio.h"
 #include "groupio.h"
@@ -62,12 +60,11 @@ static int is_shadow;
 #endif
 
 /* local function prototypes */
-static void usage P_((void));
-static int add_group P_((const char *, const char *, gid_t *));
-static int add_user P_((const char *, const char *, uid_t *, gid_t));
-static void update_passwd P_((struct passwd *, const char *));
-static int add_passwd P_((struct passwd *, const char *));
-int main P_((int, 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
index 2ab8543762bc405e5eb9c7b598313f78d20f4ae0..535af0c8c63b0452dd6c19a98af95daccaa221e9 100644 (file)
@@ -30,7 +30,7 @@
 #include <config.h>
 
 #include "rcsid.h"
-RCSID(PKG_VER "$Id: passwd.c,v 1.18 1999/08/27 19:02:51 marekm Exp $")
+RCSID(PKG_VER "$Id: passwd.c,v 1.19 2000/08/26 18:27:18 marekm Exp $")
 
 #include "prototypes.h"
 #include "defines.h"
@@ -155,7 +155,6 @@ static int tcfs_force = 0;
  * External identifiers
  */
 
-extern char *crypt_make_salt P_((void));
 #ifdef ATT_AGE
 extern char *l64a();
 #endif
@@ -197,39 +196,38 @@ extern    int     pw_dbm_mode;
 #define NOCHGPASSWD "did not change password for `%s'"
 
 /* local function prototypes */
-static void usage P_((int));
+static void usage(int);
 #ifndef USE_PAM
 #ifdef AUTH_METHODS
-static char *get_password P_((const char *));
-static int uses_default_method P_((const char *));
+static char *get_password(const char *);
+static int uses_default_method(const char *);
 #endif /* AUTH_METHODS */
-static int reuse P_((const char *, const struct passwd *));
-static int new_password P_((const struct passwd *));
+static int reuse(const char *, const struct passwd *);
+static int new_password(const struct passwd *);
 #ifdef SHADOWPWD
-static void check_password P_((const struct passwd *, const struct spwd *));
+static void check_password(const struct passwd *, const struct spwd *);
 #else /* !SHADOWPWD */
-static void check_password P_((const struct passwd *));
+static void check_password(const struct passwd *);
 #endif /* !SHADOWPWD */
-static char *insert_crypt_passwd P_((const char *, const char *));
+static char *insert_crypt_passwd(const char *, const char *);
 #endif /* !USE_PAM */
-static char *date_to_str P_((time_t));
-static const char *pw_status P_((const char *));
-static void print_status P_((const struct passwd *));
-static void fail_exit P_((int));
-static void oom P_((void));
-static char *update_crypt_pw P_((char *));
-static void update_noshadow P_((void));
+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 P_((void));
+static void update_shadow(void);
 #endif
 #ifdef HAVE_TCFS
-static void update_tcfs P_((void));
+static void update_tcfs(void);
 #endif
 #ifdef HAVE_USERSEC_H
-static void update_userpw P_((char *));
+static void update_userpw(char *);
 #endif
-static long getnumber P_((const char *));
-int main P_((int, char **));
+static long getnumber(const char *);
 
 /*
  * usage - print command usage and exit
@@ -301,10 +299,10 @@ reuse(const char *pass, const struct passwd *pw)
 #ifdef HAVE_LIBCRACK_HIST
        const char *reason;
 #ifdef HAVE_LIBCRACK_PW
-       const char *FascistHistoryPw P_((const char *,const struct passwd *));
+       const char *FascistHistoryPw(const char *,const struct passwd *);
        reason = FascistHistory(pass, pw);
 #else
-       const char *FascistHistory P_((const char *, int));
+       const char *FascistHistory(const char *, int);
        reason = FascistHistory(pass, pw->pw_uid);
 #endif
        if (reason) {
@@ -333,7 +331,7 @@ new_password(const struct passwd *pw)
        int     warned;
        int     pass_max_len;
 #ifdef HAVE_LIBCRACK_HIST
-       int HistUpdate P_((const char *, const char *));
+       int HistUpdate(const char *, const char *);
 #endif
 
        /*
index f30241b03610a96f41d3a228b6f2bc2fbb1720df..13aec57bb8525b7d5e0e291047cad9e32e7840e9 100644 (file)
@@ -30,7 +30,7 @@
 #include <config.h>
 
 #include "rcsid.h"
-RCSID(PKG_VER "$Id: pwck.c,v 1.13 1999/06/07 16:40:45 marekm Exp $")
+RCSID(PKG_VER "$Id: pwck.c,v 1.14 2000/08/26 18:27:18 marekm Exp $")
 
 #include <stdio.h>
 #include <fcntl.h>
@@ -44,13 +44,13 @@ RCSID(PKG_VER "$Id: pwck.c,v 1.13 1999/06/07 16:40:45 marekm Exp $")
 #include "commonio.h"
 
 #include "pwio.h"
-extern void __pw_del_entry P_((const struct commonio_entry *));
-extern struct commonio_entry *__pw_get_head P_((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 P_((const struct commonio_entry *));
-extern struct commonio_entry *__spw_get_head P_((void));
+extern void __spw_del_entry(const struct commonio_entry *);
+extern struct commonio_entry *__spw_get_head(void);
 #endif
 
 /*
@@ -84,9 +84,8 @@ static int read_only = 0;
 static int quiet = 0;  /* don't report warnings, only errors */
 
 /* local function prototypes */
-static void usage P_((void));
-static int yes_or_no P_((void));
-int main P_((int, char **));
+static void usage(void);
+static int yes_or_no(void);
 
 /*
  * usage - print syntax message and exit
@@ -276,7 +275,7 @@ main(int argc, char **argv)
                 * be parsed properly.
                 */
 
-               if (!pfe->entry) {
+               if (!pfe->eptr) {
 
                        /*
                         * Tell the user this entire line is bogus and
@@ -314,14 +313,14 @@ delete_pw:
                 * Password structure is good, start using it.
                 */
 
-               pwd = pfe->entry;
+               pwd = pfe->eptr;
 
                /*
                 * Make sure this entry has a unique name.
                 */
 
                for (tpfe = __pw_get_head(); tpfe; tpfe = tpfe->next) {
-                       const struct passwd *ent = tpfe->entry;
+                       const struct passwd *ent = tpfe->eptr;
 
                        /*
                         * Don't check this entry
@@ -445,7 +444,7 @@ delete_pw:
                 * be parsed properly.
                 */
 
-               if (!spe->entry) {
+               if (!spe->eptr) {
 
                        /*
                         * Tell the user this entire line is bogus and
@@ -483,14 +482,14 @@ delete_spw:
                 * Shadow password structure is good, start using it.
                 */
 
-               spw = spe->entry;
+               spw = spe->eptr;
 
                /*
                 * Make sure this entry has a unique name.
                 */
 
                for (tspe = __spw_get_head(); tspe; tspe = tspe->next) {
-                       const struct spwd *ent = tspe->entry;
+                       const struct spwd *ent = tspe->eptr;
 
                        /*
                         * Don't check this entry
index fcaad97d8d62b2cf1e974eb848ffabc1a591caa0..3a32370b2b4f7c960f9f9f9623840d207866e4e7 100644 (file)
@@ -31,7 +31,7 @@
 #include <config.h>
 
 #include "rcsid.h"
-RCSID(PKG_VER "$Id: pwconv.c,v 1.10 1999/06/07 16:40:45 marekm Exp $")
+RCSID(PKG_VER "$Id: pwconv.c,v 1.11 2000/08/26 18:27:18 marekm Exp $")
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -65,8 +65,7 @@ static int
        passwd_locked = 0;
 
 /* local function prototypes */
-static void fail_exit P_((int));
-int main P_((int, char **));
+static void fail_exit(int);
 
 static void
 fail_exit(int status)
index 6e6a172b3185a90f683d5f6ded7f8c2937ef8700..9335a489db96b4dd124a405d3516a3178e29d855 100644 (file)
@@ -39,7 +39,7 @@
 #include <config.h>
 
 #include "rcsid.h"
-RCSID(PKG_VER "$Id: pwunconv.c,v 1.8 1999/06/07 16:40:45 marekm Exp $")
+RCSID(PKG_VER "$Id: pwunconv.c,v 1.9 2000/08/26 18:27:18 marekm Exp $")
 
 #include "defines.h"
 #include <sys/types.h>
@@ -72,8 +72,7 @@ static int shadow_locked = 0,
        passwd_locked = 0;
 
 /* local function prototypes */
-static void fail_exit P_((int));
-int main P_((int, char **));
+static void fail_exit(int);
 
 static void
 fail_exit(int status)
index 3f4f4309256bb0af367f3a423f591f632f62db4f..5fc6278dbfc881b0f6ebb520175500be650d8b24 100644 (file)
--- a/src/su.c
+++ b/src/su.c
@@ -30,7 +30,7 @@
 #include <config.h>
 
 #include "rcsid.h"
-RCSID(PKG_VER "$Id: su.c,v 1.13 1999/06/07 16:40:45 marekm Exp $")
+RCSID(PKG_VER "$Id: su.c,v 1.14 2000/08/26 18:27:18 marekm Exp $")
 
 #include <sys/types.h>
 #include <stdio.h>
@@ -63,9 +63,9 @@ static pam_handle_t *pamh = NULL;
  * Global variables
  */
 
-/* needed by sulog.c */
-char   name[BUFSIZ];
-char   oldname[BUFSIZ];
+/* not needed by sulog.c anymore */
+static char name[BUFSIZ];
+static char oldname[BUFSIZ];
 
 static char *Prog;
 
@@ -78,19 +78,14 @@ struct      passwd  pwent;
 extern char **newenvp;
 extern size_t newenvc;
 
-extern void sulog P_((const char *, int));
-extern void subsystem P_((const struct passwd *));
-extern char *tz P_((const char *));
-extern int check_su_auth P_((const char *, const char *));
 extern char **environ;
 
 /* local function prototypes */
-int main P_((int, char **));
 
 #ifndef USE_PAM
 
-static RETSIGTYPE die P_((int));
-static int iswheel P_((const char *));
+static RETSIGTYPE die(int);
+static int iswheel(const char *);
 
 /*
  * die - set or reset termio modes.
@@ -133,7 +128,7 @@ iswheel(const char *username)
 static void
 su_failure(const char *tty)
 {
-       sulog(tty, 0);          /* 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,
@@ -247,27 +242,24 @@ main(int argc, char **argv)
         * be ignored and a new one created later on.
         */
 
-       if (! fakelogin)
-               while (*envp)
-                       addenv(*envp++, NULL);
-
-       if (fakelogin && (cp=getdef_str("ENV_TZ")))
-               addenv(*cp == '/' ? tz(cp) : cp, NULL);
-
+       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 (fakelogin && (cp=getdef_str("ENV_HZ")) )
-               addenv(cp, NULL);       /* set the default $HZ, if one */
-
+               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 (fakelogin && (cp = getenv ("TERM")))
-               addenv("TERM", cp);
+               if ((cp = getenv ("TERM")))
+                       addenv("TERM", cp);
+       } else {
+               while (*envp)
+                       addenv(*envp++, NULL);
+       }
 
        /*
         * The next argument must be either a user ID, or some flag to
@@ -508,8 +500,19 @@ top:
        }
 #endif  /* !USE_PAM */
 
-       cp = getdef_str(pwent.pw_uid == 0 ? "ENV_SUPATH" : "ENV_PATH");
+       cp = getdef_str((pwent.pw_uid == 0) ? "ENV_SUPATH" : "ENV_PATH");
+#if 0
        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);
+       } else {
+               addenv("PATH", cp);
+       }
+#endif
 
        environ = newenvp;              /* make new environment active */
 
@@ -525,7 +528,7 @@ top:
                goto top;
        }
 
-       sulog (tty, 1);                 /* save SU information */
+       sulog(tty, 1, oldname, name);           /* save SU information */
        endpwent ();
 #ifdef SHADOWPWD
        endspent ();
@@ -593,20 +596,6 @@ top:
         * arguments.
         */
 
-       if (! doshell) {
-
-               /*
-                * 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();
-               exit (1);
-       }
        if (fakelogin) {
                char *arg0;
 
@@ -627,6 +616,21 @@ top:
        } else
                cp = Basename(pwent.pw_shell);
 
+       if (! doshell) {
+
+               /*
+                * 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();
+               exit (1);
+       }
+
        shell(pwent.pw_shell, cp);
        /*NOTREACHED*/
        exit(1);
index b987b286a0ad8e70623a16dbab840ba708e872ce..baef1cce4ebf76325766c8a87cd589baeae88026 100644 (file)
@@ -30,7 +30,7 @@
 #include <config.h>
 
 #include "rcsid.h"
-RCSID(PKG_VER "$Id: sulogin.c,v 1.10 1999/08/27 19:02:51 marekm Exp $")
+RCSID(PKG_VER "$Id: sulogin.c,v 1.11 2000/08/26 18:27:18 marekm Exp $")
 
 #include "prototypes.h"
 #include "defines.h"
@@ -65,15 +65,13 @@ extern char **newenvp;
 extern size_t newenvc;
 
 extern char    **environ;
-extern char *tz P_((const char *));
 
 #ifndef        ALARM
 #define        ALARM   60
 #endif
 
 /* local function prototypes */
-static RETSIGTYPE catch P_((int));
-int main P_((int, char **));
+static RETSIGTYPE catch(int);
 
 static RETSIGTYPE
 catch(int sig)
@@ -170,7 +168,7 @@ main(int argc, char **argv)
        alarm (ALARM);                  /* only wait so long ... */
 
        while (1) {             /* repeatedly get login/password pairs */
-               entry (name, &pwent);   /* get entry from password file */
+               pw_entry(name, &pwent);  /* get entry from password file */
                if (pwent.pw_name == (char *) 0) {
 
                        /*
index dc233949c971a4df4655e6341c62f4313885b642..a2492e0728e154f07584b5c047bcb3fdc0b9526f 100644 (file)
@@ -30,7 +30,7 @@
 #include <config.h>
 
 #include "rcsid.h"
-RCSID(PKG_VER "$Id: useradd.c,v 1.16 1999/06/07 16:40:45 marekm Exp $")
+RCSID(PKG_VER "$Id: useradd.c,v 1.17 2000/08/26 18:27:18 marekm Exp $")
 
 #include "prototypes.h"
 #include "defines.h"
@@ -197,33 +197,32 @@ static int        sg_dbm_added;
 #endif
 
 /* local function prototypes */
-static void fail_exit P_((int));
-static struct group *getgr_nam_gid P_((const char *));
-static long get_number P_((const char *));
-static void get_defaults P_((void));
-static void show_defaults P_((void));
-static int set_defaults P_((void));
-static int get_groups P_((char *));
-static void usage P_((void));
-static void new_pwent P_((struct passwd *));
+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 *);
 #ifdef SHADOWPWD
-static long scale_age P_((long));
-static void new_spent P_((struct spwd *));
+static long scale_age(long);
+static void new_spent(struct spwd *);
 #endif
-static void grp_update P_((void));
-static void find_new_uid P_((void));
+static void grp_update(void);
+static void find_new_uid(void);
 #ifdef AUTH_METHODS
-static void convert_auth P_((char *, const char *));
-static int valid_auth P_((const char *));
+static void convert_auth(char *, const char *);
+static int valid_auth(const char *);
 #endif
-static void process_flags P_((int argc, char **argv));
-static void close_files P_((void));
-static void open_files P_((void));
-static void faillog_reset P_((uid_t));
-static void lastlog_reset P_((uid_t));
-static void usr_update P_((void));
-static void create_home P_((void));
-int main P_((int, char **));
+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
index 6acc5b5f0dc486ae082f939131bb370594305abe..135bede0670157b9a47aee67adc8c9ae9655f356 100644 (file)
@@ -30,7 +30,7 @@
 #include <config.h>
 
 #include "rcsid.h"
-RCSID(PKG_VER "$Id: userdel.c,v 1.15 1999/06/07 16:40:45 marekm Exp $")
+RCSID(PKG_VER "$Id: userdel.c,v 1.16 2000/08/26 18:27:18 marekm Exp $")
 
 #include <sys/stat.h>
 #include <stdio.h>
@@ -101,22 +101,21 @@ static int is_shadow_grp;
 extern int optind;
 
 /* local function prototypes */
-static void usage P_((void));
-static void update_groups P_((void));
-static void close_files P_((void));
-static void fail_exit P_((int));
-static void open_files P_((void));
-static void update_user P_((void));
-static void user_busy P_((const char *, uid_t));
-static void user_cancel P_((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 P_((const char *, const char *));
+static int path_prefix(const char *, const char *);
 #endif
-static int is_owner P_((uid_t, const char *));
+static int is_owner(uid_t, const char *);
 #ifndef NO_REMOVE_MAILBOX
-static void remove_mailbox P_((void));
+static void remove_mailbox(void);
 #endif
-int main P_((int, char **));
 
 /*
  * usage - display usage message and exit
@@ -134,6 +133,10 @@ usage(void)
  *
  *     update_groups() takes the user name that was given and searches
  *     the group files for membership in any group.
+ *
+ *     we also check to see if they have any groups they own (the same
+ *     name is their user name) and delete them too (only if USERGROUPS_ENAB
+ *     is enabled).
  */
 
 static void
@@ -188,9 +191,36 @@ update_groups(void)
                SYSLOG((LOG_INFO, "delete `%s' from group `%s'\n",
                        user_name, ngrp->gr_name));
        }
-#ifdef NDBM
+#ifdef NDBM
+       endgrent();
+#endif
+       /*
+        * we've removed their name from all the groups above, so
+        * now if they have a group with the same name as their
+        * user name, with no members, we delete it.
+        */
+
+       grp = getgrnam(user_name);
+       if (grp && getdef_bool("USERGROUPS_ENAB") && (grp->gr_mem[0] == NULL)) {
+
+               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);
+#endif
+               SYSLOG((LOG_INFO, "removed group `%s' owned by `%s'\n",
+                       grp->gr_name, user_name));
+       }
+#ifdef NDBM
        endgrent ();
-#endif /* NDBM */
+#endif
 #ifdef SHADOWGRP
        if (!is_shadow_grp)
                return;
index 915cb3a72c8ab28df4f0b6f5e0ed32203a3a9f5e..09d1172d872695446aac41846dcb2cb67a3b5755 100644 (file)
@@ -30,7 +30,7 @@
 #include <config.h>
 
 #include "rcsid.h"
-RCSID(PKG_VER "$Id: usermod.c,v 1.17 1999/06/07 16:40:45 marekm Exp $")
+RCSID(PKG_VER "$Id: usermod.c,v 1.18 2000/08/26 18:27:18 marekm Exp $")
 
 #include <sys/types.h>
 #include <sys/stat.h>
@@ -151,38 +151,37 @@ extern char *optarg;
 extern int optind;
 
 /* local function prototypes */
-static int get_groups P_((char *));
-static void usage P_((void));
-static void new_pwent P_((struct passwd *));
+static int get_groups(char *);
+static void usage(void);
+static void new_pwent(struct passwd *);
 #ifdef SHADOWPWD
-static void new_spent P_((struct spwd *));
+static void new_spent(struct spwd *);
 #endif
-static void fail_exit P_((int));
-static int update_group P_((void));
+static void fail_exit(int);
+static int update_group(void);
 #ifdef SHADOWGRP
-static int update_gshadow P_((void));
+static int update_gshadow(void);
 #endif
-static int grp_update P_((void));
+static int grp_update(void);
 #ifdef AUTH_METHODS
-static char *get_password P_((const char *));
-static void split_auths P_((char *, char **));
-static void update_auths P_((const char *, const char *, char *));
-static void add_auths P_((const char *, const char *, char *));
-static void delete_auths P_((const char *, const char *, char *));
-static void convert_auth P_((char *, const char *, const char *));
-static int valid_auth P_((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 P_((const char *));
-static void process_flags P_((int, char **));
-static void close_files P_((void));
-static void open_files P_((void));
-static void usr_update P_((void));
-static void move_home P_((void));
-static void update_files P_((void));
+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);
 #ifndef NO_MOVE_MAILBOX
-static void move_mailbox P_((void));
+static void move_mailbox(void);
 #endif
-int main P_((int, char **));
 
 /* Had to move this over from useradd.c since we have groups named
  * "56k-family"... ergh.
index d799796f0a576f9c7ccff9d31fcdee0f2b91e7b8..ed450d4788239a2b8b57b7ef09c43c73a7b5dcd0 100644 (file)
@@ -23,7 +23,7 @@
 #include <config.h>
 
 #include "rcsid.h"
-RCSID(PKG_VER "$Id: vipw.c,v 1.1 1999/07/09 18:02:43 marekm Exp $")
+RCSID(PKG_VER "$Id: vipw.c,v 1.2 2000/08/26 18:27:19 marekm Exp $")
 
 #include "defines.h"
 
@@ -44,13 +44,12 @@ RCSID(PKG_VER "$Id: vipw.c,v 1.1 1999/07/09 18:02:43 marekm Exp $")
 
 static const char *progname, *filename, *fileeditname;
 static int filelocked = 0, createedit = 0;
-static int (*unlock)();
+static int (*unlock)(void);
 
 /* local function prototypes */
-static int create_backup_file P_((FILE *, const char *, struct stat *));
-static void vipwexit P_((const char *, int, int));
-static void vipwedit P_((const char *, int (*) P_((void)), int (*) P_((void))));
-int main P_((int, char **));
+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)
@@ -109,7 +108,7 @@ vipwexit(const char *msg, int syserr, int ret)
 #endif
 
 static void
-vipwedit(const char *file, int (*file_lock) P_((void)), int (*file_unlock) P_((void)))
+vipwedit(const char *file, int (*file_lock)(void), int (*file_unlock)(void))
 {
   const char *editor;
   pid_t pid;
@@ -143,9 +142,23 @@ vipwedit(const char *file, int (*file_lock) P_((void)), int (*file_unlock) P_((v
   
   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);
+#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);
+#endif
   }
 
   for (;;) {