]> granicus.if.org Git - linux-pam/commitdiff
Relevant BUGIDs:
authorThorsten Kukuk <kukuk@thkukuk.de>
Fri, 10 Oct 2008 06:53:45 +0000 (06:53 +0000)
committerThorsten Kukuk <kukuk@thkukuk.de>
Fri, 10 Oct 2008 06:53:45 +0000 (06:53 +0000)
Purpose of commit: new feature

Commit summary:
---------------

2008-10-10  Thorsten Kukuk  <kukuk@thkukuk.de>

        * configure.in: add modules/pam_pwhistory/Makefile.
        * doc/sag/Linux-PAM_SAG.xml: Include pam_pwhistory.xml.
        * doc/sag/pam_pwhistory.xml: New.
        * libpam/pam_static_modules.h: Add pam_pwhistory data.
        * modules/Makefile.am: Add pam_pwhistory directory.
        * modules/pam_pwhistory/Makefile.am: New.
        * modules/pam_pwhistory/README.xml: New.
        * modules/pam_pwhistory/opasswd.c: New.
        * modules/pam_pwhistory/opasswd.h: New.
        * modules/pam_pwhistory/pam_pwhistory.8.xml: New.
        * modules/pam_pwhistory/pam_pwhistory.c: New.
        * modules/pam_pwhistory/tst-pam_pwhistory: New.
        * xtests/Makefile.am: New.
        * xtests/run-xtests.sh: New.
        * xtests/tst-pam_pwhistory1.c: New.
        * xtests/tst-pam_pwhistory1.pamd: New.
        * xtests/tst-pam_pwhistory1.sh: New.
        * po/POTFILES.in: Add modules/pam_pwhistory/.
        * po/de.po: Update translations.

60 files changed:
ChangeLog
NEWS
configure.in
doc/sag/Linux-PAM_SAG.xml
doc/sag/pam_pwhistory.xml [new file with mode: 0644]
libpam/pam_static_modules.h
modules/Makefile.am
modules/pam_pwhistory/.cvsignore [new file with mode: 0644]
modules/pam_pwhistory/Makefile.am [new file with mode: 0644]
modules/pam_pwhistory/README.xml [new file with mode: 0644]
modules/pam_pwhistory/opasswd.c [new file with mode: 0644]
modules/pam_pwhistory/opasswd.h [new file with mode: 0644]
modules/pam_pwhistory/pam_pwhistory.8.xml [new file with mode: 0644]
modules/pam_pwhistory/pam_pwhistory.c [new file with mode: 0644]
modules/pam_pwhistory/tst-pam_pwhistory [new file with mode: 0755]
po/Linux-PAM.pot
po/POTFILES.in
po/ar.po
po/as.po
po/bn_IN.po
po/ca.po
po/cs.po
po/da.po
po/de.po
po/es.po
po/fi.po
po/fr.po
po/gu.po
po/hi.po
po/hu.po
po/it.po
po/ja.po
po/km.po
po/kn.po
po/ko.po
po/ml.po
po/nb.po
po/nl.po
po/or.po
po/pa.po
po/pl.po
po/pt.po
po/pt_BR.po
po/ru.po
po/si.po
po/sr.po
po/sr@latin.po
po/sv.po
po/ta.po
po/tr.po
po/uk.po
po/zh_CN.po
po/zh_TW.po
po/zu.po
xtests/.cvsignore
xtests/Makefile.am
xtests/run-xtests.sh
xtests/tst-pam_pwhistory1.c [new file with mode: 0644]
xtests/tst-pam_pwhistory1.pamd [new file with mode: 0644]
xtests/tst-pam_pwhistory1.sh [new file with mode: 0644]

index 4fafb565ce7af5d8df971de9e9c529aa3e60c6d2..383a2cf17d71e1a09f690612b939436b384f03df 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,25 @@
+2008-10-10  Thorsten Kukuk  <kukuk@thkukuk.de>
+
+       * configure.in: add modules/pam_pwhistory/Makefile.
+       * doc/sag/Linux-PAM_SAG.xml: Include pam_pwhistory.xml.
+       * doc/sag/pam_pwhistory.xml: New.
+       * libpam/pam_static_modules.h: Add pam_pwhistory data.
+       * modules/Makefile.am: Add pam_pwhistory directory.
+       * modules/pam_pwhistory/Makefile.am: New.
+       * modules/pam_pwhistory/README.xml: New.
+       * modules/pam_pwhistory/opasswd.c: New.
+       * modules/pam_pwhistory/opasswd.h: New.
+       * modules/pam_pwhistory/pam_pwhistory.8.xml: New.
+       * modules/pam_pwhistory/pam_pwhistory.c: New.
+       * modules/pam_pwhistory/tst-pam_pwhistory: New.
+       * xtests/Makefile.am: New.
+       * xtests/run-xtests.sh: New.
+       * xtests/tst-pam_pwhistory1.c: New.
+       * xtests/tst-pam_pwhistory1.pamd: New.
+       * xtests/tst-pam_pwhistory1.sh: New.
+       * po/POTFILES.in: Add modules/pam_pwhistory/.
+       * po/de.po: Update translations.
+
 2008-10-02  Thorsten Kukuk  <kukuk@thkukuk.de>
 
        * po/de.po: Update translations.
diff --git a/NEWS b/NEWS
index d3e18f77838b58ca4516bd5cedb6f8357238658a..144757a0da0079bb46cb9f6b2071d12b126255ae 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -14,6 +14,12 @@ Release 1.0.90
 * New password quality tests in pam_cracklib
 * New options for pam_lastlog to show last failed login attempt and
   to disable lastlog update
+* New pam_pwhistory module to store last used passwords
+
+Release 1.0.2
+
+* Regression fixed in pam_selinux
+* Problem with big UIDs fixed in pam_loginuid
 
 Release 1.0.1
 
index 9461fd7d8d4ffdb8acee07098c1c8bff3a826650..63ba9ddd0331e00a244c42f487a46def19103aeb 100644 (file)
@@ -542,7 +542,7 @@ AC_CONFIG_FILES([Makefile libpam/Makefile libpamc/Makefile libpamc/test/Makefile
        modules/pam_mkhomedir/Makefile modules/pam_motd/Makefile \
        modules/pam_namespace/Makefile \
        modules/pam_nologin/Makefile modules/pam_permit/Makefile \
-       modules/pam_rhosts/Makefile \
+       modules/pam_pwhistory/Makefile modules/pam_rhosts/Makefile \
        modules/pam_rootok/Makefile modules/pam_exec/Makefile \
        modules/pam_securetty/Makefile modules/pam_selinux/Makefile \
        modules/pam_sepermit/Makefile \
index eef2b71f67436713a39c367762fe69dc33394bfd..b5a1781af5c76f1628b000612c4ea5fd9d574255 100644 (file)
@@ -442,6 +442,8 @@ session   required   pam_warn.so
      href="pam_nologin.xml"/>
     <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
      href="pam_permit.xml"/>
+    <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
+     href="pam_pwhistory.xml"/>
     <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
      href="pam_rhosts.xml"/>
     <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
diff --git a/doc/sag/pam_pwhistory.xml b/doc/sag/pam_pwhistory.xml
new file mode 100644 (file)
index 0000000..0677eae
--- /dev/null
@@ -0,0 +1,38 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
+        "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+<section id='sag-pam_pwhistory'>
+  <title>pam_pwhistory - grant access using .pwhistory file</title>
+  <cmdsynopsis>
+    <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
+     href="../../modules/pam_pwhistory/pam_pwhistory.8.xml" xpointer='xpointer(//cmdsynopsis[@id = "pam_pwhistory-cmdsynopsis"]/*)'/>
+  </cmdsynopsis>
+  <section id='sag-pam_pwhistory-description'>
+    <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
+     href="../../modules/pam_pwhistory/pam_pwhistory.8.xml" xpointer='xpointer(//refsect1[@id = "pam_pwhistory-description"]/*)'/>
+  </section>
+  <section id='sag-pam_pwhistory-options'>
+    <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
+     href="../../modules/pam_pwhistory/pam_pwhistory.8.xml" xpointer='xpointer(//refsect1[@id = "pam_pwhistory-options"]/*)'/>
+  </section>
+  <section id='sag-pam_pwhistory-types'>
+    <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
+     href="../../modules/pam_pwhistory/pam_pwhistory.8.xml" xpointer='xpointer(//refsect1[@id = "pam_pwhistory-types"]/*)'/>
+  </section>
+  <section id='sag-pam_pwhistory-return_values'>
+    <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
+     href="../../modules/pam_pwhistory/pam_pwhistory.8.xml" xpointer='xpointer(//refsect1[@id = "pam_pwhistory-return_values"]/*)'/>
+  </section>
+  <section id='sag-pam_pwhistory-files'>
+    <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
+     href="../../modules/pam_pwhistory/pam_pwhistory.8.xml" xpointer='xpointer(//refsect1[@id = "pam_pwhistory-files"]/*)'/>
+  </section>
+  <section id='sag-pam_pwhistory-examples'>
+    <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
+     href="../../modules/pam_pwhistory/pam_pwhistory.8.xml" xpointer='xpointer(//refsect1[@id = "pam_pwhistory-examples"]/*)'/>
+  </section>
+  <section id='sag-pam_pwhistory-author'>
+    <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
+     href="../../modules/pam_pwhistory/pam_pwhistory.8.xml" xpointer='xpointer(//refsect1[@id = "pam_pwhistory-author"]/*)'/>
+  </section>
+</section>
index a66b486dd243a1c4a2e361d90919c512f10eb493..d45f297772a8515d82048b797b64d7504c9f41d9 100644 (file)
@@ -61,6 +61,7 @@ extern struct pam_module _pam_namespace_modstruct;
 #endif
 extern struct pam_module _pam_nologin_modstruct;
 extern struct pam_module _pam_permit_modstruct;
+extern struct pam_module _pam_pwhistory_modstruct;
 extern struct pam_module _pam_rhosts_modstruct;
 extern struct pam_module _pam_rhosts_auth_modstruct;
 extern struct pam_module _pam_rootok_modstruct;
@@ -119,6 +120,7 @@ static struct pam_module *static_modules[] = {
 #endif
   &_pam_nologin_modstruct,
   &_pam_permit_modstruct,
+  &_pam_pwhistory_modstruct,
   &_pam_rhosts_modstruct,
   &_pam_rhosts_auth_modstruct,
   &_pam_rootok_modstruct,
index c79f59576e9a38bffd992b7d1f5fbe27003fb632..f21d52e86616586ad51bc9a177c29b53c3dfaab5 100644 (file)
@@ -1,15 +1,16 @@
 #
-# Copyright (c) 2005, 2006 Thorsten Kukuk <kukuk@thkukuk.de>
+# Copyright (c) 2005, 2006, 2008 Thorsten Kukuk <kukuk@thkukuk.de>
 #
 
 SUBDIRS = pam_access pam_cracklib pam_debug pam_deny pam_echo \
-       pam_env pam_filter pam_ftp pam_group pam_issue pam_keyinit \
-       pam_lastlog pam_limits pam_listfile pam_localuser pam_mail \
-       pam_mkhomedir pam_motd pam_nologin pam_permit pam_rhosts pam_rootok \
-       pam_securetty pam_selinux pam_sepermit pam_shells pam_stress \
+       pam_env pam_exec pam_faildelay pam_filter pam_ftp \
+       pam_group pam_issue pam_keyinit pam_lastlog pam_limits \
+       pam_listfile pam_localuser pam_loginuid pam_mail \
+       pam_mkhomedir pam_motd pam_namespace pam_nologin \
+       pam_permit pam_pwhistory pam_rhosts pam_rootok pam_securetty \
+       pam_selinux pam_sepermit pam_shells pam_stress \
        pam_succeed_if pam_tally pam_time pam_tty_audit pam_umask \
-       pam_unix pam_userdb pam_warn pam_wheel pam_xauth pam_exec \
-       pam_namespace pam_loginuid pam_faildelay
+       pam_unix pam_userdb pam_warn pam_wheel pam_xauth
 
 CLEANFILES = *~
 
diff --git a/modules/pam_pwhistory/.cvsignore b/modules/pam_pwhistory/.cvsignore
new file mode 100644 (file)
index 0000000..c0d3c72
--- /dev/null
@@ -0,0 +1,8 @@
+*.la
+*.lo
+.deps
+.libs
+Makefile
+Makefile.in
+README
+pam_pwhistory.8
diff --git a/modules/pam_pwhistory/Makefile.am b/modules/pam_pwhistory/Makefile.am
new file mode 100644 (file)
index 0000000..018d0b5
--- /dev/null
@@ -0,0 +1,35 @@
+#
+# Copyright (c) 2008 Thorsten Kukuk <kukuk@suse.de>
+#
+
+CLEANFILES = *~
+
+EXTRA_DIST = README $(MANS) $(XMLS) tst-pam_pwhistory
+
+TESTS = tst-pam_pwhistory
+
+man_MANS = pam_pwhistory.8
+
+XMLS = README.xml pam_pwhistory.8.xml
+
+securelibdir = $(SECUREDIR)
+secureconfdir = $(SCONFIGDIR)
+
+AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include
+AM_LDFLAGS = -no-undefined -avoid-version -module
+if HAVE_VERSIONING
+  AM_LDFLAGS += -Wl,--version-script=$(srcdir)/../modules.map
+endif
+
+noinst_HEADERS = opasswd.h
+
+securelib_LTLIBRARIES = pam_pwhistory.la
+pam_pwhistory_la_LIBADD = -L$(top_builddir)/libpam -lpam @LIBCRYPT@
+pam_pwhistory_la_SOURCES = pam_pwhistory.c opasswd.c
+
+if ENABLE_REGENERATE_MAN
+noinst_DATA = README
+README: pam_pwhistory.8.xml
+-include $(top_srcdir)/Make.xml.rules
+endif
+
diff --git a/modules/pam_pwhistory/README.xml b/modules/pam_pwhistory/README.xml
new file mode 100644 (file)
index 0000000..f048e32
--- /dev/null
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding='UTF-8'?>
+<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
+"http://www.docbook.org/xml/4.3/docbookx.dtd"
+[
+<!--
+<!ENTITY pamaccess SYSTEM "pam_pwhistory.8.xml">
+-->
+]>
+
+<article>
+
+  <articleinfo>
+
+    <title>
+      <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
+      href="pam_pwhistory.8.xml" xpointer='xpointer(//refnamediv[@id = "pam_pwhistory-name"]/*)'/>
+    </title>
+
+  </articleinfo>
+
+  <section>
+    <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
+      href="pam_pwhistory.8.xml" xpointer='xpointer(//refsect1[@id = "pam_pwhistory-description"]/*)'/>
+  </section>
+
+  <section>
+    <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
+      href="pam_pwhistory.8.xml" xpointer='xpointer(//refsect1[@id = "pam_pwhistory-options"]/*)'/>
+  </section>
+
+  <section>
+    <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
+      href="pam_pwhistory.8.xml" xpointer='xpointer(//refsect1[@id = "pam_pwhistory-examples"]/*)'/>
+  </section>
+
+  <section>
+    <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
+      href="pam_pwhistory.8.xml" xpointer='xpointer(//refsect1[@id = "pam_pwhistory-author"]/*)'/>
+  </section>
+
+</article>
diff --git a/modules/pam_pwhistory/opasswd.c b/modules/pam_pwhistory/opasswd.c
new file mode 100644 (file)
index 0000000..89452d3
--- /dev/null
@@ -0,0 +1,473 @@
+/*
+ * Copyright (c) 2008 Thorsten Kukuk <kukuk@suse.de>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, and the entire permission notice in its entirety,
+ *    including the disclaimer of warranties.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote
+ *    products derived from this software without specific prior
+ *    written permission.
+ *
+ * ALTERNATIVELY, this product may be distributed under the terms of
+ * the GNU Public License, in which case the provisions of the GPL are
+ * required INSTEAD OF the above restrictions.  (This clause is
+ * necessary due to a potential bad interaction between the GPL and
+ * the restrictions contained in a BSD-style copyright.)
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#if defined(HAVE_CONFIG_H)
+#include <config.h>
+#endif
+
+#include <pwd.h>
+#include <time.h>
+#include <ctype.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <string.h>
+#include <stdlib.h>
+#include <syslog.h>
+#include <sys/stat.h>
+
+#if defined (HAVE_XCRYPT_H)
+#include <xcrypt.h>
+#elif defined (HAVE_CRYPT_H)
+#include <crypt.h>
+#endif
+
+#include <security/pam_ext.h>
+#include <security/pam_modules.h>
+
+#include "opasswd.h"
+
+#ifndef RANDOM_DEVICE
+#define RANDOM_DEVICE "/dev/urandom"
+#endif
+
+#define OLD_PASSWORDS_FILE "/etc/security/opasswd"
+#define TMP_PASSWORDS_FILE OLD_PASSWORDS_FILE".tmpXXXXXX"
+
+#define DEFAULT_BUFLEN 4096
+
+typedef struct {
+  char *user;
+  char *uid;
+  int count;
+  char *old_passwords;
+} opwd;
+
+
+static int
+parse_entry (char *line, opwd *data)
+{
+  const char delimiters[] = ":";
+  char *endptr;
+
+  data->user = strsep (&line, delimiters);
+  data->uid = strsep (&line, delimiters);
+  data->count = strtol (strsep (&line, delimiters), &endptr, 10);
+  if (endptr != NULL && *endptr != '\0')
+      return 1;
+
+  data->old_passwords = strsep (&line, delimiters);
+
+  return 0;
+}
+
+/* Check, if the new password is already in the opasswd file.  */
+int
+check_old_password (pam_handle_t *pamh, const char *user,
+                   const char *newpass, int debug)
+{
+  int retval = PAM_SUCCESS;
+  FILE *oldpf;
+  char *buf = NULL;
+  size_t buflen = 0;
+  opwd entry;
+  int found = 0;
+
+  if ((oldpf = fopen (OLD_PASSWORDS_FILE, "r")) == NULL)
+    {
+      if (errno != ENOENT)
+       pam_syslog (pamh, LOG_ERR, "Cannot open %s: %m", OLD_PASSWORDS_FILE);
+      return PAM_SUCCESS;
+    }
+
+  while (!feof (oldpf))
+    {
+      char *cp, *tmp;
+#if defined(HAVE_GETLINE)
+      ssize_t n = getline (&buf, &buflen, oldpf);
+#elif defined (HAVE_GETDELIM)
+      ssize_t n = getdelim (&buf, &buflen, '\n', oldpf);
+#else
+      ssize_t n;
+
+      if (buf == NULL)
+        {
+          buflen = DEFAULT_BUFLEN;
+          buf = malloc (buflen);
+         if (buf == NULL)
+           return PAM_BUF_ERR;
+        }
+      buf[0] = '\0';
+      fgets (buf, buflen - 1, oldpf);
+      n = strlen (buf);
+#endif /* HAVE_GETLINE / HAVE_GETDELIM */
+      cp = buf;
+
+      if (n < 1)
+        break;
+
+      tmp = strchr (cp, '#');  /* remove comments */
+      if (tmp)
+        *tmp = '\0';
+      while (isspace ((int)*cp))    /* remove spaces and tabs */
+        ++cp;
+      if (*cp == '\0')        /* ignore empty lines */
+        continue;
+
+      if (cp[strlen (cp) - 1] == '\n')
+        cp[strlen (cp) - 1] = '\0';
+
+      if (strncmp (cp, user, strlen (user)) == 0 &&
+          cp[strlen (user)] == ':')
+        {
+          /* We found the line we needed */
+         if (parse_entry (cp, &entry) == 0)
+           {
+             found = 1;
+             break;
+           }
+       }
+    }
+
+  fclose (oldpf);
+
+  if (found)
+    {
+      const char delimiters[] = ",";
+      struct crypt_data output;
+      char *running;
+      char *oldpass;
+
+      memset (&output, 0, sizeof (output));
+
+      running = strdupa (entry.old_passwords);
+      if (running == NULL)
+       return PAM_BUF_ERR;
+
+      do {
+       oldpass = strsep (&running, delimiters);
+       if (oldpass && strlen (oldpass) > 0 &&
+           strcmp (crypt_r (newpass, oldpass, &output), oldpass) == 0)
+         {
+           if (debug)
+             pam_syslog (pamh, LOG_DEBUG, "New password already used");
+           retval = PAM_AUTHTOK_ERR;
+           break;
+         }
+      } while (oldpass != NULL);
+    }
+
+  if (buf)
+    free (buf);
+
+  return retval;
+}
+
+int
+save_old_password (pam_handle_t *pamh, const char *user, uid_t uid,
+                  const char *oldpass, int howmany, int debug UNUSED)
+{
+  char opasswd_tmp[] = TMP_PASSWORDS_FILE;
+  struct stat opasswd_stat;
+  FILE *oldpf, *newpf;
+  int newpf_fd;
+  int do_create = 0;
+  int retval = PAM_SUCCESS;
+  char *buf = NULL;
+  size_t buflen = 0;
+  int found = 0;
+
+  if (howmany <= 0)
+    return PAM_SUCCESS;
+
+  if (oldpass == NULL || *oldpass == '\0')
+    return PAM_SUCCESS;
+
+  if ((oldpf = fopen (OLD_PASSWORDS_FILE, "r")) == NULL)
+    {
+      if (errno == ENOENT)
+       {
+         pam_syslog (pamh, LOG_NOTICE, "Creating %s",
+                     OLD_PASSWORDS_FILE);
+         do_create = 1;
+       }
+      else
+       {
+         pam_syslog (pamh, LOG_ERR, "Cannot open %s: %m",
+                     OLD_PASSWORDS_FILE);
+         return PAM_AUTHTOK_ERR;
+       }
+    }
+  else if (fstat (fileno (oldpf), &opasswd_stat) < 0)
+    {
+      pam_syslog (pamh, LOG_ERR, "Cannot stat %s: %m", OLD_PASSWORDS_FILE);
+      fclose (oldpf);
+      return PAM_AUTHTOK_ERR;
+    }
+
+  /* Open a temp passwd file */
+  newpf_fd = mkstemp (opasswd_tmp);
+  if (newpf_fd == -1)
+    {
+      pam_syslog (pamh, LOG_ERR, "Cannot create %s temp file: %m",
+                 OLD_PASSWORDS_FILE);
+      fclose (oldpf);
+      return PAM_AUTHTOK_ERR;
+    }
+  if (do_create)
+    {
+      if (fchmod (newpf_fd, S_IRUSR|S_IWUSR) != 0)
+       pam_syslog (pamh, LOG_ERR,
+                   "Cannot set permissions of %s temp file: %m",
+                   OLD_PASSWORDS_FILE);
+      if (fchown (newpf_fd, 0, 0) != 0)
+       pam_syslog (pamh, LOG_ERR,
+                   "Cannot set owner/group of %s temp file: %m",
+                   OLD_PASSWORDS_FILE);
+    }
+  else
+    {
+      if (fchmod (newpf_fd, opasswd_stat.st_mode) != 0)
+       pam_syslog (pamh, LOG_ERR,
+                   "Cannot set permissions of %s temp file: %m",
+                   OLD_PASSWORDS_FILE);
+      if (fchown (newpf_fd, opasswd_stat.st_uid, opasswd_stat.st_gid) != 0)
+       pam_syslog (pamh, LOG_ERR,
+                   "Cannot set owner/group of %s temp file: %m",
+                   OLD_PASSWORDS_FILE);
+    }
+  newpf = fdopen (newpf_fd, "w+");
+  if (newpf == NULL)
+    {
+      pam_syslog (pamh, LOG_ERR, "Cannot fdopen %s: %m", opasswd_tmp);
+      fclose (oldpf);
+      close (newpf_fd);
+      retval = PAM_AUTHTOK_ERR;
+      goto error_opasswd;
+    }
+
+  if (!do_create)
+    while (!feof (oldpf))
+      {
+       char *cp, *tmp, *save;
+#if defined(HAVE_GETLINE)
+       ssize_t n = getline (&buf, &buflen, oldpf);
+#elif defined (HAVE_GETDELIM)
+       ssize_t n = getdelim (&buf, &buflen, '\n', oldpf);
+#else
+       ssize_t n;
+
+       if (buf == NULL)
+         {
+           buflen = DEFAULT_BUFLEN;
+           buf = malloc (buflen);
+           if (buf == NULL)
+             return PAM_BUF_ERR;
+
+         }
+       buf[0] = '\0';
+       fgets (buf, buflen - 1, oldpf);
+       n = strlen (buf);
+#endif /* HAVE_GETLINE / HAVE_GETDELIM */
+
+       cp = buf;
+       save = strdup (buf); /* Copy to write the original data back.  */
+       if (save == NULL)
+         return PAM_BUF_ERR;
+
+       if (n < 1)
+         break;
+
+       tmp = strchr (cp, '#');  /* remove comments */
+       if (tmp)
+         *tmp = '\0';
+       while (isspace ((int)*cp))    /* remove spaces and tabs */
+         ++cp;
+       if (*cp == '\0')        /* ignore empty lines */
+         goto write_old_data;
+
+       if (cp[strlen (cp) - 1] == '\n')
+         cp[strlen (cp) - 1] = '\0';
+
+       if (strncmp (cp, user, strlen (user)) == 0 &&
+           cp[strlen (user)] == ':')
+         {
+           /* We found the line we needed */
+           opwd entry;
+
+           if (parse_entry (cp, &entry) == 0)
+             {
+               char *out = NULL;
+
+               found = 1;
+
+               /* Don't save the current password twice */
+               if (entry.old_passwords)
+                 {
+                   /* there is only one password */
+                   if (strcmp (entry.old_passwords, oldpass) == 0)
+                     goto write_old_data;
+                   else
+                     {
+                       /* check last entry */
+                       cp = strstr (entry.old_passwords, oldpass);
+
+                       if (cp && strcmp (cp, oldpass) == 0)
+                         {  /* the end is the same, check that there
+                               is a "," before. */
+                           --cp;
+                           if (*cp == ',')
+                             goto write_old_data;
+                         }
+                     }
+                 }
+
+               /* increase count.  */
+               entry.count++;
+
+               /* check that we don't remember to many passwords.  */
+               while (entry.count > howmany)
+                 {
+                   char *p = strpbrk (entry.old_passwords, ",");
+                   if (p != NULL)
+                     entry.old_passwords = ++p;
+                   entry.count--;
+                 }
+
+               if (entry.old_passwords == NULL)
+                 {
+                   if (asprintf (&out, "%s:%s:%d:%s\n",
+                                 entry.user, entry.uid, entry.count,
+                                 oldpass) < 0)
+                     {
+                       retval = PAM_AUTHTOK_ERR;
+                       fclose (oldpf);
+                       fclose (newpf);
+                       goto error_opasswd;
+                     }
+                 }
+               else
+                 {
+                   if (asprintf (&out, "%s:%si%d:%s,%s\n",
+                                 entry.user, entry.uid, entry.count,
+                                 entry.old_passwords, oldpass) < 0)
+                     {
+                       retval = PAM_AUTHTOK_ERR;
+                       fclose (oldpf);
+                       fclose (newpf);
+                       goto error_opasswd;
+                     }
+                 }
+
+               if (fputs (out, newpf) < 0)
+                 {
+                   free (out);
+                   free (save);
+                   retval = PAM_AUTHTOK_ERR;
+                   fclose (oldpf);
+                   fclose (newpf);
+                   goto error_opasswd;
+                 }
+               free (out);
+             }
+         }
+       else
+         {
+         write_old_data:
+           if (fputs (save, newpf) < 0)
+             {
+               free (save);
+               retval = PAM_AUTHTOK_ERR;
+               fclose (oldpf);
+               fclose (newpf);
+               goto error_opasswd;
+             }
+         }
+       free (save);
+      }
+
+  if (!found)
+    {
+      char *out;
+
+      if (asprintf (&out, "%s:%d:1:%s\n", user, uid, oldpass) < 0)
+       {
+         retval = PAM_AUTHTOK_ERR;
+         if (oldpf)
+           fclose (oldpf);
+         fclose (newpf);
+         goto error_opasswd;
+       }
+      if (fputs (out, newpf) < 0)
+       {
+         free (out);
+         retval = PAM_AUTHTOK_ERR;
+         if (oldpf)
+           fclose (oldpf);
+         fclose (newpf);
+         goto error_opasswd;
+       }
+      free (out);
+    }
+
+  if (oldpf)
+    if (fclose (oldpf) != 0)
+      {
+       pam_syslog (pamh, LOG_ERR, "Error while closing old opasswd file: %m");
+       retval = PAM_AUTHTOK_ERR;
+       fclose (newpf);
+       goto error_opasswd;
+      }
+
+  if (fclose (newpf) != 0)
+    {
+      pam_syslog (pamh, LOG_ERR,
+                 "Error while closing temporary opasswd file: %m");
+      retval = PAM_AUTHTOK_ERR;
+      goto error_opasswd;
+    }
+
+  unlink (OLD_PASSWORDS_FILE".old");
+  if (link (OLD_PASSWORDS_FILE, OLD_PASSWORDS_FILE".old") != 0 &&
+      errno != ENOENT)
+    pam_syslog (pamh, LOG_ERR, "Cannot create backup file of %s: %m",
+               OLD_PASSWORDS_FILE);
+  rename (opasswd_tmp, OLD_PASSWORDS_FILE);
+ error_opasswd:
+  unlink (opasswd_tmp);
+
+  return retval;
+}
diff --git a/modules/pam_pwhistory/opasswd.h b/modules/pam_pwhistory/opasswd.h
new file mode 100644 (file)
index 0000000..e8a2013
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2008 Thorsten Kukuk <kukuk@suse.de>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, and the entire permission notice in its entirety,
+ *    including the disclaimer of warranties.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote
+ *    products derived from this software without specific prior
+ *    written permission.
+ *
+ * ALTERNATIVELY, this product may be distributed under the terms of
+ * the GNU Public License, in which case the provisions of the GPL are
+ * required INSTEAD OF the above restrictions.  (This clause is
+ * necessary due to a potential bad interaction between the GPL and
+ * the restrictions contained in a BSD-style copyright.)
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef __OPASSWD_H__
+#define __OPASSWD_H__
+
+extern int check_old_password (pam_handle_t *pamh, const char *user,
+                              const char *newpass, int debug);
+extern int save_old_password (pam_handle_t *pamh, const char *user,
+                             uid_t uid, const char *oldpass,
+                             int howmany, int debug);
+
+#endif /* __OPASSWD_H__ */
diff --git a/modules/pam_pwhistory/pam_pwhistory.8.xml b/modules/pam_pwhistory/pam_pwhistory.8.xml
new file mode 100644 (file)
index 0000000..26d6bd1
--- /dev/null
@@ -0,0 +1,226 @@
+<?xml version="1.0" encoding='UTF-8'?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
+       "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
+
+<refentry id="pam_pwhistory">
+
+  <refmeta>
+    <refentrytitle>pam_pwhistory</refentrytitle>
+    <manvolnum>8</manvolnum>
+    <refmiscinfo class="sectdesc">Linux-PAM Manual</refmiscinfo>
+  </refmeta>
+
+  <refnamediv id="pam_pwhistory-name">
+    <refname>pam_pwhistory</refname>
+    <refpurpose>PAM module to remember last passwords</refpurpose>
+  </refnamediv>
+
+  <refsynopsisdiv>
+    <cmdsynopsis id="pam_pwhistory-cmdsynopsis">
+      <command>pam_pwhistory.so</command>
+      <arg choice="opt">
+        debug
+      </arg>
+      <arg choice="opt">
+        use_authtok
+      </arg>
+      <arg choice="opt">
+        enforce_for_root
+      </arg>
+      <arg choice="opt">
+        remember=<replaceable>N</replaceable>
+      </arg>
+      <arg choice="opt">
+        retry=<replaceable>N</replaceable>
+      </arg>
+
+    </cmdsynopsis>
+  </refsynopsisdiv>
+
+  <refsect1 id="pam_pwhistory-description">
+
+    <title>DESCRIPTION</title>
+
+    <para>
+      This module saves the last passwords for each user in order
+      to force password change history and keep the user from
+      alternating between the same password too frequently.
+    </para>
+    <para>
+      This module does not work togehter with kerberos. In general,
+      it does not make much sense to use this module in conjuction
+      with NIS or LDAP, since the old passwords are stored on the
+      local machine and are not available on another machine for
+      password history checking.
+    </para>
+  </refsect1>
+
+  <refsect1 id="pam_pwhistory-options">
+    <title>OPTIONS</title>
+    <variablelist>
+      <varlistentry>
+        <term>
+          <option>debug</option>
+        </term>
+        <listitem>
+          <para>
+            Turns on debugging via
+            <citerefentry>
+              <refentrytitle>syslog</refentrytitle><manvolnum>3</manvolnum>
+            </citerefentry>.
+          </para>
+        </listitem>
+      </varlistentry>
+      <varlistentry>
+        <term>
+          <option>use_authtok</option>
+        </term>
+        <listitem>
+          <para>
+           When password changing enforce the module to use the new password
+           provided by a previously stacked <option>password</option>
+           module (this is used in the example of the stacking of the
+           <command>pam_cracklib</command> module documented below).
+          </para>
+        </listitem>
+      </varlistentry>
+      <varlistentry>
+        <term>
+          <option>enforce_for_root</option>
+        </term>
+        <listitem>
+          <para>
+            If this option is set, the check is enforced for root, too.
+          </para>
+        </listitem>
+      </varlistentry>
+      <varlistentry>
+        <term>
+          <option>remember=<replaceable>N</replaceable></option>
+        </term>
+        <listitem>
+          <para>
+            The last <replaceable>N</replaceable> passwords for each
+            user are saved in <filename>/etc/security/opasswd</filename>.
+            The default is <emphasis>10</emphasis>.
+          </para>
+        </listitem>
+      </varlistentry>
+      <varlistentry>
+          <term>
+            <option>retry=<replaceable>N</replaceable></option>
+          </term>
+          <listitem>
+            <para>
+              Prompt user at most <replaceable>N</replaceable> times
+              before returning with error. The default is
+              <emphasis>1</emphasis>.
+            </para>
+          </listitem>
+        </varlistentry>
+
+    </variablelist>
+  </refsect1>
+
+  <refsect1 id="pam_pwhistory-types">
+    <title>MODULE TYPES PROVIDED</title>
+    <para>
+      Only the <option>password</option> module type is provided.
+    </para>
+  </refsect1>
+
+  <refsect1 id='pam_pwhistory-return_values'>
+    <title>RETURN VALUES</title>
+    <variablelist>
+      <varlistentry>
+      <term>PAM_AUTHTOK_ERR</term>
+        <listitem>
+          <para>
+            No new password was entered, the user aborted password
+            change or new password couldn't be set.
+          </para>
+        </listitem>
+      </varlistentry>
+      <varlistentry>
+        <term>PAM_IGNORE</term>
+        <listitem>
+          <para>
+            Password history was disabled.
+          </para>
+        </listitem>
+      </varlistentry>
+      <varlistentry>
+        <term>PAM_MAXTRIES</term>
+        <listitem>
+          <para>
+            Password was rejected too often.
+          </para>
+        </listitem>
+      </varlistentry>
+      <varlistentry>
+        <term>PAM_USER_UNKNOWN</term>
+        <listitem>
+          <para>
+            User is not known to system.
+          </para>
+        </listitem>
+      </varlistentry>
+    </variablelist>
+  </refsect1>
+
+  <refsect1 id='pam_pwhistory-examples'>
+    <title>EXAMPLES</title>
+    <para>
+      An example password section would be:
+      <programlisting>
+#%PAM-1.0
+password     required       pam_pwhistory.so
+password     required       pam_unix.so        use_authtok
+      </programlisting>
+    </para>
+    <para>
+     In combination with <command>pam_cracklib</command>:
+      <programlisting>
+#%PAM-1.0
+password     required       pam_cracklib.so    retry=3
+password     required       pam_pwhistory.so   use_authtok
+password     required       pam_unix.so        use_authtok
+      </programlisting>
+    </para>
+  </refsect1>
+
+  <refsect1 id="pam_pwhistory-files">
+    <title>FILES</title>
+    <variablelist>
+      <varlistentry>
+        <term><filename>/etc/security/opasswd</filename></term>
+        <listitem>
+          <para>File with password history</para>
+        </listitem>
+      </varlistentry>
+    </variablelist>
+  </refsect1>
+
+  <refsect1 id='pam_pwhistory-see_also'>
+    <title>SEE ALSO</title>
+    <para>
+      <citerefentry>
+       <refentrytitle>pam.conf</refentrytitle><manvolnum>5</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
+      </citerefentry>
+    </para>
+  </refsect1>
+
+  <refsect1 id='pam_pwhistory-author'>
+    <title>AUTHOR</title>
+      <para>
+        pam_pwhistory was written by Thorsten Kukuk &lt;kukuk@thkukuk.de&gt;
+      </para>
+  </refsect1>
+
+</refentry>
diff --git a/modules/pam_pwhistory/pam_pwhistory.c b/modules/pam_pwhistory/pam_pwhistory.c
new file mode 100644 (file)
index 0000000..d3cce72
--- /dev/null
@@ -0,0 +1,319 @@
+/*
+ * Copyright (c) 2008 Thorsten Kukuk
+ * Author: Thorsten Kukuk <kukuk@suse.de>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, and the entire permission notice in its entirety,
+ *    including the disclaimer of warranties.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote
+ *    products derived from this software without specific prior
+ *    written permission.
+ *
+ * ALTERNATIVELY, this product may be distributed under the terms of
+ * the GNU Public License, in which case the provisions of the GPL are
+ * required INSTEAD OF the above restrictions.  (This clause is
+ * necessary due to a potential bad interaction between the GPL and
+ * the restrictions contained in a BSD-style copyright.)
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#if defined(HAVE_CONFIG_H)
+#include <config.h>
+#endif
+
+#define PAM_SM_PASSWORD
+
+#include <pwd.h>
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <shadow.h>
+#include <syslog.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#include <security/pam_modules.h>
+#include <security/pam_modutil.h>
+#include <security/pam_ext.h>
+#include <security/_pam_macros.h>
+
+#include "opasswd.h"
+
+#define NEW_PASSWORD_PROMPT _("New %s%spassword: ")
+#define AGAIN_PASSWORD_PROMPT _("Retype new %s%spassword: ")
+#define MISTYPED_PASSWORD _("Sorry, passwords do not match.")
+
+#define DEFAULT_BUFLEN 2048
+
+struct options_t {
+  int debug;
+  int use_authtok;
+  int enforce_for_root;
+  int remember;
+  int tries;
+};
+typedef struct options_t options_t;
+
+
+static void
+parse_option (pam_handle_t *pamh, const char *argv, options_t *options)
+{
+  if (strcasecmp (argv, "use_first_pass") == 0)
+    /* ignore */;
+  else if (strcasecmp (argv, "use_first_pass") == 0)
+    /* ignore */;
+  else if (strcasecmp (argv, "use_authtok") == 0)
+    options->use_authtok = 1;
+  else if (strcasecmp (argv, "debug") == 0)
+    options->debug = 1;
+  else if (strncasecmp (argv, "remember=", 9) == 0)
+    {
+      options->remember = strtol(&argv[9], NULL, 10);
+      if (options->remember < 0)
+        options->remember = 0;
+      if (options->remember > 400)
+        options->remember = 400;
+    }
+  else if (strncasecmp (argv, "retry=", 6) == 0)
+    {
+      options->tries = strtol(&argv[6], NULL, 10);
+      if (options->tries < 0)
+        options->tries = 1;
+    }
+  else if (strcasecmp (argv, "enforce_for_root") == 0)
+    options->enforce_for_root = 1;
+  else
+    pam_syslog (pamh, LOG_ERR, "pam_pwhistory: unknown option: %s", argv);
+}
+
+
+PAM_EXTERN int
+pam_sm_chauthtok (pam_handle_t *pamh, int flags, int argc, const char **argv)
+{
+  struct passwd *pwd;
+  char *newpass;
+  const char *user;
+  void *newpass_void;
+  int retval, tries;
+  options_t options;
+
+  memset (&options, 0, sizeof (options));
+
+  /* Set some default values, which could be overwritten later.  */
+  options.remember = 10;
+  options.tries = 1;
+
+  /* Parse parameters for module */
+  for ( ; argc-- > 0; argv++)
+    parse_option (pamh, *argv, &options);
+
+  if (options.debug)
+    pam_syslog (pamh, LOG_DEBUG, "pam_sm_chauthtok entered");
+
+
+  if (options.remember == 0)
+    return PAM_IGNORE;
+
+  retval = pam_get_user (pamh, &user, NULL);
+  if (retval != PAM_SUCCESS)
+    return retval;
+
+  if (user == NULL || strlen (user) == 0)
+    {
+      if (options.debug)
+       pam_syslog (pamh, LOG_DEBUG,
+                   "User is not known to system");
+
+      return PAM_USER_UNKNOWN;
+    }
+
+  if (flags & PAM_PRELIM_CHECK)
+    {
+      if (options.debug)
+       pam_syslog (pamh, LOG_DEBUG,
+                   "pam_sm_chauthtok(PAM_PRELIM_CHECK)");
+
+      return PAM_SUCCESS;
+    }
+
+  pwd = pam_modutil_getpwnam (pamh, user);
+  if (pwd == NULL)
+    return PAM_USER_UNKNOWN;
+
+  /* Ignore root if not enforced */
+  if (pwd->pw_uid == 0 && !options.enforce_for_root)
+    return PAM_SUCCESS;
+
+  if ((strcmp(pwd->pw_passwd, "x") == 0)  ||
+      ((pwd->pw_passwd[0] == '#') &&
+       (pwd->pw_passwd[1] == '#') &&
+       (strcmp(pwd->pw_name, pwd->pw_passwd + 2) == 0)))
+    {
+      struct spwd *spw = pam_modutil_getspnam (pamh, user);
+      if (spw == NULL)
+       return PAM_USER_UNKNOWN;
+
+      retval = save_old_password (pamh, user, pwd->pw_uid, spw->sp_pwdp,
+                                 options.remember, options.debug);
+      if (retval != PAM_SUCCESS)
+       return retval;
+    }
+  else
+    {
+      retval = save_old_password (pamh, user, pwd->pw_uid, pwd->pw_passwd,
+                                 options.remember, options.debug);
+      if (retval != PAM_SUCCESS)
+       return retval;
+    }
+
+  retval = pam_get_item (pamh, PAM_AUTHTOK, (const void **) &newpass_void);
+  newpass = (char *) newpass_void;
+  if (retval != PAM_SUCCESS)
+    return retval;
+  if (options.debug)
+    {
+      if (newpass)
+       pam_syslog (pamh, LOG_DEBUG, "got new auth token");
+      else
+       pam_syslog (pamh, LOG_DEBUG, "new auth token not set");
+    }
+
+  /* If we haven't been given a password yet, prompt for one... */
+  if (newpass == NULL)
+    {
+      if (options.use_authtok)
+       /* We are not allowed to ask for a new password */
+       return PAM_AUTHTOK_ERR;
+
+      tries = 0;
+
+      while ((newpass == NULL) && (tries++ < options.tries))
+       {
+         retval = pam_prompt (pamh, PAM_PROMPT_ECHO_OFF, &newpass,
+                              NEW_PASSWORD_PROMPT, "UNIX", " ");
+         if (retval != PAM_SUCCESS)
+           {
+             _pam_drop (newpass);
+             if (retval == PAM_CONV_AGAIN)
+               retval = PAM_INCOMPLETE;
+             return retval;
+           }
+
+         if (newpass == NULL)
+           {
+             /* We want to abort the password change */
+             pam_error (pamh, _("Password change aborted."));
+             return PAM_AUTHTOK_ERR;
+           }
+
+         if (options.debug)
+           pam_syslog (pamh, LOG_DEBUG, "check against old password file");
+
+         if (check_old_password (pamh, user, newpass,
+                                 options.debug) != PAM_SUCCESS)
+           {
+             pam_error (pamh,
+                        _("Password has been already used. Choose another."));
+             _pam_overwrite (newpass);
+             _pam_drop (newpass);
+             if (tries >= options.tries)
+               {
+                 if (options.debug)
+                   pam_syslog (pamh, LOG_DEBUG,
+                               "Aborted, too many tries");
+                 return PAM_MAXTRIES;
+               }
+           }
+         else
+           {
+             int failed;
+             char *new2;
+
+             retval = pam_prompt (pamh, PAM_PROMPT_ECHO_OFF, &new2,
+                                  AGAIN_PASSWORD_PROMPT, "UNIX", " ");
+              if (retval != PAM_SUCCESS)
+               return retval;
+
+              if (new2 == NULL)
+                {                       /* Aborting password change... */
+                 pam_error (pamh, _("Password change aborted."));
+                  return PAM_AUTHTOK_ERR;
+                }
+
+              failed = (strcmp (newpass, new2) != 0);
+
+              _pam_overwrite (new2);
+              _pam_drop (new2);
+
+             if (failed)
+                {
+                  pam_error (pamh, MISTYPED_PASSWORD);
+                 _pam_overwrite (newpass);
+                  _pam_drop (newpass);
+                 if (tries >= options.tries)
+                   {
+                     if (options.debug)
+                       pam_syslog (pamh, LOG_DEBUG,
+                                   "Aborted, too many tries");
+                     return PAM_MAXTRIES;
+                   }
+                }
+           }
+       }
+
+      /* Remember new password */
+      pam_set_item (pamh, PAM_AUTHTOK, (void *) newpass);
+    }
+  else /* newpass != NULL, we found an old password */
+    {
+      if (options.debug)
+        pam_syslog (pamh, LOG_DEBUG, "look in old password file");
+
+      if (check_old_password (pamh, user, newpass,
+                             options.debug) != PAM_SUCCESS)
+       {
+         pam_error (pamh,
+                    _("Password has been already used. Choose another."));
+         /* We are only here, because old password was set.
+             So overwrite it, else it will be stored! */
+          pam_set_item (pamh, PAM_AUTHTOK, (void *) NULL);
+
+         return PAM_AUTHTOK_ERR;
+       }
+    }
+
+  return PAM_SUCCESS;
+}
+
+
+#ifdef PAM_STATIC
+/* static module data */
+struct pam_module _pam_pwhistory_modstruct = {
+  "pam_pwhistory",
+  NULL,
+  NULL,
+  NULL,
+  NULL,
+  NULL,
+  pam_sm_chauthtok
+};
+#endif
diff --git a/modules/pam_pwhistory/tst-pam_pwhistory b/modules/pam_pwhistory/tst-pam_pwhistory
new file mode 100755 (executable)
index 0000000..3531a88
--- /dev/null
@@ -0,0 +1,2 @@
+#!/bin/sh
+../../tests/tst-dlopen .libs/pam_pwhistory.so
index f9d1eddf4450e6c568032bd70e6e32210b287e65..c7d34cbfa20d103b80b41f6b20a0beab1001f694 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n"
-"POT-Creation-Date: 2008-09-30 16:45+0200\n"
+"POT-Creation-Date: 2008-10-10 08:49+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"
@@ -167,16 +167,19 @@ msgid "Unknown PAM error"
 msgstr ""
 
 #: modules/pam_cracklib/pam_cracklib.c:64
+#: modules/pam_pwhistory/pam_pwhistory.c:61
 #, c-format
 msgid "New %s%spassword: "
 msgstr ""
 
 #: modules/pam_cracklib/pam_cracklib.c:66
+#: modules/pam_pwhistory/pam_pwhistory.c:62
 #, c-format
 msgid "Retype new %s%spassword: "
 msgstr ""
 
 #: modules/pam_cracklib/pam_cracklib.c:67
+#: modules/pam_pwhistory/pam_pwhistory.c:63
 msgid "Sorry, passwords do not match."
 msgstr ""
 
@@ -354,6 +357,17 @@ msgstr ""
 msgid "Unable to create directory %s: %m"
 msgstr ""
 
+#: modules/pam_pwhistory/pam_pwhistory.c:224
+#: modules/pam_pwhistory/pam_pwhistory.c:258
+msgid "Password change aborted."
+msgstr ""
+
+#: modules/pam_pwhistory/pam_pwhistory.c:235
+#: modules/pam_pwhistory/pam_pwhistory.c:295
+#: modules/pam_unix/pam_unix_passwd.c:470
+msgid "Password has been already used. Choose another."
+msgstr ""
+
 #: modules/pam_selinux/pam_selinux.c:172
 msgid "Would you like to enter a security context? [N] "
 msgstr ""
@@ -511,10 +525,6 @@ msgstr ""
 msgid "You must choose a longer password"
 msgstr ""
 
-#: modules/pam_unix/pam_unix_passwd.c:470
-msgid "Password has been already used. Choose another."
-msgstr ""
-
 #: modules/pam_unix/pam_unix_passwd.c:571
 #, c-format
 msgid "Changing password for %s."
index 7887aad7f943995a28e98e621cbebe28ec239963..39889b0625329b9db4e0a76ff3560d0554db5712 100644 (file)
@@ -58,6 +58,8 @@
 ./modules/pam_namespace/pam_namespace.c
 ./modules/pam_nologin/pam_nologin.c
 ./modules/pam_permit/pam_permit.c
+./modules/pam_pwhistory/opasswd.c
+./modules/pam_pwhistory/pam_pwhistory.c
 ./modules/pam_rhosts/pam_rhosts.c
 ./modules/pam_rootok/pam_rootok.c
 ./modules/pam_securetty/pam_securetty.c
index 6ee867ddf3e92c9a3c12bc3615c27649c66776d7..d5b416a58b4fca9da263691465e374a933392e31 100644 (file)
--- a/po/ar.po
+++ b/po/ar.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: @PACKAGE@\n"
 "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n"
-"POT-Creation-Date: 2008-09-30 16:45+0200\n"
+"POT-Creation-Date: 2008-10-10 08:49+0200\n"
 "PO-Revision-Date: 2001-07-13 15:36+0200\n"
 "Last-Translator: Novell Language <language@novell.com>\n"
 "Language-Team: Novell Language <language@novell.com>\n"
@@ -166,16 +166,19 @@ msgid "Unknown PAM error"
 msgstr "خطأ PAM  غير معروف"
 
 #: modules/pam_cracklib/pam_cracklib.c:64
+#: modules/pam_pwhistory/pam_pwhistory.c:61
 #, c-format
 msgid "New %s%spassword: "
 msgstr "كلمة سر %s%s الجديدة: "
 
 #: modules/pam_cracklib/pam_cracklib.c:66
+#: modules/pam_pwhistory/pam_pwhistory.c:62
 #, c-format
 msgid "Retype new %s%spassword: "
 msgstr "أعد كتابة كلمة سر %s%s الجديدة: "
 
 #: modules/pam_cracklib/pam_cracklib.c:67
+#: modules/pam_pwhistory/pam_pwhistory.c:63
 msgid "Sorry, passwords do not match."
 msgstr "عذرًا، يوجد عدم تطابق بين كلمات السر."
 
@@ -353,6 +356,18 @@ msgstr ""
 msgid "Unable to create directory %s: %m"
 msgstr ""
 
+#: modules/pam_pwhistory/pam_pwhistory.c:224
+#: modules/pam_pwhistory/pam_pwhistory.c:258
+#, fuzzy
+msgid "Password change aborted."
+msgstr "لم يتم تغيير كلمة السر"
+
+#: modules/pam_pwhistory/pam_pwhistory.c:235
+#: modules/pam_pwhistory/pam_pwhistory.c:295
+#: modules/pam_unix/pam_unix_passwd.c:470
+msgid "Password has been already used. Choose another."
+msgstr "كلمة السر التي تم إدخالها مستخدمة بالفعل. اختر كلمة سر أخرى."
+
 #: modules/pam_selinux/pam_selinux.c:172
 #, fuzzy
 msgid "Would you like to enter a security context? [N] "
@@ -515,10 +530,6 @@ msgstr "تعذر تغيير كلمة السر الخاصة بـ NIS."
 msgid "You must choose a longer password"
 msgstr "يجب اختيار كلمة سر أطول"
 
-#: modules/pam_unix/pam_unix_passwd.c:470
-msgid "Password has been already used. Choose another."
-msgstr "كلمة السر التي تم إدخالها مستخدمة بالفعل. اختر كلمة سر أخرى."
-
 #: modules/pam_unix/pam_unix_passwd.c:571
 #, fuzzy, c-format
 msgid "Changing password for %s."
@@ -540,6 +551,10 @@ msgstr "أدخل كلمة سر UNIX الجديدة: "
 msgid "Retype new UNIX password: "
 msgstr "أعد كتابة كلمة سر UNIX  الجديدة: "
 
+#, fuzzy
+#~ msgid "Password has been used already. Choose another."
+#~ msgstr "كلمة السر التي تم إدخالها مستخدمة بالفعل. اختر كلمة سر أخرى."
+
 #, fuzzy
 #~ msgid "Error translating default context."
 #~ msgstr "السياق الافتراضي لك هو %s. \n"
index f79c2e78f00cd20500d52f564cf54b3e2c326aff..3f39c41b38d565c073efa819b91b558d159022cd 100644 (file)
--- a/po/as.po
+++ b/po/as.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: as\n"
 "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n"
-"POT-Creation-Date: 2008-09-30 16:45+0200\n"
+"POT-Creation-Date: 2008-10-10 08:49+0200\n"
 "PO-Revision-Date: 2007-06-22 13:19+0530\n"
 "Last-Translator: Amitakhya Phukan <aphukan@redhat.com>\n"
 "Language-Team: Assamese <fedora-trans-as@redhat.com>\n"
@@ -167,16 +167,19 @@ msgid "Unknown PAM error"
 msgstr "অজ্ঞাত PAM ভুল"
 
 #: modules/pam_cracklib/pam_cracklib.c:64
+#: modules/pam_pwhistory/pam_pwhistory.c:61
 #, c-format
 msgid "New %s%spassword: "
 msgstr "নতুন %s%s গুপ্তশব্দ: "
 
 #: modules/pam_cracklib/pam_cracklib.c:66
+#: modules/pam_pwhistory/pam_pwhistory.c:62
 #, c-format
 msgid "Retype new %s%spassword: "
 msgstr "নতুন %s%s গুপ্তশব্দ পুনঃ লিখক: "
 
 #: modules/pam_cracklib/pam_cracklib.c:67
+#: modules/pam_pwhistory/pam_pwhistory.c:63
 msgid "Sorry, passwords do not match."
 msgstr "ক্ষমা কৰিব, গুপ্তশব্দৰ অমিল "
 
@@ -354,6 +357,18 @@ msgstr ""
 msgid "Unable to create directory %s: %m"
 msgstr ""
 
+#: modules/pam_pwhistory/pam_pwhistory.c:224
+#: modules/pam_pwhistory/pam_pwhistory.c:258
+#, fuzzy
+msgid "Password change aborted."
+msgstr "গুপ্ত শব্দ অপৰিবৰ্ত্তিত"
+
+#: modules/pam_pwhistory/pam_pwhistory.c:235
+#: modules/pam_pwhistory/pam_pwhistory.c:295
+#: modules/pam_unix/pam_unix_passwd.c:470
+msgid "Password has been already used. Choose another."
+msgstr "গুপ্তশব্দ ইতিমধ্যে ব্যৱহৃত । অন্য এটা বাচি লওক ।"
+
 #: modules/pam_selinux/pam_selinux.c:172
 #, fuzzy
 msgid "Would you like to enter a security context? [N] "
@@ -516,10 +531,6 @@ msgstr "NIS গুপ্তশব্দ সলনি কৰিব পৰা ন
 msgid "You must choose a longer password"
 msgstr "আপুনি ইয়াতকৈ এটা দীঘল গুপ্তশব্দ নিৰ্ব্বাচন কৰিব লাগিব"
 
-#: modules/pam_unix/pam_unix_passwd.c:470
-msgid "Password has been already used. Choose another."
-msgstr "গুপ্তশব্দ ইতিমধ্যে ব্যৱহৃত । অন্য এটা বাচি লওক ।"
-
 #: modules/pam_unix/pam_unix_passwd.c:571
 #, fuzzy, c-format
 msgid "Changing password for %s."
@@ -541,6 +552,10 @@ msgstr "নতুন UNIX গুপ্তশব্দ দিয়ক: "
 msgid "Retype new UNIX password: "
 msgstr "নতুন UNIX গুপ্তশব্দ পুনঃ লিখক: "
 
+#, fuzzy
+#~ msgid "Password has been used already. Choose another."
+#~ msgstr "গুপ্তশব্দ ইতিমধ্যে ব্যৱহৃত । অন্য এটা বাচি লওক ।"
+
 #, fuzzy
 #~ msgid "Error translating default context."
 #~ msgstr "আপোনাৰ অবিকল্পিত সন্দৰ্ভ হ'ল %s. \n"
index 650875d7647ec16f95c8549b188be79c826042b7..ff034157764486f568446254b119ce8ecc9f1e25 100644 (file)
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: bn_IN\n"
 "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n"
-"POT-Creation-Date: 2008-09-30 16:45+0200\n"
+"POT-Creation-Date: 2008-10-10 08:49+0200\n"
 "PO-Revision-Date: 2007-06-21 15:05+0530\n"
 "Last-Translator: Runa Bhattacharjee <runab@redhat.com>\n"
 "Language-Team: Bengali (India) <en@li.org>\n"
@@ -167,16 +167,19 @@ msgid "Unknown PAM error"
 msgstr "PAM সংক্রান্ত অজানা ত্রুটি"
 
 #: modules/pam_cracklib/pam_cracklib.c:64
+#: modules/pam_pwhistory/pam_pwhistory.c:61
 #, c-format
 msgid "New %s%spassword: "
 msgstr "নতুন %s%s পাসওয়ার্ড: "
 
 #: modules/pam_cracklib/pam_cracklib.c:66
+#: modules/pam_pwhistory/pam_pwhistory.c:62
 #, c-format
 msgid "Retype new %s%spassword: "
 msgstr "নতুন %s%s পাসওয়ার্ড পুনরায় লিখুন: "
 
 #: modules/pam_cracklib/pam_cracklib.c:67
+#: modules/pam_pwhistory/pam_pwhistory.c:63
 msgid "Sorry, passwords do not match."
 msgstr "দুঃখিত, পাসওয়ার্ড দুটি এক নয়।"
 
@@ -354,6 +357,18 @@ msgstr ""
 msgid "Unable to create directory %s: %m"
 msgstr ""
 
+#: modules/pam_pwhistory/pam_pwhistory.c:224
+#: modules/pam_pwhistory/pam_pwhistory.c:258
+#, fuzzy
+msgid "Password change aborted."
+msgstr "পাসওয়ার্ড পরিবর্তন করা হয়নি"
+
+#: modules/pam_pwhistory/pam_pwhistory.c:235
+#: modules/pam_pwhistory/pam_pwhistory.c:295
+#: modules/pam_unix/pam_unix_passwd.c:470
+msgid "Password has been already used. Choose another."
+msgstr "পাসওয়ার্ড পূর্বে ব্যবহৃত হয়েছে। একটি পৃথক পাসওয়ার্ড নির্বাচন করুন।"
+
 #: modules/pam_selinux/pam_selinux.c:172
 #, fuzzy
 msgid "Would you like to enter a security context? [N] "
@@ -518,10 +533,6 @@ msgstr "NIS পাসওয়ার্ড পরিবর্তন করা স
 msgid "You must choose a longer password"
 msgstr "চিহ্নিত পাসওয়ার্ডের থেকে লম্বা পাসওয়ার্ড উল্লেখ করা আবশ্যক"
 
-#: modules/pam_unix/pam_unix_passwd.c:470
-msgid "Password has been already used. Choose another."
-msgstr "পাসওয়ার্ড পূর্বে ব্যবহৃত হয়েছে। একটি পৃথক পাসওয়ার্ড নির্বাচন করুন।"
-
 #: modules/pam_unix/pam_unix_passwd.c:571
 #, fuzzy, c-format
 msgid "Changing password for %s."
@@ -543,6 +554,10 @@ msgstr "নতুন UNIX পাসওয়ার্ড উল্লেখ কর
 msgid "Retype new UNIX password: "
 msgstr "নতুন UNIX পাসওয়ার্ড পুনরায় লিখুন: "
 
+#, fuzzy
+#~ msgid "Password has been used already. Choose another."
+#~ msgstr "পাসওয়ার্ড পূর্বে ব্যবহৃত হয়েছে। একটি পৃথক পাসওয়ার্ড নির্বাচন করুন।"
+
 #, fuzzy
 #~ msgid "Error translating default context."
 #~ msgstr "ডিফল্ট কনটেক্সট হল %s। \n"
index d8598fa56b25a9c00bf31c314b31bceef954b99a..63a21aff4ea85c58490d84cd76119405e2a2fa64 100644 (file)
--- a/po/ca.po
+++ b/po/ca.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: @PACKAGE@\n"
 "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n"
-"POT-Creation-Date: 2008-09-30 16:45+0200\n"
+"POT-Creation-Date: 2008-10-10 08:49+0200\n"
 "PO-Revision-Date: 2007-02-22 20:57+0100\n"
 "Last-Translator: Anna <blabla@blabla.es>\n"
 "Language-Team: Catalan\n"
@@ -168,16 +168,19 @@ msgid "Unknown PAM error"
 msgstr "Error de PAM desconegut"
 
 #: modules/pam_cracklib/pam_cracklib.c:64
+#: modules/pam_pwhistory/pam_pwhistory.c:61
 #, c-format
 msgid "New %s%spassword: "
 msgstr "Nova contrasenya de %s%s: "
 
 #: modules/pam_cracklib/pam_cracklib.c:66
+#: modules/pam_pwhistory/pam_pwhistory.c:62
 #, c-format
 msgid "Retype new %s%spassword: "
 msgstr "Torneu a escriure la nova contrasenya de %s%s: "
 
 #: modules/pam_cracklib/pam_cracklib.c:67
+#: modules/pam_pwhistory/pam_pwhistory.c:63
 msgid "Sorry, passwords do not match."
 msgstr "Les contrasenyes no coincideixen."
 
@@ -355,6 +358,18 @@ msgstr ""
 msgid "Unable to create directory %s: %m"
 msgstr ""
 
+#: modules/pam_pwhistory/pam_pwhistory.c:224
+#: modules/pam_pwhistory/pam_pwhistory.c:258
+#, fuzzy
+msgid "Password change aborted."
+msgstr "No s'ha canviat la contrasenya"
+
+#: modules/pam_pwhistory/pam_pwhistory.c:235
+#: modules/pam_pwhistory/pam_pwhistory.c:295
+#: modules/pam_unix/pam_unix_passwd.c:470
+msgid "Password has been already used. Choose another."
+msgstr "Aquesta contrasenya ja s'ha fet servir. Trieu-ne una altra."
+
 #: modules/pam_selinux/pam_selinux.c:172
 #, fuzzy
 msgid "Would you like to enter a security context? [N] "
@@ -519,10 +534,6 @@ msgstr "No s'ha pogut canviar la contrasenya NIS."
 msgid "You must choose a longer password"
 msgstr "Heu de triar una contrasenya més llarga"
 
-#: modules/pam_unix/pam_unix_passwd.c:470
-msgid "Password has been already used. Choose another."
-msgstr "Aquesta contrasenya ja s'ha fet servir. Trieu-ne una altra."
-
 #: modules/pam_unix/pam_unix_passwd.c:571
 #, fuzzy, c-format
 msgid "Changing password for %s."
@@ -544,6 +555,10 @@ msgstr "Introduïu la nova contrasenya d'UNIX: "
 msgid "Retype new UNIX password: "
 msgstr "Torneu a escriure la nova contrasenya d'UNIX: "
 
+#, fuzzy
+#~ msgid "Password has been used already. Choose another."
+#~ msgstr "Aquesta contrasenya ja s'ha fet servir. Trieu-ne una altra."
+
 #, fuzzy
 #~ msgid "Error translating default context."
 #~ msgstr "El context per defecte és %s. \n"
index 5d81cef23289d6bb38d921092415faeecc968988..acaacdfe03a21a8d1ffeae38bb44099f924b516e 100644 (file)
--- a/po/cs.po
+++ b/po/cs.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Linux-PAM\n"
 "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n"
-"POT-Creation-Date: 2008-09-30 16:45+0200\n"
+"POT-Creation-Date: 2008-10-10 08:49+0200\n"
 "PO-Revision-Date: 2008-09-19 15:54+0100\n"
 "Last-Translator: Tomas Mraz <t8m@centrum.cz>\n"
 "Language-Team: cs_CZ <cs@li.org>\n"
@@ -167,16 +167,19 @@ msgid "Unknown PAM error"
 msgstr "Neznámá chyba PAM"
 
 #: modules/pam_cracklib/pam_cracklib.c:64
+#: modules/pam_pwhistory/pam_pwhistory.c:61
 #, c-format
 msgid "New %s%spassword: "
 msgstr "Nové %s%sheslo: "
 
 #: modules/pam_cracklib/pam_cracklib.c:66
+#: modules/pam_pwhistory/pam_pwhistory.c:62
 #, c-format
 msgid "Retype new %s%spassword: "
 msgstr "Opakujte nové %s%sheslo: "
 
 #: modules/pam_cracklib/pam_cracklib.c:67
+#: modules/pam_pwhistory/pam_pwhistory.c:63
 msgid "Sorry, passwords do not match."
 msgstr "Hesla se neshodují."
 
@@ -355,6 +358,18 @@ msgstr "Vytváření adresáře '%s'."
 msgid "Unable to create directory %s: %m"
 msgstr "Nezdařilo se vytvořit adresář %s: %m"
 
+#: modules/pam_pwhistory/pam_pwhistory.c:224
+#: modules/pam_pwhistory/pam_pwhistory.c:258
+#, fuzzy
+msgid "Password change aborted."
+msgstr "Heslo nebylo změněno"
+
+#: modules/pam_pwhistory/pam_pwhistory.c:235
+#: modules/pam_pwhistory/pam_pwhistory.c:295
+#: modules/pam_unix/pam_unix_passwd.c:470
+msgid "Password has been already used. Choose another."
+msgstr "Heslo již bylo použito. Zvolte jiné."
+
 #: modules/pam_selinux/pam_selinux.c:172
 msgid "Would you like to enter a security context? [N] "
 msgstr "Chcete zadat bezpečnostní kontext? [N] "
@@ -515,10 +530,6 @@ msgstr "NIS heslo se nepodařilo změnit."
 msgid "You must choose a longer password"
 msgstr "Musíte zvolit delší heslo"
 
-#: modules/pam_unix/pam_unix_passwd.c:470
-msgid "Password has been already used. Choose another."
-msgstr "Heslo již bylo použito. Zvolte jiné."
-
 #: modules/pam_unix/pam_unix_passwd.c:571
 #, c-format
 msgid "Changing password for %s."
@@ -539,3 +550,7 @@ msgstr "Zadejte nové UNIX heslo: "
 #: modules/pam_unix/pam_unix_passwd.c:678
 msgid "Retype new UNIX password: "
 msgstr "Opakujte nové UNIX heslo: "
+
+#, fuzzy
+#~ msgid "Password has been used already. Choose another."
+#~ msgstr "Heslo již bylo použito. Zvolte jiné."
index 7d5c8e6cbeaf5c82be4ab317d7edfc896f2678b0..af578b5b98406bdcec89283fd20724af6fdcb002 100644 (file)
--- a/po/da.po
+++ b/po/da.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: @PACKAGE@\n"
 "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n"
-"POT-Creation-Date: 2008-09-30 16:45+0200\n"
+"POT-Creation-Date: 2008-10-10 08:49+0200\n"
 "PO-Revision-Date: 2005-08-16 20:00+0200\n"
 "Last-Translator: Novell Language <language@novell.com>\n"
 "Language-Team: Novell Language <language@novell.com>\n"
@@ -171,16 +171,19 @@ msgid "Unknown PAM error"
 msgstr "Ukendt PAM-fejl"
 
 #: modules/pam_cracklib/pam_cracklib.c:64
+#: modules/pam_pwhistory/pam_pwhistory.c:61
 #, c-format
 msgid "New %s%spassword: "
 msgstr "Ny %s%sadgangskode: "
 
 #: modules/pam_cracklib/pam_cracklib.c:66
+#: modules/pam_pwhistory/pam_pwhistory.c:62
 #, c-format
 msgid "Retype new %s%spassword: "
 msgstr "Genindtast ny %s%sadgangskode: "
 
 #: modules/pam_cracklib/pam_cracklib.c:67
+#: modules/pam_pwhistory/pam_pwhistory.c:63
 msgid "Sorry, passwords do not match."
 msgstr "Adgangskoderne stemmer desværre ikke overens."
 
@@ -358,6 +361,18 @@ msgstr ""
 msgid "Unable to create directory %s: %m"
 msgstr ""
 
+#: modules/pam_pwhistory/pam_pwhistory.c:224
+#: modules/pam_pwhistory/pam_pwhistory.c:258
+#, fuzzy
+msgid "Password change aborted."
+msgstr "Adgangskoden er uændret"
+
+#: modules/pam_pwhistory/pam_pwhistory.c:235
+#: modules/pam_pwhistory/pam_pwhistory.c:295
+#: modules/pam_unix/pam_unix_passwd.c:470
+msgid "Password has been already used. Choose another."
+msgstr "Adgangskoden er allerede blevet brugt. Vælg en anden."
+
 # power-off message
 #: modules/pam_selinux/pam_selinux.c:172
 #, fuzzy
@@ -522,10 +537,6 @@ msgstr "NIS-adgangskoden kunne ikke ændres."
 msgid "You must choose a longer password"
 msgstr "Du skal vælge en længere adgangskode"
 
-#: modules/pam_unix/pam_unix_passwd.c:470
-msgid "Password has been already used. Choose another."
-msgstr "Adgangskoden er allerede blevet brugt. Vælg en anden."
-
 #: modules/pam_unix/pam_unix_passwd.c:571
 #, fuzzy, c-format
 msgid "Changing password for %s."
@@ -547,6 +558,10 @@ msgstr "Indtast ny UNIX-adgangskode: "
 msgid "Retype new UNIX password: "
 msgstr "Genindtast ny UNIX-adgangskode: "
 
+#, fuzzy
+#~ msgid "Password has been used already. Choose another."
+#~ msgstr "Adgangskoden er allerede blevet brugt. Vælg en anden."
+
 #, fuzzy
 #~ msgid "Error translating default context."
 #~ msgstr "Din standardkontekst er %s. \n"
index 9ddd8d04cad0b59c3929b7a431cc160a25b34d1f..ae7fc03eb6a5a8a23655496dfe8f49d92a782891 100644 (file)
--- a/po/de.po
+++ b/po/de.po
@@ -6,8 +6,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Linux-PAM\n"
 "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n"
-"POT-Creation-Date: 2008-09-30 16:45+0200\n"
-"PO-Revision-Date: 2008-02-29 12:59+0100\n"
+"POT-Creation-Date: 2008-10-10 08:49+0200\n"
+"PO-Revision-Date: 2008-10-10 08:53+0200\n"
 "Last-Translator: Fabian Affolter <fab@fedoraproject.org>\n"
 "Language-Team: German <fedora-trans-de@redhat.com>\n"
 "MIME-Version: 1.0\n"
@@ -170,16 +170,19 @@ msgid "Unknown PAM error"
 msgstr "Unbekannter PAM-Fehler"
 
 #: modules/pam_cracklib/pam_cracklib.c:64
+#: modules/pam_pwhistory/pam_pwhistory.c:61
 #, c-format
 msgid "New %s%spassword: "
 msgstr "Geben Sie ein neues %s%sPasswort ein: "
 
 #: modules/pam_cracklib/pam_cracklib.c:66
+#: modules/pam_pwhistory/pam_pwhistory.c:62
 #, c-format
 msgid "Retype new %s%spassword: "
 msgstr "Geben Sie das neue %s%sPasswort erneut ein: "
 
 #: modules/pam_cracklib/pam_cracklib.c:67
+#: modules/pam_pwhistory/pam_pwhistory.c:63
 msgid "Sorry, passwords do not match."
 msgstr "Die Passwörter stimmen nicht überein."
 
@@ -288,23 +291,24 @@ msgstr "Willkommen in Ihrem neuen Account!"
 
 #. TRANSLATORS: "Last failed login: <date> from <host> on <terminal>"
 #: modules/pam_lastlog/pam_lastlog.c:460
-#, fuzzy, c-format
+#, c-format
 msgid "Last failed login:%s%s%s"
-msgstr "Letzte Anmeldung:%s%s%s"
+msgstr "Letzte fehlgeschlagene Anmeldung:%s%s%s"
 
 #: modules/pam_lastlog/pam_lastlog.c:469 modules/pam_lastlog/pam_lastlog.c:476
 #, c-format
 msgid "There was %d failed login attempt since the last successful login."
 msgid_plural ""
 "There were %d failed login attempts since the last successful login."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Es gab %d fehlgeschagenen Versuch seit der letzten erfolgreichen Anmeldung."
+msgstr[1] "Es gab %d fehlgeschlagene Versuche seit der letzten erfolgreichen Anmeldung."
 
 #. TRANSLATORS: only used if dngettext is not supported
 #: modules/pam_lastlog/pam_lastlog.c:481
 #, c-format
 msgid "There were %d failed login attempts since the last successful login."
 msgstr ""
+"Es gab %d fehlgeschlagene Versuche seit der letzten erfolgreichen Anmeldung."
 
 #: modules/pam_limits/pam_limits.c:712
 #, c-format
@@ -357,6 +361,17 @@ msgstr "Erstelle Verzeichnis '%s'."
 msgid "Unable to create directory %s: %m"
 msgstr "Verzeichnis %s kann nicht erstellt werden: %m"
 
+#: modules/pam_pwhistory/pam_pwhistory.c:224
+#: modules/pam_pwhistory/pam_pwhistory.c:258
+msgid "Password change aborted."
+msgstr "Passwort Änderung wurde abgebrochen."
+
+#: modules/pam_pwhistory/pam_pwhistory.c:235
+#: modules/pam_pwhistory/pam_pwhistory.c:295
+#: modules/pam_unix/pam_unix_passwd.c:470
+msgid "Password has been already used. Choose another."
+msgstr "Passwort wurde bereits verwendet. Wählen Sie ein anderes aus."
+
 #: modules/pam_selinux/pam_selinux.c:172
 msgid "Would you like to enter a security context? [N] "
 msgstr "Möchten Sie einen Sicherheitskontext eingeben? [N] "
@@ -516,10 +531,6 @@ msgstr "Änderung des NIS-Passworts nicht möglich."
 msgid "You must choose a longer password"
 msgstr "Sie müssen ein längeres Passwort auswählen."
 
-#: modules/pam_unix/pam_unix_passwd.c:470
-msgid "Password has been already used. Choose another."
-msgstr "Passwort wurde bereits verwendet. Wählen Sie ein anderes aus."
-
 #: modules/pam_unix/pam_unix_passwd.c:571
 #, c-format
 msgid "Changing password for %s."
@@ -540,3 +551,7 @@ msgstr "Geben Sie ein neues UNIX-Passwort ein: "
 #: modules/pam_unix/pam_unix_passwd.c:678
 msgid "Retype new UNIX password: "
 msgstr "Geben Sie das neue UNIX-Passwort erneut ein: "
+
+#, fuzzy
+#~ msgid "Password has been used already. Choose another."
+#~ msgstr "Passwort wurde bereits verwendet. Wählen Sie ein anderes aus."
index 0f4e70ec25323e6750ece8257b7ec2f78831b14c..064c6d57138bf406220cd13d8dabdfad4f0f5c8e 100644 (file)
--- a/po/es.po
+++ b/po/es.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Linux-PAM.tip.es\n"
 "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n"
-"POT-Creation-Date: 2008-09-30 16:45+0200\n"
+"POT-Creation-Date: 2008-10-10 08:49+0200\n"
 "PO-Revision-Date: 2008-02-21 00:03-0200\n"
 "Last-Translator: Domingo Becker <domingobecker@gmail.com>\n"
 "Language-Team: Spanish <fedora-trans-es@redhat.com>\n"
@@ -171,16 +171,19 @@ msgid "Unknown PAM error"
 msgstr "Error desconocido de PAM"
 
 #: modules/pam_cracklib/pam_cracklib.c:64
+#: modules/pam_pwhistory/pam_pwhistory.c:61
 #, c-format
 msgid "New %s%spassword: "
 msgstr "Nueva %s%scontraseña:"
 
 #: modules/pam_cracklib/pam_cracklib.c:66
+#: modules/pam_pwhistory/pam_pwhistory.c:62
 #, c-format
 msgid "Retype new %s%spassword: "
 msgstr "Vuelva a escribir la nueva %s%scontraseña:"
 
 #: modules/pam_cracklib/pam_cracklib.c:67
+#: modules/pam_pwhistory/pam_pwhistory.c:63
 msgid "Sorry, passwords do not match."
 msgstr "Las contraseñas no coinciden."
 
@@ -358,6 +361,18 @@ msgstr "Creando directorio '%s'."
 msgid "Unable to create directory %s: %m"
 msgstr "No se pudo crear el directorio %s: %m"
 
+#: modules/pam_pwhistory/pam_pwhistory.c:224
+#: modules/pam_pwhistory/pam_pwhistory.c:258
+#, fuzzy
+msgid "Password change aborted."
+msgstr "La contraseña no ha cambiado"
+
+#: modules/pam_pwhistory/pam_pwhistory.c:235
+#: modules/pam_pwhistory/pam_pwhistory.c:295
+#: modules/pam_unix/pam_unix_passwd.c:470
+msgid "Password has been already used. Choose another."
+msgstr "La contraseña ya se ha utilizado. Seleccione otra."
+
 #: modules/pam_selinux/pam_selinux.c:172
 msgid "Would you like to enter a security context? [N] "
 msgstr "¿Desea introducir un contexto de seguridad? [N]"
@@ -521,10 +536,6 @@ msgstr "No es posible cambiar la contraseña NIS."
 msgid "You must choose a longer password"
 msgstr "Debe elegir una contraseña más larga"
 
-#: modules/pam_unix/pam_unix_passwd.c:470
-msgid "Password has been already used. Choose another."
-msgstr "La contraseña ya se ha utilizado. Seleccione otra."
-
 #: modules/pam_unix/pam_unix_passwd.c:571
 #, c-format
 msgid "Changing password for %s."
@@ -546,6 +557,10 @@ msgstr "Introduzca la nueva contraseña de UNIX:"
 msgid "Retype new UNIX password: "
 msgstr "Vuelva a escribir la nueva contraseña de UNIX:"
 
+#, fuzzy
+#~ msgid "Password has been used already. Choose another."
+#~ msgstr "La contraseña ya se ha utilizado. Seleccione otra."
+
 #~ msgid "Requested MLS level not in permitted range"
 #~ msgstr "El nivel MLS requerido no está en el rango permitido"
 
index df521d0bd93bb07cb529282a5e8f632f1bd2fbb7..0a1cb59b4a18505366ac96dd3d09b9accaa0c250 100644 (file)
--- a/po/fi.po
+++ b/po/fi.po
@@ -10,7 +10,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Linux-PAM\n"
 "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n"
-"POT-Creation-Date: 2008-09-30 16:45+0200\n"
+"POT-Creation-Date: 2008-10-10 08:49+0200\n"
 "PO-Revision-Date: 2006-05-04 08:30+0200\n"
 "Last-Translator: Jyri Palokangas <jmp@netti.fi>\n"
 "Language-Team:  <yast-trans-fi@kotoistaminen.novell.fi>\n"
@@ -169,16 +169,19 @@ msgid "Unknown PAM error"
 msgstr "Tuntematon PAM-virhe"
 
 #: modules/pam_cracklib/pam_cracklib.c:64
+#: modules/pam_pwhistory/pam_pwhistory.c:61
 #, c-format
 msgid "New %s%spassword: "
 msgstr "Uusi %s%ssalasana: "
 
 #: modules/pam_cracklib/pam_cracklib.c:66
+#: modules/pam_pwhistory/pam_pwhistory.c:62
 #, c-format
 msgid "Retype new %s%spassword: "
 msgstr "Anna uudelleen uusi %s%ssalasana: "
 
 #: modules/pam_cracklib/pam_cracklib.c:67
+#: modules/pam_pwhistory/pam_pwhistory.c:63
 msgid "Sorry, passwords do not match."
 msgstr "Salasanat eivät täsmää."
 
@@ -356,6 +359,18 @@ msgstr ""
 msgid "Unable to create directory %s: %m"
 msgstr ""
 
+#: modules/pam_pwhistory/pam_pwhistory.c:224
+#: modules/pam_pwhistory/pam_pwhistory.c:258
+#, fuzzy
+msgid "Password change aborted."
+msgstr "Salasanaa ei vaihdettu"
+
+#: modules/pam_pwhistory/pam_pwhistory.c:235
+#: modules/pam_pwhistory/pam_pwhistory.c:295
+#: modules/pam_unix/pam_unix_passwd.c:470
+msgid "Password has been already used. Choose another."
+msgstr "Salasana on jo käytetty. Valitse toinen."
+
 #: modules/pam_selinux/pam_selinux.c:172
 #, fuzzy
 msgid "Would you like to enter a security context? [N] "
@@ -519,10 +534,6 @@ msgstr "NIS-salasanaa ei voitu vaihtaa."
 msgid "You must choose a longer password"
 msgstr "Salasanan tulee olla pidempi"
 
-#: modules/pam_unix/pam_unix_passwd.c:470
-msgid "Password has been already used. Choose another."
-msgstr "Salasana on jo käytetty. Valitse toinen."
-
 #: modules/pam_unix/pam_unix_passwd.c:571
 #, fuzzy, c-format
 msgid "Changing password for %s."
@@ -544,6 +555,10 @@ msgstr "Anna uusi UNIX-salasana: "
 msgid "Retype new UNIX password: "
 msgstr "Anna uusi UNIX-salasana uudelleen: "
 
+#, fuzzy
+#~ msgid "Password has been used already. Choose another."
+#~ msgstr "Salasana on jo käytetty. Valitse toinen."
+
 #, fuzzy
 #~ msgid "Error translating default context."
 #~ msgstr "Oletusympäristösi on %s. \n"
index b8186452bea72ecb6fa9ecfd1eedfbdeb97bac2b..4c9ec4dffa23dc1348582a473f5e594120e63e7c 100644 (file)
--- a/po/fr.po
+++ b/po/fr.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: pam.fr2\n"
 "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n"
-"POT-Creation-Date: 2008-09-30 16:45+0200\n"
+"POT-Creation-Date: 2008-10-10 08:49+0200\n"
 "PO-Revision-Date: 2008-03-12 12:17+0100\n"
 "Last-Translator: Canniot Thomas <thomas.canniot@mrtomlinux.org>\n"
 "Language-Team: Français <fedora-trans-fr@redhat.com>\n"
@@ -177,16 +177,19 @@ msgid "Unknown PAM error"
 msgstr "Erreur PAM inconnue"
 
 #: modules/pam_cracklib/pam_cracklib.c:64
+#: modules/pam_pwhistory/pam_pwhistory.c:61
 #, c-format
 msgid "New %s%spassword: "
 msgstr "Nouveau %s%smot de passe : "
 
 #: modules/pam_cracklib/pam_cracklib.c:66
+#: modules/pam_pwhistory/pam_pwhistory.c:62
 #, c-format
 msgid "Retype new %s%spassword: "
 msgstr "Retapez le nouveau %s%smot de passe : "
 
 #: modules/pam_cracklib/pam_cracklib.c:67
+#: modules/pam_pwhistory/pam_pwhistory.c:63
 msgid "Sorry, passwords do not match."
 msgstr "Les mots de passe ne correspondent pas."
 
@@ -364,6 +367,18 @@ msgstr "Création du répertoire « %s »."
 msgid "Unable to create directory %s: %m"
 msgstr "Impossible de créer le répertoire %s : %m"
 
+#: modules/pam_pwhistory/pam_pwhistory.c:224
+#: modules/pam_pwhistory/pam_pwhistory.c:258
+#, fuzzy
+msgid "Password change aborted."
+msgstr "Mot de passe inchangé"
+
+#: modules/pam_pwhistory/pam_pwhistory.c:235
+#: modules/pam_pwhistory/pam_pwhistory.c:295
+#: modules/pam_unix/pam_unix_passwd.c:470
+msgid "Password has been already used. Choose another."
+msgstr "Mot de passe déjà utilisé. Choisissez-en un autre."
+
 #: modules/pam_selinux/pam_selinux.c:172
 msgid "Would you like to enter a security context? [N] "
 msgstr "Voulez-vous entrer un contexte de sécurité ? [N]"
@@ -522,10 +537,6 @@ msgstr "Le mot de passe NIS n'a pas pu être changé."
 msgid "You must choose a longer password"
 msgstr "Vous devez choisir un mot de passe plus long"
 
-#: modules/pam_unix/pam_unix_passwd.c:470
-msgid "Password has been already used. Choose another."
-msgstr "Mot de passe déjà utilisé. Choisissez-en un autre."
-
 #: modules/pam_unix/pam_unix_passwd.c:571
 #, c-format
 msgid "Changing password for %s."
@@ -547,5 +558,9 @@ msgstr "Entrez le nouveau mot de passe UNIX : "
 msgid "Retype new UNIX password: "
 msgstr "Retapez le nouveau mot de passe UNIX : "
 
+#, fuzzy
+#~ msgid "Password has been used already. Choose another."
+#~ msgstr "Mot de passe déjà utilisé. Choisissez-en un autre."
+
 #~ msgid "Requested MLS level not in permitted range"
 #~ msgstr "Niveau MLS demandé hors de la plage autorisée"
index 009b723c1b2d0ff1c49eb8269e1239b1d57be4be..adf66289449a025661de9e06b548fc9bdae38586 100644 (file)
--- a/po/gu.po
+++ b/po/gu.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Linux-PAM.tip.gu\n"
 "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n"
-"POT-Creation-Date: 2008-09-30 16:45+0200\n"
+"POT-Creation-Date: 2008-10-10 08:49+0200\n"
 "PO-Revision-Date: 2008-03-13 14:29+0530\n"
 "Last-Translator: Ankit Patel <ankit@redhat.com>\n"
 "Language-Team: Gujarati <fedora-trans-gu@redhat.com>\n"
@@ -169,16 +169,19 @@ msgid "Unknown PAM error"
 msgstr "અજ્ઞાત PAM ભૂલ"
 
 #: modules/pam_cracklib/pam_cracklib.c:64
+#: modules/pam_pwhistory/pam_pwhistory.c:61
 #, c-format
 msgid "New %s%spassword: "
 msgstr "નવો %s%sપાસવર્ડ: "
 
 #: modules/pam_cracklib/pam_cracklib.c:66
+#: modules/pam_pwhistory/pam_pwhistory.c:62
 #, c-format
 msgid "Retype new %s%spassword: "
 msgstr "નવો %s%sપાસવર્ડ ફરી લખો: "
 
 #: modules/pam_cracklib/pam_cracklib.c:67
+#: modules/pam_pwhistory/pam_pwhistory.c:63
 msgid "Sorry, passwords do not match."
 msgstr "માફ કરજો, પાસવર્ડો બંધબેસતા નથી."
 
@@ -356,6 +359,18 @@ msgstr "ડિરેક્ટરી '%s' બનાવી રહ્યા છી
 msgid "Unable to create directory %s: %m"
 msgstr "ડિરેક્ટરી %s બનાવવામાં અસમર્થ: %m"
 
+#: modules/pam_pwhistory/pam_pwhistory.c:224
+#: modules/pam_pwhistory/pam_pwhistory.c:258
+#, fuzzy
+msgid "Password change aborted."
+msgstr "પાસવર્ડ બદલાયેલ નથી"
+
+#: modules/pam_pwhistory/pam_pwhistory.c:235
+#: modules/pam_pwhistory/pam_pwhistory.c:295
+#: modules/pam_unix/pam_unix_passwd.c:470
+msgid "Password has been already used. Choose another."
+msgstr "પાસવર્ડ પહેલાથી જ વપરાઈ ગયેલ છે. બીજો પસંદ કરો."
+
 #: modules/pam_selinux/pam_selinux.c:172
 msgid "Would you like to enter a security context? [N] "
 msgstr "શું તમે સુરક્ષા સંદર્ભ દાખલ કરવા ઈચ્છો છો? [N] "
@@ -514,10 +529,6 @@ msgstr "NIS પાસવર્ડ બદલી શક્યા નહિં."
 msgid "You must choose a longer password"
 msgstr "તમારે લાંબો પાસવર્ડ જ પસંદ કરવો જોઈએ"
 
-#: modules/pam_unix/pam_unix_passwd.c:470
-msgid "Password has been already used. Choose another."
-msgstr "પાસવર્ડ પહેલાથી જ વપરાઈ ગયેલ છે. બીજો પસંદ કરો."
-
 #: modules/pam_unix/pam_unix_passwd.c:571
 #, c-format
 msgid "Changing password for %s."
@@ -539,5 +550,9 @@ msgstr "નવો UNIX પાસવર્ડ દાખલ કરો: "
 msgid "Retype new UNIX password: "
 msgstr "નવો UNIX પાસવર્ડ ફરીથી લખો: "
 
+#, fuzzy
+#~ msgid "Password has been used already. Choose another."
+#~ msgstr "પાસવર્ડ પહેલાથી જ વપરાઈ ગયેલ છે. બીજો પસંદ કરો."
+
 #~ msgid "Requested MLS level not in permitted range"
 #~ msgstr "અરજી થયેલ MLS સ્તર એ પરવાનગીય વિસ્તારમાં નથી"
index 8582b9f85d37b1b3f61b40bcc270b61858d91327..eb57406512d7596a2312ab01891b3ed5ca63cde7 100644 (file)
--- a/po/hi.po
+++ b/po/hi.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: hi\n"
 "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n"
-"POT-Creation-Date: 2008-09-30 16:45+0200\n"
+"POT-Creation-Date: 2008-10-10 08:49+0200\n"
 "PO-Revision-Date: 2007-06-21 15:22+0530\n"
 "Last-Translator: Rajesh Ranjan <rranjan@redhat.com>\n"
 "Language-Team: Hindi <hindi.sf.net>\n"
@@ -169,16 +169,19 @@ msgid "Unknown PAM error"
 msgstr "अनजान PAM त्रुटि"
 
 #: modules/pam_cracklib/pam_cracklib.c:64
+#: modules/pam_pwhistory/pam_pwhistory.c:61
 #, c-format
 msgid "New %s%spassword: "
 msgstr "नया %s%spassword: "
 
 #: modules/pam_cracklib/pam_cracklib.c:66
+#: modules/pam_pwhistory/pam_pwhistory.c:62
 #, c-format
 msgid "Retype new %s%spassword: "
 msgstr "नया %s%spassword फिर टाइप करें: "
 
 #: modules/pam_cracklib/pam_cracklib.c:67
+#: modules/pam_pwhistory/pam_pwhistory.c:63
 msgid "Sorry, passwords do not match."
 msgstr "क्षमा करें, शब्दकूट नहीं मिलते हैं."
 
@@ -356,6 +359,18 @@ msgstr ""
 msgid "Unable to create directory %s: %m"
 msgstr ""
 
+#: modules/pam_pwhistory/pam_pwhistory.c:224
+#: modules/pam_pwhistory/pam_pwhistory.c:258
+#, fuzzy
+msgid "Password change aborted."
+msgstr "शब्दकूट परिवर्तित"
+
+#: modules/pam_pwhistory/pam_pwhistory.c:235
+#: modules/pam_pwhistory/pam_pwhistory.c:295
+#: modules/pam_unix/pam_unix_passwd.c:470
+msgid "Password has been already used. Choose another."
+msgstr "शब्दकूट को पहले ही बदला जा चुका है. दूसरा चुनें."
+
 #: modules/pam_selinux/pam_selinux.c:172
 #, fuzzy
 msgid "Would you like to enter a security context? [N] "
@@ -518,10 +533,6 @@ msgstr "NIS शब्दकूट बदला नहीं जा सका."
 msgid "You must choose a longer password"
 msgstr "आपको जरूर एक लंबा शब्दकूट चुनना चाहिए"
 
-#: modules/pam_unix/pam_unix_passwd.c:470
-msgid "Password has been already used. Choose another."
-msgstr "शब्दकूट को पहले ही बदला जा चुका है. दूसरा चुनें."
-
 #: modules/pam_unix/pam_unix_passwd.c:571
 #, fuzzy, c-format
 msgid "Changing password for %s."
@@ -543,6 +554,10 @@ msgstr "नया UNIX शब्दकूट दें: "
 msgid "Retype new UNIX password: "
 msgstr "नया UNIX शब्दकूट फिर टाइप करें: "
 
+#, fuzzy
+#~ msgid "Password has been used already. Choose another."
+#~ msgstr "शब्दकूट को पहले ही बदला जा चुका है. दूसरा चुनें."
+
 #, fuzzy
 #~ msgid "Error translating default context."
 #~ msgstr "आपका मूलभूत संदर्भ %s है. \n"
index e5c53e364b57936cee99af7ad76085bbf9ddc974..dff81541d25c1a99f2430ef90070aec3cfc7f8ff 100644 (file)
--- a/po/hu.po
+++ b/po/hu.po
@@ -11,7 +11,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: pam\n"
 "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n"
-"POT-Creation-Date: 2008-09-30 16:45+0200\n"
+"POT-Creation-Date: 2008-10-10 08:49+0200\n"
 "PO-Revision-Date: 2008-04-30 08:23+0100\n"
 "Last-Translator: Sulyok Péter <peti@sulyok.hu>\n"
 "Language-Team: Hungarian <fedora-trans-hu@redhat.com>\n"
@@ -176,16 +176,19 @@ msgid "Unknown PAM error"
 msgstr "Ismeretlen PAM hiba"
 
 #: modules/pam_cracklib/pam_cracklib.c:64
+#: modules/pam_pwhistory/pam_pwhistory.c:61
 #, c-format
 msgid "New %s%spassword: "
 msgstr "Új %s%sjelszó: "
 
 #: modules/pam_cracklib/pam_cracklib.c:66
+#: modules/pam_pwhistory/pam_pwhistory.c:62
 #, c-format
 msgid "Retype new %s%spassword: "
 msgstr "Ismét az új %s%sjelszó: "
 
 #: modules/pam_cracklib/pam_cracklib.c:67
+#: modules/pam_pwhistory/pam_pwhistory.c:63
 msgid "Sorry, passwords do not match."
 msgstr "Sajnálom, de a jelszavak nem egyeznek."
 
@@ -363,6 +366,18 @@ msgstr "\"%s\" mappa teremtése"
 msgid "Unable to create directory %s: %m"
 msgstr "%s mapa nem teremthető meg: %m"
 
+#: modules/pam_pwhistory/pam_pwhistory.c:224
+#: modules/pam_pwhistory/pam_pwhistory.c:258
+#, fuzzy
+msgid "Password change aborted."
+msgstr "Változatlan jelszó"
+
+#: modules/pam_pwhistory/pam_pwhistory.c:235
+#: modules/pam_pwhistory/pam_pwhistory.c:295
+#: modules/pam_unix/pam_unix_passwd.c:470
+msgid "Password has been already used. Choose another."
+msgstr "A jelszót már használta. Válasszon másikat!"
+
 #: modules/pam_selinux/pam_selinux.c:172
 msgid "Would you like to enter a security context? [N] "
 msgstr "Kíván biztonsági környezetet megadni? [N]"
@@ -521,10 +536,6 @@ msgstr "NIS jelszót nem sikerült módosítani."
 msgid "You must choose a longer password"
 msgstr "Hosszabb jelszót kell választani"
 
-#: modules/pam_unix/pam_unix_passwd.c:470
-msgid "Password has been already used. Choose another."
-msgstr "A jelszót már használta. Válasszon másikat!"
-
 #: modules/pam_unix/pam_unix_passwd.c:571
 #, c-format
 msgid "Changing password for %s."
@@ -546,5 +557,9 @@ msgstr "Adja meg az új UNIX jelszót: "
 msgid "Retype new UNIX password: "
 msgstr "Írja be újra a UNIX jelszót: "
 
+#, fuzzy
+#~ msgid "Password has been used already. Choose another."
+#~ msgstr "A jelszót már használta. Válasszon másikat!"
+
 #~ msgid "Requested MLS level not in permitted range"
 #~ msgstr "Nincs az engedélyezett intervallumban a kért MLS szint"
index 7daaf97fa9399d3ff8a1a764d1e62664f7317372..f0339e69e9422e0caa1b7388ca6d3703f022d305 100644 (file)
--- a/po/it.po
+++ b/po/it.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Linux-PAM\n"
 "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n"
-"POT-Creation-Date: 2008-09-30 16:45+0200\n"
+"POT-Creation-Date: 2008-10-10 08:49+0200\n"
 "PO-Revision-Date: 2007-11-24 13:39+0100\n"
 "Last-Translator: Luca Bruno <luca.br@uno.it>\n"
 "Language-Team: Italian <tp@lists.linux.it>\n"
@@ -171,16 +171,19 @@ msgid "Unknown PAM error"
 msgstr "Errore PAM sconosciuto"
 
 #: modules/pam_cracklib/pam_cracklib.c:64
+#: modules/pam_pwhistory/pam_pwhistory.c:61
 #, c-format
 msgid "New %s%spassword: "
 msgstr "Nuova password%s%s: "
 
 #: modules/pam_cracklib/pam_cracklib.c:66
+#: modules/pam_pwhistory/pam_pwhistory.c:62
 #, c-format
 msgid "Retype new %s%spassword: "
 msgstr "Reimmettere la nuova password%s%s: "
 
 #: modules/pam_cracklib/pam_cracklib.c:67
+#: modules/pam_pwhistory/pam_pwhistory.c:63
 msgid "Sorry, passwords do not match."
 msgstr "Le password non corrispondono."
 
@@ -358,6 +361,18 @@ msgstr "Creazione della directory \"%s\"."
 msgid "Unable to create directory %s: %m"
 msgstr "Impossibile creare la directory %s: %m"
 
+#: modules/pam_pwhistory/pam_pwhistory.c:224
+#: modules/pam_pwhistory/pam_pwhistory.c:258
+#, fuzzy
+msgid "Password change aborted."
+msgstr "Password non modificata"
+
+#: modules/pam_pwhistory/pam_pwhistory.c:235
+#: modules/pam_pwhistory/pam_pwhistory.c:295
+#: modules/pam_unix/pam_unix_passwd.c:470
+msgid "Password has been already used. Choose another."
+msgstr "Password già utilizzata. Sceglierne un'altra."
+
 #: modules/pam_selinux/pam_selinux.c:172
 msgid "Would you like to enter a security context? [N] "
 msgstr "Attivare un contesto di sicurezza? [N] "
@@ -519,10 +534,6 @@ msgstr "Impossibile modificare la password NIS."
 msgid "You must choose a longer password"
 msgstr "Scegliere una password più lunga"
 
-#: modules/pam_unix/pam_unix_passwd.c:470
-msgid "Password has been already used. Choose another."
-msgstr "Password già utilizzata. Sceglierne un'altra."
-
 #: modules/pam_unix/pam_unix_passwd.c:571
 #, c-format
 msgid "Changing password for %s."
@@ -544,6 +555,10 @@ msgstr "Immettere nuova password UNIX: "
 msgid "Retype new UNIX password: "
 msgstr "Reimmettere la nuova password UNIX: "
 
+#, fuzzy
+#~ msgid "Password has been used already. Choose another."
+#~ msgstr "Password già utilizzata. Sceglierne un'altra."
+
 #~ msgid "Requested MLS level not in permitted range"
 #~ msgstr "Il livello MLS richiesto non è nell'intervallo permesso"
 
index 106561c33bdc2cde64380a682696e46ee70f5c0e..b0ef9bdf0121c294e1a794fe317db33dd2b1905d 100644 (file)
--- a/po/ja.po
+++ b/po/ja.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ja\n"
 "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n"
-"POT-Creation-Date: 2008-09-30 16:45+0200\n"
+"POT-Creation-Date: 2008-10-10 08:49+0200\n"
 "PO-Revision-Date: 2007-06-21 16:36+1000\n"
 "Last-Translator: Noriko Mizumoto <noriko@redhat.com>\n"
 "Language-Team: Japanese <fedora-trans-ja@redhat.com>\n"
@@ -167,16 +167,19 @@ msgid "Unknown PAM error"
 msgstr "不明なPAMエラー"
 
 #: modules/pam_cracklib/pam_cracklib.c:64
+#: modules/pam_pwhistory/pam_pwhistory.c:61
 #, c-format
 msgid "New %s%spassword: "
 msgstr "新しい%s%sパスワード:"
 
 #: modules/pam_cracklib/pam_cracklib.c:66
+#: modules/pam_pwhistory/pam_pwhistory.c:62
 #, c-format
 msgid "Retype new %s%spassword: "
 msgstr "新しい%s%sパスワードを再入力してください:"
 
 #: modules/pam_cracklib/pam_cracklib.c:67
+#: modules/pam_pwhistory/pam_pwhistory.c:63
 msgid "Sorry, passwords do not match."
 msgstr "パスワードが一致しません。"
 
@@ -353,6 +356,19 @@ msgstr ""
 msgid "Unable to create directory %s: %m"
 msgstr ""
 
+#: modules/pam_pwhistory/pam_pwhistory.c:224
+#: modules/pam_pwhistory/pam_pwhistory.c:258
+#, fuzzy
+msgid "Password change aborted."
+msgstr "パスワードが変更されていません"
+
+#: modules/pam_pwhistory/pam_pwhistory.c:235
+#: modules/pam_pwhistory/pam_pwhistory.c:295
+#: modules/pam_unix/pam_unix_passwd.c:470
+msgid "Password has been already used. Choose another."
+msgstr ""
+"パスワードはすでに使用されています。 別のパスワードを選択してください。"
+
 #: modules/pam_selinux/pam_selinux.c:172
 #, fuzzy
 msgid "Would you like to enter a security context? [N] "
@@ -515,11 +531,6 @@ msgstr "NISパスワードを変更できませんでした。"
 msgid "You must choose a longer password"
 msgstr "長いパスワードを選択する必要があります"
 
-#: modules/pam_unix/pam_unix_passwd.c:470
-msgid "Password has been already used. Choose another."
-msgstr ""
-"パスワードはすでに使用されています。 別のパスワードを選択してください。"
-
 #: modules/pam_unix/pam_unix_passwd.c:571
 #, fuzzy, c-format
 msgid "Changing password for %s."
@@ -541,6 +552,11 @@ msgstr "新しいUNIXパスワードを入力してください:"
 msgid "Retype new UNIX password: "
 msgstr "新しいUNIX パスワードを再入力してください:"
 
+#, fuzzy
+#~ msgid "Password has been used already. Choose another."
+#~ msgstr ""
+#~ "パスワードはすでに使用されています。 別のパスワードを選択してください。"
+
 #, fuzzy
 #~ msgid "Error translating default context."
 #~ msgstr "デフォルトのコンテキストは%sです。 \n"
index f2dccf65201e974cd80405cd279baa51e8326cbf..024f16d94e5484d8f89ef25a1470ba41001c99bd 100644 (file)
--- a/po/km.po
+++ b/po/km.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Linux-PAM\n"
 "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n"
-"POT-Creation-Date: 2008-09-30 16:45+0200\n"
+"POT-Creation-Date: 2008-10-10 08:49+0200\n"
 "PO-Revision-Date: 2006-03-17 10:32+0700\n"
 "Last-Translator: Khoem Sokhem <khoemsokhem@khmeros.info>\n"
 "Language-Team: Khmer <support@khmeros.info>\n"
@@ -170,16 +170,19 @@ msgid "Unknown PAM error"
 msgstr "មិន​ស្គាល់​កំហុស PAM"
 
 #: modules/pam_cracklib/pam_cracklib.c:64
+#: modules/pam_pwhistory/pam_pwhistory.c:61
 #, c-format
 msgid "New %s%spassword: "
 msgstr "ពាក្យ​សម្ងាត់ %s%s ថ្មី ៖"
 
 #: modules/pam_cracklib/pam_cracklib.c:66
+#: modules/pam_pwhistory/pam_pwhistory.c:62
 #, c-format
 msgid "Retype new %s%spassword: "
 msgstr "វាយ​ពាក្យ​សម្ងាត់ %s%s ថ្មី​ឡើង​វិញ ៖"
 
 #: modules/pam_cracklib/pam_cracklib.c:67
+#: modules/pam_pwhistory/pam_pwhistory.c:63
 msgid "Sorry, passwords do not match."
 msgstr "សូម​ទោស ពាក្យ​សម្ងាត់​មិន​ដូច​គ្នា​ឡើយ ។"
 
@@ -357,6 +360,18 @@ msgstr ""
 msgid "Unable to create directory %s: %m"
 msgstr ""
 
+#: modules/pam_pwhistory/pam_pwhistory.c:224
+#: modules/pam_pwhistory/pam_pwhistory.c:258
+#, fuzzy
+msgid "Password change aborted."
+msgstr "ពាក្យសម្ងាត់​មិន​បាន​ផ្លាស់ប្ដូរ​ឡើយ"
+
+#: modules/pam_pwhistory/pam_pwhistory.c:235
+#: modules/pam_pwhistory/pam_pwhistory.c:295
+#: modules/pam_unix/pam_unix_passwd.c:470
+msgid "Password has been already used. Choose another."
+msgstr "ពាក្យសម្ងាត់​ត្រូវ​បាន​ប្រើ​រួច​ហើយ ។ សូម​ជ្រើស​មួយ​ទៀត ។"
+
 #: modules/pam_selinux/pam_selinux.c:172
 #, fuzzy
 msgid "Would you like to enter a security context? [N] "
@@ -519,10 +534,6 @@ msgstr "មិន​អាច​ផ្លាស់ប្ដូរ​ពាក្
 msgid "You must choose a longer password"
 msgstr "អ្នក​ត្រូវ​តែ​ជ្រើស​ពាក្យសម្ងាត់​វែង​ជាង​នេះ"
 
-#: modules/pam_unix/pam_unix_passwd.c:470
-msgid "Password has been already used. Choose another."
-msgstr "ពាក្យសម្ងាត់​ត្រូវ​បាន​ប្រើ​រួច​ហើយ ។ សូម​ជ្រើស​មួយ​ទៀត ។"
-
 #: modules/pam_unix/pam_unix_passwd.c:571
 #, fuzzy, c-format
 msgid "Changing password for %s."
@@ -544,6 +555,10 @@ msgstr "បញ្ចូល​ពាក្យ​សម្ងាត់ UNIX ថ្
 msgid "Retype new UNIX password: "
 msgstr "វាយ​ពាក្យ​សម្ងាត់ UNIX ថ្មី​ម្ដង​ទៀត ៖ "
 
+#, fuzzy
+#~ msgid "Password has been used already. Choose another."
+#~ msgstr "ពាក្យសម្ងាត់​ត្រូវ​បាន​ប្រើ​រួច​ហើយ ។ សូម​ជ្រើស​មួយ​ទៀត ។"
+
 #, fuzzy
 #~ msgid "Error translating default context."
 #~ msgstr "បរិបទ​លំនាំដើម​របស់​អ្នក​គឺ %s ។ \n"
index 7356371b0a7049855cb59e37a443e0dc1b81aad6..b4e2a98a18a077aa645b1d5aa9d5e6b94dc86da3 100644 (file)
--- a/po/kn.po
+++ b/po/kn.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: kn\n"
 "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n"
-"POT-Creation-Date: 2008-09-30 16:45+0200\n"
+"POT-Creation-Date: 2008-10-10 08:49+0200\n"
 "PO-Revision-Date: 2007-06-22 13:29+0530\n"
 "Last-Translator: Shankar Prasad <svenkate@redhat.com>\n"
 "Language-Team: Kannada <en@li.org>\n"
@@ -167,16 +167,19 @@ msgid "Unknown PAM error"
 msgstr "ಗೊತ್ತಿರದ PAM ದೋಷ"
 
 #: modules/pam_cracklib/pam_cracklib.c:64
+#: modules/pam_pwhistory/pam_pwhistory.c:61
 #, c-format
 msgid "New %s%spassword: "
 msgstr "ಹೊಸ %s%sಗುಪ್ತಪದ: "
 
 #: modules/pam_cracklib/pam_cracklib.c:66
+#: modules/pam_pwhistory/pam_pwhistory.c:62
 #, c-format
 msgid "Retype new %s%spassword: "
 msgstr "ಹೊಸ %s%sಗುಪ್ತಪದವನ್ನು ಪುನರ್ ಟೈಪಿಸಿ: "
 
 #: modules/pam_cracklib/pam_cracklib.c:67
+#: modules/pam_pwhistory/pam_pwhistory.c:63
 msgid "Sorry, passwords do not match."
 msgstr "ಕ್ಷಮಿಸಿ, ಗುಪ್ತಪದಗಳು ತಾಳೆಯಾಗುತ್ತಿಲ್ಲ."
 
@@ -354,6 +357,18 @@ msgstr ""
 msgid "Unable to create directory %s: %m"
 msgstr ""
 
+#: modules/pam_pwhistory/pam_pwhistory.c:224
+#: modules/pam_pwhistory/pam_pwhistory.c:258
+#, fuzzy
+msgid "Password change aborted."
+msgstr "ಗುಪ್ತಪದ ಬದಲಾಗಿಲ್ಲ"
+
+#: modules/pam_pwhistory/pam_pwhistory.c:235
+#: modules/pam_pwhistory/pam_pwhistory.c:295
+#: modules/pam_unix/pam_unix_passwd.c:470
+msgid "Password has been already used. Choose another."
+msgstr "ಗುಪ್ತಪದವು ಈಗಾಗಲೆ ಬಳಸಲ್ಪಟ್ಟಿದೆ. ಬೇರೊಂದನ್ನು ಬಳಸಿ."
+
 #: modules/pam_selinux/pam_selinux.c:172
 #, fuzzy
 msgid "Would you like to enter a security context? [N] "
@@ -517,10 +532,6 @@ msgstr "NIS ಗುಪ್ತಪದವನ್ನು ಬದಲಾಯಿಸಲಾಗ
 msgid "You must choose a longer password"
 msgstr "ನೀವು ಒಂದು ಉದ್ದವಾದ ಗುಪ್ತಪದವನ್ನು ಆರಿಸಬೇಕು"
 
-#: modules/pam_unix/pam_unix_passwd.c:470
-msgid "Password has been already used. Choose another."
-msgstr "ಗುಪ್ತಪದವು ಈಗಾಗಲೆ ಬಳಸಲ್ಪಟ್ಟಿದೆ. ಬೇರೊಂದನ್ನು ಬಳಸಿ."
-
 #: modules/pam_unix/pam_unix_passwd.c:571
 #, fuzzy, c-format
 msgid "Changing password for %s."
@@ -542,6 +553,10 @@ msgstr "ಹೊಸ UNIX ಗುಪ್ತಪದವನ್ನು ದಾಖಲಿಸ
 msgid "Retype new UNIX password: "
 msgstr "ಹೊಸ UNIX ಗುಪ್ತಪದವನ್ನು ಪುನಃ ಟೈಪಿಸಿ: "
 
+#, fuzzy
+#~ msgid "Password has been used already. Choose another."
+#~ msgstr "ಗುಪ್ತಪದವು ಈಗಾಗಲೆ ಬಳಸಲ್ಪಟ್ಟಿದೆ. ಬೇರೊಂದನ್ನು ಬಳಸಿ."
+
 #, fuzzy
 #~ msgid "Error translating default context."
 #~ msgstr "ನಿಮ್ಮ ಡಿಫಾಲ್ಟ್ ಸನ್ನಿವೇಶವು %s ಆಗಿದೆ. \n"
index 1098954dcfa3d577eb421aaf957f300c36f34f1e..038557b241ed0d54d346eeb2e09abbb8e2a9b527 100644 (file)
--- a/po/ko.po
+++ b/po/ko.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ko\n"
 "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n"
-"POT-Creation-Date: 2008-09-30 16:45+0200\n"
+"POT-Creation-Date: 2008-10-10 08:49+0200\n"
 "PO-Revision-Date: 2007-06-22 10:02+1000\n"
 "Last-Translator: Eunju Kim <eukim@redhat.com>\n"
 "Language-Team: Korean <ko@li.org>\n"
@@ -167,16 +167,19 @@ msgid "Unknown PAM error"
 msgstr "알 수 없는 PAM 오류"
 
 #: modules/pam_cracklib/pam_cracklib.c:64
+#: modules/pam_pwhistory/pam_pwhistory.c:61
 #, c-format
 msgid "New %s%spassword: "
 msgstr "새 %s%s 암호:"
 
 #: modules/pam_cracklib/pam_cracklib.c:66
+#: modules/pam_pwhistory/pam_pwhistory.c:62
 #, c-format
 msgid "Retype new %s%spassword: "
 msgstr "새 %s%s 암호 재입력:"
 
 #: modules/pam_cracklib/pam_cracklib.c:67
+#: modules/pam_pwhistory/pam_pwhistory.c:63
 msgid "Sorry, passwords do not match."
 msgstr "죄송합니다. 암호가 일치하지 않습니다."
 
@@ -353,6 +356,18 @@ msgstr ""
 msgid "Unable to create directory %s: %m"
 msgstr ""
 
+#: modules/pam_pwhistory/pam_pwhistory.c:224
+#: modules/pam_pwhistory/pam_pwhistory.c:258
+#, fuzzy
+msgid "Password change aborted."
+msgstr "암호가 변경되지 않음"
+
+#: modules/pam_pwhistory/pam_pwhistory.c:235
+#: modules/pam_pwhistory/pam_pwhistory.c:295
+#: modules/pam_unix/pam_unix_passwd.c:470
+msgid "Password has been already used. Choose another."
+msgstr "이미 사용되고 있는 암호입니다. 다른 암호를 선택해 주십시오."
+
 #: modules/pam_selinux/pam_selinux.c:172
 #, fuzzy
 msgid "Would you like to enter a security context? [N] "
@@ -514,10 +529,6 @@ msgstr "NIS 암호는 변경할 수 없습니다."
 msgid "You must choose a longer password"
 msgstr "더 긴 암호를 선택해 주십시오"
 
-#: modules/pam_unix/pam_unix_passwd.c:470
-msgid "Password has been already used. Choose another."
-msgstr "이미 사용되고 있는 암호입니다. 다른 암호를 선택해 주십시오."
-
 #: modules/pam_unix/pam_unix_passwd.c:571
 #, fuzzy, c-format
 msgid "Changing password for %s."
@@ -539,6 +550,10 @@ msgstr "새 UNIX 암호 입력:"
 msgid "Retype new UNIX password: "
 msgstr "새 UNIX 암호 재입력:"
 
+#, fuzzy
+#~ msgid "Password has been used already. Choose another."
+#~ msgstr "이미 사용되고 있는 암호입니다. 다른 암호를 선택해 주십시오."
+
 #, fuzzy
 #~ msgid "Error translating default context."
 #~ msgstr "기본 문맥은 %s입니다. \n"
index 4d2514475a2ee47385e2f6dd17116b7d43670e3c..f8a153c8b31050d7483bed6b90dc0585157a45f0 100644 (file)
--- a/po/ml.po
+++ b/po/ml.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ml\n"
 "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n"
-"POT-Creation-Date: 2008-09-30 16:45+0200\n"
+"POT-Creation-Date: 2008-10-10 08:49+0200\n"
 "PO-Revision-Date: 2007-06-22 17:15+0530\n"
 "Last-Translator: Ani Peter <apeter@redhat.com>\n"
 "Language-Team: Malayalam <en@li.org>\n"
@@ -167,16 +167,19 @@ msgid "Unknown PAM error"
 msgstr "അപരിചിതമായ PAM പിശക്"
 
 #: modules/pam_cracklib/pam_cracklib.c:64
+#: modules/pam_pwhistory/pam_pwhistory.c:61
 #, c-format
 msgid "New %s%spassword: "
 msgstr "പുതിയ %s%s പാസ്‌വേറ്‍ഡ്: "
 
 #: modules/pam_cracklib/pam_cracklib.c:66
+#: modules/pam_pwhistory/pam_pwhistory.c:62
 #, c-format
 msgid "Retype new %s%spassword: "
 msgstr "വീണ്ടും %s%s പാസ്‌വേറ്‍ഡ് ടൈപ്പ് ചെയ്യുക: "
 
 #: modules/pam_cracklib/pam_cracklib.c:67
+#: modules/pam_pwhistory/pam_pwhistory.c:63
 msgid "Sorry, passwords do not match."
 msgstr "ക്ഷമിക്കണം, പാസ്‌വേറ്‍ഡുകള്‍ തമ്മില്‍ ചേരുന്നില്ല."
 
@@ -354,6 +357,18 @@ msgstr ""
 msgid "Unable to create directory %s: %m"
 msgstr ""
 
+#: modules/pam_pwhistory/pam_pwhistory.c:224
+#: modules/pam_pwhistory/pam_pwhistory.c:258
+#, fuzzy
+msgid "Password change aborted."
+msgstr "പാസ്‌വേറ്‍ഡ് മാറ്റിയിട്ടില്ല"
+
+#: modules/pam_pwhistory/pam_pwhistory.c:235
+#: modules/pam_pwhistory/pam_pwhistory.c:295
+#: modules/pam_unix/pam_unix_passwd.c:470
+msgid "Password has been already used. Choose another."
+msgstr "പാസ്‌വേറ്‍ഡ് നിലവില്‍ ഉപയോഗിത്തിലുള്ളതാണ്. മറ്റൊന്ന് നല്‍കുക."
+
 #: modules/pam_selinux/pam_selinux.c:172
 #, fuzzy
 msgid "Would you like to enter a security context? [N] "
@@ -518,10 +533,6 @@ msgstr "NIS പാസ്‌വേറ്‍ഡ് മാറ്റുവാന്
 msgid "You must choose a longer password"
 msgstr "ഇതിലും വലിയ പാസ്‌വേറ്‍ഡ് തിരഞ്ഞെടുക്കുക"
 
-#: modules/pam_unix/pam_unix_passwd.c:470
-msgid "Password has been already used. Choose another."
-msgstr "പാസ്‌വേറ്‍ഡ് നിലവില്‍ ഉപയോഗിത്തിലുള്ളതാണ്. മറ്റൊന്ന് നല്‍കുക."
-
 #: modules/pam_unix/pam_unix_passwd.c:571
 #, fuzzy, c-format
 msgid "Changing password for %s."
@@ -543,6 +554,10 @@ msgstr "പുതിയ UNIX പാസ്‌വേറ്‍ഡ് നല്‍
 msgid "Retype new UNIX password: "
 msgstr "പുതിയ UNIX പാസ്‌വേറ്‍ഡ് വീണ്ടും ടൈപ്പ് ചെയ്യുക: "
 
+#, fuzzy
+#~ msgid "Password has been used already. Choose another."
+#~ msgstr "പാസ്‌വേറ്‍ഡ് നിലവില്‍ ഉപയോഗിത്തിലുള്ളതാണ്. മറ്റൊന്ന് നല്‍കുക."
+
 #, fuzzy
 #~ msgid "Error translating default context."
 #~ msgstr "%s ആണ് നിങ്ങളുടെ ഡീഫോള്‍ട്ട് കോണ്‍ടെക്സ്റ്റ്. \n"
index 70244f3cf6ee319c63be9bdac8b699bc10f4fa17..794152c8006e6cb2edfa99aa038667684bdab8b7 100644 (file)
--- a/po/nb.po
+++ b/po/nb.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Linux-PAM\n"
 "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n"
-"POT-Creation-Date: 2008-09-30 16:45+0200\n"
+"POT-Creation-Date: 2008-10-10 08:49+0200\n"
 "PO-Revision-Date: 2008-04-30 12:59+0200\n"
 "Last-Translator: Olav Pettershagen <olav.pet@online.no>\n"
 "Language-Team:  <nb@li.org>\n"
@@ -166,16 +166,19 @@ msgid "Unknown PAM error"
 msgstr "Ukjent PAM-feil"
 
 #: modules/pam_cracklib/pam_cracklib.c:64
+#: modules/pam_pwhistory/pam_pwhistory.c:61
 #, c-format
 msgid "New %s%spassword: "
 msgstr "Nytt %s%spassord: "
 
 #: modules/pam_cracklib/pam_cracklib.c:66
+#: modules/pam_pwhistory/pam_pwhistory.c:62
 #, c-format
 msgid "Retype new %s%spassword: "
 msgstr "Bekreft nytt %s%s-passord: "
 
 #: modules/pam_cracklib/pam_cracklib.c:67
+#: modules/pam_pwhistory/pam_pwhistory.c:63
 msgid "Sorry, passwords do not match."
 msgstr "Beklager, ikke samsvar mellom passord."
 
@@ -353,6 +356,18 @@ msgstr "Oppretter katalog «%s»."
 msgid "Unable to create directory %s: %m"
 msgstr "Kan ikke opprette katalog %s: %m"
 
+#: modules/pam_pwhistory/pam_pwhistory.c:224
+#: modules/pam_pwhistory/pam_pwhistory.c:258
+#, fuzzy
+msgid "Password change aborted."
+msgstr "Passord uendret"
+
+#: modules/pam_pwhistory/pam_pwhistory.c:235
+#: modules/pam_pwhistory/pam_pwhistory.c:295
+#: modules/pam_unix/pam_unix_passwd.c:470
+msgid "Password has been already used. Choose another."
+msgstr "Passordet er allerede benyttet. Velg et annet."
+
 #: modules/pam_selinux/pam_selinux.c:172
 msgid "Would you like to enter a security context? [N] "
 msgstr "Vil du angi sikkerhetskontekst? [N] "
@@ -511,10 +526,6 @@ msgstr "NIS-passord kunne ikke endres."
 msgid "You must choose a longer password"
 msgstr "Du må velge et lengre passord"
 
-#: modules/pam_unix/pam_unix_passwd.c:470
-msgid "Password has been already used. Choose another."
-msgstr "Passordet er allerede benyttet. Velg et annet."
-
 #: modules/pam_unix/pam_unix_passwd.c:571
 #, c-format
 msgid "Changing password for %s."
@@ -536,5 +547,9 @@ msgstr "Angi nytt UNIX-passord: "
 msgid "Retype new UNIX password: "
 msgstr "Bekreft nytt UNIX-passord: "
 
+#, fuzzy
+#~ msgid "Password has been used already. Choose another."
+#~ msgstr "Passordet er allerede benyttet. Velg et annet."
+
 #~ msgid "Requested MLS level not in permitted range"
 #~ msgstr "Forespurt MLS-nivå er ikke i tillatt område"
index d05579299362a03ac0fe197854bca637b5b8d8af..941ee9ab3cc8f79a0e38e13d8caf25d73636c1f0 100644 (file)
--- a/po/nl.po
+++ b/po/nl.po
@@ -9,7 +9,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Linux-PAM\n"
 "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n"
-"POT-Creation-Date: 2008-09-30 16:45+0200\n"
+"POT-Creation-Date: 2008-10-10 08:49+0200\n"
 "PO-Revision-Date: 2008-02-22 23:33+0100\n"
 "Last-Translator: Peter van Egdom <p.van.egdom@gmail.com>\n"
 "Language-Team: Dutch <fedora-trans-list@redhat.com>\n"
@@ -169,16 +169,19 @@ msgid "Unknown PAM error"
 msgstr "Onbekende PAM-fout"
 
 #: modules/pam_cracklib/pam_cracklib.c:64
+#: modules/pam_pwhistory/pam_pwhistory.c:61
 #, c-format
 msgid "New %s%spassword: "
 msgstr "Nieuw %s%swachtwoord: "
 
 #: modules/pam_cracklib/pam_cracklib.c:66
+#: modules/pam_pwhistory/pam_pwhistory.c:62
 #, c-format
 msgid "Retype new %s%spassword: "
 msgstr "Nieuw %s%swachtwoord herhalen: "
 
 #: modules/pam_cracklib/pam_cracklib.c:67
+#: modules/pam_pwhistory/pam_pwhistory.c:63
 msgid "Sorry, passwords do not match."
 msgstr "Sorry, wachtwoorden komen niet overeen."
 
@@ -356,6 +359,18 @@ msgstr "Aanmaken van map '%s'."
 msgid "Unable to create directory %s: %m"
 msgstr "Niet in staat om map %s aan te maken: %m"
 
+#: modules/pam_pwhistory/pam_pwhistory.c:224
+#: modules/pam_pwhistory/pam_pwhistory.c:258
+#, fuzzy
+msgid "Password change aborted."
+msgstr "Wachtwoord is niet gewijzigd"
+
+#: modules/pam_pwhistory/pam_pwhistory.c:235
+#: modules/pam_pwhistory/pam_pwhistory.c:295
+#: modules/pam_unix/pam_unix_passwd.c:470
+msgid "Password has been already used. Choose another."
+msgstr "Wachtwoord is al gebruikt. Kies een ander wachtwoord."
+
 #: modules/pam_selinux/pam_selinux.c:172
 msgid "Would you like to enter a security context? [N] "
 msgstr "Wilt u een beveiligingscontext invoeren? [N] "
@@ -517,10 +532,6 @@ msgstr "NIS-wachtwoord kon niet worden gewijzigd."
 msgid "You must choose a longer password"
 msgstr "U moet een langer wachtwoord kiezen"
 
-#: modules/pam_unix/pam_unix_passwd.c:470
-msgid "Password has been already used. Choose another."
-msgstr "Wachtwoord is al gebruikt. Kies een ander wachtwoord."
-
 #: modules/pam_unix/pam_unix_passwd.c:571
 #, c-format
 msgid "Changing password for %s."
@@ -542,6 +553,10 @@ msgstr "Nieuw UNIX-wachtwoord invoeren: "
 msgid "Retype new UNIX password: "
 msgstr "Nieuw UNIX-wachtwoord herhalen: "
 
+#, fuzzy
+#~ msgid "Password has been used already. Choose another."
+#~ msgstr "Wachtwoord is al gebruikt. Kies een ander wachtwoord."
+
 #~ msgid "Requested MLS level not in permitted range"
 #~ msgstr "Aangevraagd MLS-niveau niet in toegestaan bereik"
 
index 176314c91ea9c654de2a242b71a04d531d78bd1f..0ac767fa8a5f8ef39045b92b7ef77f8ba844f50d 100644 (file)
--- a/po/or.po
+++ b/po/or.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Linux-PAM.tip.or\n"
 "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n"
-"POT-Creation-Date: 2008-09-30 16:45+0200\n"
+"POT-Creation-Date: 2008-10-10 08:49+0200\n"
 "PO-Revision-Date: 2008-09-30 11:42+0530\n"
 "Last-Translator: Manoj Kumar Giri <mgiri@redhat.com>\n"
 "Language-Team: Oriya\n"
@@ -171,16 +171,19 @@ msgid "Unknown PAM error"
 msgstr "ଅଜଣା PAM ତୃଟି"
 
 #: modules/pam_cracklib/pam_cracklib.c:64
+#: modules/pam_pwhistory/pam_pwhistory.c:61
 #, c-format
 msgid "New %s%spassword: "
 msgstr "ନୂତନ %s%s ପ୍ରବେଶ ସଙ୍କେତ: "
 
 #: modules/pam_cracklib/pam_cracklib.c:66
+#: modules/pam_pwhistory/pam_pwhistory.c:62
 #, c-format
 msgid "Retype new %s%spassword: "
 msgstr "ନୂତନ %s%s ପ୍ରବେଶ ସଙ୍କେତକୁ ପୁନର୍ବାର ଟାଇପ କରନ୍ତୁ: "
 
 #: modules/pam_cracklib/pam_cracklib.c:67
+#: modules/pam_pwhistory/pam_pwhistory.c:63
 msgid "Sorry, passwords do not match."
 msgstr "କ୍ଷମା କରିବେ, ପ୍ରବେଶ ସଙ୍କେତ ମିଶୁ ନାହିଁ।"
 
@@ -358,6 +361,18 @@ msgstr "ଡ଼ିରେକ୍ଟୋରୀ '%s' ନିର୍ମାଣ କରୁ
 msgid "Unable to create directory %s: %m"
 msgstr "ଡ଼ିରେକ୍ଟୋରୀ '%s' ନିର୍ମାଣ କରିବାରେ ଅସମର୍ଥ: %m"
 
+#: modules/pam_pwhistory/pam_pwhistory.c:224
+#: modules/pam_pwhistory/pam_pwhistory.c:258
+#, fuzzy
+msgid "Password change aborted."
+msgstr "ପ୍ରବେଶ ସଙ୍କେତ ଅପରିବର୍ତ୍ତିତ ଅଛି"
+
+#: modules/pam_pwhistory/pam_pwhistory.c:235
+#: modules/pam_pwhistory/pam_pwhistory.c:295
+#: modules/pam_unix/pam_unix_passwd.c:470
+msgid "Password has been already used. Choose another."
+msgstr "ପ୍ରବେଶ ସଙ୍କେତଟି ପୂର୍ବରୁ ବ୍ଯବହୃତ ହେଉଛି। ଅନ୍ଯ ଗୋଟିଏ ପ୍ରବେଶ ସଙ୍କେତ ଚୟନ କରନ୍ତୁ।"
+
 #: modules/pam_selinux/pam_selinux.c:172
 msgid "Would you like to enter a security context? [N] "
 msgstr "ଆପଣ ଗୋଟିଏ ସୁରକ୍ଷା ପ୍ରସଙ୍ଗ ଭରଣ କରିବା ପାଇଁ ଚାହୁଁଛନ୍ତି କି? [N]"
@@ -517,10 +532,6 @@ msgstr "NIS ପ୍ରବେଶ ସଙ୍କେତକୁ ବଦଳାଇ ହେ
 msgid "You must choose a longer password"
 msgstr "ଆପଣ ଗୋଟିଏ ଲମ୍ବା ପ୍ରବେଶ ସଙ୍କେତ ଚୟନ କରିବା ଉଚିତ"
 
-#: modules/pam_unix/pam_unix_passwd.c:470
-msgid "Password has been already used. Choose another."
-msgstr "ପ୍ରବେଶ ସଙ୍କେତଟି ପୂର୍ବରୁ ବ୍ଯବହୃତ ହେଉଛି। ଅନ୍ଯ ଗୋଟିଏ ପ୍ରବେଶ ସଙ୍କେତ ଚୟନ କରନ୍ତୁ।"
-
 #: modules/pam_unix/pam_unix_passwd.c:571
 #, c-format
 msgid "Changing password for %s."
@@ -542,5 +553,9 @@ msgstr "ନୂତନ UNIX ପ୍ରବେଶ ସଙ୍କେତ ଭରଣ କର
 msgid "Retype new UNIX password: "
 msgstr "ନୂତନ UNIX ପ୍ରବେଶ ସଙ୍କେତକୁ ପୁନର୍ବାର ଟାଇପ କରନ୍ତୁ: "
 
+#, fuzzy
+#~ msgid "Password has been used already. Choose another."
+#~ msgstr "ପ୍ରବେଶ ସଙ୍କେତଟି ପୂର୍ବରୁ ବ୍ଯବହୃତ ହେଉଛି। ଅନ୍ଯ ଗୋଟିଏ ପ୍ରବେଶ ସଙ୍କେତ ଚୟନ କରନ୍ତୁ।"
+
 #~ msgid "Requested MLS level not in permitted range"
 #~ msgstr "ଅନୁରୋଧିତ MSL ସ୍ତର ଅନୁମୋଦିତ ପରିସର ମଧ୍ଯରେ ନାହିଁ"
index 8de6229b426496ba4ff232e10f6584f01ad37e52..be1a2e5711e09d57370a652aaf46f26b2d276ba1 100644 (file)
--- a/po/pa.po
+++ b/po/pa.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Linux-PAM.pa\n"
 "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n"
-"POT-Creation-Date: 2008-09-30 16:45+0200\n"
+"POT-Creation-Date: 2008-10-10 08:49+0200\n"
 "PO-Revision-Date: 2005-08-06 08:34+0530\n"
 "Last-Translator: Amanpreet Singh Alam[ਆਲਮ] <amanpreetalam@yahoo.com>\n"
 "Language-Team: Panjabi <pa@li.org>\n"
@@ -169,16 +169,19 @@ msgid "Unknown PAM error"
 msgstr "ਅਣਜਾਣ PAM ਗਲਤੀ"
 
 #: modules/pam_cracklib/pam_cracklib.c:64
+#: modules/pam_pwhistory/pam_pwhistory.c:61
 #, fuzzy, c-format
 msgid "New %s%spassword: "
 msgstr "ਗੁਪਤ-ਕੋਡ ਨਾ-ਤਬਦੀਲ ਹੈ"
 
 #: modules/pam_cracklib/pam_cracklib.c:66
+#: modules/pam_pwhistory/pam_pwhistory.c:62
 #, fuzzy, c-format
 msgid "Retype new %s%spassword: "
 msgstr "ਨਵਾਂ STRESS ਗੁਪਤ-ਕੋਡ ਮੁੜ-ਲਿਖੋ: "
 
 #: modules/pam_cracklib/pam_cracklib.c:67
+#: modules/pam_pwhistory/pam_pwhistory.c:63
 #, fuzzy
 msgid "Sorry, passwords do not match."
 msgstr "NIS ਗੁਪਤ-ਕੋਡ ਤਬਦੀਲ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ ਹੈ।"
@@ -359,6 +362,18 @@ msgstr ""
 msgid "Unable to create directory %s: %m"
 msgstr ""
 
+#: modules/pam_pwhistory/pam_pwhistory.c:224
+#: modules/pam_pwhistory/pam_pwhistory.c:258
+#, fuzzy
+msgid "Password change aborted."
+msgstr "ਗੁਪਤ-ਕੋਡ ਨਾ-ਤਬਦੀਲ ਹੈ"
+
+#: modules/pam_pwhistory/pam_pwhistory.c:235
+#: modules/pam_pwhistory/pam_pwhistory.c:295
+#: modules/pam_unix/pam_unix_passwd.c:470
+msgid "Password has been already used. Choose another."
+msgstr "ਗੁਪਤ-ਕੋਡ ਪਹਿਲਾਂ ਵੀ ਵਰਤਿਆ ਗਿਆ ਹੈ। ਵੱਖਰਾ ਚੁਣੋ।"
+
 #: modules/pam_selinux/pam_selinux.c:172
 #, fuzzy
 msgid "Would you like to enter a security context? [N] "
@@ -521,10 +536,6 @@ msgstr "NIS ਗੁਪਤ-ਕੋਡ ਤਬਦੀਲ ਨਹੀਂ ਕੀਤਾ ਜ
 msgid "You must choose a longer password"
 msgstr "ਤੁਹਾਨੂੰ ਲੰਮੇ ਗੁਪਤ-ਕੋਡ ਦੀ ਚੋਣ ਕਰਨੀ ਚਾਹੀਦੀ ਹੈ"
 
-#: modules/pam_unix/pam_unix_passwd.c:470
-msgid "Password has been already used. Choose another."
-msgstr "ਗੁਪਤ-ਕੋਡ ਪਹਿਲਾਂ ਵੀ ਵਰਤਿਆ ਗਿਆ ਹੈ। ਵੱਖਰਾ ਚੁਣੋ।"
-
 #: modules/pam_unix/pam_unix_passwd.c:571
 #, c-format
 msgid "Changing password for %s."
@@ -548,6 +559,10 @@ msgstr "ਨਵਾਂ STRESS ਗੁਪਤ-ਕੋਡ ਦਿਓ: "
 msgid "Retype new UNIX password: "
 msgstr "ਨਵਾਂ STRESS ਗੁਪਤ-ਕੋਡ ਮੁੜ-ਲਿਖੋ: "
 
+#, fuzzy
+#~ msgid "Password has been used already. Choose another."
+#~ msgstr "ਗੁਪਤ-ਕੋਡ ਪਹਿਲਾਂ ਵੀ ਵਰਤਿਆ ਗਿਆ ਹੈ। ਵੱਖਰਾ ਚੁਣੋ।"
+
 #, fuzzy
 #~ msgid "Error translating default context."
 #~ msgstr "ਤੁਹਾਡਾ ਮੁੱਲ ਪਰਸੰਗ %s ਹੈ \n"
index ad5a8c4423e77e25b032ff4c0a17dc42c981be26..9f43fff1df2d52a1fdb6546d35cb3ec2f1ca2a07 100644 (file)
--- a/po/pl.po
+++ b/po/pl.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: pl\n"
 "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n"
-"POT-Creation-Date: 2008-09-30 16:45+0200\n"
+"POT-Creation-Date: 2008-10-10 08:49+0200\n"
 "PO-Revision-Date: 2008-03-03 21:59+0200\n"
 "Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
 "Language-Team: Polish <pl@li.org>\n"
@@ -168,16 +168,19 @@ msgid "Unknown PAM error"
 msgstr "Nieznany błąd PAM"
 
 #: modules/pam_cracklib/pam_cracklib.c:64
+#: modules/pam_pwhistory/pam_pwhistory.c:61
 #, c-format
 msgid "New %s%spassword: "
 msgstr "Nowe hasło %s%s: "
 
 #: modules/pam_cracklib/pam_cracklib.c:66
+#: modules/pam_pwhistory/pam_pwhistory.c:62
 #, c-format
 msgid "Retype new %s%spassword: "
 msgstr "Ponownie podaj nowe hasło %s%s: "
 
 #: modules/pam_cracklib/pam_cracklib.c:67
+#: modules/pam_pwhistory/pam_pwhistory.c:63
 msgid "Sorry, passwords do not match."
 msgstr "Podane hasła nie są zgodne."
 
@@ -356,6 +359,18 @@ msgstr "Tworzenie folderu \"%s\"."
 msgid "Unable to create directory %s: %m"
 msgstr "Nie można utworzyć folderu %s: %m"
 
+#: modules/pam_pwhistory/pam_pwhistory.c:224
+#: modules/pam_pwhistory/pam_pwhistory.c:258
+#, fuzzy
+msgid "Password change aborted."
+msgstr "Hasło nie zostało zmienione"
+
+#: modules/pam_pwhistory/pam_pwhistory.c:235
+#: modules/pam_pwhistory/pam_pwhistory.c:295
+#: modules/pam_unix/pam_unix_passwd.c:470
+msgid "Password has been already used. Choose another."
+msgstr "Hasło było już używane. Wybierz inne."
+
 #: modules/pam_selinux/pam_selinux.c:172
 msgid "Would you like to enter a security context? [N] "
 msgstr "Czy chcesz podać kontekst bezpieczeństwa? [N]"
@@ -516,10 +531,6 @@ msgstr "Nie można zmienić hasła NIS."
 msgid "You must choose a longer password"
 msgstr "Wybierz dłuższe hasło"
 
-#: modules/pam_unix/pam_unix_passwd.c:470
-msgid "Password has been already used. Choose another."
-msgstr "Hasło było już używane. Wybierz inne."
-
 #: modules/pam_unix/pam_unix_passwd.c:571
 #, c-format
 msgid "Changing password for %s."
@@ -541,5 +552,9 @@ msgstr "Podaj nowe hasło UNIX: "
 msgid "Retype new UNIX password: "
 msgstr "Ponownie podaj hasło UNIX: "
 
+#, fuzzy
+#~ msgid "Password has been used already. Choose another."
+#~ msgstr "Hasło było już używane. Wybierz inne."
+
 #~ msgid "Requested MLS level not in permitted range"
 #~ msgstr "Żądany poziom MLS nie jest w dozwolonym zakresie"
index 9ffdc9ac87144a6e3ddcfa2fd6e071c81bcfb544..109b97491dd0a2c5d08e647078f9fdaa2e3bac0d 100644 (file)
--- a/po/pt.po
+++ b/po/pt.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Linux-PAM.pt\n"
 "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n"
-"POT-Creation-Date: 2008-09-30 16:45+0200\n"
+"POT-Creation-Date: 2008-10-10 08:49+0200\n"
 "PO-Revision-Date: 2006-05-03 21:54+0200\n"
 "Last-Translator: Antonio Cardoso Martins <digiplan@netvisao.pt>\n"
 "Language-Team: portuguese\n"
@@ -167,16 +167,19 @@ msgid "Unknown PAM error"
 msgstr "Erro PAM desconhecido"
 
 #: modules/pam_cracklib/pam_cracklib.c:64
+#: modules/pam_pwhistory/pam_pwhistory.c:61
 #, c-format
 msgid "New %s%spassword: "
 msgstr "Nova %s%spalavra passe: "
 
 #: modules/pam_cracklib/pam_cracklib.c:66
+#: modules/pam_pwhistory/pam_pwhistory.c:62
 #, c-format
 msgid "Retype new %s%spassword: "
 msgstr "Digite novamente a nova %s%spalavra passe: "
 
 #: modules/pam_cracklib/pam_cracklib.c:67
+#: modules/pam_pwhistory/pam_pwhistory.c:63
 msgid "Sorry, passwords do not match."
 msgstr "Lamento, as palavras passe não coincidem."
 
@@ -354,6 +357,18 @@ msgstr ""
 msgid "Unable to create directory %s: %m"
 msgstr ""
 
+#: modules/pam_pwhistory/pam_pwhistory.c:224
+#: modules/pam_pwhistory/pam_pwhistory.c:258
+#, fuzzy
+msgid "Password change aborted."
+msgstr "Palavra passe inalterada"
+
+#: modules/pam_pwhistory/pam_pwhistory.c:235
+#: modules/pam_pwhistory/pam_pwhistory.c:295
+#: modules/pam_unix/pam_unix_passwd.c:470
+msgid "Password has been already used. Choose another."
+msgstr "A palavra passe já foi anteriormente utilizada. Escolha outra."
+
 #: modules/pam_selinux/pam_selinux.c:172
 #, fuzzy
 msgid "Would you like to enter a security context? [N] "
@@ -520,10 +535,6 @@ msgstr "A palavra passe de NIS não pode ser alterada."
 msgid "You must choose a longer password"
 msgstr "Deve escolher uma palavra passe mais longa"
 
-#: modules/pam_unix/pam_unix_passwd.c:470
-msgid "Password has been already used. Choose another."
-msgstr "A palavra passe já foi anteriormente utilizada. Escolha outra."
-
 #: modules/pam_unix/pam_unix_passwd.c:571
 #, fuzzy, c-format
 msgid "Changing password for %s."
@@ -545,6 +556,10 @@ msgstr "Digite a nova palavra passe UNIX: "
 msgid "Retype new UNIX password: "
 msgstr "Digite novamente a nova palavra passe UNIX: "
 
+#, fuzzy
+#~ msgid "Password has been used already. Choose another."
+#~ msgstr "A palavra passe já foi anteriormente utilizada. Escolha outra."
+
 #, fuzzy
 #~ msgid "Error translating default context."
 #~ msgstr "O seu contexto pré-definido é %s: \n"
index 4d32d2dec72b29d1919e035dcb00dbd74ac2ad5c..0d41b5e65ce9f36056c0cd441f259e66eabd30d1 100644 (file)
@@ -9,7 +9,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Linux-PAM.tip\n"
 "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n"
-"POT-Creation-Date: 2008-09-30 16:45+0200\n"
+"POT-Creation-Date: 2008-10-10 08:49+0200\n"
 "PO-Revision-Date: 2008-08-18 13:41-0300\n"
 "Last-Translator: Taylon <taylonsilva@gmail.com>\n"
 "Language-Team: Brazilian Portuguese <fedora-trans-pt_br@redhat.com>\n"
@@ -169,16 +169,19 @@ msgid "Unknown PAM error"
 msgstr "Erro desconhecido no PAM"
 
 #: modules/pam_cracklib/pam_cracklib.c:64
+#: modules/pam_pwhistory/pam_pwhistory.c:61
 #, c-format
 msgid "New %s%spassword: "
 msgstr "Nova %s%ssenha:"
 
 #: modules/pam_cracklib/pam_cracklib.c:66
+#: modules/pam_pwhistory/pam_pwhistory.c:62
 #, c-format
 msgid "Retype new %s%spassword: "
 msgstr "Redigite a nova %s%ssenha:"
 
 #: modules/pam_cracklib/pam_cracklib.c:67
+#: modules/pam_pwhistory/pam_pwhistory.c:63
 msgid "Sorry, passwords do not match."
 msgstr "As senhas não são iguais."
 
@@ -356,6 +359,18 @@ msgstr "Criando o diretório '%s'."
 msgid "Unable to create directory %s: %m"
 msgstr "Impossível criar o diretório %s: %m"
 
+#: modules/pam_pwhistory/pam_pwhistory.c:224
+#: modules/pam_pwhistory/pam_pwhistory.c:258
+#, fuzzy
+msgid "Password change aborted."
+msgstr "Senha inalterada"
+
+#: modules/pam_pwhistory/pam_pwhistory.c:235
+#: modules/pam_pwhistory/pam_pwhistory.c:295
+#: modules/pam_unix/pam_unix_passwd.c:470
+msgid "Password has been already used. Choose another."
+msgstr "A senha já foi usada. Escolha outra."
+
 #: modules/pam_selinux/pam_selinux.c:172
 msgid "Would you like to enter a security context? [N] "
 msgstr "Deseja digitar um contexto de segurança? [N]"
@@ -514,10 +529,6 @@ msgstr "A senha NIS não pôde ser mudada."
 msgid "You must choose a longer password"
 msgstr "Escolha uma senha mais longa"
 
-#: modules/pam_unix/pam_unix_passwd.c:470
-msgid "Password has been already used. Choose another."
-msgstr "A senha já foi usada. Escolha outra."
-
 #: modules/pam_unix/pam_unix_passwd.c:571
 #, c-format
 msgid "Changing password for %s."
@@ -539,6 +550,10 @@ msgstr "Digite a nova senha UNIX:"
 msgid "Retype new UNIX password: "
 msgstr "Redigite a nova senha UNIX:"
 
+#, fuzzy
+#~ msgid "Password has been used already. Choose another."
+#~ msgstr "A senha já foi usada. Escolha outra."
+
 #~ msgid "Requested MLS level not in permitted range"
 #~ msgstr "Nível MLS requerido fora da faixa permitida"
 
index 50b69d26bcf966019161b59ee6db0f6b6caefb0e..2fda5d6c1509fbe87d801307397ba51fa6f98693 100644 (file)
--- a/po/ru.po
+++ b/po/ru.po
@@ -11,7 +11,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Linux-PAM.tip\n"
 "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n"
-"POT-Creation-Date: 2008-09-30 16:45+0200\n"
+"POT-Creation-Date: 2008-10-10 08:49+0200\n"
 "PO-Revision-Date: 2008-02-23 20:11+0300\n"
 "Last-Translator: Andrew Martynov <andrewm@inventa.ru>\n"
 "Language-Team: Russian <fedora-trans-ru@redhat,com>\n"
@@ -175,17 +175,20 @@ msgid "Unknown PAM error"
 msgstr "Неизвестная ошибка PAM"
 
 #: modules/pam_cracklib/pam_cracklib.c:64
+#: modules/pam_pwhistory/pam_pwhistory.c:61
 #, c-format
 msgid "New %s%spassword: "
 msgstr "Новый пароль %s%s: "
 
 # Keep the newlines and spaces after ':'!
 #: modules/pam_cracklib/pam_cracklib.c:66
+#: modules/pam_pwhistory/pam_pwhistory.c:62
 #, c-format
 msgid "Retype new %s%spassword: "
 msgstr "Повторите ввод нового пароля %s%s: "
 
 #: modules/pam_cracklib/pam_cracklib.c:67
+#: modules/pam_pwhistory/pam_pwhistory.c:63
 msgid "Sorry, passwords do not match."
 msgstr "Извините, но пароли не совпадают."
 
@@ -365,6 +368,19 @@ msgstr "Создание каталога '%s'."
 msgid "Unable to create directory %s: %m"
 msgstr "Невозможно создать каталог %s: %m"
 
+# password dialog title
+#: modules/pam_pwhistory/pam_pwhistory.c:224
+#: modules/pam_pwhistory/pam_pwhistory.c:258
+#, fuzzy
+msgid "Password change aborted."
+msgstr "Пароль не изменен"
+
+#: modules/pam_pwhistory/pam_pwhistory.c:235
+#: modules/pam_pwhistory/pam_pwhistory.c:295
+#: modules/pam_unix/pam_unix_passwd.c:470
+msgid "Password has been already used. Choose another."
+msgstr "Этот пароль уже был использован. Выберите другой."
+
 # power-off message
 #: modules/pam_selinux/pam_selinux.c:172
 msgid "Would you like to enter a security context? [N] "
@@ -532,10 +548,6 @@ msgstr "Пароль NIS изменить нельзя."
 msgid "You must choose a longer password"
 msgstr "Выберите пароль большей длины"
 
-#: modules/pam_unix/pam_unix_passwd.c:470
-msgid "Password has been already used. Choose another."
-msgstr "Этот пароль уже был использован. Выберите другой."
-
 #: modules/pam_unix/pam_unix_passwd.c:571
 #, c-format
 msgid "Changing password for %s."
@@ -559,6 +571,10 @@ msgstr "Введите новый пароль UNIX: "
 msgid "Retype new UNIX password: "
 msgstr "Повторите ввод нового пароля UNIX: "
 
+#, fuzzy
+#~ msgid "Password has been used already. Choose another."
+#~ msgstr "Этот пароль уже был использован. Выберите другой."
+
 #~ msgid "Requested MLS level not in permitted range"
 #~ msgstr "Запрошенный уровень MLS вне границ разрешенного диапазона"
 
index b7ef2aca5114ee9e5c935f1edb147ee31f3be487..55cb7bb684eefd48e5ab8d4b779cd666128111dd 100644 (file)
--- a/po/si.po
+++ b/po/si.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: si\n"
 "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n"
-"POT-Creation-Date: 2008-09-30 16:45+0200\n"
+"POT-Creation-Date: 2008-10-10 08:49+0200\n"
 "PO-Revision-Date: 2007-06-22 12:24+0530\n"
 "Last-Translator: Danishka Navin <snavin@redhat.com>\n"
 "Language-Team: Sinhala <en@li.org>\n"
@@ -167,16 +167,19 @@ msgid "Unknown PAM error"
 msgstr "නොදන්නා PAM දෝෂය"
 
 #: modules/pam_cracklib/pam_cracklib.c:64
+#: modules/pam_pwhistory/pam_pwhistory.c:61
 #, c-format
 msgid "New %s%spassword: "
 msgstr "නව %s%sරහස්පදය: "
 
 #: modules/pam_cracklib/pam_cracklib.c:66
+#: modules/pam_pwhistory/pam_pwhistory.c:62
 #, c-format
 msgid "Retype new %s%spassword: "
 msgstr "නව %s%sරහස්පදය නැවත ඇතුළත් කරන්න: "
 
 #: modules/pam_cracklib/pam_cracklib.c:67
+#: modules/pam_pwhistory/pam_pwhistory.c:63
 msgid "Sorry, passwords do not match."
 msgstr "සමාවෙන්න, රහස්පද ගැලපෙන්නේ නැත."
 
@@ -354,6 +357,18 @@ msgstr ""
 msgid "Unable to create directory %s: %m"
 msgstr ""
 
+#: modules/pam_pwhistory/pam_pwhistory.c:224
+#: modules/pam_pwhistory/pam_pwhistory.c:258
+#, fuzzy
+msgid "Password change aborted."
+msgstr "රහස්පදය වෙනස් නොවිනි"
+
+#: modules/pam_pwhistory/pam_pwhistory.c:235
+#: modules/pam_pwhistory/pam_pwhistory.c:295
+#: modules/pam_unix/pam_unix_passwd.c:470
+msgid "Password has been already used. Choose another."
+msgstr "රහස්පදය දැනටමත් භාවිතා වේ. වෙනත් එකක් තෝරාගන්න."
+
 #: modules/pam_selinux/pam_selinux.c:172
 #, fuzzy
 msgid "Would you like to enter a security context? [N] "
@@ -516,10 +531,6 @@ msgstr "NIS රහස්පදය වෙනස් කළ නොහැක."
 msgid "You must choose a longer password"
 msgstr "ඔබ විසින් දිගු රහස්පදයක් තෝරාගත යුතුම වේ"
 
-#: modules/pam_unix/pam_unix_passwd.c:470
-msgid "Password has been already used. Choose another."
-msgstr "රහස්පදය දැනටමත් භාවිතා වේ. වෙනත් එකක් තෝරාගන්න."
-
 #: modules/pam_unix/pam_unix_passwd.c:571
 #, fuzzy, c-format
 msgid "Changing password for %s."
@@ -541,6 +552,10 @@ msgstr "නව UNIX රහස්පදය ඇතුළත් කරන්න:"
 msgid "Retype new UNIX password: "
 msgstr "නව UNIX රහස්පදය නැවත ඇතුළත් කරන්න:"
 
+#, fuzzy
+#~ msgid "Password has been used already. Choose another."
+#~ msgstr "රහස්පදය දැනටමත් භාවිතා වේ. වෙනත් එකක් තෝරාගන්න."
+
 #, fuzzy
 #~ msgid "Error translating default context."
 #~ msgstr "ඔබගේ ප්‍රකෘති ප්‍රකරණය %s වේ. \n"
index ddbe5ab7ac025035ee6981f218eb5dc6b338054f..ddc6507837a4701765e716b07cc711bfef2a532e 100644 (file)
--- a/po/sr.po
+++ b/po/sr.po
@@ -9,7 +9,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Linux-PAM\n"
 "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n"
-"POT-Creation-Date: 2008-09-30 16:45+0200\n"
+"POT-Creation-Date: 2008-10-10 08:49+0200\n"
 "PO-Revision-Date: 2008-04-05 10:48+0100\n"
 "Last-Translator: Miloš Komarčević <kmilos@gmail.com>\n"
 "Language-Team: Serbian (sr) <fedora-trans-sr@redhat.com>\n"
@@ -171,16 +171,19 @@ msgid "Unknown PAM error"
 msgstr "Непозната PAM грешка"
 
 #: modules/pam_cracklib/pam_cracklib.c:64
+#: modules/pam_pwhistory/pam_pwhistory.c:61
 #, c-format
 msgid "New %s%spassword: "
 msgstr "Нова %s%sлозинка: "
 
 #: modules/pam_cracklib/pam_cracklib.c:66
+#: modules/pam_pwhistory/pam_pwhistory.c:62
 #, c-format
 msgid "Retype new %s%spassword: "
 msgstr "Поновите нову %s%sлозинку: "
 
 #: modules/pam_cracklib/pam_cracklib.c:67
+#: modules/pam_pwhistory/pam_pwhistory.c:63
 msgid "Sorry, passwords do not match."
 msgstr "Извините, лозинке се не подударају."
 
@@ -359,6 +362,18 @@ msgstr "Правим директоријум „%s“."
 msgid "Unable to create directory %s: %m"
 msgstr "Не могу да направим директоријум %s: %m"
 
+#: modules/pam_pwhistory/pam_pwhistory.c:224
+#: modules/pam_pwhistory/pam_pwhistory.c:258
+#, fuzzy
+msgid "Password change aborted."
+msgstr "Лозинка непромењена"
+
+#: modules/pam_pwhistory/pam_pwhistory.c:235
+#: modules/pam_pwhistory/pam_pwhistory.c:295
+#: modules/pam_unix/pam_unix_passwd.c:470
+msgid "Password has been already used. Choose another."
+msgstr "Лозинка је већ у употреби. Изаберите другу."
+
 #: modules/pam_selinux/pam_selinux.c:172
 msgid "Would you like to enter a security context? [N] "
 msgstr "Да ли желите да уђете у сигурносни контекст? [Н]"
@@ -520,10 +535,6 @@ msgstr "NIS лозинка не може бити промењена."
 msgid "You must choose a longer password"
 msgstr "Морате изабрати дужу лозинку"
 
-#: modules/pam_unix/pam_unix_passwd.c:470
-msgid "Password has been already used. Choose another."
-msgstr "Лозинка је већ у употреби. Изаберите другу."
-
 #: modules/pam_unix/pam_unix_passwd.c:571
 #, c-format
 msgid "Changing password for %s."
@@ -545,5 +556,9 @@ msgstr "Унесите нову UNIX лозинку: "
 msgid "Retype new UNIX password: "
 msgstr "Поново унесите нову UNIX лозинку: "
 
+#, fuzzy
+#~ msgid "Password has been used already. Choose another."
+#~ msgstr "Лозинка је већ у употреби. Изаберите другу."
+
 #~ msgid "Requested MLS level not in permitted range"
 #~ msgstr "Захтевани MLS ниво није у дозвољеном опсегу"
index 24abc6876148b72804975e9e33042244136ad0a3..03568596c66723d25dd423b8144ae4a151f92351 100644 (file)
@@ -9,7 +9,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Linux-PAM\n"
 "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n"
-"POT-Creation-Date: 2008-09-30 16:45+0200\n"
+"POT-Creation-Date: 2008-10-10 08:49+0200\n"
 "PO-Revision-Date: 2008-04-05 10:48+0100\n"
 "Last-Translator: Miloš Komarčević <kmilos@gmail.com>\n"
 "Language-Team: Serbian (sr) <fedora-trans-sr@redhat.com>\n"
@@ -171,16 +171,19 @@ msgid "Unknown PAM error"
 msgstr "Nepoznata PAM greška"
 
 #: modules/pam_cracklib/pam_cracklib.c:64
+#: modules/pam_pwhistory/pam_pwhistory.c:61
 #, c-format
 msgid "New %s%spassword: "
 msgstr "Nova %s%slozinka: "
 
 #: modules/pam_cracklib/pam_cracklib.c:66
+#: modules/pam_pwhistory/pam_pwhistory.c:62
 #, c-format
 msgid "Retype new %s%spassword: "
 msgstr "Ponovite novu %s%slozinku: "
 
 #: modules/pam_cracklib/pam_cracklib.c:67
+#: modules/pam_pwhistory/pam_pwhistory.c:63
 msgid "Sorry, passwords do not match."
 msgstr "Izvinite, lozinke se ne podudaraju."
 
@@ -359,6 +362,18 @@ msgstr "Pravim direktorijum „%s“."
 msgid "Unable to create directory %s: %m"
 msgstr "Ne mogu da napravim direktorijum %s: %m"
 
+#: modules/pam_pwhistory/pam_pwhistory.c:224
+#: modules/pam_pwhistory/pam_pwhistory.c:258
+#, fuzzy
+msgid "Password change aborted."
+msgstr "Lozinka nepromenjena"
+
+#: modules/pam_pwhistory/pam_pwhistory.c:235
+#: modules/pam_pwhistory/pam_pwhistory.c:295
+#: modules/pam_unix/pam_unix_passwd.c:470
+msgid "Password has been already used. Choose another."
+msgstr "Lozinka je već u upotrebi. Izaberite drugu."
+
 #: modules/pam_selinux/pam_selinux.c:172
 msgid "Would you like to enter a security context? [N] "
 msgstr "Da li želite da uđete u sigurnosni kontekst? [N]"
@@ -520,10 +535,6 @@ msgstr "NIS lozinka ne može biti promenjena."
 msgid "You must choose a longer password"
 msgstr "Morate izabrati dužu lozinku"
 
-#: modules/pam_unix/pam_unix_passwd.c:470
-msgid "Password has been already used. Choose another."
-msgstr "Lozinka je već u upotrebi. Izaberite drugu."
-
 #: modules/pam_unix/pam_unix_passwd.c:571
 #, c-format
 msgid "Changing password for %s."
@@ -545,5 +556,9 @@ msgstr "Unesite novu UNIX lozinku: "
 msgid "Retype new UNIX password: "
 msgstr "Ponovo unesite novu UNIX lozinku: "
 
+#, fuzzy
+#~ msgid "Password has been used already. Choose another."
+#~ msgstr "Lozinka je već u upotrebi. Izaberite drugu."
+
 #~ msgid "Requested MLS level not in permitted range"
 #~ msgstr "Zahtevani MLS nivo nije u dozvoljenom opsegu"
index 6eb6e9bf0b90544d95c7a2a051eb9e3774e54ff9..c5f879c6ba3844f51828c8427905af46bc159039 100644 (file)
--- a/po/sv.po
+++ b/po/sv.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Linux-PAM\n"
 "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n"
-"POT-Creation-Date: 2008-09-30 16:45+0200\n"
+"POT-Creation-Date: 2008-10-10 08:49+0200\n"
 "PO-Revision-Date: 2007-12-24 13:39+0100\n"
 "Last-Translator: Christer Andersson <klamm@comhem.se>\n"
 "Language-Team: Swedish <debian-l10n-swedish@lists.debian.org>\n"
@@ -166,16 +166,19 @@ msgid "Unknown PAM error"
 msgstr "Okänt PAM-fel"
 
 #: modules/pam_cracklib/pam_cracklib.c:64
+#: modules/pam_pwhistory/pam_pwhistory.c:61
 #, c-format
 msgid "New %s%spassword: "
 msgstr "Nytt %s%slösenord: "
 
 #: modules/pam_cracklib/pam_cracklib.c:66
+#: modules/pam_pwhistory/pam_pwhistory.c:62
 #, c-format
 msgid "Retype new %s%spassword: "
 msgstr "Ange nytt %s%slösenord igen: "
 
 #: modules/pam_cracklib/pam_cracklib.c:67
+#: modules/pam_pwhistory/pam_pwhistory.c:63
 msgid "Sorry, passwords do not match."
 msgstr "Ledsen, lösenorden stämmer inte överens."
 
@@ -353,6 +356,18 @@ msgstr "Skapar katalogen \"%s\"."
 msgid "Unable to create directory %s: %m"
 msgstr "Kan inte skapa katalogen %s: %m"
 
+#: modules/pam_pwhistory/pam_pwhistory.c:224
+#: modules/pam_pwhistory/pam_pwhistory.c:258
+#, fuzzy
+msgid "Password change aborted."
+msgstr "Oförändrat lösenord"
+
+#: modules/pam_pwhistory/pam_pwhistory.c:235
+#: modules/pam_pwhistory/pam_pwhistory.c:295
+#: modules/pam_unix/pam_unix_passwd.c:470
+msgid "Password has been already used. Choose another."
+msgstr "Lösenordet har redan används. Välj ett annat."
+
 #: modules/pam_selinux/pam_selinux.c:172
 msgid "Would you like to enter a security context? [N] "
 msgstr "Vill du ange en säkerhetskontext? [N]"
@@ -511,10 +526,6 @@ msgstr "NIS-l
 msgid "You must choose a longer password"
 msgstr "Du måste välja ett längre lösenord"
 
-#: modules/pam_unix/pam_unix_passwd.c:470
-msgid "Password has been already used. Choose another."
-msgstr "Lösenordet har redan används. Välj ett annat."
-
 #: modules/pam_unix/pam_unix_passwd.c:571
 #, c-format
 msgid "Changing password for %s."
@@ -536,6 +547,10 @@ msgstr "Ange nytt UNIX-l
 msgid "Retype new UNIX password: "
 msgstr "Ange nytt UNIX-lösenord igen: "
 
+#, fuzzy
+#~ msgid "Password has been used already. Choose another."
+#~ msgstr "Lösenordet har redan används. Välj ett annat."
+
 #~ msgid "Requested MLS level not in permitted range"
 #~ msgstr "Begärd MLS-nivå utanför giltigt intervall"
 
index 0de0379c44c3b02ee696b7d6c4488eebd5181b2e..4d1185385e906833d431de5b133c5c685f7aed0c 100644 (file)
--- a/po/ta.po
+++ b/po/ta.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ta\n"
 "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n"
-"POT-Creation-Date: 2008-09-30 16:45+0200\n"
+"POT-Creation-Date: 2008-10-10 08:49+0200\n"
 "PO-Revision-Date: 2007-06-21 15:33+0530\n"
 "Last-Translator: I felix <ifelix@redhat.com>\n"
 "Language-Team: Tamil <fedora-trans-ta@redhat.com>\n"
@@ -169,16 +169,19 @@ msgid "Unknown PAM error"
 msgstr "தெரியாத PAM பிழை"
 
 #: modules/pam_cracklib/pam_cracklib.c:64
+#: modules/pam_pwhistory/pam_pwhistory.c:61
 #, c-format
 msgid "New %s%spassword: "
 msgstr "புதிய %s%spassword: "
 
 #: modules/pam_cracklib/pam_cracklib.c:66
+#: modules/pam_pwhistory/pam_pwhistory.c:62
 #, c-format
 msgid "Retype new %s%spassword: "
 msgstr "புதிய %s%spassword மீண்டும் உள்ளிடவும்: "
 
 #: modules/pam_cracklib/pam_cracklib.c:67
+#: modules/pam_pwhistory/pam_pwhistory.c:63
 msgid "Sorry, passwords do not match."
 msgstr "கடவுச்சொல் பொருந்தவில்லை."
 
@@ -356,6 +359,18 @@ msgstr ""
 msgid "Unable to create directory %s: %m"
 msgstr ""
 
+#: modules/pam_pwhistory/pam_pwhistory.c:224
+#: modules/pam_pwhistory/pam_pwhistory.c:258
+#, fuzzy
+msgid "Password change aborted."
+msgstr "கடவுச்சொல் மாற்றப்படவில்லை"
+
+#: modules/pam_pwhistory/pam_pwhistory.c:235
+#: modules/pam_pwhistory/pam_pwhistory.c:295
+#: modules/pam_unix/pam_unix_passwd.c:470
+msgid "Password has been already used. Choose another."
+msgstr "கடவுச்சொல் ஏற்கனவே பயன்படுத்தப்பட்டது. வேறொன்றை பயன்படுத்தவும்."
+
 #: modules/pam_selinux/pam_selinux.c:172
 #, fuzzy
 msgid "Would you like to enter a security context? [N] "
@@ -518,10 +533,6 @@ msgstr "NIS கடவுச்சொல்லை மாற்ற முடிய
 msgid "You must choose a longer password"
 msgstr "நீங்கள் நீண்ட கடவுச்சொல்லை தேர்ந்தெடுக்க வேண்டும்"
 
-#: modules/pam_unix/pam_unix_passwd.c:470
-msgid "Password has been already used. Choose another."
-msgstr "கடவுச்சொல் ஏற்கனவே பயன்படுத்தப்பட்டது. வேறொன்றை பயன்படுத்தவும்."
-
 #: modules/pam_unix/pam_unix_passwd.c:571
 #, fuzzy, c-format
 msgid "Changing password for %s."
@@ -543,6 +554,10 @@ msgstr "புதிய UNIX கடவுச்சொல்லை உள்ள
 msgid "Retype new UNIX password: "
 msgstr "புதிய UNIX கடவுச்சொல்லை மீண்டும் உள்ளிடவும்: "
 
+#, fuzzy
+#~ msgid "Password has been used already. Choose another."
+#~ msgstr "கடவுச்சொல் ஏற்கனவே பயன்படுத்தப்பட்டது. வேறொன்றை பயன்படுத்தவும்."
+
 #, fuzzy
 #~ msgid "Error translating default context."
 #~ msgstr "உங்கள் முன்னிருப்பு சூழல் %s. \n"
index bf44489de14b39cfecb60639725b6229f29f0d3f..7448491c5129f470464923461b0dc419371cecf5 100644 (file)
--- a/po/tr.po
+++ b/po/tr.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Linux-PAM\n"
 "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n"
-"POT-Creation-Date: 2008-09-30 16:45+0200\n"
+"POT-Creation-Date: 2008-10-10 08:49+0200\n"
 "PO-Revision-Date: 2006-05-03 19:00+0200\n"
 "Last-Translator: Koray Löker <loker@pardus.org.tr>\n"
 "Language-Team: Türkçe <tr@li.org>\n"
@@ -167,16 +167,19 @@ msgid "Unknown PAM error"
 msgstr "Bilinmeyen PAM hatası"
 
 #: modules/pam_cracklib/pam_cracklib.c:64
+#: modules/pam_pwhistory/pam_pwhistory.c:61
 #, c-format
 msgid "New %s%spassword: "
 msgstr "Yeni %s%sparolası: "
 
 #: modules/pam_cracklib/pam_cracklib.c:66
+#: modules/pam_pwhistory/pam_pwhistory.c:62
 #, c-format
 msgid "Retype new %s%spassword: "
 msgstr "Yeni %s%sparolasını tekrar girin: "
 
 #: modules/pam_cracklib/pam_cracklib.c:67
+#: modules/pam_pwhistory/pam_pwhistory.c:63
 msgid "Sorry, passwords do not match."
 msgstr "Üzgünüm, parolalar birbirine uymuyor."
 
@@ -353,6 +356,18 @@ msgstr ""
 msgid "Unable to create directory %s: %m"
 msgstr ""
 
+#: modules/pam_pwhistory/pam_pwhistory.c:224
+#: modules/pam_pwhistory/pam_pwhistory.c:258
+#, fuzzy
+msgid "Password change aborted."
+msgstr "Parola değiştirilmedi"
+
+#: modules/pam_pwhistory/pam_pwhistory.c:235
+#: modules/pam_pwhistory/pam_pwhistory.c:295
+#: modules/pam_unix/pam_unix_passwd.c:470
+msgid "Password has been already used. Choose another."
+msgstr "Parola kullanımda. Lütfen başka bir parola seçin."
+
 #: modules/pam_selinux/pam_selinux.c:172
 #, fuzzy
 msgid "Would you like to enter a security context? [N] "
@@ -514,10 +529,6 @@ msgstr "NIS parolası değiştirilemiyor"
 msgid "You must choose a longer password"
 msgstr "Daha uzun bir parola girmelisiniz"
 
-#: modules/pam_unix/pam_unix_passwd.c:470
-msgid "Password has been already used. Choose another."
-msgstr "Parola kullanımda. Lütfen başka bir parola seçin."
-
 #: modules/pam_unix/pam_unix_passwd.c:571
 #, fuzzy, c-format
 msgid "Changing password for %s."
@@ -539,6 +550,10 @@ msgstr "Yeni parolayı girin: "
 msgid "Retype new UNIX password: "
 msgstr "Yeni parolayı tekrar girin: "
 
+#, fuzzy
+#~ msgid "Password has been used already. Choose another."
+#~ msgstr "Parola kullanımda. Lütfen başka bir parola seçin."
+
 #, fuzzy
 #~ msgid "Error translating default context."
 #~ msgstr "Öntanımlı bağlamınız %s \n"
index a1b4db39e66a61566dfdad2709d5c1d5db026615..fa4708e0477f72d738c103c0c1445ff036317439 100644 (file)
--- a/po/uk.po
+++ b/po/uk.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Linux-PAM.uk\n"
 "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n"
-"POT-Creation-Date: 2008-09-30 16:45+0200\n"
+"POT-Creation-Date: 2008-10-10 08:49+0200\n"
 "PO-Revision-Date: 2006-05-03 18:59+0200\n"
 "Last-Translator: Ivan Petrouchtchak <ivanpetrouchtchak@yahoo.com>\n"
 "Language-Team: Ukrainian <translation@linux.org.ua>\n"
@@ -168,16 +168,19 @@ msgid "Unknown PAM error"
 msgstr "Невідома помилка PAM"
 
 #: modules/pam_cracklib/pam_cracklib.c:64
+#: modules/pam_pwhistory/pam_pwhistory.c:61
 #, c-format
 msgid "New %s%spassword: "
 msgstr "Новий пароль %s%s:"
 
 #: modules/pam_cracklib/pam_cracklib.c:66
+#: modules/pam_pwhistory/pam_pwhistory.c:62
 #, c-format
 msgid "Retype new %s%spassword: "
 msgstr "Повторіть новий пароль %s%s: "
 
 #: modules/pam_cracklib/pam_cracklib.c:67
+#: modules/pam_pwhistory/pam_pwhistory.c:63
 msgid "Sorry, passwords do not match."
 msgstr "Ваші нові паролі не співпадають."
 
@@ -356,6 +359,18 @@ msgstr ""
 msgid "Unable to create directory %s: %m"
 msgstr ""
 
+#: modules/pam_pwhistory/pam_pwhistory.c:224
+#: modules/pam_pwhistory/pam_pwhistory.c:258
+#, fuzzy
+msgid "Password change aborted."
+msgstr "Пароль не змінено"
+
+#: modules/pam_pwhistory/pam_pwhistory.c:235
+#: modules/pam_pwhistory/pam_pwhistory.c:295
+#: modules/pam_unix/pam_unix_passwd.c:470
+msgid "Password has been already used. Choose another."
+msgstr "Пароль вже вживається. Виберіть інший."
+
 #: modules/pam_selinux/pam_selinux.c:172
 #, fuzzy
 msgid "Would you like to enter a security context? [N] "
@@ -522,10 +537,6 @@ msgstr "Не вдалося змінити пароль NIS."
 msgid "You must choose a longer password"
 msgstr "Необхідно вибрати довший пароль"
 
-#: modules/pam_unix/pam_unix_passwd.c:470
-msgid "Password has been already used. Choose another."
-msgstr "Пароль вже вживається. Виберіть інший."
-
 #: modules/pam_unix/pam_unix_passwd.c:571
 #, fuzzy, c-format
 msgid "Changing password for %s."
@@ -547,6 +558,10 @@ msgstr "Введіть новий пароль UNIX: "
 msgid "Retype new UNIX password: "
 msgstr "Повторіть новий пароль UNIX: "
 
+#, fuzzy
+#~ msgid "Password has been used already. Choose another."
+#~ msgstr "Пароль вже вживається. Виберіть інший."
+
 #, fuzzy
 #~ msgid "Error translating default context."
 #~ msgstr "Ваш типовий контекст - %s. \n"
index 7fe86301581da7b76fe98118546211cca712b591..85a1e865cf176698f8a9f70ffdbe210aa17cfd9d 100644 (file)
@@ -9,7 +9,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Linux-PAM.tip\n"
 "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n"
-"POT-Creation-Date: 2008-09-30 16:45+0200\n"
+"POT-Creation-Date: 2008-10-10 08:49+0200\n"
 "PO-Revision-Date: 2008-03-25 15:11+1000\n"
 "Last-Translator: Leah Liu <lliu@redhat.com>\n"
 "Language-Team: Simplified Chinese <zh@li.org>\n"
@@ -169,16 +169,19 @@ msgid "Unknown PAM error"
 msgstr "未知的 PAM 错误"
 
 #: modules/pam_cracklib/pam_cracklib.c:64
+#: modules/pam_pwhistory/pam_pwhistory.c:61
 #, c-format
 msgid "New %s%spassword: "
 msgstr "新的 %s%s密码:"
 
 #: modules/pam_cracklib/pam_cracklib.c:66
+#: modules/pam_pwhistory/pam_pwhistory.c:62
 #, c-format
 msgid "Retype new %s%spassword: "
 msgstr "重新输入新的 %s%s密码:"
 
 #: modules/pam_cracklib/pam_cracklib.c:67
+#: modules/pam_pwhistory/pam_pwhistory.c:63
 msgid "Sorry, passwords do not match."
 msgstr "抱歉,密码不匹配。"
 
@@ -355,6 +358,18 @@ msgstr "创建目录 '%s'。"
 msgid "Unable to create directory %s: %m"
 msgstr "无法创建目录  %s:%m"
 
+#: modules/pam_pwhistory/pam_pwhistory.c:224
+#: modules/pam_pwhistory/pam_pwhistory.c:258
+#, fuzzy
+msgid "Password change aborted."
+msgstr "密码未更改"
+
+#: modules/pam_pwhistory/pam_pwhistory.c:235
+#: modules/pam_pwhistory/pam_pwhistory.c:295
+#: modules/pam_unix/pam_unix_passwd.c:470
+msgid "Password has been already used. Choose another."
+msgstr "密码已使用。请选择其他密码。"
+
 #: modules/pam_selinux/pam_selinux.c:172
 msgid "Would you like to enter a security context? [N] "
 msgstr "是否愿意进入安全性环境?[N]"
@@ -511,10 +526,6 @@ msgstr "无法更改 NIS 密码。"
 msgid "You must choose a longer password"
 msgstr "必须选择更长的密码"
 
-#: modules/pam_unix/pam_unix_passwd.c:470
-msgid "Password has been already used. Choose another."
-msgstr "密码已使用。请选择其他密码。"
-
 #: modules/pam_unix/pam_unix_passwd.c:571
 #, c-format
 msgid "Changing password for %s."
@@ -536,5 +547,9 @@ msgstr "输入新的 UNIX 密码:"
 msgid "Retype new UNIX password: "
 msgstr "重新输入新的 UNIX 密码:"
 
+#, fuzzy
+#~ msgid "Password has been used already. Choose another."
+#~ msgstr "密码已使用。请选择其他密码。"
+
 #~ msgid "Requested MLS level not in permitted range"
 #~ msgstr "请求的 MLS 级别不在允许范围内"
index 5fe4cc0a56fca868fb2d868a02db39a7b733acfd..6f205724c02e0d0396207b251137581b2a226994 100644 (file)
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Linux_PAM\n"
 "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n"
-"POT-Creation-Date: 2008-09-30 16:45+0200\n"
+"POT-Creation-Date: 2008-10-10 08:49+0200\n"
 "PO-Revision-Date: 2006-05-03 18:55+0200\n"
 "Last-Translator: Novell Language <language@novell.com>\n"
 "Language-Team: Novell Language <language@novell.com>\n"
@@ -165,16 +165,19 @@ msgid "Unknown PAM error"
 msgstr "未知的 PAM 錯誤"
 
 #: modules/pam_cracklib/pam_cracklib.c:64
+#: modules/pam_pwhistory/pam_pwhistory.c:61
 #, c-format
 msgid "New %s%spassword: "
 msgstr "新 %s%s密碼:"
 
 #: modules/pam_cracklib/pam_cracklib.c:66
+#: modules/pam_pwhistory/pam_pwhistory.c:62
 #, c-format
 msgid "Retype new %s%spassword: "
 msgstr "再次輸入新的 %s%s密碼:"
 
 #: modules/pam_cracklib/pam_cracklib.c:67
+#: modules/pam_pwhistory/pam_pwhistory.c:63
 msgid "Sorry, passwords do not match."
 msgstr "抱歉,密碼不符合。"
 
@@ -352,6 +355,18 @@ msgstr ""
 msgid "Unable to create directory %s: %m"
 msgstr ""
 
+#: modules/pam_pwhistory/pam_pwhistory.c:224
+#: modules/pam_pwhistory/pam_pwhistory.c:258
+#, fuzzy
+msgid "Password change aborted."
+msgstr "密碼未變更"
+
+#: modules/pam_pwhistory/pam_pwhistory.c:235
+#: modules/pam_pwhistory/pam_pwhistory.c:295
+#: modules/pam_unix/pam_unix_passwd.c:470
+msgid "Password has been already used. Choose another."
+msgstr "密碼已經由其他使用者使用。請選擇其他密碼。"
+
 #: modules/pam_selinux/pam_selinux.c:172
 #, fuzzy
 msgid "Would you like to enter a security context? [N] "
@@ -514,10 +529,6 @@ msgstr "無法變更 NIS 密碼。"
 msgid "You must choose a longer password"
 msgstr "您必須選擇更長的密碼"
 
-#: modules/pam_unix/pam_unix_passwd.c:470
-msgid "Password has been already used. Choose another."
-msgstr "密碼已經由其他使用者使用。請選擇其他密碼。"
-
 #: modules/pam_unix/pam_unix_passwd.c:571
 #, fuzzy, c-format
 msgid "Changing password for %s."
@@ -539,6 +550,10 @@ msgstr "輸入新的 UNIX 密碼:"
 msgid "Retype new UNIX password: "
 msgstr "再次輸入新的 UNIX 密碼:"
 
+#, fuzzy
+#~ msgid "Password has been used already. Choose another."
+#~ msgstr "密碼已經由其他使用者使用。請選擇其他密碼。"
+
 #, fuzzy
 #~ msgid "Error translating default context."
 #~ msgstr "您的預設網路位置為 %s。\n"
index 4dddee24e90b4b72bb6a449ee76012998ca3a1d4..72fda271b21d57ed5b4b036179d57bb06c1ca3f9 100644 (file)
--- a/po/zu.po
+++ b/po/zu.po
@@ -5,7 +5,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Linux-PAM\n"
 "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n"
-"POT-Creation-Date: 2008-09-30 16:45+0200\n"
+"POT-Creation-Date: 2008-10-10 08:49+0200\n"
 "PO-Revision-Date: 2006-11-03 12:03\n"
 "Last-Translator: Novell Language <language@novell.com>\n"
 "Language-Team: Novell Language <language@novell.com>\n"
@@ -163,16 +163,19 @@ msgid "Unknown PAM error"
 msgstr "Iphutha le-PAM elingaziwa"
 
 #: modules/pam_cracklib/pam_cracklib.c:64
+#: modules/pam_pwhistory/pam_pwhistory.c:61
 #, c-format
 msgid "New %s%spassword: "
 msgstr "%s%siphasiwedi entsha: "
 
 #: modules/pam_cracklib/pam_cracklib.c:66
+#: modules/pam_pwhistory/pam_pwhistory.c:62
 #, c-format
 msgid "Retype new %s%spassword: "
 msgstr "Thayipha kabusha %s%siphasiwedi entsha: "
 
 #: modules/pam_cracklib/pam_cracklib.c:67
+#: modules/pam_pwhistory/pam_pwhistory.c:63
 msgid "Sorry, passwords do not match."
 msgstr "Uxolo, amaphasiwedi awahambelani."
 
@@ -350,6 +353,18 @@ msgstr ""
 msgid "Unable to create directory %s: %m"
 msgstr ""
 
+#: modules/pam_pwhistory/pam_pwhistory.c:224
+#: modules/pam_pwhistory/pam_pwhistory.c:258
+#, fuzzy
+msgid "Password change aborted."
+msgstr "Iphasiwedi ayishintshwanga"
+
+#: modules/pam_pwhistory/pam_pwhistory.c:235
+#: modules/pam_pwhistory/pam_pwhistory.c:295
+#: modules/pam_unix/pam_unix_passwd.c:470
+msgid "Password has been already used. Choose another."
+msgstr "Le phasiwedi isetshenziswa ngothile. Khetha enye."
+
 #: modules/pam_selinux/pam_selinux.c:172
 #, fuzzy
 msgid "Would you like to enter a security context? [N] "
@@ -519,10 +534,6 @@ msgstr "Iphasiwedi ye-NIS ayivumanga ukushintshwa."
 msgid "You must choose a longer password"
 msgstr "Kumelwe ukhethe iphasiwedi ethe ukuba yinjana"
 
-#: modules/pam_unix/pam_unix_passwd.c:470
-msgid "Password has been already used. Choose another."
-msgstr "Le phasiwedi isetshenziswa ngothile. Khetha enye."
-
 #: modules/pam_unix/pam_unix_passwd.c:571
 #, fuzzy, c-format
 msgid "Changing password for %s."
@@ -544,6 +555,10 @@ msgstr "Faka iphasiwedi entsha ye-UNIX: "
 msgid "Retype new UNIX password: "
 msgstr "Thayipha iphasiwedi entsha ye-UNIX: "
 
+#, fuzzy
+#~ msgid "Password has been used already. Choose another."
+#~ msgstr "Le phasiwedi isetshenziswa ngothile. Khetha enye."
+
 #, fuzzy
 #~ msgid "Error translating default context."
 #~ msgstr "Indawo okuyo yohlelo ingu-%s. \n"
index 530ce89063ca1cde76781dae0112c4f791933365..cc96e8c780de09e730bc0d1850e785e1565e7e07 100644 (file)
@@ -21,3 +21,4 @@ tst-pam_succeed_if1
 tst-pam_group1
 tst-pam_authfail
 tst-pam_authsucceed
+tst-pam_pwhistory1
index 30a923aa55d029cb16d25e9d458eefaeff798a0a..620c61d1f0cd4a831f29c121f6e69e412c3a78a3 100644 (file)
@@ -28,7 +28,8 @@ EXTRA_DIST = run-xtests.sh tst-pam_dispatch1.pamd tst-pam_dispatch2.pamd \
        tst-pam_substack3.pamd tst-pam_substack3a.pamd tst-pam_substack3.sh \
        tst-pam_substack4.pamd tst-pam_substack4a.pamd tst-pam_substack4.sh \
        tst-pam_substack5.pamd tst-pam_substack5a.pamd tst-pam_substack5.sh \
-       tst-pam_assemble_line1.pamd tst-pam_assemble_line1.sh
+       tst-pam_assemble_line1.pamd tst-pam_assemble_line1.sh \
+       tst-pam_pwhistory1.pamd tst-pam_pwhistory1.sh
 
 XTESTS = tst-pam_dispatch1 tst-pam_dispatch2 tst-pam_dispatch3 \
        tst-pam_dispatch4 tst-pam_dispatch5 \
@@ -36,7 +37,8 @@ XTESTS = tst-pam_dispatch1 tst-pam_dispatch2 tst-pam_dispatch3 \
        tst-pam_unix1 tst-pam_unix2 tst-pam_unix3 \
        tst-pam_access1 tst-pam_access2 tst-pam_access3 \
        tst-pam_access4 tst-pam_limits1 tst-pam_succeed_if1 \
-       tst-pam_group1 tst-pam_authfail tst-pam_authsucceed
+       tst-pam_group1 tst-pam_authfail tst-pam_authsucceed \
+       tst-pam_pwhistory1
 
 NOSRCTESTS = tst-pam_substack1 tst-pam_substack2 tst-pam_substack3 \
        tst-pam_substack4 tst-pam_substack5 tst-pam_assemble_line1
index 4e981858a807a2d574539148f4a7866d11939b5d..b06685da7367136379e5e36acc9f1cf6746a6716 100755 (executable)
@@ -23,6 +23,8 @@ cp /etc/security/group.conf /etc/security/group.conf-pam-xtests
 install -m 644 "${SRCDIR}"/group.conf /etc/security/group.conf
 cp /etc/security/limits.conf /etc/security/limits.conf-pam-xtests
 install -m 644 "${SRCDIR}"/limits.conf /etc/security/limits.conf
+mv /etc/security/opasswd /etc/security/opasswd-pam-xtests
+
 for testname in $XTESTS ; do
          for cfg in "${SRCDIR}"/$testname*.pamd ; do
            install -m 644 $cfg /etc/pam.d/$(basename $cfg .pamd)
@@ -49,6 +51,7 @@ done
 mv /etc/security/access.conf-pam-xtests /etc/security/access.conf
 mv /etc/security/group.conf-pam-xtests /etc/security/group.conf
 mv /etc/security/limits.conf-pam-xtests /etc/security/limits.conf
+mv /etc/security/opasswd-pam-xtests /etc/security/opasswd
 if test "$failed" -ne 0; then
          echo "==================="
          echo "$failed of $all tests failed"
diff --git a/xtests/tst-pam_pwhistory1.c b/xtests/tst-pam_pwhistory1.c
new file mode 100644 (file)
index 0000000..5c3246f
--- /dev/null
@@ -0,0 +1,169 @@
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, and the entire permission notice in its entirety,
+ *    including the disclaimer of warranties.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote
+ *    products derived from this software without specific prior
+ *    written permission.
+ *
+ * ALTERNATIVELY, this product may be distributed under the terms of
+ * the GNU Public License, in which case the provisions of the GPL are
+ * required INSTEAD OF the above restrictions.  (This clause is
+ * necessary due to a potential bad interaction between the GPL and
+ * the restrictions contained in a BSD-style copyright.)
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * Check remember handling
+ * Change ten times the password
+ * Try the ten passwords again, should always be rejected
+ * Try a new password, should succeed
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <security/pam_appl.h>
+
+static int in_test;
+
+static const char *passwords[] =  {
+  "pamhistory01", "pamhistory02", "pamhistory03",
+  "pamhistory04", "pamhistory05", "pamhistory06",
+  "pamhistory07", "pamhistory08", "pamhistory09",
+  "pamhistory10",
+  "pamhistory01", "pamhistory02", "pamhistory03",
+  "pamhistory04", "pamhistory05", "pamhistory06",
+  "pamhistory07", "pamhistory08", "pamhistory09",
+  "pamhistory10",
+  "pamhistory11",
+  "pamhistory01", "pamhistory02", "pamhistory03",
+  "pamhistory04", "pamhistory05", "pamhistory06",
+  "pamhistory07", "pamhistory08", "pamhistory09",
+  "pamhistory10"};
+
+static int debug;
+
+/* A conversation function which uses an internally-stored value for
+   the responses. */
+static int
+fake_conv (int num_msg, const struct pam_message **msgm,
+          struct pam_response **response, void *appdata_ptr UNUSED)
+{
+  struct pam_response *reply;
+  int count;
+
+  /* Sanity test. */
+  if (num_msg <= 0)
+    return PAM_CONV_ERR;
+
+  if (debug)
+    fprintf (stderr, "msg_style=%d, msg=%s\n", msgm[0]->msg_style,
+            msgm[0]->msg);
+
+  if (msgm[0]->msg_style != 1)
+    return PAM_SUCCESS;
+
+  /* Allocate memory for the responses. */
+  reply = calloc (num_msg, sizeof (struct pam_response));
+  if (reply == NULL)
+    return PAM_CONV_ERR;
+
+  /* Each prompt elicits the same response. */
+  for (count = 0; count < num_msg; ++count)
+    {
+      reply[count].resp_retcode = 0;
+      reply[count].resp = strdup (passwords[in_test]);
+      if (debug)
+       fprintf (stderr, "send password %s\n", reply[count].resp);
+    }
+
+  /* Set the pointers in the response structure and return. */
+  *response = reply;
+  return PAM_SUCCESS;
+}
+
+static struct pam_conv conv = {
+    fake_conv,
+    NULL
+};
+
+
+int
+main(int argc, char *argv[])
+{
+  pam_handle_t *pamh=NULL;
+  const char *user="tstpampwhistory";
+  int retval;
+
+  if (argc > 1 && strcmp (argv[1], "-d") == 0)
+    debug = 1;
+
+  for (in_test = 0;
+       in_test < (int)(sizeof (passwords)/sizeof (char *)); in_test++)
+    {
+
+      retval = pam_start("tst-pam_pwhistory1", user, &conv, &pamh);
+      if (retval != PAM_SUCCESS)
+       {
+         if (debug)
+           fprintf (stderr, "pwhistory1-%d: pam_start returned %d\n",
+                    in_test, retval);
+         return 1;
+       }
+
+      retval = pam_chauthtok (pamh, 0);
+      if (in_test < 10 || in_test == 20)
+       {
+         if (retval != PAM_SUCCESS)
+           {
+             if (debug)
+               fprintf (stderr, "pwhistory1-%d: pam_chauthtok returned %d\n",
+                        in_test, retval);
+             return 1;
+           }
+       }
+      else if (in_test < 20)
+       {
+         if (retval != PAM_MAXTRIES)
+           {
+             if (debug)
+               fprintf (stderr, "pwhistory1-%d: pam_chauthtok returned %d\n",
+                        in_test, retval);
+             return 1;
+           }
+       }
+
+      retval = pam_end (pamh,retval);
+      if (retval != PAM_SUCCESS)
+       {
+         if (debug)
+           fprintf (stderr, "pwhistory1: pam_end returned %d\n", retval);
+         return 1;
+       }
+    }
+
+  return 0;
+}
diff --git a/xtests/tst-pam_pwhistory1.pamd b/xtests/tst-pam_pwhistory1.pamd
new file mode 100644 (file)
index 0000000..b03098f
--- /dev/null
@@ -0,0 +1,7 @@
+#%PAM-1.0
+auth     required       pam_permit.so
+account  required       pam_permit.so
+password required      pam_pwhistory.so remember=10 retry=1 debug
+password required      pam_unix.so     use_authtok md5
+session  required       pam_permit.so
+
diff --git a/xtests/tst-pam_pwhistory1.sh b/xtests/tst-pam_pwhistory1.sh
new file mode 100644 (file)
index 0000000..ddb3b8b
--- /dev/null
@@ -0,0 +1,7 @@
+#!/bin/bash
+
+/usr/sbin/useradd tstpampwhistory
+./tst-pam_pwhistory1
+RET=$?
+/usr/sbin/userdel -r tstpampwhistory 2> /dev/null
+exit $RET