From 374a7652e6ebeb9b731c41cf48aa83b603faae3e Mon Sep 17 00:00:00 2001 From: Thorsten Kukuk Date: Mon, 18 Aug 2008 13:29:21 +0000 Subject: Relevant BUGIDs: Purpose of commit: bugfix Commit summary: --------------- 2008-08-18 Thorsten Kukuk * Makefile.am (M4_FILES): Adjust list. * modules/pam_access/pam_access.8.xml: Fix module service vs. module type. * modules/pam_cracklib/pam_cracklib.8.xml: Likewise. * modules/pam_debug/pam_debug.8.xml: Likewise. * modules/pam_deny/pam_deny.8.xml: Likewise. * modules/pam_echo/pam_echo.8.xml: Likewise. * modules/pam_env/pam_env.8.xml: Likewise. * modules/pam_exec/pam_exec.8.xml: Likewise. * modules/pam_faildelay/pam_faildelay.8.xml: Likewise. * modules/pam_filter/pam_filter.8.xml: Likewise. * modules/pam_ftp/pam_ftp.8.xml: Likewise. * modules/pam_group/pam_group.8.xml: Likewise. * modules/pam_issue/pam_issue.8.xml: Likewise. * modules/pam_keyinit/pam_keyinit.8.xml: Likewise. * modules/pam_lastlog/pam_lastlog.8.xml: Likewise. * modules/pam_limits/pam_limits.8.xml: Likewise. * modules/pam_listfile/pam_listfile.8.xml: Likewise. * modules/pam_localuser/pam_localuser.8.xml: Likewise. * modules/pam_loginuid/pam_loginuid.8.xml: Likewise. * modules/pam_mail/pam_mail.8.xml: Likewise. * modules/pam_mkhomedir/pam_mkhomedir.8.xml: Likewise. * modules/pam_motd/pam_motd.8.xml: Likewise. * modules/pam_namespace/pam_namespace.8.xml: Likewise. * modules/pam_nologin/pam_nologin.8.xml: Likewise. * modules/pam_permit/pam_permit.8.xml: Likewise. * modules/pam_rhosts/pam_rhosts.8.xml: Likewise. * modules/pam_rootok/pam_rootok.8.xml: Likewise. * modules/pam_securetty/pam_securetty.8.xml: Likewise. * modules/pam_selinux/pam_selinux.8.xml: Likewise. * modules/pam_sepermit/pam_sepermit.8.xml: Likewise. * modules/pam_shells/pam_shells.8.xml: Likewise. * modules/pam_succeed_if/pam_succeed_if.8.xml: Likewise. * modules/pam_tally/pam_tally.8.xml: Likewise. * modules/pam_time/pam_time.8.xml: Likewise. * modules/pam_tty_audit/pam_tty_audit.8.xml: Likewise. * modules/pam_umask/pam_umask.8.xml: Likewise. * modules/pam_unix/pam_unix.8.xml: Likewise. * modules/pam_userdb/pam_userdb.8.xml: Likewise. * modules/pam_warn/pam_warn.8.xml: Likewise. * modules/pam_wheel/pam_wheel.8.xml: Likewise. * modules/pam_xauth/pam_xauth.8.xml: Likewise. --- doc/sag/pam_access.xml | 4 ++-- doc/sag/pam_cracklib.xml | 4 ++-- doc/sag/pam_debug.xml | 4 ++-- doc/sag/pam_deny.xml | 4 ++-- doc/sag/pam_echo.xml | 4 ++-- doc/sag/pam_env.xml | 4 ++-- doc/sag/pam_exec.xml | 4 ++-- doc/sag/pam_faildelay.xml | 4 ++-- doc/sag/pam_filter.xml | 4 ++-- doc/sag/pam_ftp.xml | 4 ++-- doc/sag/pam_group.xml | 4 ++-- doc/sag/pam_issue.xml | 4 ++-- doc/sag/pam_keyinit.xml | 4 ++-- doc/sag/pam_lastlog.xml | 4 ++-- doc/sag/pam_limits.xml | 4 ++-- doc/sag/pam_listfile.xml | 4 ++-- doc/sag/pam_localuser.xml | 4 ++-- doc/sag/pam_loginuid.xml | 4 ++-- doc/sag/pam_mail.xml | 4 ++-- doc/sag/pam_mkhomedir.xml | 4 ++-- doc/sag/pam_motd.xml | 4 ++-- doc/sag/pam_namespace.xml | 4 ++-- doc/sag/pam_nologin.xml | 4 ++-- doc/sag/pam_permit.xml | 4 ++-- doc/sag/pam_rhosts.xml | 4 ++-- doc/sag/pam_rootok.xml | 4 ++-- doc/sag/pam_securetty.xml | 4 ++-- doc/sag/pam_selinux.xml | 4 ++-- doc/sag/pam_sepermit.xml | 4 ++-- doc/sag/pam_shells.xml | 4 ++-- doc/sag/pam_succeed_if.xml | 4 ++-- doc/sag/pam_tally.xml | 4 ++-- doc/sag/pam_time.xml | 4 ++-- doc/sag/pam_tty_audit.xml | 4 ++-- doc/sag/pam_umask.xml | 4 ++-- doc/sag/pam_unix.xml | 4 ++-- doc/sag/pam_userdb.xml | 4 ++-- doc/sag/pam_warn.xml | 4 ++-- doc/sag/pam_wheel.xml | 4 ++-- doc/sag/pam_xauth.xml | 4 ++-- 40 files changed, 80 insertions(+), 80 deletions(-) (limited to 'doc/sag') diff --git a/doc/sag/pam_access.xml b/doc/sag/pam_access.xml index 9e2837ca..b9bf39d0 100644 --- a/doc/sag/pam_access.xml +++ b/doc/sag/pam_access.xml @@ -19,9 +19,9 @@ -
+
+ href="../../modules/pam_access/pam_access.8.xml" xpointer='xpointer(//refsect1[@id = "pam_access-types"]/*)'/>
-
+
+ href="../../modules/pam_cracklib/pam_cracklib.8.xml" xpointer='xpointer(//refsect1[@id = "pam_cracklib-types"]/*)'/>
-
+
+ href="../../modules/pam_debug/pam_debug.8.xml" xpointer='xpointer(//refsect1[@id = "pam_debug-types"]/*)'/>
-
+
+ href="../../modules/pam_deny/pam_deny.8.xml" xpointer='xpointer(//refsect1[@id = "pam_deny-types"]/*)'/>
-
+
+ href="../../modules/pam_echo/pam_echo.8.xml" xpointer='xpointer(//refsect1[@id = "pam_echo-types"]/*)'/>
-
+
+ href="../../modules/pam_env/pam_env.8.xml" xpointer='xpointer(//refsect1[@id = "pam_env-types"]/*)'/>
-
+
+ href="../../modules/pam_exec/pam_exec.8.xml" xpointer='xpointer(//refsect1[@id = "pam_exec-types"]/*)'/>
-
+
+ href="../../modules/pam_faildelay/pam_faildelay.8.xml" xpointer='xpointer(//refsect1[@id = "pam_faildelay-types"]/*)'/>
-
+
+ href="../../modules/pam_filter/pam_filter.8.xml" xpointer='xpointer(//refsect1[@id = "pam_filter-types"]/*)'/>
-
+
+ href="../../modules/pam_ftp/pam_ftp.8.xml" xpointer='xpointer(//refsect1[@id = "pam_ftp-types"]/*)'/>
-
+
+ href="../../modules/pam_group/pam_group.8.xml" xpointer='xpointer(//refsect1[@id = "pam_group-types"]/*)'/>
-
+
+ href="../../modules/pam_issue/pam_issue.8.xml" xpointer='xpointer(//refsect1[@id = "pam_issue-types"]/*)'/>
-
+
+ href="../../modules/pam_keyinit/pam_keyinit.8.xml" xpointer='xpointer(//refsect1[@id = "pam_keyinit-types"]/*)'/>
-
+
+ href="../../modules/pam_lastlog/pam_lastlog.8.xml" xpointer='xpointer(//refsect1[@id = "pam_lastlog-types"]/*)'/>
-
+
+ href="../../modules/pam_limits/pam_limits.8.xml" xpointer='xpointer(//refsect1[@id = "pam_limits-types"]/*)'/>
-
+
+ href="../../modules/pam_listfile/pam_listfile.8.xml" xpointer='xpointer(//refsect1[@id = "pam_listfile-types"]/*)'/>
-
+
+ href="../../modules/pam_localuser/pam_localuser.8.xml" xpointer='xpointer(//refsect1[@id = "pam_localuser-types"]/*)'/>
-
+
+ href="../../modules/pam_loginuid/pam_loginuid.8.xml" xpointer='xpointer(//refsect1[@id = "pam_loginuid-types"]/*)'/>
-
+
+ href="../../modules/pam_mail/pam_mail.8.xml" xpointer='xpointer(//refsect1[@id = "pam_mail-types"]/*)'/>
-
+
+ href="../../modules/pam_mkhomedir/pam_mkhomedir.8.xml" xpointer='xpointer(//refsect1[@id = "pam_mkhomedir-types"]/*)'/>
-
+
+ href="../../modules/pam_motd/pam_motd.8.xml" xpointer='xpointer(//refsect1[@id = "pam_motd-types"]/*)'/>
-
+
+ href="../../modules/pam_namespace/pam_namespace.8.xml" xpointer='xpointer(//refsect1[@id = "pam_namespace-types"]/*)'/>
-
+
+ href="../../modules/pam_nologin/pam_nologin.8.xml" xpointer='xpointer(//refsect1[@id = "pam_nologin-types"]/*)'/>
-
+
+ href="../../modules/pam_permit/pam_permit.8.xml" xpointer='xpointer(//refsect1[@id = "pam_permit-types"]/*)'/>
-
+
+ href="../../modules/pam_rhosts/pam_rhosts.8.xml" xpointer='xpointer(//refsect1[@id = "pam_rhosts-types"]/*)'/>
-
+
+ href="../../modules/pam_rootok/pam_rootok.8.xml" xpointer='xpointer(//refsect1[@id = "pam_rootok-types"]/*)'/>
-
+
+ href="../../modules/pam_securetty/pam_securetty.8.xml" xpointer='xpointer(//refsect1[@id = "pam_securetty-types"]/*)'/>
-
+
+ href="../../modules/pam_selinux/pam_selinux.8.xml" xpointer='xpointer(//refsect1[@id = "pam_selinux-types"]/*)'/>
-
+
+ href="../../modules/pam_sepermit/pam_sepermit.8.xml" xpointer='xpointer(//refsect1[@id = "pam_sepermit-types"]/*)'/>
-
+
+ href="../../modules/pam_shells/pam_shells.8.xml" xpointer='xpointer(//refsect1[@id = "pam_shells-types"]/*)'/>
-
+
+ href="../../modules/pam_succeed_if/pam_succeed_if.8.xml" xpointer='xpointer(//refsect1[@id = "pam_succeed_if-types"]/*)'/>
-
+
+ href="../../modules/pam_tally/pam_tally.8.xml" xpointer='xpointer(//refsect1[@id = "pam_tally-types"]/*)'/>
-
+
+ href="../../modules/pam_time/pam_time.8.xml" xpointer='xpointer(//refsect1[@id = "pam_time-types"]/*)'/>
-
+
+ href="../../modules/pam_tty_audit/pam_tty_audit.8.xml" xpointer='xpointer(//refsect1[@id = "pam_tty_audit-types"]/*)'/>
-
+
+ href="../../modules/pam_umask/pam_umask.8.xml" xpointer='xpointer(//refsect1[@id = "pam_umask-types"]/*)'/>
-
+
+ href="../../modules/pam_unix/pam_unix.8.xml" xpointer='xpointer(//refsect1[@id = "pam_unix-types"]/*)'/>
-
+
+ href="../../modules/pam_userdb/pam_userdb.8.xml" xpointer='xpointer(//refsect1[@id = "pam_userdb-types"]/*)'/>
-
+
+ href="../../modules/pam_warn/pam_warn.8.xml" xpointer='xpointer(//refsect1[@id = "pam_warn-types"]/*)'/>
-
+
+ href="../../modules/pam_wheel/pam_wheel.8.xml" xpointer='xpointer(//refsect1[@id = "pam_wheel-types"]/*)'/>
-
+
+ href="../../modules/pam_xauth/pam_xauth.8.xml" xpointer='xpointer(//refsect1[@id = "pam_xauth-types"]/*)'/>
Date: Fri, 10 Oct 2008 06:53:45 +0000 Subject: Relevant BUGIDs: Purpose of commit: new feature Commit summary: --------------- 2008-10-10 Thorsten Kukuk * 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. --- ChangeLog | 22 ++ NEWS | 6 + configure.in | 2 +- doc/sag/Linux-PAM_SAG.xml | 2 + doc/sag/pam_pwhistory.xml | 38 +++ libpam/pam_static_modules.h | 2 + modules/Makefile.am | 15 +- modules/pam_pwhistory/.cvsignore | 8 + modules/pam_pwhistory/Makefile.am | 35 +++ modules/pam_pwhistory/README.xml | 41 +++ modules/pam_pwhistory/opasswd.c | 473 ++++++++++++++++++++++++++++++ modules/pam_pwhistory/opasswd.h | 45 +++ modules/pam_pwhistory/pam_pwhistory.8.xml | 226 ++++++++++++++ modules/pam_pwhistory/pam_pwhistory.c | 319 ++++++++++++++++++++ modules/pam_pwhistory/tst-pam_pwhistory | 2 + po/Linux-PAM.pot | 20 +- po/POTFILES.in | 2 + po/ar.po | 25 +- po/as.po | 25 +- po/bn_IN.po | 25 +- po/ca.po | 25 +- po/cs.po | 25 +- po/da.po | 25 +- po/de.po | 35 ++- po/es.po | 25 +- po/fi.po | 25 +- po/fr.po | 25 +- po/gu.po | 25 +- po/hi.po | 25 +- po/hu.po | 25 +- po/it.po | 25 +- po/ja.po | 28 +- po/km.po | 25 +- po/kn.po | 25 +- po/ko.po | 25 +- po/ml.po | 25 +- po/nb.po | 25 +- po/nl.po | 25 +- po/or.po | 25 +- po/pa.po | 25 +- po/pl.po | 25 +- po/pt.po | 25 +- po/pt_BR.po | 25 +- po/ru.po | 26 +- po/si.po | 25 +- po/sr.po | 25 +- po/sr@latin.po | 25 +- po/sv.po | 25 +- po/ta.po | 25 +- po/tr.po | 25 +- po/uk.po | 25 +- po/zh_CN.po | 25 +- po/zh_TW.po | 25 +- po/zu.po | 25 +- xtests/.cvsignore | 1 + xtests/Makefile.am | 6 +- xtests/run-xtests.sh | 3 + xtests/tst-pam_pwhistory1.c | 169 +++++++++++ xtests/tst-pam_pwhistory1.pamd | 7 + xtests/tst-pam_pwhistory1.sh | 7 + 60 files changed, 2184 insertions(+), 206 deletions(-) create mode 100644 doc/sag/pam_pwhistory.xml create mode 100644 modules/pam_pwhistory/.cvsignore create mode 100644 modules/pam_pwhistory/Makefile.am create mode 100644 modules/pam_pwhistory/README.xml create mode 100644 modules/pam_pwhistory/opasswd.c create mode 100644 modules/pam_pwhistory/opasswd.h create mode 100644 modules/pam_pwhistory/pam_pwhistory.8.xml create mode 100644 modules/pam_pwhistory/pam_pwhistory.c create mode 100755 modules/pam_pwhistory/tst-pam_pwhistory create mode 100644 xtests/tst-pam_pwhistory1.c create mode 100644 xtests/tst-pam_pwhistory1.pamd create mode 100644 xtests/tst-pam_pwhistory1.sh (limited to 'doc/sag') diff --git a/ChangeLog b/ChangeLog index 4fafb565..383a2cf1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,25 @@ +2008-10-10 Thorsten Kukuk + + * 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 * po/de.po: Update translations. diff --git a/NEWS b/NEWS index d3e18f77..144757a0 100644 --- 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 diff --git a/configure.in b/configure.in index 9461fd7d..63ba9ddd 100644 --- a/configure.in +++ b/configure.in @@ -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 \ diff --git a/doc/sag/Linux-PAM_SAG.xml b/doc/sag/Linux-PAM_SAG.xml index eef2b71f..b5a1781a 100644 --- a/doc/sag/Linux-PAM_SAG.xml +++ b/doc/sag/Linux-PAM_SAG.xml @@ -442,6 +442,8 @@ session required pam_warn.so href="pam_nologin.xml"/> + + +
+ pam_pwhistory - grant access using .pwhistory file + + + +
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
diff --git a/libpam/pam_static_modules.h b/libpam/pam_static_modules.h index a66b486d..d45f2977 100644 --- a/libpam/pam_static_modules.h +++ b/libpam/pam_static_modules.h @@ -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, diff --git a/modules/Makefile.am b/modules/Makefile.am index c79f5957..f21d52e8 100644 --- a/modules/Makefile.am +++ b/modules/Makefile.am @@ -1,15 +1,16 @@ # -# Copyright (c) 2005, 2006 Thorsten Kukuk +# Copyright (c) 2005, 2006, 2008 Thorsten Kukuk # 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 index 00000000..c0d3c72c --- /dev/null +++ b/modules/pam_pwhistory/.cvsignore @@ -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 index 00000000..018d0b52 --- /dev/null +++ b/modules/pam_pwhistory/Makefile.am @@ -0,0 +1,35 @@ +# +# Copyright (c) 2008 Thorsten Kukuk +# + +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 index 00000000..f048e321 --- /dev/null +++ b/modules/pam_pwhistory/README.xml @@ -0,0 +1,41 @@ + + +--> +]> + +
+ + + + + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" + href="pam_pwhistory.8.xml" xpointer='xpointer(//refnamediv[@id = "pam_pwhistory-name"]/*)'/> + + + + +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
diff --git a/modules/pam_pwhistory/opasswd.c b/modules/pam_pwhistory/opasswd.c new file mode 100644 index 00000000..89452d3f --- /dev/null +++ b/modules/pam_pwhistory/opasswd.c @@ -0,0 +1,473 @@ +/* + * Copyright (c) 2008 Thorsten Kukuk + * + * Redistribution and use in source and binary forms, 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 +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#if defined (HAVE_XCRYPT_H) +#include +#elif defined (HAVE_CRYPT_H) +#include +#endif + +#include +#include + +#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 index 00000000..e8a20139 --- /dev/null +++ b/modules/pam_pwhistory/opasswd.h @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2008 Thorsten Kukuk + * + * Redistribution and use in source and binary forms, 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 index 00000000..26d6bd15 --- /dev/null +++ b/modules/pam_pwhistory/pam_pwhistory.8.xml @@ -0,0 +1,226 @@ + + + + + + + pam_pwhistory + 8 + Linux-PAM Manual + + + + pam_pwhistory + PAM module to remember last passwords + + + + + pam_pwhistory.so + + debug + + + use_authtok + + + enforce_for_root + + + remember=N + + + retry=N + + + + + + + + DESCRIPTION + + + 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. + + + 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. + + + + + OPTIONS + + + + + + + + Turns on debugging via + + syslog3 + . + + + + + + + + + + When password changing enforce the module to use the new password + provided by a previously stacked + module (this is used in the example of the stacking of the + pam_cracklib module documented below). + + + + + + + + + + If this option is set, the check is enforced for root, too. + + + + + + + + + + The last N passwords for each + user are saved in /etc/security/opasswd. + The default is 10. + + + + + + + + + + Prompt user at most N times + before returning with error. The default is + 1. + + + + + + + + + MODULE TYPES PROVIDED + + Only the module type is provided. + + + + + RETURN VALUES + + + PAM_AUTHTOK_ERR + + + No new password was entered, the user aborted password + change or new password couldn't be set. + + + + + PAM_IGNORE + + + Password history was disabled. + + + + + PAM_MAXTRIES + + + Password was rejected too often. + + + + + PAM_USER_UNKNOWN + + + User is not known to system. + + + + + + + + EXAMPLES + + An example password section would be: + +#%PAM-1.0 +password required pam_pwhistory.so +password required pam_unix.so use_authtok + + + + In combination with pam_cracklib: + +#%PAM-1.0 +password required pam_cracklib.so retry=3 +password required pam_pwhistory.so use_authtok +password required pam_unix.so use_authtok + + + + + + FILES + + + /etc/security/opasswd + + File with password history + + + + + + + SEE ALSO + + + pam.conf5 + , + + pam.d5 + , + + pam8 + + + + + + AUTHOR + + pam_pwhistory was written by Thorsten Kukuk <kukuk@thkukuk.de> + + + + diff --git a/modules/pam_pwhistory/pam_pwhistory.c b/modules/pam_pwhistory/pam_pwhistory.c new file mode 100644 index 00000000..d3cce728 --- /dev/null +++ b/modules/pam_pwhistory/pam_pwhistory.c @@ -0,0 +1,319 @@ +/* + * Copyright (c) 2008 Thorsten Kukuk + * Author: Thorsten Kukuk + * + * Redistribution and use in source and binary forms, 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 +#endif + +#define PAM_SM_PASSWORD + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#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 index 00000000..3531a88a --- /dev/null +++ b/modules/pam_pwhistory/tst-pam_pwhistory @@ -0,0 +1,2 @@ +#!/bin/sh +../../tests/tst-dlopen .libs/pam_pwhistory.so diff --git a/po/Linux-PAM.pot b/po/Linux-PAM.pot index f9d1eddf..c7d34cbf 100644 --- a/po/Linux-PAM.pot +++ b/po/Linux-PAM.pot @@ -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 \n" "Language-Team: LANGUAGE \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." diff --git a/po/POTFILES.in b/po/POTFILES.in index 7887aad7..39889b06 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -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 diff --git a/po/ar.po b/po/ar.po index 6ee867dd..d5b416a5 100644 --- 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 \n" "Language-Team: Novell Language \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" diff --git a/po/as.po b/po/as.po index f79c2e78..3f39c41b 100644 --- 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 \n" "Language-Team: Assamese \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" diff --git a/po/bn_IN.po b/po/bn_IN.po index 650875d7..ff034157 100644 --- a/po/bn_IN.po +++ b/po/bn_IN.po @@ -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 \n" "Language-Team: Bengali (India) \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" diff --git a/po/ca.po b/po/ca.po index d8598fa5..63a21aff 100644 --- 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 \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" diff --git a/po/cs.po b/po/cs.po index 5d81cef2..acaacdfe 100644 --- 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 \n" "Language-Team: cs_CZ \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é." diff --git a/po/da.po b/po/da.po index 7d5c8e6c..af578b5b 100644 --- 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 \n" "Language-Team: Novell Language \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" diff --git a/po/de.po b/po/de.po index 9ddd8d04..ae7fc03e 100644 --- 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 \n" "Language-Team: German \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: from on " #: 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." diff --git a/po/es.po b/po/es.po index 0f4e70ec..064c6d57 100644 --- 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 \n" "Language-Team: Spanish \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" diff --git a/po/fi.po b/po/fi.po index df521d0b..0a1cb59b 100644 --- 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 \n" "Language-Team: \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" diff --git a/po/fr.po b/po/fr.po index b8186452..4c9ec4df 100644 --- 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 \n" "Language-Team: Français \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" diff --git a/po/gu.po b/po/gu.po index 009b723c..adf66289 100644 --- 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 \n" "Language-Team: Gujarati \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 સ્તર એ પરવાનગીય વિસ્તારમાં નથી" diff --git a/po/hi.po b/po/hi.po index 8582b9f8..eb574065 100644 --- 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 \n" "Language-Team: Hindi \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" diff --git a/po/hu.po b/po/hu.po index e5c53e36..dff81541 100644 --- 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 \n" "Language-Team: Hungarian \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" diff --git a/po/it.po b/po/it.po index 7daaf97f..f0339e69 100644 --- 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 \n" "Language-Team: Italian \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" diff --git a/po/ja.po b/po/ja.po index 106561c3..b0ef9bdf 100644 --- 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 \n" "Language-Team: Japanese \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" diff --git a/po/km.po b/po/km.po index f2dccf65..024f16d9 100644 --- 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 \n" "Language-Team: Khmer \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" diff --git a/po/kn.po b/po/kn.po index 7356371b..b4e2a98a 100644 --- 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 \n" "Language-Team: Kannada \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" diff --git a/po/ko.po b/po/ko.po index 1098954d..038557b2 100644 --- 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 \n" "Language-Team: Korean \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" diff --git a/po/ml.po b/po/ml.po index 4d251447..f8a153c8 100644 --- 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 \n" "Language-Team: Malayalam \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" diff --git a/po/nb.po b/po/nb.po index 70244f3c..794152c8 100644 --- 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 \n" "Language-Team: \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" diff --git a/po/nl.po b/po/nl.po index d0557929..941ee9ab 100644 --- 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 \n" "Language-Team: Dutch \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" diff --git a/po/or.po b/po/or.po index 176314c9..0ac767fa 100644 --- 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 \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 ସ୍ତର ଅନୁମୋଦିତ ପରିସର ମଧ୍ଯରେ ନାହିଁ" diff --git a/po/pa.po b/po/pa.po index 8de6229b..be1a2e57 100644 --- 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[ਆਲਮ] \n" "Language-Team: Panjabi \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" diff --git a/po/pl.po b/po/pl.po index ad5a8c44..9f43fff1 100644 --- 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 \n" "Language-Team: Polish \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" diff --git a/po/pt.po b/po/pt.po index 9ffdc9ac..109b9749 100644 --- 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 \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" diff --git a/po/pt_BR.po b/po/pt_BR.po index 4d32d2de..0d41b5e6 100644 --- a/po/pt_BR.po +++ b/po/pt_BR.po @@ -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 \n" "Language-Team: Brazilian Portuguese \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" diff --git a/po/ru.po b/po/ru.po index 50b69d26..2fda5d6c 100644 --- 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 \n" "Language-Team: Russian \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 вне границ разрешенного диапазона" diff --git a/po/si.po b/po/si.po index b7ef2aca..55cb7bb6 100644 --- 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 \n" "Language-Team: Sinhala \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" diff --git a/po/sr.po b/po/sr.po index ddbe5ab7..ddc65078 100644 --- 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ć \n" "Language-Team: Serbian (sr) \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 ниво није у дозвољеном опсегу" diff --git a/po/sr@latin.po b/po/sr@latin.po index 24abc687..03568596 100644 --- a/po/sr@latin.po +++ b/po/sr@latin.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ć \n" "Language-Team: Serbian (sr) \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" diff --git a/po/sv.po b/po/sv.po index 6eb6e9bf..c5f879c6 100644 --- 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 \n" "Language-Team: Swedish \n" @@ -166,16 +166,19 @@ msgid "Unknown PAM error" msgstr "Oknt 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%slsenord: " #: 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%slsenord igen: " #: modules/pam_cracklib/pam_cracklib.c:67 +#: modules/pam_pwhistory/pam_pwhistory.c:63 msgid "Sorry, passwords do not match." msgstr "Ledsen, lsenorden stmmer 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 "Ofrndrat lsenord" + +#: 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 "Lsenordet har redan anvnds. Vlj ett annat." + #: modules/pam_selinux/pam_selinux.c:172 msgid "Would you like to enter a security context? [N] " msgstr "Vill du ange en skerhetskontext? [N]" @@ -511,10 +526,6 @@ msgstr "NIS-l msgid "You must choose a longer password" msgstr "Du mste vlja ett lngre lsenord" -#: modules/pam_unix/pam_unix_passwd.c:470 -msgid "Password has been already used. Choose another." -msgstr "Lsenordet har redan anvnds. Vlj 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-lsenord igen: " +#, fuzzy +#~ msgid "Password has been used already. Choose another." +#~ msgstr "Lsenordet har redan anvnds. Vlj ett annat." + #~ msgid "Requested MLS level not in permitted range" #~ msgstr "Begrd MLS-niv utanfr giltigt intervall" diff --git a/po/ta.po b/po/ta.po index 0de0379c..4d118538 100644 --- 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 \n" "Language-Team: Tamil \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" diff --git a/po/tr.po b/po/tr.po index bf44489d..7448491c 100644 --- 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 \n" "Language-Team: Türkçe \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" diff --git a/po/uk.po b/po/uk.po index a1b4db39..fa4708e0 100644 --- 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 \n" "Language-Team: Ukrainian \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" diff --git a/po/zh_CN.po b/po/zh_CN.po index 7fe86301..85a1e865 100644 --- a/po/zh_CN.po +++ b/po/zh_CN.po @@ -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 \n" "Language-Team: Simplified Chinese \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 级别不在允许范围内" diff --git a/po/zh_TW.po b/po/zh_TW.po index 5fe4cc0a..6f205724 100644 --- a/po/zh_TW.po +++ b/po/zh_TW.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 18:55+0200\n" "Last-Translator: Novell Language \n" "Language-Team: Novell Language \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" diff --git a/po/zu.po b/po/zu.po index 4dddee24..72fda271 100644 --- 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 \n" "Language-Team: Novell Language \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" diff --git a/xtests/.cvsignore b/xtests/.cvsignore index 530ce890..cc96e8c7 100644 --- a/xtests/.cvsignore +++ b/xtests/.cvsignore @@ -21,3 +21,4 @@ tst-pam_succeed_if1 tst-pam_group1 tst-pam_authfail tst-pam_authsucceed +tst-pam_pwhistory1 diff --git a/xtests/Makefile.am b/xtests/Makefile.am index 30a923aa..620c61d1 100644 --- a/xtests/Makefile.am +++ b/xtests/Makefile.am @@ -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 diff --git a/xtests/run-xtests.sh b/xtests/run-xtests.sh index 4e981858..b06685da 100755 --- a/xtests/run-xtests.sh +++ b/xtests/run-xtests.sh @@ -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 index 00000000..5c3246fa --- /dev/null +++ b/xtests/tst-pam_pwhistory1.c @@ -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 +#endif + +#include +#include +#include +#include + +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 index 00000000..b03098fa --- /dev/null +++ b/xtests/tst-pam_pwhistory1.pamd @@ -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 index 00000000..ddb3b8b1 --- /dev/null +++ b/xtests/tst-pam_pwhistory1.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +/usr/sbin/useradd tstpampwhistory +./tst-pam_pwhistory1 +RET=$? +/usr/sbin/userdel -r tstpampwhistory 2> /dev/null +exit $RET -- cgit v1.2.3 From 114ed318bea9b5859ab89144261946716776e2ed Mon Sep 17 00:00:00 2001 From: Tomas Mraz Date: Fri, 17 Oct 2008 11:29:55 +0000 Subject: Relevant BUGIDs: Purpose of commit: new feature Commit summary: --------------- 2008-10-17 Tomas Mraz * configure.in: Add modules/pam_tally2/Makefile. * doc/sag/Linux-PAM_SAG.xml: Include pam_tally2.xml. * doc/sag/pam_tally2.xml: New. * libpam/pam_static_modules.h: Add pam_tally2 static struct. * modules/Makefile.am: Add pam_tally2 directory. * modules/pam_tally2/Makefile.am: New. * modules/pam_tally2/README.xml: New. * modules/pam_tally2/tallylog.h: New. * modules/pam_tally2/pam_tally2.8.xml: New. * modules/pam_tally2/pam_tally2.c: New. * modules/pam_tally2/pam_tally2_app.c: New. * modules/pam_tally2/tst-pam_tally2: New. * po/POTFILES.in: Add pam_tally2 sources. --- ChangeLog | 16 + NEWS | 2 + configure.in | 1 + doc/sag/Linux-PAM_SAG.xml | 2 + doc/sag/pam_tally2.xml | 46 ++ libpam/pam_static_modules.h | 2 + modules/Makefile.am | 2 +- modules/pam_tally2/.cvsignore | 9 + modules/pam_tally2/Makefile.am | 40 ++ modules/pam_tally2/README.xml | 46 ++ modules/pam_tally2/pam_tally2.8.xml | 439 ++++++++++++++++ modules/pam_tally2/pam_tally2.c | 985 ++++++++++++++++++++++++++++++++++++ modules/pam_tally2/pam_tally2_app.c | 7 + modules/pam_tally2/tallylog.h | 52 ++ modules/pam_tally2/tst-pam_tally2 | 2 + po/POTFILES.in | 2 + 16 files changed, 1652 insertions(+), 1 deletion(-) create mode 100644 doc/sag/pam_tally2.xml create mode 100644 modules/pam_tally2/.cvsignore create mode 100644 modules/pam_tally2/Makefile.am create mode 100644 modules/pam_tally2/README.xml create mode 100644 modules/pam_tally2/pam_tally2.8.xml create mode 100644 modules/pam_tally2/pam_tally2.c create mode 100644 modules/pam_tally2/pam_tally2_app.c create mode 100644 modules/pam_tally2/tallylog.h create mode 100755 modules/pam_tally2/tst-pam_tally2 (limited to 'doc/sag') diff --git a/ChangeLog b/ChangeLog index bb810c41..dff2085a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,19 @@ +2008-10-17 Tomas Mraz + + * configure.in: Add modules/pam_tally2/Makefile. + * doc/sag/Linux-PAM_SAG.xml: Include pam_tally2.xml. + * doc/sag/pam_tally2.xml: New. + * libpam/pam_static_modules.h: Add pam_tally2 static struct. + * modules/Makefile.am: Add pam_tally2 directory. + * modules/pam_tally2/Makefile.am: New. + * modules/pam_tally2/README.xml: New. + * modules/pam_tally2/tallylog.h: New. + * modules/pam_tally2/pam_tally2.8.xml: New. + * modules/pam_tally2/pam_tally2.c: New. + * modules/pam_tally2/pam_tally2_app.c: New. + * modules/pam_tally2/tst-pam_tally2: New. + * po/POTFILES.in: Add pam_tally2 sources. + 2008-10-17 Xavier Queralt Mateu * po/ca.po: Updated translations. diff --git a/NEWS b/NEWS index 144757a0..c406472f 100644 --- a/NEWS +++ b/NEWS @@ -15,6 +15,8 @@ Release 1.0.90 * 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 +* New pam_tally2 module similar to pam_tally with wordsize independent + tally data format Release 1.0.2 diff --git a/configure.in b/configure.in index 63ba9ddd..087d88cf 100644 --- a/configure.in +++ b/configure.in @@ -548,6 +548,7 @@ AC_CONFIG_FILES([Makefile libpam/Makefile libpamc/Makefile libpamc/test/Makefile modules/pam_sepermit/Makefile \ modules/pam_shells/Makefile modules/pam_stress/Makefile \ modules/pam_succeed_if/Makefile modules/pam_tally/Makefile \ + modules/pam_tally2/Makefile \ modules/pam_time/Makefile modules/pam_tty_audit/Makefile \ modules/pam_umask/Makefile \ modules/pam_unix/Makefile modules/pam_userdb/Makefile \ diff --git a/doc/sag/Linux-PAM_SAG.xml b/doc/sag/Linux-PAM_SAG.xml index b5a1781a..a1989c9a 100644 --- a/doc/sag/Linux-PAM_SAG.xml +++ b/doc/sag/Linux-PAM_SAG.xml @@ -458,6 +458,8 @@ session required pam_warn.so href="pam_succeed_if.xml"/> + + +
+ pam_tally2 - login counter (tallying) module + + + + + + +
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
diff --git a/libpam/pam_static_modules.h b/libpam/pam_static_modules.h index d45f2977..2d80cecb 100644 --- a/libpam/pam_static_modules.h +++ b/libpam/pam_static_modules.h @@ -74,6 +74,7 @@ extern struct pam_module _pam_shells_modstruct; extern struct pam_module _pam_stress_modstruct; extern struct pam_module _pam_succeed_if_modstruct; extern struct pam_module _pam_tally_modstruct; +extern struct pam_module _pam_tally2_modstruct; extern struct pam_module _pam_time_modstruct; #ifdef HAVE_AUDIT_TTY_STATUS extern struct pam_module _pam_tty_audit_modstruct; @@ -133,6 +134,7 @@ static struct pam_module *static_modules[] = { &_pam_stress_modstruct, &_pam_succeed_if_modstruct, &_pam_tally_modstruct, + &_pam_tally2_modstruct, &_pam_time_modstruct, #ifdef HAVE_AUDIT_TTY_STATUS &_pam_tty_audit_modstruct, diff --git a/modules/Makefile.am b/modules/Makefile.am index f21d52e8..37d5a739 100644 --- a/modules/Makefile.am +++ b/modules/Makefile.am @@ -9,7 +9,7 @@ SUBDIRS = pam_access pam_cracklib pam_debug pam_deny pam_echo \ 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_succeed_if pam_tally pam_tally2 pam_time pam_tty_audit pam_umask \ pam_unix pam_userdb pam_warn pam_wheel pam_xauth CLEANFILES = *~ diff --git a/modules/pam_tally2/.cvsignore b/modules/pam_tally2/.cvsignore new file mode 100644 index 00000000..c20ebb92 --- /dev/null +++ b/modules/pam_tally2/.cvsignore @@ -0,0 +1,9 @@ +*.la +*.lo +.deps +.libs +Makefile +Makefile.in +pam_tally2 +README +pam_tally2.8 diff --git a/modules/pam_tally2/Makefile.am b/modules/pam_tally2/Makefile.am new file mode 100644 index 00000000..6f843e1f --- /dev/null +++ b/modules/pam_tally2/Makefile.am @@ -0,0 +1,40 @@ +# +# Copyright (c) 2005, 2006, 2007 Thorsten Kukuk +# Copyright (c) 2008 Red Hat, Inc. +# + +CLEANFILES = *~ + +EXTRA_DIST = README $(MANS) $(XMLS) tst-pam_tally2 + +man_MANS = pam_tally2.8 +XMLS = README.xml pam_tally2.8.xml + +TESTS = tst-pam_tally2 + +securelibdir = $(SECUREDIR) +secureconfdir = $(SCONFIGDIR) + +noinst_HEADERS = tallylog.h + +AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include + +pam_tally2_la_LDFLAGS = -no-undefined -avoid-version -module +pam_tally2_la_LIBADD = -L$(top_builddir)/libpam -lpam $(LIBAUDIT) +if HAVE_VERSIONING + pam_tally2_la_LDFLAGS += -Wl,--version-script=$(srcdir)/../modules.map +endif + +pam_tally2_LDADD = $(LIBAUDIT) + +securelib_LTLIBRARIES = pam_tally2.la +sbin_PROGRAMS = pam_tally2 + +pam_tally2_la_SOURCES = pam_tally2.c +pam_tally2_SOURCES = pam_tally2_app.c + +if ENABLE_REGENERATE_MAN +noinst_DATA = README +README: pam_tally2.8.xml +-include $(top_srcdir)/Make.xml.rules +endif diff --git a/modules/pam_tally2/README.xml b/modules/pam_tally2/README.xml new file mode 100644 index 00000000..aa470570 --- /dev/null +++ b/modules/pam_tally2/README.xml @@ -0,0 +1,46 @@ + + +--> +]> + +
+ + + + + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" + href="pam_tally2.8.xml" xpointer='xpointer(//refnamediv[@id = "pam_tally2-name"]/*)'/> + + + + +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
diff --git a/modules/pam_tally2/pam_tally2.8.xml b/modules/pam_tally2/pam_tally2.8.xml new file mode 100644 index 00000000..dc284a1d --- /dev/null +++ b/modules/pam_tally2/pam_tally2.8.xml @@ -0,0 +1,439 @@ + + + + + + + pam_tally2 + 8 + Linux-PAM Manual + + + + pam_tally2 + The login counter (tallying) module + + + + + pam_tally2.so + + file=/path/to/counter + + + onerr=[fail|succeed] + + + magic_root + + + even_deny_root + + + deny=n + + + lock_time=n + + + unlock_time=n + + + root_unlock_time=n + + + audit + + + silent + + + no_log_info + + + + pam_tally2 + + --file /path/to/counter + + + --user username + + + --reset[=n] + + + --quiet + + + + + + + DESCRIPTION + + + This module maintains a count of attempted accesses, can + reset count on success, can deny access if too many attempts fail. + + + pam_tally2 comes in two parts: + pam_tally2.so and + pam_tally2. The former is the PAM module and + the latter, a stand-alone program. pam_tally2 + is an (optional) application which can be used to interrogate and + manipulate the counter file. It can display users' counts, set + individual counts, or clear all counts. Setting artificially high + counts may be useful for blocking users without changing their + passwords. For example, one might find it useful to clear all counts + every midnight from a cron job. + + + Normally, failed attempts to access root will + not cause the root account to become + blocked, to prevent denial-of-service: if your users aren't given + shell accounts and root may only login via su or + at the machine console (not telnet/rsh, etc), this is safe. + + + + + + OPTIONS + + + + GLOBAL OPTIONS + + + + This can be used for auth and + account module types. + + + + + + + + + If something weird happens (like unable to open the file), + return with PAM_SUCESS if + + is given, else with the corresponding PAM error code. + + + + + + + + + + File where to keep counts. Default is + /var/log/tallylog. + + + + + + + + + + Will log the user name into the system log if the user is not found. + + + + + + + + + + Don't print informative messages. + + + + + + + + + + Don't log informative messages via syslog3. + + + + + + + + + + AUTH OPTIONS + + + + Authentication phase first increments attempted login counter and + checks if user should be denied access. If the user is authenticated + and the login process continues on call to + pam_setcred3 + it resets the attempts counter. + + + + + + + + + Deny access if tally for this user exceeds + n. + + + + + + + + + + Always deny for n seconds + after failed attempt. + + + + + + + + + + Allow access after n seconds + after failed attempt. If this option is used the user will + be locked out for the specified amount of time after he + exceeded his maximum allowed attempts. Otherwise the + account is locked until the lock is removed by a manual + intervention of the system administrator. + + + + + + + + + + If the module is invoked by a user with uid=0 the + counter is not incremented. The sys-admin should use this + for user launched services, like su, + otherwise this argument should be omitted. + + + + + + + + + + Do not use the .fail_locktime field in + /var/log/faillog for this user. + + + + + + + + + + Don't reset count on successful entry, only decrement. + + + + + + + + + + Root account can become unavailable. + + + + + + + + + + This option implies option. + Allow access after n seconds + to root acccount after failed attempt. If this option is used + the root user will be locked out for the specified amount of + time after he exceeded his maximum allowed attempts. + + + + + + + + + + + ACCOUNT OPTIONS + + + + Account phase resets attempts counter if the user is + not magic root. + This phase can be used optionaly for services which don't call + + pam_setcred3 + correctly or if the reset should be done regardless + of the failure of the account phase of other modules. + + + + + + + + + If the module is invoked by a user with uid=0 the + counter is not changed. The sys-admin should use this + for user launched services, like su, + otherwise this argument should be omitted. + + + + + + + + + + + MODULE TYPES PROVIDED + + The and + module types are provided. + + + + + RETURN VALUES + + + PAM_AUTH_ERR + + + A invalid option was given, the module was not able + to retrive the user name, no valid counter file + was found, or too many failed logins. + + + + + PAM_SUCCESS + + + Everything was successfull. + + + + + PAM_USER_UNKNOWN + + + User not known. + + + + + + + + NOTES + + pam_tally2 is not compatible with the old pam_tally faillog file format. + This is caused by requirement of compatibility of the tallylog file + format between 32bit and 64bit architectures on multiarch systems. + + + There is no setuid wrapper for access to the data file such as when the + pam_tally2.so module is called from + xscreensaver. As this would make it impossible to share PAM configuration + with such services the following workaround is used: If the data file + cannot be opened because of insufficient permissions + (EPERM) the module returns + PAM_IGNORE. + + + + + EXAMPLES + + Add the following line to /etc/pam.d/login to + lock the account after 4 failed logins. Root account will be locked + as well. The accounts will be automatically unlocked after 20 minutes. + The module does not have to be called in the account phase because the + login calls + pam_setcred3 + correctly. + + +auth required pam_securetty.so +auth required pam_tally2.so deny=4 even_deny_root unlock_time=1200 +auth required pam_env.so +auth required pam_unix.so +auth required pam_nologin.so +account required pam_unix.so +password required pam_unix.so +session required pam_limits.so +session required pam_unix.so +session required pam_lastlog.so nowtmp +session optional pam_mail.so standard + + + + + FILES + + + /var/log/tallylog + + failure count logging file + + + + + + + SEE ALSO + + + pam.conf5 + , + + pam.d5 + , + + pam8 + + + + + + AUTHOR + + pam_tally was written by Tim Baverstock and Tomas Mraz. + + + + + diff --git a/modules/pam_tally2/pam_tally2.c b/modules/pam_tally2/pam_tally2.c new file mode 100644 index 00000000..9ae3180d --- /dev/null +++ b/modules/pam_tally2/pam_tally2.c @@ -0,0 +1,985 @@ +/* + * pam_tally2.c + * + */ + + +/* By Tim Baverstock , Multi Media Machine Ltd. + * 5 March 1997 + * + * Stuff stolen from pam_rootok and pam_listfile + * + * Changes by Tomas Mraz 5 January 2005, 26 January 2006 + * Audit option added for Tomas patch by Sebastien Tricaud 13 January 2005 + * Portions Copyright 2006, Red Hat, Inc. + * Portions Copyright 1989 - 1993, Julianne Frances Haugh + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of Julianne F. Haugh nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include "config.h" + +#if defined(MAIN) && defined(MEMORY_DEBUG) +# undef exit +#endif /* defined(MAIN) && defined(MEMORY_DEBUG) */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#ifdef HAVE_LIBAUDIT +#include +#endif + +#include +#include +#include +#include "tallylog.h" + +#ifndef TRUE +#define TRUE 1L +#define FALSE 0L +#endif + +#ifndef HAVE_FSEEKO +#define fseeko fseek +#endif + +/* + * here, we make a definition for the externally accessible function + * in this file (this definition is required for static a module + * but strongly encouraged generally) it is used to instruct the + * modules include file to define the function prototypes. + */ + +#ifndef MAIN +#define PAM_SM_AUTH +#define PAM_SM_ACCOUNT +/* #define PAM_SM_SESSION */ +/* #define PAM_SM_PASSWORD */ + +#include +#include +#endif +#include + +/*---------------------------------------------------------------------*/ + +#define DEFAULT_LOGFILE "/var/log/tallylog" +#define MODULE_NAME "pam_tally2" + +#define tally_t uint16_t +#define TALLY_HI ((tally_t)~0L) + +struct tally_options { + const char *filename; + tally_t deny; + long lock_time; + long unlock_time; + long root_unlock_time; + unsigned int ctrl; +}; + +#define PHASE_UNKNOWN 0 +#define PHASE_AUTH 1 +#define PHASE_ACCOUNT 2 +#define PHASE_SESSION 3 + +#define OPT_MAGIC_ROOT 01 +#define OPT_FAIL_ON_ERROR 02 +#define OPT_DENY_ROOT 04 +#define OPT_QUIET 040 +#define OPT_AUDIT 0100 +#define OPT_NOLOGNOTICE 0400 + + +/*---------------------------------------------------------------------*/ + +/* some syslogging */ + +#ifdef MAIN +#define pam_syslog tally_log +static void +tally_log (const pam_handle_t *pamh UNUSED, int priority UNUSED, + const char *fmt, ...) +{ + va_list args; + + va_start(args, fmt); + fprintf(stderr, "%s: ", MODULE_NAME); + vfprintf(stderr, fmt, args); + fprintf(stderr,"\n"); + va_end(args); +} + +#define pam_modutil_getpwnam(pamh, user) getpwnam(user) +#endif + +/*---------------------------------------------------------------------*/ + +/* --- Support function: parse arguments --- */ + +#ifndef MAIN + +static void +log_phase_no_auth(pam_handle_t *pamh, int phase, const char *argv) +{ + if ( phase != PHASE_AUTH ) { + pam_syslog(pamh, LOG_ERR, + "option %s allowed in auth phase only", argv); + } +} + +static int +tally_parse_args(pam_handle_t *pamh, struct tally_options *opts, + int phase, int argc, const char **argv) +{ + memset(opts, 0, sizeof(*opts)); + opts->filename = DEFAULT_LOGFILE; + opts->ctrl = OPT_FAIL_ON_ERROR; + opts->root_unlock_time = -1; + + for ( ; argc-- > 0; ++argv ) { + + if ( ! strncmp( *argv, "file=", 5 ) ) { + const char *from = *argv + 5; + if ( *from!='/' ) { + pam_syslog(pamh, LOG_ERR, + "filename not /rooted; %s", *argv); + return PAM_AUTH_ERR; + } + opts->filename = from; + } + else if ( ! strcmp( *argv, "onerr=fail" ) ) { + opts->ctrl |= OPT_FAIL_ON_ERROR; + } + else if ( ! strcmp( *argv, "onerr=succeed" ) ) { + opts->ctrl &= ~OPT_FAIL_ON_ERROR; + } + else if ( ! strcmp( *argv, "magic_root" ) ) { + opts->ctrl |= OPT_MAGIC_ROOT; + } + else if ( ! strcmp( *argv, "even_deny_root_account" ) || + ! strcmp( *argv, "even_deny_root" ) ) { + log_phase_no_auth(pamh, phase, *argv); + opts->ctrl |= OPT_DENY_ROOT; + } + else if ( ! strncmp( *argv, "deny=", 5 ) ) { + log_phase_no_auth(pamh, phase, *argv); + if ( sscanf((*argv)+5,"%hu",&opts->deny) != 1 ) { + pam_syslog(pamh, LOG_ERR, "bad number supplied: %s", *argv); + return PAM_AUTH_ERR; + } + } + else if ( ! strncmp( *argv, "lock_time=", 10 ) ) { + log_phase_no_auth(pamh, phase, *argv); + if ( sscanf((*argv)+10,"%ld",&opts->lock_time) != 1 ) { + pam_syslog(pamh, LOG_ERR, "bad number supplied: %s", *argv); + return PAM_AUTH_ERR; + } + } + else if ( ! strncmp( *argv, "unlock_time=", 12 ) ) { + log_phase_no_auth(pamh, phase, *argv); + if ( sscanf((*argv)+12,"%ld",&opts->unlock_time) != 1 ) { + pam_syslog(pamh, LOG_ERR, "bad number supplied: %s", *argv); + return PAM_AUTH_ERR; + } + } + else if ( ! strncmp( *argv, "root_unlock_time=", 17 ) ) { + log_phase_no_auth(pamh, phase, *argv); + if ( sscanf((*argv)+17,"%ld",&opts->root_unlock_time) != 1 ) { + pam_syslog(pamh, LOG_ERR, "bad number supplied: %s", *argv); + return PAM_AUTH_ERR; + } + opts->ctrl |= OPT_DENY_ROOT; /* even_deny_root implied */ + } + else if ( ! strcmp( *argv, "quiet" ) || + ! strcmp ( *argv, "silent")) { + opts->ctrl |= OPT_QUIET; + } + else if ( ! strcmp ( *argv, "no_log_info") ) { + opts->ctrl |= OPT_NOLOGNOTICE; + } + else if ( ! strcmp ( *argv, "audit") ) { + opts->ctrl |= OPT_AUDIT; + } + else { + pam_syslog(pamh, LOG_ERR, "unknown option: %s", *argv); + } + } + + if (opts->root_unlock_time == -1) + opts->root_unlock_time = opts->unlock_time; + + return PAM_SUCCESS; +} + +#endif /* #ifndef MAIN */ + +/*---------------------------------------------------------------------*/ + +/* --- Support function: get uid (and optionally username) from PAM or + cline_user --- */ + +#ifdef MAIN +static char *cline_user=0; /* cline_user is used in the administration prog */ +#endif + +static int +pam_get_uid(pam_handle_t *pamh, uid_t *uid, const char **userp, struct tally_options *opts) +{ + const char *user = NULL; + struct passwd *pw; + +#ifdef MAIN + user = cline_user; +#else + if ((pam_get_user( pamh, &user, NULL )) != PAM_SUCCESS) { + user = NULL; + } +#endif + + if ( !user || !*user ) { + pam_syslog(pamh, LOG_ERR, "pam_get_uid; user?"); + return PAM_AUTH_ERR; + } + + if ( ! ( pw = pam_modutil_getpwnam( pamh, user ) ) ) { + opts->ctrl & OPT_AUDIT ? + pam_syslog(pamh, LOG_ERR, "pam_get_uid; no such user %s", user) : + pam_syslog(pamh, LOG_ERR, "pam_get_uid; no such user"); + return PAM_USER_UNKNOWN; + } + + if ( uid ) *uid = pw->pw_uid; + if ( userp ) *userp = user; + return PAM_SUCCESS; +} + +/*---------------------------------------------------------------------*/ + +/* --- Support functions: set/get tally data --- */ + +#ifndef MAIN + +static void +_cleanup(pam_handle_t *pamh UNUSED, void *data, int error_status UNUSED) +{ + free(data); +} + + +static void +tally_set_data( pam_handle_t *pamh, time_t oldtime ) +{ + time_t *data; + + if ( (data=malloc(sizeof(time_t))) != NULL ) { + *data = oldtime; + pam_set_data(pamh, MODULE_NAME, (void *)data, _cleanup); + } +} + +static int +tally_get_data( pam_handle_t *pamh, time_t *oldtime ) +{ + int rv; + const void *data; + + rv = pam_get_data(pamh, MODULE_NAME, &data); + if ( rv == PAM_SUCCESS && data != NULL && oldtime != NULL ) { + *oldtime = *(const time_t *)data; + pam_set_data(pamh, MODULE_NAME, NULL, NULL); + } + else { + rv = -1; + *oldtime = 0; + } + return rv; +} +#endif /* #ifndef MAIN */ + +/*---------------------------------------------------------------------*/ + +/* --- Support function: open/create tallyfile and return tally for uid --- */ + +/* If on entry tallyfile doesn't exist, creation is attempted. */ + +static int +get_tally(pam_handle_t *pamh, uid_t uid, const char *filename, + FILE **tfile, struct tallylog *tally) +{ + struct stat fileinfo; + int lstat_ret; + + lstat_ret = lstat(filename, &fileinfo); + if (lstat_ret) { + int save_errno; + int oldmask = umask(077); + *tfile=fopen(filename, "a"); + save_errno = errno; + /* Create file, or append-open in pathological case. */ + umask(oldmask); + if ( !*tfile ) { +#ifndef MAIN + if (save_errno == EPERM) { + return PAM_IGNORE; /* called with insufficient access rights */ + } +#endif + errno = save_errno; + pam_syslog(pamh, LOG_ALERT, "Couldn't create %s: %m", filename); + return PAM_AUTH_ERR; + } + lstat_ret = fstat(fileno(*tfile),&fileinfo); + fclose(*tfile); + *tfile = NULL; + } + + if ( lstat_ret ) { + pam_syslog(pamh, LOG_ALERT, "Couldn't stat %s", filename); + return PAM_AUTH_ERR; + } + + if ((fileinfo.st_mode & S_IWOTH) || !S_ISREG(fileinfo.st_mode)) { + /* If the file is world writable or is not a + normal file, return error */ + pam_syslog(pamh, LOG_ALERT, + "%s is either world writable or not a normal file", + filename); + return PAM_AUTH_ERR; + } + + if (!(*tfile = fopen(filename, "r+"))) { +#ifndef MAIN + if (errno == EPERM) /* called with insufficient access rights */ + return PAM_IGNORE; +#endif + pam_syslog(pamh, LOG_ALERT, "Error opening %s for update: %m", filename); + + return PAM_AUTH_ERR; + } + + if (fseeko(*tfile, (off_t)uid*(off_t)sizeof(*tally), SEEK_SET)) { + pam_syslog(pamh, LOG_ALERT, "fseek failed for %s: %m", filename); + fclose(*tfile); + *tfile = NULL; + return PAM_AUTH_ERR; + } + + if (fileinfo.st_size < (off_t)(uid+1)*(off_t)sizeof(*tally)) { + memset(tally, 0, sizeof(*tally)); + } else if (fread(tally, sizeof(*tally), 1, *tfile) == 0) { + memset(tally, 0, sizeof(*tally)); + /* Shouldn't happen */ + } + + tally->fail_line[sizeof(tally->fail_line)-1] = '\0'; + + return PAM_SUCCESS; +} + +/*---------------------------------------------------------------------*/ + +/* --- Support function: update and close tallyfile with tally!=TALLY_HI --- */ + +static int +set_tally(pam_handle_t *pamh, uid_t uid, + const char *filename, FILE **tfile, struct tallylog *tally) +{ + if (tally->fail_cnt != TALLY_HI) { + if (fseeko(*tfile, (off_t)uid * sizeof(*tally), SEEK_SET)) { + pam_syslog(pamh, LOG_ALERT, "fseek failed for %s: %m", filename); + return PAM_AUTH_ERR; + } + if (fwrite(tally, sizeof(*tally), 1, *tfile) == 0) { + pam_syslog(pamh, LOG_ALERT, "update (fwrite) failed for %s: %m", filename); + return PAM_AUTH_ERR; + } + } + + if (fclose(*tfile)) { + *tfile = NULL; + pam_syslog(pamh, LOG_ALERT, "update (fclose) failed for %s: %m", filename); + return PAM_AUTH_ERR; + } + *tfile=NULL; + return PAM_SUCCESS; +} + +/*---------------------------------------------------------------------*/ + +/* --- PAM bits --- */ + +#ifndef MAIN + +#define RETURN_ERROR(i) return ((opts->ctrl & OPT_FAIL_ON_ERROR)?(i):(PAM_SUCCESS)) + +/*---------------------------------------------------------------------*/ + +static int +tally_check (tally_t oldcnt, time_t oldtime, pam_handle_t *pamh, uid_t uid, + const char *user, struct tally_options *opts, + struct tallylog *tally) +{ + int rv = PAM_SUCCESS; +#ifdef HAVE_LIBAUDIT + char buf[64]; + int audit_fd = -1; +#endif + + if ((opts->ctrl & OPT_MAGIC_ROOT) && getuid() == 0) { + return PAM_SUCCESS; + } + /* magic_root skips tally check */ +#ifdef HAVE_LIBAUDIT + audit_fd = audit_open(); + /* If there is an error & audit support is in the kernel report error */ + if ((audit_fd < 0) && !(errno == EINVAL || errno == EPROTONOSUPPORT || + errno == EAFNOSUPPORT)) + return PAM_SYSTEM_ERR; +#endif + if (opts->deny != 0 && /* deny==0 means no deny */ + tally->fail_cnt > opts->deny && /* tally>deny means exceeded */ + ((opts->ctrl & OPT_DENY_ROOT) || uid)) { /* even_deny stops uid check */ +#ifdef HAVE_LIBAUDIT + if (tally->fail_cnt == opts->deny+1) { + /* First say that max number was hit. */ + snprintf(buf, sizeof(buf), "pam_tally2 uid=%u ", uid); + audit_log_user_message(audit_fd, AUDIT_ANOM_LOGIN_FAILURES, buf, + NULL, NULL, NULL, 1); + } +#endif + if (uid) { + /* Unlock time check */ + if (opts->unlock_time && oldtime) { + if (opts->unlock_time + oldtime <= time(NULL)) { + /* ignore deny check after unlock_time elapsed */ +#ifdef HAVE_LIBAUDIT + snprintf(buf, sizeof(buf), "pam_tally2 uid=%u ", uid); + audit_log_user_message(audit_fd, AUDIT_RESP_ACCT_UNLOCK_TIMED, buf, + NULL, NULL, NULL, 1); +#endif + rv = PAM_SUCCESS; + goto cleanup; + } + } + } else { + /* Root unlock time check */ + if (opts->root_unlock_time && oldtime) { + if (opts->root_unlock_time + oldtime <= time(NULL)) { + /* ignore deny check after unlock_time elapsed */ +#ifdef HAVE_LIBAUDIT + snprintf(buf, sizeof(buf), "pam_tally2 uid=%u ", uid); + audit_log_user_message(audit_fd, AUDIT_RESP_ACCT_UNLOCK_TIMED, buf, + NULL, NULL, NULL, 1); +#endif + rv = PAM_SUCCESS; + goto cleanup; + } + } + } + +#ifdef HAVE_LIBAUDIT + if (tally->fail_cnt == opts->deny+1) { + /* First say that max number was hit. */ + audit_log_user_message(audit_fd, AUDIT_RESP_ACCT_LOCK, buf, + NULL, NULL, NULL, 1); + } +#endif + + if (!(opts->ctrl & OPT_QUIET)) { + pam_info(pamh, _("Account locked due to %hu failed logins"), + tally->fail_cnt); + } + if (!(opts->ctrl & OPT_NOLOGNOTICE)) { + pam_syslog(pamh, LOG_NOTICE, + "user %s (%lu) tally %hu, deny %hu", + user, (unsigned long)uid, tally->fail_cnt, opts->deny); + } + rv = PAM_AUTH_ERR; /* Only unconditional failure */ + goto cleanup; + } + + /* Lock time check */ + if (opts->lock_time && oldtime) { + if (opts->lock_time + oldtime > time(NULL)) { + /* don't increase fail_cnt or update fail_time when + lock_time applies */ + tally->fail_cnt = oldcnt; + tally->fail_time = oldtime; + + if (!(opts->ctrl & OPT_QUIET)) { + pam_info(pamh, _("Account temporary locked (%ld seconds left)"), + oldtime+opts->lock_time-time(NULL)); + } + if (!(opts->ctrl & OPT_NOLOGNOTICE)) { + pam_syslog(pamh, LOG_NOTICE, + "user %s (%lu) has time limit [%lds left]" + " since last failure.", + user, (unsigned long)uid, + oldtime+opts->lock_time-time(NULL)); + } + rv = PAM_AUTH_ERR; + goto cleanup; + } + } + +cleanup: +#ifdef HAVE_LIBAUDIT + if (audit_fd != -1) { + close(audit_fd); + } +#endif + return rv; +} + +/* --- tally bump function: bump tally for uid by (signed) inc --- */ + +static int +tally_bump (int inc, time_t *oldtime, pam_handle_t *pamh, + uid_t uid, const char *user, struct tally_options *opts) +{ + struct tallylog tally; + tally_t oldcnt; + FILE *tfile = NULL; + const void *remote_host = NULL; + int i, rv; + + tally.fail_cnt = 0; /* !TALLY_HI --> Log opened for update */ + + i = get_tally(pamh, uid, opts->filename, &tfile, &tally); + if (i != PAM_SUCCESS) { + if (tfile) + fclose(tfile); + RETURN_ERROR(i); + } + + /* to remember old fail time (for locktime) */ + if (oldtime) { + *oldtime = (time_t)tally.fail_time; + } + + tally.fail_time = time(NULL); + + (void) pam_get_item(pamh, PAM_RHOST, &remote_host); + if (!remote_host) { + (void) pam_get_item(pamh, PAM_TTY, &remote_host); + if (!remote_host) { + remote_host = "unknown"; + } + } + + strncpy(tally.fail_line, remote_host, + sizeof(tally.fail_line)-1); + tally.fail_line[sizeof(tally.fail_line)-1] = 0; + + oldcnt = tally.fail_cnt; + + if (!(opts->ctrl & OPT_MAGIC_ROOT) || getuid()) { + /* magic_root doesn't change tally */ + tally.fail_cnt += inc; + + if (tally.fail_cnt == TALLY_HI) { /* Overflow *and* underflow. :) */ + tally.fail_cnt -= inc; + pam_syslog(pamh, LOG_ALERT, "Tally %sflowed for user %s", + (inc<0)?"under":"over",user); + } + } + + rv = tally_check(oldcnt, *oldtime, pamh, uid, user, opts, &tally); + + i = set_tally(pamh, uid, opts->filename, &tfile, &tally); + if (i != PAM_SUCCESS) { + if (tfile) + fclose(tfile); + if (rv == PAM_SUCCESS) + RETURN_ERROR( i ); + /* fallthrough */ + } + + return rv; +} + +static int +tally_reset (pam_handle_t *pamh, uid_t uid, struct tally_options *opts) +{ + struct tallylog tally; + FILE *tfile = NULL; + int i; + + /* resets only if not magic root */ + + if ((opts->ctrl & OPT_MAGIC_ROOT) && getuid() == 0) { + return PAM_SUCCESS; + } + + tally.fail_cnt = 0; /* !TALLY_HI --> Log opened for update */ + + i=get_tally(pamh, uid, opts->filename, &tfile, &tally); + if (i != PAM_SUCCESS) { + if (tfile) + fclose(tfile); + RETURN_ERROR(i); + } + + memset(&tally, 0, sizeof(tally)); + + i=set_tally(pamh, uid, opts->filename, &tfile, &tally); + if (i != PAM_SUCCESS) { + if (tfile) + fclose(tfile); + RETURN_ERROR(i); + } + + return PAM_SUCCESS; +} + +/*---------------------------------------------------------------------*/ + +/* --- authentication management functions (only) --- */ + +PAM_EXTERN int +pam_sm_authenticate(pam_handle_t *pamh, int flags UNUSED, + int argc, const char **argv) +{ + int + rv; + time_t + oldtime = 0; + struct tally_options + options, *opts = &options; + uid_t + uid; + const char + *user; + + rv = tally_parse_args(pamh, opts, PHASE_AUTH, argc, argv); + if (rv != PAM_SUCCESS) + RETURN_ERROR(rv); + + if (flags & PAM_SILENT) + opts->ctrl |= OPT_QUIET; + + rv = pam_get_uid(pamh, &uid, &user, opts); + if (rv != PAM_SUCCESS) + RETURN_ERROR(rv); + + rv = tally_bump(1, &oldtime, pamh, uid, user, opts); + + tally_set_data(pamh, oldtime); + + return rv; +} + +PAM_EXTERN int +pam_sm_setcred(pam_handle_t *pamh, int flags UNUSED, + int argc, const char **argv) +{ + int + rv; + time_t + oldtime = 0; + struct tally_options + options, *opts = &options; + uid_t + uid; + const char + *user; + + rv = tally_parse_args(pamh, opts, PHASE_AUTH, argc, argv); + if ( rv != PAM_SUCCESS ) + RETURN_ERROR( rv ); + + rv = pam_get_uid(pamh, &uid, &user, opts); + if ( rv != PAM_SUCCESS ) + RETURN_ERROR( rv ); + + if ( tally_get_data(pamh, &oldtime) != 0 ) + /* no data found */ + return PAM_SUCCESS; + + return tally_reset(pamh, uid, opts); +} + +/*---------------------------------------------------------------------*/ + +/* --- authentication management functions (only) --- */ + +/* To reset failcount of user on successfull login */ + +PAM_EXTERN int +pam_sm_acct_mgmt(pam_handle_t *pamh, int flags UNUSED, + int argc, const char **argv) +{ + int + rv; + time_t + oldtime = 0; + struct tally_options + options, *opts = &options; + uid_t + uid; + const char + *user; + + rv = tally_parse_args(pamh, opts, PHASE_ACCOUNT, argc, argv); + if ( rv != PAM_SUCCESS ) + RETURN_ERROR( rv ); + + rv = pam_get_uid(pamh, &uid, &user, opts); + if ( rv != PAM_SUCCESS ) + RETURN_ERROR( rv ); + + if ( tally_get_data(pamh, &oldtime) != 0 ) + /* no data found */ + return PAM_SUCCESS; + + return tally_reset(pamh, uid, opts); +} + +/*-----------------------------------------------------------------------*/ + +#ifdef PAM_STATIC + +/* static module data */ + +struct pam_module _pam_tally_modstruct = { + MODULE_NAME, +#ifdef PAM_SM_AUTH + pam_sm_authenticate, + pam_sm_setcred, +#else + NULL, + NULL, +#endif +#ifdef PAM_SM_ACCOUNT + pam_sm_acct_mgmt, +#else + NULL, +#endif + NULL, + NULL, + NULL, +}; + +#endif /* #ifdef PAM_STATIC */ + +/*-----------------------------------------------------------------------*/ + +#else /* #ifndef MAIN */ + +static const char *cline_filename = DEFAULT_LOGFILE; +static tally_t cline_reset = TALLY_HI; /* Default is `interrogate only' */ +static int cline_quiet = 0; + +/* + * Not going to link with pamlib just for these.. :) + */ + +static const char * +pam_errors( int i ) +{ + switch (i) { + case PAM_AUTH_ERR: return _("Authentication error"); + case PAM_SERVICE_ERR: return _("Service error"); + case PAM_USER_UNKNOWN: return _("Unknown user"); + default: return _("Unknown error"); + } +} + +static int +getopts( char **argv ) +{ + const char *pname = *argv; + for ( ; *argv ; (void)(*argv && ++argv) ) { + if ( !strcmp (*argv,"--file") ) cline_filename=*++argv; + else if ( !strcmp(*argv,"-f") ) cline_filename=*++argv; + else if ( !strncmp(*argv,"--file=",7) ) cline_filename=*argv+7; + else if ( !strcmp (*argv,"--user") ) cline_user=*++argv; + else if ( !strcmp (*argv,"-u") ) cline_user=*++argv; + else if ( !strncmp(*argv,"--user=",7) ) cline_user=*argv+7; + else if ( !strcmp (*argv,"--reset") ) cline_reset=0; + else if ( !strcmp (*argv,"-r") ) cline_reset=0; + else if ( !strncmp(*argv,"--reset=",8)) { + if ( sscanf(*argv+8,"%hu",&cline_reset) != 1 ) + fprintf(stderr,_("%s: Bad number given to --reset=\n"),pname), exit(0); + } + else if ( !strcmp (*argv,"--quiet") ) cline_quiet=1; + else { + fprintf(stderr,_("%s: Unrecognised option %s\n"),pname,*argv); + return FALSE; + } + } + return TRUE; +} + +static void +print_one(const struct tallylog *tally, uid_t uid) +{ + static int once; + char *cp; + time_t fail_time; + struct tm *tm; + struct passwd *pwent; + const char *username = "[NONAME]"; + char ptime[80]; + + pwent = getpwuid(uid); + fail_time = tally->fail_time; + tm = localtime(&fail_time); + strftime (ptime, sizeof (ptime), "%D %H:%M:%S", tm); + cp = ptime; + if (pwent) { + username = pwent->pw_name; + } + if (!once) { + printf (_("Login Failures Latest failure From\n")); + once++; + } + printf ("%-15.15s %5hu ", username, tally->fail_cnt); + if (tally->fail_time) { + printf ("%-17.17s %s", cp, tally->fail_line); + } + putchar ('\n'); +} + +int +main( int argc UNUSED, char **argv ) +{ + struct tallylog tally; + + if ( ! getopts( argv+1 ) ) { + printf(_("%s: [-f rooted-filename] [--file rooted-filename]\n" + " [-u username] [--user username]\n" + " [-r] [--reset[=n]] [--quiet]\n"), + *argv); + exit(2); + } + + umask(077); + + /* + * Major difference between individual user and all users: + * --user just handles one user, just like PAM. + * without --user it handles all users, sniffing cline_filename for nonzeros + */ + + if ( cline_user ) { + uid_t uid; + FILE *tfile=0; + struct tally_options opts; + int i; + + memset(&opts, 0, sizeof(opts)); + opts.ctrl = OPT_AUDIT; + i=pam_get_uid(NULL, &uid, NULL, &opts); + if ( i != PAM_SUCCESS ) { + fprintf(stderr,"%s: %s\n",*argv,pam_errors(i)); + exit(1); + } + + i=get_tally(NULL, uid, cline_filename, &tfile, &tally); + if ( i != PAM_SUCCESS ) { + if (tfile) + fclose(tfile); + fprintf(stderr, "%s: %s\n", *argv, pam_errors(i)); + exit(1); + } + + if ( !cline_quiet ) + print_one(&tally, uid); + + if (cline_reset != TALLY_HI) { +#ifdef HAVE_LIBAUDIT + char buf[64]; + int audit_fd = audit_open(); + snprintf(buf, sizeof(buf), "pam_tally2 uid=%u reset=%hu", uid, cline_reset); + audit_log_user_message(audit_fd, AUDIT_USER_ACCT, + buf, NULL, NULL, NULL, 1); + if (audit_fd >=0) + close(audit_fd); +#endif + if (cline_reset == 0) { + memset(&tally, 0, sizeof(tally)); + } else { + tally.fail_cnt = cline_reset; + } + i=set_tally(NULL, uid, cline_filename, &tfile, &tally); + if (i != PAM_SUCCESS) { + if (tfile) fclose(tfile); + fprintf(stderr,"%s: %s\n",*argv,pam_errors(i)); + exit(1); + } + } else { + fclose(tfile); + } + } + else /* !cline_user (ie, operate on all users) */ { + FILE *tfile=fopen(cline_filename, "r"); + uid_t uid=0; + if (!tfile && cline_reset != 0) { + perror(*argv); + exit(1); + } + + for ( ; tfile && !feof(tfile); uid++ ) { + if ( !fread(&tally, sizeof(tally), 1, tfile) + || !tally.fail_cnt ) { + continue; + } + print_one(&tally, uid); + } + if (tfile) + fclose(tfile); + if ( cline_reset!=0 && cline_reset!=TALLY_HI ) { + fprintf(stderr,_("%s: Can't reset all users to non-zero\n"),*argv); + } + else if ( !cline_reset ) { +#ifdef HAVE_LIBAUDIT + char buf[64]; + int audit_fd = audit_open(); + snprintf(buf, sizeof(buf), "pam_tally2 uid=all reset=0"); + audit_log_user_message(audit_fd, AUDIT_USER_ACCT, + buf, NULL, NULL, NULL, 1); + if (audit_fd >=0) + close(audit_fd); +#endif + tfile=fopen(cline_filename, "w"); + if ( !tfile ) perror(*argv), exit(0); + fclose(tfile); + } + } + return 0; +} + + +#endif /* #ifndef MAIN */ diff --git a/modules/pam_tally2/pam_tally2_app.c b/modules/pam_tally2/pam_tally2_app.c new file mode 100644 index 00000000..681ed690 --- /dev/null +++ b/modules/pam_tally2/pam_tally2_app.c @@ -0,0 +1,7 @@ +/* + # This seemed like such a good idea at the time. :) + */ + +#define MAIN +#include "pam_tally2.c" + diff --git a/modules/pam_tally2/tallylog.h b/modules/pam_tally2/tallylog.h new file mode 100644 index 00000000..596b1dac --- /dev/null +++ b/modules/pam_tally2/tallylog.h @@ -0,0 +1,52 @@ +/* + * Copyright 2006, Red Hat, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of Red Hat, Inc. nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY RED HAT, INC. AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +/* + * tallylog.h - login failure data file format + * + * The new login failure file is not compatible with the old faillog(8) format + * Each record in the file represents a separate UID and the file + * is indexed in that fashion. + */ + + +#ifndef _TALLYLOG_H +#define _TALLYLOG_H + +#include + +struct tallylog { + char fail_line[52]; /* rhost or tty of last failure */ + uint16_t reserved; /* reserved for future use */ + uint16_t fail_cnt; /* failures since last success */ + uint64_t fail_time; /* time of last failure */ +}; +/* 64 bytes / entry */ + +#endif diff --git a/modules/pam_tally2/tst-pam_tally2 b/modules/pam_tally2/tst-pam_tally2 new file mode 100755 index 00000000..83c71f41 --- /dev/null +++ b/modules/pam_tally2/tst-pam_tally2 @@ -0,0 +1,2 @@ +#!/bin/sh +../../tests/tst-dlopen .libs/pam_tally2.so diff --git a/po/POTFILES.in b/po/POTFILES.in index 39889b06..5ca1caa9 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -71,6 +71,8 @@ ./modules/pam_succeed_if/pam_succeed_if.c ./modules/pam_tally/pam_tally_app.c ./modules/pam_tally/pam_tally.c +./modules/pam_tally2/pam_tally2_app.c +./modules/pam_tally2/pam_tally2.c ./modules/pam_time/pam_time.c ./modules/pam_tty_audit/pam_tty_audit.c ./modules/pam_umask/pam_umask.c -- cgit v1.2.3 From 4a67d64dd0cb01c40e675f48f0c6ea3d08e53664 Mon Sep 17 00:00:00 2001 From: Tomas Mraz Date: Fri, 28 Nov 2008 14:29:12 +0000 Subject: Relevant BUGIDs: Purpose of commit: new feature Commit summary: --------------- 2008-11-28 Tomas Mraz * modules/pam_tally2/pam_tally2.c (tally_check): Fix info format to be the same as in pam_tally. * configure.in: Add modules/pam_timestamp/Makefile. * doc/sag/Linux-PAM_SAG.xml: Include pam_timestamp.xml. * doc/sag/pam_timestamp.xml: New. * libpam/pam_static_modules.h: Add pam_timestamp static struct. * modules/Makefile.am: Add pam_timestamp directory. * modules/pam_timestamp/Makefile.am: New. * modules/pam_timestamp/README.xml: New. * modules/pam_timestamp/hmacsha1.h: New. * modules/pam_timestamp/sha1.h: New. * modules/pam_timestamp/pam_timestamp.8.xml: New. * modules/pam_timestamp/pam_timestamp_check.8.xml: New. * modules/pam_timestamp/pam_timestamp.c: New. * modules/pam_timestamp/pam_timestamp_check.c: New. * modules/pam_timestamp/hmacfile.c: New. * modules/pam_timestamp/hmacsha1.c: New. * modules/pam_timestamp/sha1.c: New. * modules/pam_timestamp/tst-pam_timestamp: New. * po/POTFILES.in: Add pam_timestamp sources. * po/*.po: Regenerate. * po/cs.po: Updated translations. --- ChangeLog | 24 + NEWS | 2 + configure.in | 4 +- doc/sag/Linux-PAM_SAG.xml | 2 + doc/sag/pam_timestamp.xml | 42 ++ libpam/pam_static_modules.h | 2 + modules/Makefile.am | 3 +- modules/pam_tally2/pam_tally2.c | 4 +- modules/pam_timestamp/Makefile.am | 47 ++ modules/pam_timestamp/README.xml | 46 ++ modules/pam_timestamp/hmacfile.c | 157 +++++ modules/pam_timestamp/hmacsha1.c | 293 +++++++++ modules/pam_timestamp/hmacsha1.h | 15 + modules/pam_timestamp/pam_timestamp.8.xml | 189 ++++++ modules/pam_timestamp/pam_timestamp.c | 816 ++++++++++++++++++++++++ modules/pam_timestamp/pam_timestamp_check.8.xml | 208 ++++++ modules/pam_timestamp/pam_timestamp_check.c | 42 ++ modules/pam_timestamp/sha1.c | 254 ++++++++ modules/pam_timestamp/sha1.h | 60 ++ modules/pam_timestamp/tst-pam_timestamp | 2 + po/Linux-PAM.pot | 38 +- po/POTFILES.in | 2 + po/ar.po | 38 +- po/as.po | 38 +- po/bn_IN.po | 42 +- po/ca.po | 45 +- po/cs.po | 51 +- po/da.po | 38 +- po/de.po | 41 +- po/es.po | 38 +- po/fi.po | 38 +- po/fr.po | 42 +- po/gu.po | 38 +- po/hi.po | 38 +- po/hu.po | 38 +- po/it.po | 42 +- po/ja.po | 42 +- po/km.po | 38 +- po/kn.po | 42 +- po/ko.po | 38 +- po/ml.po | 42 +- po/mr.po | 38 +- po/ms.po | 38 +- po/nb.po | 38 +- po/nl.po | 42 +- po/or.po | 38 +- po/pa.po | 38 +- po/pl.po | 42 +- po/pt.po | 38 +- po/pt_BR.po | 42 +- po/ru.po | 38 +- po/si.po | 38 +- po/sk.po | 42 +- po/sr.po | 38 +- po/sr@latin.po | 38 +- po/sv.po | 38 +- po/ta.po | 38 +- po/te.po | 42 +- po/tr.po | 38 +- po/uk.po | 38 +- po/zh_CN.po | 42 +- po/zh_TW.po | 38 +- po/zu.po | 38 +- 63 files changed, 3071 insertions(+), 810 deletions(-) create mode 100644 doc/sag/pam_timestamp.xml create mode 100644 modules/pam_timestamp/Makefile.am create mode 100644 modules/pam_timestamp/README.xml create mode 100644 modules/pam_timestamp/hmacfile.c create mode 100644 modules/pam_timestamp/hmacsha1.c create mode 100644 modules/pam_timestamp/hmacsha1.h create mode 100644 modules/pam_timestamp/pam_timestamp.8.xml create mode 100644 modules/pam_timestamp/pam_timestamp.c create mode 100644 modules/pam_timestamp/pam_timestamp_check.8.xml create mode 100644 modules/pam_timestamp/pam_timestamp_check.c create mode 100644 modules/pam_timestamp/sha1.c create mode 100644 modules/pam_timestamp/sha1.h create mode 100755 modules/pam_timestamp/tst-pam_timestamp (limited to 'doc/sag') diff --git a/ChangeLog b/ChangeLog index dc4ef37f..f58ef8a7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -3,6 +3,30 @@ * modules/pam_unix/unix_update.c (set_password): Allow root to change passwords without verification of the old ones. + * modules/pam_tally2/pam_tally2.c (tally_check): Fix info format + to be the same as in pam_tally. + + * configure.in: Add modules/pam_timestamp/Makefile. + * doc/sag/Linux-PAM_SAG.xml: Include pam_timestamp.xml. + * doc/sag/pam_timestamp.xml: New. + * libpam/pam_static_modules.h: Add pam_timestamp static struct. + * modules/Makefile.am: Add pam_timestamp directory. + * modules/pam_timestamp/Makefile.am: New. + * modules/pam_timestamp/README.xml: New. + * modules/pam_timestamp/hmacsha1.h: New. + * modules/pam_timestamp/sha1.h: New. + * modules/pam_timestamp/pam_timestamp.8.xml: New. + * modules/pam_timestamp/pam_timestamp_check.8.xml: New. + * modules/pam_timestamp/pam_timestamp.c: New. + * modules/pam_timestamp/pam_timestamp_check.c: New. + * modules/pam_timestamp/hmacfile.c: New. + * modules/pam_timestamp/hmacsha1.c: New. + * modules/pam_timestamp/sha1.c: New. + * modules/pam_timestamp/tst-pam_timestamp: New. + * po/POTFILES.in: Add pam_timestamp sources. + * po/*.po: Regenerate. + * po/cs.po: Updated translations. + 2008-11-25 Thorsten Kukuk * modules/pam_pwhistory/opasswd.c (save_old_password): Fix typo. diff --git a/NEWS b/NEWS index 932d90c8..e3f5623c 100644 --- a/NEWS +++ b/NEWS @@ -18,6 +18,8 @@ Release 1.0.90 * New pam_tally2 module similar to pam_tally with wordsize independent tally data format * Make libpam not log missing module if its type is prepended with '-' +* New pam_timestamp module for authentication based on recent successful + login. Release 1.0.2 diff --git a/configure.in b/configure.in index 087d88cf..b220a9a2 100644 --- a/configure.in +++ b/configure.in @@ -548,8 +548,8 @@ AC_CONFIG_FILES([Makefile libpam/Makefile libpamc/Makefile libpamc/test/Makefile modules/pam_sepermit/Makefile \ modules/pam_shells/Makefile modules/pam_stress/Makefile \ modules/pam_succeed_if/Makefile modules/pam_tally/Makefile \ - modules/pam_tally2/Makefile \ - modules/pam_time/Makefile modules/pam_tty_audit/Makefile \ + modules/pam_tally2/Makefile modules/pam_time/Makefile \ + modules/pam_timestamp/Makefile modules/pam_tty_audit/Makefile \ modules/pam_umask/Makefile \ modules/pam_unix/Makefile modules/pam_userdb/Makefile \ modules/pam_warn/Makefile modules/pam_wheel/Makefile \ diff --git a/doc/sag/Linux-PAM_SAG.xml b/doc/sag/Linux-PAM_SAG.xml index a1989c9a..b83355ef 100644 --- a/doc/sag/Linux-PAM_SAG.xml +++ b/doc/sag/Linux-PAM_SAG.xml @@ -462,6 +462,8 @@ session required pam_warn.so href="pam_tally2.xml"/> + + +
+ pam_timestamp - authenticate using cached successful authentication attempts + + + +
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
diff --git a/libpam/pam_static_modules.h b/libpam/pam_static_modules.h index 2d80cecb..999adc2a 100644 --- a/libpam/pam_static_modules.h +++ b/libpam/pam_static_modules.h @@ -76,6 +76,7 @@ extern struct pam_module _pam_succeed_if_modstruct; extern struct pam_module _pam_tally_modstruct; extern struct pam_module _pam_tally2_modstruct; extern struct pam_module _pam_time_modstruct; +extern struct pam_module _pam_timestamp_modstruct; #ifdef HAVE_AUDIT_TTY_STATUS extern struct pam_module _pam_tty_audit_modstruct; #endif @@ -136,6 +137,7 @@ static struct pam_module *static_modules[] = { &_pam_tally_modstruct, &_pam_tally2_modstruct, &_pam_time_modstruct, + &_pam_timestamp_modstruct, #ifdef HAVE_AUDIT_TTY_STATUS &_pam_tty_audit_modstruct, #endif diff --git a/modules/Makefile.am b/modules/Makefile.am index 37d5a739..0c80cea9 100644 --- a/modules/Makefile.am +++ b/modules/Makefile.am @@ -9,7 +9,8 @@ SUBDIRS = pam_access pam_cracklib pam_debug pam_deny pam_echo \ 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_tally2 pam_time pam_tty_audit pam_umask \ + pam_succeed_if pam_tally pam_tally2 pam_time pam_timestamp \ + pam_tty_audit pam_umask \ pam_unix pam_userdb pam_warn pam_wheel pam_xauth CLEANFILES = *~ diff --git a/modules/pam_tally2/pam_tally2.c b/modules/pam_tally2/pam_tally2.c index 9ae3180d..5924edf9 100644 --- a/modules/pam_tally2/pam_tally2.c +++ b/modules/pam_tally2/pam_tally2.c @@ -517,8 +517,8 @@ tally_check (tally_t oldcnt, time_t oldtime, pam_handle_t *pamh, uid_t uid, #endif if (!(opts->ctrl & OPT_QUIET)) { - pam_info(pamh, _("Account locked due to %hu failed logins"), - tally->fail_cnt); + pam_info(pamh, _("Account locked due to %u failed logins"), + (unsigned int)tally->fail_cnt); } if (!(opts->ctrl & OPT_NOLOGNOTICE)) { pam_syslog(pamh, LOG_NOTICE, diff --git a/modules/pam_timestamp/Makefile.am b/modules/pam_timestamp/Makefile.am new file mode 100644 index 00000000..51a3c215 --- /dev/null +++ b/modules/pam_timestamp/Makefile.am @@ -0,0 +1,47 @@ +# +# Copyright (c) 2005 Thorsten Kukuk +# Copyright (c) 2005 Red Hat, Inc. +# + +CLEANFILES = *~ + +XMLS = README.xml pam_timestamp.8.xml pam_timestamp_check.8.xml +man_MANS = pam_timestamp.8 pam_timestamp_check.8 +TESTS = tst-pam_timestamp + +EXTRA_DIST = $(man_MANS) hmactest.c $(XMLS) $(TESTS) + +securelibdir = $(SECUREDIR) +secureconfdir = $(SCONFIGDIR) + +noinst_HEADERS = hmacsha1.h sha1.h + +AM_CFLAGS = -I$(top_srcdir)/libpam/include -I$(top_srcdir)/libpamc/include + +pam_timestamp_la_LDFLAGS = -no-undefined -avoid-version -module $(AM_LDFLAGS) +pam_timestamp_la_LIBADD = -L$(top_builddir)/libpam -lpam +if HAVE_VERSIONING + pam_timestamp_la_LDFLAGS += -Wl,--version-script=$(srcdir)/../modules.map +endif + +securelib_LTLIBRARIES = pam_timestamp.la +sbin_PROGRAMS = pam_timestamp_check + +pam_timestamp_la_SOURCES = pam_timestamp.c hmacsha1.c sha1.c +pam_timestamp_la_CFLAGS = $(AM_CFLAGS) + +pam_timestamp_check_SOURCES = pam_timestamp_check.c +pam_timestamp_check_CFLAGS = $(AM_CFLAGS) @PIE_CFLAGS@ +pam_timestamp_check_LDADD = -L$(top_builddir)/libpam -lpam +pam_timestamp_check_LDFLAGS = @PIE_LDFLAGS@ + +hmacfile_SOURCES = hmacfile.c hmacsha1.c sha1.c +hmacfile_LDADD = -L$(top_builddir)/libpam -lpam + +if ENABLE_REGENERATE_MAN +noinst_DATA = README +README: pam_timestamp.8.xml +-include $(top_srcdir)/Make.xml.rules +endif + +noinst_PROGRAMS = hmacfile diff --git a/modules/pam_timestamp/README.xml b/modules/pam_timestamp/README.xml new file mode 100644 index 00000000..5b72deb1 --- /dev/null +++ b/modules/pam_timestamp/README.xml @@ -0,0 +1,46 @@ + + +--> +]> + +
+ + + + + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" + href="pam_timestamp.8.xml" xpointer='xpointer(//refnamediv[@id = "pam_timestamp-name"]/*)'/> + + + + +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
diff --git a/modules/pam_timestamp/hmacfile.c b/modules/pam_timestamp/hmacfile.c new file mode 100644 index 00000000..963f6f54 --- /dev/null +++ b/modules/pam_timestamp/hmacfile.c @@ -0,0 +1,157 @@ +/* + * Copyright 2003,2004 Red Hat, Inc. + * + * Redistribution and use in source and binary forms, 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. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include "hmacsha1.h" + +static void +testvectors(void) +{ + void *hmac; + size_t hmac_len; + size_t i, j; + char hex[3]; + struct vector { + const char *key; + int key_len; + const char *data; + int data_len; + const char *hmac; + } vectors[] = { + { + "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b", 20, + "Hi There", 8, + "b617318655057264e28bc0b6fb378c8ef146be00", + }, + + { + "Jefe", 4, + "what do ya want for nothing?", 28, + "effcdf6ae5eb2fa2d27416d5f184df9c259a7c79", + }, + + { + "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 20, + "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd", 50, + "125d7342b9ac11cd91a39af48aa17b4f63f175d3", + }, + + { + "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19", 25, + "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd", + 50, + "4c9007f4026250c6bc8414f9bf50c86c2d7235da", + }, + + { + "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c", 20, + "Test With Truncation", 20, + "4c1a03424b55e07fe7f27be1d58bb9324a9a5a04", + }, + + { + "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", + 80, + "Test Using Larger Than Block-Size Key - Hash Key First", 54, + "aa4ae5e15272d00e95705637ce8a3b55ed402112", + }, + + { + "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", + 80, + "Test Using Larger Than Block-Size Key and Larger Than One Block-Size Data", 73, + "e8e99d0f45237d786d6bbaa7965c7808bbff1a91", + }, + }; + for (i = 0; i < sizeof(vectors) / sizeof(vectors[0]); i++) { + hmac = NULL; + hmac_len = 0; + hmac_sha1_generate(&hmac, &hmac_len, + vectors[i].key, vectors[i].key_len, + vectors[i].data, vectors[i].data_len); + if (hmac != NULL) { + unsigned char *hmacc = hmac; + for (j = 0; j < hmac_len; j++) { + snprintf(hex, sizeof(hex), "%02x", + hmacc[j] & 0xff); + if (strncasecmp(hex, + vectors[i].hmac + 2 * j, + 2) != 0) { + printf("Incorrect result for vector %lu\n", i + 1); + exit(1); + + } + } + free(hmac); + } else { + printf("Error in vector %lu.\n", i + 1); + exit(1); + } + } +} + +int +main(int argc, char **argv) +{ + void *hmac; + size_t maclen; + const char *keyfile; + int i; + size_t j; + + testvectors(); + + keyfile = argv[1]; + for (i = 2; i < argc; i++) { + hmac_sha1_generate_file(NULL, &hmac, &maclen, keyfile, -1, -1, + argv[i], strlen(argv[i])); + if (hmac != NULL) { + unsigned char *hmacc = hmac; + for (j = 0; j < maclen; j++) { + printf("%02x", hmacc[j] & 0xff); + } + printf(" %s\n", argv[i]); + free(hmac); + } + } + return 0; +} diff --git a/modules/pam_timestamp/hmacsha1.c b/modules/pam_timestamp/hmacsha1.c new file mode 100644 index 00000000..5b3774ff --- /dev/null +++ b/modules/pam_timestamp/hmacsha1.c @@ -0,0 +1,293 @@ +/* An implementation of HMAC using SHA-1. + * + * Copyright (c) 2003 Red Hat, Inc. + * Written by Nalin Dahyabhai + * + * Redistribution and use in source and binary forms, 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. + * + */ +/* See RFC 2104 for descriptions. */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "hmacsha1.h" +#include "sha1.h" + +#define MINIMUM_KEY_SIZE SHA1_OUTPUT_SIZE +#define MAXIMUM_KEY_SIZE SHA1_BLOCK_SIZE + +static void +hmac_key_create(pam_handle_t *pamh, const char *filename, size_t key_size, + uid_t owner, gid_t group) +{ + int randfd, keyfd, i; + size_t count; + char *key; + + /* Open the destination file. */ + keyfd = open(filename, + O_WRONLY | O_CREAT | O_EXCL | O_TRUNC, + S_IRUSR | S_IWUSR); + if (keyfd == -1) { + pam_syslog(pamh, LOG_ERR, "Cannot create %s: %m", filename); + return; + } + + + if (fchown(keyfd, owner, group) == -1) { + pam_syslog(pamh, LOG_ERR, "Cannot chown %s: %m", filename); + return; + } + + /* Open the random device to get key data. */ + randfd = open("/dev/urandom", O_RDONLY); + if (randfd == -1) { + pam_syslog(pamh, LOG_ERR, "Cannot open /dev/urandom: %m"); + close(keyfd); + return; + } + + /* Read random data for use as the key. */ + key = malloc(key_size); + count = 0; + if (!key) { + close(keyfd); + close(randfd); + return; + } + while (count < key_size) { + i = read(randfd, key + count, key_size - count); + if ((i == 0) || (i == -1)) { + break; + } + count += i; + } + + close(randfd); + + /* If we didn't get enough, stop here. */ + if (count < key_size) { + pam_syslog(pamh, LOG_ERR, "Short read on random device"); + memset(key, 0, key_size); + free(key); + close(keyfd); + return; + } + + /* Now write the key. */ + count = 0; + while (count < key_size) { + i = write(keyfd, key + count, key_size - count); + if ((i == 0) || (i == -1)) { + break; + } + count += i; + } + memset(key, 0, key_size); + free(key); + close(keyfd); +} + +static void +hmac_key_read(pam_handle_t *pamh, const char *filename, size_t default_key_size, + uid_t owner, gid_t group, + void **key, size_t *key_size) +{ + char *tmp; + int keyfd, i, count; + struct stat st; + + tmp = NULL; + *key = NULL; + *key_size = 0; + + /* Try to open the key file. */ + keyfd = open(filename, O_RDONLY); + if (keyfd == -1) { + /* No such thing? Create it. */ + if (errno == ENOENT) { + hmac_key_create(pamh, filename, default_key_size, + owner, group); + keyfd = open(filename, O_RDONLY); + } else { + pam_syslog(pamh, LOG_ERR, "Cannot open %s: %m", filename); + } + if (keyfd == -1) + return; + } + + /* If we failed to open the file, we're done. */ + if (fstat(keyfd, &st) == -1) { + close(keyfd); + return; + } + + /* Read the contents of the file. */ + tmp = malloc(st.st_size); + if (!tmp) { + close(keyfd); + return; + } + + count = 0; + while (count < st.st_size) { + i = read(keyfd, tmp + count, st.st_size - count); + if ((i == 0) || (i == -1)) { + break; + } + count += i; + } + close(keyfd); + + /* Require that we got the expected amount of data. */ + if (count < st.st_size) { + memset(tmp, 0, st.st_size); + free(tmp); + return; + } + + /* Pass the key back. */ + *key = tmp; + *key_size = st.st_size; +} + +static void +xor_block(unsigned char *p, unsigned char byte, size_t length) +{ + size_t i; + for (i = 0; i < length; i++) { + p[i] = p[i] ^ byte; + } +} + +void +hmac_sha1_generate(void **mac, size_t *mac_length, + const void *raw_key, size_t raw_key_size, + const void *text, size_t text_length) +{ + unsigned char key[MAXIMUM_KEY_SIZE], tmp_key[MAXIMUM_KEY_SIZE]; + size_t maximum_key_size = SHA1_BLOCK_SIZE, + minimum_key_size = SHA1_OUTPUT_SIZE; + const unsigned char ipad = 0x36, opad = 0x5c; + struct sha1_context sha1; + unsigned char inner[SHA1_OUTPUT_SIZE], outer[SHA1_OUTPUT_SIZE]; + + *mac = NULL; + *mac_length = 0; + +#ifndef HMAC_ALLOW_SHORT_KEYS + /* If the key is too short, don't bother. */ + if (raw_key_size < minimum_key_size) { + return; + } +#endif + + /* If the key is too long, "compress" it, else copy it and pad it + * out with zero bytes. */ + memset(key, 0, sizeof(key)); + if (raw_key_size > maximum_key_size) { + sha1_init(&sha1); + sha1_update(&sha1, raw_key, raw_key_size); + sha1_output(&sha1, key); + } else { + memmove(key, raw_key, raw_key_size); + } + + /* Generate the inner sum. */ + memcpy(tmp_key, key, sizeof(tmp_key)); + xor_block(tmp_key, ipad, sizeof(tmp_key)); + + sha1_init(&sha1); + sha1_update(&sha1, tmp_key, sizeof(tmp_key)); + sha1_update(&sha1, text, text_length); + sha1_output(&sha1, inner); + + /* Generate the outer sum. */ + memcpy(tmp_key, key, sizeof(tmp_key)); + xor_block(tmp_key, opad, sizeof(tmp_key)); + + sha1_init(&sha1); + sha1_update(&sha1, tmp_key, sizeof(tmp_key)); + sha1_update(&sha1, inner, sizeof(inner)); + sha1_output(&sha1, outer); + + /* We don't need any of the keys any more. */ + memset(key, 0, sizeof(key)); + memset(tmp_key, 0, sizeof(tmp_key)); + + /* Allocate space to store the output. */ + *mac_length = sizeof(outer); + *mac = malloc(*mac_length); + if (*mac == NULL) { + *mac_length = 0; + return; + } + + memcpy(*mac, outer, *mac_length); +} + +void +hmac_sha1_generate_file(pam_handle_t *pamh, void **mac, size_t *mac_length, + const char *keyfile, uid_t owner, gid_t group, + const void *text, size_t text_length) +{ + void *key; + size_t key_length; + + hmac_key_read(pamh, keyfile, + MAXIMUM_KEY_SIZE, owner, group, + &key, &key_length); + if (key == NULL) { + *mac = NULL; + *mac_length = 0; + return; + } + hmac_sha1_generate(mac, mac_length, + key, key_length, + text, text_length); + memset(key, 0, key_length); + free(key); +} + +size_t +hmac_sha1_size(void) +{ + return SHA1_OUTPUT_SIZE; +} diff --git a/modules/pam_timestamp/hmacsha1.h b/modules/pam_timestamp/hmacsha1.h new file mode 100644 index 00000000..200d1d06 --- /dev/null +++ b/modules/pam_timestamp/hmacsha1.h @@ -0,0 +1,15 @@ +#ifndef pam_timestamp_hmacfile_h +#define pam_timestamp_hmacfile_h + +#include +#include + +size_t hmac_sha1_size(void); +void hmac_sha1_generate(void **mac, size_t *mac_length, + const void *key, size_t key_length, + const void *text, size_t text_length); +void hmac_sha1_generate_file(pam_handle_t *pamh, void **mac, size_t *mac_length, + const char *keyfile, uid_t owner, gid_t group, + const void *text, size_t text_length); + +#endif diff --git a/modules/pam_timestamp/pam_timestamp.8.xml b/modules/pam_timestamp/pam_timestamp.8.xml new file mode 100644 index 00000000..c96424ab --- /dev/null +++ b/modules/pam_timestamp/pam_timestamp.8.xml @@ -0,0 +1,189 @@ + + + + + + + pam_timestamp + 8 + Linux-PAM Manual + + + + pam_timestamp + Authenticate using cached successful authentication attempts + + + + + pam_timestamp.so + + timestamp_timeout=number + + + verbose + + + debug + + + + + + + DESCRIPTION + + + In a nutshell, pam_timestamp caches successful +authentication attempts, and allows you to use a recent successful attempt as +the basis for authentication. This is similar mechanism which is used in +sudo. + + + When an application opens a session using pam_timestamp, +a timestamp file is created in the timestampdir directory +for the user. When an application attempts to authenticate the user, a +pam_timestamp will treat a sufficiently recent timestamp +file as grounds for succeeding. + + + + + + OPTIONS + + + + + + + + How long should pam_timestamp treat timestamp as valid after their + last modification date (in seconds). Default is 300 seconds. + + + + + + + + + + Attempt to inform the user when access is granted. + + + + + + + + + + Turns on debugging messages sent to + syslog3 + . + + + + + + + + MODULE TYPES PROVIDED + + The and + module types are provided. + + + + + RETURN VALUES + + + PAM_AUTH_ERR + + + The module was not able to retrive the user name or + no valid timestamp file was found. + + + + + PAM_SUCCESS + + + Everything was successfull. + + + + + PAM_SESSION_ERR + + + Timestamp file could not be created or updated. + + + + + + + + NOTES + + Users can get confused when they are not always asked for passwords when +running a given program. Some users reflexively begin typing information before +noticing that it is not being asked for. + + + + + EXAMPLES + +auth sufficient pam_timestamp.so verbose +auth required pam_unix.so + +session required pam_unix.so +session optional pam_timestamp.so + + + + + FILES + + + /var/run/sudo/... + + timestamp files and directories + + + + + + + SEE ALSO + + + pam_timestamp_check8 + , + + pam.conf5 + , + + pam.d5 + , + + pam8 + + + + + + AUTHOR + + pam_tally was written by Nalin Dahyabhai. + + + + + diff --git a/modules/pam_timestamp/pam_timestamp.c b/modules/pam_timestamp/pam_timestamp.c new file mode 100644 index 00000000..8a01c6f3 --- /dev/null +++ b/modules/pam_timestamp/pam_timestamp.c @@ -0,0 +1,816 @@ +/****************************************************************************** + * A module for Linux-PAM that will cache authentication results, inspired by + * (and implemented with an eye toward being mixable with) sudo. + * + * Copyright (c) 2002 Red Hat, Inc. + * Written by Nalin Dahyabhai + * + * Redistribution and use in source and binary forms, 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. + * + */ + +#define PAM_SM_AUTH +#define PAM_SM_SESSION + +#include "config.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "hmacsha1.h" + +#include +#include +#include +#include + +/* The default timeout we use is 5 minutes, which matches the sudo default + * for the timestamp_timeout parameter. */ +#define DEFAULT_TIMESTAMP_TIMEOUT (5 * 60) +#define MODULE "pam_timestamp" +#define TIMESTAMPDIR "/var/run/sudo" +#define TIMESTAMPKEY TIMESTAMPDIR "/_pam_timestamp_key" + +/* Various buffers we use need to be at least as large as either PATH_MAX or + * LINE_MAX, so choose the larger of the two. */ +#if (LINE_MAX > PATH_MAX) +#define BUFLEN LINE_MAX +#else +#define BUFLEN PATH_MAX +#endif + +/* Return PAM_SUCCESS if the given directory looks "safe". */ +static int +check_dir_perms(pam_handle_t *pamh, const char *tdir) +{ + char scratch[BUFLEN]; + struct stat st; + int i; + /* Check that the directory is "safe". */ + if ((tdir == NULL) || (strlen(tdir) == 0)) { + return PAM_AUTH_ERR; + } + /* Iterate over the path, checking intermediate directories. */ + memset(scratch, 0, sizeof(scratch)); + for (i = 0; (tdir[i] != '\0') && (i < (int)sizeof(scratch)); i++) { + scratch[i] = tdir[i]; + if ((scratch[i] == '/') || (tdir[i + 1] == '\0')) { + /* We now have the name of a directory in the path, so + * we need to check it. */ + if ((lstat(scratch, &st) == -1) && (errno != ENOENT)) { + pam_syslog(pamh, LOG_ERR, + "unable to read `%s': %m", + scratch); + return PAM_AUTH_ERR; + } + if (!S_ISDIR(st.st_mode)) { + pam_syslog(pamh, LOG_ERR, + "`%s' is not a directory", + scratch); + return PAM_AUTH_ERR; + } + if (S_ISLNK(st.st_mode)) { + pam_syslog(pamh, LOG_ERR, + "`%s' is a symbolic link", + scratch); + return PAM_AUTH_ERR; + } + if (st.st_uid != 0) { + pam_syslog(pamh, LOG_ERR, + "`%s' owner UID != 0", + scratch); + return PAM_AUTH_ERR; + } + if (st.st_gid != 0) { + pam_syslog(pamh, LOG_ERR, + "`%s' owner GID != 0", + scratch); + return PAM_AUTH_ERR; + } + if ((st.st_mode & (S_IWGRP | S_IWOTH)) != 0) { + pam_syslog(pamh, LOG_ERR, + "`%s' permissions are lax", + scratch); + return PAM_AUTH_ERR; + } + } + } + return PAM_SUCCESS; +} + +/* Validate a tty pathname as actually belonging to a tty, and return its base + * name if it's valid. */ +static const char * +check_tty(const char *tty) +{ + /* Check that we're not being set up to take a fall. */ + if ((tty == NULL) || (strlen(tty) == 0)) { + return NULL; + } + /* Pull out the meaningful part of the tty's name. */ + if (strchr(tty, '/') != NULL) { + if (strncmp(tty, "/dev/", 5) != 0) { + /* Make sure the device node is actually in /dev/, + * noted by Michal Zalewski. */ + return NULL; + } + tty = strrchr(tty, '/') + 1; + } + /* Make sure the tty wasn't actually a directory (no basename). */ + if (strlen(tty) == 0) { + return NULL; + } + return tty; +} + +/* Determine the right path name for a given user's timestamp. */ +static int +format_timestamp_name(char *path, size_t len, + const char *timestamp_dir, + const char *tty, + const char *ruser, + const char *user) +{ + if (strcmp(ruser, user) == 0) { + return snprintf(path, len, "%s/%s/%s", timestamp_dir, + ruser, tty); + } else { + return snprintf(path, len, "%s/%s/%s:%s", timestamp_dir, + ruser, tty, user); + } +} + +/* Check if a given timestamp date, when compared to a current time, fits + * within the given interval. */ +static int +timestamp_good(time_t then, time_t now, time_t interval) +{ + if (((now >= then) && ((now - then) < interval)) || + ((now < then) && ((then - now) < (2 * interval)))) { + return PAM_SUCCESS; + } + return PAM_AUTH_ERR; +} + +static int +check_login_time(const char *ruser, time_t timestamp) +{ + struct utmp utbuf, *ut; + time_t oldest_login = 0; + + setutent(); + while(!getutent_r(&utbuf, &ut)) { + if (ut->ut_type != USER_PROCESS) { + continue; + } + if (strncmp(ruser, ut->ut_user, sizeof(ut->ut_user) != 0)) { + continue; + } + if (oldest_login == 0 || oldest_login > ut->ut_tv.tv_sec) { + oldest_login = ut->ut_tv.tv_sec; + } + } + endutent(); + if(oldest_login == 0 || timestamp < oldest_login) { + return PAM_AUTH_ERR; + } + return PAM_SUCCESS; +} + +#ifndef PAM_TIMESTAMP_MAIN +static int +get_ruser(pam_handle_t *pamh, char *ruserbuf, size_t ruserbuflen) +{ + const void *ruser; + struct passwd *pwd; + + if (ruserbuf == NULL || ruserbuflen < 1) + return -2; + /* Get the name of the source user. */ + if (pam_get_item(pamh, PAM_RUSER, &ruser) != PAM_SUCCESS) { + ruser = NULL; + } + if ((ruser == NULL) || (strlen(ruser) == 0)) { + /* Barring that, use the current RUID. */ + pwd = pam_modutil_getpwuid(pamh, getuid()); + if (pwd != NULL) { + ruser = pwd->pw_name; + } + } + if (ruser == NULL || strlen(ruser) >= ruserbuflen) { + *ruserbuf = '\0'; + return -1; + } + strcpy(ruserbuf, ruser); + return 0; +} + +/* Get the path to the timestamp to use. */ +static int +get_timestamp_name(pam_handle_t *pamh, int argc, const char **argv, + char *path, size_t len) +{ + const char *user, *tty; + const void *void_tty; + const char *tdir = TIMESTAMPDIR; + char ruser[BUFLEN]; + int i, debug = 0; + + /* Parse arguments. */ + for (i = 0; i < argc; i++) { + if (strcmp(argv[i], "debug") == 0) { + debug = 1; + } + } + for (i = 0; i < argc; i++) { + if (strncmp(argv[i], "timestampdir=", 13) == 0) { + tdir = argv[i] + 13; + if (debug) { + pam_syslog(pamh, LOG_DEBUG, + "storing timestamps in `%s'", + tdir); + } + } + } + i = check_dir_perms(pamh, tdir); + if (i != PAM_SUCCESS) { + return i; + } + /* Get the name of the target user. */ + if (pam_get_user(pamh, &user, NULL) != PAM_SUCCESS) { + user = NULL; + } + if ((user == NULL) || (strlen(user) == 0)) { + return PAM_AUTH_ERR; + } + if (debug) { + pam_syslog(pamh, LOG_DEBUG, "becoming user `%s'", user); + } + /* Get the name of the source user. */ + if (get_ruser(pamh, ruser, sizeof(ruser)) || strlen(ruser) == 0) { + return PAM_AUTH_ERR; + } + if (debug) { + pam_syslog(pamh, LOG_DEBUG, "currently user `%s'", ruser); + } + /* Get the name of the terminal. */ + if (pam_get_item(pamh, PAM_TTY, &void_tty) != PAM_SUCCESS) { + tty = NULL; + } else { + tty = void_tty; + } + if ((tty == NULL) || (strlen(tty) == 0)) { + tty = ttyname(STDIN_FILENO); + if ((tty == NULL) || (strlen(tty) == 0)) { + tty = ttyname(STDOUT_FILENO); + } + if ((tty == NULL) || (strlen(tty) == 0)) { + tty = ttyname(STDERR_FILENO); + } + if ((tty == NULL) || (strlen(tty) == 0)) { + /* Match sudo's behavior for this case. */ + tty = "unknown"; + } + } + if (debug) { + pam_syslog(pamh, LOG_DEBUG, "tty is `%s'", tty); + } + /* Snip off all but the last part of the tty name. */ + tty = check_tty(tty); + if (tty == NULL) { + return PAM_AUTH_ERR; + } + /* Generate the name of the file used to cache auth results. These + * paths should jive with sudo's per-tty naming scheme. */ + if (format_timestamp_name(path, len, tdir, tty, ruser, user) >= (int)len) { + return PAM_AUTH_ERR; + } + if (debug) { + pam_syslog(pamh, LOG_DEBUG, "using timestamp file `%s'", path); + } + return PAM_SUCCESS; +} + +/* Tell the user that access has been granted. */ +static void +verbose_success(pam_handle_t *pamh, long diff) +{ + pam_info(pamh, _("Access granted (last access was %ld seconds ago)."), diff); +} + +PAM_EXTERN int +pam_sm_authenticate(pam_handle_t *pamh, int flags, int argc, const char **argv) +{ + struct stat st; + time_t interval = DEFAULT_TIMESTAMP_TIMEOUT; + int i, fd, debug = 0, verbose = 0; + char path[BUFLEN], *p, *message, *message_end; + long tmp; + const void *void_service; + const char *service; + time_t now, then; + + /* Parse arguments. */ + for (i = 0; i < argc; i++) { + if (strcmp(argv[i], "debug") == 0) { + debug = 1; + } + } + for (i = 0; i < argc; i++) { + if (strncmp(argv[i], "timestamp_timeout=", 18) == 0) { + tmp = strtol(argv[i] + 18, &p, 0); + if ((p != NULL) && (*p == '\0')) { + interval = tmp; + if (debug) { + pam_syslog(pamh, LOG_DEBUG, + "setting timeout to %ld" + " seconds", (long)interval); + } + } + } else + if (strcmp(argv[i], "verbose") == 0) { + verbose = 1; + if (debug) { + pam_syslog(pamh, LOG_DEBUG, + "becoming more verbose"); + } + } + } + + if (flags & PAM_SILENT) { + verbose = 0; + } + + /* Get the name of the timestamp file. */ + if (get_timestamp_name(pamh, argc, argv, + path, sizeof(path)) != PAM_SUCCESS) { + return PAM_AUTH_ERR; + } + + /* Get the name of the service. */ + if (pam_get_item(pamh, PAM_SERVICE, &void_service) != PAM_SUCCESS) { + service = NULL; + } else { + service = void_service; + } + if ((service == NULL) || (strlen(service) == 0)) { + service = "(unknown)"; + } + + /* Open the timestamp file. */ + fd = open(path, O_RDONLY | O_NOFOLLOW); + if (fd == -1) { + if (debug) { + pam_syslog(pamh, LOG_DEBUG, + "cannot open timestamp `%s': %m", + path); + } + return PAM_AUTH_ERR; + } + + if (fstat(fd, &st) == 0) { + int count; + void *mac; + size_t maclen; + char ruser[BUFLEN]; + + /* Check that the file is owned by the superuser. */ + if ((st.st_uid != 0) || (st.st_gid != 0)) { + pam_syslog(pamh, LOG_ERR, "timestamp file `%s' is " + "not owned by root", path); + close(fd); + return PAM_AUTH_ERR; + } + + /* Check that the file is a normal file. */ + if (!(S_ISREG(st.st_mode))) { + pam_syslog(pamh, LOG_ERR, "timestamp file `%s' is " + "not a regular file", path); + close(fd); + return PAM_AUTH_ERR; + } + + /* Check that the file is the expected size. */ + if (st.st_size == 0) { + /* Invalid, but may have been created by sudo. */ + close(fd); + return PAM_AUTH_ERR; + } + if (st.st_size != + (off_t)(strlen(path) + 1 + sizeof(then) + hmac_sha1_size())) { + pam_syslog(pamh, LOG_NOTICE, "timestamp file `%s' " + "appears to be corrupted", path); + close(fd); + return PAM_AUTH_ERR; + } + + /* Read the file contents. */ + message = malloc(st.st_size); + count = 0; + if (!message) { + close(fd); + return PAM_BUF_ERR; + } + while (count < st.st_size) { + i = read(fd, message + count, st.st_size - count); + if ((i == 0) || (i == -1)) { + break; + } + count += i; + } + if (count < st.st_size) { + pam_syslog(pamh, LOG_NOTICE, "error reading timestamp " + "file `%s': %m", path); + close(fd); + free(message); + return PAM_AUTH_ERR; + } + message_end = message + strlen(path) + 1 + sizeof(then); + + /* Regenerate the MAC. */ + hmac_sha1_generate_file(pamh, &mac, &maclen, TIMESTAMPKEY, 0, 0, + message, message_end - message); + if ((mac == NULL) || + (memcmp(path, message, strlen(path)) != 0) || + (memcmp(mac, message_end, maclen) != 0)) { + pam_syslog(pamh, LOG_NOTICE, "timestamp file `%s' is " + "corrupted", path); + close(fd); + free(message); + return PAM_AUTH_ERR; + } + free(mac); + memmove(&then, message + strlen(path) + 1, sizeof(then)); + free(message); + + /* Check oldest login against timestamp */ + if (get_ruser(pamh, ruser, sizeof(ruser))) + { + close(fd); + return PAM_AUTH_ERR; + } + if (check_login_time(ruser, then) != PAM_SUCCESS) + { + pam_syslog(pamh, LOG_NOTICE, "timestamp file `%s' is " + "older than oldest login, disallowing " + "access to %s for user %s", + path, service, ruser); + close(fd); + return PAM_AUTH_ERR; + } + + /* Compare the dates. */ + now = time(NULL); + if (timestamp_good(then, now, interval) == PAM_SUCCESS) { + close(fd); + pam_syslog(pamh, LOG_NOTICE, "timestamp file `%s' is " + "only %ld seconds old, allowing access to %s " + "for user %s", path, (long) (now - st.st_mtime), + service, ruser); + if (verbose) { + verbose_success(pamh, now - st.st_mtime); + } + return PAM_SUCCESS; + } else { + close(fd); + pam_syslog(pamh, LOG_NOTICE, "timestamp file `%s' has " + "unacceptable age (%ld seconds), disallowing " + "access to %s for user %s", + path, (long) (now - st.st_mtime), + service, ruser); + return PAM_AUTH_ERR; + } + } + close(fd); + + /* Fail by default. */ + return PAM_AUTH_ERR; +} + +PAM_EXTERN int +pam_sm_setcred(pam_handle_t *pamh UNUSED, int flags UNUSED, int argc UNUSED, const char **argv UNUSED) +{ + return PAM_SUCCESS; +} + +PAM_EXTERN int +pam_sm_open_session(pam_handle_t *pamh, int flags UNUSED, int argc, const char **argv) +{ + char path[BUFLEN], subdir[BUFLEN], *text, *p; + void *mac; + size_t maclen; + time_t now; + int fd, i, debug = 0; + + /* Parse arguments. */ + for (i = 0; i < argc; i++) { + if (strcmp(argv[i], "debug") == 0) { + debug = 1; + } + } + + /* Get the name of the timestamp file. */ + if (get_timestamp_name(pamh, argc, argv, + path, sizeof(path)) != PAM_SUCCESS) { + return PAM_SESSION_ERR; + } + + /* Create the directory for the timestamp file if it doesn't already + * exist. */ + for (i = 1; path[i] != '\0'; i++) { + if (path[i] == '/') { + /* Attempt to create the directory. */ + strncpy(subdir, path, i); + subdir[i] = '\0'; + if (mkdir(subdir, 0700) == 0) { + /* Attempt to set the owner to the superuser. */ + lchown(subdir, 0, 0); + } else { + if (errno != EEXIST) { + if (debug) { + pam_syslog(pamh, LOG_DEBUG, + "error creating directory `%s': %m", + subdir); + } + return PAM_SESSION_ERR; + } + } + } + } + + /* Generate the message. */ + text = malloc(strlen(path) + 1 + sizeof(now) + hmac_sha1_size()); + if (text == NULL) { + pam_syslog(pamh, LOG_ERR, "unable to allocate memory: %m"); + return PAM_SESSION_ERR; + } + p = text; + + strcpy(text, path); + p += strlen(path) + 1; + + now = time(NULL); + memmove(p, &now, sizeof(now)); + p += sizeof(now); + + /* Generate the MAC and append it to the plaintext. */ + hmac_sha1_generate_file(pamh, &mac, &maclen, + TIMESTAMPKEY, + 0, 0, + text, p - text); + if (mac == NULL) { + pam_syslog(pamh, LOG_ERR, "failure generating MAC: %m"); + free(text); + return PAM_SESSION_ERR; + } + memmove(p, mac, maclen); + p += maclen; + free(mac); + + /* Open the file. */ + fd = open(path, O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR); + if (fd == -1) { + pam_syslog(pamh, LOG_ERR, "unable to open `%s': %m", path); + free(text); + return PAM_SESSION_ERR; + } + + /* Attempt to set the owner to the superuser. */ + fchown(fd, 0, 0); + + /* Write the timestamp to the file. */ + if (write(fd, text, p - text) != p - text) { + pam_syslog(pamh, LOG_ERR, "unable to write to `%s': %m", path); + close(fd); + free(text); + return PAM_SESSION_ERR; + } + + /* Close the file and return successfully. */ + close(fd); + free(text); + pam_syslog(pamh, LOG_DEBUG, "updated timestamp file `%s'", path); + return PAM_SUCCESS; +} + +PAM_EXTERN int +pam_sm_close_session(pam_handle_t *pamh UNUSED, int flags UNUSED, int argc UNUSED, const char **argv UNUSED) +{ + return PAM_SUCCESS; +} + +#ifdef PAM_STATIC +/* static module data */ + +struct pam_module _pam_timestamp_modstruct = { + "pam_timestamp", + pam_sm_authenticate, + pam_sm_setcred, + NULL, + pam_sm_open_session, + pam_sm_close_session, + NULL +}; +#endif + + +#else /* PAM_TIMESTAMP_MAIN */ + +#define USAGE "Usage: %s [[-k] | [-d]] [target user]\n" +#define CHECK_INTERVAL 7 + +int +main(int argc, char **argv) +{ + int i, pretval = -1, retval = 0, dflag = 0, kflag = 0; + const char *target_user = NULL, *user = NULL, *tty = NULL; + struct passwd *pwd; + struct timeval tv; + fd_set write_fds; + char path[BUFLEN]; + struct stat st; + + /* Check that there's nothing funny going on with stdio. */ + if ((fstat(STDIN_FILENO, &st) == -1) || + (fstat(STDOUT_FILENO, &st) == -1) || + (fstat(STDERR_FILENO, &st) == -1)) { + /* Appropriate the "no controlling tty" error code. */ + return 3; + } + + /* Parse arguments. */ + while ((i = getopt(argc, argv, "dk")) != -1) { + switch (i) { + case 'd': + dflag++; + break; + case 'k': + kflag++; + break; + default: + fprintf(stderr, USAGE, argv[0]); + return 1; + break; + } + } + + /* Bail if both -k and -d are given together. */ + if ((kflag + dflag) > 1) { + fprintf(stderr, USAGE, argv[0]); + return 1; + } + + /* Check that we're setuid. */ + if (geteuid() != 0) { + fprintf(stderr, "%s must be setuid root\n", + argv[0]); + retval = 2; + } + + /* Check that we have a controlling tty. */ + tty = ttyname(STDIN_FILENO); + if ((tty == NULL) || (strlen(tty) == 0)) { + tty = ttyname(STDOUT_FILENO); + } + if ((tty == NULL) || (strlen(tty) == 0)) { + tty = ttyname(STDERR_FILENO); + } + if ((tty == NULL) || (strlen(tty) == 0)) { + tty = "unknown"; + } + + /* Get the name of the invoking (requesting) user. */ + pwd = getpwuid(getuid()); + if (pwd == NULL) { + retval = 4; + } + + /* Get the name of the target user. */ + user = strdup(pwd->pw_name); + if (user == NULL) { + retval = 4; + } else { + target_user = (optind < argc) ? argv[optind] : user; + if ((strchr(target_user, '.') != NULL) || + (strchr(target_user, '/') != NULL) || + (strchr(target_user, '%') != NULL)) { + fprintf(stderr, "unknown user: %s\n", + target_user); + retval = 4; + } + } + + /* Sanity check the tty to make sure we should be checking + * for timestamps which pertain to it. */ + if (retval == 0) { + tty = check_tty(tty); + if (tty == NULL) { + fprintf(stderr, "invalid tty\n"); + retval = 6; + } + } + + do { + /* Sanity check the timestamp directory itself. */ + if (retval == 0) { + if (check_dir_perms(NULL, TIMESTAMPDIR) != PAM_SUCCESS) { + retval = 5; + } + } + + if (retval == 0) { + /* Generate the name of the timestamp file. */ + format_timestamp_name(path, sizeof(path), TIMESTAMPDIR, + tty, user, target_user); + } + + if (retval == 0) { + if (kflag) { + /* Remove the timestamp. */ + if (lstat(path, &st) != -1) { + retval = unlink(path); + } + } else { + /* Check the timestamp. */ + if (lstat(path, &st) != -1) { + /* Check oldest login against timestamp */ + if (check_login_time(user, st.st_mtime) != PAM_SUCCESS) { + retval = 7; + } else if (!timestamp_good(st.st_mtime, time(NULL), + DEFAULT_TIMESTAMP_TIMEOUT) == PAM_SUCCESS) { + retval = 7; + } + } else { + retval = 7; + } + } + } + + if (dflag > 0) { + struct timeval now; + /* Send the would-be-returned value to our parent. */ + signal(SIGPIPE, SIG_DFL); + fprintf(stdout, "%d\n", retval); + fflush(stdout); + /* Wait. */ + gettimeofday(&now, NULL); + tv.tv_sec = CHECK_INTERVAL; + /* round the sleep time to get woken up on a whole second */ + tv.tv_usec = 1000000 - now.tv_usec; + if (now.tv_usec < 500000) + tv.tv_sec--; + FD_ZERO(&write_fds); + FD_SET(STDOUT_FILENO, &write_fds); + select(STDOUT_FILENO + 1, + NULL, NULL, &write_fds, + &tv); + pretval = retval; + retval = 0; + } + } while (dflag > 0); + + return retval; +} + +#endif diff --git a/modules/pam_timestamp/pam_timestamp_check.8.xml b/modules/pam_timestamp/pam_timestamp_check.8.xml new file mode 100644 index 00000000..85484a06 --- /dev/null +++ b/modules/pam_timestamp/pam_timestamp_check.8.xml @@ -0,0 +1,208 @@ + + + + + + + pam_timestamp_check + 8 + Linux-PAM Manual + + + + pam_timestamp_check + Check to see if the default timestamp is valid + + + + + pam_timestamp_check + + -k + + + -d + + + target_user + + + + + + + DESCRIPTION + + + With no arguments pam_timestamp_check will check to +see if the default timestamp is valid, or optionally remove it. + + + + + + OPTIONS + + + + + + + + Instead of checking the validity of a timestamp, remove it. + This is analogous to sudo's -k option. + + + + + + + + + + Instead of returning validity using an exit status, + loop indefinitely, polling regularly and printing the status on + standard output. + + + + + + + + + + By default pam_timestamp_check checks or removes + timestamps generated by pam_timestamp when + the user authenticates as herself. When the user authenticates as a + different user, the name of the timestamp file changes to + accomodate this. target_user allows + to specify this user name. + + + + + + + + RETURN VALUES + + + 0 + + + The timestamp is valid. + + + + + 2 + + + The binary is not setuid root. + + + + + 3 + + + Invalid invocation. + + + + + 4 + + + User is unknown. + + + + + 5 + + + Permissions error. + + + + + 6 + + + Invalid controlling tty. + + + + + 7 + + + Timestamp is not valid. + + + + + + + + NOTES + + Users can get confused when they are not always asked for passwords when +running a given program. Some users reflexively begin typing information before +noticing that it is not being asked for. + + + + + EXAMPLES + +auth sufficient pam_timestamp.so verbose +auth required pam_unix.so + +session required pam_unix.so +session optional pam_timestamp.so + + + + + FILES + + + /var/run/sudo/... + + timestamp files and directories + + + + + + + SEE ALSO + + + pam_timestamp_check8 + , + + pam.conf5 + , + + pam.d5 + , + + pam8 + + + + + + AUTHOR + + pam_tally was written by Nalin Dahyabhai. + + + + + diff --git a/modules/pam_timestamp/pam_timestamp_check.c b/modules/pam_timestamp/pam_timestamp_check.c new file mode 100644 index 00000000..52b5a95a --- /dev/null +++ b/modules/pam_timestamp/pam_timestamp_check.c @@ -0,0 +1,42 @@ +/****************************************************************************** + * A module for Linux-PAM that will cache authentication results, inspired by + * (and implemented with an eye toward being mixable with) sudo. + * + * Copyright (c) 2002 Red Hat, Inc. + * Written by Nalin Dahyabhai + * + * Redistribution and use in source and binary forms, 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. + * + */ + +#define PAM_TIMESTAMP_MAIN 1 +#include "pam_timestamp.c" diff --git a/modules/pam_timestamp/sha1.c b/modules/pam_timestamp/sha1.c new file mode 100644 index 00000000..e6705eb5 --- /dev/null +++ b/modules/pam_timestamp/sha1.c @@ -0,0 +1,254 @@ +/* Yet another SHA-1 implementation. + * + * Copyright (c) 2003 Red Hat, Inc. + * Written by Nalin Dahyabhai + * + * Redistribution and use in source and binary forms, 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. + * + */ +/* See http://www.itl.nist.gov/fipspubs/fip180-1.htm for descriptions. */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "sha1.h" + +static unsigned char +padding[SHA1_BLOCK_SIZE] = { + 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +}; + +static u_int32_t +F(u_int32_t b, u_int32_t c, u_int32_t d) +{ + return (b & c) | ((~b) & d); +} + +static u_int32_t +G(u_int32_t b, u_int32_t c, u_int32_t d) +{ + return b ^ c ^ d; +} + +static u_int32_t +H(u_int32_t b, u_int32_t c, u_int32_t d) +{ + return (b & c) | (b & d) | (c & d); +} + +static u_int32_t +RL(u_int32_t n, u_int32_t s) +{ + return (n << s) | (n >> (32 - s)); +} + +static u_int32_t +sha1_round(u_int32_t (*FUNC)(u_int32_t, u_int32_t, u_int32_t), + u_int32_t a, u_int32_t b, u_int32_t c, u_int32_t d, u_int32_t e, + u_int32_t i, u_int32_t n) +{ + return RL(a, 5) + FUNC(b, c, d) + e + i + n; +} + +void +sha1_init(struct sha1_context *ctx) +{ + memset(ctx, 0, sizeof(*ctx)); + ctx->a = 0x67452301; + ctx->b = 0xefcdab89; + ctx->c = 0x98badcfe; + ctx->d = 0x10325476; + ctx->e = 0xc3d2e1f0; +} + +static void +sha1_process(struct sha1_context *ctx, u_int32_t buffer[SHA1_BLOCK_SIZE / 4]) +{ + u_int32_t a, b, c, d, e, temp; + u_int32_t data[80]; + int i; + + for (i = 0; i < 16; i++) { + data[i] = htonl(buffer[i]); + } + for (i = 16; i < 80; i++) { + data[i] = RL(data[i - 3] ^ data[i - 8] ^ data[i - 14] ^ data[i - 16], 1); + } + + a = ctx->a; + b = ctx->b; + c = ctx->c; + d = ctx->d; + e = ctx->e; + + for (i = 0; i < 20; i++) { + temp = sha1_round(F, a, b, c, d, e, data[i], 0x5a827999); + e = d; d = c; c = RL(b, 30); b = a; a = temp; + } + for (i = 20; i < 40; i++) { + temp = sha1_round(G, a, b, c, d, e, data[i], 0x6ed9eba1); + e = d; d = c; c = RL(b, 30); b = a; a = temp; + } + for (i = 40; i < 60; i++) { + temp = sha1_round(H, a, b, c, d, e, data[i], 0x8f1bbcdc); + e = d; d = c; c = RL(b, 30); b = a; a = temp; + } + for (i = 60; i < 80; i++) { + temp = sha1_round(G, a, b, c, d, e, data[i], 0xca62c1d6); + e = d; d = c; c = RL(b, 30); b = a; a = temp; + } + + ctx->a += a; + ctx->b += b; + ctx->c += c; + ctx->d += d; + ctx->e += e; + + memset(buffer, 0, sizeof(buffer[0]) * SHA1_BLOCK_SIZE / 4); + memset(data, 0, sizeof(data)); +} + +void +sha1_update(struct sha1_context *ctx, const unsigned char *data, size_t length) +{ + size_t i = 0, l = length, c, t; + u_int32_t count = 0; + + /* Process any pending + data blocks. */ + while (l + ctx->pending_count >= SHA1_BLOCK_SIZE) { + c = ctx->pending_count; + t = SHA1_BLOCK_SIZE - c; + memcpy(ctx->pending + c, &data[i], t); + sha1_process(ctx, (u_int32_t*) ctx->pending); + i += t; + l -= t; + ctx->pending_count = 0; + } + + /* Save what's left of the data block as a pending data block. */ + c = ctx->pending_count; + memcpy(ctx->pending + c, &data[i], l); + ctx->pending_count += l; + + /* Update the message length. */ + ctx->count += length; + + /* Update our internal counts. */ + if (length != 0) { + count = ctx->counts[0]; + ctx->counts[0] += length; + if (count >= ctx->counts[0]) { + ctx->counts[1]++; + } + } +} + +size_t +sha1_output(struct sha1_context *ctx, unsigned char *out) +{ + struct sha1_context ctx2; + + /* Output the sum. */ + if (out != NULL) { + u_int32_t c; + memcpy(&ctx2, ctx, sizeof(ctx2)); + + /* Pad this block. */ + c = ctx2.pending_count; + memcpy(ctx2.pending + c, + padding, SHA1_BLOCK_SIZE - c); + + /* Do we need to process two blocks now? */ + if (c >= (SHA1_BLOCK_SIZE - (sizeof(u_int32_t) * 2))) { + /* Process this block. */ + sha1_process(&ctx2, + (u_int32_t*) ctx2.pending); + /* Set up another block. */ + ctx2.pending_count = 0; + memset(ctx2.pending, 0, SHA1_BLOCK_SIZE); + ctx2.pending[0] = + (c == SHA1_BLOCK_SIZE) ? 0x80 : 0; + } + + /* Process the final block. */ + ctx2.counts[1] <<= 3; + if (ctx2.counts[0] >> 29) { + ctx2.counts[1] |= + (ctx2.counts[0] >> 29); + } + ctx2.counts[0] <<= 3; + ctx2.counts[0] = htonl(ctx2.counts[0]); + ctx2.counts[1] = htonl(ctx2.counts[1]); + memcpy(ctx2.pending + 56, + &ctx2.counts[1], sizeof(u_int32_t)); + memcpy(ctx2.pending + 60, + &ctx2.counts[0], sizeof(u_int32_t)); + sha1_process(&ctx2, (u_int32_t*) ctx2.pending); + + /* Output the data. */ + out[ 3] = (ctx2.a >> 0) & 0xff; + out[ 2] = (ctx2.a >> 8) & 0xff; + out[ 1] = (ctx2.a >> 16) & 0xff; + out[ 0] = (ctx2.a >> 24) & 0xff; + + out[ 7] = (ctx2.b >> 0) & 0xff; + out[ 6] = (ctx2.b >> 8) & 0xff; + out[ 5] = (ctx2.b >> 16) & 0xff; + out[ 4] = (ctx2.b >> 24) & 0xff; + + out[11] = (ctx2.c >> 0) & 0xff; + out[10] = (ctx2.c >> 8) & 0xff; + out[ 9] = (ctx2.c >> 16) & 0xff; + out[ 8] = (ctx2.c >> 24) & 0xff; + + out[15] = (ctx2.d >> 0) & 0xff; + out[14] = (ctx2.d >> 8) & 0xff; + out[13] = (ctx2.d >> 16) & 0xff; + out[12] = (ctx2.d >> 24) & 0xff; + + out[19] = (ctx2.e >> 0) & 0xff; + out[18] = (ctx2.e >> 8) & 0xff; + out[17] = (ctx2.e >> 16) & 0xff; + out[16] = (ctx2.e >> 24) & 0xff; + } + + return SHA1_OUTPUT_SIZE; +} diff --git a/modules/pam_timestamp/sha1.h b/modules/pam_timestamp/sha1.h new file mode 100644 index 00000000..667b87ca --- /dev/null +++ b/modules/pam_timestamp/sha1.h @@ -0,0 +1,60 @@ +/* Yet another SHA-1 implementation. + * + * Copyright (c) 2003 Red Hat, Inc. + * Written by Nalin Dahyabhai + * + * Redistribution and use in source and binary forms, 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 pam_timestamp_sha1_h +#define pam_timestamp_sha1_h + +#include + +#define SHA1_BLOCK_SIZE 64 + +struct sha1_context { + size_t count; + unsigned char pending[SHA1_BLOCK_SIZE]; + u_int32_t counts[2]; + size_t pending_count; + u_int32_t a, b, c, d, e; +}; + +#define SHA1_OUTPUT_SIZE 20 + +void sha1_init(struct sha1_context *ctx); +void sha1_update(struct sha1_context *ctx, + const unsigned char *data, size_t length); +size_t sha1_output(struct sha1_context *ctx, unsigned char *out); + +#endif diff --git a/modules/pam_timestamp/tst-pam_timestamp b/modules/pam_timestamp/tst-pam_timestamp new file mode 100755 index 00000000..1d425b83 --- /dev/null +++ b/modules/pam_timestamp/tst-pam_timestamp @@ -0,0 +1,2 @@ +#!/bin/sh +../../tests/tst-dlopen .libs/pam_timestamp.so diff --git a/po/Linux-PAM.pot b/po/Linux-PAM.pot index 55b4ff46..054b95af 100644 --- a/po/Linux-PAM.pot +++ b/po/Linux-PAM.pot @@ -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-10-22 20:01+0200\n" +"POT-Creation-Date: 2008-11-28 15:16+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -167,19 +167,19 @@ msgid "Unknown PAM error" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:64 -#: modules/pam_pwhistory/pam_pwhistory.c:61 +#: modules/pam_pwhistory/pam_pwhistory.c:62 #, c-format msgid "New %s%spassword: " msgstr "" #: modules/pam_cracklib/pam_cracklib.c:66 -#: modules/pam_pwhistory/pam_pwhistory.c:62 +#: modules/pam_pwhistory/pam_pwhistory.c:64 #, c-format msgid "Retype new %s%spassword: " msgstr "" #: modules/pam_cracklib/pam_cracklib.c:67 -#: modules/pam_pwhistory/pam_pwhistory.c:63 +#: modules/pam_pwhistory/pam_pwhistory.c:65 msgid "Sorry, passwords do not match." msgstr "" @@ -230,7 +230,7 @@ msgid "Password unchanged" msgstr "" #: modules/pam_cracklib/pam_cracklib.c:584 -#: modules/pam_cracklib/pam_cracklib.c:709 +#: modules/pam_cracklib/pam_cracklib.c:710 #, c-format msgid "BAD PASSWORD: %s" msgstr "" @@ -353,13 +353,13 @@ msgstr "" msgid "Unable to create directory %s: %m" msgstr "" -#: modules/pam_pwhistory/pam_pwhistory.c:224 -#: modules/pam_pwhistory/pam_pwhistory.c:258 +#: modules/pam_pwhistory/pam_pwhistory.c:231 +#: modules/pam_pwhistory/pam_pwhistory.c:267 msgid "Password change aborted." msgstr "" -#: modules/pam_pwhistory/pam_pwhistory.c:235 -#: modules/pam_pwhistory/pam_pwhistory.c:295 +#: modules/pam_pwhistory/pam_pwhistory.c:242 +#: modules/pam_pwhistory/pam_pwhistory.c:304 #: modules/pam_unix/pam_unix_passwd.c:470 msgid "Password has been already used. Choose another." msgstr "" @@ -424,20 +424,20 @@ msgstr "" msgid "login: failure forking: %m" msgstr "" -#: modules/pam_stress/pam_stress.c:476 +#: modules/pam_stress/pam_stress.c:475 #, c-format msgid "Changing STRESS password for %s." msgstr "" -#: modules/pam_stress/pam_stress.c:490 +#: modules/pam_stress/pam_stress.c:489 msgid "Enter new STRESS password: " msgstr "" -#: modules/pam_stress/pam_stress.c:493 +#: modules/pam_stress/pam_stress.c:492 msgid "Retype new STRESS password: " msgstr "" -#: modules/pam_stress/pam_stress.c:522 +#: modules/pam_stress/pam_stress.c:521 msgid "Verification mis-typed; password unchanged" msgstr "" @@ -446,7 +446,7 @@ msgstr "" msgid "Account temporary locked (%ld seconds left)" msgstr "" -#: modules/pam_tally/pam_tally.c:566 +#: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:520 #, c-format msgid "Account locked due to %u failed logins" msgstr "" @@ -488,11 +488,6 @@ msgstr "" msgid "%s: Can't reset all users to non-zero\n" msgstr "" -#: modules/pam_tally2/pam_tally2.c:520 -#, c-format -msgid "Account locked due to %hu failed logins" -msgstr "" - #: modules/pam_tally2/pam_tally2.c:865 #, c-format msgid "Login Failures Latest failure From\n" @@ -506,6 +501,11 @@ msgid "" " [-r] [--reset[=n]] [--quiet]\n" msgstr "" +#: modules/pam_timestamp/pam_timestamp.c:339 +#, c-format +msgid "Access granted (last access was %ld seconds ago)." +msgstr "" + #: modules/pam_unix/pam_unix_acct.c:228 modules/pam_unix/pam_unix_acct.c:250 msgid "Your account has expired; please contact your system administrator" msgstr "" diff --git a/po/POTFILES.in b/po/POTFILES.in index 5ca1caa9..a5db7a10 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -74,6 +74,8 @@ ./modules/pam_tally2/pam_tally2_app.c ./modules/pam_tally2/pam_tally2.c ./modules/pam_time/pam_time.c +./modules/pam_timestamp/pam_timestamp.c +./modules/pam_timestamp/pam_timestamp_check.c ./modules/pam_tty_audit/pam_tty_audit.c ./modules/pam_umask/pam_umask.c ./modules/pam_unix/bigcrypt.c diff --git a/po/ar.po b/po/ar.po index 68ecd939..77b6480f 100644 --- 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-10-22 20:01+0200\n" +"POT-Creation-Date: 2008-11-28 15:16+0100\n" "PO-Revision-Date: 2001-07-13 15:36+0200\n" "Last-Translator: Novell Language \n" "Language-Team: Novell Language \n" @@ -166,19 +166,19 @@ msgid "Unknown PAM error" msgstr "خطأ PAM غير معروف" #: modules/pam_cracklib/pam_cracklib.c:64 -#: modules/pam_pwhistory/pam_pwhistory.c:61 +#: modules/pam_pwhistory/pam_pwhistory.c:62 #, c-format msgid "New %s%spassword: " msgstr "كلمة سر %s%s الجديدة: " #: modules/pam_cracklib/pam_cracklib.c:66 -#: modules/pam_pwhistory/pam_pwhistory.c:62 +#: modules/pam_pwhistory/pam_pwhistory.c:64 #, c-format msgid "Retype new %s%spassword: " msgstr "أعد كتابة كلمة سر %s%s الجديدة: " #: modules/pam_cracklib/pam_cracklib.c:67 -#: modules/pam_pwhistory/pam_pwhistory.c:63 +#: modules/pam_pwhistory/pam_pwhistory.c:65 msgid "Sorry, passwords do not match." msgstr "عذرًا، يوجد عدم تطابق بين كلمات السر." @@ -229,7 +229,7 @@ msgid "Password unchanged" msgstr "لم يتم تغيير كلمة السر" #: modules/pam_cracklib/pam_cracklib.c:584 -#: modules/pam_cracklib/pam_cracklib.c:709 +#: modules/pam_cracklib/pam_cracklib.c:710 #, c-format msgid "BAD PASSWORD: %s" msgstr "كلمة سر سيئة: %s" @@ -352,14 +352,14 @@ msgstr "" msgid "Unable to create directory %s: %m" msgstr "" -#: modules/pam_pwhistory/pam_pwhistory.c:224 -#: modules/pam_pwhistory/pam_pwhistory.c:258 +#: modules/pam_pwhistory/pam_pwhistory.c:231 +#: modules/pam_pwhistory/pam_pwhistory.c:267 #, fuzzy msgid "Password change aborted." msgstr "لم يتم تغيير كلمة السر" -#: modules/pam_pwhistory/pam_pwhistory.c:235 -#: modules/pam_pwhistory/pam_pwhistory.c:295 +#: modules/pam_pwhistory/pam_pwhistory.c:242 +#: modules/pam_pwhistory/pam_pwhistory.c:304 #: modules/pam_unix/pam_unix_passwd.c:470 msgid "Password has been already used. Choose another." msgstr "كلمة السر التي تم إدخالها مستخدمة بالفعل. اختر كلمة سر أخرى." @@ -428,20 +428,20 @@ msgstr "فشل pam_set_item()\n" msgid "login: failure forking: %m" msgstr "تسجيل الدخول: فشل تشعيب: %m" -#: modules/pam_stress/pam_stress.c:476 +#: modules/pam_stress/pam_stress.c:475 #, fuzzy, c-format msgid "Changing STRESS password for %s." msgstr "تغيير كلمة سر STRESS لـ" -#: modules/pam_stress/pam_stress.c:490 +#: modules/pam_stress/pam_stress.c:489 msgid "Enter new STRESS password: " msgstr "أدخل كلمة سر STRESS الجديدة: " -#: modules/pam_stress/pam_stress.c:493 +#: modules/pam_stress/pam_stress.c:492 msgid "Retype new STRESS password: " msgstr "أعد كتابة كلمة سر STRESS الجديدة: " -#: modules/pam_stress/pam_stress.c:522 +#: modules/pam_stress/pam_stress.c:521 msgid "Verification mis-typed; password unchanged" msgstr "إعادة كتابة كلمة السر غير صحيحة؛ كلمة السر لم تتغير" @@ -450,7 +450,7 @@ msgstr "إعادة كتابة كلمة السر غير صحيحة؛ كلمة ا msgid "Account temporary locked (%ld seconds left)" msgstr "" -#: modules/pam_tally/pam_tally.c:566 +#: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:520 #, c-format msgid "Account locked due to %u failed logins" msgstr "" @@ -493,11 +493,6 @@ msgstr "" msgid "%s: Can't reset all users to non-zero\n" msgstr "%s: لا يمكن إعادة تعيين كافة المستخدمين إلى رقم غير الصفر\n" -#: modules/pam_tally2/pam_tally2.c:520 -#, c-format -msgid "Account locked due to %hu failed logins" -msgstr "" - #: modules/pam_tally2/pam_tally2.c:865 #, c-format msgid "Login Failures Latest failure From\n" @@ -512,6 +507,11 @@ msgid "" msgstr "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" +#: modules/pam_timestamp/pam_timestamp.c:339 +#, c-format +msgid "Access granted (last access was %ld seconds ago)." +msgstr "" + #: modules/pam_unix/pam_unix_acct.c:228 modules/pam_unix/pam_unix_acct.c:250 msgid "Your account has expired; please contact your system administrator" msgstr "انتهت مدة صلاحية الحساب الخاص بك؛ الرجاء الاتصال بمسؤول النظام" diff --git a/po/as.po b/po/as.po index 4810e74e..b705ad97 100644 --- a/po/as.po +++ b/po/as.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Linux-PAM.tip\n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n" -"POT-Creation-Date: 2008-10-22 20:01+0200\n" +"POT-Creation-Date: 2008-11-28 15:16+0100\n" "PO-Revision-Date: 2008-10-13 11:23+0530\n" "Last-Translator: Amitakhya Phukan \n" "Language-Team: Assamese\n" @@ -168,19 +168,19 @@ msgid "Unknown PAM error" msgstr "অজ্ঞাত PAM ভুল" #: modules/pam_cracklib/pam_cracklib.c:64 -#: modules/pam_pwhistory/pam_pwhistory.c:61 +#: modules/pam_pwhistory/pam_pwhistory.c:62 #, c-format msgid "New %s%spassword: " msgstr "নতুন %s%s গুপ্তশব্দ: " #: modules/pam_cracklib/pam_cracklib.c:66 -#: modules/pam_pwhistory/pam_pwhistory.c:62 +#: modules/pam_pwhistory/pam_pwhistory.c:64 #, c-format msgid "Retype new %s%spassword: " msgstr "নতুন %s%s গুপ্তশব্দ পুনঃ লিখক: " #: modules/pam_cracklib/pam_cracklib.c:67 -#: modules/pam_pwhistory/pam_pwhistory.c:63 +#: modules/pam_pwhistory/pam_pwhistory.c:65 msgid "Sorry, passwords do not match." msgstr "ক্ষমা কৰিব, গুপ্তশব্দৰ অমিল " @@ -231,7 +231,7 @@ msgid "Password unchanged" msgstr "গুপ্ত শব্দ অপৰিবৰ্ত্তিত" #: modules/pam_cracklib/pam_cracklib.c:584 -#: modules/pam_cracklib/pam_cracklib.c:709 +#: modules/pam_cracklib/pam_cracklib.c:710 #, c-format msgid "BAD PASSWORD: %s" msgstr "বেয়া গুপ্তশব্দ: %s" @@ -354,14 +354,14 @@ 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 +#: modules/pam_pwhistory/pam_pwhistory.c:231 +#: modules/pam_pwhistory/pam_pwhistory.c:267 #, fuzzy msgid "Password change aborted." msgstr "গুপ্ত শব্দ অপৰিবৰ্ত্তিত" -#: modules/pam_pwhistory/pam_pwhistory.c:235 -#: modules/pam_pwhistory/pam_pwhistory.c:295 +#: modules/pam_pwhistory/pam_pwhistory.c:242 +#: modules/pam_pwhistory/pam_pwhistory.c:304 #: modules/pam_unix/pam_unix_passwd.c:470 msgid "Password has been already used. Choose another." msgstr "গুপ্তশব্দ ইতিমধ্যে ব্যৱহৃত । অন্য এটা বাচি লওক ।" @@ -426,20 +426,20 @@ msgstr "pam_set_item() কৰোঁতে বিফল\n" msgid "login: failure forking: %m" msgstr "প্ৰৱেশ: forking ত বিফল: %m" -#: modules/pam_stress/pam_stress.c:476 +#: modules/pam_stress/pam_stress.c:475 #, c-format msgid "Changing STRESS password for %s." msgstr "%s ৰ বাবে STRESS গুপ্তশব্দ সলনি কৰা হৈছে ।" -#: modules/pam_stress/pam_stress.c:490 +#: modules/pam_stress/pam_stress.c:489 msgid "Enter new STRESS password: " msgstr "নতুন STRESS গুপ্তশব্দ দিয়ক:" -#: modules/pam_stress/pam_stress.c:493 +#: modules/pam_stress/pam_stress.c:492 msgid "Retype new STRESS password: " msgstr "নতুন STRESS গুপ্তশব্দ পুনঃ লিখক: " -#: modules/pam_stress/pam_stress.c:522 +#: modules/pam_stress/pam_stress.c:521 msgid "Verification mis-typed; password unchanged" msgstr "সত্যৰ প্ৰতিপাদন ভুলকৈ লিখা গ'ল;গুপ্তশব্দ অপৰিবৰ্ত্তিত" @@ -448,7 +448,7 @@ msgstr "সত্যৰ প্ৰতিপাদন ভুলকৈ লিখা msgid "Account temporary locked (%ld seconds left)" msgstr "" -#: modules/pam_tally/pam_tally.c:566 +#: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:520 #, c-format msgid "Account locked due to %u failed logins" msgstr "" @@ -491,11 +491,6 @@ msgstr "" msgid "%s: Can't reset all users to non-zero\n" msgstr "%s: সকলো ব্যৱহাৰকৰোঁতাক শূণ্য নোহোৱা অৱস্থালৈ পুনঃ প্ৰতিষ্ঠা কৰিব নোৱাৰি\n" -#: modules/pam_tally2/pam_tally2.c:520 -#, c-format -msgid "Account locked due to %hu failed logins" -msgstr "" - #: modules/pam_tally2/pam_tally2.c:865 #, c-format msgid "Login Failures Latest failure From\n" @@ -510,6 +505,11 @@ msgid "" msgstr "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" +#: modules/pam_timestamp/pam_timestamp.c:339 +#, c-format +msgid "Access granted (last access was %ld seconds ago)." +msgstr "" + #: modules/pam_unix/pam_unix_acct.c:228 modules/pam_unix/pam_unix_acct.c:250 msgid "Your account has expired; please contact your system administrator" msgstr "আপোনাৰ হিচাপ অন্ত হ'ল; অনুগ্ৰহ কৰি আপোনাৰ ব্যৱাস্থাপ্ৰণালীৰ " diff --git a/po/bn_IN.po b/po/bn_IN.po index b6c40529..0ddf5c46 100644 --- a/po/bn_IN.po +++ b/po/bn_IN.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Linux-PAM.tip\n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n" -"POT-Creation-Date: 2008-10-22 20:01+0200\n" +"POT-Creation-Date: 2008-11-28 15:16+0100\n" "PO-Revision-Date: 2008-10-20 12:40+0530\n" "Last-Translator: Runa Bhattacharjee \n" "Language-Team: Bengali INDIA \n" @@ -167,19 +167,19 @@ msgid "Unknown PAM error" msgstr "PAM সংক্রান্ত অজানা ত্রুটি" #: modules/pam_cracklib/pam_cracklib.c:64 -#: modules/pam_pwhistory/pam_pwhistory.c:61 +#: modules/pam_pwhistory/pam_pwhistory.c:62 #, c-format msgid "New %s%spassword: " msgstr "নতুন %s%s পাসওয়ার্ড: " #: modules/pam_cracklib/pam_cracklib.c:66 -#: modules/pam_pwhistory/pam_pwhistory.c:62 +#: modules/pam_pwhistory/pam_pwhistory.c:64 #, c-format msgid "Retype new %s%spassword: " msgstr "নতুন %s%s পাসওয়ার্ড পুনরায় লিখুন: " #: modules/pam_cracklib/pam_cracklib.c:67 -#: modules/pam_pwhistory/pam_pwhistory.c:63 +#: modules/pam_pwhistory/pam_pwhistory.c:65 msgid "Sorry, passwords do not match." msgstr "দুঃখিত, পাসওয়ার্ড দুটি এক নয়।" @@ -230,7 +230,7 @@ msgid "Password unchanged" msgstr "পাসওয়ার্ড পরিবর্তন করা হয়নি" #: modules/pam_cracklib/pam_cracklib.c:584 -#: modules/pam_cracklib/pam_cracklib.c:709 +#: modules/pam_cracklib/pam_cracklib.c:710 #, c-format msgid "BAD PASSWORD: %s" msgstr "পাসওয়ার্ড ভাল নয়: %s" @@ -353,13 +353,13 @@ 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 +#: modules/pam_pwhistory/pam_pwhistory.c:231 +#: modules/pam_pwhistory/pam_pwhistory.c:267 msgid "Password change aborted." msgstr "পাসওয়ার্ড পরিবর্তনের কর্ম পরিত্যাগ করা হয়েছে।" -#: modules/pam_pwhistory/pam_pwhistory.c:235 -#: modules/pam_pwhistory/pam_pwhistory.c:295 +#: modules/pam_pwhistory/pam_pwhistory.c:242 +#: modules/pam_pwhistory/pam_pwhistory.c:304 #: modules/pam_unix/pam_unix_passwd.c:470 msgid "Password has been already used. Choose another." msgstr "পাসওয়ার্ড পূর্বে ব্যবহৃত হয়েছে। একটি পৃথক পাসওয়ার্ড নির্বাচন করুন।" @@ -424,20 +424,20 @@ msgstr "pam_set_item() করতে ব্যর্থ\n" msgid "login: failure forking: %m" msgstr "লগ-ইন: fork করতে ব্যর্থ: %m" -#: modules/pam_stress/pam_stress.c:476 +#: modules/pam_stress/pam_stress.c:475 #, c-format msgid "Changing STRESS password for %s." msgstr "%s-র STRESS পাসওয়ার্ড পরিবর্তন করা হচ্ছে।" -#: modules/pam_stress/pam_stress.c:490 +#: modules/pam_stress/pam_stress.c:489 msgid "Enter new STRESS password: " msgstr "নতুন STRESS পাসওয়ার্ড লিখুন: " -#: modules/pam_stress/pam_stress.c:493 +#: modules/pam_stress/pam_stress.c:492 msgid "Retype new STRESS password: " msgstr "নতুন STRESS পাসওয়ার্ড পুনরায় লিখুন: " -#: modules/pam_stress/pam_stress.c:522 +#: modules/pam_stress/pam_stress.c:521 msgid "Verification mis-typed; password unchanged" msgstr "নিশ্চায়ন কাল ভুল টাইপ করা হয়েছে; পাসওয়ার্ড পরিবর্তন করা হয়নি" @@ -446,7 +446,7 @@ msgstr "নিশ্চায়ন কাল ভুল টাইপ করা হ msgid "Account temporary locked (%ld seconds left)" msgstr "সাময়িকরূপে অ্যাকাউন্ট লক করা হয়েছে (%ld সেকেন্ড অবশিষ্ট)" -#: modules/pam_tally/pam_tally.c:566 +#: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:520 #, c-format msgid "Account locked due to %u failed logins" msgstr "%u ব্যর্থ লগ-ইনের ফলে অ্যাকাউন্ট লক করা হয়েছে" @@ -489,11 +489,6 @@ msgstr "" msgid "%s: Can't reset all users to non-zero\n" msgstr "%s: সব ব্যবহারকারীর জন্য শূণ্য-ভিন্ন মান ধার্য করতে ব্যর্থ\n" -#: modules/pam_tally2/pam_tally2.c:520 -#, fuzzy, c-format -msgid "Account locked due to %hu failed logins" -msgstr "%u ব্যর্থ লগ-ইনের ফলে অ্যাকাউন্ট লক করা হয়েছে" - #: modules/pam_tally2/pam_tally2.c:865 #, c-format msgid "Login Failures Latest failure From\n" @@ -508,6 +503,11 @@ msgid "" msgstr "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" +#: modules/pam_timestamp/pam_timestamp.c:339 +#, c-format +msgid "Access granted (last access was %ld seconds ago)." +msgstr "" + #: modules/pam_unix/pam_unix_acct.c:228 modules/pam_unix/pam_unix_acct.c:250 msgid "Your account has expired; please contact your system administrator" msgstr "" @@ -564,6 +564,10 @@ msgstr "নতুন UNIX পাসওয়ার্ড উল্লেখ কর msgid "Retype new UNIX password: " msgstr "নতুন UNIX পাসওয়ার্ড পুনরায় লিখুন: " +#, fuzzy +#~ msgid "Account locked due to %hu failed logins" +#~ msgstr "%u ব্যর্থ লগ-ইনের ফলে অ্যাকাউন্ট লক করা হয়েছে" + #~ msgid "has been already used" #~ msgstr "পূর্বে ব্যবহৃত হয়েছে" diff --git a/po/ca.po b/po/ca.po index 69533a48..7ccb9b4b 100644 --- a/po/ca.po +++ b/po/ca.po @@ -17,7 +17,7 @@ msgid "" msgstr "" "Project-Id-Version: linux-PAM\n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n" -"POT-Creation-Date: 2008-10-22 20:01+0200\n" +"POT-Creation-Date: 2008-11-28 15:16+0100\n" "PO-Revision-Date: 2008-10-15 16:10+0200\n" "Last-Translator: Xavier Queralt Mateu \n" "Language-Team: Catalan \n" @@ -177,19 +177,19 @@ msgid "Unknown PAM error" msgstr "Error de PAM desconegut" #: modules/pam_cracklib/pam_cracklib.c:64 -#: modules/pam_pwhistory/pam_pwhistory.c:61 +#: modules/pam_pwhistory/pam_pwhistory.c:62 #, 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 +#: modules/pam_pwhistory/pam_pwhistory.c:64 #, 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 +#: modules/pam_pwhistory/pam_pwhistory.c:65 msgid "Sorry, passwords do not match." msgstr "Les contrasenyes no coincideixen." @@ -240,7 +240,7 @@ msgid "Password unchanged" msgstr "No s'ha canviat la contrasenya" #: modules/pam_cracklib/pam_cracklib.c:584 -#: modules/pam_cracklib/pam_cracklib.c:709 +#: modules/pam_cracklib/pam_cracklib.c:710 #, c-format msgid "BAD PASSWORD: %s" msgstr "CONTRASENYA INCORRECTA: %s" @@ -363,13 +363,13 @@ msgstr "Creant el directori '%s'." msgid "Unable to create directory %s: %m" msgstr "No s'ha pogut crear el directori %s: %m" -#: modules/pam_pwhistory/pam_pwhistory.c:224 -#: modules/pam_pwhistory/pam_pwhistory.c:258 +#: modules/pam_pwhistory/pam_pwhistory.c:231 +#: modules/pam_pwhistory/pam_pwhistory.c:267 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_pwhistory/pam_pwhistory.c:242 +#: modules/pam_pwhistory/pam_pwhistory.c:304 #: 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." @@ -434,20 +434,20 @@ msgstr "s'ha produït un error en pam_set_item()\n" msgid "login: failure forking: %m" msgstr "entrada: ha fallat la bifurcació: %m" -#: modules/pam_stress/pam_stress.c:476 +#: modules/pam_stress/pam_stress.c:475 #, c-format msgid "Changing STRESS password for %s." msgstr "S'està canviant la contrasenya d'STRESS per a %s." -#: modules/pam_stress/pam_stress.c:490 +#: modules/pam_stress/pam_stress.c:489 msgid "Enter new STRESS password: " msgstr "Introduïu la nova contrasenya d'STRESS: " -#: modules/pam_stress/pam_stress.c:493 +#: modules/pam_stress/pam_stress.c:492 msgid "Retype new STRESS password: " msgstr "Torneu a escriure la nova contrasenya d'STRESS: " -#: modules/pam_stress/pam_stress.c:522 +#: modules/pam_stress/pam_stress.c:521 msgid "Verification mis-typed; password unchanged" msgstr "" "Error d'escriptura durant la verificació; no s'ha canviat la contrasenya" @@ -457,7 +457,7 @@ msgstr "" msgid "Account temporary locked (%ld seconds left)" msgstr "Compte bloquejat temporalment (queden %ld segons)" -#: modules/pam_tally/pam_tally.c:566 +#: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:520 #, c-format msgid "Account locked due to %u failed logins" msgstr "" @@ -502,12 +502,6 @@ msgid "%s: Can't reset all users to non-zero\n" msgstr "" "%s: no es poden restablir tots els usuaris a un valor diferent de zero\n" -#: modules/pam_tally2/pam_tally2.c:520 -#, fuzzy, c-format -msgid "Account locked due to %hu failed logins" -msgstr "" -"El compte ha estat bloquejat ja que s'ha intentat entrar %u cops sense èxit" - #: modules/pam_tally2/pam_tally2.c:865 #, c-format msgid "Login Failures Latest failure From\n" @@ -522,6 +516,11 @@ msgid "" msgstr "" "%s: [--file nom_fitxer_arrel] [--user nom_usuari] [--reset[=n]] [--quiet]\n" +#: modules/pam_timestamp/pam_timestamp.c:339 +#, c-format +msgid "Access granted (last access was %ld seconds ago)." +msgstr "" + #: modules/pam_unix/pam_unix_acct.c:228 modules/pam_unix/pam_unix_acct.c:250 msgid "Your account has expired; please contact your system administrator" msgstr "El vostre compte ha caducat. Contacteu amb l'administrador del sistema" @@ -577,6 +576,12 @@ msgstr "Introduïu la nova contrasenya d'UNIX: " msgid "Retype new UNIX password: " msgstr "Torneu a escriure la nova contrasenya d'UNIX: " +#, fuzzy +#~ msgid "Account locked due to %hu failed logins" +#~ msgstr "" +#~ "El compte ha estat bloquejat ja que s'ha intentat entrar %u cops sense " +#~ "èxit" + #~ msgid "" #~ "There was %d failed login attempt since the last successful login.There " #~ "were %d failed login attempts since the last successful login." diff --git a/po/cs.po b/po/cs.po index 4273cbf2..7bfa4125 100644 --- a/po/cs.po +++ b/po/cs.po @@ -2,13 +2,13 @@ # This file is distributed under the same license as the PACKAGE package. # Copyright (C) YEAR Linux-PAM Project. # Klara Cihlarova , 2005, 2006. -# fixes by Tomas Mraz , 2005. +# Tomas Mraz , 2005, 2008. msgid "" msgstr "" "Project-Id-Version: Linux-PAM\n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n" -"POT-Creation-Date: 2008-10-22 20:01+0200\n" -"PO-Revision-Date: 2008-10-13 21:54+0200\n" +"POT-Creation-Date: 2008-11-28 15:16+0100\n" +"PO-Revision-Date: 2008-11-28 15:22+0100\n" "Last-Translator: Tomas Mraz \n" "Language-Team: cs_CZ \n" "MIME-Version: 1.0\n" @@ -167,19 +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 +#: modules/pam_pwhistory/pam_pwhistory.c:62 #, c-format msgid "New %s%spassword: " msgstr "Nové %s%sheslo: " #: modules/pam_cracklib/pam_cracklib.c:66 -#: modules/pam_pwhistory/pam_pwhistory.c:62 +#: modules/pam_pwhistory/pam_pwhistory.c:64 #, 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 +#: modules/pam_pwhistory/pam_pwhistory.c:65 msgid "Sorry, passwords do not match." msgstr "Hesla se neshodují." @@ -230,7 +230,7 @@ msgid "Password unchanged" msgstr "Heslo nebylo změněno" #: modules/pam_cracklib/pam_cracklib.c:584 -#: modules/pam_cracklib/pam_cracklib.c:709 +#: modules/pam_cracklib/pam_cracklib.c:710 #, c-format msgid "BAD PASSWORD: %s" msgstr "ŠPATNÉ HESLO: %s" @@ -354,13 +354,13 @@ 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 +#: modules/pam_pwhistory/pam_pwhistory.c:231 +#: modules/pam_pwhistory/pam_pwhistory.c:267 msgid "Password change aborted." msgstr "Změna hesla přerušena." -#: modules/pam_pwhistory/pam_pwhistory.c:235 -#: modules/pam_pwhistory/pam_pwhistory.c:295 +#: modules/pam_pwhistory/pam_pwhistory.c:242 +#: modules/pam_pwhistory/pam_pwhistory.c:304 #: modules/pam_unix/pam_unix_passwd.c:470 msgid "Password has been already used. Choose another." msgstr "Heslo již bylo použito. Zvolte jiné." @@ -425,20 +425,20 @@ msgstr "chyba pam_set_item()\n" msgid "login: failure forking: %m" msgstr "login: chyba forku: %m" -#: modules/pam_stress/pam_stress.c:476 +#: modules/pam_stress/pam_stress.c:475 #, c-format msgid "Changing STRESS password for %s." msgstr "Změna STRESS hesla pro %s." -#: modules/pam_stress/pam_stress.c:490 +#: modules/pam_stress/pam_stress.c:489 msgid "Enter new STRESS password: " msgstr "Zadejte nové STRESS heslo: " -#: modules/pam_stress/pam_stress.c:493 +#: modules/pam_stress/pam_stress.c:492 msgid "Retype new STRESS password: " msgstr "Opakujte nové STRESS heslo: " -#: modules/pam_stress/pam_stress.c:522 +#: modules/pam_stress/pam_stress.c:521 msgid "Verification mis-typed; password unchanged" msgstr "Chybné potvrzení. Heslo nezměněno" @@ -447,7 +447,7 @@ msgstr "Chybné potvrzení. Heslo nezměněno" msgid "Account temporary locked (%ld seconds left)" msgstr "Účet dočasně uzamčen (zbývá %ld vteřin)" -#: modules/pam_tally/pam_tally.c:566 +#: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:520 #, c-format msgid "Account locked due to %u failed logins" msgstr "Účet uzamčen z důvodu %u neúspěšných pokusů o přihlášení" @@ -491,25 +491,26 @@ msgstr "" msgid "%s: Can't reset all users to non-zero\n" msgstr "%s: Nelze resetovat všechny uživatele nenulově\n" -#: modules/pam_tally2/pam_tally2.c:520 -#, fuzzy, c-format -msgid "Account locked due to %hu failed logins" -msgstr "Účet uzamčen z důvodu %u neúspěšných pokusů o přihlášení" - #: modules/pam_tally2/pam_tally2.c:865 #, c-format msgid "Login Failures Latest failure From\n" -msgstr "" +msgstr "Login Selhání Poslední selhání Od\n" #: modules/pam_tally2/pam_tally2.c:881 -#, fuzzy, c-format +#, c-format msgid "" "%s: [-f rooted-filename] [--file rooted-filename]\n" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" msgstr "" -"%s: [--file jmeno_souboru] [--user uzivatelske_jmeno] [--reset[=n]] [--" -"quiet]\n" +"%s: [-f plna-cesta-k-souboru] [--file plna-cesta-k-souboru]\n" +" [-u uzivatelske-jmeno] [--user uzivatelske-jmeno]\n" +" [-r] [--reset[=n]] [--quiet]\n" + +#: modules/pam_timestamp/pam_timestamp.c:339 +#, c-format +msgid "Access granted (last access was %ld seconds ago)." +msgstr "Přístup povolen (poslední přístup před %ld vteřinami)." #: modules/pam_unix/pam_unix_acct.c:228 modules/pam_unix/pam_unix_acct.c:250 msgid "Your account has expired; please contact your system administrator" diff --git a/po/da.po b/po/da.po index 8abc754f..3abfe1da 100644 --- 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-10-22 20:01+0200\n" +"POT-Creation-Date: 2008-11-28 15:16+0100\n" "PO-Revision-Date: 2005-08-16 20:00+0200\n" "Last-Translator: Novell Language \n" "Language-Team: Novell Language \n" @@ -171,19 +171,19 @@ msgid "Unknown PAM error" msgstr "Ukendt PAM-fejl" #: modules/pam_cracklib/pam_cracklib.c:64 -#: modules/pam_pwhistory/pam_pwhistory.c:61 +#: modules/pam_pwhistory/pam_pwhistory.c:62 #, c-format msgid "New %s%spassword: " msgstr "Ny %s%sadgangskode: " #: modules/pam_cracklib/pam_cracklib.c:66 -#: modules/pam_pwhistory/pam_pwhistory.c:62 +#: modules/pam_pwhistory/pam_pwhistory.c:64 #, 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 +#: modules/pam_pwhistory/pam_pwhistory.c:65 msgid "Sorry, passwords do not match." msgstr "Adgangskoderne stemmer desværre ikke overens." @@ -234,7 +234,7 @@ msgid "Password unchanged" msgstr "Adgangskoden er uændret" #: modules/pam_cracklib/pam_cracklib.c:584 -#: modules/pam_cracklib/pam_cracklib.c:709 +#: modules/pam_cracklib/pam_cracklib.c:710 #, c-format msgid "BAD PASSWORD: %s" msgstr "DÅRLIG ADGANGSKODE: %s" @@ -357,14 +357,14 @@ msgstr "" msgid "Unable to create directory %s: %m" msgstr "" -#: modules/pam_pwhistory/pam_pwhistory.c:224 -#: modules/pam_pwhistory/pam_pwhistory.c:258 +#: modules/pam_pwhistory/pam_pwhistory.c:231 +#: modules/pam_pwhistory/pam_pwhistory.c:267 #, 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_pwhistory/pam_pwhistory.c:242 +#: modules/pam_pwhistory/pam_pwhistory.c:304 #: 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." @@ -435,20 +435,20 @@ msgstr "pam_set_item() mislykkedes\n" msgid "login: failure forking: %m" msgstr "login: fejl ved forking: %m" -#: modules/pam_stress/pam_stress.c:476 +#: modules/pam_stress/pam_stress.c:475 #, fuzzy, c-format msgid "Changing STRESS password for %s." msgstr "Ændrer STRESS-adgangskode for" -#: modules/pam_stress/pam_stress.c:490 +#: modules/pam_stress/pam_stress.c:489 msgid "Enter new STRESS password: " msgstr "Indtast ny STRESS-adgangskode: " -#: modules/pam_stress/pam_stress.c:493 +#: modules/pam_stress/pam_stress.c:492 msgid "Retype new STRESS password: " msgstr "Genindtast ny STRESS-adgangskode: " -#: modules/pam_stress/pam_stress.c:522 +#: modules/pam_stress/pam_stress.c:521 msgid "Verification mis-typed; password unchanged" msgstr "Bekræftelsen blev angivet forkert. Adgangskoden forbliver uændret" @@ -457,7 +457,7 @@ msgstr "Bekræftelsen blev angivet forkert. Adgangskoden forbliver uændret" msgid "Account temporary locked (%ld seconds left)" msgstr "" -#: modules/pam_tally/pam_tally.c:566 +#: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:520 #, c-format msgid "Account locked due to %u failed logins" msgstr "" @@ -500,11 +500,6 @@ msgstr "" msgid "%s: Can't reset all users to non-zero\n" msgstr "%s: Alle brugere kunne ikke nulstilles til ikke-nul\n" -#: modules/pam_tally2/pam_tally2.c:520 -#, c-format -msgid "Account locked due to %hu failed logins" -msgstr "" - #: modules/pam_tally2/pam_tally2.c:865 #, c-format msgid "Login Failures Latest failure From\n" @@ -519,6 +514,11 @@ msgid "" msgstr "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" +#: modules/pam_timestamp/pam_timestamp.c:339 +#, c-format +msgid "Access granted (last access was %ld seconds ago)." +msgstr "" + #: modules/pam_unix/pam_unix_acct.c:228 modules/pam_unix/pam_unix_acct.c:250 msgid "Your account has expired; please contact your system administrator" msgstr "Din konto er udløbet. Kontakt din systemadministrator" diff --git a/po/de.po b/po/de.po index dae00135..fc18f978 100644 --- a/po/de.po +++ b/po/de.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Linux-PAM\n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n" -"POT-Creation-Date: 2008-10-22 20:01+0200\n" +"POT-Creation-Date: 2008-11-28 15:16+0100\n" "PO-Revision-Date: 2008-10-27 07:45+0100\n" "Last-Translator: Fabian Affolter \n" "Language-Team: German \n" @@ -170,19 +170,19 @@ msgid "Unknown PAM error" msgstr "Unbekannter PAM-Fehler" #: modules/pam_cracklib/pam_cracklib.c:64 -#: modules/pam_pwhistory/pam_pwhistory.c:61 +#: modules/pam_pwhistory/pam_pwhistory.c:62 #, 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 +#: modules/pam_pwhistory/pam_pwhistory.c:64 #, 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 +#: modules/pam_pwhistory/pam_pwhistory.c:65 msgid "Sorry, passwords do not match." msgstr "Die Passwörter stimmen nicht überein." @@ -233,7 +233,7 @@ msgid "Password unchanged" msgstr "Passwort nicht geändert" #: modules/pam_cracklib/pam_cracklib.c:584 -#: modules/pam_cracklib/pam_cracklib.c:709 +#: modules/pam_cracklib/pam_cracklib.c:710 #, c-format msgid "BAD PASSWORD: %s" msgstr "Schlechtes Passwort: %s" @@ -359,13 +359,13 @@ 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 +#: modules/pam_pwhistory/pam_pwhistory.c:231 +#: modules/pam_pwhistory/pam_pwhistory.c:267 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_pwhistory/pam_pwhistory.c:242 +#: modules/pam_pwhistory/pam_pwhistory.c:304 #: 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." @@ -430,20 +430,20 @@ msgstr "Fehler bei pam_set_item()\n" msgid "login: failure forking: %m" msgstr "Anmeldung: Fehler bei Abspaltung: %m" -#: modules/pam_stress/pam_stress.c:476 +#: modules/pam_stress/pam_stress.c:475 #, c-format msgid "Changing STRESS password for %s." msgstr "Ändern des STRESS-Passworts für %s." -#: modules/pam_stress/pam_stress.c:490 +#: modules/pam_stress/pam_stress.c:489 msgid "Enter new STRESS password: " msgstr "Geben Sie ein neues STRESS-Passwort ein: " -#: modules/pam_stress/pam_stress.c:493 +#: modules/pam_stress/pam_stress.c:492 msgid "Retype new STRESS password: " msgstr "Geben Sie das neue STRESS-Passwort erneut ein: " -#: modules/pam_stress/pam_stress.c:522 +#: modules/pam_stress/pam_stress.c:521 msgid "Verification mis-typed; password unchanged" msgstr "Bestätigungspasswort falsch eingegeben; Passwort nicht geändert" @@ -452,7 +452,7 @@ msgstr "Bestätigungspasswort falsch eingegeben; Passwort nicht geändert" msgid "Account temporary locked (%ld seconds left)" msgstr "Account temporär gesperrt (noch %ld Sekunden)" -#: modules/pam_tally/pam_tally.c:566 +#: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:520 #, c-format msgid "Account locked due to %u failed logins" msgstr "Der Account ist wegen %u fehlgeschlagener Login-Versuche gesperrt" @@ -496,11 +496,6 @@ msgid "%s: Can't reset all users to non-zero\n" msgstr "" "%s: Es können nicht alle Benutzer auf Nicht-null zurückgesetzt werden\n" -#: modules/pam_tally2/pam_tally2.c:520 -#, c-format -msgid "Account locked due to %hu failed logins" -msgstr "Der Account ist wegen %hu fehlgeschlagener Login-Versuche gesperrt" - #: modules/pam_tally2/pam_tally2.c:865 #, c-format msgid "Login Failures Latest failure From\n" @@ -517,6 +512,11 @@ msgstr "" " [-u username] [--user username]\n" " [-r] [--reset[=n]] [--quiet]\n" +#: modules/pam_timestamp/pam_timestamp.c:339 +#, c-format +msgid "Access granted (last access was %ld seconds ago)." +msgstr "" + #: modules/pam_unix/pam_unix_acct.c:228 modules/pam_unix/pam_unix_acct.c:250 msgid "Your account has expired; please contact your system administrator" msgstr "Ihr Konto ist abgelaufen. Wenden Sie sich an den Systemadministrator" @@ -571,6 +571,9 @@ msgstr "Geben Sie ein neues UNIX-Passwort ein: " msgid "Retype new UNIX password: " msgstr "Geben Sie das neue UNIX-Passwort erneut ein: " +#~ msgid "Account locked due to %hu failed logins" +#~ msgstr "Der Account ist wegen %hu fehlgeschlagener Login-Versuche gesperrt" + #~ msgid "has been already used" #~ msgstr "es wurde bereits verwendet" diff --git a/po/es.po b/po/es.po index c1151f95..2aeb0f1d 100644 --- 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-10-22 20:01+0200\n" +"POT-Creation-Date: 2008-11-28 15:16+0100\n" "PO-Revision-Date: 2008-02-21 00:03-0200\n" "Last-Translator: Domingo Becker \n" "Language-Team: Spanish \n" @@ -171,19 +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 +#: modules/pam_pwhistory/pam_pwhistory.c:62 #, 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 +#: modules/pam_pwhistory/pam_pwhistory.c:64 #, 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 +#: modules/pam_pwhistory/pam_pwhistory.c:65 msgid "Sorry, passwords do not match." msgstr "Las contraseñas no coinciden." @@ -234,7 +234,7 @@ msgid "Password unchanged" msgstr "La contraseña no ha cambiado" #: modules/pam_cracklib/pam_cracklib.c:584 -#: modules/pam_cracklib/pam_cracklib.c:709 +#: modules/pam_cracklib/pam_cracklib.c:710 #, c-format msgid "BAD PASSWORD: %s" msgstr "CONTRASEÑA INCORRECTA: %s" @@ -357,14 +357,14 @@ 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 +#: modules/pam_pwhistory/pam_pwhistory.c:231 +#: modules/pam_pwhistory/pam_pwhistory.c:267 #, 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_pwhistory/pam_pwhistory.c:242 +#: modules/pam_pwhistory/pam_pwhistory.c:304 #: 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." @@ -429,20 +429,20 @@ msgstr "error en pam_set_item()\n" msgid "login: failure forking: %m" msgstr "inicio de sesión: error en horquilla: %m" -#: modules/pam_stress/pam_stress.c:476 +#: modules/pam_stress/pam_stress.c:475 #, c-format msgid "Changing STRESS password for %s." msgstr "Cambiando la contraseña STRESS para %s." -#: modules/pam_stress/pam_stress.c:490 +#: modules/pam_stress/pam_stress.c:489 msgid "Enter new STRESS password: " msgstr "Introduzca la nueva contraseña STRESS:" -#: modules/pam_stress/pam_stress.c:493 +#: modules/pam_stress/pam_stress.c:492 msgid "Retype new STRESS password: " msgstr "Vuelva a escribir la nueva contraseña STRESS:" -#: modules/pam_stress/pam_stress.c:522 +#: modules/pam_stress/pam_stress.c:521 msgid "Verification mis-typed; password unchanged" msgstr "Error al escribir la verificación; la contraseña no ha cambiado" @@ -451,7 +451,7 @@ msgstr "Error al escribir la verificación; la contraseña no ha cambiado" msgid "Account temporary locked (%ld seconds left)" msgstr "" -#: modules/pam_tally/pam_tally.c:566 +#: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:520 #, c-format msgid "Account locked due to %u failed logins" msgstr "" @@ -497,11 +497,6 @@ msgstr "" "%s: No es posible restaurar a todos los usuarios a un número distinto de " "cero\n" -#: modules/pam_tally2/pam_tally2.c:520 -#, c-format -msgid "Account locked due to %hu failed logins" -msgstr "" - #: modules/pam_tally2/pam_tally2.c:865 #, c-format msgid "Login Failures Latest failure From\n" @@ -517,6 +512,11 @@ msgstr "" "%s: [--file nombre de archivo-raíz] [--user nombre de usuario] [--reset[=n]] " "[--quiet]\n" +#: modules/pam_timestamp/pam_timestamp.c:339 +#, c-format +msgid "Access granted (last access was %ld seconds ago)." +msgstr "" + #: modules/pam_unix/pam_unix_acct.c:228 modules/pam_unix/pam_unix_acct.c:250 msgid "Your account has expired; please contact your system administrator" msgstr "" diff --git a/po/fi.po b/po/fi.po index bbb39bf7..7caf446a 100644 --- 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-10-22 20:01+0200\n" +"POT-Creation-Date: 2008-11-28 15:16+0100\n" "PO-Revision-Date: 2006-05-04 08:30+0200\n" "Last-Translator: Jyri Palokangas \n" "Language-Team: \n" @@ -169,19 +169,19 @@ msgid "Unknown PAM error" msgstr "Tuntematon PAM-virhe" #: modules/pam_cracklib/pam_cracklib.c:64 -#: modules/pam_pwhistory/pam_pwhistory.c:61 +#: modules/pam_pwhistory/pam_pwhistory.c:62 #, c-format msgid "New %s%spassword: " msgstr "Uusi %s%ssalasana: " #: modules/pam_cracklib/pam_cracklib.c:66 -#: modules/pam_pwhistory/pam_pwhistory.c:62 +#: modules/pam_pwhistory/pam_pwhistory.c:64 #, 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 +#: modules/pam_pwhistory/pam_pwhistory.c:65 msgid "Sorry, passwords do not match." msgstr "Salasanat eivät täsmää." @@ -232,7 +232,7 @@ msgid "Password unchanged" msgstr "Salasanaa ei vaihdettu" #: modules/pam_cracklib/pam_cracklib.c:584 -#: modules/pam_cracklib/pam_cracklib.c:709 +#: modules/pam_cracklib/pam_cracklib.c:710 #, c-format msgid "BAD PASSWORD: %s" msgstr "HUONO SALASANA: %s" @@ -355,14 +355,14 @@ msgstr "" msgid "Unable to create directory %s: %m" msgstr "" -#: modules/pam_pwhistory/pam_pwhistory.c:224 -#: modules/pam_pwhistory/pam_pwhistory.c:258 +#: modules/pam_pwhistory/pam_pwhistory.c:231 +#: modules/pam_pwhistory/pam_pwhistory.c:267 #, 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_pwhistory/pam_pwhistory.c:242 +#: modules/pam_pwhistory/pam_pwhistory.c:304 #: modules/pam_unix/pam_unix_passwd.c:470 msgid "Password has been already used. Choose another." msgstr "Salasana on jo käytetty. Valitse toinen." @@ -431,20 +431,20 @@ msgstr "pam_set_item() kutsu epäonnistui\n" msgid "login: failure forking: %m" msgstr "sisäänkirjautuminen: virhe haarautumisessa: %m" -#: modules/pam_stress/pam_stress.c:476 +#: modules/pam_stress/pam_stress.c:475 #, fuzzy, c-format msgid "Changing STRESS password for %s." msgstr "Vaihdetaan STRESS-salasana " -#: modules/pam_stress/pam_stress.c:490 +#: modules/pam_stress/pam_stress.c:489 msgid "Enter new STRESS password: " msgstr "Anna uusi STRESS-salasana: " -#: modules/pam_stress/pam_stress.c:493 +#: modules/pam_stress/pam_stress.c:492 msgid "Retype new STRESS password: " msgstr "Anna uusi STRESS-salasana uudelleen: " -#: modules/pam_stress/pam_stress.c:522 +#: modules/pam_stress/pam_stress.c:521 msgid "Verification mis-typed; password unchanged" msgstr "Salasanat eivät ole samat; salasanaa ei vaihdettu" @@ -453,7 +453,7 @@ msgstr "Salasanat eivät ole samat; salasanaa ei vaihdettu" msgid "Account temporary locked (%ld seconds left)" msgstr "" -#: modules/pam_tally/pam_tally.c:566 +#: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:520 #, c-format msgid "Account locked due to %u failed logins" msgstr "" @@ -497,11 +497,6 @@ msgstr "" msgid "%s: Can't reset all users to non-zero\n" msgstr "%s: Ei voida palauttaa kaikkia käyttäjiä ei-nolliksi\n" -#: modules/pam_tally2/pam_tally2.c:520 -#, c-format -msgid "Account locked due to %hu failed logins" -msgstr "" - #: modules/pam_tally2/pam_tally2.c:865 #, c-format msgid "Login Failures Latest failure From\n" @@ -517,6 +512,11 @@ msgstr "" "%s: [--file juurrutettu-tiedostonimi] [--user käyttäjätunnus] [--reset[=n]] " "[--quiet]\n" +#: modules/pam_timestamp/pam_timestamp.c:339 +#, c-format +msgid "Access granted (last access was %ld seconds ago)." +msgstr "" + #: modules/pam_unix/pam_unix_acct.c:228 modules/pam_unix/pam_unix_acct.c:250 msgid "Your account has expired; please contact your system administrator" msgstr "Käyttäjätilisi on vanhentunut; ota yhteyttä järjestelmän ylläpitäjään" diff --git a/po/fr.po b/po/fr.po index d00af2dc..a53eef91 100644 --- a/po/fr.po +++ b/po/fr.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: pam.fr2\n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n" -"POT-Creation-Date: 2008-10-22 20:01+0200\n" +"POT-Creation-Date: 2008-11-28 15:16+0100\n" "PO-Revision-Date: 2008-10-19 18:59+0200\n" "Last-Translator: Pablo Martin-Gomez \n" "Language-Team: Français \n" @@ -178,19 +178,19 @@ msgid "Unknown PAM error" msgstr "Erreur PAM inconnue" #: modules/pam_cracklib/pam_cracklib.c:64 -#: modules/pam_pwhistory/pam_pwhistory.c:61 +#: modules/pam_pwhistory/pam_pwhistory.c:62 #, 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 +#: modules/pam_pwhistory/pam_pwhistory.c:64 #, 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 +#: modules/pam_pwhistory/pam_pwhistory.c:65 msgid "Sorry, passwords do not match." msgstr "Les mots de passe ne correspondent pas." @@ -241,7 +241,7 @@ msgid "Password unchanged" msgstr "Mot de passe inchangé" #: modules/pam_cracklib/pam_cracklib.c:584 -#: modules/pam_cracklib/pam_cracklib.c:709 +#: modules/pam_cracklib/pam_cracklib.c:710 #, c-format msgid "BAD PASSWORD: %s" msgstr "MOT DE PASSE INCORRECT : %s" @@ -366,13 +366,13 @@ 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 +#: modules/pam_pwhistory/pam_pwhistory.c:231 +#: modules/pam_pwhistory/pam_pwhistory.c:267 msgid "Password change aborted." msgstr "Changement du mot de passe avorté." -#: modules/pam_pwhistory/pam_pwhistory.c:235 -#: modules/pam_pwhistory/pam_pwhistory.c:295 +#: modules/pam_pwhistory/pam_pwhistory.c:242 +#: modules/pam_pwhistory/pam_pwhistory.c:304 #: 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." @@ -437,20 +437,20 @@ msgstr "échec de pam_set_item()\n" msgid "login: failure forking: %m" msgstr "login : échec d'autoclônage : %m" -#: modules/pam_stress/pam_stress.c:476 +#: modules/pam_stress/pam_stress.c:475 #, c-format msgid "Changing STRESS password for %s." msgstr "Changement du mot de passe STRESS pour %s." -#: modules/pam_stress/pam_stress.c:490 +#: modules/pam_stress/pam_stress.c:489 msgid "Enter new STRESS password: " msgstr "Entrer le nouveau mot de passe STRESS : " -#: modules/pam_stress/pam_stress.c:493 +#: modules/pam_stress/pam_stress.c:492 msgid "Retype new STRESS password: " msgstr "Retaper le nouveau mot de passe STRESS : " -#: modules/pam_stress/pam_stress.c:522 +#: modules/pam_stress/pam_stress.c:521 msgid "Verification mis-typed; password unchanged" msgstr "Vérification erronée : mot de passe inchangé" @@ -459,7 +459,7 @@ msgstr "Vérification erronée : mot de passe inchangé" msgid "Account temporary locked (%ld seconds left)" msgstr "Compte temporairement verrouillé (%ld secondes restantes)" -#: modules/pam_tally/pam_tally.c:566 +#: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:520 #, c-format msgid "Account locked due to %u failed logins" msgstr "Compte temporairement verrouillé dû à l'échec de %u connexions" @@ -502,11 +502,6 @@ msgstr "" msgid "%s: Can't reset all users to non-zero\n" msgstr "%s: Impossible de réinitialiser tous les utilisateurs à non-zéro\n" -#: modules/pam_tally2/pam_tally2.c:520 -#, fuzzy, c-format -msgid "Account locked due to %hu failed logins" -msgstr "Compte temporairement verrouillé dû à l'échec de %u connexions" - #: modules/pam_tally2/pam_tally2.c:865 #, c-format msgid "Login Failures Latest failure From\n" @@ -521,6 +516,11 @@ msgid "" msgstr "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" +#: modules/pam_timestamp/pam_timestamp.c:339 +#, c-format +msgid "Access granted (last access was %ld seconds ago)." +msgstr "" + #: modules/pam_unix/pam_unix_acct.c:228 modules/pam_unix/pam_unix_acct.c:250 msgid "Your account has expired; please contact your system administrator" msgstr "Votre compte a expiré. Contactez votre administrateur système" @@ -575,6 +575,10 @@ msgstr "Entrez le nouveau mot de passe UNIX : " msgid "Retype new UNIX password: " msgstr "Retapez le nouveau mot de passe UNIX : " +#, fuzzy +#~ msgid "Account locked due to %hu failed logins" +#~ msgstr "Compte temporairement verrouillé dû à l'échec de %u connexions" + #~ msgid "has been already used" #~ msgstr "a déjà été utilisé" diff --git a/po/gu.po b/po/gu.po index 780f7648..737b4490 100644 --- 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-10-22 20:01+0200\n" +"POT-Creation-Date: 2008-11-28 15:16+0100\n" "PO-Revision-Date: 2008-03-13 14:29+0530\n" "Last-Translator: Ankit Patel \n" "Language-Team: Gujarati \n" @@ -169,19 +169,19 @@ msgid "Unknown PAM error" msgstr "અજ્ઞાત PAM ભૂલ" #: modules/pam_cracklib/pam_cracklib.c:64 -#: modules/pam_pwhistory/pam_pwhistory.c:61 +#: modules/pam_pwhistory/pam_pwhistory.c:62 #, c-format msgid "New %s%spassword: " msgstr "નવો %s%sપાસવર્ડ: " #: modules/pam_cracklib/pam_cracklib.c:66 -#: modules/pam_pwhistory/pam_pwhistory.c:62 +#: modules/pam_pwhistory/pam_pwhistory.c:64 #, c-format msgid "Retype new %s%spassword: " msgstr "નવો %s%sપાસવર્ડ ફરી લખો: " #: modules/pam_cracklib/pam_cracklib.c:67 -#: modules/pam_pwhistory/pam_pwhistory.c:63 +#: modules/pam_pwhistory/pam_pwhistory.c:65 msgid "Sorry, passwords do not match." msgstr "માફ કરજો, પાસવર્ડો બંધબેસતા નથી." @@ -232,7 +232,7 @@ msgid "Password unchanged" msgstr "પાસવર્ડ બદલાયેલ નથી" #: modules/pam_cracklib/pam_cracklib.c:584 -#: modules/pam_cracklib/pam_cracklib.c:709 +#: modules/pam_cracklib/pam_cracklib.c:710 #, c-format msgid "BAD PASSWORD: %s" msgstr "ખરાબ પાસવર્ડ: %s" @@ -355,14 +355,14 @@ 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 +#: modules/pam_pwhistory/pam_pwhistory.c:231 +#: modules/pam_pwhistory/pam_pwhistory.c:267 #, fuzzy msgid "Password change aborted." msgstr "પાસવર્ડ બદલાયેલ નથી" -#: modules/pam_pwhistory/pam_pwhistory.c:235 -#: modules/pam_pwhistory/pam_pwhistory.c:295 +#: modules/pam_pwhistory/pam_pwhistory.c:242 +#: modules/pam_pwhistory/pam_pwhistory.c:304 #: modules/pam_unix/pam_unix_passwd.c:470 msgid "Password has been already used. Choose another." msgstr "પાસવર્ડ પહેલાથી જ વપરાઈ ગયેલ છે. બીજો પસંદ કરો." @@ -427,20 +427,20 @@ msgstr "pam_set_item() કરવામાં નિષ્ફળ\n" msgid "login: failure forking: %m" msgstr "પ્રવેશ: ફોર્કમાં નિષ્ફળ: %m" -#: modules/pam_stress/pam_stress.c:476 +#: modules/pam_stress/pam_stress.c:475 #, c-format msgid "Changing STRESS password for %s." msgstr "STRESS પાસવર્ડ %s માટે બદલો." -#: modules/pam_stress/pam_stress.c:490 +#: modules/pam_stress/pam_stress.c:489 msgid "Enter new STRESS password: " msgstr "નવો STRESS પાસવર્ડ દાખલ કરો: " -#: modules/pam_stress/pam_stress.c:493 +#: modules/pam_stress/pam_stress.c:492 msgid "Retype new STRESS password: " msgstr "નવો STRESS પાસવર્ડ પુનઃલખો: " -#: modules/pam_stress/pam_stress.c:522 +#: modules/pam_stress/pam_stress.c:521 msgid "Verification mis-typed; password unchanged" msgstr "ચકાસણી ખોટી-રીતે લખાઈ; પાસવર્ડ બદલાયેલ નથી" @@ -449,7 +449,7 @@ msgstr "ચકાસણી ખોટી-રીતે લખાઈ; પાસવ msgid "Account temporary locked (%ld seconds left)" msgstr "" -#: modules/pam_tally/pam_tally.c:566 +#: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:520 #, c-format msgid "Account locked due to %u failed logins" msgstr "" @@ -492,11 +492,6 @@ msgstr "" msgid "%s: Can't reset all users to non-zero\n" msgstr "%s: બધા વપરાશકર્તાઓને બિન-શૂન્યમાં પુનઃસુયોજિત કરી શકતા નથી\n" -#: modules/pam_tally2/pam_tally2.c:520 -#, c-format -msgid "Account locked due to %hu failed logins" -msgstr "" - #: modules/pam_tally2/pam_tally2.c:865 #, c-format msgid "Login Failures Latest failure From\n" @@ -511,6 +506,11 @@ msgid "" msgstr "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" +#: modules/pam_timestamp/pam_timestamp.c:339 +#, c-format +msgid "Access granted (last access was %ld seconds ago)." +msgstr "" + #: modules/pam_unix/pam_unix_acct.c:228 modules/pam_unix/pam_unix_acct.c:250 msgid "Your account has expired; please contact your system administrator" msgstr "તમારું ખાતું નિવૃત્ત થઈ ગયું છે; મહેરબાની કરીને તમારા સિસ્ટમ સંચાલકનો સંપર્ક કરો" diff --git a/po/hi.po b/po/hi.po index 538fa17b..7edc79aa 100644 --- 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-10-22 20:01+0200\n" +"POT-Creation-Date: 2008-11-28 15:16+0100\n" "PO-Revision-Date: 2007-06-21 15:22+0530\n" "Last-Translator: Rajesh Ranjan \n" "Language-Team: Hindi \n" @@ -169,19 +169,19 @@ msgid "Unknown PAM error" msgstr "अनजान PAM त्रुटि" #: modules/pam_cracklib/pam_cracklib.c:64 -#: modules/pam_pwhistory/pam_pwhistory.c:61 +#: modules/pam_pwhistory/pam_pwhistory.c:62 #, c-format msgid "New %s%spassword: " msgstr "नया %s%spassword: " #: modules/pam_cracklib/pam_cracklib.c:66 -#: modules/pam_pwhistory/pam_pwhistory.c:62 +#: modules/pam_pwhistory/pam_pwhistory.c:64 #, c-format msgid "Retype new %s%spassword: " msgstr "नया %s%spassword फिर टाइप करें: " #: modules/pam_cracklib/pam_cracklib.c:67 -#: modules/pam_pwhistory/pam_pwhistory.c:63 +#: modules/pam_pwhistory/pam_pwhistory.c:65 msgid "Sorry, passwords do not match." msgstr "क्षमा करें, शब्दकूट नहीं मिलते हैं." @@ -232,7 +232,7 @@ msgid "Password unchanged" msgstr "शब्दकूट परिवर्तित" #: modules/pam_cracklib/pam_cracklib.c:584 -#: modules/pam_cracklib/pam_cracklib.c:709 +#: modules/pam_cracklib/pam_cracklib.c:710 #, c-format msgid "BAD PASSWORD: %s" msgstr "खराब शब्दकूट: %s" @@ -355,14 +355,14 @@ msgstr "" msgid "Unable to create directory %s: %m" msgstr "" -#: modules/pam_pwhistory/pam_pwhistory.c:224 -#: modules/pam_pwhistory/pam_pwhistory.c:258 +#: modules/pam_pwhistory/pam_pwhistory.c:231 +#: modules/pam_pwhistory/pam_pwhistory.c:267 #, fuzzy msgid "Password change aborted." msgstr "शब्दकूट परिवर्तित" -#: modules/pam_pwhistory/pam_pwhistory.c:235 -#: modules/pam_pwhistory/pam_pwhistory.c:295 +#: modules/pam_pwhistory/pam_pwhistory.c:242 +#: modules/pam_pwhistory/pam_pwhistory.c:304 #: modules/pam_unix/pam_unix_passwd.c:470 msgid "Password has been already used. Choose another." msgstr "शब्दकूट को पहले ही बदला जा चुका है. दूसरा चुनें." @@ -431,20 +431,20 @@ msgstr "pam_set_item() में विफल\n" msgid "login: failure forking: %m" msgstr "लॉगिन: विफल फोर्किंग: %m" -#: modules/pam_stress/pam_stress.c:476 +#: modules/pam_stress/pam_stress.c:475 #, fuzzy, c-format msgid "Changing STRESS password for %s." msgstr "इसके लिए स्ट्रेस शब्दकूट बदल रहा है " -#: modules/pam_stress/pam_stress.c:490 +#: modules/pam_stress/pam_stress.c:489 msgid "Enter new STRESS password: " msgstr "नया स्ट्रेस शब्दकूट दें: " -#: modules/pam_stress/pam_stress.c:493 +#: modules/pam_stress/pam_stress.c:492 msgid "Retype new STRESS password: " msgstr "नया शब्दकूट फिर टाइप करें: " -#: modules/pam_stress/pam_stress.c:522 +#: modules/pam_stress/pam_stress.c:521 msgid "Verification mis-typed; password unchanged" msgstr "जांच गलत टाइप किया गया; शब्दकूट बदला गया" @@ -453,7 +453,7 @@ msgstr "जांच गलत टाइप किया गया; शब्द msgid "Account temporary locked (%ld seconds left)" msgstr "" -#: modules/pam_tally/pam_tally.c:566 +#: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:520 #, c-format msgid "Account locked due to %u failed logins" msgstr "" @@ -496,11 +496,6 @@ msgstr "" msgid "%s: Can't reset all users to non-zero\n" msgstr "%s: सभी उपयोक्ता को गैर शून्य में फिर सेट नहीं कर सकता है\n" -#: modules/pam_tally2/pam_tally2.c:520 -#, c-format -msgid "Account locked due to %hu failed logins" -msgstr "" - #: modules/pam_tally2/pam_tally2.c:865 #, c-format msgid "Login Failures Latest failure From\n" @@ -515,6 +510,11 @@ msgid "" msgstr "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" +#: modules/pam_timestamp/pam_timestamp.c:339 +#, c-format +msgid "Access granted (last access was %ld seconds ago)." +msgstr "" + #: modules/pam_unix/pam_unix_acct.c:228 modules/pam_unix/pam_unix_acct.c:250 msgid "Your account has expired; please contact your system administrator" msgstr "आपका खाता समाप्त हो चुका है; कृपया अपने सिस्टम प्रशासक को संपर्क करें" diff --git a/po/hu.po b/po/hu.po index 05f90755..8a1a39ab 100644 --- 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-10-22 20:01+0200\n" +"POT-Creation-Date: 2008-11-28 15:16+0100\n" "PO-Revision-Date: 2008-04-30 08:23+0100\n" "Last-Translator: Sulyok Péter \n" "Language-Team: Hungarian \n" @@ -176,19 +176,19 @@ msgid "Unknown PAM error" msgstr "Ismeretlen PAM hiba" #: modules/pam_cracklib/pam_cracklib.c:64 -#: modules/pam_pwhistory/pam_pwhistory.c:61 +#: modules/pam_pwhistory/pam_pwhistory.c:62 #, c-format msgid "New %s%spassword: " msgstr "Új %s%sjelszó: " #: modules/pam_cracklib/pam_cracklib.c:66 -#: modules/pam_pwhistory/pam_pwhistory.c:62 +#: modules/pam_pwhistory/pam_pwhistory.c:64 #, 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 +#: modules/pam_pwhistory/pam_pwhistory.c:65 msgid "Sorry, passwords do not match." msgstr "Sajnálom, de a jelszavak nem egyeznek." @@ -239,7 +239,7 @@ msgid "Password unchanged" msgstr "Változatlan jelszó" #: modules/pam_cracklib/pam_cracklib.c:584 -#: modules/pam_cracklib/pam_cracklib.c:709 +#: modules/pam_cracklib/pam_cracklib.c:710 #, c-format msgid "BAD PASSWORD: %s" msgstr "ROSSZ JELSZÓ: %s" @@ -362,14 +362,14 @@ 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 +#: modules/pam_pwhistory/pam_pwhistory.c:231 +#: modules/pam_pwhistory/pam_pwhistory.c:267 #, 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_pwhistory/pam_pwhistory.c:242 +#: modules/pam_pwhistory/pam_pwhistory.c:304 #: 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!" @@ -434,20 +434,20 @@ msgstr "pam_set_item() meghiúsult\n" msgid "login: failure forking: %m" msgstr "bejelentkezés: elágazás hiba: %m" -#: modules/pam_stress/pam_stress.c:476 +#: modules/pam_stress/pam_stress.c:475 #, c-format msgid "Changing STRESS password for %s." msgstr "%s STRESS jelszavának megváltoztatása." -#: modules/pam_stress/pam_stress.c:490 +#: modules/pam_stress/pam_stress.c:489 msgid "Enter new STRESS password: " msgstr "Új STRESS jelszó: " -#: modules/pam_stress/pam_stress.c:493 +#: modules/pam_stress/pam_stress.c:492 msgid "Retype new STRESS password: " msgstr "Ismét az új STRESS jelszó: " -#: modules/pam_stress/pam_stress.c:522 +#: modules/pam_stress/pam_stress.c:521 msgid "Verification mis-typed; password unchanged" msgstr "Az ellenőrző jelszó nem egyezik; a jelszó nem került módosításra" @@ -456,7 +456,7 @@ msgstr "Az ellenőrző jelszó nem egyezik; a jelszó nem került módosításra msgid "Account temporary locked (%ld seconds left)" msgstr "" -#: modules/pam_tally/pam_tally.c:566 +#: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:520 #, c-format msgid "Account locked due to %u failed logins" msgstr "" @@ -499,11 +499,6 @@ msgstr "" msgid "%s: Can't reset all users to non-zero\n" msgstr "%s: Nem állítható vissza minden használó nem nullára\n" -#: modules/pam_tally2/pam_tally2.c:520 -#, c-format -msgid "Account locked due to %hu failed logins" -msgstr "" - #: modules/pam_tally2/pam_tally2.c:865 #, c-format msgid "Login Failures Latest failure From\n" @@ -518,6 +513,11 @@ msgid "" msgstr "" "%s: [--file rooted-fájlnév] [--user használó] [--reset[=n]] [--quiet]\n" +#: modules/pam_timestamp/pam_timestamp.c:339 +#, c-format +msgid "Access granted (last access was %ld seconds ago)." +msgstr "" + #: modules/pam_unix/pam_unix_acct.c:228 modules/pam_unix/pam_unix_acct.c:250 msgid "Your account has expired; please contact your system administrator" msgstr "A számla érvényessége lejárt; kérem keresse meg a rendszergazdát" diff --git a/po/it.po b/po/it.po index b55ec5a7..ba5e05ed 100644 --- a/po/it.po +++ b/po/it.po @@ -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-10-22 20:01+0200\n" +"POT-Creation-Date: 2008-11-28 15:16+0100\n" "PO-Revision-Date: 2008-10-21 13:21+1000\n" "Last-Translator: \n" "Language-Team: \n" @@ -173,19 +173,19 @@ msgid "Unknown PAM error" msgstr "Errore PAM sconosciuto" #: modules/pam_cracklib/pam_cracklib.c:64 -#: modules/pam_pwhistory/pam_pwhistory.c:61 +#: modules/pam_pwhistory/pam_pwhistory.c:62 #, 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 +#: modules/pam_pwhistory/pam_pwhistory.c:64 #, 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 +#: modules/pam_pwhistory/pam_pwhistory.c:65 msgid "Sorry, passwords do not match." msgstr "Le password non corrispondono." @@ -236,7 +236,7 @@ msgid "Password unchanged" msgstr "Password non modificata" #: modules/pam_cracklib/pam_cracklib.c:584 -#: modules/pam_cracklib/pam_cracklib.c:709 +#: modules/pam_cracklib/pam_cracklib.c:710 #, c-format msgid "BAD PASSWORD: %s" msgstr "PASSWORD ERRATA: %s" @@ -365,13 +365,13 @@ 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 +#: modules/pam_pwhistory/pam_pwhistory.c:231 +#: modules/pam_pwhistory/pam_pwhistory.c:267 msgid "Password change aborted." msgstr "Cambio della password abortito." -#: modules/pam_pwhistory/pam_pwhistory.c:235 -#: modules/pam_pwhistory/pam_pwhistory.c:295 +#: modules/pam_pwhistory/pam_pwhistory.c:242 +#: modules/pam_pwhistory/pam_pwhistory.c:304 #: modules/pam_unix/pam_unix_passwd.c:470 msgid "Password has been already used. Choose another." msgstr "Password già utilizzata. Sceglierne un'altra." @@ -436,20 +436,20 @@ msgstr "Impossibile eseguire pam_set_item()\n" msgid "login: failure forking: %m" msgstr "login: forking fallito: %m" -#: modules/pam_stress/pam_stress.c:476 +#: modules/pam_stress/pam_stress.c:475 #, c-format msgid "Changing STRESS password for %s." msgstr "Cambio password STRESS per %s." -#: modules/pam_stress/pam_stress.c:490 +#: modules/pam_stress/pam_stress.c:489 msgid "Enter new STRESS password: " msgstr "Immettere nuova password STRESS: " -#: modules/pam_stress/pam_stress.c:493 +#: modules/pam_stress/pam_stress.c:492 msgid "Retype new STRESS password: " msgstr "Reimmettere la nuova password STRESS: " -#: modules/pam_stress/pam_stress.c:522 +#: modules/pam_stress/pam_stress.c:521 msgid "Verification mis-typed; password unchanged" msgstr "Errore di digitazione per verifica; password non cambiata" @@ -458,7 +458,7 @@ msgstr "Errore di digitazione per verifica; password non cambiata" msgid "Account temporary locked (%ld seconds left)" msgstr "Account momentaneamente bloccato (%ld secondi rimanenti)" -#: modules/pam_tally/pam_tally.c:566 +#: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:520 #, c-format msgid "Account locked due to %u failed logins" msgstr "Account bloccato a causa di %u login falliti" @@ -501,11 +501,6 @@ msgid "%s: Can't reset all users to non-zero\n" msgstr "" "%s: Impossibile ripristinare tutti gli utenti a valori diversi da zero\n" -#: modules/pam_tally2/pam_tally2.c:520 -#, fuzzy, c-format -msgid "Account locked due to %hu failed logins" -msgstr "Account bloccato a causa di %u login falliti" - #: modules/pam_tally2/pam_tally2.c:865 #, c-format msgid "Login Failures Latest failure From\n" @@ -519,6 +514,11 @@ msgid "" " [-r] [--reset[=n]] [--quiet]\n" msgstr "%s: [--file NOMEFILE] [--user NOMEUTENTE] [--reset[=N]] [--quiet]\n" +#: modules/pam_timestamp/pam_timestamp.c:339 +#, c-format +msgid "Access granted (last access was %ld seconds ago)." +msgstr "" + #: modules/pam_unix/pam_unix_acct.c:228 modules/pam_unix/pam_unix_acct.c:250 msgid "Your account has expired; please contact your system administrator" msgstr "Account scaduto; contattare l'amministratore di sistema" @@ -575,3 +575,7 @@ msgstr "Immettere nuova password UNIX: " #: modules/pam_unix/pam_unix_passwd.c:678 msgid "Retype new UNIX password: " msgstr "Reimmettere la nuova password UNIX: " + +#, fuzzy +#~ msgid "Account locked due to %hu failed logins" +#~ msgstr "Account bloccato a causa di %u login falliti" diff --git a/po/ja.po b/po/ja.po index 18a43028..22618542 100644 --- a/po/ja.po +++ b/po/ja.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Linux-PAM.tip.ja\n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n" -"POT-Creation-Date: 2008-10-22 20:01+0200\n" +"POT-Creation-Date: 2008-11-28 15:16+0100\n" "PO-Revision-Date: 2008-10-21 15:08+1000\n" "Last-Translator: Kiyoto Hashida \n" "Language-Team: Japanese \n" @@ -168,19 +168,19 @@ msgid "Unknown PAM error" msgstr "不明なPAMエラー" #: modules/pam_cracklib/pam_cracklib.c:64 -#: modules/pam_pwhistory/pam_pwhistory.c:61 +#: modules/pam_pwhistory/pam_pwhistory.c:62 #, c-format msgid "New %s%spassword: " msgstr "新しい%s%sパスワード:" #: modules/pam_cracklib/pam_cracklib.c:66 -#: modules/pam_pwhistory/pam_pwhistory.c:62 +#: modules/pam_pwhistory/pam_pwhistory.c:64 #, c-format msgid "Retype new %s%spassword: " msgstr "新しい%s%sパスワードを再入力してください:" #: modules/pam_cracklib/pam_cracklib.c:67 -#: modules/pam_pwhistory/pam_pwhistory.c:63 +#: modules/pam_pwhistory/pam_pwhistory.c:65 msgid "Sorry, passwords do not match." msgstr "パスワードが一致しません。" @@ -231,7 +231,7 @@ msgid "Password unchanged" msgstr "パスワードが変更されていません" #: modules/pam_cracklib/pam_cracklib.c:584 -#: modules/pam_cracklib/pam_cracklib.c:709 +#: modules/pam_cracklib/pam_cracklib.c:710 #, c-format msgid "BAD PASSWORD: %s" msgstr "よくないパスワード: %s" @@ -353,13 +353,13 @@ 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 +#: modules/pam_pwhistory/pam_pwhistory.c:231 +#: modules/pam_pwhistory/pam_pwhistory.c:267 msgid "Password change aborted." msgstr "パスワードの変更は放棄されました" -#: modules/pam_pwhistory/pam_pwhistory.c:235 -#: modules/pam_pwhistory/pam_pwhistory.c:295 +#: modules/pam_pwhistory/pam_pwhistory.c:242 +#: modules/pam_pwhistory/pam_pwhistory.c:304 #: modules/pam_unix/pam_unix_passwd.c:470 msgid "Password has been already used. Choose another." msgstr "" @@ -425,20 +425,20 @@ msgstr "pam_set_item()に失敗しました\n" msgid "login: failure forking: %m" msgstr "ログイン: いまいましい失敗: %m" -#: modules/pam_stress/pam_stress.c:476 +#: modules/pam_stress/pam_stress.c:475 #, c-format msgid "Changing STRESS password for %s." msgstr "%s 用の STRESS パスワードを変更中" -#: modules/pam_stress/pam_stress.c:490 +#: modules/pam_stress/pam_stress.c:489 msgid "Enter new STRESS password: " msgstr "新しいSTRESSパスワードを入力してください:" -#: modules/pam_stress/pam_stress.c:493 +#: modules/pam_stress/pam_stress.c:492 msgid "Retype new STRESS password: " msgstr "新しいSTRESSパスワードを再入力してください:" -#: modules/pam_stress/pam_stress.c:522 +#: modules/pam_stress/pam_stress.c:521 msgid "Verification mis-typed; password unchanged" msgstr "ミスタイプの確認、パスワードが変更されていません" @@ -447,7 +447,7 @@ msgstr "ミスタイプの確認、パスワードが変更されていません msgid "Account temporary locked (%ld seconds left)" msgstr "アカウントは一時的にロックされています (残り %ld 秒)" -#: modules/pam_tally/pam_tally.c:566 +#: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:520 #, c-format msgid "Account locked due to %u failed logins" msgstr "%u のログイン失敗の理由で アカウントはロックされました" @@ -490,11 +490,6 @@ msgstr "" msgid "%s: Can't reset all users to non-zero\n" msgstr "%s: すべてのユーザを非ゼロにリセットできません\n" -#: modules/pam_tally2/pam_tally2.c:520 -#, fuzzy, c-format -msgid "Account locked due to %hu failed logins" -msgstr "%u のログイン失敗の理由で アカウントはロックされました" - #: modules/pam_tally2/pam_tally2.c:865 #, c-format msgid "Login Failures Latest failure From\n" @@ -509,6 +504,11 @@ msgid "" msgstr "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" +#: modules/pam_timestamp/pam_timestamp.c:339 +#, c-format +msgid "Access granted (last access was %ld seconds ago)." +msgstr "" + #: modules/pam_unix/pam_unix_acct.c:228 modules/pam_unix/pam_unix_acct.c:250 msgid "Your account has expired; please contact your system administrator" msgstr "" @@ -562,3 +562,7 @@ msgstr "新しいUNIXパスワードを入力してください:" #: modules/pam_unix/pam_unix_passwd.c:678 msgid "Retype new UNIX password: " msgstr "新しいUNIX パスワードを再入力してください:" + +#, fuzzy +#~ msgid "Account locked due to %hu failed logins" +#~ msgstr "%u のログイン失敗の理由で アカウントはロックされました" diff --git a/po/km.po b/po/km.po index 4f7ab9f6..c642235b 100644 --- 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-10-22 20:01+0200\n" +"POT-Creation-Date: 2008-11-28 15:16+0100\n" "PO-Revision-Date: 2006-03-17 10:32+0700\n" "Last-Translator: Khoem Sokhem \n" "Language-Team: Khmer \n" @@ -170,19 +170,19 @@ msgid "Unknown PAM error" msgstr "មិន​ស្គាល់​កំហុស PAM" #: modules/pam_cracklib/pam_cracklib.c:64 -#: modules/pam_pwhistory/pam_pwhistory.c:61 +#: modules/pam_pwhistory/pam_pwhistory.c:62 #, c-format msgid "New %s%spassword: " msgstr "ពាក្យ​សម្ងាត់ %s%s ថ្មី ៖" #: modules/pam_cracklib/pam_cracklib.c:66 -#: modules/pam_pwhistory/pam_pwhistory.c:62 +#: modules/pam_pwhistory/pam_pwhistory.c:64 #, c-format msgid "Retype new %s%spassword: " msgstr "វាយ​ពាក្យ​សម្ងាត់ %s%s ថ្មី​ឡើង​វិញ ៖" #: modules/pam_cracklib/pam_cracklib.c:67 -#: modules/pam_pwhistory/pam_pwhistory.c:63 +#: modules/pam_pwhistory/pam_pwhistory.c:65 msgid "Sorry, passwords do not match." msgstr "សូម​ទោស ពាក្យ​សម្ងាត់​មិន​ដូច​គ្នា​ឡើយ ។" @@ -233,7 +233,7 @@ msgid "Password unchanged" msgstr "ពាក្យសម្ងាត់​មិន​បាន​ផ្លាស់ប្ដូរ​ឡើយ" #: modules/pam_cracklib/pam_cracklib.c:584 -#: modules/pam_cracklib/pam_cracklib.c:709 +#: modules/pam_cracklib/pam_cracklib.c:710 #, c-format msgid "BAD PASSWORD: %s" msgstr "ពាក្យ​សម្ងាត់​មិន​ល្អ ៖ %s" @@ -356,14 +356,14 @@ msgstr "" msgid "Unable to create directory %s: %m" msgstr "" -#: modules/pam_pwhistory/pam_pwhistory.c:224 -#: modules/pam_pwhistory/pam_pwhistory.c:258 +#: modules/pam_pwhistory/pam_pwhistory.c:231 +#: modules/pam_pwhistory/pam_pwhistory.c:267 #, fuzzy msgid "Password change aborted." msgstr "ពាក្យសម្ងាត់​មិន​បាន​ផ្លាស់ប្ដូរ​ឡើយ" -#: modules/pam_pwhistory/pam_pwhistory.c:235 -#: modules/pam_pwhistory/pam_pwhistory.c:295 +#: modules/pam_pwhistory/pam_pwhistory.c:242 +#: modules/pam_pwhistory/pam_pwhistory.c:304 #: modules/pam_unix/pam_unix_passwd.c:470 msgid "Password has been already used. Choose another." msgstr "ពាក្យសម្ងាត់​ត្រូវ​បាន​ប្រើ​រួច​ហើយ ។ សូម​ជ្រើស​មួយ​ទៀត ។" @@ -432,20 +432,20 @@ msgstr "បាន​បរាជ័យ pam_set_item()\n" msgid "login: failure forking: %m" msgstr "ចូល ៖ ចម្លង​ខ្លួន​ឯង​មិន​បាន​ជោគជ័យ ៖ %m" -#: modules/pam_stress/pam_stress.c:476 +#: modules/pam_stress/pam_stress.c:475 #, fuzzy, c-format msgid "Changing STRESS password for %s." msgstr "ការ​ផ្លាស់ប្ដូរ​ពាក្យ​សម្ងាត់ STRESS សម្រាប់ " -#: modules/pam_stress/pam_stress.c:490 +#: modules/pam_stress/pam_stress.c:489 msgid "Enter new STRESS password: " msgstr "បញ្ចូល​ពាក្យ​សម្ងាត់ STRESS ថ្មី ៖ " -#: modules/pam_stress/pam_stress.c:493 +#: modules/pam_stress/pam_stress.c:492 msgid "Retype new STRESS password: " msgstr "វាយ​ពាក្យ​សម្ងាត់ STRESS ថ្មី​ម្ដង​ទៀត ៖ " -#: modules/pam_stress/pam_stress.c:522 +#: modules/pam_stress/pam_stress.c:521 msgid "Verification mis-typed; password unchanged" msgstr "ផ្ទៀងផ្ទាត់​អក្ខរាវិរុទ្ធ​ដែល​បាន​វាយខុស ពាក្យ​សម្ងាត់​មិន​បានផ្លាស់ប្ដូរ​" @@ -454,7 +454,7 @@ msgstr "ផ្ទៀងផ្ទាត់​អក្ខរាវិរុទ្ msgid "Account temporary locked (%ld seconds left)" msgstr "" -#: modules/pam_tally/pam_tally.c:566 +#: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:520 #, c-format msgid "Account locked due to %u failed logins" msgstr "" @@ -497,11 +497,6 @@ msgstr "" msgid "%s: Can't reset all users to non-zero\n" msgstr "%s ៖ មិន​អាច​កំណត់​អ្នក​ប្រើ​ទាំងអស់​ទៅ​មិនមែន​សូន្យ​ឡើងវិញ​បានទេ\n" -#: modules/pam_tally2/pam_tally2.c:520 -#, c-format -msgid "Account locked due to %hu failed logins" -msgstr "" - #: modules/pam_tally2/pam_tally2.c:865 #, c-format msgid "Login Failures Latest failure From\n" @@ -516,6 +511,11 @@ msgid "" msgstr "" "%s ៖ [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" +#: modules/pam_timestamp/pam_timestamp.c:339 +#, c-format +msgid "Access granted (last access was %ld seconds ago)." +msgstr "" + #: modules/pam_unix/pam_unix_acct.c:228 modules/pam_unix/pam_unix_acct.c:250 msgid "Your account has expired; please contact your system administrator" msgstr "គណនី​របស់​អ្នក​បាន​ផុតកំណត់​ហើយ សូម​ទាក់ទង​អ្នក​គ្រប់គ្រង​ប្រព័ន្ធ​របស់​អ្នក" diff --git a/po/kn.po b/po/kn.po index 5ce43d17..2b499202 100644 --- a/po/kn.po +++ b/po/kn.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Linux-PAM.tip.kn\n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n" -"POT-Creation-Date: 2008-10-22 20:01+0200\n" +"POT-Creation-Date: 2008-11-28 15:16+0100\n" "PO-Revision-Date: 2008-10-20 12:29+0530\n" "Last-Translator: Shankar Prasad \n" "Language-Team: Kannada \n" @@ -167,19 +167,19 @@ msgid "Unknown PAM error" msgstr "ಗೊತ್ತಿರದ PAM ದೋಷ" #: modules/pam_cracklib/pam_cracklib.c:64 -#: modules/pam_pwhistory/pam_pwhistory.c:61 +#: modules/pam_pwhistory/pam_pwhistory.c:62 #, c-format msgid "New %s%spassword: " msgstr "ಹೊಸ %s%sಗುಪ್ತಪದ: " #: modules/pam_cracklib/pam_cracklib.c:66 -#: modules/pam_pwhistory/pam_pwhistory.c:62 +#: modules/pam_pwhistory/pam_pwhistory.c:64 #, c-format msgid "Retype new %s%spassword: " msgstr "ಹೊಸ %s%sಗುಪ್ತಪದವನ್ನು ಪುನರ್ ಟೈಪಿಸಿ: " #: modules/pam_cracklib/pam_cracklib.c:67 -#: modules/pam_pwhistory/pam_pwhistory.c:63 +#: modules/pam_pwhistory/pam_pwhistory.c:65 msgid "Sorry, passwords do not match." msgstr "ಕ್ಷಮಿಸಿ, ಗುಪ್ತಪದಗಳು ತಾಳೆಯಾಗುತ್ತಿಲ್ಲ." @@ -230,7 +230,7 @@ msgid "Password unchanged" msgstr "ಗುಪ್ತಪದ ಬದಲಾಗಿಲ್ಲ" #: modules/pam_cracklib/pam_cracklib.c:584 -#: modules/pam_cracklib/pam_cracklib.c:709 +#: modules/pam_cracklib/pam_cracklib.c:710 #, c-format msgid "BAD PASSWORD: %s" msgstr "ಕೆಟ್ಟ ಗುಪ್ತಪದ: %s" @@ -353,13 +353,13 @@ 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 +#: modules/pam_pwhistory/pam_pwhistory.c:231 +#: modules/pam_pwhistory/pam_pwhistory.c:267 msgid "Password change aborted." msgstr "ಗುಪ್ತಪದ ಬದಲಾವಣೆಯನ್ನು ಸ್ಥಗಿತಗೊಳಿಸಲಾಗಿದೆ." -#: modules/pam_pwhistory/pam_pwhistory.c:235 -#: modules/pam_pwhistory/pam_pwhistory.c:295 +#: modules/pam_pwhistory/pam_pwhistory.c:242 +#: modules/pam_pwhistory/pam_pwhistory.c:304 #: modules/pam_unix/pam_unix_passwd.c:470 msgid "Password has been already used. Choose another." msgstr "ಗುಪ್ತಪದವು ಈಗಾಗಲೆ ಬಳಸಲ್ಪಟ್ಟಿದೆ. ಬೇರೊಂದನ್ನು ಬಳಸಿ." @@ -424,20 +424,20 @@ msgstr "pam_set_item() ಮಾಡುವಲ್ಲಿ ವಿಫಲತೆ\n" msgid "login: failure forking: %m" msgstr "ಲಾಗಿನ್: ಫೋರ್ಕಿಂಗ್ ಮಾಡುವಲ್ಲಿ ವಿಫಲತೆ:%m" -#: modules/pam_stress/pam_stress.c:476 +#: modules/pam_stress/pam_stress.c:475 #, c-format msgid "Changing STRESS password for %s." msgstr "%s ಗಾಗಿ STRESS ಗುಪ್ತಪದವನ್ನು ಬದಲಾಯಿಸಲಾಗುತ್ತಿದೆ." -#: modules/pam_stress/pam_stress.c:490 +#: modules/pam_stress/pam_stress.c:489 msgid "Enter new STRESS password: " msgstr "ಹೊಸ STRESS ಗುಪ್ತಪದವನ್ನು ಟೈಪಿಸಿ: " -#: modules/pam_stress/pam_stress.c:493 +#: modules/pam_stress/pam_stress.c:492 msgid "Retype new STRESS password: " msgstr "ಹೊಸ STRESS ಗುಪ್ತಪದವನ್ನು ಪುನಃ ಟೈಪಿಸಿ: " -#: modules/pam_stress/pam_stress.c:522 +#: modules/pam_stress/pam_stress.c:521 msgid "Verification mis-typed; password unchanged" msgstr "ತಪಾಸಣೆಗೆ ಟೈಪಿಸಿದ್ದು ತಪ್ಪಾಗಿದೆ; ಗುಪ್ತಪದ ಬದಲಾಗಿಲ್ಲ" @@ -446,7 +446,7 @@ msgstr "ತಪಾಸಣೆಗೆ ಟೈಪಿಸಿದ್ದು ತಪ್ಪಾ msgid "Account temporary locked (%ld seconds left)" msgstr "ಖಾತೆಯನ್ನು ತಾತ್ಕಾಲಿಕವಾಗಿ ಲಾಕ್ ಮಾಡಲಾಗಿದೆ (%ld ಸೆಕೆಂಡುಗಳು ಉಳಿದಿವೆ)" -#: modules/pam_tally/pam_tally.c:566 +#: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:520 #, c-format msgid "Account locked due to %u failed logins" msgstr "ವಿಫಲಗೊಂಡ %u ಪ್ರವೇಶಗಳಿಂದಾಗಿ ಖಾತೆಯನ್ನು ಲಾಕ್ ಮಾಡಲಾಗುತ್ತಿದೆ" @@ -489,11 +489,6 @@ msgstr "" msgid "%s: Can't reset all users to non-zero\n" msgstr "%s: ಎಲ್ಲಾ ಬಳಕೆದಾರರನ್ನು ಶೂನ್ಯವಲ್ಲದುದಕ್ಕೆ ಪುನರ್ ಸಂಯೋಜಿಸಲು ಆಗುವುದಿಲ್ಲ\n" -#: modules/pam_tally2/pam_tally2.c:520 -#, fuzzy, c-format -msgid "Account locked due to %hu failed logins" -msgstr "ವಿಫಲಗೊಂಡ %u ಪ್ರವೇಶಗಳಿಂದಾಗಿ ಖಾತೆಯನ್ನು ಲಾಕ್ ಮಾಡಲಾಗುತ್ತಿದೆ" - #: modules/pam_tally2/pam_tally2.c:865 #, c-format msgid "Login Failures Latest failure From\n" @@ -508,6 +503,11 @@ msgid "" msgstr "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" +#: modules/pam_timestamp/pam_timestamp.c:339 +#, c-format +msgid "Access granted (last access was %ld seconds ago)." +msgstr "" + #: modules/pam_unix/pam_unix_acct.c:228 modules/pam_unix/pam_unix_acct.c:250 msgid "Your account has expired; please contact your system administrator" msgstr "ನಿಮ್ಮ ಖಾತೆಯ ಅವಧಿ ಅಂತ್ಯಗೊಂಡಿದೆ; ದಯವಿಟ್ಟು ನಿಮ್ಮ ಗಣಕ ವ್ಯವಸ್ಥಾಪಕರನ್ನು ಸಂಪರ್ಕಿಸಿ" @@ -562,3 +562,7 @@ msgstr "ಹೊಸ UNIX ಗುಪ್ತಪದವನ್ನು ದಾಖಲಿಸ #: modules/pam_unix/pam_unix_passwd.c:678 msgid "Retype new UNIX password: " msgstr "ಹೊಸ UNIX ಗುಪ್ತಪದವನ್ನು ಪುನಃ ಟೈಪಿಸಿ: " + +#, fuzzy +#~ msgid "Account locked due to %hu failed logins" +#~ msgstr "ವಿಫಲಗೊಂಡ %u ಪ್ರವೇಶಗಳಿಂದಾಗಿ ಖಾತೆಯನ್ನು ಲಾಕ್ ಮಾಡಲಾಗುತ್ತಿದೆ" diff --git a/po/ko.po b/po/ko.po index d5f158e2..45ea5090 100644 --- 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-10-22 20:01+0200\n" +"POT-Creation-Date: 2008-11-28 15:16+0100\n" "PO-Revision-Date: 2007-06-22 10:02+1000\n" "Last-Translator: Eunju Kim \n" "Language-Team: Korean \n" @@ -167,19 +167,19 @@ msgid "Unknown PAM error" msgstr "알 수 없는 PAM 오류" #: modules/pam_cracklib/pam_cracklib.c:64 -#: modules/pam_pwhistory/pam_pwhistory.c:61 +#: modules/pam_pwhistory/pam_pwhistory.c:62 #, c-format msgid "New %s%spassword: " msgstr "새 %s%s 암호:" #: modules/pam_cracklib/pam_cracklib.c:66 -#: modules/pam_pwhistory/pam_pwhistory.c:62 +#: modules/pam_pwhistory/pam_pwhistory.c:64 #, c-format msgid "Retype new %s%spassword: " msgstr "새 %s%s 암호 재입력:" #: modules/pam_cracklib/pam_cracklib.c:67 -#: modules/pam_pwhistory/pam_pwhistory.c:63 +#: modules/pam_pwhistory/pam_pwhistory.c:65 msgid "Sorry, passwords do not match." msgstr "죄송합니다. 암호가 일치하지 않습니다." @@ -230,7 +230,7 @@ msgid "Password unchanged" msgstr "암호가 변경되지 않음" #: modules/pam_cracklib/pam_cracklib.c:584 -#: modules/pam_cracklib/pam_cracklib.c:709 +#: modules/pam_cracklib/pam_cracklib.c:710 #, c-format msgid "BAD PASSWORD: %s" msgstr "잘못된 암호: %s" @@ -352,14 +352,14 @@ msgstr "" msgid "Unable to create directory %s: %m" msgstr "" -#: modules/pam_pwhistory/pam_pwhistory.c:224 -#: modules/pam_pwhistory/pam_pwhistory.c:258 +#: modules/pam_pwhistory/pam_pwhistory.c:231 +#: modules/pam_pwhistory/pam_pwhistory.c:267 #, fuzzy msgid "Password change aborted." msgstr "암호가 변경되지 않음" -#: modules/pam_pwhistory/pam_pwhistory.c:235 -#: modules/pam_pwhistory/pam_pwhistory.c:295 +#: modules/pam_pwhistory/pam_pwhistory.c:242 +#: modules/pam_pwhistory/pam_pwhistory.c:304 #: modules/pam_unix/pam_unix_passwd.c:470 msgid "Password has been already used. Choose another." msgstr "이미 사용되고 있는 암호입니다. 다른 암호를 선택해 주십시오." @@ -428,20 +428,20 @@ msgstr "pam_set_item() 실패\n" msgid "login: failure forking: %m" msgstr "로그인: 포크 작업(forking) 실패: %m" -#: modules/pam_stress/pam_stress.c:476 +#: modules/pam_stress/pam_stress.c:475 #, fuzzy, c-format msgid "Changing STRESS password for %s." msgstr "STRESS 암호 변경" -#: modules/pam_stress/pam_stress.c:490 +#: modules/pam_stress/pam_stress.c:489 msgid "Enter new STRESS password: " msgstr "새 STRESS 암호 입력:" -#: modules/pam_stress/pam_stress.c:493 +#: modules/pam_stress/pam_stress.c:492 msgid "Retype new STRESS password: " msgstr "새 STRESS 암호를 재입력:" -#: modules/pam_stress/pam_stress.c:522 +#: modules/pam_stress/pam_stress.c:521 msgid "Verification mis-typed; password unchanged" msgstr "암호 확인에서 잘못 입력됨; 암호가 변경되지 않음" @@ -450,7 +450,7 @@ msgstr "암호 확인에서 잘못 입력됨; 암호가 변경되지 않음" msgid "Account temporary locked (%ld seconds left)" msgstr "" -#: modules/pam_tally/pam_tally.c:566 +#: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:520 #, c-format msgid "Account locked due to %u failed logins" msgstr "" @@ -493,11 +493,6 @@ msgstr "" msgid "%s: Can't reset all users to non-zero\n" msgstr "%s: 모든 사용자를 영이 아닌 값으로 설정할 수 없음\n" -#: modules/pam_tally2/pam_tally2.c:520 -#, c-format -msgid "Account locked due to %hu failed logins" -msgstr "" - #: modules/pam_tally2/pam_tally2.c:865 #, c-format msgid "Login Failures Latest failure From\n" @@ -512,6 +507,11 @@ msgid "" msgstr "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" +#: modules/pam_timestamp/pam_timestamp.c:339 +#, c-format +msgid "Access granted (last access was %ld seconds ago)." +msgstr "" + #: modules/pam_unix/pam_unix_acct.c:228 modules/pam_unix/pam_unix_acct.c:250 msgid "Your account has expired; please contact your system administrator" msgstr "계정이 만료되었습니다: 시스템 관리자에게 알려 주십시오" diff --git a/po/ml.po b/po/ml.po index f0daba80..2370671d 100644 --- a/po/ml.po +++ b/po/ml.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Linux-PAM.tip.ml\n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n" -"POT-Creation-Date: 2008-10-22 20:01+0200\n" +"POT-Creation-Date: 2008-11-28 15:16+0100\n" "PO-Revision-Date: 2008-10-20 12:50+0530\n" "Last-Translator: \n" "Language-Team: \n" @@ -167,19 +167,19 @@ msgid "Unknown PAM error" msgstr "അപരിചിതമായ PAM പിശക്" #: modules/pam_cracklib/pam_cracklib.c:64 -#: modules/pam_pwhistory/pam_pwhistory.c:61 +#: modules/pam_pwhistory/pam_pwhistory.c:62 #, c-format msgid "New %s%spassword: " msgstr "പുതിയ %s%s പാസ്‌വേറ്‍ഡ്: " #: modules/pam_cracklib/pam_cracklib.c:66 -#: modules/pam_pwhistory/pam_pwhistory.c:62 +#: modules/pam_pwhistory/pam_pwhistory.c:64 #, c-format msgid "Retype new %s%spassword: " msgstr "വീണ്ടും %s%s പാസ്‌വേറ്‍ഡ് ടൈപ്പ് ചെയ്യുക: " #: modules/pam_cracklib/pam_cracklib.c:67 -#: modules/pam_pwhistory/pam_pwhistory.c:63 +#: modules/pam_pwhistory/pam_pwhistory.c:65 msgid "Sorry, passwords do not match." msgstr "ക്ഷമിക്കണം, പാസ്‌വേറ്‍ഡുകള്‍ തമ്മില്‍ ചേരുന്നില്ല." @@ -230,7 +230,7 @@ msgid "Password unchanged" msgstr "പാസ്‌വേറ്‍ഡ് മാറ്റിയിട്ടില്ല" #: modules/pam_cracklib/pam_cracklib.c:584 -#: modules/pam_cracklib/pam_cracklib.c:709 +#: modules/pam_cracklib/pam_cracklib.c:710 #, c-format msgid "BAD PASSWORD: %s" msgstr "BAD PASSWORD: %s" @@ -353,13 +353,13 @@ 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 +#: modules/pam_pwhistory/pam_pwhistory.c:231 +#: modules/pam_pwhistory/pam_pwhistory.c:267 msgid "Password change aborted." msgstr "അടയാളവാക്ക് മാറ്റം വരുത്തുന്നതു് നിര്‍ത്തിയിരിക്കുന്നു." -#: modules/pam_pwhistory/pam_pwhistory.c:235 -#: modules/pam_pwhistory/pam_pwhistory.c:295 +#: modules/pam_pwhistory/pam_pwhistory.c:242 +#: modules/pam_pwhistory/pam_pwhistory.c:304 #: modules/pam_unix/pam_unix_passwd.c:470 msgid "Password has been already used. Choose another." msgstr "പാസ്‌വേറ്‍ഡ് നിലവില്‍ ഉപയോഗിത്തിലുള്ളതാണ്. മറ്റൊന്ന് നല്‍കുക." @@ -424,20 +424,20 @@ msgstr "pam_set_item() ചെയ്യുന്നതില്‍ പരാജ msgid "login: failure forking: %m" msgstr "login: ഫോറ്‍ക്ക് ചെയ്യുന്നതില്‍ പരാജയം: %m" -#: modules/pam_stress/pam_stress.c:476 +#: modules/pam_stress/pam_stress.c:475 #, c-format msgid "Changing STRESS password for %s." msgstr "%s-നുളള STRESS അടയാളവാക്ക് മാറ്റുന്നു." -#: modules/pam_stress/pam_stress.c:490 +#: modules/pam_stress/pam_stress.c:489 msgid "Enter new STRESS password: " msgstr "പുതിയ STRESS പാസ്‌വേറ്‍ഡ് നല്‍കുക: " -#: modules/pam_stress/pam_stress.c:493 +#: modules/pam_stress/pam_stress.c:492 msgid "Retype new STRESS password: " msgstr "പുതിയ STRESS പാസ്‌വേറ്‍ഡ് വീണ്ടും ടൈപ്പ് ചെയ്യുക: " -#: modules/pam_stress/pam_stress.c:522 +#: modules/pam_stress/pam_stress.c:521 msgid "Verification mis-typed; password unchanged" msgstr "പാസ്‌വേറ്‍ഡ് ഉറപ്പാക്കുന്നതിനായി ടൈപ്പ് ചെയ്തത് തെറ്റാണ്; പാസ്‌വേറ്‍ഡ് മാറ്റിയിട്ടില്ല" @@ -446,7 +446,7 @@ msgstr "പാസ്‌വേറ്‍ഡ് ഉറപ്പാക്കുന msgid "Account temporary locked (%ld seconds left)" msgstr "അക്കൌണ്ട് താല്‍ക്കാലികമായി പൂട്ടിയിരിക്കുന്നു (%ld നിമിഷങ്ങള്‍ ബാക്കി)" -#: modules/pam_tally/pam_tally.c:566 +#: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:520 #, c-format msgid "Account locked due to %u failed logins" msgstr "%u പരാജയപ്പെട്ട ലോഗിനുകള്‍ കാരണം അക്കൌണ്ട് താല്‍ക്കാലികമായി പൂട്ടിയിരിക്കുന്നു" @@ -489,11 +489,6 @@ msgstr "" msgid "%s: Can't reset all users to non-zero\n" msgstr "%s: എല്ലാ യൂസറുകളും പൂജ്യം അല്ലാതെ ക്റമികരിക്കുവാന്‍ സാധ്യമല്ല\n" -#: modules/pam_tally2/pam_tally2.c:520 -#, fuzzy, c-format -msgid "Account locked due to %hu failed logins" -msgstr "%u പരാജയപ്പെട്ട ലോഗിനുകള്‍ കാരണം അക്കൌണ്ട് താല്‍ക്കാലികമായി പൂട്ടിയിരിക്കുന്നു" - #: modules/pam_tally2/pam_tally2.c:865 #, c-format msgid "Login Failures Latest failure From\n" @@ -508,6 +503,11 @@ msgid "" msgstr "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" +#: modules/pam_timestamp/pam_timestamp.c:339 +#, c-format +msgid "Access granted (last access was %ld seconds ago)." +msgstr "" + #: modules/pam_unix/pam_unix_acct.c:228 modules/pam_unix/pam_unix_acct.c:250 msgid "Your account has expired; please contact your system administrator" msgstr "" @@ -563,3 +563,7 @@ msgstr "പുതിയ UNIX പാസ്‌വേറ്‍ഡ് നല്‍ #: modules/pam_unix/pam_unix_passwd.c:678 msgid "Retype new UNIX password: " msgstr "പുതിയ UNIX പാസ്‌വേറ്‍ഡ് വീണ്ടും ടൈപ്പ് ചെയ്യുക: " + +#, fuzzy +#~ msgid "Account locked due to %hu failed logins" +#~ msgstr "%u പരാജയപ്പെട്ട ലോഗിനുകള്‍ കാരണം അക്കൌണ്ട് താല്‍ക്കാലികമായി പൂട്ടിയിരിക്കുന്നു" diff --git a/po/mr.po b/po/mr.po index 1299782c..5b716436 100644 --- a/po/mr.po +++ b/po/mr.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Linux-PAM.tip\n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n" -"POT-Creation-Date: 2008-10-22 20:01+0200\n" +"POT-Creation-Date: 2008-11-28 15:16+0100\n" "PO-Revision-Date: 2008-10-10 07:07+0530\n" "Last-Translator: Sandeep Shedmake \n" "Language-Team: marathi\n" @@ -167,19 +167,19 @@ msgid "Unknown PAM error" msgstr "अपरिचीत PAM त्रुटी" #: modules/pam_cracklib/pam_cracklib.c:64 -#: modules/pam_pwhistory/pam_pwhistory.c:61 +#: modules/pam_pwhistory/pam_pwhistory.c:62 #, c-format msgid "New %s%spassword: " msgstr "नविन गुप्तशब्द %s%sp: " #: modules/pam_cracklib/pam_cracklib.c:66 -#: modules/pam_pwhistory/pam_pwhistory.c:62 +#: modules/pam_pwhistory/pam_pwhistory.c:64 #, c-format msgid "Retype new %s%spassword: " msgstr "नविन गुप्तशब्द %s%sp पुन्हा टाइप करा: " #: modules/pam_cracklib/pam_cracklib.c:67 -#: modules/pam_pwhistory/pam_pwhistory.c:63 +#: modules/pam_pwhistory/pam_pwhistory.c:65 msgid "Sorry, passwords do not match." msgstr "माफ करा, गुप्तशब्द जुळत नाही." @@ -230,7 +230,7 @@ msgid "Password unchanged" msgstr "गुप्तशब्द बदलविला नाही" #: modules/pam_cracklib/pam_cracklib.c:584 -#: modules/pam_cracklib/pam_cracklib.c:709 +#: modules/pam_cracklib/pam_cracklib.c:710 #, c-format msgid "BAD PASSWORD: %s" msgstr "अयोग्य गुप्तशब्द: %s" @@ -353,14 +353,14 @@ 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 +#: modules/pam_pwhistory/pam_pwhistory.c:231 +#: modules/pam_pwhistory/pam_pwhistory.c:267 #, fuzzy msgid "Password change aborted." msgstr "गुप्तशब्द बदलविला नाही" -#: modules/pam_pwhistory/pam_pwhistory.c:235 -#: modules/pam_pwhistory/pam_pwhistory.c:295 +#: modules/pam_pwhistory/pam_pwhistory.c:242 +#: modules/pam_pwhistory/pam_pwhistory.c:304 #: modules/pam_unix/pam_unix_passwd.c:470 msgid "Password has been already used. Choose another." msgstr "ह्या गुप्तशब्दचा आधीच वापर झाला आहे. दुसरा निवडा." @@ -425,20 +425,20 @@ msgstr "pam_set_item() कार्यान्वीत करण्यास msgid "login: failure forking: %m" msgstr "दाखलन: विभाजन अपयशी: %m" -#: modules/pam_stress/pam_stress.c:476 +#: modules/pam_stress/pam_stress.c:475 #, c-format msgid "Changing STRESS password for %s." msgstr "%s करीता STRESS गुप्तशब्द बदलवित आहे." -#: modules/pam_stress/pam_stress.c:490 +#: modules/pam_stress/pam_stress.c:489 msgid "Enter new STRESS password: " msgstr "नविन STRESS गुप्तशब्द प्रविष्ट करा: " -#: modules/pam_stress/pam_stress.c:493 +#: modules/pam_stress/pam_stress.c:492 msgid "Retype new STRESS password: " msgstr "नविन STRESS गुप्तशब्द पुन्हा प्रविष्ट करा: " -#: modules/pam_stress/pam_stress.c:522 +#: modules/pam_stress/pam_stress.c:521 msgid "Verification mis-typed; password unchanged" msgstr "तपासणी पूर्ण झाली नाही; गुप्तशब्द बदलविले नाही" @@ -447,7 +447,7 @@ msgstr "तपासणी पूर्ण झाली नाही; गुप msgid "Account temporary locked (%ld seconds left)" msgstr "" -#: modules/pam_tally/pam_tally.c:566 +#: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:520 #, c-format msgid "Account locked due to %u failed logins" msgstr "" @@ -490,11 +490,6 @@ msgstr "" msgid "%s: Can't reset all users to non-zero\n" msgstr "%s: सर्व वापरकर्ता विना-शून्य असे पुन्हस्थापन करू शकत नाही\n" -#: modules/pam_tally2/pam_tally2.c:520 -#, c-format -msgid "Account locked due to %hu failed logins" -msgstr "" - #: modules/pam_tally2/pam_tally2.c:865 #, c-format msgid "Login Failures Latest failure From\n" @@ -509,6 +504,11 @@ msgid "" msgstr "" "%s: [--file रूटेड-फाइलनाव] [--user वापरकर्त्याचे नाव] [--reset[=n]] [--quiet]\n" +#: modules/pam_timestamp/pam_timestamp.c:339 +#, c-format +msgid "Access granted (last access was %ld seconds ago)." +msgstr "" + #: modules/pam_unix/pam_unix_acct.c:228 modules/pam_unix/pam_unix_acct.c:250 msgid "Your account has expired; please contact your system administrator" msgstr "तुमचे खाते बंद झाले आहे, कृपया तुमच्या संगणक व्यवस्थापकाकडे जा" diff --git a/po/ms.po b/po/ms.po index e5df671a..300697c4 100644 --- a/po/ms.po +++ b/po/ms.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-10-22 20:01+0200\n" +"POT-Creation-Date: 2008-11-28 15:16+0100\n" "PO-Revision-Date: 2008-09-25 23:52+0800\n" "Last-Translator: Sharuzzaman Ahmat Raslan \n" "Language-Team: Malay \n" @@ -182,19 +182,19 @@ msgid "Unknown PAM error" msgstr "Ralat sistem tidak diketahui" #: modules/pam_cracklib/pam_cracklib.c:64 -#: modules/pam_pwhistory/pam_pwhistory.c:61 +#: modules/pam_pwhistory/pam_pwhistory.c:62 #, fuzzy, c-format msgid "New %s%spassword: " msgstr "&Tetingkap Baru" #: modules/pam_cracklib/pam_cracklib.c:66 -#: modules/pam_pwhistory/pam_pwhistory.c:62 +#: modules/pam_pwhistory/pam_pwhistory.c:64 #, fuzzy, c-format msgid "Retype new %s%spassword: " msgstr "Baru me&nggunakan Template" #: modules/pam_cracklib/pam_cracklib.c:67 -#: modules/pam_pwhistory/pam_pwhistory.c:63 +#: modules/pam_pwhistory/pam_pwhistory.c:65 #, fuzzy msgid "Sorry, passwords do not match." msgstr "Sijil dan kekunci diberi tidak sepadan." @@ -254,7 +254,7 @@ msgid "Password unchanged" msgstr "Biarkan tanpa diubah" #: modules/pam_cracklib/pam_cracklib.c:584 -#: modules/pam_cracklib/pam_cracklib.c:709 +#: modules/pam_cracklib/pam_cracklib.c:710 #, fuzzy, c-format msgid "BAD PASSWORD: %s" msgstr "Katalaluan Tidak Betul" @@ -382,14 +382,14 @@ msgstr "Menbuat direktori initrd" msgid "Unable to create directory %s: %m" msgstr "gagal untuk mencipta direktori %s: %s\n" -#: modules/pam_pwhistory/pam_pwhistory.c:224 -#: modules/pam_pwhistory/pam_pwhistory.c:258 +#: modules/pam_pwhistory/pam_pwhistory.c:231 +#: modules/pam_pwhistory/pam_pwhistory.c:267 #, fuzzy msgid "Password change aborted." msgstr "Biarkan tanpa diubah" -#: modules/pam_pwhistory/pam_pwhistory.c:235 -#: modules/pam_pwhistory/pam_pwhistory.c:295 +#: modules/pam_pwhistory/pam_pwhistory.c:242 +#: modules/pam_pwhistory/pam_pwhistory.c:304 #: modules/pam_unix/pam_unix_passwd.c:470 msgid "Password has been already used. Choose another." msgstr "" @@ -458,21 +458,21 @@ msgstr "" msgid "login: failure forking: %m" msgstr "Ben_arkan logmasuk luartalian" -#: modules/pam_stress/pam_stress.c:476 +#: modules/pam_stress/pam_stress.c:475 #, fuzzy, c-format msgid "Changing STRESS password for %s." msgstr "Greek 'astator' untuk 'menukar'" -#: modules/pam_stress/pam_stress.c:490 +#: modules/pam_stress/pam_stress.c:489 #, fuzzy msgid "Enter new STRESS password: " msgstr "Masukkkan Katalaluan Pemuat But" -#: modules/pam_stress/pam_stress.c:493 +#: modules/pam_stress/pam_stress.c:492 msgid "Retype new STRESS password: " msgstr "" -#: modules/pam_stress/pam_stress.c:522 +#: modules/pam_stress/pam_stress.c:521 msgid "Verification mis-typed; password unchanged" msgstr "" @@ -481,7 +481,7 @@ msgstr "" msgid "Account temporary locked (%ld seconds left)" msgstr "" -#: modules/pam_tally/pam_tally.c:566 +#: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:520 #, c-format msgid "Account locked due to %u failed logins" msgstr "" @@ -527,11 +527,6 @@ msgstr "" msgid "%s: Can't reset all users to non-zero\n" msgstr "" -#: modules/pam_tally2/pam_tally2.c:520 -#, c-format -msgid "Account locked due to %hu failed logins" -msgstr "" - #: modules/pam_tally2/pam_tally2.c:865 #, c-format msgid "Login Failures Latest failure From\n" @@ -545,6 +540,11 @@ msgid "" " [-r] [--reset[=n]] [--quiet]\n" msgstr "" +#: modules/pam_timestamp/pam_timestamp.c:339 +#, c-format +msgid "Access granted (last access was %ld seconds ago)." +msgstr "" + #: modules/pam_unix/pam_unix_acct.c:228 modules/pam_unix/pam_unix_acct.c:250 msgid "Your account has expired; please contact your system administrator" msgstr "" diff --git a/po/nb.po b/po/nb.po index 06f041b3..cddf89ff 100644 --- 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-10-22 20:01+0200\n" +"POT-Creation-Date: 2008-11-28 15:16+0100\n" "PO-Revision-Date: 2008-04-30 12:59+0200\n" "Last-Translator: Olav Pettershagen \n" "Language-Team: \n" @@ -166,19 +166,19 @@ msgid "Unknown PAM error" msgstr "Ukjent PAM-feil" #: modules/pam_cracklib/pam_cracklib.c:64 -#: modules/pam_pwhistory/pam_pwhistory.c:61 +#: modules/pam_pwhistory/pam_pwhistory.c:62 #, c-format msgid "New %s%spassword: " msgstr "Nytt %s%spassord: " #: modules/pam_cracklib/pam_cracklib.c:66 -#: modules/pam_pwhistory/pam_pwhistory.c:62 +#: modules/pam_pwhistory/pam_pwhistory.c:64 #, 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 +#: modules/pam_pwhistory/pam_pwhistory.c:65 msgid "Sorry, passwords do not match." msgstr "Beklager, ikke samsvar mellom passord." @@ -229,7 +229,7 @@ msgid "Password unchanged" msgstr "Passord uendret" #: modules/pam_cracklib/pam_cracklib.c:584 -#: modules/pam_cracklib/pam_cracklib.c:709 +#: modules/pam_cracklib/pam_cracklib.c:710 #, c-format msgid "BAD PASSWORD: %s" msgstr "SVAKT PASSORD: %s" @@ -352,14 +352,14 @@ 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 +#: modules/pam_pwhistory/pam_pwhistory.c:231 +#: modules/pam_pwhistory/pam_pwhistory.c:267 #, fuzzy msgid "Password change aborted." msgstr "Passord uendret" -#: modules/pam_pwhistory/pam_pwhistory.c:235 -#: modules/pam_pwhistory/pam_pwhistory.c:295 +#: modules/pam_pwhistory/pam_pwhistory.c:242 +#: modules/pam_pwhistory/pam_pwhistory.c:304 #: modules/pam_unix/pam_unix_passwd.c:470 msgid "Password has been already used. Choose another." msgstr "Passordet er allerede benyttet. Velg et annet." @@ -424,20 +424,20 @@ msgstr "kunne ikke pam_set_item()\n" msgid "login: failure forking: %m" msgstr "login: feil under forgrening: %m" -#: modules/pam_stress/pam_stress.c:476 +#: modules/pam_stress/pam_stress.c:475 #, c-format msgid "Changing STRESS password for %s." msgstr "Endrer STRESS-passord for %s." -#: modules/pam_stress/pam_stress.c:490 +#: modules/pam_stress/pam_stress.c:489 msgid "Enter new STRESS password: " msgstr "Angi nytt STRESS-passord: " -#: modules/pam_stress/pam_stress.c:493 +#: modules/pam_stress/pam_stress.c:492 msgid "Retype new STRESS password: " msgstr "Bekreft nytt STRESS-passord: " -#: modules/pam_stress/pam_stress.c:522 +#: modules/pam_stress/pam_stress.c:521 msgid "Verification mis-typed; password unchanged" msgstr "Bekreftelse feil skrevet; passord uendret" @@ -446,7 +446,7 @@ msgstr "Bekreftelse feil skrevet; passord uendret" msgid "Account temporary locked (%ld seconds left)" msgstr "" -#: modules/pam_tally/pam_tally.c:566 +#: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:520 #, c-format msgid "Account locked due to %u failed logins" msgstr "" @@ -489,11 +489,6 @@ msgstr "" msgid "%s: Can't reset all users to non-zero\n" msgstr "%s: Kan ikke tilbakestille alle brukere til non-zero\n" -#: modules/pam_tally2/pam_tally2.c:520 -#, c-format -msgid "Account locked due to %hu failed logins" -msgstr "" - #: modules/pam_tally2/pam_tally2.c:865 #, c-format msgid "Login Failures Latest failure From\n" @@ -508,6 +503,11 @@ msgid "" msgstr "" "%s: [--file rooted-filnavn] [--user brukernavn] [--reset[=n]] [--quiet]\n" +#: modules/pam_timestamp/pam_timestamp.c:339 +#, c-format +msgid "Access granted (last access was %ld seconds ago)." +msgstr "" + #: modules/pam_unix/pam_unix_acct.c:228 modules/pam_unix/pam_unix_acct.c:250 msgid "Your account has expired; please contact your system administrator" msgstr "Din konto er utløpt; kontakt systemadministratoren" diff --git a/po/nl.po b/po/nl.po index c04ee38a..1a3e71c7 100644 --- 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-10-22 20:01+0200\n" +"POT-Creation-Date: 2008-11-28 15:16+0100\n" "PO-Revision-Date: 2008-10-20 23:45+0200\n" "Last-Translator: Peter van Egdom \n" "Language-Team: Dutch \n" @@ -168,19 +168,19 @@ msgid "Unknown PAM error" msgstr "Onbekende PAM-fout" #: modules/pam_cracklib/pam_cracklib.c:64 -#: modules/pam_pwhistory/pam_pwhistory.c:61 +#: modules/pam_pwhistory/pam_pwhistory.c:62 #, c-format msgid "New %s%spassword: " msgstr "Nieuw %s%swachtwoord: " #: modules/pam_cracklib/pam_cracklib.c:66 -#: modules/pam_pwhistory/pam_pwhistory.c:62 +#: modules/pam_pwhistory/pam_pwhistory.c:64 #, 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 +#: modules/pam_pwhistory/pam_pwhistory.c:65 msgid "Sorry, passwords do not match." msgstr "Sorry, wachtwoorden komen niet overeen." @@ -231,7 +231,7 @@ msgid "Password unchanged" msgstr "Wachtwoord is niet gewijzigd" #: modules/pam_cracklib/pam_cracklib.c:584 -#: modules/pam_cracklib/pam_cracklib.c:709 +#: modules/pam_cracklib/pam_cracklib.c:710 #, c-format msgid "BAD PASSWORD: %s" msgstr "SLECHT WACHTWOORD: %s" @@ -359,13 +359,13 @@ 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 +#: modules/pam_pwhistory/pam_pwhistory.c:231 +#: modules/pam_pwhistory/pam_pwhistory.c:267 msgid "Password change aborted." msgstr "Wachtwoord wijzigen afgebroken." -#: modules/pam_pwhistory/pam_pwhistory.c:235 -#: modules/pam_pwhistory/pam_pwhistory.c:295 +#: modules/pam_pwhistory/pam_pwhistory.c:242 +#: modules/pam_pwhistory/pam_pwhistory.c:304 #: 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." @@ -430,20 +430,20 @@ msgstr "pam_set_item() is mislukt\n" msgid "login: failure forking: %m" msgstr "login: beginnen van nieuw proces mislukt: %m" -#: modules/pam_stress/pam_stress.c:476 +#: modules/pam_stress/pam_stress.c:475 #, c-format msgid "Changing STRESS password for %s." msgstr "Veranderen van STRESS-wachtwoord voor %s." -#: modules/pam_stress/pam_stress.c:490 +#: modules/pam_stress/pam_stress.c:489 msgid "Enter new STRESS password: " msgstr "Nieuw STRESS-wachtwoord invoeren: " -#: modules/pam_stress/pam_stress.c:493 +#: modules/pam_stress/pam_stress.c:492 msgid "Retype new STRESS password: " msgstr "Nieuw STRESS-wachtwoord herhalen: " -#: modules/pam_stress/pam_stress.c:522 +#: modules/pam_stress/pam_stress.c:521 msgid "Verification mis-typed; password unchanged" msgstr "Verificatie onjuist getypt; wachtwoord blijft ongewijzigd" @@ -452,7 +452,7 @@ msgstr "Verificatie onjuist getypt; wachtwoord blijft ongewijzigd" msgid "Account temporary locked (%ld seconds left)" msgstr "Account tijdelijk vergrendeld (%ld seconden resterend)" -#: modules/pam_tally/pam_tally.c:566 +#: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:520 #, c-format msgid "Account locked due to %u failed logins" msgstr "Account vergrendeld wegens %u mislukte aanmeldingen" @@ -496,11 +496,6 @@ msgstr "" msgid "%s: Can't reset all users to non-zero\n" msgstr "%s: kan niet alle gebruikers terugzetten naar non-zero\n" -#: modules/pam_tally2/pam_tally2.c:520 -#, fuzzy, c-format -msgid "Account locked due to %hu failed logins" -msgstr "Account vergrendeld wegens %u mislukte aanmeldingen" - #: modules/pam_tally2/pam_tally2.c:865 #, c-format msgid "Login Failures Latest failure From\n" @@ -516,6 +511,11 @@ msgstr "" "%s [--file rooted-bestandsnaam] [--user gebruikersnaam] [--reset[=n]] [--" "quiet]\n" +#: modules/pam_timestamp/pam_timestamp.c:339 +#, c-format +msgid "Access granted (last access was %ld seconds ago)." +msgstr "" + #: modules/pam_unix/pam_unix_acct.c:228 modules/pam_unix/pam_unix_acct.c:250 msgid "Your account has expired; please contact your system administrator" msgstr "Uw account is verlopen; neem contact op met uw systeembeheerder" @@ -572,6 +572,10 @@ msgstr "Nieuw UNIX-wachtwoord invoeren: " msgid "Retype new UNIX password: " msgstr "Nieuw UNIX-wachtwoord herhalen: " +#, fuzzy +#~ msgid "Account locked due to %hu failed logins" +#~ msgstr "Account vergrendeld wegens %u mislukte aanmeldingen" + #~ msgid "has been already used" #~ msgstr "is al gebruikt" diff --git a/po/or.po b/po/or.po index 117e5375..f4db9a90 100644 --- 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-10-22 20:01+0200\n" +"POT-Creation-Date: 2008-11-28 15:16+0100\n" "PO-Revision-Date: 2008-09-30 11:42+0530\n" "Last-Translator: Manoj Kumar Giri \n" "Language-Team: Oriya\n" @@ -171,19 +171,19 @@ msgid "Unknown PAM error" msgstr "ଅଜଣା PAM ତୃଟି" #: modules/pam_cracklib/pam_cracklib.c:64 -#: modules/pam_pwhistory/pam_pwhistory.c:61 +#: modules/pam_pwhistory/pam_pwhistory.c:62 #, c-format msgid "New %s%spassword: " msgstr "ନୂତନ %s%s ପ୍ରବେଶ ସଙ୍କେତ: " #: modules/pam_cracklib/pam_cracklib.c:66 -#: modules/pam_pwhistory/pam_pwhistory.c:62 +#: modules/pam_pwhistory/pam_pwhistory.c:64 #, c-format msgid "Retype new %s%spassword: " msgstr "ନୂତନ %s%s ପ୍ରବେଶ ସଙ୍କେତକୁ ପୁନର୍ବାର ଟାଇପ କରନ୍ତୁ: " #: modules/pam_cracklib/pam_cracklib.c:67 -#: modules/pam_pwhistory/pam_pwhistory.c:63 +#: modules/pam_pwhistory/pam_pwhistory.c:65 msgid "Sorry, passwords do not match." msgstr "କ୍ଷମା କରିବେ, ପ୍ରବେଶ ସଙ୍କେତ ମିଶୁ ନାହିଁ।" @@ -234,7 +234,7 @@ msgid "Password unchanged" msgstr "ପ୍ରବେଶ ସଙ୍କେତ ଅପରିବର୍ତ୍ତିତ ଅଛି" #: modules/pam_cracklib/pam_cracklib.c:584 -#: modules/pam_cracklib/pam_cracklib.c:709 +#: modules/pam_cracklib/pam_cracklib.c:710 #, c-format msgid "BAD PASSWORD: %s" msgstr "ଖରାପ ପ୍ରବେଶ ସଙ୍କେତ: %s" @@ -357,14 +357,14 @@ 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 +#: modules/pam_pwhistory/pam_pwhistory.c:231 +#: modules/pam_pwhistory/pam_pwhistory.c:267 #, fuzzy msgid "Password change aborted." msgstr "ପ୍ରବେଶ ସଙ୍କେତ ଅପରିବର୍ତ୍ତିତ ଅଛି" -#: modules/pam_pwhistory/pam_pwhistory.c:235 -#: modules/pam_pwhistory/pam_pwhistory.c:295 +#: modules/pam_pwhistory/pam_pwhistory.c:242 +#: modules/pam_pwhistory/pam_pwhistory.c:304 #: modules/pam_unix/pam_unix_passwd.c:470 msgid "Password has been already used. Choose another." msgstr "ପ୍ରବେଶ ସଙ୍କେତଟି ପୂର୍ବରୁ ବ୍ଯବହୃତ ହେଉଛି। ଅନ୍ଯ ଗୋଟିଏ ପ୍ରବେଶ ସଙ୍କେତ ଚୟନ କରନ୍ତୁ।" @@ -429,20 +429,20 @@ msgstr "pam_set_item() କରିବାରେ ବିଫଳ\n" msgid "login: failure forking: %m" msgstr "ଲଗଇନ: fork କରିବାରେ ବିଫଳ: %m" -#: modules/pam_stress/pam_stress.c:476 +#: modules/pam_stress/pam_stress.c:475 #, c-format msgid "Changing STRESS password for %s." msgstr "%s ପାଇଁ STRESS ପ୍ରବେଶ ସଙ୍କେତକୁ ବଦଳାଉଛି." -#: modules/pam_stress/pam_stress.c:490 +#: modules/pam_stress/pam_stress.c:489 msgid "Enter new STRESS password: " msgstr "ନୂତନ STRESS ପ୍ରବେଶ ସଙ୍କେତ ଭରଣ କରନ୍ତୁ: " -#: modules/pam_stress/pam_stress.c:493 +#: modules/pam_stress/pam_stress.c:492 msgid "Retype new STRESS password: " msgstr "ନୂତନ STRESS ପ୍ରବେଶ ସଙ୍କେତକୁ ପୁନର୍ବାର ଟାଇପ କରନ୍ତୁ: " -#: modules/pam_stress/pam_stress.c:522 +#: modules/pam_stress/pam_stress.c:521 msgid "Verification mis-typed; password unchanged" msgstr "ଯାଞ୍ଚକରଣ ସମୟରେ ଭୂଲ ଟାଇପ କରିଛନ୍ତି, ପ୍ରବେଶ ସଙ୍କେତଟି ବଦଳି ନାହିଁ" @@ -451,7 +451,7 @@ msgstr "ଯାଞ୍ଚକରଣ ସମୟରେ ଭୂଲ ଟାଇପ କର msgid "Account temporary locked (%ld seconds left)" msgstr "" -#: modules/pam_tally/pam_tally.c:566 +#: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:520 #, c-format msgid "Account locked due to %u failed logins" msgstr "" @@ -494,11 +494,6 @@ msgstr "" msgid "%s: Can't reset all users to non-zero\n" msgstr "%s: ସମସ୍ତ ଚାଳକ ମାନଙ୍କୁ ଶୂନ୍ଯ ବିହୀନ ଭାବରେ ପୁନର୍ବାର ବିନ୍ଯାସ କରିପାରିବ ନାହିଁ\n" -#: modules/pam_tally2/pam_tally2.c:520 -#, c-format -msgid "Account locked due to %hu failed logins" -msgstr "" - #: modules/pam_tally2/pam_tally2.c:865 #, c-format msgid "Login Failures Latest failure From\n" @@ -513,6 +508,11 @@ msgid "" msgstr "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" +#: modules/pam_timestamp/pam_timestamp.c:339 +#, c-format +msgid "Access granted (last access was %ld seconds ago)." +msgstr "" + #: modules/pam_unix/pam_unix_acct.c:228 modules/pam_unix/pam_unix_acct.c:250 msgid "Your account has expired; please contact your system administrator" msgstr "ଆପଣଙ୍କର ଖାତା ଅଚଳ ହୋଇଯାଇଛି; ଦୟାକରି ଆପଣଙ୍କ ତନ୍ତ୍ର ପ୍ରଶାସକଙ୍କ ସହିତ ଯୋଗାଯୋଗ କରନ୍ତୁ" diff --git a/po/pa.po b/po/pa.po index 61bbaa22..ddd22104 100644 --- 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-10-22 20:01+0200\n" +"POT-Creation-Date: 2008-11-28 15:16+0100\n" "PO-Revision-Date: 2005-08-06 08:34+0530\n" "Last-Translator: Amanpreet Singh Alam[ਆਲਮ] \n" "Language-Team: Panjabi \n" @@ -169,19 +169,19 @@ msgid "Unknown PAM error" msgstr "ਅਣਜਾਣ PAM ਗਲਤੀ" #: modules/pam_cracklib/pam_cracklib.c:64 -#: modules/pam_pwhistory/pam_pwhistory.c:61 +#: modules/pam_pwhistory/pam_pwhistory.c:62 #, fuzzy, c-format msgid "New %s%spassword: " msgstr "ਗੁਪਤ-ਕੋਡ ਨਾ-ਤਬਦੀਲ ਹੈ" #: modules/pam_cracklib/pam_cracklib.c:66 -#: modules/pam_pwhistory/pam_pwhistory.c:62 +#: modules/pam_pwhistory/pam_pwhistory.c:64 #, fuzzy, c-format msgid "Retype new %s%spassword: " msgstr "ਨਵਾਂ STRESS ਗੁਪਤ-ਕੋਡ ਮੁੜ-ਲਿਖੋ: " #: modules/pam_cracklib/pam_cracklib.c:67 -#: modules/pam_pwhistory/pam_pwhistory.c:63 +#: modules/pam_pwhistory/pam_pwhistory.c:65 #, fuzzy msgid "Sorry, passwords do not match." msgstr "NIS ਗੁਪਤ-ਕੋਡ ਤਬਦੀਲ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ ਹੈ।" @@ -233,7 +233,7 @@ msgid "Password unchanged" msgstr "ਗੁਪਤ-ਕੋਡ ਨਾ-ਤਬਦੀਲ ਹੈ" #: modules/pam_cracklib/pam_cracklib.c:584 -#: modules/pam_cracklib/pam_cracklib.c:709 +#: modules/pam_cracklib/pam_cracklib.c:710 #, c-format msgid "BAD PASSWORD: %s" msgstr "" @@ -357,14 +357,14 @@ msgstr "" msgid "Unable to create directory %s: %m" msgstr "" -#: modules/pam_pwhistory/pam_pwhistory.c:224 -#: modules/pam_pwhistory/pam_pwhistory.c:258 +#: modules/pam_pwhistory/pam_pwhistory.c:231 +#: modules/pam_pwhistory/pam_pwhistory.c:267 #, fuzzy msgid "Password change aborted." msgstr "ਗੁਪਤ-ਕੋਡ ਨਾ-ਤਬਦੀਲ ਹੈ" -#: modules/pam_pwhistory/pam_pwhistory.c:235 -#: modules/pam_pwhistory/pam_pwhistory.c:295 +#: modules/pam_pwhistory/pam_pwhistory.c:242 +#: modules/pam_pwhistory/pam_pwhistory.c:304 #: modules/pam_unix/pam_unix_passwd.c:470 msgid "Password has been already used. Choose another." msgstr "ਗੁਪਤ-ਕੋਡ ਪਹਿਲਾਂ ਵੀ ਵਰਤਿਆ ਗਿਆ ਹੈ। ਵੱਖਰਾ ਚੁਣੋ।" @@ -433,20 +433,20 @@ msgstr "pam_set_item() ਲਈ ਫੇਲ\n" msgid "login: failure forking: %m" msgstr "" -#: modules/pam_stress/pam_stress.c:476 +#: modules/pam_stress/pam_stress.c:475 #, fuzzy, c-format msgid "Changing STRESS password for %s." msgstr "ਨਵਾਂ STRESS ਗੁਪਤ-ਕੋਡ ਦਿਓ: " -#: modules/pam_stress/pam_stress.c:490 +#: modules/pam_stress/pam_stress.c:489 msgid "Enter new STRESS password: " msgstr "ਨਵਾਂ STRESS ਗੁਪਤ-ਕੋਡ ਦਿਓ: " -#: modules/pam_stress/pam_stress.c:493 +#: modules/pam_stress/pam_stress.c:492 msgid "Retype new STRESS password: " msgstr "ਨਵਾਂ STRESS ਗੁਪਤ-ਕੋਡ ਮੁੜ-ਲਿਖੋ: " -#: modules/pam_stress/pam_stress.c:522 +#: modules/pam_stress/pam_stress.c:521 msgid "Verification mis-typed; password unchanged" msgstr "" @@ -455,7 +455,7 @@ msgstr "" msgid "Account temporary locked (%ld seconds left)" msgstr "" -#: modules/pam_tally/pam_tally.c:566 +#: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:520 #, c-format msgid "Account locked due to %u failed logins" msgstr "" @@ -498,11 +498,6 @@ msgstr "" msgid "%s: Can't reset all users to non-zero\n" msgstr "" -#: modules/pam_tally2/pam_tally2.c:520 -#, c-format -msgid "Account locked due to %hu failed logins" -msgstr "" - #: modules/pam_tally2/pam_tally2.c:865 #, c-format msgid "Login Failures Latest failure From\n" @@ -517,6 +512,11 @@ msgid "" msgstr "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" +#: modules/pam_timestamp/pam_timestamp.c:339 +#, c-format +msgid "Access granted (last access was %ld seconds ago)." +msgstr "" + #: modules/pam_unix/pam_unix_acct.c:228 modules/pam_unix/pam_unix_acct.c:250 msgid "Your account has expired; please contact your system administrator" msgstr "" diff --git a/po/pl.po b/po/pl.po index 62c92a45..9ceda20b 100644 --- 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-10-22 20:01+0200\n" +"POT-Creation-Date: 2008-11-28 15:16+0100\n" "PO-Revision-Date: 2008-10-14 23:49+0200\n" "Last-Translator: Piotr Drąg \n" "Language-Team: Polish \n" @@ -168,19 +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 +#: modules/pam_pwhistory/pam_pwhistory.c:62 #, 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 +#: modules/pam_pwhistory/pam_pwhistory.c:64 #, 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 +#: modules/pam_pwhistory/pam_pwhistory.c:65 msgid "Sorry, passwords do not match." msgstr "Podane hasła nie są zgodne." @@ -231,7 +231,7 @@ msgid "Password unchanged" msgstr "Hasło nie zostało zmienione" #: modules/pam_cracklib/pam_cracklib.c:584 -#: modules/pam_cracklib/pam_cracklib.c:709 +#: modules/pam_cracklib/pam_cracklib.c:710 #, c-format msgid "BAD PASSWORD: %s" msgstr "BŁĘDNE HASŁO: %s" @@ -359,13 +359,13 @@ msgstr "Tworzenie katalogu \"%s\"." msgid "Unable to create directory %s: %m" msgstr "Nie można utworzyć katalogu %s: %m" -#: modules/pam_pwhistory/pam_pwhistory.c:224 -#: modules/pam_pwhistory/pam_pwhistory.c:258 +#: modules/pam_pwhistory/pam_pwhistory.c:231 +#: modules/pam_pwhistory/pam_pwhistory.c:267 msgid "Password change aborted." msgstr "Przerwano zmianę hasła." -#: modules/pam_pwhistory/pam_pwhistory.c:235 -#: modules/pam_pwhistory/pam_pwhistory.c:295 +#: modules/pam_pwhistory/pam_pwhistory.c:242 +#: modules/pam_pwhistory/pam_pwhistory.c:304 #: 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." @@ -430,20 +430,20 @@ msgstr "pam_set_item() nie powiodło się\n" msgid "login: failure forking: %m" msgstr "login: rozdzielenie nie powiodło się: %m" -#: modules/pam_stress/pam_stress.c:476 +#: modules/pam_stress/pam_stress.c:475 #, c-format msgid "Changing STRESS password for %s." msgstr "Zmienianie hasła STRESS dla %s." -#: modules/pam_stress/pam_stress.c:490 +#: modules/pam_stress/pam_stress.c:489 msgid "Enter new STRESS password: " msgstr "Podaj nowe hasło STRESS: " -#: modules/pam_stress/pam_stress.c:493 +#: modules/pam_stress/pam_stress.c:492 msgid "Retype new STRESS password: " msgstr "Ponownie podaj hasła STRESS: " -#: modules/pam_stress/pam_stress.c:522 +#: modules/pam_stress/pam_stress.c:521 msgid "Verification mis-typed; password unchanged" msgstr "Sprawdzenie nie powiodło się; hasło nie zostało zmienione" @@ -452,7 +452,7 @@ msgstr "Sprawdzenie nie powiodło się; hasło nie zostało zmienione" msgid "Account temporary locked (%ld seconds left)" msgstr "Konto zostało tymczasowo zablokowane (pozostało %ld sekund)" -#: modules/pam_tally/pam_tally.c:566 +#: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:520 #, c-format msgid "Account locked due to %u failed logins" msgstr "Konto zostało zablokowane z powodu %u nieudanych logowań" @@ -496,11 +496,6 @@ msgstr "" msgid "%s: Can't reset all users to non-zero\n" msgstr "%s: nie można przywrócić wszystkich użytkowników\n" -#: modules/pam_tally2/pam_tally2.c:520 -#, fuzzy, c-format -msgid "Account locked due to %hu failed logins" -msgstr "Konto zostało zablokowane z powodu %u nieudanych logowań" - #: modules/pam_tally2/pam_tally2.c:865 #, c-format msgid "Login Failures Latest failure From\n" @@ -516,6 +511,11 @@ msgstr "" "%s: [--file nazwa-pliku-root] [--user nazwa-użytkownika] [--reset[=n]] [--" "quiet]\n" +#: modules/pam_timestamp/pam_timestamp.c:339 +#, c-format +msgid "Access granted (last access was %ld seconds ago)." +msgstr "" + #: modules/pam_unix/pam_unix_acct.c:228 modules/pam_unix/pam_unix_acct.c:250 msgid "Your account has expired; please contact your system administrator" msgstr "Konto wygasło; skontaktuj się z administratorem systemu" @@ -570,3 +570,7 @@ msgstr "Podaj nowe hasło UNIX: " #: modules/pam_unix/pam_unix_passwd.c:678 msgid "Retype new UNIX password: " msgstr "Ponownie podaj hasło UNIX: " + +#, fuzzy +#~ msgid "Account locked due to %hu failed logins" +#~ msgstr "Konto zostało zablokowane z powodu %u nieudanych logowań" diff --git a/po/pt.po b/po/pt.po index acfeaf7f..303c6208 100644 --- 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-10-22 20:01+0200\n" +"POT-Creation-Date: 2008-11-28 15:16+0100\n" "PO-Revision-Date: 2006-05-03 21:54+0200\n" "Last-Translator: Antonio Cardoso Martins \n" "Language-Team: portuguese\n" @@ -167,19 +167,19 @@ msgid "Unknown PAM error" msgstr "Erro PAM desconhecido" #: modules/pam_cracklib/pam_cracklib.c:64 -#: modules/pam_pwhistory/pam_pwhistory.c:61 +#: modules/pam_pwhistory/pam_pwhistory.c:62 #, 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 +#: modules/pam_pwhistory/pam_pwhistory.c:64 #, 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 +#: modules/pam_pwhistory/pam_pwhistory.c:65 msgid "Sorry, passwords do not match." msgstr "Lamento, as palavras passe não coincidem." @@ -230,7 +230,7 @@ msgid "Password unchanged" msgstr "Palavra passe inalterada" #: modules/pam_cracklib/pam_cracklib.c:584 -#: modules/pam_cracklib/pam_cracklib.c:709 +#: modules/pam_cracklib/pam_cracklib.c:710 #, c-format msgid "BAD PASSWORD: %s" msgstr "MÁ PALAVRA PASSE: %s" @@ -353,14 +353,14 @@ msgstr "" msgid "Unable to create directory %s: %m" msgstr "" -#: modules/pam_pwhistory/pam_pwhistory.c:224 -#: modules/pam_pwhistory/pam_pwhistory.c:258 +#: modules/pam_pwhistory/pam_pwhistory.c:231 +#: modules/pam_pwhistory/pam_pwhistory.c:267 #, 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_pwhistory/pam_pwhistory.c:242 +#: modules/pam_pwhistory/pam_pwhistory.c:304 #: 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." @@ -429,20 +429,20 @@ msgstr "falha em pam_set_item()\n" msgid "login: failure forking: %m" msgstr "sessão: falha ao executar o forking: %m" -#: modules/pam_stress/pam_stress.c:476 +#: modules/pam_stress/pam_stress.c:475 #, fuzzy, c-format msgid "Changing STRESS password for %s." msgstr "A alterar a palavra passe de STRESS para " -#: modules/pam_stress/pam_stress.c:490 +#: modules/pam_stress/pam_stress.c:489 msgid "Enter new STRESS password: " msgstr "Digite a nova palavra passe de STRESS: " -#: modules/pam_stress/pam_stress.c:493 +#: modules/pam_stress/pam_stress.c:492 msgid "Retype new STRESS password: " msgstr "Digite novamente a nova palavra passe de STRESS: " -#: modules/pam_stress/pam_stress.c:522 +#: modules/pam_stress/pam_stress.c:521 msgid "Verification mis-typed; password unchanged" msgstr "A verificação não coincide; palavra passe inalterada" @@ -451,7 +451,7 @@ msgstr "A verificação não coincide; palavra passe inalterada" msgid "Account temporary locked (%ld seconds left)" msgstr "" -#: modules/pam_tally/pam_tally.c:566 +#: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:520 #, c-format msgid "Account locked due to %u failed logins" msgstr "" @@ -494,11 +494,6 @@ msgstr "" msgid "%s: Can't reset all users to non-zero\n" msgstr "%s: Não foi possível reiniciar todos os utilizadores para não zero\n" -#: modules/pam_tally2/pam_tally2.c:520 -#, c-format -msgid "Account locked due to %hu failed logins" -msgstr "" - #: modules/pam_tally2/pam_tally2.c:865 #, c-format msgid "Login Failures Latest failure From\n" @@ -513,6 +508,11 @@ msgid "" msgstr "" "%s: [--file ficheiro-raiz] [--user nome-utilizador] [--reset[=n]] [--quiet]\n" +#: modules/pam_timestamp/pam_timestamp.c:339 +#, c-format +msgid "Access granted (last access was %ld seconds ago)." +msgstr "" + #: modules/pam_unix/pam_unix_acct.c:228 modules/pam_unix/pam_unix_acct.c:250 msgid "Your account has expired; please contact your system administrator" msgstr "" diff --git a/po/pt_BR.po b/po/pt_BR.po index f34c072c..f235f646 100644 --- a/po/pt_BR.po +++ b/po/pt_BR.po @@ -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-10-22 20:01+0200\n" +"POT-Creation-Date: 2008-11-28 15:16+0100\n" "PO-Revision-Date: 2008-10-22 17:25-0300\n" "Last-Translator: Taylon \n" "Language-Team: Brazilian Portuguese \n" @@ -169,19 +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 +#: modules/pam_pwhistory/pam_pwhistory.c:62 #, c-format msgid "New %s%spassword: " msgstr "Nova %s%ssenha:" #: modules/pam_cracklib/pam_cracklib.c:66 -#: modules/pam_pwhistory/pam_pwhistory.c:62 +#: modules/pam_pwhistory/pam_pwhistory.c:64 #, 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 +#: modules/pam_pwhistory/pam_pwhistory.c:65 msgid "Sorry, passwords do not match." msgstr "As senhas não são iguais." @@ -232,7 +232,7 @@ msgid "Password unchanged" msgstr "Senha inalterada" #: modules/pam_cracklib/pam_cracklib.c:584 -#: modules/pam_cracklib/pam_cracklib.c:709 +#: modules/pam_cracklib/pam_cracklib.c:710 #, c-format msgid "BAD PASSWORD: %s" msgstr "SENHA INCORRETA: %s" @@ -355,13 +355,13 @@ 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 +#: modules/pam_pwhistory/pam_pwhistory.c:231 +#: modules/pam_pwhistory/pam_pwhistory.c:267 msgid "Password change aborted." msgstr "A alteração de senha foi abortada." -#: modules/pam_pwhistory/pam_pwhistory.c:235 -#: modules/pam_pwhistory/pam_pwhistory.c:295 +#: modules/pam_pwhistory/pam_pwhistory.c:242 +#: modules/pam_pwhistory/pam_pwhistory.c:304 #: modules/pam_unix/pam_unix_passwd.c:470 msgid "Password has been already used. Choose another." msgstr "A senha já foi usada. Escolha outra." @@ -426,20 +426,20 @@ msgstr "falha em pam_set_item()\n" msgid "login: failure forking: %m" msgstr "login: falha na bifurcação: %m" -#: modules/pam_stress/pam_stress.c:476 +#: modules/pam_stress/pam_stress.c:475 #, c-format msgid "Changing STRESS password for %s." msgstr "Mudando senha STRESS para %s." -#: modules/pam_stress/pam_stress.c:490 +#: modules/pam_stress/pam_stress.c:489 msgid "Enter new STRESS password: " msgstr "Digite a nova senha STRESS:" -#: modules/pam_stress/pam_stress.c:493 +#: modules/pam_stress/pam_stress.c:492 msgid "Retype new STRESS password: " msgstr "Digite novamente a nova senha STRESS:" -#: modules/pam_stress/pam_stress.c:522 +#: modules/pam_stress/pam_stress.c:521 msgid "Verification mis-typed; password unchanged" msgstr "Verificação digitada incorretamente; senha inalterada" @@ -448,7 +448,7 @@ msgstr "Verificação digitada incorretamente; senha inalterada" msgid "Account temporary locked (%ld seconds left)" msgstr "Conta temporariamente bloqueada (restam %ld segundos)" -#: modules/pam_tally/pam_tally.c:566 +#: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:520 #, c-format msgid "Account locked due to %u failed logins" msgstr "Conta bloqueada devido a %u falhas de login" @@ -491,11 +491,6 @@ msgstr "" msgid "%s: Can't reset all users to non-zero\n" msgstr "%s: Impossível redefinir todos os usuários para não-zero\n" -#: modules/pam_tally2/pam_tally2.c:520 -#, fuzzy, c-format -msgid "Account locked due to %hu failed logins" -msgstr "Conta bloqueada devido a %u falhas de login" - #: modules/pam_tally2/pam_tally2.c:865 #, c-format msgid "Login Failures Latest failure From\n" @@ -510,6 +505,11 @@ msgid "" msgstr "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" +#: modules/pam_timestamp/pam_timestamp.c:339 +#, c-format +msgid "Access granted (last access was %ld seconds ago)." +msgstr "" + #: modules/pam_unix/pam_unix_acct.c:228 modules/pam_unix/pam_unix_acct.c:250 msgid "Your account has expired; please contact your system administrator" msgstr "Sua conta expirou; entre em contato com o administrador do sistema" @@ -564,6 +564,10 @@ msgstr "Digite a nova senha UNIX:" msgid "Retype new UNIX password: " msgstr "Redigite a nova senha UNIX:" +#, fuzzy +#~ msgid "Account locked due to %hu failed logins" +#~ msgstr "Conta bloqueada devido a %u falhas de login" + #~ msgid "has been already used" #~ msgstr "já foi usada" diff --git a/po/ru.po b/po/ru.po index e2708a2b..0cc6d9dd 100644 --- 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-10-22 20:01+0200\n" +"POT-Creation-Date: 2008-11-28 15:16+0100\n" "PO-Revision-Date: 2008-02-23 20:11+0300\n" "Last-Translator: Andrew Martynov \n" "Language-Team: Russian \n" @@ -175,20 +175,20 @@ msgid "Unknown PAM error" msgstr "Неизвестная ошибка PAM" #: modules/pam_cracklib/pam_cracklib.c:64 -#: modules/pam_pwhistory/pam_pwhistory.c:61 +#: modules/pam_pwhistory/pam_pwhistory.c:62 #, 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 +#: modules/pam_pwhistory/pam_pwhistory.c:64 #, c-format msgid "Retype new %s%spassword: " msgstr "Повторите ввод нового пароля %s%s: " #: modules/pam_cracklib/pam_cracklib.c:67 -#: modules/pam_pwhistory/pam_pwhistory.c:63 +#: modules/pam_pwhistory/pam_pwhistory.c:65 msgid "Sorry, passwords do not match." msgstr "Извините, но пароли не совпадают." @@ -240,7 +240,7 @@ msgid "Password unchanged" msgstr "Пароль не изменен" #: modules/pam_cracklib/pam_cracklib.c:584 -#: modules/pam_cracklib/pam_cracklib.c:709 +#: modules/pam_cracklib/pam_cracklib.c:710 #, c-format msgid "BAD PASSWORD: %s" msgstr "НЕВЕРНЫЙ ПАРОЛЬ: %s" @@ -365,14 +365,14 @@ 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 +#: modules/pam_pwhistory/pam_pwhistory.c:231 +#: modules/pam_pwhistory/pam_pwhistory.c:267 #, fuzzy msgid "Password change aborted." msgstr "Пароль не изменен" -#: modules/pam_pwhistory/pam_pwhistory.c:235 -#: modules/pam_pwhistory/pam_pwhistory.c:295 +#: modules/pam_pwhistory/pam_pwhistory.c:242 +#: modules/pam_pwhistory/pam_pwhistory.c:304 #: modules/pam_unix/pam_unix_passwd.c:470 msgid "Password has been already used. Choose another." msgstr "Этот пароль уже был использован. Выберите другой." @@ -439,21 +439,21 @@ msgstr "не удалось выполнить pam_set_item()\n" msgid "login: failure forking: %m" msgstr "регистрация: сбой при создании нового процесса: %m" -#: modules/pam_stress/pam_stress.c:476 +#: modules/pam_stress/pam_stress.c:475 #, c-format msgid "Changing STRESS password for %s." msgstr "Смена пароля STRESS для %s." -#: modules/pam_stress/pam_stress.c:490 +#: modules/pam_stress/pam_stress.c:489 msgid "Enter new STRESS password: " msgstr "Введите новый пароль STRESS: " # Keep the newlines and spaces after ':'! -#: modules/pam_stress/pam_stress.c:493 +#: modules/pam_stress/pam_stress.c:492 msgid "Retype new STRESS password: " msgstr "Повторите ввод нового пароля STRESS: " -#: modules/pam_stress/pam_stress.c:522 +#: modules/pam_stress/pam_stress.c:521 msgid "Verification mis-typed; password unchanged" msgstr "Подтверждение введено неправильно; пароль не изменен" @@ -462,7 +462,7 @@ msgstr "Подтверждение введено неправильно; пар msgid "Account temporary locked (%ld seconds left)" msgstr "" -#: modules/pam_tally/pam_tally.c:566 +#: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:520 #, c-format msgid "Account locked due to %u failed logins" msgstr "" @@ -507,11 +507,6 @@ msgid "%s: Can't reset all users to non-zero\n" msgstr "" "%s: не удается выполнить сброс всех пользователей в ненулевое значение\n" -#: modules/pam_tally2/pam_tally2.c:520 -#, c-format -msgid "Account locked due to %hu failed logins" -msgstr "" - #: modules/pam_tally2/pam_tally2.c:865 #, c-format msgid "Login Failures Latest failure From\n" @@ -527,6 +522,11 @@ msgstr "" "%s: [--file имя_корневого_файла] [--user имя_пользователя] [--reset[=n]] [--" "quiet]\n" +#: modules/pam_timestamp/pam_timestamp.c:339 +#, c-format +msgid "Access granted (last access was %ld seconds ago)." +msgstr "" + #: modules/pam_unix/pam_unix_acct.c:228 modules/pam_unix/pam_unix_acct.c:250 msgid "Your account has expired; please contact your system administrator" msgstr "" diff --git a/po/si.po b/po/si.po index a8fa2d1f..ac57fe16 100644 --- 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-10-22 20:01+0200\n" +"POT-Creation-Date: 2008-11-28 15:16+0100\n" "PO-Revision-Date: 2007-06-22 12:24+0530\n" "Last-Translator: Danishka Navin \n" "Language-Team: Sinhala \n" @@ -167,19 +167,19 @@ msgid "Unknown PAM error" msgstr "නොදන්නා PAM දෝෂය" #: modules/pam_cracklib/pam_cracklib.c:64 -#: modules/pam_pwhistory/pam_pwhistory.c:61 +#: modules/pam_pwhistory/pam_pwhistory.c:62 #, c-format msgid "New %s%spassword: " msgstr "නව %s%sරහස්පදය: " #: modules/pam_cracklib/pam_cracklib.c:66 -#: modules/pam_pwhistory/pam_pwhistory.c:62 +#: modules/pam_pwhistory/pam_pwhistory.c:64 #, c-format msgid "Retype new %s%spassword: " msgstr "නව %s%sරහස්පදය නැවත ඇතුළත් කරන්න: " #: modules/pam_cracklib/pam_cracklib.c:67 -#: modules/pam_pwhistory/pam_pwhistory.c:63 +#: modules/pam_pwhistory/pam_pwhistory.c:65 msgid "Sorry, passwords do not match." msgstr "සමාවෙන්න, රහස්පද ගැලපෙන්නේ නැත." @@ -230,7 +230,7 @@ msgid "Password unchanged" msgstr "රහස්පදය වෙනස් නොවිනි" #: modules/pam_cracklib/pam_cracklib.c:584 -#: modules/pam_cracklib/pam_cracklib.c:709 +#: modules/pam_cracklib/pam_cracklib.c:710 #, c-format msgid "BAD PASSWORD: %s" msgstr "BAD PASSWORD: %s" @@ -353,14 +353,14 @@ msgstr "" msgid "Unable to create directory %s: %m" msgstr "" -#: modules/pam_pwhistory/pam_pwhistory.c:224 -#: modules/pam_pwhistory/pam_pwhistory.c:258 +#: modules/pam_pwhistory/pam_pwhistory.c:231 +#: modules/pam_pwhistory/pam_pwhistory.c:267 #, fuzzy msgid "Password change aborted." msgstr "රහස්පදය වෙනස් නොවිනි" -#: modules/pam_pwhistory/pam_pwhistory.c:235 -#: modules/pam_pwhistory/pam_pwhistory.c:295 +#: modules/pam_pwhistory/pam_pwhistory.c:242 +#: modules/pam_pwhistory/pam_pwhistory.c:304 #: modules/pam_unix/pam_unix_passwd.c:470 msgid "Password has been already used. Choose another." msgstr "රහස්පදය දැනටමත් භාවිතා වේ. වෙනත් එකක් තෝරාගන්න." @@ -429,20 +429,20 @@ msgstr "pam_set_item() අසමත් විය\n" msgid "login: failure forking: %m" msgstr "පිවිසුම: ෆොර්කින් බිදවැටීමක්: %m" -#: modules/pam_stress/pam_stress.c:476 +#: modules/pam_stress/pam_stress.c:475 #, fuzzy, c-format msgid "Changing STRESS password for %s." msgstr "STRESS රහස්පදය වෙනස් කරමින්" -#: modules/pam_stress/pam_stress.c:490 +#: modules/pam_stress/pam_stress.c:489 msgid "Enter new STRESS password: " msgstr "නව STRESS රහස්පදය ඇතුළත් කරන්න:" -#: modules/pam_stress/pam_stress.c:493 +#: modules/pam_stress/pam_stress.c:492 msgid "Retype new STRESS password: " msgstr "නව STRESS රහස්පදය නැවත ඇතුළත් කරන්න:" -#: modules/pam_stress/pam_stress.c:522 +#: modules/pam_stress/pam_stress.c:521 msgid "Verification mis-typed; password unchanged" msgstr "ස්ථිරකර ගැනීම සඳහා වැරදි ඇතුලත් කිරීමක්; රහස්පදය වෙනස් කළ නොහැක" @@ -451,7 +451,7 @@ msgstr "ස්ථිරකර ගැනීම සඳහා වැරදි ඇ msgid "Account temporary locked (%ld seconds left)" msgstr "" -#: modules/pam_tally/pam_tally.c:566 +#: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:520 #, c-format msgid "Account locked due to %u failed logins" msgstr "" @@ -494,11 +494,6 @@ msgstr "" msgid "%s: Can't reset all users to non-zero\n" msgstr "%s: ශුන්‍ය නොවන අගයට සියළුම පරිශීලකයින් නැවත සැකසිය නොහැක\n" -#: modules/pam_tally2/pam_tally2.c:520 -#, c-format -msgid "Account locked due to %hu failed logins" -msgstr "" - #: modules/pam_tally2/pam_tally2.c:865 #, c-format msgid "Login Failures Latest failure From\n" @@ -513,6 +508,11 @@ msgid "" msgstr "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" +#: modules/pam_timestamp/pam_timestamp.c:339 +#, c-format +msgid "Access granted (last access was %ld seconds ago)." +msgstr "" + #: modules/pam_unix/pam_unix_acct.c:228 modules/pam_unix/pam_unix_acct.c:250 msgid "Your account has expired; please contact your system administrator" msgstr "ඔබගේ ගිණුම කල්ඉකුත් වී ඇත; කරුණාකර ඔබගේ පද්ධති කළමණාකරු හමුවන්න" diff --git a/po/sk.po b/po/sk.po index 01e13953..7e7c7612 100644 --- a/po/sk.po +++ b/po/sk.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Linux-PAM\n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n" -"POT-Creation-Date: 2008-10-22 20:01+0200\n" +"POT-Creation-Date: 2008-11-28 15:16+0100\n" "PO-Revision-Date: 2008-10-21 09:13+0200\n" "Last-Translator: Ondrej Šulek \n" "Language-Team: Slovak \n" @@ -166,19 +166,19 @@ msgid "Unknown PAM error" msgstr "Neznáme chyba PAM" #: modules/pam_cracklib/pam_cracklib.c:64 -#: modules/pam_pwhistory/pam_pwhistory.c:61 +#: modules/pam_pwhistory/pam_pwhistory.c:62 #, c-format msgid "New %s%spassword: " msgstr "Nové %s%sheslo: " #: modules/pam_cracklib/pam_cracklib.c:66 -#: modules/pam_pwhistory/pam_pwhistory.c:62 +#: modules/pam_pwhistory/pam_pwhistory.c:64 #, 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 +#: modules/pam_pwhistory/pam_pwhistory.c:65 msgid "Sorry, passwords do not match." msgstr "Heslá sa nezhodujú." @@ -229,7 +229,7 @@ msgid "Password unchanged" msgstr "Heslo nebolo zmenené" #: modules/pam_cracklib/pam_cracklib.c:584 -#: modules/pam_cracklib/pam_cracklib.c:709 +#: modules/pam_cracklib/pam_cracklib.c:710 #, c-format msgid "BAD PASSWORD: %s" msgstr "NESPRÁVNE HESLO: %s" @@ -361,13 +361,13 @@ msgstr "Vytváranie priečinka '%s'." msgid "Unable to create directory %s: %m" msgstr "Nedá sa vytvoriť priečinok %s: %m" -#: modules/pam_pwhistory/pam_pwhistory.c:224 -#: modules/pam_pwhistory/pam_pwhistory.c:258 +#: modules/pam_pwhistory/pam_pwhistory.c:231 +#: modules/pam_pwhistory/pam_pwhistory.c:267 msgid "Password change aborted." msgstr "Zmena hesla prerušená." -#: modules/pam_pwhistory/pam_pwhistory.c:235 -#: modules/pam_pwhistory/pam_pwhistory.c:295 +#: modules/pam_pwhistory/pam_pwhistory.c:242 +#: modules/pam_pwhistory/pam_pwhistory.c:304 #: modules/pam_unix/pam_unix_passwd.c:470 msgid "Password has been already used. Choose another." msgstr "Heslo už bolo použité. Vyberte iné." @@ -432,20 +432,20 @@ msgstr "chyba pam_set_item()\n" msgid "login: failure forking: %m" msgstr "login: chyba forku: %m" -#: modules/pam_stress/pam_stress.c:476 +#: modules/pam_stress/pam_stress.c:475 #, c-format msgid "Changing STRESS password for %s." msgstr "Zmena STRESS hesla pre %s." -#: modules/pam_stress/pam_stress.c:490 +#: modules/pam_stress/pam_stress.c:489 msgid "Enter new STRESS password: " msgstr "Zadajte nové STRESS heslo: " -#: modules/pam_stress/pam_stress.c:493 +#: modules/pam_stress/pam_stress.c:492 msgid "Retype new STRESS password: " msgstr "Znovu zadajte nové STRESS heslo: " -#: modules/pam_stress/pam_stress.c:522 +#: modules/pam_stress/pam_stress.c:521 msgid "Verification mis-typed; password unchanged" msgstr "Chybné potvrdenie; heslo nezmenené" @@ -454,7 +454,7 @@ msgstr "Chybné potvrdenie; heslo nezmenené" msgid "Account temporary locked (%ld seconds left)" msgstr "Účet dočasne uzamknutý (zostáva %ld sekúnd)" -#: modules/pam_tally/pam_tally.c:566 +#: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:520 #, c-format msgid "Account locked due to %u failed logins" msgstr "Účet uzamknutý z dôvodu %u neúspešných prihlásení" @@ -498,11 +498,6 @@ msgstr "" msgid "%s: Can't reset all users to non-zero\n" msgstr "%s: Nedá sa resetovať všetkých používateľov nenulovo\n" -#: modules/pam_tally2/pam_tally2.c:520 -#, fuzzy, c-format -msgid "Account locked due to %hu failed logins" -msgstr "Účet uzamknutý z dôvodu %u neúspešných prihlásení" - #: modules/pam_tally2/pam_tally2.c:865 #, c-format msgid "Login Failures Latest failure From\n" @@ -518,6 +513,11 @@ msgstr "" "%s: [--file meno_suboru] [--user pouzivatelske_meno] [--reset[=n]] [--" "quiet]\n" +#: modules/pam_timestamp/pam_timestamp.c:339 +#, c-format +msgid "Access granted (last access was %ld seconds ago)." +msgstr "" + #: modules/pam_unix/pam_unix_acct.c:228 modules/pam_unix/pam_unix_acct.c:250 msgid "Your account has expired; please contact your system administrator" msgstr "" @@ -574,6 +574,10 @@ msgstr "Zadajte nové UNIX heslo: " msgid "Retype new UNIX password: " msgstr "Opakujte nové UNIX heslo: " +#, fuzzy +#~ msgid "Account locked due to %hu failed logins" +#~ msgstr "Účet uzamknutý z dôvodu %u neúspešných prihlásení" + #~ msgid "has been already used" #~ msgstr "už bolo použité" diff --git a/po/sr.po b/po/sr.po index 2696833a..10b664fb 100644 --- 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-10-22 20:01+0200\n" +"POT-Creation-Date: 2008-11-28 15:16+0100\n" "PO-Revision-Date: 2008-04-05 10:48+0100\n" "Last-Translator: Miloš Komarčević \n" "Language-Team: Serbian (sr) \n" @@ -171,19 +171,19 @@ msgid "Unknown PAM error" msgstr "Непозната PAM грешка" #: modules/pam_cracklib/pam_cracklib.c:64 -#: modules/pam_pwhistory/pam_pwhistory.c:61 +#: modules/pam_pwhistory/pam_pwhistory.c:62 #, c-format msgid "New %s%spassword: " msgstr "Нова %s%sлозинка: " #: modules/pam_cracklib/pam_cracklib.c:66 -#: modules/pam_pwhistory/pam_pwhistory.c:62 +#: modules/pam_pwhistory/pam_pwhistory.c:64 #, c-format msgid "Retype new %s%spassword: " msgstr "Поновите нову %s%sлозинку: " #: modules/pam_cracklib/pam_cracklib.c:67 -#: modules/pam_pwhistory/pam_pwhistory.c:63 +#: modules/pam_pwhistory/pam_pwhistory.c:65 msgid "Sorry, passwords do not match." msgstr "Извините, лозинке се не подударају." @@ -234,7 +234,7 @@ msgid "Password unchanged" msgstr "Лозинка непромењена" #: modules/pam_cracklib/pam_cracklib.c:584 -#: modules/pam_cracklib/pam_cracklib.c:709 +#: modules/pam_cracklib/pam_cracklib.c:710 #, c-format msgid "BAD PASSWORD: %s" msgstr "ЛОША ЛОЗИНКА: %s" @@ -358,14 +358,14 @@ 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 +#: modules/pam_pwhistory/pam_pwhistory.c:231 +#: modules/pam_pwhistory/pam_pwhistory.c:267 #, fuzzy msgid "Password change aborted." msgstr "Лозинка непромењена" -#: modules/pam_pwhistory/pam_pwhistory.c:235 -#: modules/pam_pwhistory/pam_pwhistory.c:295 +#: modules/pam_pwhistory/pam_pwhistory.c:242 +#: modules/pam_pwhistory/pam_pwhistory.c:304 #: modules/pam_unix/pam_unix_passwd.c:470 msgid "Password has been already used. Choose another." msgstr "Лозинка је већ у употреби. Изаберите другу." @@ -430,20 +430,20 @@ msgstr "неуспешно покретање функције pam_set_item()\n" msgid "login: failure forking: %m" msgstr "пријава: грешка при гранању: %m" -#: modules/pam_stress/pam_stress.c:476 +#: modules/pam_stress/pam_stress.c:475 #, c-format msgid "Changing STRESS password for %s." msgstr "Промена STRESS лозинке за %s." -#: modules/pam_stress/pam_stress.c:490 +#: modules/pam_stress/pam_stress.c:489 msgid "Enter new STRESS password: " msgstr "Унесите нову STRESS лозинку: " -#: modules/pam_stress/pam_stress.c:493 +#: modules/pam_stress/pam_stress.c:492 msgid "Retype new STRESS password: " msgstr "Поново унесите нову STRESS лозинку: " -#: modules/pam_stress/pam_stress.c:522 +#: modules/pam_stress/pam_stress.c:521 msgid "Verification mis-typed; password unchanged" msgstr "Провера неуспешна; лозинка непромењена" @@ -452,7 +452,7 @@ msgstr "Провера неуспешна; лозинка непромењена msgid "Account temporary locked (%ld seconds left)" msgstr "" -#: modules/pam_tally/pam_tally.c:566 +#: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:520 #, c-format msgid "Account locked due to %u failed logins" msgstr "" @@ -496,11 +496,6 @@ msgstr "" msgid "%s: Can't reset all users to non-zero\n" msgstr "%s: не могу да поништим све кориснике на не-нулту вредност\n" -#: modules/pam_tally2/pam_tally2.c:520 -#, c-format -msgid "Account locked due to %hu failed logins" -msgstr "" - #: modules/pam_tally2/pam_tally2.c:865 #, c-format msgid "Login Failures Latest failure From\n" @@ -516,6 +511,11 @@ msgstr "" "%s: [--file коренски-називдатотеке] [--user корисничкоиме] [--reset[=n]] [--" "quiet]\n" +#: modules/pam_timestamp/pam_timestamp.c:339 +#, c-format +msgid "Access granted (last access was %ld seconds ago)." +msgstr "" + #: modules/pam_unix/pam_unix_acct.c:228 modules/pam_unix/pam_unix_acct.c:250 msgid "Your account has expired; please contact your system administrator" msgstr "Ваш налог је истекао; молим контактирајте администратора система" diff --git a/po/sr@latin.po b/po/sr@latin.po index ff5743fe..117774fe 100644 --- a/po/sr@latin.po +++ b/po/sr@latin.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-10-22 20:01+0200\n" +"POT-Creation-Date: 2008-11-28 15:16+0100\n" "PO-Revision-Date: 2008-04-05 10:48+0100\n" "Last-Translator: Miloš Komarčević \n" "Language-Team: Serbian (sr) \n" @@ -171,19 +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 +#: modules/pam_pwhistory/pam_pwhistory.c:62 #, c-format msgid "New %s%spassword: " msgstr "Nova %s%slozinka: " #: modules/pam_cracklib/pam_cracklib.c:66 -#: modules/pam_pwhistory/pam_pwhistory.c:62 +#: modules/pam_pwhistory/pam_pwhistory.c:64 #, 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 +#: modules/pam_pwhistory/pam_pwhistory.c:65 msgid "Sorry, passwords do not match." msgstr "Izvinite, lozinke se ne podudaraju." @@ -234,7 +234,7 @@ msgid "Password unchanged" msgstr "Lozinka nepromenjena" #: modules/pam_cracklib/pam_cracklib.c:584 -#: modules/pam_cracklib/pam_cracklib.c:709 +#: modules/pam_cracklib/pam_cracklib.c:710 #, c-format msgid "BAD PASSWORD: %s" msgstr "LOŠA LOZINKA: %s" @@ -358,14 +358,14 @@ 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 +#: modules/pam_pwhistory/pam_pwhistory.c:231 +#: modules/pam_pwhistory/pam_pwhistory.c:267 #, fuzzy msgid "Password change aborted." msgstr "Lozinka nepromenjena" -#: modules/pam_pwhistory/pam_pwhistory.c:235 -#: modules/pam_pwhistory/pam_pwhistory.c:295 +#: modules/pam_pwhistory/pam_pwhistory.c:242 +#: modules/pam_pwhistory/pam_pwhistory.c:304 #: modules/pam_unix/pam_unix_passwd.c:470 msgid "Password has been already used. Choose another." msgstr "Lozinka je već u upotrebi. Izaberite drugu." @@ -430,20 +430,20 @@ msgstr "neuspešno pokretanje funkcije pam_set_item()\n" msgid "login: failure forking: %m" msgstr "prijava: greška pri grananju: %m" -#: modules/pam_stress/pam_stress.c:476 +#: modules/pam_stress/pam_stress.c:475 #, c-format msgid "Changing STRESS password for %s." msgstr "Promena STRESS lozinke za %s." -#: modules/pam_stress/pam_stress.c:490 +#: modules/pam_stress/pam_stress.c:489 msgid "Enter new STRESS password: " msgstr "Unesite novu STRESS lozinku: " -#: modules/pam_stress/pam_stress.c:493 +#: modules/pam_stress/pam_stress.c:492 msgid "Retype new STRESS password: " msgstr "Ponovo unesite novu STRESS lozinku: " -#: modules/pam_stress/pam_stress.c:522 +#: modules/pam_stress/pam_stress.c:521 msgid "Verification mis-typed; password unchanged" msgstr "Provera neuspešna; lozinka nepromenjena" @@ -452,7 +452,7 @@ msgstr "Provera neuspešna; lozinka nepromenjena" msgid "Account temporary locked (%ld seconds left)" msgstr "" -#: modules/pam_tally/pam_tally.c:566 +#: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:520 #, c-format msgid "Account locked due to %u failed logins" msgstr "" @@ -496,11 +496,6 @@ msgstr "" msgid "%s: Can't reset all users to non-zero\n" msgstr "%s: ne mogu da poništim sve korisnike na ne-nultu vrednost\n" -#: modules/pam_tally2/pam_tally2.c:520 -#, c-format -msgid "Account locked due to %hu failed logins" -msgstr "" - #: modules/pam_tally2/pam_tally2.c:865 #, c-format msgid "Login Failures Latest failure From\n" @@ -516,6 +511,11 @@ msgstr "" "%s: [--file korenski-nazivdatoteke] [--user korisničkoime] [--reset[=n]] [--" "quiet]\n" +#: modules/pam_timestamp/pam_timestamp.c:339 +#, c-format +msgid "Access granted (last access was %ld seconds ago)." +msgstr "" + #: modules/pam_unix/pam_unix_acct.c:228 modules/pam_unix/pam_unix_acct.c:250 msgid "Your account has expired; please contact your system administrator" msgstr "Vaš nalog je istekao; molim kontaktirajte administratora sistema" diff --git a/po/sv.po b/po/sv.po index f7b88bb7..be104909 100644 --- 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-10-22 20:01+0200\n" +"POT-Creation-Date: 2008-11-28 15:16+0100\n" "PO-Revision-Date: 2007-12-24 13:39+0100\n" "Last-Translator: Christer Andersson \n" "Language-Team: Swedish \n" @@ -166,19 +166,19 @@ msgid "Unknown PAM error" msgstr "Oknt PAM-fel" #: modules/pam_cracklib/pam_cracklib.c:64 -#: modules/pam_pwhistory/pam_pwhistory.c:61 +#: modules/pam_pwhistory/pam_pwhistory.c:62 #, c-format msgid "New %s%spassword: " msgstr "Nytt %s%slsenord: " #: modules/pam_cracklib/pam_cracklib.c:66 -#: modules/pam_pwhistory/pam_pwhistory.c:62 +#: modules/pam_pwhistory/pam_pwhistory.c:64 #, c-format msgid "Retype new %s%spassword: " msgstr "Ange nytt %s%slsenord igen: " #: modules/pam_cracklib/pam_cracklib.c:67 -#: modules/pam_pwhistory/pam_pwhistory.c:63 +#: modules/pam_pwhistory/pam_pwhistory.c:65 msgid "Sorry, passwords do not match." msgstr "Ledsen, lsenorden stmmer inte verens." @@ -229,7 +229,7 @@ msgid "Password unchanged" msgstr "Ofrndrat lsenord" #: modules/pam_cracklib/pam_cracklib.c:584 -#: modules/pam_cracklib/pam_cracklib.c:709 +#: modules/pam_cracklib/pam_cracklib.c:710 #, c-format msgid "BAD PASSWORD: %s" msgstr "DLIGT LSENORD: %s" @@ -352,14 +352,14 @@ 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 +#: modules/pam_pwhistory/pam_pwhistory.c:231 +#: modules/pam_pwhistory/pam_pwhistory.c:267 #, fuzzy msgid "Password change aborted." msgstr "Ofrndrat lsenord" -#: modules/pam_pwhistory/pam_pwhistory.c:235 -#: modules/pam_pwhistory/pam_pwhistory.c:295 +#: modules/pam_pwhistory/pam_pwhistory.c:242 +#: modules/pam_pwhistory/pam_pwhistory.c:304 #: modules/pam_unix/pam_unix_passwd.c:470 msgid "Password has been already used. Choose another." msgstr "Lsenordet har redan anvnds. Vlj ett annat." @@ -424,20 +424,20 @@ msgstr "pam_set_item() misslyckades\n" msgid "login: failure forking: %m" msgstr "inloggning: fel vid grening: %m" -#: modules/pam_stress/pam_stress.c:476 +#: modules/pam_stress/pam_stress.c:475 #, c-format msgid "Changing STRESS password for %s." msgstr "ndrar STRESS-lsenord fr %s." -#: modules/pam_stress/pam_stress.c:490 +#: modules/pam_stress/pam_stress.c:489 msgid "Enter new STRESS password: " msgstr "Ange nytt STRESS-lsenord: " -#: modules/pam_stress/pam_stress.c:493 +#: modules/pam_stress/pam_stress.c:492 msgid "Retype new STRESS password: " msgstr "Ange nytt STRESS-lsenord igen: " -#: modules/pam_stress/pam_stress.c:522 +#: modules/pam_stress/pam_stress.c:521 msgid "Verification mis-typed; password unchanged" msgstr "Felskriven verifikation, lsenord ofrndrat" @@ -446,7 +446,7 @@ msgstr "Felskriven verifikation, l msgid "Account temporary locked (%ld seconds left)" msgstr "" -#: modules/pam_tally/pam_tally.c:566 +#: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:520 #, c-format msgid "Account locked due to %u failed logins" msgstr "" @@ -489,11 +489,6 @@ msgstr "" msgid "%s: Can't reset all users to non-zero\n" msgstr "%s: Kan inte stlla om alla anvndare till nollskilt vrde\n" -#: modules/pam_tally2/pam_tally2.c:520 -#, c-format -msgid "Account locked due to %hu failed logins" -msgstr "" - #: modules/pam_tally2/pam_tally2.c:865 #, c-format msgid "Login Failures Latest failure From\n" @@ -508,6 +503,11 @@ msgid "" msgstr "" "%s: [--file absolut-filnamn] [--user anvndarnamn] [--reset[=n]] [--quiet]\n" +#: modules/pam_timestamp/pam_timestamp.c:339 +#, c-format +msgid "Access granted (last access was %ld seconds ago)." +msgstr "" + #: modules/pam_unix/pam_unix_acct.c:228 modules/pam_unix/pam_unix_acct.c:250 msgid "Your account has expired; please contact your system administrator" msgstr "Ditt konto har gtt ut. Kontakta din systemadministratr" diff --git a/po/ta.po b/po/ta.po index eec8d21c..7deb035d 100644 --- 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-10-22 20:01+0200\n" +"POT-Creation-Date: 2008-11-28 15:16+0100\n" "PO-Revision-Date: 2007-06-21 15:33+0530\n" "Last-Translator: I felix \n" "Language-Team: Tamil \n" @@ -169,19 +169,19 @@ msgid "Unknown PAM error" msgstr "தெரியாத PAM பிழை" #: modules/pam_cracklib/pam_cracklib.c:64 -#: modules/pam_pwhistory/pam_pwhistory.c:61 +#: modules/pam_pwhistory/pam_pwhistory.c:62 #, c-format msgid "New %s%spassword: " msgstr "புதிய %s%spassword: " #: modules/pam_cracklib/pam_cracklib.c:66 -#: modules/pam_pwhistory/pam_pwhistory.c:62 +#: modules/pam_pwhistory/pam_pwhistory.c:64 #, c-format msgid "Retype new %s%spassword: " msgstr "புதிய %s%spassword மீண்டும் உள்ளிடவும்: " #: modules/pam_cracklib/pam_cracklib.c:67 -#: modules/pam_pwhistory/pam_pwhistory.c:63 +#: modules/pam_pwhistory/pam_pwhistory.c:65 msgid "Sorry, passwords do not match." msgstr "கடவுச்சொல் பொருந்தவில்லை." @@ -232,7 +232,7 @@ msgid "Password unchanged" msgstr "கடவுச்சொல் மாற்றப்படவில்லை" #: modules/pam_cracklib/pam_cracklib.c:584 -#: modules/pam_cracklib/pam_cracklib.c:709 +#: modules/pam_cracklib/pam_cracklib.c:710 #, c-format msgid "BAD PASSWORD: %s" msgstr "தவறான கடவுச்சொல்: %s" @@ -355,14 +355,14 @@ msgstr "" msgid "Unable to create directory %s: %m" msgstr "" -#: modules/pam_pwhistory/pam_pwhistory.c:224 -#: modules/pam_pwhistory/pam_pwhistory.c:258 +#: modules/pam_pwhistory/pam_pwhistory.c:231 +#: modules/pam_pwhistory/pam_pwhistory.c:267 #, fuzzy msgid "Password change aborted." msgstr "கடவுச்சொல் மாற்றப்படவில்லை" -#: modules/pam_pwhistory/pam_pwhistory.c:235 -#: modules/pam_pwhistory/pam_pwhistory.c:295 +#: modules/pam_pwhistory/pam_pwhistory.c:242 +#: modules/pam_pwhistory/pam_pwhistory.c:304 #: modules/pam_unix/pam_unix_passwd.c:470 msgid "Password has been already used. Choose another." msgstr "கடவுச்சொல் ஏற்கனவே பயன்படுத்தப்பட்டது. வேறொன்றை பயன்படுத்தவும்." @@ -431,20 +431,20 @@ msgstr "pam_set_item() செயலிழக்கப்பட்டது\n" msgid "login: failure forking: %m" msgstr "login: failure forking: %m" -#: modules/pam_stress/pam_stress.c:476 +#: modules/pam_stress/pam_stress.c:475 #, fuzzy, c-format msgid "Changing STRESS password for %s." msgstr "STRESS கடவுச்சொல்லை மாற்றுகிறது" -#: modules/pam_stress/pam_stress.c:490 +#: modules/pam_stress/pam_stress.c:489 msgid "Enter new STRESS password: " msgstr "புதிய STRESS கடவுச்சொல்லை உள்ளிடவும்: " -#: modules/pam_stress/pam_stress.c:493 +#: modules/pam_stress/pam_stress.c:492 msgid "Retype new STRESS password: " msgstr "புதிய STRESS கடவுச்சொல்லை மீண்டும் உள்ளிடவும்: " -#: modules/pam_stress/pam_stress.c:522 +#: modules/pam_stress/pam_stress.c:521 msgid "Verification mis-typed; password unchanged" msgstr "உறுதிப்படுத்தல் முரண்பாடு; கடவுச்சொல் மாற்றப்படவில்லை" @@ -453,7 +453,7 @@ msgstr "உறுதிப்படுத்தல் முரண்பாட msgid "Account temporary locked (%ld seconds left)" msgstr "" -#: modules/pam_tally/pam_tally.c:566 +#: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:520 #, c-format msgid "Account locked due to %u failed logins" msgstr "" @@ -496,11 +496,6 @@ msgstr "" msgid "%s: Can't reset all users to non-zero\n" msgstr "%s: பூஜ்ஜியமில்லாததற்கு அனைத்து பயனர்களையும் மறு அமைக்க முடியவில்லை\n" -#: modules/pam_tally2/pam_tally2.c:520 -#, c-format -msgid "Account locked due to %hu failed logins" -msgstr "" - #: modules/pam_tally2/pam_tally2.c:865 #, c-format msgid "Login Failures Latest failure From\n" @@ -515,6 +510,11 @@ msgid "" msgstr "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" +#: modules/pam_timestamp/pam_timestamp.c:339 +#, c-format +msgid "Access granted (last access was %ld seconds ago)." +msgstr "" + #: modules/pam_unix/pam_unix_acct.c:228 modules/pam_unix/pam_unix_acct.c:250 msgid "Your account has expired; please contact your system administrator" msgstr "உங்கள் கணக்கு முடிவுற்றது, உங்கள் கணினி நிர்வாகியை அணுகவும்" diff --git a/po/te.po b/po/te.po index 1cfffc13..702a53fe 100644 --- a/po/te.po +++ b/po/te.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: te\n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n" -"POT-Creation-Date: 2008-10-22 20:01+0200\n" +"POT-Creation-Date: 2008-11-28 15:16+0100\n" "PO-Revision-Date: 2008-10-22 16:24+0530\n" "Last-Translator: Krishna Babu K \n" "Language-Team: Telugu \n" @@ -170,19 +170,19 @@ msgid "Unknown PAM error" msgstr "తెలియని PAM దోషము" #: modules/pam_cracklib/pam_cracklib.c:64 -#: modules/pam_pwhistory/pam_pwhistory.c:61 +#: modules/pam_pwhistory/pam_pwhistory.c:62 #, c-format msgid "New %s%spassword: " msgstr "కొత్త %s%sసంకేతపదము: " #: modules/pam_cracklib/pam_cracklib.c:66 -#: modules/pam_pwhistory/pam_pwhistory.c:62 +#: modules/pam_pwhistory/pam_pwhistory.c:64 #, c-format msgid "Retype new %s%spassword: " msgstr "కొత్త %s%sసంకేతపదమును మరలాటైపుచేయుము: " #: modules/pam_cracklib/pam_cracklib.c:67 -#: modules/pam_pwhistory/pam_pwhistory.c:63 +#: modules/pam_pwhistory/pam_pwhistory.c:65 msgid "Sorry, passwords do not match." msgstr "క్షమించాలి, సంకేతపదము సరిపోలలేదు." @@ -233,7 +233,7 @@ msgid "Password unchanged" msgstr "సంకేతపదము మార్చలేదు" #: modules/pam_cracklib/pam_cracklib.c:584 -#: modules/pam_cracklib/pam_cracklib.c:709 +#: modules/pam_cracklib/pam_cracklib.c:710 #, c-format msgid "BAD PASSWORD: %s" msgstr "చెడ్డ సంకేతపదము: %s" @@ -356,13 +356,13 @@ 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 +#: modules/pam_pwhistory/pam_pwhistory.c:231 +#: modules/pam_pwhistory/pam_pwhistory.c:267 msgid "Password change aborted." msgstr "సంకేతపదము మార్పు తప్పించబడింది" -#: modules/pam_pwhistory/pam_pwhistory.c:235 -#: modules/pam_pwhistory/pam_pwhistory.c:295 +#: modules/pam_pwhistory/pam_pwhistory.c:242 +#: modules/pam_pwhistory/pam_pwhistory.c:304 #: modules/pam_unix/pam_unix_passwd.c:470 msgid "Password has been already used. Choose another." msgstr "సంకేతపదము యిప్పటికే వుపయోగించబడింది. మరియొకదానిని యెంచుకొనుము." @@ -427,20 +427,20 @@ msgstr "pam_set_item() విఫలమైంది\n" msgid "login: failure forking: %m" msgstr "login: failure forking: %m" -#: modules/pam_stress/pam_stress.c:476 +#: modules/pam_stress/pam_stress.c:475 #, c-format msgid "Changing STRESS password for %s." msgstr "STRESS సంకేతపదమును %sకొరకు మార్చబడింది." -#: modules/pam_stress/pam_stress.c:490 +#: modules/pam_stress/pam_stress.c:489 msgid "Enter new STRESS password: " msgstr "కొత్త STRESS సంకేతపదమును ప్రవేశపెట్టుము: " -#: modules/pam_stress/pam_stress.c:493 +#: modules/pam_stress/pam_stress.c:492 msgid "Retype new STRESS password: " msgstr "కొత్త STRESS సంకేతపదమును తిరిగిటైపుచేయుము: " -#: modules/pam_stress/pam_stress.c:522 +#: modules/pam_stress/pam_stress.c:521 msgid "Verification mis-typed; password unchanged" msgstr "తప్పుగా-చేసినటైపు నిర్ధారణ; సంకేతపదము మార్చబడలేదు" @@ -449,7 +449,7 @@ msgstr "తప్పుగా-చేసినటైపు నిర్ధార msgid "Account temporary locked (%ld seconds left)" msgstr "ఖాతా తాత్కాలికంగా లాక్‌చేయబడింది (%ld సెకనులు మిగిలినవి)" -#: modules/pam_tally/pam_tally.c:566 +#: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:520 #, c-format msgid "Account locked due to %u failed logins" msgstr "%u లాగిన్‌ల వైఫల్యం కారణంగా ఖాతా లాక్అయింది" @@ -492,11 +492,6 @@ msgstr "" msgid "%s: Can't reset all users to non-zero\n" msgstr "%s: వినియోగదారులనందరిని సున్నా-కానిదానికి తిరిగివుంచలేము\n" -#: modules/pam_tally2/pam_tally2.c:520 -#, fuzzy, c-format -msgid "Account locked due to %hu failed logins" -msgstr "%u లాగిన్‌ల వైఫల్యం కారణంగా ఖాతా లాక్అయింది" - #: modules/pam_tally2/pam_tally2.c:865 #, c-format msgid "Login Failures Latest failure From\n" @@ -511,6 +506,11 @@ msgid "" msgstr "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" +#: modules/pam_timestamp/pam_timestamp.c:339 +#, c-format +msgid "Access granted (last access was %ld seconds ago)." +msgstr "" + #: modules/pam_unix/pam_unix_acct.c:228 modules/pam_unix/pam_unix_acct.c:250 msgid "Your account has expired; please contact your system administrator" msgstr "మీ ఖాతా కాలముతీరినది; దయచేసి మీ సిస్టమ్ నిర్వాహకుడిని సంప్రదించండి" @@ -564,3 +564,7 @@ msgstr "కొత్త UNIX సంకేతపదమును ప్రవే #: modules/pam_unix/pam_unix_passwd.c:678 msgid "Retype new UNIX password: " msgstr "కొత్త UNIX సంకేతపదమును తిరిగిటైపు చేయుము: " + +#, fuzzy +#~ msgid "Account locked due to %hu failed logins" +#~ msgstr "%u లాగిన్‌ల వైఫల్యం కారణంగా ఖాతా లాక్అయింది" diff --git a/po/tr.po b/po/tr.po index df141f73..9ad9187f 100644 --- 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-10-22 20:01+0200\n" +"POT-Creation-Date: 2008-11-28 15:16+0100\n" "PO-Revision-Date: 2006-05-03 19:00+0200\n" "Last-Translator: Koray Löker \n" "Language-Team: Türkçe \n" @@ -167,19 +167,19 @@ msgid "Unknown PAM error" msgstr "Bilinmeyen PAM hatası" #: modules/pam_cracklib/pam_cracklib.c:64 -#: modules/pam_pwhistory/pam_pwhistory.c:61 +#: modules/pam_pwhistory/pam_pwhistory.c:62 #, c-format msgid "New %s%spassword: " msgstr "Yeni %s%sparolası: " #: modules/pam_cracklib/pam_cracklib.c:66 -#: modules/pam_pwhistory/pam_pwhistory.c:62 +#: modules/pam_pwhistory/pam_pwhistory.c:64 #, 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 +#: modules/pam_pwhistory/pam_pwhistory.c:65 msgid "Sorry, passwords do not match." msgstr "Üzgünüm, parolalar birbirine uymuyor." @@ -230,7 +230,7 @@ msgid "Password unchanged" msgstr "Parola değiştirilmedi" #: modules/pam_cracklib/pam_cracklib.c:584 -#: modules/pam_cracklib/pam_cracklib.c:709 +#: modules/pam_cracklib/pam_cracklib.c:710 #, c-format msgid "BAD PASSWORD: %s" msgstr "YANLIŞ PAROLA: %s" @@ -352,14 +352,14 @@ msgstr "" msgid "Unable to create directory %s: %m" msgstr "" -#: modules/pam_pwhistory/pam_pwhistory.c:224 -#: modules/pam_pwhistory/pam_pwhistory.c:258 +#: modules/pam_pwhistory/pam_pwhistory.c:231 +#: modules/pam_pwhistory/pam_pwhistory.c:267 #, 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_pwhistory/pam_pwhistory.c:242 +#: modules/pam_pwhistory/pam_pwhistory.c:304 #: 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." @@ -428,20 +428,20 @@ msgstr "pam_set_item() çalıştırılamadı\n" msgid "login: failure forking: %m" msgstr "giriş: çatallama yapılamadı: %m" -#: modules/pam_stress/pam_stress.c:476 +#: modules/pam_stress/pam_stress.c:475 #, fuzzy, c-format msgid "Changing STRESS password for %s." msgstr "STRESS parolası değiştiriliyor " -#: modules/pam_stress/pam_stress.c:490 +#: modules/pam_stress/pam_stress.c:489 msgid "Enter new STRESS password: " msgstr "Yeni STRESS parolası girin: " -#: modules/pam_stress/pam_stress.c:493 +#: modules/pam_stress/pam_stress.c:492 msgid "Retype new STRESS password: " msgstr "Yeni STRESS parolasını tekrar girin: " -#: modules/pam_stress/pam_stress.c:522 +#: modules/pam_stress/pam_stress.c:521 msgid "Verification mis-typed; password unchanged" msgstr "Doğrulama hatalı: parola değiştirilmedi" @@ -450,7 +450,7 @@ msgstr "Doğrulama hatalı: parola değiştirilmedi" msgid "Account temporary locked (%ld seconds left)" msgstr "" -#: modules/pam_tally/pam_tally.c:566 +#: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:520 #, c-format msgid "Account locked due to %u failed logins" msgstr "" @@ -493,11 +493,6 @@ msgstr "" msgid "%s: Can't reset all users to non-zero\n" msgstr "" -#: modules/pam_tally2/pam_tally2.c:520 -#, c-format -msgid "Account locked due to %hu failed logins" -msgstr "" - #: modules/pam_tally2/pam_tally2.c:865 #, c-format msgid "Login Failures Latest failure From\n" @@ -512,6 +507,11 @@ msgid "" msgstr "" "%s: [--file DosyanınTamYolu] [--user KullanıcıAdı] [--reset[=n]] [--quiet]\n" +#: modules/pam_timestamp/pam_timestamp.c:339 +#, c-format +msgid "Access granted (last access was %ld seconds ago)." +msgstr "" + #: modules/pam_unix/pam_unix_acct.c:228 modules/pam_unix/pam_unix_acct.c:250 msgid "Your account has expired; please contact your system administrator" msgstr "Hesabınızın süresi doldu; lütfen sistem yöneticinizle bağlantıya geçin" diff --git a/po/uk.po b/po/uk.po index 67525024..e258e6ae 100644 --- 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-10-22 20:01+0200\n" +"POT-Creation-Date: 2008-11-28 15:16+0100\n" "PO-Revision-Date: 2006-05-03 18:59+0200\n" "Last-Translator: Ivan Petrouchtchak \n" "Language-Team: Ukrainian \n" @@ -168,19 +168,19 @@ msgid "Unknown PAM error" msgstr "Невідома помилка PAM" #: modules/pam_cracklib/pam_cracklib.c:64 -#: modules/pam_pwhistory/pam_pwhistory.c:61 +#: modules/pam_pwhistory/pam_pwhistory.c:62 #, c-format msgid "New %s%spassword: " msgstr "Новий пароль %s%s:" #: modules/pam_cracklib/pam_cracklib.c:66 -#: modules/pam_pwhistory/pam_pwhistory.c:62 +#: modules/pam_pwhistory/pam_pwhistory.c:64 #, c-format msgid "Retype new %s%spassword: " msgstr "Повторіть новий пароль %s%s: " #: modules/pam_cracklib/pam_cracklib.c:67 -#: modules/pam_pwhistory/pam_pwhistory.c:63 +#: modules/pam_pwhistory/pam_pwhistory.c:65 msgid "Sorry, passwords do not match." msgstr "Ваші нові паролі не співпадають." @@ -231,7 +231,7 @@ msgid "Password unchanged" msgstr "Пароль не змінено" #: modules/pam_cracklib/pam_cracklib.c:584 -#: modules/pam_cracklib/pam_cracklib.c:709 +#: modules/pam_cracklib/pam_cracklib.c:710 #, c-format msgid "BAD PASSWORD: %s" msgstr "ПОГАНИЙ ПАРОЛЬ: %s" @@ -355,14 +355,14 @@ msgstr "" msgid "Unable to create directory %s: %m" msgstr "" -#: modules/pam_pwhistory/pam_pwhistory.c:224 -#: modules/pam_pwhistory/pam_pwhistory.c:258 +#: modules/pam_pwhistory/pam_pwhistory.c:231 +#: modules/pam_pwhistory/pam_pwhistory.c:267 #, fuzzy msgid "Password change aborted." msgstr "Пароль не змінено" -#: modules/pam_pwhistory/pam_pwhistory.c:235 -#: modules/pam_pwhistory/pam_pwhistory.c:295 +#: modules/pam_pwhistory/pam_pwhistory.c:242 +#: modules/pam_pwhistory/pam_pwhistory.c:304 #: modules/pam_unix/pam_unix_passwd.c:470 msgid "Password has been already used. Choose another." msgstr "Пароль вже вживається. Виберіть інший." @@ -431,20 +431,20 @@ msgstr "помилка pam_set_item()\n" msgid "login: failure forking: %m" msgstr "вхід: помилка розгалуження: %m" -#: modules/pam_stress/pam_stress.c:476 +#: modules/pam_stress/pam_stress.c:475 #, fuzzy, c-format msgid "Changing STRESS password for %s." msgstr "Зміна пароля STRESS для " -#: modules/pam_stress/pam_stress.c:490 +#: modules/pam_stress/pam_stress.c:489 msgid "Enter new STRESS password: " msgstr "Введіть новий пароль STRESS: " -#: modules/pam_stress/pam_stress.c:493 +#: modules/pam_stress/pam_stress.c:492 msgid "Retype new STRESS password: " msgstr "Повторіть новий пароль STRESS: " -#: modules/pam_stress/pam_stress.c:522 +#: modules/pam_stress/pam_stress.c:521 msgid "Verification mis-typed; password unchanged" msgstr "Перевірку не пройдено; пароль не змінено" @@ -453,7 +453,7 @@ msgstr "Перевірку не пройдено; пароль не змінен msgid "Account temporary locked (%ld seconds left)" msgstr "" -#: modules/pam_tally/pam_tally.c:566 +#: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:520 #, c-format msgid "Account locked due to %u failed logins" msgstr "" @@ -497,11 +497,6 @@ msgstr "" msgid "%s: Can't reset all users to non-zero\n" msgstr "%s: Не вдається скинути всіх користувачів до не-нуль\n" -#: modules/pam_tally2/pam_tally2.c:520 -#, c-format -msgid "Account locked due to %hu failed logins" -msgstr "" - #: modules/pam_tally2/pam_tally2.c:865 #, c-format msgid "Login Failures Latest failure From\n" @@ -517,6 +512,11 @@ msgstr "" "%s: [--file rooted-filename] [--user ім'я користувача] [--reset[=n]] [--" "quiet]\n" +#: modules/pam_timestamp/pam_timestamp.c:339 +#, c-format +msgid "Access granted (last access was %ld seconds ago)." +msgstr "" + #: modules/pam_unix/pam_unix_acct.c:228 modules/pam_unix/pam_unix_acct.c:250 msgid "Your account has expired; please contact your system administrator" msgstr "" diff --git a/po/zh_CN.po b/po/zh_CN.po index 4d251989..32e41700 100644 --- a/po/zh_CN.po +++ b/po/zh_CN.po @@ -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-10-22 20:01+0200\n" +"POT-Creation-Date: 2008-11-28 15:16+0100\n" "PO-Revision-Date: 2008-10-20 15:43+1000\n" "Last-Translator: Leah Liu \n" "Language-Team: Simplified Chinese \n" @@ -169,19 +169,19 @@ msgid "Unknown PAM error" msgstr "未知的 PAM 错误" #: modules/pam_cracklib/pam_cracklib.c:64 -#: modules/pam_pwhistory/pam_pwhistory.c:61 +#: modules/pam_pwhistory/pam_pwhistory.c:62 #, c-format msgid "New %s%spassword: " msgstr "新的 %s%s密码:" #: modules/pam_cracklib/pam_cracklib.c:66 -#: modules/pam_pwhistory/pam_pwhistory.c:62 +#: modules/pam_pwhistory/pam_pwhistory.c:64 #, c-format msgid "Retype new %s%spassword: " msgstr "重新输入新的 %s%s密码:" #: modules/pam_cracklib/pam_cracklib.c:67 -#: modules/pam_pwhistory/pam_pwhistory.c:63 +#: modules/pam_pwhistory/pam_pwhistory.c:65 msgid "Sorry, passwords do not match." msgstr "抱歉,密码不匹配。" @@ -232,7 +232,7 @@ msgid "Password unchanged" msgstr "密码未更改" #: modules/pam_cracklib/pam_cracklib.c:584 -#: modules/pam_cracklib/pam_cracklib.c:709 +#: modules/pam_cracklib/pam_cracklib.c:710 #, c-format msgid "BAD PASSWORD: %s" msgstr "无效的密码: %s" @@ -354,13 +354,13 @@ 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 +#: modules/pam_pwhistory/pam_pwhistory.c:231 +#: modules/pam_pwhistory/pam_pwhistory.c:267 msgid "Password change aborted." msgstr "密码更改取消。" -#: modules/pam_pwhistory/pam_pwhistory.c:235 -#: modules/pam_pwhistory/pam_pwhistory.c:295 +#: modules/pam_pwhistory/pam_pwhistory.c:242 +#: modules/pam_pwhistory/pam_pwhistory.c:304 #: modules/pam_unix/pam_unix_passwd.c:470 msgid "Password has been already used. Choose another." msgstr "密码已使用。请选择其他密码。" @@ -425,20 +425,20 @@ msgstr "未能 pam_set_item()\n" msgid "login: failure forking: %m" msgstr "登录:故障派生:%m" -#: modules/pam_stress/pam_stress.c:476 +#: modules/pam_stress/pam_stress.c:475 #, c-format msgid "Changing STRESS password for %s." msgstr "为 %s 更改 STRESS 密码。" -#: modules/pam_stress/pam_stress.c:490 +#: modules/pam_stress/pam_stress.c:489 msgid "Enter new STRESS password: " msgstr "输入新的 STRESS 密码:" -#: modules/pam_stress/pam_stress.c:493 +#: modules/pam_stress/pam_stress.c:492 msgid "Retype new STRESS password: " msgstr "重新输入新的 STRESS 密码:" -#: modules/pam_stress/pam_stress.c:522 +#: modules/pam_stress/pam_stress.c:521 msgid "Verification mis-typed; password unchanged" msgstr "校验类型错误;密码未更改" @@ -447,7 +447,7 @@ msgstr "校验类型错误;密码未更改" msgid "Account temporary locked (%ld seconds left)" msgstr "帐户暂时锁住(还有 %ld 秒)" -#: modules/pam_tally/pam_tally.c:566 +#: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:520 #, c-format msgid "Account locked due to %u failed logins" msgstr "因为 %u 失败登录而锁定帐户" @@ -489,11 +489,6 @@ msgstr "%s: [--文件 根文件名] [--用户 用户名] [--重设置[=n]] [-- msgid "%s: Can't reset all users to non-zero\n" msgstr "%s: 无法将所有用户重设置为非零\n" -#: modules/pam_tally2/pam_tally2.c:520 -#, fuzzy, c-format -msgid "Account locked due to %hu failed logins" -msgstr "因为 %u 失败登录而锁定帐户" - #: modules/pam_tally2/pam_tally2.c:865 #, c-format msgid "Login Failures Latest failure From\n" @@ -507,6 +502,11 @@ msgid "" " [-r] [--reset[=n]] [--quiet]\n" msgstr "%s: [--文件 根文件名] [--用户 用户名] [--重设置[=n]] [--安静]\n" +#: modules/pam_timestamp/pam_timestamp.c:339 +#, c-format +msgid "Access granted (last access was %ld seconds ago)." +msgstr "" + #: modules/pam_unix/pam_unix_acct.c:228 modules/pam_unix/pam_unix_acct.c:250 msgid "Your account has expired; please contact your system administrator" msgstr "您的帐户已失效;请与系统管理员取得联系" @@ -559,3 +559,7 @@ msgstr "输入新的 UNIX 密码:" #: modules/pam_unix/pam_unix_passwd.c:678 msgid "Retype new UNIX password: " msgstr "重新输入新的 UNIX 密码:" + +#, fuzzy +#~ msgid "Account locked due to %hu failed logins" +#~ msgstr "因为 %u 失败登录而锁定帐户" diff --git a/po/zh_TW.po b/po/zh_TW.po index a712bb58..d1682ebe 100644 --- a/po/zh_TW.po +++ b/po/zh_TW.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Linux-PAM.tip\n" "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n" -"POT-Creation-Date: 2008-10-22 20:01+0200\n" +"POT-Creation-Date: 2008-11-28 15:16+0100\n" "PO-Revision-Date: 2008-10-21 15:51+1000\n" "Last-Translator: Terry Chuang \n" "Language-Team: \n" @@ -167,19 +167,19 @@ msgid "Unknown PAM error" msgstr "未知的 PAM 錯誤" #: modules/pam_cracklib/pam_cracklib.c:64 -#: modules/pam_pwhistory/pam_pwhistory.c:61 +#: modules/pam_pwhistory/pam_pwhistory.c:62 #, c-format msgid "New %s%spassword: " msgstr "新 %s%s密碼:" #: modules/pam_cracklib/pam_cracklib.c:66 -#: modules/pam_pwhistory/pam_pwhistory.c:62 +#: modules/pam_pwhistory/pam_pwhistory.c:64 #, c-format msgid "Retype new %s%spassword: " msgstr "再次輸入新的 %s%s密碼:" #: modules/pam_cracklib/pam_cracklib.c:67 -#: modules/pam_pwhistory/pam_pwhistory.c:63 +#: modules/pam_pwhistory/pam_pwhistory.c:65 msgid "Sorry, passwords do not match." msgstr "抱歉,密碼不符合。" @@ -230,7 +230,7 @@ msgid "Password unchanged" msgstr "密碼未變更" #: modules/pam_cracklib/pam_cracklib.c:584 -#: modules/pam_cracklib/pam_cracklib.c:709 +#: modules/pam_cracklib/pam_cracklib.c:710 #, c-format msgid "BAD PASSWORD: %s" msgstr "不良的密碼: %s" @@ -353,14 +353,14 @@ 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 +#: modules/pam_pwhistory/pam_pwhistory.c:231 +#: modules/pam_pwhistory/pam_pwhistory.c:267 #, fuzzy msgid "Password change aborted." msgstr "密碼未變更" -#: modules/pam_pwhistory/pam_pwhistory.c:235 -#: modules/pam_pwhistory/pam_pwhistory.c:295 +#: modules/pam_pwhistory/pam_pwhistory.c:242 +#: modules/pam_pwhistory/pam_pwhistory.c:304 #: modules/pam_unix/pam_unix_passwd.c:470 msgid "Password has been already used. Choose another." msgstr "密碼已經由其他使用者使用。請選擇其他密碼。" @@ -425,20 +425,20 @@ msgstr "pam_set_item() 失敗\n" msgid "login: failure forking: %m" msgstr "登入:失敗的分叉:%m" -#: modules/pam_stress/pam_stress.c:476 +#: modules/pam_stress/pam_stress.c:475 #, c-format msgid "Changing STRESS password for %s." msgstr "正在更改 %s 的 STRESS 密碼。" -#: modules/pam_stress/pam_stress.c:490 +#: modules/pam_stress/pam_stress.c:489 msgid "Enter new STRESS password: " msgstr "輸入新的 STRESS 密碼:" -#: modules/pam_stress/pam_stress.c:493 +#: modules/pam_stress/pam_stress.c:492 msgid "Retype new STRESS password: " msgstr "再次輸入新的 STRESS 密碼:" -#: modules/pam_stress/pam_stress.c:522 +#: modules/pam_stress/pam_stress.c:521 msgid "Verification mis-typed; password unchanged" msgstr "確認錯誤輸入;密碼未變更" @@ -447,7 +447,7 @@ msgstr "確認錯誤輸入;密碼未變更" msgid "Account temporary locked (%ld seconds left)" msgstr "" -#: modules/pam_tally/pam_tally.c:566 +#: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:520 #, c-format msgid "Account locked due to %u failed logins" msgstr "" @@ -490,11 +490,6 @@ msgstr "" msgid "%s: Can't reset all users to non-zero\n" msgstr "%s: 無法將所有使用者重新設定為非零\n" -#: modules/pam_tally2/pam_tally2.c:520 -#, c-format -msgid "Account locked due to %hu failed logins" -msgstr "" - #: modules/pam_tally2/pam_tally2.c:865 #, c-format msgid "Login Failures Latest failure From\n" @@ -509,6 +504,11 @@ msgid "" msgstr "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" +#: modules/pam_timestamp/pam_timestamp.c:339 +#, c-format +msgid "Access granted (last access was %ld seconds ago)." +msgstr "" + #: modules/pam_unix/pam_unix_acct.c:228 modules/pam_unix/pam_unix_acct.c:250 msgid "Your account has expired; please contact your system administrator" msgstr "您的帳戶已經逾期,請洽詢您的系統管理員" diff --git a/po/zu.po b/po/zu.po index a9c0afc1..195b8939 100644 --- 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-10-22 20:01+0200\n" +"POT-Creation-Date: 2008-11-28 15:16+0100\n" "PO-Revision-Date: 2006-11-03 12:03\n" "Last-Translator: Novell Language \n" "Language-Team: Novell Language \n" @@ -163,19 +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 +#: modules/pam_pwhistory/pam_pwhistory.c:62 #, c-format msgid "New %s%spassword: " msgstr "%s%siphasiwedi entsha: " #: modules/pam_cracklib/pam_cracklib.c:66 -#: modules/pam_pwhistory/pam_pwhistory.c:62 +#: modules/pam_pwhistory/pam_pwhistory.c:64 #, 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 +#: modules/pam_pwhistory/pam_pwhistory.c:65 msgid "Sorry, passwords do not match." msgstr "Uxolo, amaphasiwedi awahambelani." @@ -226,7 +226,7 @@ msgid "Password unchanged" msgstr "Iphasiwedi ayishintshwanga" #: modules/pam_cracklib/pam_cracklib.c:584 -#: modules/pam_cracklib/pam_cracklib.c:709 +#: modules/pam_cracklib/pam_cracklib.c:710 #, c-format msgid "BAD PASSWORD: %s" msgstr "IPHASIWEDI ENGASEBENZI: %s" @@ -349,14 +349,14 @@ msgstr "" msgid "Unable to create directory %s: %m" msgstr "" -#: modules/pam_pwhistory/pam_pwhistory.c:224 -#: modules/pam_pwhistory/pam_pwhistory.c:258 +#: modules/pam_pwhistory/pam_pwhistory.c:231 +#: modules/pam_pwhistory/pam_pwhistory.c:267 #, fuzzy msgid "Password change aborted." msgstr "Iphasiwedi ayishintshwanga" -#: modules/pam_pwhistory/pam_pwhistory.c:235 -#: modules/pam_pwhistory/pam_pwhistory.c:295 +#: modules/pam_pwhistory/pam_pwhistory.c:242 +#: modules/pam_pwhistory/pam_pwhistory.c:304 #: modules/pam_unix/pam_unix_passwd.c:470 msgid "Password has been already used. Choose another." msgstr "Le phasiwedi isetshenziswa ngothile. Khetha enye." @@ -425,20 +425,20 @@ msgstr "Ihlulekile ukwenza i-pam_set_item()\n" msgid "login: failure forking: %m" msgstr "ngena: Ihlulekile ukuhlukanisa: %m" -#: modules/pam_stress/pam_stress.c:476 +#: modules/pam_stress/pam_stress.c:475 #, fuzzy, c-format msgid "Changing STRESS password for %s." msgstr "Ukushintsha iphasiwedi ye-STRESS ye-" -#: modules/pam_stress/pam_stress.c:490 +#: modules/pam_stress/pam_stress.c:489 msgid "Enter new STRESS password: " msgstr "Faka iphasiwedi entsha ye-STRESS: " -#: modules/pam_stress/pam_stress.c:493 +#: modules/pam_stress/pam_stress.c:492 msgid "Retype new STRESS password: " msgstr "Thayipha iphasiwedi entsha ye-STRESS: " -#: modules/pam_stress/pam_stress.c:522 +#: modules/pam_stress/pam_stress.c:521 msgid "Verification mis-typed; password unchanged" msgstr "Ukufakazela akuthayiphiwanga kahle; iphasiwedi ayishintshwanga" @@ -447,7 +447,7 @@ msgstr "Ukufakazela akuthayiphiwanga kahle; iphasiwedi ayishintshwanga" msgid "Account temporary locked (%ld seconds left)" msgstr "" -#: modules/pam_tally/pam_tally.c:566 +#: modules/pam_tally/pam_tally.c:566 modules/pam_tally2/pam_tally2.c:520 #, c-format msgid "Account locked due to %u failed logins" msgstr "" @@ -492,11 +492,6 @@ msgstr "" "%s: Ayikwazi ukusetha kabusha bonke abasebenzisi ibase enombolweni ongelona " "iqanda\n" -#: modules/pam_tally2/pam_tally2.c:520 -#, c-format -msgid "Account locked due to %hu failed logins" -msgstr "" - #: modules/pam_tally2/pam_tally2.c:865 #, c-format msgid "Login Failures Latest failure From\n" @@ -511,6 +506,11 @@ msgid "" msgstr "" "%s: [--file rooted-filename] [--user username] [--reset[=n]] [--quiet]\n" +#: modules/pam_timestamp/pam_timestamp.c:339 +#, c-format +msgid "Access granted (last access was %ld seconds ago)." +msgstr "" + #: modules/pam_unix/pam_unix_acct.c:228 modules/pam_unix/pam_unix_acct.c:250 msgid "Your account has expired; please contact your system administrator" msgstr "" -- cgit v1.2.3 From 2820ff6a5f9f43faa8cc823cd954966ca3f5c8cc Mon Sep 17 00:00:00 2001 From: Thorsten Kukuk Date: Tue, 16 Jun 2009 08:32:40 +0000 Subject: Relevant BUGIDs: Purpose of commit: bugfix Commit summary: --------------- 2009-06-16 Thorsten Kukuk * doc/sag/Linux-PAM_SAG.xml: Fix typos. * doc/adg/Linux-PAM_ADG.xml: Likewise. * doc/mwg/Linux-PAM_MWG.xml: Likewise. --- ChangeLog | 6 ++++++ doc/adg/Linux-PAM_ADG.xml | 19 ++++++++++--------- doc/mwg/Linux-PAM_MWG.xml | 6 +++--- doc/sag/Linux-PAM_SAG.xml | 12 ++++++------ 4 files changed, 25 insertions(+), 18 deletions(-) (limited to 'doc/sag') diff --git a/ChangeLog b/ChangeLog index ffc41bf7..67ee2ebf 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2009-06-16 Thorsten Kukuk + + * doc/sag/Linux-PAM_SAG.xml: Fix typos. + * doc/adg/Linux-PAM_ADG.xml: Likewise. + * doc/mwg/Linux-PAM_MWG.xml: Likewise. + 2009-06-08 Rajesh Ranjan * po/hi.po: Updated translations. diff --git a/doc/adg/Linux-PAM_ADG.xml b/doc/adg/Linux-PAM_ADG.xml index 8f5ec115..ad7966df 100644 --- a/doc/adg/Linux-PAM_ADG.xml +++ b/doc/adg/Linux-PAM_ADG.xml @@ -23,7 +23,7 @@ about the Linux-PAM library. It describes how an application might use the Linux-PAM library to authenticate - users. In addition it contains a description of the funtions + users. In addition it contains a description of the functions to be found in libpam_misc library, that can be used in general applications. Finally, it contains some comments on PAM related security issues for the application developer. @@ -380,7 +380,7 @@ cc -o application .... -lpam -lpam_misc
-
+
The identity of the user The Linux-PAM modules will need @@ -395,9 +395,9 @@ cc -o application .... -lpam -lpam_misc issue of security. One convention that is actively used by some modules is that the identity of the user requesting a service should be the current UID - (userid) of the running process; the identity of the + (user ID) of the running process; the identity of the privilege granting user is the EUID - (effective userid) of the running process; the identity of + (effective user ID) of the running process; the identity of the user, under whose name the service will be executed, is given by the contents of the PAM_USER @@ -459,7 +459,7 @@ cc -o application .... -lpam -lpam_misc This is also true of conversation prompts. The application should not accept prompts of arbitrary length with out checking for resource allocation failure and dealing with such extreme conditions gracefully - and in a mannor that preserves the PAM API. Such tolerance may be + and in a manner that preserves the PAM API. Such tolerance may be especially important when attempting to track a malicious adversary.
@@ -470,7 +470,7 @@ cc -o application .... -lpam -lpam_misc To aid the work of the application developer a library of miscellaneous functions is provided. It is called - libpam_miscy, and contains a text based + libpam_misc, and contains a text based conversation function, and routines for enhancing the standard PAM-environment variable support. @@ -520,8 +520,9 @@ cc -o application .... -lpam -lpam_misc being be attached to it. The point being that the "standard" pop-authentication protocol(s) [which will be needed to satisfy inflexible/legacy clients] would be supported by inserting an - appropriate pam_qpopper module(s). However, having rewritten popd - once in this way any new protocols can be implemented in-situ. + appropriate pam_qpopper module(s). However, having rewritten + popd once in this way any new protocols can be + implemented in-situ. One simple test of a ported application would be to insert the @@ -558,7 +559,7 @@ cc -o application .... -lpam -lpam_misc him/herself in a variety of ways. Updating the user's authentication token thus corresponds to refreshing the object they use to - authenticate themself with the system. The word password is + authenticate them self with the system. The word password is avoided to keep open the possibility that the authentication involves a retinal scan or other non-textual mode of challenge/response. diff --git a/doc/mwg/Linux-PAM_MWG.xml b/doc/mwg/Linux-PAM_MWG.xml index 5a09a7cf..0c6c9201 100644 --- a/doc/mwg/Linux-PAM_MWG.xml +++ b/doc/mwg/Linux-PAM_MWG.xml @@ -71,7 +71,7 @@
-
+
Synopsis #include <security/pam_modules.h> @@ -97,7 +97,7 @@ gcc -shared -o pam_module.so pam_module.o -lpam First, we cover what the module should expect from the Linux-PAM library and a Linux-PAM aware application. - Essesntially this is the libpam.* library. + Essentially this is the libpam.* library. @@ -169,7 +169,7 @@ gcc -shared -o pam_module.so pam_module.o -lpam token of some lesser user. In other cases it may not be appropriate: when joe maliciously wants to reset alice's password; or when anyone - other than the user themself wishes to reset their + other than the user them self wishes to reset their KERBEROS authentication token. A policy for this action should be defined by any reasonable authentication scheme, the module writer should consider diff --git a/doc/sag/Linux-PAM_SAG.xml b/doc/sag/Linux-PAM_SAG.xml index b83355ef..a3fc1ee8 100644 --- a/doc/sag/Linux-PAM_SAG.xml +++ b/doc/sag/Linux-PAM_SAG.xml @@ -27,7 +27,7 @@ - + Introduction Linux-PAM (Pluggable Authentication @@ -85,7 +85,7 @@ here for locating these files are those of the relevant RFC (RFC-86.0, see bibliography"). If you are using a distribution of Linux (or some other operating system) that - supports PAM but chooses to distribute these files in a diferent way + supports PAM but chooses to distribute these files in a different way you should be careful when copying examples directly from the text. @@ -210,7 +210,7 @@ If a program is going to use PAM, then it has to have PAM functions explicitly coded into the program. If you have access to the source code you can add the appropriate PAM - functions. If you do not have accessto the source code, and + functions. If you do not have access to the source code, and the binary does not have the PAM functions included, then it is not possible to use PAM. @@ -227,7 +227,7 @@ href="../man/pam.conf-syntax.xml" xpointer='xpointer(//section[@id = "pam.conf-syntax"]/*)' />
-
+
Directory based configuration Security issues -
+
If something goes wrong Linux-PAM has the potential @@ -341,7 +341,7 @@ session required pam_unix.so choose to have no security or absolute security (no access permitted). In general, Linux-PAM errs towards the latter. Any number of configuration errors - can dissable access to your system partially, or completely. + can disable access to your system partially, or completely. The most dramatic problem that is likely to be encountered when -- cgit v1.2.3 From da1e581c1f3b4cc7a3badf9f30e434c8a72227e4 Mon Sep 17 00:00:00 2001 From: Thorsten Kukuk Date: Tue, 16 Jun 2009 08:46:31 +0000 Subject: Relevant BUGIDs: Purpose of commit: cleanup Commit summary: --------------- Adjust date. --- doc/adg/Linux-PAM_ADG.xml | 2 +- doc/mwg/Linux-PAM_MWG.xml | 2 +- doc/sag/Linux-PAM_SAG.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) (limited to 'doc/sag') diff --git a/doc/adg/Linux-PAM_ADG.xml b/doc/adg/Linux-PAM_ADG.xml index ad7966df..5f4aa0ab 100644 --- a/doc/adg/Linux-PAM_ADG.xml +++ b/doc/adg/Linux-PAM_ADG.xml @@ -16,7 +16,7 @@ kukuk@thkukuk.de - Version 1.0, 3. April 2008 + Version 1.1, 16. June 2009 This manual documents what an application developer needs to know diff --git a/doc/mwg/Linux-PAM_MWG.xml b/doc/mwg/Linux-PAM_MWG.xml index 0c6c9201..a381dc6c 100644 --- a/doc/mwg/Linux-PAM_MWG.xml +++ b/doc/mwg/Linux-PAM_MWG.xml @@ -16,7 +16,7 @@ kukuk@thkukuk.de - Version 1.0, 3. April 2008 + Version 1.1, 16. June 2009 This manual documents what a programmer needs to know in order diff --git a/doc/sag/Linux-PAM_SAG.xml b/doc/sag/Linux-PAM_SAG.xml index a3fc1ee8..f608512e 100644 --- a/doc/sag/Linux-PAM_SAG.xml +++ b/doc/sag/Linux-PAM_SAG.xml @@ -16,7 +16,7 @@ kukuk@thkukuk.de - Version 1.0, 3. April 2008 + Version 1.1, 16. June 2009 This manual documents what a system-administrator needs to know about -- cgit v1.2.3