--- shadow-4.0.18.1.orig/debian/patches/419_time_structures.dpatch +++ shadow-4.0.18.1/debian/patches/419_time_structures.dpatch @@ -0,0 +1,202 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## 319_time_structures.dpatch by Nicolas FRANCOIS +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: I didn't find a related bug in the BTS. +## DP: It must be related to the 1:4.0.3-22 changelog: +## DP: Don't assume that lastlog.ll_time or utmp.ut_time or utmpx.ut_tv are +## DP: made up of time_ts and timevals, because they aren't on x86-64. +## DP: Dismaying but true. +## DP: -- Karl Ramm Sun, 14 Mar 2004 +## DP: +## DP: Some parts of this patch have been applied upstream. The other parts +## DP: should be checked. + +@DPATCH@ +Index: shadow-4.0.3/libmisc/log.c +=================================================================== +--- shadow-4.0.3.orig/libmisc/log.c 1998-04-16 21:57:44.000000000 +0200 ++++ shadow-4.0.3/libmisc/log.c 2005-05-12 14:05:29.976542831 +0200 +@@ -88,7 +88,7 @@ dolastlog(struct lastlog *ll, const stru + if (ll) + *ll = newlog; + +- time(&newlog.ll_time); ++ newlog.ll_time = time(0); + strncpy(newlog.ll_line, line, sizeof newlog.ll_line); + #if HAVE_LL_HOST + strncpy(newlog.ll_host, host, sizeof newlog.ll_host); +Index: shadow-4.0.3/libmisc/utmp.c +=================================================================== +--- shadow-4.0.3.orig/libmisc/utmp.c 2002-03-08 05:30:30.000000000 +0100 ++++ shadow-4.0.3/libmisc/utmp.c 2005-05-12 14:05:29.994540142 +0200 +@@ -111,7 +111,7 @@ checkutmp(int picky) + /* XXX - assumes /dev/tty?? */ + strncpy(utent.ut_id, utent.ut_line + 3, sizeof utent.ut_id); + strcpy(utent.ut_user, "LOGIN"); +- time(&utent.ut_time); ++ utent.ut_time = time(0); + } + } + +@@ -195,7 +195,7 @@ checkutmp(int picky) + strcpy(utent.ut_user, "LOGIN"); + utent.ut_pid = getpid(); + utent.ut_type = LOGIN_PROCESS; +- time(&utent.ut_time); ++ utent.ut_time = time(0); + #if HAVE_UTMPX_H + strncpy(utxent.ut_line, line, sizeof utxent.ut_line); + if ((utx = getutxline(&utxent))) +@@ -204,7 +204,15 @@ checkutmp(int picky) + strcpy(utxent.ut_user, "LOGIN"); + utxent.ut_pid = utent.ut_pid; + utxent.ut_type = utent.ut_type; +- gettimeofday((struct timeval *) &utxent.ut_tv, NULL); ++ /* don't assume that utmpx.ut_tv is a struct timeval */ ++ { ++ struct timeval tv; ++ ++ gettimeofday(&tv, NULL); ++ ++ utxent.ut_tv.tv_sec = tv.tv_sec; ++ utxent.ut_tv.tv_usec = tv.tv_usec; ++ } + utent.ut_time = utxent.ut_tv.tv_sec; + #endif + } +@@ -230,7 +238,7 @@ checkutmp(int picky) + line += 5; + + (void) strncpy (utent.ut_line, line, sizeof utent.ut_line); +- (void) time (&utent.ut_time); ++ utent.ut_time = time(0); + } + + #endif /* !USG */ +@@ -286,7 +294,7 @@ setutmp(const char *name, const char *li + { + utent.ut_type = USER_PROCESS; + strncpy(utent.ut_user, name, sizeof utent.ut_user); +- time(&utent.ut_time); ++ utent.ut_time = time(0); + /* other fields already filled in by checkutmp above */ + setutent(); + pututline(&utent); +@@ -375,7 +383,14 @@ setutmp(const char *name, const char *li + + utline.ut_type = utxline.ut_type = USER_PROCESS; + +- gettimeofday(&utxline.ut_tv, NULL); ++ /* don't assume that utmpx.ut_tv is a struct timeval */ ++ { ++ struct timeval tv; ++ ++ gettimeofday(&tv, NULL); ++ utxline.ut_tv.tv_sec = tv.tv_sec; ++ utxline.ut_tv.tv_usec = tv.tv_usec; ++ } + utline.ut_time = utxline.ut_tv.tv_sec; + + strncpy(utxline.ut_host, host ? host : "", sizeof utxline.ut_host); +@@ -435,7 +450,7 @@ setutmp(const char *name, const char *li + * Put in the current time (common to everyone) + */ + +- (void) time (&utmp.ut_time); ++ utmp.ut_time = time(0); + + #ifdef UT_HOST + /* +Index: shadow-4.0.3/src/lastlog.c +=================================================================== +--- shadow-4.0.3.orig/src/lastlog.c 2005-05-12 14:05:24.511359400 +0200 ++++ shadow-4.0.3/src/lastlog.c 2005-05-12 14:05:29.994540142 +0200 +@@ -184,7 +184,13 @@ static void print_one (const struct pass + #endif + once++; + } +- tm = localtime (&lastlog.ll_time); ++ /* don't assume lastlog.ll_time is a time_t */ ++ { ++ time_t when; ++ ++ when = lastlog.ll_time; ++ tm = localtime (&when); ++ } + #ifdef HAVE_STRFTIME + strftime (ptime, sizeof (ptime), "%a %b %e %H:%M:%S %z %Y", tm); + cp = ptime; +@@ -193,7 +199,7 @@ static void print_one (const struct pass + cp[24] = '\0'; + #endif + +- if (lastlog.ll_time == (time_t) 0) ++ if (lastlog.ll_time == 0) + cp = _("**Never logged in**\0"); + + #ifdef HAVE_LL_HOST +Index: shadow-4.0.3/src/login.c +=================================================================== +--- shadow-4.0.3.orig/src/login.c 2005-05-12 14:04:27.490878998 +0200 ++++ shadow-4.0.3/src/login.c 2005-05-12 14:05:29.995539993 +0200 +@@ -849,10 +849,18 @@ int main (int argc, char **argv) + if (getdef_str("FTMP_FILE") != NULL) { + #if HAVE_UTMPX_H + failent = utxent; +- gettimeofday(&(failent.ut_tv), NULL); ++ /* don't assume that utmpx.ut_tv is a struct ++ timeval */ ++ { ++ struct timeval tv; ++ ++ gettimeofday(&tv, NULL); ++ failent.ut_tv.tv_sec = tv.tv_sec; ++ failent.ut_tv.tv_usec = tv.tv_usec; ++ } + #else + failent = utent; +- time(&failent.ut_time); ++ failent.ut_time = time(0); + #endif + strncpy(failent.ut_user, failent_user, sizeof(failent.ut_user)); + #ifdef USER_PROCESS +@@ -1093,10 +1101,17 @@ int main (int argc, char **argv) + + #if HAVE_UTMPX_H + failent = utxent; +- gettimeofday (&(failent.ut_tv), NULL); ++ /* don't assume that utmpx.ut_tv is a struct timeval */ ++ { ++ struct timeval tv; ++ ++ gettimeofday(&tv, NULL); ++ failent.ut_tv.tv_sec = tv.tv_sec; ++ failent.ut_tv.tv_usec = tv.tv_usec; ++ } + #else + failent = utent; +- time (&failent.ut_time); ++ failent.ut_time = time(0); + #endif + if (pwd) { + failent_user = pwent.pw_name; +@@ -1378,15 +1393,16 @@ int main (int argc, char **argv) + } + if (getdef_bool ("LASTLOG_ENAB") + && lastlog.ll_time != 0) { ++ time_t when = lastlog.ll_time; /* may not be a time_t */ + #ifdef HAVE_STRFTIME + strftime (ptime, sizeof (ptime), + "%a %b %e %H:%M:%S %z %Y", +- localtime (&lastlog.ll_time)); ++ localtime (&when)); + printf (_("Last login: %s on %s"), + ptime, lastlog.ll_line); + #else + printf (_("Last login: %.19s on %s"), +- ctime (&lastlog.ll_time), ++ ctime (&when), + lastlog.ll_line); + #endif + #ifdef HAVE_LL_HOST /* SVR4 || __linux__ || SUN4 */ --- shadow-4.0.18.1.orig/debian/patches/523_su_arguments_are_no_more_concatenated_by_default +++ shadow-4.0.18.1/debian/patches/523_su_arguments_are_no_more_concatenated_by_default @@ -0,0 +1,52 @@ +Goal: Do not concatenate the additional arguments, and support an + environment variable to revert to the old Debian's su behavior. + +This patch needs the su_arguments_are_concatenated patch. + +This patch, and su_arguments_are_concatenated should be dropped after +Etch. + +Status wrt upstream: This patch is Debian specific. + +Index: shadow-4.0.18.1/src/su.c +=================================================================== +--- shadow-4.0.18.1.orig/src/su.c 2006-09-17 12:18:07.008109068 +0200 ++++ shadow-4.0.18.1/src/su.c 2006-09-17 12:18:07.616113902 +0200 +@@ -76,6 +76,19 @@ + /* If nonzero, change some environment vars to indicate the user su'd to. */ + static int change_environment; + ++/* ++ * If nonzero, keep the old Debian behavior: ++ * * concatenate all the arguments and provide them to the -c option of ++ * the shell ++ * * If there are some additional arguments, but no -c, add a -c ++ * argument anyway ++ * Drawbacks: ++ * * you can't provide options to the shell (other than -c) ++ * * you can't rely on the argument count ++ * See http://bugs.debian.org/276419 ++ */ ++static int old_debian_behavior; ++ + #ifdef USE_PAM + static pam_handle_t *pamh = NULL; + static int caught = 0; +@@ -323,6 +336,8 @@ + #endif + #endif /* !USE_PAM */ + ++ old_debian_behavior = (getenv("SU_NO_SHELL_ARGS") != NULL); ++ + /* sanitize_env (); */ + + setlocale (LC_ALL, ""); +@@ -883,7 +898,7 @@ + * resulted string is always given to the shell with its + * -c option. + */ +- { ++ if (old_debian_behavior) { + char **parg; + unsigned int cmd_len = 0; + char *cmd = NULL; --- shadow-4.0.18.1.orig/debian/patches/431_su_uid_0_not_root +++ shadow-4.0.18.1/debian/patches/431_su_uid_0_not_root @@ -0,0 +1,28 @@ +Goal: don't assume uid 0 == "root", use getpwuid to fetch it +Fixes: #81924 + +Status wrt upstream: It was submitted upstream upstream (3 Jun 2005). + Some modification may be needed before its inclusion + upstream (multiple uid 0 accounts). +http://lists.alioth.debian.org/pipermail/pkg-shadow-devel/2005-June/001287.html + +Index: shadow-4.0.18.1/src/su.c +=================================================================== +--- shadow-4.0.18.1.orig/src/su.c 2006-08-01 12:30:02.000000000 +0200 ++++ shadow-4.0.18.1/src/su.c 2006-09-17 12:17:47.383953038 +0200 +@@ -427,7 +427,14 @@ + optind++; + } + if (!name[0]) /* use default user ID */ +- (void) strcpy (name, "root"); ++ { ++ struct passwd *root_pw = getpwuid(0); ++ if (root_pw == NULL) { ++ SYSLOG((LOG_CRIT, "There is no UID 0 user.")); ++ su_failure(tty); ++ } ++ strcpy(name, root_pw->pw_name); ++ } + + doshell = argc == optind; /* any arguments remaining? */ + if (command) --- shadow-4.0.18.1.orig/debian/patches/401_cppw_src.dpatch +++ shadow-4.0.18.1/debian/patches/401_cppw_src.dpatch @@ -0,0 +1,242 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## 401_cppw_src.dpatch by Nicolas FRANCOIS +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: Add cppw / cpgr + +@DPATCH@ +Index: shadow-4.0.18.1/src/cppw.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ shadow-4.0.18.1/src/cppw.c 2006-10-21 13:45:56.000000000 +0200 +@@ -0,0 +1,198 @@ ++/* ++ cppw, cpgr copy with locking given file over the password or group file ++ with -s will copy with locking given file over shadow or gshadow file ++ ++ Copyright (C) 1999 Stephen Frost ++ ++ Based on vipw, vigr by: ++ Copyright (C) 1997 Guy Maor ++ ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 2 of the License, or ++ (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, but ++ WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; if not, write to the Free Software ++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ++ ++ */ ++ ++#include ++#include "defines.h" ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include "prototypes.h" ++#include "pwio.h" ++#include "shadowio.h" ++#include "groupio.h" ++#include "sgroupio.h" ++ ++ ++static const char *progname, *filename, *filenewname; ++static int filelocked = 0; ++static int (*unlock)(); ++ ++/* local function prototypes */ ++static int create_backup_file (FILE *, const char *, struct stat *); ++static void cppwexit (const char *, int, int); ++static void cppwcopy (const char *, const char *, int (*) (void), int (*) (void)); ++int main (int, char **); ++ ++static int ++create_backup_file(FILE *fp, const char *backup, struct stat *sb) ++{ ++ struct utimbuf ub; ++ FILE *bkfp; ++ int c; ++ mode_t mask; ++ ++ mask = umask(077); ++ bkfp = fopen(backup, "w"); ++ umask(mask); ++ if (!bkfp) return -1; ++ ++ rewind(fp); ++ while ((c = getc(fp)) != EOF) { ++ if (putc(c, bkfp) == EOF) break; ++ } ++ ++ if (c != EOF || fflush(bkfp)) { ++ fclose(bkfp); ++ unlink(backup); ++ return -1; ++ } ++ if (fclose(bkfp)) { ++ unlink(backup); ++ return -1; ++ } ++ ++ ub.actime = sb->st_atime; ++ ub.modtime = sb->st_mtime; ++ if (utime(backup, &ub) || ++ chmod(backup, sb->st_mode) || ++ chown(backup, sb->st_uid, sb->st_gid)) { ++ unlink(backup); ++ return -1; ++ } ++ return 0; ++} ++ ++static void ++cppwexit(const char *msg, int syserr, int ret) ++{ ++ int err = errno; ++ if (filelocked) (*unlock)(); ++ if (msg) fprintf(stderr, "%s: %s", progname, msg); ++ if (syserr) fprintf(stderr, ": %s", strerror(err)); ++ fprintf(stderr, "\n%s: %s is unchanged\n", progname, filename); ++ exit(ret); ++} ++ ++static void ++cppwcopy(const char *file, const char *in_file, int (*file_lock) (void), int (*file_unlock) (void)) ++{ ++ struct stat st1; ++ FILE *f; ++ char filenew[1024]; ++ ++ snprintf(filenew, sizeof filenew, "%s.new", file); ++ unlock = file_unlock; ++ filename = file; ++ filenewname = filenew; ++ ++ if (access(file, F_OK)) cppwexit(file, 1, 1); ++ if (!file_lock()) cppwexit("Couldn't lock file", errno, 5); ++ filelocked = 1; ++ ++ /* file to copy has same owners, perm */ ++ if (stat(file, &st1)) cppwexit(file, 1, 1); ++ if (!(f = fopen(in_file, "r"))) cppwexit(file, 1, 1); ++ if (create_backup_file(f, filenew, &st1)) ++ cppwexit("Couldn't make backup", errno, 1); ++ ++ /* XXX - here we should check filenew for errors; if there are any, ++ fail w/ an appropriate error code and let the user manually fix ++ it. Use pwck or grpck to do the check. - Stephen (Shamelessly ++ stolen from '--marekm's comment) */ ++ ++ if (rename(filenew, file) == -1) { ++ fprintf(stderr, "%s: can't copy %s: %s)\n", ++ progname, filenew, strerror(errno)); ++ cppwexit(0,0,1); ++ } ++ ++ (*file_unlock)(); ++} ++ ++ ++int ++main(int argc, char **argv) ++{ ++ int flag; ++ int cpshadow = 0; ++ char *in_file; ++ char *c; ++ int e = 1; ++ int do_cppw; ++ ++ progname = ((c = strrchr(*argv, '/')) ? c+1 : *argv); ++ do_cppw = (strcmp(progname, "cpgr") != 0); ++ ++ while ((flag = getopt(argc, argv, "ghps")) != EOF) { ++ switch (flag) { ++ case 'p': ++ do_cppw = 1; ++ break; ++ case 'g': ++ do_cppw = 0; ++ break; ++ case 's': ++ cpshadow = 1; ++ break; ++ case 'h': ++ e = 0; ++ default: ++ printf("Usage:\n\ ++`cppw ' copys over /etc/passwd `cppw -s ' copys over /etc/shadow\n\ ++`cpgr ' copys over /etc/group `cpgr -s ' copys over /etc/gshadow\n\ ++"); ++ exit(e); ++ } ++ } ++ ++ if (optind >= argc) { ++ cppwexit ("missing file argument, -h for usage",0,1); ++ } ++ ++ in_file = argv[argc - 1]; ++ ++ if (do_cppw) { ++ if (cpshadow) ++ cppwcopy(SHADOW_FILE, in_file, spw_lock, spw_unlock); ++ else ++ cppwcopy(PASSWD_FILE, in_file, pw_lock, pw_unlock); ++ } ++ else { ++#ifdef SHADOWGRP ++ if (cpshadow) ++ cppwcopy(SGROUP_FILE, in_file, sgr_lock, sgr_unlock); ++ else ++#endif ++ cppwcopy(GROUP_FILE, in_file, gr_lock, gr_unlock); ++ } ++ ++ return 0; ++} +Index: shadow-4.0.18.1/src/Makefile.am +=================================================================== +--- shadow-4.0.18.1.orig/src/Makefile.am 2006-10-21 13:45:26.000000000 +0200 ++++ shadow-4.0.18.1/src/Makefile.am 2006-10-21 13:45:40.000000000 +0200 +@@ -24,6 +24,7 @@ + sbin_PROGRAMS = nologin + ubin_PROGRAMS = faillog lastlog chage chfn chsh expiry gpasswd newgrp passwd + usbin_PROGRAMS = \ ++ cppw \ + chgpasswd \ + chpasswd \ + groupadd \ +@@ -58,6 +59,7 @@ + chgpasswd_LDADD = $(LDADD) $(LIBPAM) $(LIBSELINUX) + chsh_LDADD = $(LDADD) $(LIBPAM) $(LIBSELINUX) + chpasswd_LDADD = $(LDADD) $(LIBPAM) $(LIBSELINUX) ++cppw_LDADD = $(LDADD) $(LIBSELINUX) + gpasswd_LDADD = $(LDADD) $(LIBAUDIT) $(LIBSELINUX) + groupadd_LDADD = $(LDADD) $(LIBPAM) $(LIBAUDIT) $(LIBSELINUX) + groupdel_LDADD = $(LDADD) $(LIBPAM) $(LIBAUDIT) $(LIBSELINUX) +Index: shadow-4.0.18.1/po/POTFILES.in +=================================================================== +--- shadow-4.0.18.1.orig/po/POTFILES.in 2006-10-21 13:45:26.000000000 +0200 ++++ shadow-4.0.18.1/po/POTFILES.in 2006-10-21 13:45:40.000000000 +0200 +@@ -61,6 +61,7 @@ + src/chgpasswd.c + src/chpasswd.c + src/chsh.c ++src/cppw.c + src/expiry.c + src/faillog.c + src/gpasswd.c --- shadow-4.0.18.1.orig/debian/patches/463_login_delay_obeys_to_PAM +++ shadow-4.0.18.1/debian/patches/463_login_delay_obeys_to_PAM @@ -0,0 +1,102 @@ +Goal: Do not hardcode pam_fail_delay and let pam_unix do its + job to set a delay...or not + +Fixes: #87648 + +Status wrt upstream: Forwarded but not applied yet + +Note: If removed, FAIL_DELAY must be re-added to /etc/login.defs + +Index: shadow-4.0.18.1/src/login.c +=================================================================== +--- shadow-4.0.18.1.orig/src/login.c 2006-09-17 12:17:55.628018587 +0200 ++++ shadow-4.0.18.1/src/login.c 2006-09-17 12:18:04.272087315 +0200 +@@ -331,7 +331,6 @@ + char ptime[80]; + #endif + int reason = PW_LOGIN; +- int delay; + int retries; + int failed; + int flag; +@@ -351,6 +350,7 @@ + pid_t child; + char *pam_user; + #else ++ int delay; + struct spwd *spwd = NULL; + #endif + /* +@@ -573,7 +573,6 @@ + alarm (timeout); + + environ = newenvp; /* make new environment active */ +- delay = getdef_num ("FAIL_DELAY", 1); + retries = getdef_num ("LOGIN_RETRIES", RETRIES); + + #ifdef USE_PAM +@@ -589,17 +588,12 @@ + + /* + * hostname & tty are either set to NULL or their correct values, +- * depending on how much we know. We also set PAM's fail delay to +- * ours. ++ * depending on how much we know. + */ + 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; +@@ -640,8 +634,6 @@ + failed = 0; + + failcount++; +- if (delay > 0) +- retcode = pam_fail_delay(pamh, 1000000*delay); + + retcode = pam_authenticate (pamh, 0); + +@@ -934,13 +926,16 @@ + if (pwent.pw_passwd[0] == '\0') + pw_auth ("!", username, reason, (char *) 0); + ++#ifndef USE_PAM + /* + * Wait a while (a la SVR4 /usr/bin/login) before attempting + * to login the user again. If the earlier alarm occurs + * before the sleep() below completes, login will exit. + */ ++ delay = getdef_num ("FAIL_DELAY", 1); + if (delay > 0) + sleep (delay); ++#endif + + puts (_("Login incorrect")); + +Index: shadow-4.0.18.1/lib/getdef.c +=================================================================== +--- shadow-4.0.18.1.orig/lib/getdef.c 2006-09-17 12:17:58.260039514 +0200 ++++ shadow-4.0.18.1/lib/getdef.c 2006-09-17 12:18:04.276087346 +0200 +@@ -55,7 +55,6 @@ + {"ENV_PATH", NULL}, + {"ENV_SUPATH", NULL}, + {"ERASECHAR", NULL}, +- {"FAIL_DELAY", NULL}, + {"FAILLOG_ENAB", NULL}, + {"FAKE_SHELL", NULL}, + {"FTMP_FILE", NULL}, +@@ -92,6 +91,7 @@ + {"ENV_HZ", NULL}, + {"ENVIRON_FILE", NULL}, + {"ENV_TZ", NULL}, ++ {"FAIL_DELAY", NULL}, + {"ISSUE_FILE", NULL}, + {"LASTLOG_ENAB", NULL}, + {"LOGIN_STRING", NULL}, --- shadow-4.0.18.1.orig/debian/patches/103_man-de +++ shadow-4.0.18.1/debian/patches/103_man-de @@ -0,0 +1,5241 @@ +Goal: Update German translations of manpages (mostly passwd). Use gettext now. + +Fixes: #379899 + +Status wrt upstream: Appiled in CVS + +Index: shadow-4.0.18.1/man/Makefile.am +=================================================================== +--- shadow-4.0.18.1.orig/man/Makefile.am 2006-12-07 19:04:32.571906079 +0100 ++++ shadow-4.0.18.1/man/Makefile.am 2006-12-07 19:04:46.456013985 +0100 +@@ -1,5 +1,5 @@ + +-LINGUAS = fr pl ru sv ++LINGUAS = de fr pl ru sv + + # subdirectories for translated manual pages + DIST_SUBDIRS = cs de es fi fr hu id it ja ko pl pt_BR ru sv tr zh_CN zh_TW +Index: shadow-4.0.18.1/man/de/de.po +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ shadow-4.0.18.1/man/de/de.po 2006-12-07 19:04:22.043824257 +0100 +@@ -0,0 +1,5219 @@ ++# German translation of passwd.1 ++# Copyright (C) 2006 Free Software Foundation, Inc. ++# Simon Brandmair , 2005. ++# ++msgid "" ++msgstr "" ++"Project-Id-Version: passwd.1 1.33\n" ++"POT-Creation-Date: 2006-11-12 20:17+0100\n" ++"PO-Revision-Date: 2006-08-15 19:08+0200\n" ++"Last-Translator: Simon Brandmair \n" ++"Language-Team: debian-l10n-german \n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++ ++#: vipw.8.xml:5(refentrytitle) vipw.8.xml:10(refname) vipw.8.xml:19(command) ++msgid "vipw" ++msgstr "vipw" ++ ++#: vipw.8.xml:6(manvolnum) usermod.8.xml:6(manvolnum) ++#: userdel.8.xml:6(manvolnum) userdel.8.xml:147(replaceable) ++#: useradd.8.xml:6(manvolnum) pwconv.8.xml:6(manvolnum) ++#: pwck.8.xml:6(manvolnum) nologin.8.xml:6(manvolnum) ++#: newusers.8.xml:6(manvolnum) logoutd.8.xml:6(manvolnum) ++#: lastlog.8.xml:6(manvolnum) grpck.8.xml:6(manvolnum) ++#: groupmod.8.xml:6(manvolnum) groupmems.8.xml:6(manvolnum) ++#: groupdel.8.xml:6(manvolnum) groupdel.8.xml:84(replaceable) ++#: groupadd.8.xml:6(manvolnum) faillog.8.xml:6(manvolnum) ++#: faillog.5.xml:53(manvolnum) chpasswd.8.xml:6(manvolnum) ++#: chgpasswd.8.xml:6(manvolnum) ++msgid "8" ++msgstr "8" ++ ++#: vipw.8.xml:7(refmiscinfo) usermod.8.xml:7(refmiscinfo) ++#: userdel.8.xml:7(refmiscinfo) useradd.8.xml:7(refmiscinfo) ++#: pwconv.8.xml:7(refmiscinfo) pwck.8.xml:7(refmiscinfo) ++#: nologin.8.xml:7(refmiscinfo) newusers.8.xml:7(refmiscinfo) ++#: logoutd.8.xml:7(refmiscinfo) lastlog.8.xml:7(refmiscinfo) ++#: grpck.8.xml:7(refmiscinfo) groupmod.8.xml:7(refmiscinfo) ++#: groupmems.8.xml:7(refmiscinfo) groupdel.8.xml:7(refmiscinfo) ++#: groupadd.8.xml:7(refmiscinfo) faillog.8.xml:7(refmiscinfo) ++#: chpasswd.8.xml:7(refmiscinfo) chgpasswd.8.xml:7(refmiscinfo) ++msgid "System Management Commands" ++msgstr "" ++ ++#: vipw.8.xml:11(refname) vipw.8.xml:25(command) ++msgid "vigr" ++msgstr "vigr" ++ ++#: vipw.8.xml:12(refpurpose) ++msgid "edit the password, group, shadow-password or shadow-group file" ++msgstr "" ++ ++#: vipw.8.xml:21(replaceable) vipw.8.xml:27(replaceable) ++#: usermod.8.xml:18(replaceable) userdel.8.xml:16(arg) ++#: useradd.8.xml:17(replaceable) useradd.8.xml:29(replaceable) ++#: su.1.xml:17(replaceable) passwd.1.xml:18(replaceable) ++#: lastlog.8.xml:18(replaceable) groupmod.8.xml:18(replaceable) ++#: faillog.8.xml:18(replaceable) chsh.1.xml:18(replaceable) ++#: chpasswd.8.xml:18(replaceable) chgpasswd.8.xml:18(replaceable) ++#: chage.1.xml:17(replaceable) ++msgid "options" ++msgstr "optionen" ++ ++#: vipw.8.xml:33(title) usermod.8.xml:25(title) userdel.8.xml:24(title) ++#: useradd.8.xml:35(title) suauth.5.xml:21(title) su.1.xml:28(title) ++#: sg.1.xml:26(title) shadow.5.xml:15(title) shadow.3.xml:64(title) ++#: shadow.3.xml:120(title) pwconv.8.xml:33(title) pwck.8.xml:44(title) ++#: porttime.5.xml:15(title) passwd.5.xml:15(title) passwd.1.xml:27(title) ++#: nologin.8.xml:21(title) newusers.8.xml:24(title) newgrp.1.xml:22(title) ++#: logoutd.8.xml:21(title) login.defs.5.xml:15(title) ++#: login.access.5.xml:15(title) login.1.xml:36(title) limits.5.xml:16(title) ++#: lastlog.8.xml:24(title) gshadow.5.xml:15(title) grpck.8.xml:25(title) ++#: groups.1.xml:24(title) groupmod.8.xml:25(title) groupmems.8.xml:27(title) ++#: groupdel.8.xml:24(title) groupadd.8.xml:30(title) gpasswd.1.xml:48(title) ++#: faillog.8.xml:24(title) faillog.5.xml:15(title) expiry.1.xml:23(title) ++#: chsh.1.xml:27(title) chpasswd.8.xml:24(title) chgpasswd.8.xml:24(title) ++#: chfn.1.xml:27(title) chage.1.xml:26(title) ++msgid "DESCRIPTION" ++msgstr "BESCHREIBUNG" ++ ++#: vipw.8.xml:34(para) ++#, fuzzy ++msgid "" ++"The vipw and vigr commands edits the " ++"files /etc/passwd and /etc/group, " ++"respectively. With the flag, they will edit the shadow " ++"versions of those files, /etc/shadow and /etc/" ++"gshadow, respectively. The programs will set the appropriate " ++"locks to prevent file corruption. When looking for an editor, the programs " ++"will first try the environment variable $VISUAL, then the " ++"environment variable $EDITOR, and finally the default editor, " ++"vi1." ++msgstr "" ++"vipw and vigr will edit the files " ++"/etc/passwd and /etc/group, " ++"respectively. With the flag, they will edit the shadow " ++"versions of those files, /etc/shadow and /etc/" ++"gshadow, respectively. The programs will set the appropriate " ++"locks to prevent file corruption. When looking for an editor, the programs " ++"will first try the environment variable $VISUAL, then the " ++"environment variable $EDITOR, and finally the default editor, " ++"vi1." ++ ++#: vipw.8.xml:51(title) usermod.8.xml:33(title) userdel.8.xml:33(title) ++#: useradd.8.xml:47(title) su.1.xml:74(title) pwck.8.xml:96(title) ++#: passwd.1.xml:140(title) login.1.xml:119(title) lastlog.8.xml:36(title) ++#: grpck.8.xml:69(title) groupmod.8.xml:34(title) groupmems.8.xml:42(title) ++#: groupadd.8.xml:39(title) gpasswd.1.xml:71(title) faillog.8.xml:35(title) ++#: chsh.1.xml:38(title) chpasswd.8.xml:46(title) chgpasswd.8.xml:45(title) ++#: chage.1.xml:36(title) ++msgid "OPTIONS" ++msgstr "OPTIONEN" ++ ++#: vipw.8.xml:52(para) ++#, fuzzy ++msgid "" ++"The options which apply to the vipw and vigr commands are:" ++msgstr "" ++"Die Optionen, die vom Befehl passwd unterstützt werden, " ++"sind:" ++ ++#: vipw.8.xml:58(term) ++msgid ", " ++msgstr "" ++ ++#: vipw.8.xml:60(para) ++msgid "Edit group database." ++msgstr "" ++ ++#: vipw.8.xml:64(term) userdel.8.xml:62(term) useradd.8.xml:153(term) ++#: passwd.1.xml:180(term) lastlog.8.xml:52(term) groupmod.8.xml:57(term) ++#: groupadd.8.xml:72(term) faillog.8.xml:48(term) chsh.1.xml:44(term) ++#: chpasswd.8.xml:59(term) chgpasswd.8.xml:58(term) chage.1.xml:74(term) ++msgid ", " ++msgstr ", " ++ ++#: vipw.8.xml:66(para) userdel.8.xml:64(para) useradd.8.xml:155(para) ++#: passwd.1.xml:182(para) lastlog.8.xml:56(para) groupmod.8.xml:59(para) ++#: groupadd.8.xml:74(para) faillog.8.xml:50(para) chsh.1.xml:46(para) ++#: chpasswd.8.xml:61(para) chgpasswd.8.xml:60(para) chage.1.xml:76(para) ++msgid "Display help message and exit." ++msgstr "Zeigt die Hilfe an und beendet das Programm." ++ ++#: vipw.8.xml:70(term) ++msgid ", " ++msgstr ", " ++ ++#: vipw.8.xml:72(para) ++msgid "Edit passwd database." ++msgstr "" ++ ++#: vipw.8.xml:76(term) passwd.1.xml:234(term) ++msgid ", " ++msgstr ", " ++ ++#: vipw.8.xml:78(para) passwd.1.xml:238(para) ++msgid "Quiet mode." ++msgstr "Stiller Modus." ++ ++#: vipw.8.xml:82(term) ++msgid ", " ++msgstr ", " ++ ++#: vipw.8.xml:84(para) ++msgid "Edit shadow or gshadow database." ++msgstr "" ++ ++#: vipw.8.xml:91(title) usermod.8.xml:246(title) userdel.8.xml:88(title) ++#: useradd.8.xml:363(title) suauth.5.xml:139(title) su.1.xml:176(title) ++#: sg.1.xml:43(title) shadow.5.xml:105(title) shadow.3.xml:172(title) ++#: pwconv.8.xml:109(title) pwck.8.xml:145(title) porttime.5.xml:76(title) ++#: passwd.5.xml:87(title) passwd.1.xml:322(title) newusers.8.xml:90(title) ++#: newgrp.1.xml:54(title) logoutd.8.xml:35(title) login.access.5.xml:66(title) ++#: login.1.xml:198(title) limits.5.xml:107(title) lastlog.8.xml:113(title) ++#: gshadow.5.xml:61(title) grpck.8.xml:87(title) groups.1.xml:46(title) ++#: groupmod.8.xml:89(title) groupmems.8.xml:103(title) ++#: groupdel.8.xml:43(title) groupadd.8.xml:112(title) gpasswd.1.xml:93(title) ++#: faillog.8.xml:132(title) faillog.5.xml:38(title) expiry.1.xml:32(title) ++#: chsh.1.xml:85(title) chfn.1.xml:60(title) chage.1.xml:177(title) ++msgid "FILES" ++msgstr "DATEIEN" ++ ++#: vipw.8.xml:94(filename) usermod.8.xml:249(filename) ++#: userdel.8.xml:91(filename) useradd.8.xml:378(filename) ++#: sg.1.xml:58(filename) pwck.8.xml:148(filename) newgrp.1.xml:69(filename) ++#: gshadow.5.xml:64(filename) grpck.8.xml:90(filename) ++#: groups.1.xml:49(filename) groupmod.8.xml:92(filename) ++#: groupmems.8.xml:106(filename) groupdel.8.xml:46(filename) ++#: groupadd.8.xml:115(filename) gpasswd.1.xml:11(filename) ++#: gpasswd.1.xml:96(filename) ++msgid "/etc/group" ++msgstr "/etc/group" ++ ++#: vipw.8.xml:96(para) usermod.8.xml:251(para) userdel.8.xml:93(para) ++#: useradd.8.xml:380(para) sg.1.xml:60(para) pwck.8.xml:150(para) ++#: newgrp.1.xml:71(para) gshadow.5.xml:66(para) grpck.8.xml:92(para) ++#: groups.1.xml:51(para) groupmod.8.xml:94(para) groupmems.8.xml:108(para) ++#: groupdel.8.xml:48(para) groupadd.8.xml:117(para) gpasswd.1.xml:98(para) ++#, fuzzy ++msgid "Group account information." ++msgstr "Informationen zu den Benutzerkonten." ++ ++#: vipw.8.xml:100(filename) sg.1.xml:64(filename) newgrp.1.xml:75(filename) ++#: gshadow.5.xml:70(filename) grpck.8.xml:96(filename) ++#: groupmod.8.xml:98(filename) groupmems.8.xml:112(filename) ++#: groupdel.8.xml:52(filename) groupadd.8.xml:121(filename) ++#: gpasswd.1.xml:102(filename) ++msgid "/etc/gshadow" ++msgstr "/etc/gshadow" ++ ++# type: Plain text ++#: vipw.8.xml:102(para) sg.1.xml:66(para) newgrp.1.xml:77(para) ++#: gshadow.5.xml:72(para) grpck.8.xml:98(para) groupmod.8.xml:100(para) ++#: groupdel.8.xml:54(para) groupadd.8.xml:123(para) gpasswd.1.xml:104(para) ++#, fuzzy ++msgid "Secure group account information." ++msgstr "Verschlüsselte Informationen zu den Benutzerkonten." ++ ++#: vipw.8.xml:106(filename) usermod.8.xml:255(filename) ++#: userdel.8.xml:103(filename) useradd.8.xml:366(filename) ++#: su.1.xml:179(filename) sg.1.xml:46(filename) shadow.5.xml:108(filename) ++#: pwck.8.xml:154(filename) passwd.5.xml:90(filename) ++#: passwd.1.xml:325(filename) newgrp.1.xml:57(filename) ++#: login.1.xml:213(filename) grpck.8.xml:102(filename) ++#: expiry.1.xml:35(filename) chsh.1.xml:88(filename) chfn.1.xml:69(filename) ++#: chage.1.xml:181(filename) ++msgid "/etc/passwd" ++msgstr "/etc/passwd" ++ ++#: vipw.8.xml:108(para) usermod.8.xml:257(para) userdel.8.xml:105(para) ++#: useradd.8.xml:368(para) su.1.xml:181(para) sg.1.xml:48(para) ++#: shadow.5.xml:110(para) pwck.8.xml:156(para) passwd.5.xml:92(para) ++#: passwd.1.xml:327(para) newgrp.1.xml:59(para) login.1.xml:215(para) ++#: grpck.8.xml:104(para) expiry.1.xml:37(para) chsh.1.xml:90(para) ++#: chfn.1.xml:71(para) chage.1.xml:184(para) ++msgid "User account information." ++msgstr "Informationen zu den Benutzerkonten." ++ ++#: vipw.8.xml:112(filename) usermod.8.xml:261(filename) ++#: userdel.8.xml:109(filename) useradd.8.xml:372(filename) ++#: su.1.xml:185(filename) sg.1.xml:52(filename) shadow.5.xml:114(filename) ++#: shadow.3.xml:175(filename) pwck.8.xml:160(filename) ++#: passwd.5.xml:96(filename) passwd.1.xml:331(filename) ++#: newgrp.1.xml:63(filename) login.1.xml:219(filename) ++#: expiry.1.xml:41(filename) chage.1.xml:189(filename) ++msgid "/etc/shadow" ++msgstr "/etc/shadow" ++ ++# type: Plain text ++#: vipw.8.xml:114(para) usermod.8.xml:263(para) userdel.8.xml:111(para) ++#: useradd.8.xml:374(para) su.1.xml:187(para) sg.1.xml:54(para) ++#: shadow.5.xml:116(para) shadow.3.xml:177(para) pwck.8.xml:162(para) ++#: passwd.1.xml:333(para) newgrp.1.xml:65(para) login.1.xml:221(para) ++#: expiry.1.xml:43(para) chage.1.xml:192(para) ++msgid "Secure user account information." ++msgstr "Verschlüsselte Informationen zu den Benutzerkonten." ++ ++#: vipw.8.xml:120(title) usermod.8.xml:270(title) userdel.8.xml:190(title) ++#: useradd.8.xml:474(title) suauth.5.xml:168(title) su.1.xml:194(title) ++#: sg.1.xml:73(title) shadow.5.xml:123(title) shadow.3.xml:184(title) ++#: pwconv.8.xml:121(title) pwck.8.xml:169(title) porttime.5.xml:88(title) ++#: passwd.5.xml:105(title) passwd.1.xml:391(title) nologin.8.xml:35(title) ++#: newusers.8.xml:102(title) newgrp.1.xml:84(title) ++#: login.defs.5.xml:256(title) login.access.5.xml:78(title) ++#: login.1.xml:252(title) limits.5.xml:117(title) gshadow.5.xml:79(title) ++#: grpck.8.xml:111(title) groups.1.xml:58(title) groupmod.8.xml:158(title) ++#: groupmems.8.xml:121(title) groupdel.8.xml:100(title) ++#: groupadd.8.xml:199(title) gpasswd.1.xml:111(title) faillog.8.xml:144(title) ++#: faillog.5.xml:50(title) expiry.1.xml:50(title) chsh.1.xml:109(title) ++#: chpasswd.8.xml:85(title) chgpasswd.8.xml:84(title) chfn.1.xml:78(title) ++#: chage.1.xml:232(title) ++msgid "SEE ALSO" ++msgstr "SIEHE AUCH" ++ ++#: vipw.8.xml:121(para) ++msgid "" ++"vi1, group5, " ++"gshadow5passwd5, " ++"shadow5." ++msgstr "" ++"vi1, group5, " ++"gshadow5passwd5, " ++"shadow5." ++ ++#: usermod.8.xml:5(refentrytitle) usermod.8.xml:10(refname) ++#: usermod.8.xml:16(command) login.defs.5.xml:229(term) ++msgid "usermod" ++msgstr "usermod" ++ ++#: usermod.8.xml:11(refpurpose) ++msgid "modify a user account" ++msgstr "" ++ ++#: usermod.8.xml:20(replaceable) userdel.8.xml:18(replaceable) ++#: useradd.8.xml:19(replaceable) su.1.xml:21(replaceable) ++#: passwd.1.xml:21(replaceable) chsh.1.xml:21(replaceable) ++#: chage.1.xml:20(replaceable) ++msgid "LOGIN" ++msgstr "LOGIN" ++ ++#: usermod.8.xml:26(para) ++msgid "" ++"The usermod command modifies the system account files to " ++"reflect the changes that are specified on the command line." ++msgstr "" ++ ++#: usermod.8.xml:34(para) ++#, fuzzy ++msgid "The options which apply to the usermod command are:" ++msgstr "" ++"Die Optionen, die vom Befehl passwd unterstützt werden, " ++"sind:" ++ ++#: usermod.8.xml:40(term) ++msgid ", " ++msgstr ", " ++ ++#: usermod.8.xml:44(para) ++msgid "" ++"Add the user to the supplemental group(s). Use only with " ++"option." ++msgstr "" ++ ++#: usermod.8.xml:51(term) useradd.8.xml:52(term) ++msgid "" ++", COMMENT" ++msgstr "" ++ ++#: usermod.8.xml:56(para) ++msgid "" ++"The new value of the user's password file comment field. It is normally " ++"modified using the chfn1 utility." ++msgstr "" ++ ++#: usermod.8.xml:65(term) useradd.8.xml:80(term) ++msgid "" ++", HOME_DIR" ++msgstr "" ++ ++#: usermod.8.xml:70(para) ++msgid "" ++"The user's new login directory. If the option is given " ++"the contents of the current home directory will be moved to the new home " ++"directory, which is created if it does not already exist." ++msgstr "" ++ ++#: usermod.8.xml:79(term) useradd.8.xml:97(term) useradd.8.xml:281(term) ++msgid "" ++", EXPIRE_DATE" ++msgstr "" ++ ++#: usermod.8.xml:84(para) useradd.8.xml:102(para) ++msgid "" ++"The date on which the user account will be disabled. The date is specified " ++"in the format YYYY-MM-DD." ++msgstr "" ++ ++#: usermod.8.xml:91(term) useradd.8.xml:109(term) useradd.8.xml:290(term) ++msgid "" ++", INACTIVE" ++msgstr "" ++ ++#: usermod.8.xml:96(para) useradd.8.xml:114(para) ++msgid "" ++"The number of days after a password expires until the account is permanently " ++"disabled. A value of 0 disables the account as soon as the password has " ++"expired, and a value of -1 disables the feature. The default value is -1." ++msgstr "" ++ ++#: usermod.8.xml:105(term) useradd.8.xml:123(term) useradd.8.xml:302(term) ++msgid "" ++", GROUP" ++msgstr "" ++ ++#: usermod.8.xml:110(para) ++msgid "" ++"The group name or number of the user's new initial login group. The group " ++"name must exist. A group number must refer to an already existing group. The " ++"default group number is 1." ++msgstr "" ++ ++#: usermod.8.xml:118(term) useradd.8.xml:137(term) ++msgid "" ++", GROUP1[,GROUP2,...[,GROUPN]]]" ++msgstr "" ++ ++#: usermod.8.xml:123(para) ++msgid "" ++"A list of supplementary groups which the user is also a member of. Each " ++"group is separated from the next by a comma, with no intervening whitespace. " ++"The groups are subject to the same restrictions as the group given with the " ++" option. If the user is currently a member of a group " ++"which is not listed, the user will be removed from the group. This behaviour " ++"can be changed via option, which appends user to the " ++"current supplementary group list." ++msgstr "" ++ ++#: usermod.8.xml:136(term) ++msgid "" ++", NEW_LOGIN" ++msgstr "" ++ ++#: usermod.8.xml:141(para) ++msgid "" ++"The name of the user will be changed from LOGIN to NEW_LOGIN. Nothing else is " ++"changed. In particular, the user's home directory name should probably be " ++"changed to reflect the new login name." ++msgstr "" ++ ++#: usermod.8.xml:151(term) ++msgid ", " ++msgstr "" ++ ++#: usermod.8.xml:155(para) ++msgid "" ++"Lock a user's password. This puts a '!' in front of the encrypted password, " ++"effectively disabling the password. You can't use this option with or ." ++msgstr "" ++ ++#: usermod.8.xml:164(term) useradd.8.xml:206(term) groupmod.8.xml:75(term) ++msgid ", " ++msgstr "" ++ ++#: usermod.8.xml:168(para) ++msgid "" ++"When used with the option, this option allows to change " ++"the user ID to a non-unique value." ++msgstr "" ++ ++#: usermod.8.xml:175(term) useradd.8.xml:214(term) ++msgid "" ++", PASSWORD" ++msgstr "" ++ ++#: usermod.8.xml:180(para) ++msgid "" ++"The encrypted password, as returned by crypt3." ++msgstr "" ++ ++#: usermod.8.xml:188(term) useradd.8.xml:227(term) useradd.8.xml:315(term) ++#: su.1.xml:108(term) chsh.1.xml:50(term) ++msgid "" ++", SHELL" ++msgstr "" ++ ++#: usermod.8.xml:193(para) chsh.1.xml:54(para) ++msgid "" ++"The name of the user's new login shell. Setting this field to blank causes " ++"the system to select the default login shell." ++msgstr "" ++ ++#: usermod.8.xml:200(term) useradd.8.xml:240(term) ++msgid "" ++", UID" ++msgstr "" ++ ++#: usermod.8.xml:205(para) ++msgid "" ++"The numerical value of the user's ID. This value must be unique, unless the " ++" option is used. The value must be non-negative. Values " ++"between 0 and 999 are typically reserved for system accounts. Any files " ++"which the user owns and which are located in the directory tree rooted at " ++"the user's home directory will have the file user ID changed automatically. " ++"Files outside of the user's home directory must be altered manually." ++msgstr "" ++ ++#: usermod.8.xml:218(term) ++msgid ", " ++msgstr ", " ++ ++#: usermod.8.xml:222(para) ++msgid "" ++"Unlock a user's password. This removes the '!' in front of the encrypted " ++"password. You can't use this option with or