[pkg-horde] [SCM] Debian Horde Packages repository: sork-passwd-h3 package branch, debian-sid, updated. d3c0637edb225375ef897edf098f03f8f7dabfba

Gregory Colpart reg at foulademer.gcolpart.com
Sun May 31 21:20:25 UTC 2009


The following commit has been merged in the debian-sid branch:
commit ac14c927a6e5be755f59e741615f76df590a2a46
Author: Gregory Colpart <reg at foulademer.gcolpart.com>
Date:   Sun May 31 18:19:13 2009 +0200

    merge from upstream

diff --git a/COPYING b/COPYING
new file mode 100644
index 0000000..a6b6756
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,280 @@
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright 1989, 1991 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
diff --git a/LICENSE b/LICENSE
deleted file mode 100644
index 12300fc..0000000
--- a/LICENSE
+++ /dev/null
@@ -1,48 +0,0 @@
-Version 1.0
-
-Copyright (c) 2002-2005 The Horde Project. 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. The end-user documentation included with the redistribution, if
-any, must include the following acknowledgment:
-
-   "This product includes software developed by the Horde Project
-    (http://www.horde.org/)."
-
-Alternately, this acknowledgment may appear in the software itself, if
-and wherever such third-party acknowledgments normally appear.
-
-4. The names "Horde", "The Horde Project", and "Passwd" must not be
-used to endorse or promote products derived from this software without
-prior written permission. For written permission, please contact
-core at horde.org.
-
-5. Products derived from this software may not be called "Horde" or
-"Passwd", nor may "Horde" or "Passwd" appear in their name, without
-prior written permission of the Horde Project.
-
-THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED 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 HORDE PROJECT OR ITS 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.
-
-This software consists of voluntary contributions made by many
-individuals on behalf of the Horde Project. For more information on
-the Horde Project, please see <http://www.horde.org/>.
diff --git a/README b/README
index d5b0ab6..0cc4bd7 100644
--- a/README
+++ b/README
@@ -1,8 +1,8 @@
 What is Passwd?
 ===============
 
-:Last update:   $Date: 2005/08/23 10:09:56 $
-:Revision:      $Revision: 1.5 $
+:Last update:   $Date: 2008/10/09 17:12:03 $
+:Revision:      $Revision: 1.5.2.2 $
 :Contact:       sork at lists.horde.org
 
 .. contents:: Contents
@@ -33,7 +33,7 @@ Documentation
 The following documentation is available in the Passwd distribution:
 
 :README_:            This file
-:LICENSE_:           Copyright and license information
+:COPYING_:           Copyright and license information
 :`docs/CHANGES`_:    Changes by release
 :`docs/CREDITS`_:    Project developers
 :`docs/INSTALL`_:    Installation instructions and notes
@@ -70,7 +70,7 @@ appearances on IRC, on the channel #horde on the freenode Network
 Licensing
 ---------
 
-For licensing and copyright information, please see the file LICENSE_ in the
+For licensing and copyright information, please see the file COPYING_ in the
 Passwd distribution.
 
 Thanks,
@@ -79,7 +79,7 @@ The Sork team
 
 
 .. _README: ?f=README.html
-.. _LICENSE: http://www.horde.org/licenses/asl.php
+.. _COPYING: http://www.horde.org/licenses/gpl.php
 .. _docs/CHANGES: ?f=CHANGES.html
 .. _docs/CREDITS: ?f=CREDITS.html
 .. _INSTALL:
diff --git a/config/backends.php.dist b/config/backends.php.dist
index 66461ca..860317c 100644
--- a/config/backends.php.dist
+++ b/config/backends.php.dist
@@ -1,6 +1,6 @@
 <?php
 /**
- * $Horde: passwd/config/backends.php.dist,v 1.41 2005/08/24 07:11:05 jan Exp $
+ * $Horde: passwd/config/backends.php.dist,v 1.41.2.3 2008/10/09 17:12:03 jan Exp $
  *
  * This file is where you specify what backends people use to change
  * their passwords. There are a number of properties that you can set
@@ -72,10 +72,7 @@
  *            8) sha
  *            9) ssha
  *
- *            Currently, md5-base64, smd5, sha, and ssha require the
- *            mhash php library in order to work properly.  See the
- *            INSTALL file for directions on enabling this.  md5
- *            passwords have caused some problems in the past because
+ *            md5 passwords have caused some problems in the past because
  *            there are different definitions of what is a "md5
  *            password".  Systems implement them in a different
  *            manner.  If you are using OpenLDAP as your backend or
@@ -153,7 +150,17 @@ $backends['expect'] = array(
     'params' => array(
         'program' => '/usr/bin/expect',
         'script' => dirname(__FILE__) . '/../scripts/passwd_expect',
-        'params' => '-ssh -host localhost -output `tempfile --directory /tmp/ --prefix srkpw`'
+        'params' => '-telnet -host localhost -output /tmp/passwd.log'
+    )
+);
+
+$backends['sudo_expect'] = array(
+    'name' => 'Example Expect with Sudo Script',
+    'preferred' => '',
+    'password policy' => array(),
+    'driver' => 'procopen',
+    'params' => array(
+        'program' => '/usr/bin/expect ' . dirname(__FILE__) . '/../scripts/passwd_expect -sudo'
     )
 );
 
@@ -182,6 +189,9 @@ $backends['ldap'] = array(
         'port' => 389,
         'basedn' => 'o=example.com',
         'uid' => 'uid',
+        // these attributes will enable shadow password policies.
+        // 'shadowlastchange' => 'shadowlastchange',
+        // 'shadowmin' => 'shadowmin',
         // this will be appended to the username when looking for the userdn.
         'realm' => '',
         'encryption' => 'crypt',
@@ -205,12 +215,26 @@ $backends['ldapadmin'] = array(
         'basedn' => 'o=example.com',
         'admindn' => 'cn=admin,o=example.com',
         'adminpw' => 'somepassword',
+
+        // LDAP object key attribute
         'uid' => 'uid',
+
+        // these attributes will enable shadow password policies.
+        // 'shadowlastchange' => 'shadowlastchange',
+        // 'shadowmin' => 'shadowmin',
         'attribute' => 'clearPassword',
+
         // this will be appended to the username when looking for the userdn.
         'realm' => '',
+
+        // Use this filter when searching for the user's DN.
+        'filter' => '',
+
+        // Hash method to use when storing the password
         'encryption' => 'crypt',
-        // make sure the host == cn in the server certificate
+
+        // Whether to enable TLS for this LDAP connection
+        // Note: make sure the host matches cn in the server certificate
         'tls' => false
     )
 );
@@ -231,16 +255,20 @@ $backends['smbldap'] = array(
         'port' => 389,
         'basedn' => 'o=example.com',
         'uid' => 'uid',
-        // this will be appended to the username when looking for the userdn.
+        // This will be appended to the username when looking for the userdn.
         'realm' => '',
         'encryption' => 'crypt',
-        // make sure the host == cn in the server certificate
+        // Make sure the host == cn in the server certificate.
         'tls' => false,
+        // If any of the following attributes are commented out, they
+        // won't be set on the LDAP server.
         'lm_attribute' => 'sambaLMPassword',
         'nt_attribute' => 'sambaNTPassword',
         'pw_set_attribute' => 'sambaPwdLastSet',
         'pw_expire_attribute' => 'sambaPwdMustChange',
-        'pw_expire_time' => 180, // number of days until samba password expires
+         // The number of days until samba passwords expire. If this
+         // is commented out, passwords will never expire.
+        'pw_expire_time' => 180,
     )
 );
 
@@ -272,7 +300,9 @@ $backends['sql'] = array (
         // lookup and modify functions if special functions need to be
         // performed.  In places where a username or a password needs to be
         // used, refer to this placeholder reference:
+        //    %d -> gets substituted with the domain
         //    %u -> gets substituted with the user
+        //    %U -> gets substituted with the user without a domain part
         //    %p -> gets substituted with the plaintext password
         //    %e -> gets substituted with the encrypted password
         //
@@ -406,3 +436,42 @@ $backends['myscript'] = array(
         'program' => '/path/to/my/script + myargs'
     )
 );
+
+// This is an example configuration for the http driver.  This allows
+// connecting to an arbitrary URL that contains a password change form.
+// The params 'username','oldPasswd','passwd1', and 'passwd2' params should be
+// set to the name of the respective form input elements on the html form.  If
+// there are additional form fields that the form requires, define them in the
+// 'fields' array in the form 'formFieldName' => 'formFieldValue'.  The driver
+// attempts to determine the success or failure based on searching the returned
+// html page for the values listed in the 'eval_results' array.
+$backends['http'] = array (
+    'name' => 'Email password on IMAP server',
+    'preferred' => '',
+    'password policy' => array(
+        'minLength' => 3,
+        'maxLength' => 8,
+        'maxSpace' => 0,
+        'minUpper' => 0,
+        'minLower' => 1,
+        'minNumeric' => 1,
+        'minSymbols' => 0
+    ),
+    'driver' => 'http',
+    'params' => array(
+         'url' => 'http://www.example.com/psoft/servlet/psoft.hsphere.CP',
+         'username' => 'mbox',
+         'oldPasswd' => 'old_password',
+         'passwd1'   => 'password',
+         'passwd2'   => 'password2',
+         'fields' => array(
+            'action'    => 'change_mbox_password',
+            'ftemplate'  => 'design/mail_passw.html'
+            ),
+         'eval_results' => array(
+            'success' => 'Password successfully changed',
+            'badPass' => 'Bad old password',
+            'badUser' => 'Mailbox not found'
+            )
+    )
+);
diff --git a/config/conf.xml b/config/conf.xml
index bfb0988..26e46d5 100644
--- a/config/conf.xml
+++ b/config/conf.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- $Horde: passwd/config/conf.xml,v 1.12 2005/10/09 14:48:58 jan Exp $ -->
+<!-- $Horde: passwd/config/conf.xml,v 1.12.2.1 2008/10/09 17:12:03 jan Exp $ -->
 <configuration>
  <configsection name="menu" desc="Menu settings">
   <configheader>Menu settings</configheader>
diff --git a/config/hooks.php.dist b/config/hooks.php.dist
new file mode 100644
index 0000000..3a5e2f9
--- /dev/null
+++ b/config/hooks.php.dist
@@ -0,0 +1,72 @@
+<?php
+/**
+ * Passwd Hooks configuration file.
+ *
+ * THE HOOKS PROVIDED IN THIS FILE ARE EXAMPLES ONLY.  DO NOT ENABLE THEM
+ * BLINDLY IF YOU DO NOT KNOW WHAT YOU ARE DOING.  YOU HAVE TO CUSTOMIZE THEM
+ * TO MATCH YOUR SPECIFIC NEEDS AND SYSTEM ENVIRONMENT.
+ *
+ * For more information please see the horde/config/hooks.php.dist file.
+ *
+ * $Horde: passwd/config/hooks.php.dist,v 1.1.2.1 2008/10/09 17:12:03 jan Exp $
+ */
+
+// Here is an example _passwd_hook_username function to translate what the
+// user enters, in the username box, into what the backend expects. If we want
+// to add @example.com to the end of the username then enable the hook and use
+// this function.
+
+// if (!function_exists('_passwd_hook_username')) {
+//     function _passwd_hook_username($userid, &$driver)
+//     {
+//         return $userid . '@example.com';
+//     }
+// }
+
+// Here is another, more involed example of _passwd_hook_username.  This one
+// demonstrates how to return a different $userid based on the driver type.  It
+// also demonstrates how to do this using the composite driver.
+
+//if (!function_exists('_passwd_hook_username')) {
+//    function _passwd_hook_username($userid, &$driver)
+//     {
+//        if (is_a($driver, 'Passwd_Driver_http')) {
+//            return $userid . '@example.com';
+//        } elseif (is_a($driver, 'Passwd_Driver_composite')) {
+//            foreach ($driver->_params['drivers'] as $backend => $config) {
+//                if ($backend == 'http') {
+//                    $driver->_params['drivers']['http']['params']['be_username'] = $userid . '@example.com';
+//                    break;
+//                }
+//            }
+            // Return the userid unmodified by default.
+//            return $userid;
+//        } else {
+//           return $userid;
+//        }
+//     }
+//}
+
+// Here is an example _passwd_hook_default_username function to set the
+// username the passwd module sees when resetting passwords based on userid
+// and realm.  The default is to take a username of user at domain.tld and change
+// it to user.  If we want to leave it untouched, enable the hook and use this
+// function.
+
+// if (!function_exists('_passwd_hook_default_username')) {
+//     function _passwd_hook_default_username($userid)
+//     {
+//         return $userid;
+//     }
+// }
+
+// Here is an example _passwd_hook_userdn function that you can use to provide
+// your ldap server with a userdn so that you do not have to perform anonymous
+// binds. The function takes Auth::getAuth() as a parameter
+
+// if (!function_exists('_passwd_hook_userdn')) {
+//     function _passwd_hook_userdn($auth)
+//     {
+//         return 'uid=' . $auth . ',o=example.com';
+//     }
+// }
diff --git a/docs/CHANGES b/docs/CHANGES
index 69a2c20..49e6bb4 100644
--- a/docs/CHANGES
+++ b/docs/CHANGES
@@ -1,7 +1,67 @@
+----
+v3.1
+----
+
+[cjh] Fix bad mode for STDERR in the procopen driver
+      (info at opensolutions.net, Bug #8022).
+
+
+--------
+v3.1-RC2
+--------
+
+[cjh] Don't include the old password in LDAP driver error messages
+      (Joffrey van Wageningen <joffrey-horde at coolhaven.info>).
+
+
 --------
-v3.0-cvs
+v3.1-RC1
 --------
 
+[cjh] Add missing enforcement of minSymbol password policy
+      (yann at pleiades.fr.eu.org, Bug #7260).
+[cjh] Only update smbldap attributes for Samba users, and update all attributes
+      at once instead of one at a time (marco at csita.unige.it, Request #5977).
+[cjh] Don't set smbldap attributes that are commented out in the config
+      (fabio.pedretti at ing.unibs.it, Request #5937).
+[jan] Move all Passwd-specific hook examples from Horde's config/ directory.
+[cjh] Add support for switching between encryption schemes
+      (ulrich-horde at topfen.net, Request #2865).
+[jan] Add support for sudo to the example expect script (Dennis Voetelink
+      <voetelink at ecn.nl>, Request #5300).
+[mas] Conform to WCAG 1.0 Priority 2/Section 508 accessibility guidelines.
+      (Request #4080)
+[jan] Add new expect driver that uses the expect PECL PHP extension (Duck
+      <duck at obala.net>).
+[mjr] Add new http driver for changing passwords via an existing web form.
+[mjr] Pass reference to driver to the _passwd_hook_username call. 
+[jan] Add Turkish translation (METU <horde-tr at metu.edu.tr>).
+
+
+------
+v3.0.1
+------
+
+[jan] Add placeholders for domain and username parts to SQL driver queries
+      (Vilius Sumskas <vilius at lnk.lt>, Request #4985).
+[jan] Improve error checking in poppassd driver (Bug #4505,
+      horde at koornneef.net).
+[jan] Add Slovenian translation (Duck <duck at obala.net>).
+[jan] Compare hashing algorithms in passwords case insensitively
+      (andreas at altroot.de, Bug #2708).
+[jan] Allow password changing for special Kolab users (mzizka at hotmail.com,
+      Request #4128).
+[jan] Add Japanese translation (Hiromi Kimura <hiromi at tac.tsukuba.ac.jp>).
+[ben] Better support for MS-SQL
+[cjh] Add support in the expect driver for rssh, scponly, and other programs
+      that can execute certain commands over ssh without providing a prompt
+      (Request #2887).
+
+
+----
+v3.0
+----
+
 [jan] Add configuration option to switch between using user names with and
       without realms.
 [jan] Add Slovak translation (Ivan Noris <vix at vazka.sk>).
@@ -12,7 +72,7 @@ v3.0-RC1
 --------
 
 [jan] Extend the expect script to allow setups with passwd as the login shell
-      (Request #2550, lmamane at debian.org).
+      (Request #2550, Lionel Elie Mamane <lmamane at debian.org>).
 [jan] Don't bind to LDAP anonymously if binding with userdn fails (Bug #2502).
 [cjh] Fix updating shadowlastchange attribute in ldap driver (Roel Gloudemans
       <roel at gloudemans.info>).
diff --git a/docs/CREDITS b/docs/CREDITS
index 128ddb8..313232a 100644
--- a/docs/CREDITS
+++ b/docs/CREDITS
@@ -2,10 +2,6 @@
  Passwd Development Team
 =========================
 
-:Last update:   $Date: 2005/10/09 15:17:58 $
-:Revision:      $Revision: 1.40 $
-:Contact:       sork at lists.horde.org
-
 
 Core Developers
 ===============
@@ -23,13 +19,13 @@ Driver Developers
 - Lucas <screen at brainkrash.com>
 - Luiz R Malheiros (malheiros at gmail.com)
 - Marco Kaiser <bate at php.net>
-- Mattias Webjörn Eriksson <mattias at webjorn.org>
+- Mattias Webjörn Eriksson <mattias at webjorn.org>
 - Max Kalika <max at horde.org>
 - Mike Cochrane <mike at graftonhall.co.nz>
-- René Lund Jensen <lundeman at tbkol.dk>
+- René Lund Jensen <lundeman at tbkol.dk>
 - Samuel Nicolary <sam at nicolary.org>
 - Shane Boulter <sboulter at ariasolutions.com>
-- Stuart Bingë <skbinge at gmail.com>
+- Stuart Bingë <skbinge at gmail.com>
 - Tjeerd van der Zee <admin at xar.nl>
 
 
@@ -39,18 +35,23 @@ Localization
 =====================   ======================================================
 Arabian (Syria)         Platinum Development Team <devteam at platinum-sy.net>
 Brazilian Portuguese    Darci Antonio Tartari <dtartari at portoriogrande.com.br>
+                        Fabio de Almeida <fabiodealmeida at gmail.com>
 Bulgarian               Miroslav Pendev <miro at cybershade.us>
 Catalan                 Joan Jorba Calsina <joan.jorba at rusc.net>
-Chinese (Traditional)   David Chang <david at tmv.gov.tw>
 Chinese (Simplified)    Wenzhuo Zhang <wenzhuo at zhmail.com>
+                        Anna Chen <annachen2008 at yahoo.com.cn>
+Chinese (Traditional)   David Chang <david at tmv.gov.tw>
 Czech                   Pavel Chytil <pavel at chytil.tk>
 Dutch                   Tjeerd van der Zee
                         Resan Sa-Ardnuam <horde at sa-ardnuam.nl>
 Danish                  Anders Bruun Olsen <anders at bruun-olsen.net>
+                        Brian Truelsen <horde+i18n at briantruelsen.dk>
 Estonian                Toomas Aas <toomas.aas at mail.ee>
+                        Alar Sing <alar.sing at err.ee>
 Finnish                 Tero Matinlassi <terom at iki.fi>
+                        Leena Heino <leena.heino at uta.fi>
 French                  Daniel Huhardeaux <daniel.huhardeaux at tootai.com>
-                        Benoit St-André
+                        Benoit St-André
                         Pierre Lachance <pl at pierrelachance.net>
 Galician                Rafael Varela <rafael.varela at usc.es>
                         Guillermo Mendez <guille at usc.es>
@@ -60,18 +61,27 @@ Hungarian               Robert Szokovacs
                         Gyula Szabo <gyufi at sztaki.hu>
 Indonesian              Slamin <slamin at unej.ac.id>
 Italian                 Gianrico Fichera <gianrico.fichera at itesys.it>
+                        Marko Djukic <marko at oblo.com>
+                        Fabio Pedretti <fabio.pedretti at ing.unibs.it>
+Japanese                Hiromi Kimura <hiromi at tac.tsukuba.ac.jp>
 Lithuanian              Darius Matuliauskas <darius at lnk.lt>
-                        Vilius Sumskas <vilius at lnk.lt>
+                        Vilius Å umskas <vilius at lnk.lt>
 Norwegian Nynorsk       Per-Stian Vatne <psv at orsta.org>
 Persian                 MetaNET Amirkabir <persian-horde at metanetworking.com>
 Polish                  Mariusz Zynel <mariusz at solaris-x86.org>
-Portuguese              João César Marigonda <joao at webnow.com.br>
+                        Piotr Adamcio <adamcios at o2.pl>
+                        Tadeusz Lesiecki <lesiecki at tmtsystem.pl>
+                        Piotr Tarnowski <drfugazi at drfugazi.eu.org>
+Portuguese              João César Marigonda <joao at webnow.com.br>
+                        Manuel Menezes de Sequeira <Manuel.Sequeira>
 Romanian                Marius Dragulescu <mariusd at urban-grafx.ro>
                         Eugen Hoanca <eugenh at urban-grafx.ro>
 Russian                 Illya Belov <belov at iop.irkps.ru>
 Slovak                  Ivan Noris <vix at vazka.sk>
+Slovenian               Duck <duck at obala.net>
 Spanish                 Manuel Perez Ayala <mayala at unex.es>
-Swedish                 Mattias Webjörn Eriksson <mattias at webjorn>
+Swedish                 Mattias Webjörn Eriksson <mattias at webjorn>
+Turkish                 Middle East Technical University <horde-tr at metu.edu.tr>
 =====================   ======================================================
 
 
@@ -89,7 +99,7 @@ Special thanks
   suggestions, and moral support.
 - Thanks to Tero Tapani Matinlassi for pointing out my bad coding when I
   rushed the realm changes into effect, and even providing the solution!
-- Thanks to Tjeerd van der Zee and Mattias Webjörn Eriksson for all their help
+- Thanks to Tjeerd van der Zee and Mattias Webjörn Eriksson for all their help
   and patience coding the LDAP support.
 - Thanks to Amith Varghese <amith at xalan.com> for various contributions
   including the LDAP binddn hook.
diff --git a/docs/INSTALL b/docs/INSTALL
index b1ab40a..0b6f49d 100644
--- a/docs/INSTALL
+++ b/docs/INSTALL
@@ -2,8 +2,8 @@
  Installing Passwd 3.0
 =======================
 
-:Last update:   $Date: 2005/08/25 07:28:53 $
-:Revision:      $Revision: 1.31 $
+:Last update:   $Date: 2008/10/09 17:12:04 $
+:Revision:      $Revision: 1.31.2.3 $
 :Contact:       sork at lists.horde.org
 
 .. contents:: Contents
@@ -66,13 +66,20 @@ To function properly, Passwd **requires** the following:
 
 2. The following PHP capabilities, depending on the drivers you want use:
 
-   a. LDAP support ``--with-ldap`` [OPTIONAL]
+   a. Character Type support ``--enable-ctype``
+
+   b. LDAP support ``--with-ldap`` [OPTIONAL]
 
       LDAP support is required for the kolab, ldap, and smbldap drivers.
 
-   b. Mhash support ``--with-mhash`` [OPTIONAL]
+   c. Mhash support ``--with-mhash`` [OPTIONAL]
 
-      Mhash support might be necessary for the LDAP drivers.  See `LDAP
+      Mhash support is necessary for the smbldap driver.  See `LDAP
+      Implementation Information`_ for details.
+
+   d. Mcrypt support ``--with-mcrypt`` [OPTIONAL]
+
+      Mcrypt support is necessary for the smbldap driver.  See `LDAP
       Implementation Information`_ for details.
 
 3. The following PEAR modules:
@@ -200,7 +207,6 @@ Security considerations
           this module with guest access if they choose to do so.
 
 
-
 Poppassd Server Software
 ========================
 
@@ -229,10 +235,10 @@ d. Crypt encrypted passwords
 e. MD5 encrypted passwords (using base64 encoding - md5-base64)
 f. SMD5 encrypted passwords
 
-The SHA, SSHA, MD5, and SMD5 encryption types will require the php mhash
-extension!  To enable this you must compile php with the
-``--with-mhash[=DIR]`` parameter to enable this extension. ``DIR`` is the
-mhash install directory.
+The smbldap extension require the php mhash and mcrypt extensions.  To
+enable these you must compile php with the ``--with-mhash[=DIR]`` and
+``--with-mcrypt[=DIR]`` parameters. ``DIR`` is the mhash or mcrypt
+install directory.
 
 Crypt cannot handle passwords longer than eight characters (it accepts them
 but truncates them at 8 characters).  If you want to use longer passwords, you
@@ -258,8 +264,8 @@ encryption using hex encoding (md5-hex).  If you created your passwords using
 the PHP md5() function then use md5-hex.
 
 
-Smbpasswd Implementaion Information
-===================================
+Smbpasswd Implementation Information
+====================================
 
 To use this module, you must pass the address of your Samba domain controller
 on which to change the password.  This can be "localhost" for the server that
@@ -298,6 +304,15 @@ For security reasons, it is generally suggested to use ssh rather than telnet
 for the transport, if possible.
 
 
+Expect PECL Information
+=======================
+
+This code allows users to change their passwords via the PHP PECL expect
+extension. It requires the PECL expect extension and a ssh program.
+
+You can find the extension on http://pecl.php.net/package/expect
+
+
 Obtaining Support
 =================
 
@@ -313,9 +328,8 @@ subscription information can be found at
 
   http://www.horde.org/mail/
 
-Lastly, Horde developers, contributors and users also make occasional
-appearances on IRC, on the channel #horde on the Freenode Network
-(irc.freenode.net).
+Lastly, Horde developers, contributors and users may also be found on IRC,
+on the channel #horde on the Freenode Network (irc.freenode.net).
 
 Please keep in mind that Passwd is free software written by volunteers.  For
 information on reasonable support expectations, please read
diff --git a/docs/RELEASE_NOTES b/docs/RELEASE_NOTES
index efc2090..21d53f2 100644
--- a/docs/RELEASE_NOTES
+++ b/docs/RELEASE_NOTES
@@ -17,53 +17,33 @@ $this->notes['fm']['focus'] = 5;
 /* Mailing list release notes. */
 $this->notes['ml']['changes'] = <<<ML
 The Horde Team is pleased to announce the final release of the Passwd Horde
-password changing application version H3 (3.0).
+password changing application version H3 (3.1).
 
 Passwd provides fairly complete support for changing passwords via Poppassd,
 LDAP, Unix expect scripts, the Unix smbpasswd command for SMB/CIFS passwords,
 Kolab, ADSI, Pine, Serv-U FTP, VMailMgr, vpopmail, and SQL passwords.
 
-The major changes compared to the Passwd version H3 (3.0-RC1) are:
-    * Added configuration switch to enable and disable domain realms.
-    * Added Slovak translation.
-    * Updated German translation.
+The major changes compared to Passwd version H3 (3.1-RC2) are:
+    * Fixed a bug in the procopen driver
 
-The major changes compared to the Passwd version H3 (3.0-BETA) are:
-    * Extended the expect script to allow setups with passwd as the login shell
-    * Display correct error message for failed passwords with LDAP drivers.
-    * Fixed updating of shadowlastchange attribute in LDAP driver.
-    * Updated documentation.
-    * Updated Finnish, French, Russian and Simplified Chinese translations.
-
-The major changes compared to the Passwd 2.x versions are:
-    * Compatible with Horde 3.
-    * New composite driver to change several passwords at once.
-    * New drivers: Kolab, Pine, proc_open(), Samba LDAP, and Windows (ADSI and
-      PSPASSWD)
-    * Additional password policy checks.
-    * TLS and SSL support for LDAP driver.
-    * Support for shadowLastChange and shadowMin LDAP attributes.
-    * Bind variables in SQL drivers.
-    * New translations: Catalan and Persian.
-    * More configuration options.
+The major changes compared to Passwd H3 (3.0) versions are:
+    * Added an HTTP web form driver
+    * Added expect support for sudo and for the PECL expect extension
+    * Added support for switching passwords from one encryption scheme
+      to another
+    * Better accessibility
+    * Added Turkish translation
 ML;
 
 /* Freshmeat release notes, not more than 600 characters. */
 $this->notes['fm']['changes'] = <<<FM
-This version is compatible with Horde 3.
-A new composite driver has been added, as well as Kolab, Pine, proc_open(),
-Samba, LDAP, and Windows drivers.
-Additional password policy checks have been added.
-TLS and SSL support, and support for shadowLastChange and shadowMin attributes
-have been added to the LDAP driver.
-Bind variables are used now in the SQL drivers.
-The expect script has been extended to allow setups with passwd as the login
-shell.
-Catalan, Persian and Slovak translations have been added.
-The documentation has been updated.
-More configuration options are available now.
+This release includes a new HTTP web form driver, support for sudo and the PECL
+expect extension in the expect driver, allows switching passwords from one
+encryption scheme to another, has better accessibility, and includes a new
+Turkish translation.
 FM;
 
 $this->notes['name'] = 'Passwd';
+$this->notes['list'] = 'sork';
 $this->notes['fm']['project'] = 'passwd';
 $this->notes['fm']['branch'] = 'Horde 3';
diff --git a/docs/TODO b/docs/TODO
index 3f9c8f7..984b4aa 100644
--- a/docs/TODO
+++ b/docs/TODO
@@ -2,8 +2,8 @@
  Passwd Development TODO List
 ==============================
 
-:Last update:   $Date: 2005/09/13 23:27:05 $
-:Revision:      $Revision: 1.13 $
+:Last update:   $Date: 2008/10/09 17:12:04 $
+:Revision:      $Revision: 1.13.2.1 $
 :Contact:       sork at lists.horde.org
 
 - There should be more error checking for various things, in particular sanity
diff --git a/docs/UPGRADING b/docs/UPGRADING
new file mode 100644
index 0000000..f17e0ae
--- /dev/null
+++ b/docs/UPGRADING
@@ -0,0 +1,33 @@
+=========================
+ Upgrading to Passwd 3.x
+=========================
+
+:Last update:   $Date: 2008/10/09 17:12:04 $
+:Revision:      $Revision: 1.3.2.1 $
+:Contact:       sork at lists.horde.org
+
+
+Upgrading to Passwd 3.1
+=======================
+
+Application Hooks
+-----------------
+
+All hooks that are specific to Passwd have been moved from the
+``horde/config/hooks.php`` file. Move your existing Passwd Hooks from there to
+``passwd/config/hooks.php``.
+
+New Hook Parameters
+-------------------
+
+The _passwd_hook_username hook is now passed an additional parameter, the
+Passwd_Driver_* object for the backend that you are changing the password on.
+This allows Passwd to support users being able to change passwords on multiple
+backends even when the different backends may have different requirements for
+the username (such as one requiring'user at example.com' while another only
+requiring 'user'). Additionally, the Passwd_Driver_composite driver also
+supports this functionality by checking for the existence of a parameter
+called 'be_username' in each of it's sub-drivers. If this parameter is
+present, its value overrides any other value of $userid it is passed. If you
+wish to use this functionality of the composite driver, look at the example
+_passwd_hook_username function in horde/config/hooks.php.dist.
diff --git a/index.php b/index.php
index 514e306..20ed959 100644
--- a/index.php
+++ b/index.php
@@ -1,16 +1,19 @@
 <?php
 /**
- * $Horde: passwd/index.php,v 1.15 2005/08/16 17:39:26 jan Exp $
+ * $Horde: passwd/index.php,v 1.15.2.5 2009/01/06 15:25:15 jan Exp $
  *
- * Copyright 2002-2005 Eric Jon Rostetter <eric.rostetter at physics.utexas.edu>
+ * Copyright 2002-2009 The Horde Project (http://www.horde.org/)
  *
- * See the enclosed file LICENSE for license information (ASL). If you
- * did not receive this file, see http://www.horde.org/asl.php.
+ * See the enclosed file COPYING for license information (GPL). If you
+ * did not receive this file, see http://www.horde.org/gpl.php.
+ *
+ * @author  Eric Rostetter <eric.rostetter at physics.utexas.edu>
+ * @package Passwd
  */
 
 @define('PASSWD_BASE', dirname(__FILE__));
-$passwd_configured = (@is_readable(PASSWD_BASE . '/config/conf.php') &&
-                      @is_readable(PASSWD_BASE . '/config/backends.php'));
+$passwd_configured = (is_readable(PASSWD_BASE . '/config/conf.php') &&
+                      is_readable(PASSWD_BASE . '/config/backends.php'));
 
 if (!$passwd_configured) {
     require PASSWD_BASE . '/../lib/Test.php';
diff --git a/lib/Driver.php b/lib/Driver.php
index 314a304..9c5aba9 100644
--- a/lib/Driver.php
+++ b/lib/Driver.php
@@ -3,12 +3,12 @@
  * Passwd_Driver:: defines an API for implementing password change systems for
  * Passwd.
  *
- * $Horde: passwd/lib/Driver.php,v 1.44 2005/08/24 05:47:53 selsky Exp $
+ * $Horde: passwd/lib/Driver.php,v 1.44.2.10 2009/01/06 15:25:15 jan Exp $
  *
- * Copyright 2000-2005 Horde Project (http://www.horde.org/)
+ * Copyright 2000-2009 The Horde Project (http://www.horde.org/)
  *
- * See the enclosed file LICENSE for license information (ASL). If you
- * did not receive this file, see http://www.horde.org/licenses/asl.php.
+ * See the enclosed file COPYING for license information (GPL). If you
+ * did not receive this file, see http://www.horde.org/licenses/gpl.php.
  *
  * @author  Mike Cochrane <mike at graftonhall.co.nz>
  * @author  Eric Rostetter <eric.rostetter at physics.utexas.edu>
@@ -44,16 +44,32 @@ class Passwd_Driver {
     /**
      * Compare a plaintext password with an encrypted password.
      *
-     * @return boolean  True is they match, False if they differ
+     * @return mixed  True if they match, PEAR_Error if they differe.
      */
     function comparePasswords($encrypted, $plaintext)
     {
-        return ($encrypted == Auth::getCryptedPassword($plaintext,
-                                                       $encrypted,
-                                                       $this->_params['encryption'],
-                                                       $this->_params['show_encryption'])) ?
-            true :
-            PEAR::raiseError(_("Incorrect Password"));
+        if (preg_match('/^{[^}]+}/', $encrypted, $match)) {
+            $encrypted = substr($encrypted, strlen($match[0]));
+            $encryption = strtolower(substr($match[0], 1, strlen($match[0]) - 2));
+            if ($this->_params['driver'] == 'ldap' && $encryption == 'md5') {
+                $encryption = 'md5-base64';
+            }
+        } else {
+            $encryption = $this->_params['encryption'];
+        }
+
+        $hashed = Auth::getCryptedPassword($plaintext,
+                                           $encrypted,
+                                           $encryption,
+                                           false);
+
+        if ($this->_params['show_encryption']) {
+            /* Convert the hashing algorithm in both strings to uppercase. */
+            $encrypted = preg_replace('/^({.*?})/e', "String::upper('\\1')", $encrypted);
+            $hashed = preg_replace('/^({.*?})/e', "String::upper('\\1')", $hashed);
+        }
+
+        return ($encrypted == $hashed) ? true : PEAR::raiseError(_("Incorrect old password."));
     }
 
     /**
@@ -101,50 +117,16 @@ class Passwd_Driver {
      * @return mixed  The newly created concrete Passwd_Driver
      *                instance, or false on an error.
      */
-    function &factory($driver, $params = array())
+    function factory($driver, $params = array())
     {
         $driver = basename($driver);
         require_once dirname(__FILE__) . '/Driver/' . $driver . '.php';
         $class = 'Passwd_Driver_' . $driver;
         if (class_exists($class)) {
-            return $ret = &new $class($params);
+            return new $class($params);
         } else {
             Horde::fatal(PEAR::raiseError(sprintf(_("No such backend \"%s\" found."), $driver)), __FILE__, __LINE__);
         }
     }
 
-    /**
-     * Attempts to return a reference to a concrete Passwd_Driver
-     * instance based on $driver. It will only create a new instance
-     * if no Passwd_Driver instance with the same parameters currently
-     * exists.
-     *
-     * This should be used if multiple storage sources are required.
-     *
-     * This method must be invoked as: $var = &Passwd_Driver::singleton();
-     *
-     * @param string $driver  The type of concrete Passwd_Driver subclass
-     *                        to return.  The is based on the passwd
-     *                        driver ($driver).  The code is dynamically
-     *                        included.
-     *
-     * @param array  $params  (optional) A hash containing any additional
-     *                        configuration or connection parameters a
-     *                        subclass might need.
-     *
-     * @return mixed  The created concrete Passwd_Driver instance, or false
-     *                on error.
-     */
-    function &singleton($driver, $params = array())
-    {
-        static $instances = array();
-
-        $signature = serialize(array($driver, $params));
-        if (!isset($instances[$signature])) {
-            $instances[$signature] = &Passwd_Driver::factory($driver, $params);
-        }
-
-        return $instances[$signature];
-    }
-
 }
diff --git a/lib/Driver/adsi.php b/lib/Driver/adsi.php
index 71fe9b5..f09e122 100644
--- a/lib/Driver/adsi.php
+++ b/lib/Driver/adsi.php
@@ -30,12 +30,12 @@
  * Backend parameters:
  * target = Target Windows machine/domain name (Required)
  *
- * $Horde: passwd/lib/Driver/adsi.php,v 1.4 2005/08/23 11:15:06 jan Exp $
+ * $Horde: passwd/lib/Driver/adsi.php,v 1.4.2.5 2009/01/06 15:25:23 jan Exp $
  *
- * Copyright 2004-2005 Horde Project (http://www.horde.org/)
+ * Copyright 2004-2009 The Horde Project (http://www.horde.org/)
  *
- * See the enclosed file LICENSE for license information (ASL). If you
- * did not receive this file, see http://www.horde.org/licenses/asl.php.
+ * See the enclosed file COPYING for license information (GPL). If you
+ * did not receive this file, see http://www.horde.org/licenses/gpl.php.
  *
  * @author  Luiz R Malheiros <malheiros at gmail.com>
  * @since   Passwd 3.0
diff --git a/lib/Driver/composite.php b/lib/Driver/composite.php
index 8be6f62..c4d7e2f 100644
--- a/lib/Driver/composite.php
+++ b/lib/Driver/composite.php
@@ -3,12 +3,12 @@
  * The composite class chains other drivers together to change and a user's
  * password stored on various backends.
  *
- * $Horde: passwd/lib/Driver/composite.php,v 1.7 2005/08/23 11:15:06 jan Exp $
+ * $Horde: passwd/lib/Driver/composite.php,v 1.7.2.7 2009/01/06 15:25:23 jan Exp $
  *
- * Copyright 2003-2005 Horde Project (http://www.horde.org/)
+ * Copyright 2003-2009 The Horde Project (http://www.horde.org/)
  *
- * See the enclosed file LICENSE for license information (ASL). If you
- * did not receive this file, see http://www.horde.org/licenses/asl.php.
+ * See the enclosed file COPYING for license information (GPL). If you
+ * did not receive this file, see http://www.horde.org/licenses/gpl.php.
  *
  * @author  Max Kalika <max at horde.org>
  * @since   Passwd 3.0
@@ -19,7 +19,7 @@ class Passwd_Driver_composite extends Passwd_Driver {
     /**
      * Hash of instantiated drivers.
      *
-     * @var array 
+     * @var array
      */
     var $_drivers = array();
 
@@ -57,10 +57,8 @@ class Passwd_Driver_composite extends Passwd_Driver {
 
         foreach ($this->_params['drivers'] as $key => $settings) {
             if (!array_key_exists($key, $this->_drivers)) {
-
-                $res = &Passwd_Driver::factory($settings['driver'],
-                                               $settings['params']);
-
+                $res = Passwd_Driver::factory($settings['driver'],
+                                              $settings['params']);
                 if (is_a($res, 'PEAR_Error')) {
                     return PEAR::raiseError(sprintf(_("%s: unable to load driver: %s"),
                                                     $key, $res->getMessage()));
@@ -93,10 +91,15 @@ class Passwd_Driver_composite extends Passwd_Driver {
         }
 
         foreach ($this->_drivers as $key => $driver) {
-            $res = $driver->changePassword($username, $old_password,
+            if (isset($driver->_params['be_username'])) {
+                $user = $driver->_params['be_username'];
+            } else {
+                $user = $username;
+            }
+            $res = $driver->changePassword($user, $old_password,
                                            $new_password);
             if (is_a($res, 'PEAR_Error')) {
-                $res = PEAR::raiseError(sprintf(_("Failure in changing password on %s: %s"),
+                $res = PEAR::raiseError(sprintf(_("Failure in changing password for %s: %s"),
                                                 $this->_params['drivers'][$key]['name'],
                                                 $res->getMessage()), 'horde.error');
                 if (!empty($this->_params['drivers'][$key]['required'])) {
diff --git a/lib/Driver/expect.php b/lib/Driver/expect.php
index 2da569e..aa92d2d 100644
--- a/lib/Driver/expect.php
+++ b/lib/Driver/expect.php
@@ -3,14 +3,14 @@
  * The Passwd_expect class provides an expect implementation of the passwd
  * system.
  *
- * $Horde: passwd/lib/Driver/expect.php,v 1.20 2005/08/23 11:15:06 jan Exp $
+ * $Horde: passwd/lib/Driver/expect.php,v 1.20.2.5 2009/01/06 15:25:23 jan Exp $
  *
- * Copyright 2000-2005 Gaudenz Steinlin <gaudenz at soziologie.ch>
+ * Copyright 2000-2009 The Horde Project (http://www.horde.org/)
  *
- * See the enclosed file LICENSE for license information (ASL). If you
- * did not receive this file, see http://www.horde.org/licenses/asl.php.
+ * See the enclosed file COPYING for license information (GPL). If you
+ * did not receive this file, see http://www.horde.org/licenses/gpl.php.
  *
- * @author  Gaudenz Steinlin <gaudenz.steinlin at id.unibe.ch>
+ * @author  Gaudenz Steinlin <gaudenz at soziologie.ch>
  * @since   Passwd 2.2
  * @package Passwd
  */
diff --git a/lib/Driver/expectpecl.php b/lib/Driver/expectpecl.php
new file mode 100644
index 0000000..4cdfaa1
--- /dev/null
+++ b/lib/Driver/expectpecl.php
@@ -0,0 +1,145 @@
+<?php
+/**
+ * The Passwd_expectpecl class provides an PECL expect implementation of the
+ * Passwd system.
+ *
+ * $Horde: passwd/lib/Driver/expectpecl.php,v 1.5.2.1 2008/10/09 17:12:04 jan Exp $
+ *
+ * Copyright 2006-2007 Duck <duck at obala.net>
+ *
+ * See the enclosed file COPYING for license information (GPL). If you
+ * did not receive this file, see http://www.horde.org/licenses/gpl.php.
+ *
+ * @author  Duck <duck at obala.net>
+ * @since   Passwd 3.1
+ * @package Passwd
+ */
+class Passwd_Driver_expectpecl extends Passwd_Driver {
+
+    /**
+     * Expect connection handle.
+     *
+     * @var resource
+     */
+    var $_stream;
+
+    /**
+     * Handles expect communication.
+     *
+     * @param string $expect  String to expect
+     * @param string $error   Error message
+     *
+     * @return boolean|PEAR_Error  True on success, PEAR_Error on failure
+     */
+    function ctl($expect, $error)
+    {
+        $cases = array(array(0 => $expect,
+                             1 => 'ok',
+                             2 => EXP_REGEXP));
+
+        $result = expect_expectl($this->_stream, $cases);
+
+        switch ($result) {
+        case EXP_EOF:
+            return PEAR::raiseError(_("End of file."));
+            break;
+        case EXP_TIMEOUT:
+            return PEAR::raiseError(_("Time out."));    
+            break;
+        case EXP_FULLBUFFER:
+            return PEAR::raiseError(_("Full buffer."));
+            break;
+        case 'ok':
+            return true;
+            break;
+        default:
+            return PEAR::raiseError($error);
+            break;
+        }
+    }
+
+    /**
+     * Changes the users password by executing an expect script.
+     *
+     * @param string $user          User ID.
+     * @param string $old_password  Old password.
+     * @param string $new_password  New password.
+     *
+     * @return boolean  True on success, false or error message on error.
+     */
+    function changePassword($user, $old_password, $new_password)
+    {
+        if (!Util::loadExtension('expect')) {
+            return PEAR::raiseError(sprintf(_("%s extension cannot be loaded!"), 'expect'));
+        }
+
+        // Set up parameters
+        if (isset($this->_params['timeout'])) {
+            ini_set('expect.timeout', $this->_params['timeout']);
+        }
+        if (isset($this->_params['loguser'])) {
+            ini_set('expect.loguser', $this->_params['loguser']);
+        }
+        if (isset($this->_params['logfile'])) {
+            ini_set('expect.logfile', $this->_params['logfile']);
+        }
+
+        // Open connection
+        $call = sprintf('ssh %s@%s %s',
+                        $user,
+                        $this->_params['host'],
+                        $this->_params['program']);
+        if (!($this->_stream = expect_popen($call))) {
+            return PEAR::raiseError(_("Unable to open expect stream!"));
+        }
+
+        // Log in
+        $result = $this->ctl('(P|p)assword.*',
+                             _("Could not login to system (no password prompt)"));
+        if (is_a($result, 'PEAR_Error')) {
+            return $result;
+        }
+
+        // Send login password
+        fwrite($this->_stream, "$old_password\n");
+
+        // Expect old password prompt
+        $result = $this->ctl('((O|o)ld|login|current).* (P|p)assword.*',
+                             _("Could not start passwd program (no old password prompt)"));
+        if (is_a($result, 'PEAR_Error')) {
+            return $result;
+        }
+
+        // Send old password
+        fwrite($this->_stream, "$old_password\n");
+
+        // Expect new password prompt
+        $result = $this->ctl('(N|n)ew.* (P|p)assword.*',
+                             _("Could not change password (bad old password?)"));
+        if (is_a($result, 'PEAR_Error')) {
+            return $result;
+        }
+
+        // Send new password
+        fwrite($this->_stream, "$new_password\n");
+
+        // Expect reenter password prompt
+        $result = $this->ctl("((R|r)e-*enter.*(P|p)assword|Retype new( UNIX)? password|(V|v)erification|(V|v)erify|(A|a)gain).*",
+                           _("New password not valid (too short, bad password, too similar, ...)"));
+        if (is_a($result, 'PEAR_Error')) {
+            return $result;
+        }
+
+        // Send new password
+        fwrite($this->_stream, "$new_password\n");
+
+        // Expect successfully message
+        $result = $this->ctl('((P|p)assword.* changed|successfully)',
+                             _("Could not change password."));
+        if (is_a($result, 'PEAR_Error')) {
+            return $result;
+        }
+
+        return $result;
+    }
+}
diff --git a/lib/Driver/http.php b/lib/Driver/http.php
new file mode 100644
index 0000000..140c643
--- /dev/null
+++ b/lib/Driver/http.php
@@ -0,0 +1,80 @@
+<?php
+/**
+ * The http driver attempts to change a user's password via a web based
+ * interface and implements the Passwd_Driver API.
+ *
+ * $Horde: passwd/lib/Driver/http.php,v 1.8.2.3 2009/01/06 15:25:23 jan Exp $
+ *
+ * Copyright 2000-2009 The Horde Project (http://www.horde.org/)
+ *
+ * See the enclosed file COPYING for license information (GPL). If you
+ * did not receive this file, see http://www.horde.org/licenses/gpl.php.
+ *
+ * @author  Michael Rubinsky <mrubinsk at horde.org>
+ * @package Passwd
+ * @since   Passwd 3.1
+ */
+class Passwd_Driver_http extends Passwd_Driver {
+
+    /**
+     * Constructs a new Passwd_Driver_http object.
+     *
+     * @param array $params  A hash containing connection parameters.
+     */
+    function Passwd_Driver_http($params = array())
+    {
+        $this->_params = $params;
+    }
+
+    /**
+     * Change the user's password.
+     *
+     * @param string $username      The user for which to change the password.
+     * @param string $old_password  The old (current) user password.
+     * @param string $new_password  The new user password to set.
+     *
+     * @return mixed  True on success or PEAR_Error on failure.
+     */
+    function changePassword($username,  $old_password, $new_password)
+    {
+        require_once 'HTTP/Request.php';
+
+        $req = new HTTP_Request($this->_params['url']);
+        $req->setMethod(HTTP_REQUEST_METHOD_POST);
+
+        // Add the required fields that most web-based forms would use.
+        $req->addPostData($this->_params['username'], $username);
+        $req->addPostData($this->_params['oldPasswd'], $old_password);
+        $req->addPostData($this->_params['passwd1'], $new_password);
+        $req->addPostData($this->_params['passwd2'], $new_password);
+
+        // Now add any fields that were passed in _params['fields'].
+        foreach ($this->_params['fields'] as $fieldName => $fieldValue) {
+            $req->addPostData($fieldName, $fieldValue);
+        }
+
+        // Send the request
+        $result = $req->sendRequest();
+        if (is_a($result, 'PEAR_Error')) {
+            return $result;
+        }
+
+        // Make sure we have a good response code
+        $responseCode = $req->getResponseCode();
+        if ($responseCode != 200) {
+            return PEAR::raiseError(_("The requested website for changing user passwords could not be reached."));
+        }
+
+        // We got *some* response from the server, so get the content and
+        // let's see if we can't figure out if  it was a success or not.
+        $responseBody = $req->getResponseBody();
+        if (strpos($responseBody, $this->_params['eval_results']['badPass'])) {
+            return PEAR::raiseError(_("Incorrect old password."));
+        } elseif (strpos($responseBody, $this->_params['eval_results']['badUser'])) {
+            return PEAR::raiseError(_("The username could not be found."));
+        } elseif (!strpos($responseBody, $this->_params['eval_results']['success'])) {
+            return PEAR::raiseError(_("Your password could not be changed."));
+        }
+        return true;
+    }
+}
diff --git a/lib/Driver/kolab.php b/lib/Driver/kolab.php
index af30960..af118ba 100644
--- a/lib/Driver/kolab.php
+++ b/lib/Driver/kolab.php
@@ -3,12 +3,12 @@
  * The Kolab class attempts to change a user's password on the designated
  * Kolab backend. Based off the LDAP passwd class.
  *
- * $Horde: passwd/lib/Driver/kolab.php,v 1.2 2005/08/23 11:15:06 jan Exp $
+ * $Horde: passwd/lib/Driver/kolab.php,v 1.2.2.9 2009/01/06 15:25:23 jan Exp $
  *
- * Copyright 2005 Horde Project (http://www.horde.org/)
+ * Copyright 2005-2009 The Horde Project (http://www.horde.org/)
  *
- * See the enclosed file LICENSE for license information (ASL). If you
- * did not receive this file, see http://www.horde.org/licenses/asl.php.
+ * See the enclosed file COPYING for license information (GPL). If you
+ * did not receive this file, see http://www.horde.org/licenses/gpl.php.
  *
  * @author  Stuart Bingë <skbinge at gmail.com>
  * @since   Passwd 3.0
@@ -43,19 +43,25 @@ class Passwd_Driver_kolab extends Passwd_Driver {
             $GLOBALS['conf']['kolab']['ldap']['port']
         );
         if (!$ds) {
-            return PEAR::raiseError(_("Could not connect to ldap server"));
+            return PEAR::raiseError(_("Could not connect to LDAP server"));
         }
 
         ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);
 
-        // Bind anonymously.
-        $result = @ldap_bind($ds);
+        // Bind anonymously, or use the phpdn user if available.
+        if (!empty($GLOBALS['conf']['kolab']['ldap']['phpdn'])) {
+            $phpdn = $GLOBALS['conf']['kolab']['ldap']['phpdn'];
+            $phppw = $GLOBALS['conf']['kolab']['ldap']['phppw'];
+            $result = @ldap_bind($ds, $phpdn, $phppw);
+        } else {
+            $result = @ldap_bind($ds);
+        }
         if (!$result) {
-            return PEAR::raiseError(_("Could not bind to ldap server"));
+            return PEAR::raiseError(_("Could not bind to LDAP server"));
         }
 
         // Make sure we're using the full user at domain format.
-        if (strstr('@', $username) === false) {
+        if (strstr($username, '@') === false) {
             $username .= '@' . $GLOBALS['conf']['kolab']['imap']['maildomain'];
         }
 
@@ -75,7 +81,7 @@ class Passwd_Driver_kolab extends Passwd_Driver {
         // Connect as the user.
         $result = @ldap_bind($ds, $userdn, $old_password);
         if (!$result) {
-            return PEAR::raiseError(_("Incorrect Password"));
+            return PEAR::raiseError(_("Incorrect old password."));
         }
 
         // And finally change the password.
diff --git a/lib/Driver/ldap.php b/lib/Driver/ldap.php
index 944fa5e..f6766c6 100644
--- a/lib/Driver/ldap.php
+++ b/lib/Driver/ldap.php
@@ -3,12 +3,12 @@
  * The LDAP class attempts to change a user's password stored in an LDAP
  * directory service.
  *
- * $Horde: passwd/lib/Driver/ldap.php,v 1.41 2005/09/22 09:48:04 jan Exp $
+ * $Horde: passwd/lib/Driver/ldap.php,v 1.41.2.7 2009/01/21 19:46:56 chuck Exp $
  *
- * Copyright 2000-2005 Horde Project (http://www.horde.org/)
+ * Copyright 2000-2009 The Horde Project (http://www.horde.org/)
  *
- * See the enclosed file LICENSE for license information (ASL). If you
- * did not receive this file, see http://www.horde.org/licenses/asl.php.
+ * See the enclosed file COPYING for license information (GPL). If you
+ * did not receive this file, see http://www.horde.org/licenses/gpl.php.
  *
  * @author  Mike Cochrane <mike at graftonhall.co.nz>
  * @author  Tjeerd van der Zee <admin at xar.nl>
@@ -23,7 +23,7 @@ class Passwd_Driver_ldap extends Passwd_Driver {
      *
      * @var resource
      */
-    var $_ds;
+    var $_ds = false;
 
     /**
      * Constructs a new Passwd_Driver_ldap object.
@@ -32,21 +32,27 @@ class Passwd_Driver_ldap extends Passwd_Driver {
      */
     function Passwd_Driver_ldap($params = array())
     {
-        $this->_params = array_merge(array('host' => 'localhost',
-                                           'sslhost' => '',
-                                           'port' => 389,
-                                           'encryption' => 'crypt',
-                                           'show_encryption' => 'true',
-                                           'uid' => 'uid',
-                                           'basedn' => '',
-                                           'admindn' => null,
-                                           'adminpw' => null,
-                                           'realm' => '',
-                                           'tls' => null,
-                                           'attribute' => 'userPassword',
-                                           'shadowlastchange' => null,
-                                           'shadowmin' => null),
-                                     $params);
+        $this->_params = array_merge(
+            array('host' => 'localhost',
+                  'port' => 389,
+                  'encryption' => 'crypt',
+                  'show_encryption' => 'true',
+                  'uid' => 'uid',
+                  'basedn' => '',
+                  'admindn' => '',
+                  'adminpw' => '',
+                  'realm' => '',
+                  'filter' => '',
+                  'tls' => false,
+                  'attribute' => 'userPassword',
+                  'shadowlastchange' => 'shadowLastChange',
+                  'shadowmin' => 'shadowMin'),
+            $params);
+
+        if (!empty($this->_params['tls']) &&
+            empty($this->_params['sslhost'])) {
+            $this->_params['sslhost'] = $this->_params['host'];
+        }
     }
 
     /**
@@ -55,221 +61,139 @@ class Passwd_Driver_ldap extends Passwd_Driver {
      *
      * @param string $userdn       The dn to use when binding non-anonymously.
      * @param string $oldpassword  The password for $userdn.
-     * @param boolean $ssl         The SSL trigger.
      *
      * @return boolean  True or False based on success of connect and bind.
      */
-    function _connect($userdn = null, $password = null, $ssl = false)
+    function _connect()
     {
-        if ($ssl && empty($this->_params['tls'])) {
+        // See if we already have an open connection
+        if ($this->_ds) {
+            return true;
+        }
+
+        if (!empty($this->_params['sslhost']) && empty($this->_params['tls'])) {
             $this->_ds = ldap_connect('ldaps://' . $this->_params['sslhost']);
         } else {
             $this->_ds = ldap_connect($this->_params['host'], $this->_params['port']);
         }
         if (!$this->_ds) {
-            return PEAR::raiseError(_("Could not connect to ldap server"));
+            return PEAR::raiseError(_("Could not connect to LDAP server"));
         }
 
         if (ldap_set_option($this->_ds, LDAP_OPT_PROTOCOL_VERSION, 3) &&
             $this->_params['tls']) {
             if (!ldap_start_tls($this->_ds)) {
-                return PEAR::raiseError(_("ldap_start_tls failed"));
+                return PEAR::raiseError(_("Could not start TLS connection to LDAP server"));
             }
         }
 
-        $result = false;
-        if (!is_null($this->_params['admindn'])) {
-            // If we have an admindn, try to bind as admin.
-            $result = @ldap_bind($this->_ds, $this->_params['admindn'], $this->_params['adminpw']);
-        } else {
-            // Try to bind as the current userdn with password.
-            if (!is_null($userdn)) {
-                $result = @ldap_bind($this->_ds, $userdn, $password);
-            } else {
-                $result = @ldap_bind($this->_ds);
-            }
-        }
-
-        // If none of the bind attempts succeed, return error.
-        if (!$result) {
-            return PEAR::raiseError(_("Could not bind to ldap server"));
-        }
-
         return true;
     }
 
+
     /**
-     * Looks up and returns the user's dn.
+     * Bind (or re-bind) to an LDAP server with the given credentials.
      *
-     * @param string $user    The username of the user.
-     * @param string $passw   The password of the user.
-     * @param string $realm   The realm (domain) name of the user.
-     * @param string $basedn  The ldap basedn.
-     * @param string $uid     The ldap uid.
+     * @param string $userdn    Bind DN
+     * @param string $password  Bind password
      *
-     * @return string  The ldap dn for the user.
+     * @return mixed            True on success; PEAR_Error on error
      */
-    function _lookupdn($user, $passw)
+    function _bind($userdn = '', $password = '')
     {
-        // Construct username at realm to connect as if 'realm' parameter is set.
-        $urealm = '';
-        if (!empty($this->_params['realm'])) {
-            $urealm = $user . '@' . $this->_params['realm'];
-        }
-
-        // Bind as current user. _connect will try as guest if no user realm
-        // is found or auth error.
-        $this->_connect($urealm, $passw);
-
-        // Construct search.
-        $search = $this->_params['uid'] . '=' . $user;
-
-        // Get userdn.
-        $result = ldap_search($this->_ds, $this->_params['basedn'], $search);
-        $entry = ldap_first_entry($this->_ds, $result);
-        if ($entry === false) {
-            return PEAR::raiseError(_("User not found."));
+        $result = false;
+        // Try to bind as the current userdn with password.
+         if (!empty($userdn)) {
+            $result = @ldap_bind($this->_ds, $userdn, $password);
+        } else {
+            $result = @ldap_bind($this->_ds);
         }
 
-        // If we used admin bindings, we have to check the password here.
-        if (!is_null($this->_params['admindn'])) {
-            $ldappasswd = ldap_get_values($this->_ds, $entry,
-                                          $this->_params['attribute']);
-            $result = $this->comparePasswords($ldappasswd[0], $passw);
-            if (is_a($result, 'PEAR_Error')) {
-                return $result;
-            }
+        // If none of the bind attempts succeed, return error.
+        if (!$result) {
+            return PEAR::raiseError(_("Could not bind to LDAP server"));
         }
-
-        return ldap_get_dn($this->_ds, $entry);
     }
 
     /**
-     * Checks for shadowLastChange and shadowMin support and returns their
-     * values.
+     * Changes the user's password.
      *
-     * @param string $user   The username of the user.
-     * @param string $passw  The password of the user.
+     * @param string $username      The user for which to change the password.
+     * @param string $old_password  The old (current) user password.
+     * @param string $new_password  The new user password to set.
      *
-     * @return array  Hash with keys being "shadowlastchange" and "shadowmin"
-     *                and containing their respective values or false for no
-     *                support.
+     * @return boolean  True or PEAR_Error based on success of the change.
      */
-    function _lookupShadow($user, $passw)
+    function changePassword($username, $old_password, $new_password)
     {
-        // Init the return array
-        $lookupshadow = array('shadowlastchange' => false,
-                              'shadowmin' => false);
-
-        // Construct username at realm to connect as if 'realm' parameter is set.
-        $urealm = $user;
-        if (!empty($this->_params['realm'])) {
-            $urealm .= '@' . $this->_params['realm'];
+        // See if the old password matches before allowing the change
+        if ($old_password !== Auth::getCredential('password')) {
+            return PEAR::raiseError(_("Incorrect old password."));
         }
 
-        // Bind as current user. _connect will try as guest if no user realm
-        // is found or auth error.
-        $this->_connect($urealm, $passw);
-
-        // Construct search.
-        $search = $this->_params['uid'] . '=' . $user;
-
-        // Get userdn.
-        $result = ldap_search($this->_ds, $this->_params['basedn'], $search);
-        $entry = ldap_first_entry($this->_ds, $result);
-        if ($entry !== false) {
-            $information = ldap_get_values($this->_ds, $entry,
-                                           $this->_params['shadowlastchange']);
-            if ($information) {
-                $lookupshadow['shadowlastchange'] = $information[0];
-            }
-
-            $information = ldap_get_values($this->_ds, $entry,
-                                           $this->_params['shadowmin']);
-            if ($information) {
-                $lookupshadow['shadowmin'] = $information[0];
-            }
+        // Append realm as username at realm if 'realm' parameter is set.
+        if (!empty($this->_params['realm'])) {
+            $username .= '@' . $this->_params['realm'];
         }
 
-        return $lookupshadow;
-    }
-
-    /**
-     * Returns the user's DN.
-     *
-     * @access protected
-     *
-     * @param string $username      The user for which to change the password.
-     * @param string $old_password  The old (current) user password.
-     *
-     * @return string  The user's DN or a PEAR_Error.
-     */
-    function _userDN($username, $old_password)
-    {
+        // Get the user's dn.
         if ($GLOBALS['conf']['hooks']['userdn']) {
             $userdn = Horde::callHook('_passwd_hook_userdn',
-                                      array(Auth::getAuth()));
+                                      array(Auth::getAuth()),
+                                      'passwd');
         } else {
-            $userdn = $this->_lookupdn($username, $old_password);
+            $userdn = $this->_lookupdn($username);
             if (is_a($userdn, 'PEAR_Error')) {
                 return $userdn;
             }
         }
 
-        // Construct username at realm to connect if 'realm' parameter is set.
-        // Looks like the _passwd_hook_username hook, but here we use a
-        // configurable parameter as realm.  This is a safeguard that if
-        // unable to lookup the user's DN we still have a chance to
-        // authenticate.
-        if (empty($userdn) && !empty($this->_params['realm'])) {
-            $userdn = $username . '@' . $this->_params['realm'];
+        // Connect as the admin DN if configured; otherwise as the user
+        if (!empty($this->_params['admindn'])) {
+            $result = $this->_bind($this->_params['admindn'],
+                                   $this->_params['adminpw']);
+        } else {
+            $result = $this->_bind($userdn, $old_password);
         }
 
-        return $userdn;
-    }
+        if (is_a($result, 'PEAR_Error')) {
+            return $result;
+        }
 
-    /**
-     * Changes the user's password.
-     *
-     * @param string $username      The user for which to change the password.
-     * @param string $old_password  The old (current) user password.
-     * @param string $new_password  The new user password to set.
-     *
-     * @return boolean  True or PEAR_Error based on success of the change.
-     */
-    function changePassword($username, $old_password, $new_password)
-    {
-        // Get the user's dn.
-        $userdn = $this->_userDN($username, $old_password);
-        if (is_a($userdn, 'PEAR_Error')) {
-            return $userdn;
+        // Get existing user information
+        $result = ldap_read($this->_ds, $userdn, 'objectClass=*');
+        $entry = ldap_first_entry($this->_ds, $result);
+        if ($entry === false) {
+            return PEAR::raiseError(_("User not found."));
         }
 
-        if (!is_null($this->_params['shadowlastchange'])) {
-            $lookupshadow = $this->_lookupShadow($username, $old_password);
+        // Init the shadow policy array
+        $lookupshadow = array('shadowlastchange' => false,
+                              'shadowmin' => false);
 
-            // Check if we may change the password
-            if ($lookupshadow['shadowlastchange'] &&
-                $lookupshadow['shadowmin'] &&
-                ($lookupshadow['shadowlastchange'] + $lookupshadow['shadowmin'] > (time() / 86400))) {
-                return PEAR::raiseError(_("Minimum password age has not yet expired"));
-            }
+        $information = @ldap_get_values($this->_ds, $entry,
+                                        $this->_params['shadowlastchange']);
+        if ($information) {
+            $lookupshadow['shadowlastchange'] = $information[0];
         }
 
-        // Connect as the user.
-        $result = $this->_connect($userdn, $old_password,
-                                  !empty($this->_params['sslhost']));
-        if (is_a($result, 'PEAR_Error')) {
-            if ($result->getMessage() == _("Could not bind to ldap server")) {
-                return PEAR::raiseError(_("Incorrect Password"));
-            }
-            return $result;
+        $information = @ldap_get_values($this->_ds, $entry,
+                                        $this->_params['shadowmin']);
+        if ($information) {
+            $lookupshadow['shadowmin'] = $information[0];
+        }
+
+        // Check if we may change the password
+        if ($lookupshadow['shadowlastchange'] &&
+            $lookupshadow['shadowmin'] &&
+            ($lookupshadow['shadowlastchange'] + $lookupshadow['shadowmin'] > (time() / 86400))) {
+            return PEAR::raiseError(_("Minimum password age has not yet expired"));
         }
 
         // Change the user's password and update lastchange
         $new_details[$this->_params['attribute']] = $this->encryptPassword($new_password);
 
-        if (!is_null($this->_params['shadowlastchange']) &&
+        if (!empty($this->_params['shadowlastchange']) &&
             $lookupshadow['shadowlastchange']) {
             $new_details[$this->_params['shadowlastchange']] = floor(time() / 86400);
         }
@@ -278,7 +202,53 @@ class Passwd_Driver_ldap extends Passwd_Driver {
             return PEAR::raiseError(ldap_error($this->_ds));
         }
 
+        // Update the stored credential within the session
+        Auth::setCredential('password', $new_password);
+
         return true;
     }
 
+    /**
+     * Looks up and returns the user's dn.
+     *
+     * @param string $user    The username of the user.
+     * @param string $passw   The password of the user.
+     * @param string $realm   The realm (domain) name of the user.
+     * @param string $basedn  The ldap basedn.
+     * @param string $uid     The ldap uid.
+     *
+     * @return string  The ldap dn for the user.
+     */
+    function _lookupdn($user)
+    {
+        // Bind as current user. _connect will try as guest if no user realm
+        // is found or auth error.
+        $result = $this->_connect();
+        if (is_a($result, 'PEAR_Error')) {
+            return $result;
+        }
+
+        // Search as an admin if so configured
+        if (!empty($this->_params['admindn'])) {
+            $this->_bind($this->_params['admindn'], $this->_params['adminpw']);
+        } else {
+            $this->_bind();
+        }
+
+        // Construct search.
+        $search = '(' . $this->_params['uid'] . '=' . $user . ')';
+
+        if (!empty($this->_params['filter'])) {
+            $search = '(&' . $search . '(' .  $this->_params['filter'] . '))';
+        }
+
+        // Get userdn.
+        $result = ldap_search($this->_ds, $this->_params['basedn'], $search);
+        $entry = ldap_first_entry($this->_ds, $result);
+        if ($entry === false) {
+            return PEAR::raiseError(_("User not found."));
+        }
+
+        return ldap_get_dn($this->_ds, $entry);
+    }
 }
diff --git a/lib/Driver/pine.php b/lib/Driver/pine.php
index 362c1b8..a320c1c 100644
--- a/lib/Driver/pine.php
+++ b/lib/Driver/pine.php
@@ -19,12 +19,12 @@ define('TABSZ', LASTCH - FIRSTCH + 1);
  * The pine class attempts to change a user's password on a in a pine password
  * file.
  *
- * $Horde: passwd/lib/Driver/pine.php,v 1.9 2005/08/23 11:15:06 jan Exp $
+ * $Horde: passwd/lib/Driver/pine.php,v 1.9.2.5 2009/01/06 15:25:23 jan Exp $
  *
- * Copyright 2003-2005 Horde Project (http://www.horde.org/)
+ * Copyright 2003-2009 The Horde Project (http://www.horde.org/)
  *
- * See the enclosed file LICENSE for license information (ASL). If you
- * did not receive this file, see http://www.horde.org/licenses/asl.php.
+ * See the enclosed file COPYING for license information (GPL). If you
+ * did not receive this file, see http://www.horde.org/licenses/gpl.php.
  *
  * @author  Max Kalika <max at horde.org>
  * @since   Passwd 3.0
diff --git a/lib/Driver/poppassd.php b/lib/Driver/poppassd.php
index c68ed64..b8fba71 100644
--- a/lib/Driver/poppassd.php
+++ b/lib/Driver/poppassd.php
@@ -3,12 +3,12 @@
  * The poppassd class attempts to change a user's password via a poppassd
  * server.
  *
- * $Horde: passwd/lib/Driver/poppassd.php,v 1.24 2005/08/23 11:15:06 jan Exp $
+ * $Horde: passwd/lib/Driver/poppassd.php,v 1.24.2.7 2009/01/06 15:25:23 jan Exp $
  *
- * Copyright 2000-2005 Horde Project (http://www.horde.org/)
+ * Copyright 2000-2009 The Horde Project (http://www.horde.org/)
  *
- * See the enclosed file LICENSE for license information (ASL). If you
- * did not receive this file, see http://www.horde.org/licenses/asl.php.
+ * See the enclosed file COPYING for license information (GPL). If you
+ * did not receive this file, see http://www.horde.org/licenses/gpl.php.
  *
  * @author  Eric Jon Rostetter <eric.rostetter at physics.utexas.edu>
  * @package Passwd
@@ -63,6 +63,9 @@ class Passwd_Driver_poppassd extends Passwd_Driver {
     function _getPrompt()
     {
         $prompt = fgets($this->_fp, 4096);
+        if (!$prompt) {
+            return PEAR::raiseError(_("No prompt returned from server."));
+        }
         if (preg_match('/^[1-5][0-9][0-9]/', $prompt)) {
             $rc = substr($prompt, 0, 3);
             /* This should probably be a regex match for 2?0 or 3?0, no? */
@@ -82,7 +85,10 @@ class Passwd_Driver_poppassd extends Passwd_Driver {
     function _sendCommand($cmd, $arg)
     {
         $line = $cmd . ' ' . $arg . "\n";
-        fputs($this->_fp, $line);
+        $res_fputs = fputs($this->_fp, $line);
+        if (!$res_fputs) {
+            return PEAR::raiseError(_("Cannot send command to server."));
+        }
         return $this->_getPrompt();
     }
 
@@ -111,7 +117,7 @@ class Passwd_Driver_poppassd extends Passwd_Driver {
         $res = $this->_sendCommand('pass', $old_password);
         if (is_a($res, 'PEAR_Error')) {
             $this->_disconnect();
-            return PEAR::raiseError(_("Incorrect Password"));
+            return PEAR::raiseError(_("Incorrect old password."));
         }
 
         $res = $this->_sendCommand('newpass', $new_password);
diff --git a/lib/Driver/procopen.php b/lib/Driver/procopen.php
index 7151f45..f701464 100644
--- a/lib/Driver/procopen.php
+++ b/lib/Driver/procopen.php
@@ -9,12 +9,12 @@
  * process are read and combined with the exit status value and returned to
  * the caller if the status code is not 0.
  *
- * $Horde: passwd/lib/Driver/procopen.php,v 1.4 2005/08/23 11:15:06 jan Exp $
+ * $Horde: passwd/lib/Driver/procopen.php,v 1.4.2.6 2009/02/23 20:01:48 chuck Exp $
  *
- * Copyright 2004-2005 Horde Project (http://www.horde.org/)
+ * Copyright 2004-2009 The Horde Project (http://www.horde.org/)
  *
- * See the enclosed file LICENSE for license information (ASL). If you
- * did not receive this file, see http://www.horde.org/licenses/asl.php.
+ * See the enclosed file COPYING for license information (GPL). If you
+ * did not receive this file, see http://www.horde.org/licenses/gpl.php.
  *
  * @author  Samuel Nicolary <sam at nicolary.org>
  * @since   Passwd 3.0
@@ -38,7 +38,7 @@ class Passwd_Driver_procopen extends Passwd_Driver {
         $descriptorspec = array(
             0 => array('pipe', 'r'),
             1 => array('pipe', 'w'),
-            2 => array('pipe', 'e'));
+            2 => array('pipe', 'w'));
 
         $output = '';
 
diff --git a/lib/Driver/pspasswd.php b/lib/Driver/pspasswd.php
index f5e43e0..520ae15 100644
--- a/lib/Driver/pspasswd.php
+++ b/lib/Driver/pspasswd.php
@@ -48,12 +48,12 @@
  * Special thanks to Mark Russinovich (mark at sysinternals.com) for the
  * tool and helping me solve some questions about it.
  *
- * $Horde: passwd/lib/Driver/pspasswd.php,v 1.2 2005/08/23 11:15:06 jan Exp $
+ * $Horde: passwd/lib/Driver/pspasswd.php,v 1.2.2.5 2009/01/06 15:25:23 jan Exp $
  *
- * Copyright 2004-2005 Horde Project (http://www.horde.org/)
+ * Copyright 2004-2009 The Horde Project (http://www.horde.org/)
  *
- * See the enclosed file LICENSE for license information (ASL). If you
- * did not receive this file, see http://www.horde.org/licenses/asl.php.
+ * See the enclosed file COPYING for license information (GPL). If you
+ * did not receive this file, see http://www.horde.org/licenses/gpl.php.
  *
  * @author  Luiz R Malheiros (malheiros at gmail.com)
  * @since   Passwd 3.0
diff --git a/lib/Driver/servuftp.php b/lib/Driver/servuftp.php
index ca34d80..d94e896 100644
--- a/lib/Driver/servuftp.php
+++ b/lib/Driver/servuftp.php
@@ -3,12 +3,12 @@
  * The serv-u ftp class attempts to change a user's password via the SITE PSWD
  * command used by Serv-u ftpd for windows.
  *
- * $Horde: passwd/lib/Driver/servuftp.php,v 1.14 2005/08/23 11:15:06 jan Exp $
+ * $Horde: passwd/lib/Driver/servuftp.php,v 1.14.2.5 2009/01/06 15:25:23 jan Exp $
  *
- * Copyright 2000-2005 Horde Project (http://www.horde.org/)
+ * Copyright 2000-2009 The Horde Project (http://www.horde.org/)
  *
- * See the enclosed file LICENSE for license information (ASL). If you
- * did not receive this file, see http://www.horde.org/licenses/asl.php.
+ * See the enclosed file COPYING for license information (GPL). If you
+ * did not receive this file, see http://www.horde.org/licenses/gpl.php.
  *
  * @author  Lucas Nelan (screen at brainkrash.com)
  * @package Passwd
diff --git a/lib/Driver/smbldap.php b/lib/Driver/smbldap.php
index b3f28f0..7dc681f 100644
--- a/lib/Driver/smbldap.php
+++ b/lib/Driver/smbldap.php
@@ -1,17 +1,21 @@
 <?php
+/**
+ * @package Passwd
+ *
+ * $Horde: passwd/lib/Driver/smbldap.php,v 1.7.2.5 2009/01/06 15:25:23 jan Exp $
+ */
 
+/** Passwd_Driver_ldap */
 require_once dirname(__FILE__) . '/ldap.php';
 
 /**
  * The LDAP class attempts to change a user's LDAP password and Samba password
  * stored in an LDAP directory service.
  *
- * $Horde: passwd/lib/Driver/smbldap.php,v 1.7 2005/08/24 06:39:58 jan Exp $
+ * Copyright 2004-2009 The Horde Project (http://www.horde.org/)
  *
- * Copyright 2004-2005 Horde Project (http://www.horde.org/)
- *
- * See the enclosed file LICENSE for license information (ASL). If you
- * did not receive this file, see http://www.horde.org/licenses/asl.php.
+ * See the enclosed file COPYING for license information (GPL). If you
+ * did not receive this file, see http://www.horde.org/licenses/gpl.php.
  *
  * @author  Shane Boulter <sboulter at ariasolutions.com>
  * @author  Mike Cochrane <mike at graftonhall.co.nz>
@@ -30,11 +34,12 @@ class Passwd_Driver_smbldap extends Passwd_Driver_ldap {
      */
     function Passwd_Driver_smbldap($params = array())
     {
-        $params = array_merge(array('lm_attribute' => 'sambaLMPassword',
-                                    'nt_attribute' => 'sambaNTPassword',
-                                    'pw_set_attribute' => 'sambaPwdLastSet',
-                                    'pw_expire_attribute' => 'sambaPwdMustChange',
-                                    'pw_expire_time' => 2147483647),
+        $params = array_merge(array('lm_attribute' => null,
+                                    'nt_attribute' => null,
+                                    'pw_set_attribute' => null,
+                                    'pw_expire_attribute' => null,
+                                    'pw_expire_time' => null,
+                                    'smb_objectclass' => 'sambaSamAccount'),
                               $params);
         parent::Passwd_Driver_ldap($params);
     }
@@ -51,46 +56,121 @@ class Passwd_Driver_smbldap extends Passwd_Driver_ldap {
     function changePassword($username, $old_password, $new_password)
     {
         // Get the user's dn.
-        $userdn = $this->_userDN($username, $old_password);
+        if ($GLOBALS['conf']['hooks']['userdn']) {
+            $userdn = Horde::callHook('_passwd_hook_userdn',
+                                      array(Auth::getAuth()),
+                                      'passwd');
+        } else {
+            $userdn = $this->_lookupdn($username, $old_password);
+        }
         if (is_a($userdn, 'PEAR_Error')) {
             return $userdn;
         }
 
+        // Construct username at realm to connect if 'realm' parameter is set.
+        // Looks like the _passwd_hook_username hook, but here we use a
+        // configurable parameter as realm.  This is a safeguard that if
+        // unable to lookup the user's DN we still have a chance to
+        // authenticate.
+        if (empty($userdn) && !empty($this->_params['realm'])) {
+            $userdn = $username . '@' . $this->_params['realm'];
+        }
+
         $result = parent::changePassword($username, $old_password, $new_password);
         if (is_a($result, 'PEAR_Error')) {
             return $result;
         }
 
+        // Return success if the user is not a Samba user
+        if (!@ldap_compare($this->_ds, $userdn, 'objectClass', $this->_params['smb_objectclass'])) {
+            return true;
+        }
+
         require_once 'Crypt/CHAP.php';
-        $hash = &new Crypt_CHAP_MSv2();
+        $hash = new Crypt_CHAP_MSv2();
         $hash->password = $new_password;
         $lmpasswd = strtoupper(bin2hex($hash->lmPasswordHash()));
         $ntpasswd = strtoupper(bin2hex($hash->ntPasswordHash()));
         $settime = time();
-        // 24 hours/day * 60 min/hour * 60 secs/min = 86400 seconds/day
-        $expiretime = $settime + ($this->_params['pw_expire_time'] * 86400);
 
-        $new_lm_passwd[$this->_params['lm_attribute']] = $lmpasswd;
-        if (!ldap_mod_replace($this->_ds, $userdn, $new_lm_passwd)) {
-            return PEAR::raiseError(ldap_error($this->_ds));
+        if (!is_null($this->_params['pw_expire_time'])) {
+            // 24 hours/day * 60 min/hour * 60 secs/min = 86400 seconds/day
+            $expiretime = $settime + ($this->_params['pw_expire_time'] * 86400);
+        } else {
+            // This is NT's version of infinity time:
+            // http://lists.samba.org/archive/samba/2004-January/078175.html
+            $expiretime = 2147483647;
         }
 
-        $new_nt_passwd[$this->_params['nt_attribute']] = $ntpasswd;
-        if (!ldap_mod_replace($this->_ds, $userdn, $new_nt_passwd)) {
-            return PEAR::raiseError(ldap_error($this->_ds));
+        // All changes must succeed or fail together.  Attributes with
+        // null name are not updated.
+        $changes = array();
+        if (!is_null($this->_params['lm_attribute'])) {
+            $changes[$this->_params['lm_attribute']] = $lmpasswd;
         }
-
-        $new_set_time[$this->_params['pw_set_attribute']] = $settime;
-        if (!ldap_mod_replace($this->_ds, $userdn, $new_set_time)) {
-            return PEAR::raiseError(ldap_error($this->_ds));
+        if (!is_null($this->_params['nt_attribute'])) {
+            $changes[$this->_params['nt_attribute']] = $ntpasswd;
+        }
+        if (!is_null($this->_params['pw_set_attribute'])) {
+            $changes[$this->_params['pw_set_attribute']] = $settime;
+        }
+        if (!is_null($this->_params['pw_expire_attribute'])) {
+            $changes[$this->_params['pw_expire_attribute']] = $expiretime;
         }
 
-        $new_set_time[$this->_params['pw_expire_attribute']] = $expiretime;
-        if (!ldap_mod_replace($this->_ds, $userdn, $new_set_time)) {
-            return PEAR::raiseError(ldap_error($this->_ds));
+        if (count($changes) > 0) {
+            if (!ldap_mod_replace($this->_ds, $userdn, $changes)) {
+                return PEAR::raiseError(ldap_error($this->_ds));
+            }
         }
 
         return true;
     }
 
+    /**
+     * Looks up and returns the user's dn.
+     *
+     * @param string $user    The username of the user.
+     * @param string $passw   The password of the user.
+     * @param string $realm   The realm (domain) name of the user.
+     * @param string $basedn  The ldap basedn.
+     * @param string $uid     The ldap uid.
+     *
+     * @return string  The ldap dn for the user.
+     */
+    function _lookupdn($user, $passw)
+    {
+        // Construct username at realm to connect as if 'realm' parameter is set.
+        $urealm = '';
+        if (!empty($this->_params['realm'])) {
+            $urealm = $user . '@' . $this->_params['realm'];
+        }
+
+        // Bind as current user. _connect will try as guest if no user realm
+        // is found or auth error.
+        $this->_connect($urealm, $passw);
+
+        // Construct search.
+        $search = $this->_params['uid'] . '=' . $user;
+
+        // Get userdn.
+        $result = ldap_search($this->_ds, $this->_params['basedn'], $search);
+        $entry = ldap_first_entry($this->_ds, $result);
+        if ($entry === false) {
+            return PEAR::raiseError(_("User not found."));
+        }
+
+        // If we used admin bindings, we have to check the password here.
+        if (!empty($this->_params['admindn'])) {
+            $ldappasswd = ldap_get_values($this->_ds, $entry,
+                                          $this->_params['attribute']);
+            $result = $this->comparePasswords($ldappasswd[0], $passw);
+            if (is_a($result, 'PEAR_Error')) {
+                return $result;
+            }
+        }
+
+        return ldap_get_dn($this->_ds, $entry);
+    }
+
 }
diff --git a/lib/Driver/smbpasswd.php b/lib/Driver/smbpasswd.php
index 21b2ce6..4011330 100644
--- a/lib/Driver/smbpasswd.php
+++ b/lib/Driver/smbpasswd.php
@@ -2,12 +2,12 @@
 /**
  * The smbpassd class attempts to change a user's password on a samba server.
  *
- * $Horde: passwd/lib/Driver/smbpasswd.php,v 1.22 2005/08/23 11:15:06 jan Exp $
+ * $Horde: passwd/lib/Driver/smbpasswd.php,v 1.22.2.5 2009/01/06 15:25:23 jan Exp $
  *
- * Copyright 2000-2005 Horde Project (http://www.horde.org/)
+ * Copyright 2000-2009 The Horde Project (http://www.horde.org/)
  *
- * See the enclosed file LICENSE for license information (ASL). If you
- * did not receive this file, see http://www.horde.org/licenses/asl.php.
+ * See the enclosed file COPYING for license information (GPL). If you
+ * did not receive this file, see http://www.horde.org/licenses/gpl.php.
  *
  * @author  Rene Lund Jensen <Rene at lundjensen.net>
  * @package Passwd
diff --git a/lib/Driver/sql.php b/lib/Driver/sql.php
index 1c9054f..c986186 100644
--- a/lib/Driver/sql.php
+++ b/lib/Driver/sql.php
@@ -3,12 +3,12 @@
  * The SQL driver attempts to change a user's password stored in an SQL
  * databse and implements the Passwd_Driver API.
  *
- * $Horde: passwd/lib/Driver/sql.php,v 1.24 2005/08/23 11:15:06 jan Exp $
+ * $Horde: passwd/lib/Driver/sql.php,v 1.24.2.8 2009/01/06 15:25:23 jan Exp $
  *
- * Copyright 2000-2005 Horde Project (http://www.horde.org/)
+ * Copyright 2000-2009 The Horde Project (http://www.horde.org/)
  *
- * See the enclosed file LICENSE for license information (ASL). If you
- * did not receive this file, see http://www.horde.org/licenses/asl.php.
+ * See the enclosed file COPYING for license information (GPL). If you
+ * did not receive this file, see http://www.horde.org/licenses/gpl.php.
  *
  * @author  Mike Cochrane <mike at graftonhall.co.nz>
  * @author  Ilya Krel <mail at krel.org>
@@ -75,7 +75,14 @@ class Passwd_Driver_sql extends Passwd_Driver {
                 return PEAR::raiseError(_("Unable to connect to SQL server."));
             }
 
-            $this->_db->setOption('portability', DB_PORTABILITY_LOWERCASE | DB_PORTABILITY_ERRORS);
+            // Set DB portability options.
+            switch ($this->_db->phptype) {
+            case 'mssql':
+                $this->_db->setOption('portability', DB_PORTABILITY_LOWERCASE | DB_PORTABILITY_ERRORS | DB_PORTABILITY_RTRIM);
+                break;
+            default:
+                $this->_db->setOption('portability', DB_PORTABILITY_LOWERCASE | DB_PORTABILITY_ERRORS);
+            }
 
             $this->_connected = true;
         }
@@ -116,6 +123,9 @@ class Passwd_Driver_sql extends Passwd_Driver {
             $result->free();
             if (is_array($row)) {
                 /* Get the password from the database. */
+                if (!isset($row[$this->_params['pass_col']])) {
+                    return PEAR::raiseError(sprintf(_("Password column \"%s\" not found in password table."), $this->_params['pass_col']));
+                }
                 $current_password = $row[$this->_params['pass_col']];
 
                 /* Check the passwords match. */
@@ -180,14 +190,25 @@ class Passwd_Driver_sql extends Passwd_Driver {
         $query = '';
         $values = array();
         $length = strlen($string);
+        @list($username, $domain) = explode('@', $user);
         for ($i = 0; $i < $length; $i++) {
             if ($string[$i] == '%' && !empty($string[$i + 1])) {
                 switch ($string[++$i]) {
+                case 'd':
+                    $query .= '?';
+                    $values[] = $domain;
+                    break;
+
                 case 'u':
                     $query .= '?';
                     $values[] = $user;
                     break;
 
+                case 'U':
+                    $query .= '?';
+                    $values[] = $username;
+                    break;
+
                 case 'p':
                     $query .= '?';
                     $values[] = $password;
diff --git a/lib/Driver/vmailmgr.php b/lib/Driver/vmailmgr.php
index 41c3115..01cb73b 100644
--- a/lib/Driver/vmailmgr.php
+++ b/lib/Driver/vmailmgr.php
@@ -3,12 +3,12 @@
  * The vmailmgr class attempts to change a user's password on a local vmailmgr
  * daemon
  *
- * $Horde: passwd/lib/Driver/vmailmgr.php,v 1.11 2005/08/23 11:15:06 jan Exp $
+ * $Horde: passwd/lib/Driver/vmailmgr.php,v 1.11.2.7 2009/01/06 15:25:23 jan Exp $
  *
- * Copyright 2002-2005 Horde Project (http://www.horde.org/)
+ * Copyright 2002-2009 The Horde Project (http://www.horde.org/)
  *
- * See the enclosed file LICENSE for license information (ASL). If you
- * did not receive this file, see http://www.horde.org/licenses/asl.php.
+ * See the enclosed file COPYING for license information (GPL). If you
+ * did not receive this file, see http://www.horde.org/licenses/gpl.php.
  *
  * @author  Marco Kaiser <bate at php.net>
  * @since   Passwd 2.2
@@ -33,13 +33,13 @@
             return PEAR::raiseError('vmail.inc not found ! (' . $this->_params['vmailinc'] . ')');
         }
 
-        $_splitted = split('@', $username);
+        $_splitted = explode('@', $username);
         $_username = $_splitted[0];
         $_domain = $_splitted[1];
         $_returnChange = vchpass($_domain, $old_password, $_username, $new_password);
 
         if ($_returnChange[0]) {
-            return PEAR::raiseError(_("Incorrect Password"));
+            return PEAR::raiseError(_("Incorrect old password."));
         }
 
         return true;
diff --git a/lib/Driver/vpopmail.php b/lib/Driver/vpopmail.php
index 0913149..f74b2e4 100644
--- a/lib/Driver/vpopmail.php
+++ b/lib/Driver/vpopmail.php
@@ -4,12 +4,12 @@
  * servers.  It is very similar to the more generic sql driver, and the two
  * should probably be merged into one driver if possible.
  *
- * $Horde: passwd/lib/Driver/vpopmail.php,v 1.17 2005/08/23 11:15:06 jan Exp $
+ * $Horde: passwd/lib/Driver/vpopmail.php,v 1.17.2.6 2009/01/06 15:25:23 jan Exp $
  *
- * Copyright 2002-2005 Horde Project (http://www.horde.org/)
+ * Copyright 2002-2009 The Horde Project (http://www.horde.org/)
  *
- * See the enclosed file LICENSE for license information (ASL). If you
- * did not receive this file, see http://www.horde.org/licenses/asl.php.
+ * See the enclosed file COPYING for license information (GPL). If you
+ * did not receive this file, see http://www.horde.org/licenses/gpl.php.
  *
  * @author  Anton Nekhoroshikh <anton at valuehost.ru>
  * @author  Mike Cochrane <mike at graftonhall.co.nz>
@@ -83,7 +83,14 @@ class Passwd_Driver_vpopmail extends Passwd_Driver {
                 return PEAR::raiseError(_("Unable to connect to SQL server."));
             }
 
-            $this->_db->setOption('portability', DB_PORTABILITY_LOWERCASE | DB_PORTABILITY_ERRORS);
+            // Set DB portability options.
+            switch ($this->_db->phptype) {
+            case 'mssql':
+                $this->_db->setOption('portability', DB_PORTABILITY_LOWERCASE | DB_PORTABILITY_ERRORS | DB_PORTABILITY_RTRIM);
+                break;
+            default:
+                $this->_db->setOption('portability', DB_PORTABILITY_LOWERCASE | DB_PORTABILITY_ERRORS);
+            }
 
             $this->_connected = true;
         }
diff --git a/lib/Passwd.php b/lib/Passwd.php
index 84ef0ed..2d947c2 100644
--- a/lib/Passwd.php
+++ b/lib/Passwd.php
@@ -2,12 +2,12 @@
 /**
  * Passwd Base Class.
  *
- * $Horde: passwd/lib/Passwd.php,v 1.12 2005/08/23 11:15:04 jan Exp $
+ * $Horde: passwd/lib/Passwd.php,v 1.12.2.5 2009/01/06 15:25:21 jan Exp $
  *
- * Copyright 2000-2005 Horde Project (http://www.horde.org/)
+ * Copyright 2000-2009 The Horde Project (http://www.horde.org/)
  *
- * See the enclosed file LICENSE for license information (ASL). If you
- * did not receive this file, see http://www.horde.org/licenses/asl.php.
+ * See the enclosed file COPYING for license information (GPL). If you
+ * did not receive this file, see http://www.horde.org/licenses/gpl.php.
  *
  * @author Mike Cochrane <mike at graftonhall.co.nz>
  * @package Passwd
diff --git a/lib/base.php b/lib/base.php
index d4fffef..cda4324 100644
--- a/lib/base.php
+++ b/lib/base.php
@@ -5,12 +5,12 @@
  * This file brings in all of the dependencies that every PASSWD script will
  * need, and sets up objects that all scripts use.
  *
- * $Horde: passwd/lib/base.php,v 1.33 2005/08/23 11:15:04 jan Exp $
- * 
- * Copyright 2002-2005 Eric Jon Rostetter <eric.rostetter at physics.utexas.edu>
+ * $Horde: passwd/lib/base.php,v 1.33.2.6 2009/01/06 15:25:21 jan Exp $
  *
- * See the enclosed file LICENSE for license information (ASL). If you
- * did not receive this file, see http://www.horde.org/licenses/asl.php.
+ * Copyright 2002-2009 The Horde Project (http://www.horde.org/)
+ *
+ * See the enclosed file COPYING for license information (GPL). If you
+ * did not receive this file, see http://www.horde.org/licenses/gpl.php.
  *
  * @author  Eric Rostetter <eric.rostetter at physics.utexas.edu>
  * @package Passwd
@@ -29,7 +29,7 @@ require_once HORDE_BASE . '/lib/core.php';
 $registry = &Registry::singleton();
 if (is_a(($pushed = $registry->pushApp('passwd', !defined('AUTH_HANDLER'))), 'PEAR_Error')) {
     if ($pushed->getCode() == 'permission_denied') {
-        Horde::authenticationFailureRedirect(); 
+        Horde::authenticationFailureRedirect();
     }
     Horde::fatal($pushed, __FILE__, __LINE__, false);
 }
diff --git a/lib/version.php b/lib/version.php
index c42c36d..133d25f 100644
--- a/lib/version.php
+++ b/lib/version.php
@@ -1 +1 @@
-<?php define('PASSWD_VERSION', 'H3 (3.0)') ?>
+<?php define('PASSWD_VERSION', 'H3 (3.1)') ?>
diff --git a/locale/ca_ES/LC_MESSAGES/passwd.mo b/locale/ca_ES/LC_MESSAGES/passwd.mo
index 6f3baef..11b6696 100644
Binary files a/locale/ca_ES/LC_MESSAGES/passwd.mo and b/locale/ca_ES/LC_MESSAGES/passwd.mo differ
diff --git a/locale/cs_CZ/LC_MESSAGES/passwd.mo b/locale/cs_CZ/LC_MESSAGES/passwd.mo
index 233f3bb..ff3cef1 100644
Binary files a/locale/cs_CZ/LC_MESSAGES/passwd.mo and b/locale/cs_CZ/LC_MESSAGES/passwd.mo differ
diff --git a/locale/da_DK/LC_MESSAGES/passwd.mo b/locale/da_DK/LC_MESSAGES/passwd.mo
index 9c0ed68..230d4e6 100644
Binary files a/locale/da_DK/LC_MESSAGES/passwd.mo and b/locale/da_DK/LC_MESSAGES/passwd.mo differ
diff --git a/locale/de_DE/LC_MESSAGES/passwd.mo b/locale/de_DE/LC_MESSAGES/passwd.mo
index ff01bf1..9160be3 100644
Binary files a/locale/de_DE/LC_MESSAGES/passwd.mo and b/locale/de_DE/LC_MESSAGES/passwd.mo differ
diff --git a/locale/de_DE/help.xml b/locale/de_DE/help.xml
index 3b55675..f18dc21 100644
--- a/locale/de_DE/help.xml
+++ b/locale/de_DE/help.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="iso-8859-1"?>
-<!-- $Horde: passwd/locale/de_DE/help.xml,v 1.1 2005/10/09 15:13:00 jan Exp $ -->
+<!-- $Horde: passwd/locale/de_DE/help.xml,v 1.1.2.1 2008/10/09 17:12:07 jan Exp $ -->
 <help>
   <entry id="passwd-username" md5="2890a9812d76074ffb3e35957eea967d" state="uptodate">
     <title>Benutzername</title>
diff --git a/locale/en_US/help.xml b/locale/en_US/help.xml
index 333718c..e3e773c 100644
--- a/locale/en_US/help.xml
+++ b/locale/en_US/help.xml
@@ -1,5 +1,5 @@
 <?xml version='1.0'?>
-<!-- $Horde: passwd/locale/en_US/help.xml,v 1.7 2005/10/09 14:59:21 jan Exp $ -->
+<!-- $Horde: passwd/locale/en_US/help.xml,v 1.7.2.2 2008/10/09 17:12:08 jan Exp $ -->
 <help>
   <entry id="passwd-username">
     <title>Username</title>
@@ -9,7 +9,7 @@
   <entry id="passwd-old-password">
     <title>Old password</title>
     <para>Enter your current, working login password here. You must correctly
-    enter your current login password, or you can not change your
+    enter your current login password, or you cannot change your
     password.</para>
   </entry>
   <entry id="passwd-new-password">
diff --git a/locale/es_ES/LC_MESSAGES/passwd.mo b/locale/es_ES/LC_MESSAGES/passwd.mo
index 918a76e..ecb550b 100644
Binary files a/locale/es_ES/LC_MESSAGES/passwd.mo and b/locale/es_ES/LC_MESSAGES/passwd.mo differ
diff --git a/locale/es_ES/help.xml b/locale/es_ES/help.xml
new file mode 100644
index 0000000..6261dfa
--- /dev/null
+++ b/locale/es_ES/help.xml
@@ -0,0 +1,32 @@
+<?xml version='1.0'?>
+<!-- $Horde: passwd/locale/es_ES/help.xml,v 1.1.2.2 2008/10/09 17:12:09 jan Exp $ -->
+<help>
+  <entry id="passwd-username">
+    <title>Nombre de usuario</title>
+    <para>Introduzca aquí su nombre de usuario (si no estaba ya relleno). No todas las instalaciones permiten ésto.</para>
+  </entry>
+  <entry id="passwd-old-password">
+    <title>Antigua contraseña</title>
+    <para>Introduzca aquí su contraseña de inicio funcional actual. Tiene que introducir correctamente la contraseña de inicio actual o no podrá cambiarla.</para>
+  </entry>
+  <entry id="passwd-new-password">
+    <title>Nueva contraseña</title>
+    <para>Introduzca la nueva contraseña a la que quiera cambiar. Observe que la contraseña introducida tiene que cumplir unos estándares mínimos (longitud suficiente, distinta del nombre de usuario, disponer de una combinación de letrar y otros caracteres, etc.) o se producirá un error.</para>
+  </entry>
+  <entry id="passwd-confirm-password">
+    <title>Confirmar la nueva contraseña</title>
+    <para>Introduzca la nueva contraseña una segunda vez en el campo Confirmar la nueva contraseña. Ésto evitará la introdución de un error de escritura o de cualquier otro tipo con el consiguiente bloqueo de su cuenta.</para>
+  </entry>
+  <entry id="passwd-server">
+    <title>Cambiar contraseña en</title>
+    <para>Seleccione el servidor o aplicación en el que quiera cambiar la contraseña. No todas las instalaciones permiten ésto.</para>
+  </entry>
+  <entry id="Change-your-password">
+    <title>Cambiar la contraseña</title>
+    <para>Pulse el botón "Cambiar la contraseña" de la parte inferior del formulario para enviar la solicitud de cambio de contraseña al sistema. Este botón indica al sistema que cambie la contraseña.</para>
+  </entry>
+  <entry id="reset">
+    <title>Limpiar</title>
+    <para>Utilice el botón Limpiar de la parte inferior del formulario para eliminar cualquier dato introducido y empezar de nuevo.</para>
+  </entry>
+</help>
diff --git a/locale/et_EE/LC_MESSAGES/passwd.mo b/locale/et_EE/LC_MESSAGES/passwd.mo
index 07a3c7c..5cd4cc0 100644
Binary files a/locale/et_EE/LC_MESSAGES/passwd.mo and b/locale/et_EE/LC_MESSAGES/passwd.mo differ
diff --git a/locale/fa_IR/LC_MESSAGES/passwd.mo b/locale/fa_IR/LC_MESSAGES/passwd.mo
index 7d59661..d8c02a0 100644
Binary files a/locale/fa_IR/LC_MESSAGES/passwd.mo and b/locale/fa_IR/LC_MESSAGES/passwd.mo differ
diff --git a/locale/fi_FI/LC_MESSAGES/passwd.mo b/locale/fi_FI/LC_MESSAGES/passwd.mo
index c18650c..4ea392e 100644
Binary files a/locale/fi_FI/LC_MESSAGES/passwd.mo and b/locale/fi_FI/LC_MESSAGES/passwd.mo differ
diff --git a/locale/fi_FI/help.xml b/locale/fi_FI/help.xml
index 931787f..bbaeede 100644
--- a/locale/fi_FI/help.xml
+++ b/locale/fi_FI/help.xml
@@ -1,56 +1,49 @@
 <?xml version="1.0"?>
-<!-- $Horde: passwd/locale/fi_FI/help.xml,v 1.5 2005/06/19 17:08:59 jan Exp $ -->
+<!-- $Horde: passwd/locale/fi_FI/help.xml,v 1.5.2.3 2008/10/09 17:12:10 jan Exp $ -->
 <help>
-  <entry id="passwd-username" md5="2be3ac45ed10bd409bbc31435c15261e" state="changed">
+  <entry id="passwd-username" md5="2890a9812d76074ffb3e35957eea967d" state="uptodate">
     <title>K&#xE4;ytt&#xE4;j&#xE4;tunnus</title>
     <heading>K&#xE4;ytt&#xE4;j&#xE4;tunnuksesi</heading>
     <para>
     Laita t&#xE4;h&#xE4;n tarvittaessa k&#xE4;ytt&#xE4;j&#xE4;tunnuksesi (kentt&#xE4; saattaa my&#xF6;s olla jo t&#xE4;ytetty valmiiksi).
     </para>
-<!-- English entry:
-<entry id="passwd-username">
-    <title>Username</title>
-    <heading>Your Username</heading>
-    <para>
-    Enter your username here (if it is not already prefilled). Not all installations support this.
-    </para>
-</entry>--></entry>
-  <entry id="passwd-old-password" md5="08dcc84d98462ad590356ce6ed609c40" state="uptodate">
+</entry>
+  <entry id="passwd-old-password" md5="5e55cb125b5778caaf1a51afca92ab59" state="uptodate">
     <title>Vanha salasana</title>
     <heading>Vanha salasana</heading>
     <para>
     Laita t&#xE4;h&#xE4;n nykyinen, toimiva salasanasi. Sinun pit&#xE4;&#xE4; kirjoittaa salasanasi oikein tai et pysty vaihtamaan salasanaasi.
     </para>
 </entry>
-  <entry id="passwd-new-password" md5="4f24def5684976fc4e2507d839369641" state="uptodate">
+  <entry id="passwd-new-password" md5="8fe6f2254a9d10984fa8ba876f148b53" state="uptodate">
     <title>Uusi salasana</title>
     <heading>Uusi salasana</heading>
     <para>
     Kirjoita t&#xE4;h&#xE4;n uusi salasanasi, t&#xE4;m&#xE4; tulee olemaan uusi salasanasi. Huomaathan ett&#xE4; salasanasi pit&#xE4;&#xE4; t&#xE4;yt&#xE4;&#xE4; tietyt minimivaatimukset (tarpeeksi pitk&#xE4;, ei saa olla k&#xE4;ytt&#xE4;j&#xE4;tunnuksesi tai nimesi, salasanan pit&#xE4;&#xE4; sis&#xE4;lt&#xE4;&#xE4; kirjaimia, numeroita ja muita merkkej&#xE4; jne.) tai muuten tulee virheilmoitus ja salasanaa ei saa vaihdettua.
     </para>
 </entry>
-  <entry id="passwd-confirm-password" md5="546e1b91945400f7607fa4f13364885f" state="uptodate">
+  <entry id="passwd-confirm-password" md5="38caae4b775cceda60bbc3c183a78fcb" state="uptodate">
     <title>Vahvista uusi salasana</title>
     <heading>Vahvista uusi salasana</heading>
     <para>
     Kirjoita t&#xE4;h&#xE4;n uusi salasanasi toiseen kertaan. T&#xE4;m&#xE4; varmistus tehd&#xE4;&#xE4;n siksi ett&#xE4; et tule vahingossa tehneeksi kirjoitusvirhett&#xE4; uuteen salasanaasi ja siten tulisit lukinneeksi tunnuksesi.
     </para>
 </entry>
-  <entry id="passwd-server" state="new">
-    <title>Change password on</title>
-    <heading>Change password on</heading>
+  <entry id="passwd-server" state="uptodate" md5="164edb880db7297eb259816ea42c0f8f">
+    <title>Vaihda salasana j&#xE4;rjestelm&#xE4;ss&#xE4;</title>
+    <heading>Vaihda salasana j&#xE4;rjestelm&#xE4;ss&#xE4;</heading>
     <para>
-    Select the server or application in which you want to change the password. Not all installations support this.
+    Voit valita sen j&#xE4;rjestelm&#xE4;n, johon salasana vaihdetaan. Kaikki j&#xE4;rjestelm&#xE4;t eiv&#xE4;t tue t&#xE4;t&#xE4; toimintoa.
     </para>
 </entry>
-  <entry id="Change-your-password" md5="81c332b6ab3a13ed0d01d08f7804d2dc" state="uptodate">
+  <entry id="Change-your-password" md5="186993a347a9ad4d9cd2cbeead7f6e4e" state="uptodate">
     <title>Vaihda salasanasi</title>
     <heading>Vaihda salasanasi</heading>
     <para>
     Napsauta "Vaihda salasanasi" -painiketta sivun alalaidassa l&#xE4;hett&#xE4;&#xE4;ksesi salasananvaihtopyynn&#xF6;n. Vasta t&#xE4;m&#xE4;n painikkeen painamisen j&#xE4;lkeen salasananvaihtopyynt&#xF6; l&#xE4;htee palvelimelle.
     </para>
 </entry>
-  <entry id="reset" md5="298d62bb8ffcc656848f87cf6f3b5a26" state="uptodate">
+  <entry id="reset" md5="87302fbc89b897c8d78445eb3e624d5e" state="uptodate">
     <title>Tyhjenn&#xE4;</title>
     <heading>Tyhjenn&#xE4;</heading>
     <para>
diff --git a/locale/fr_FR/LC_MESSAGES/passwd.mo b/locale/fr_FR/LC_MESSAGES/passwd.mo
index 4110f9d..0f74e8d 100644
Binary files a/locale/fr_FR/LC_MESSAGES/passwd.mo and b/locale/fr_FR/LC_MESSAGES/passwd.mo differ
diff --git a/locale/hu_HU/LC_MESSAGES/passwd.mo b/locale/hu_HU/LC_MESSAGES/passwd.mo
index 6bb866a..529e5a7 100644
Binary files a/locale/hu_HU/LC_MESSAGES/passwd.mo and b/locale/hu_HU/LC_MESSAGES/passwd.mo differ
diff --git a/locale/hu_HU/help.xml b/locale/hu_HU/help.xml
index e78a4b1..dc39bb9 100644
--- a/locale/hu_HU/help.xml
+++ b/locale/hu_HU/help.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="iso-8859-2"?>
-<!-- $Horde: passwd/locale/hu_HU/help.xml,v 1.2 2005/06/19 17:08:58 jan Exp $ -->
+<!-- $Horde: passwd/locale/hu_HU/help.xml,v 1.2.2.1 2008/10/09 17:12:13 jan Exp $ -->
 <help>
   <entry id="passwd-username" md5="2be3ac45ed10bd409bbc31435c15261e" state="changed">
     <title>Felhasználói név</title>
diff --git a/locale/it_IT/LC_MESSAGES/passwd.mo b/locale/it_IT/LC_MESSAGES/passwd.mo
index 198cac3..2b1b154 100644
Binary files a/locale/it_IT/LC_MESSAGES/passwd.mo and b/locale/it_IT/LC_MESSAGES/passwd.mo differ
diff --git a/locale/ja_JP/LC_MESSAGES/passwd.mo b/locale/ja_JP/LC_MESSAGES/passwd.mo
new file mode 100644
index 0000000..d900e45
Binary files /dev/null and b/locale/ja_JP/LC_MESSAGES/passwd.mo differ
diff --git a/locale/lt_LT/LC_MESSAGES/passwd.mo b/locale/lt_LT/LC_MESSAGES/passwd.mo
index b4c7d33..d57cf07 100644
Binary files a/locale/lt_LT/LC_MESSAGES/passwd.mo and b/locale/lt_LT/LC_MESSAGES/passwd.mo differ
diff --git a/locale/nl_NL/LC_MESSAGES/passwd.mo b/locale/nl_NL/LC_MESSAGES/passwd.mo
index a2f08d8..76edf7b 100644
Binary files a/locale/nl_NL/LC_MESSAGES/passwd.mo and b/locale/nl_NL/LC_MESSAGES/passwd.mo differ
diff --git a/locale/nl_NL/help.xml b/locale/nl_NL/help.xml
index 13c51c7..377a6fe 100644
--- a/locale/nl_NL/help.xml
+++ b/locale/nl_NL/help.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- $Horde: passwd/locale/nl_NL/help.xml,v 1.4 2005/06/19 17:08:58 jan Exp $ -->
+<!-- $Horde: passwd/locale/nl_NL/help.xml,v 1.4.2.1 2008/10/09 17:12:15 jan Exp $ -->
 <help>
   <entry id="passwd-username" state="new">
     <title>Username</title>
diff --git a/locale/pl_PL/LC_MESSAGES/passwd.mo b/locale/pl_PL/LC_MESSAGES/passwd.mo
index aadb079..57acb9e 100644
Binary files a/locale/pl_PL/LC_MESSAGES/passwd.mo and b/locale/pl_PL/LC_MESSAGES/passwd.mo differ
diff --git a/locale/pt_BR/LC_MESSAGES/passwd.mo b/locale/pt_BR/LC_MESSAGES/passwd.mo
index 168f054..8db82f7 100644
Binary files a/locale/pt_BR/LC_MESSAGES/passwd.mo and b/locale/pt_BR/LC_MESSAGES/passwd.mo differ
diff --git a/locale/pt_PT/LC_MESSAGES/passwd.mo b/locale/pt_PT/LC_MESSAGES/passwd.mo
new file mode 100644
index 0000000..898d904
Binary files /dev/null and b/locale/pt_PT/LC_MESSAGES/passwd.mo differ
diff --git a/locale/ru_RU/LC_MESSAGES/passwd.mo b/locale/ru_RU/LC_MESSAGES/passwd.mo
index b3312cf..5433d17 100644
Binary files a/locale/ru_RU/LC_MESSAGES/passwd.mo and b/locale/ru_RU/LC_MESSAGES/passwd.mo differ
diff --git a/locale/ru_RU/help.xml b/locale/ru_RU/help.xml
index ac41270..a32a2d5 100644
--- a/locale/ru_RU/help.xml
+++ b/locale/ru_RU/help.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="CP1251"?>
-<!-- $Horde: passwd/locale/ru_RU/help.xml,v 1.1 2005/08/23 07:06:25 jan Exp $ -->
+<!-- $Horde: passwd/locale/ru_RU/help.xml,v 1.1.2.1 2008/10/09 17:12:18 jan Exp $ -->
 <help>
 
 <entry id="passwd-username" md5="26022f0d72dd291089785e8366ba9a43" state="uptodate">
diff --git a/locale/sk_SK/LC_MESSAGES/passwd.mo b/locale/sk_SK/LC_MESSAGES/passwd.mo
index 74a100e..8748441 100644
Binary files a/locale/sk_SK/LC_MESSAGES/passwd.mo and b/locale/sk_SK/LC_MESSAGES/passwd.mo differ
diff --git a/locale/sl_SI/LC_MESSAGES/passwd.mo b/locale/sl_SI/LC_MESSAGES/passwd.mo
new file mode 100644
index 0000000..5824cd0
Binary files /dev/null and b/locale/sl_SI/LC_MESSAGES/passwd.mo differ
diff --git a/locale/sv_SE/LC_MESSAGES/passwd.mo b/locale/sv_SE/LC_MESSAGES/passwd.mo
index 68a3300..2546237 100644
Binary files a/locale/sv_SE/LC_MESSAGES/passwd.mo and b/locale/sv_SE/LC_MESSAGES/passwd.mo differ
diff --git a/locale/tr_TR/LC_MESSAGES/passwd.mo b/locale/tr_TR/LC_MESSAGES/passwd.mo
new file mode 100644
index 0000000..48574f8
Binary files /dev/null and b/locale/tr_TR/LC_MESSAGES/passwd.mo differ
diff --git a/locale/zh_CN/LC_MESSAGES/passwd.mo b/locale/zh_CN/LC_MESSAGES/passwd.mo
index aec666d..00d266c 100644
Binary files a/locale/zh_CN/LC_MESSAGES/passwd.mo and b/locale/zh_CN/LC_MESSAGES/passwd.mo differ
diff --git a/locale/zh_TW/LC_MESSAGES/passwd.mo b/locale/zh_TW/LC_MESSAGES/passwd.mo
index 8bd807e..e2fc7fc 100644
Binary files a/locale/zh_TW/LC_MESSAGES/passwd.mo and b/locale/zh_TW/LC_MESSAGES/passwd.mo differ
diff --git a/main.php b/main.php
index c8ddf04..19e6da0 100644
--- a/main.php
+++ b/main.php
@@ -1,11 +1,14 @@
 <?php
 /**
- * $Horde: passwd/main.php,v 1.67 2005/10/09 14:48:58 jan Exp $
+ * $Horde: passwd/main.php,v 1.67.2.8 2009/01/06 15:25:15 jan Exp $
  *
- * Copyright 2002-2005 Eric Jon Rostetter <eric.rostetter at physics.utexas.edu>
+ * Copyright 2002-2009 The Horde Project (http://www.horde.org/)
  *
- * See the enclosed file LICENSE for license information (ASL). If you
- * did not receive this file, see http://www.horde.org/asl.php.
+ * See the enclosed file COPYING for license information (GPL). If you
+ * did not receive this file, see http://www.horde.org/gpl.php.
+ *
+ * @author  Eric Rostetter <eric.rostetter at physics.utexas.edu>
+ * @package Passwd
  */
 
 @define('PASSWD_BASE', dirname(__FILE__));
@@ -34,7 +37,9 @@ do {
         $userid = Util::getFormData('userid');
     } else {
         if ($conf['hooks']['default_username']) {
-            $userid = Horde::callHook('_passwd_hook_default_username', array(Auth::getAuth()));
+            $userid = Horde::callHook('_passwd_hook_default_username',
+                                      array(Auth::getAuth()),
+                                      'passwd');
         } elseif ($conf['hooks']['full_name']) {
             $userid = Auth::getAuth();
         } else {
@@ -42,7 +47,7 @@ do {
         }
     }
 
-    // Check for users that can not change their passwords.
+    // Check for users that cannot change their passwords.
     if (in_array($userid, $conf['user']['refused'])) {
         $notification->push(sprintf(_("You can't change password for user %s"),
                                     $userid), 'horde.error');
@@ -110,27 +115,27 @@ do {
     // Check reamaining password policy options.
     if (isset($password_policy['minUpper']) &&
         $password_policy['minUpper'] > $upper) {
-        $notification->push(sprintf(_("Your new password must contain at least %d uppercase characters."), $password_policy['minUpper']), 'horde.warning');
+        $notification->push(sprintf(ngettext("Your new password must contain at least %d uppercase character.", "Your new password must contain at least %d uppercase characters.", $password_policy['minUpper']), $password_policy['minUpper']), 'horde.warning');
         break;
     }
     if (isset($password_policy['minLower']) &&
         $password_policy['minLower'] > $lower) {
-        $notification->push(sprintf(_("Your new password must contain at least %d lowercase characters."), $password_policy['minLower']), 'horde.warning');
+        $notification->push(sprintf(ngettext("Your new password must contain at least %d lowercase character.", "Your new password must contain at least %d lowercase characters.", $password_policy['minLower']), $password_policy['minLower']), 'horde.warning');
         break;
     }
     if (isset($password_policy['minNumeric']) &&
         $password_policy['minNumeric'] > $num) {
-        $notification->push(sprintf(_("Your new password must contain at least %d numeric characters."), $password_policy['minNumeric']), 'horde.warning');
+        $notification->push(sprintf(ngettext("Your new password must contain at least %d numeric character.", "Your new password must contain at least %d numeric characters.", $password_policy['minNumeric']), $password_policy['minNumeric']), 'horde.warning');
         break;
     }
     if (isset($password_policy['minAlpha']) &&
         $password_policy['minAlpha'] > $alpha) {
-        $notification->push(sprintf(_("Your new password must contain at least %d alphabetic characters."), $password_policy['minAlpha']), 'horde.warning');
+        $notification->push(sprintf(ngettext("Your new password must contain at least %d alphabetic character.", "Your new password must contain at least %d alphabetic characters.", $password_policy['minAlpha']), $password_policy['minAlpha']), 'horde.warning');
         break;
     }
     if (isset($password_policy['minAlphaNum']) &&
         $password_policy['minAlphaNum'] > $alnum) {
-        $notification->push(sprintf(_("Your new password must contain at least %d alphanumeric characters."), $password_policy['minAlphaNum']), 'horde.warning');
+        $notification->push(sprintf(ngettext("Your new password must contain at least %d alphanumeric character.", "Your new password must contain at least %d alphanumeric characters.", $password_policy['minAlphaNum']), $password_policy['minAlphaNum']), 'horde.warning');
         break;
     }
     if (isset($password_policy['minClasses']) &&
@@ -141,12 +146,17 @@ do {
     if (isset($password_policy['maxSpace']) &&
         $password_policy['maxSpace'] < $space) {
         if ($password_policy['maxSpace'] > 0) {
-            $notification->push(sprintf(_("Your new password must contain less than %d whitespace characters."), $password_policy['maxSpace']), 'horde.warning');
+            $notification->push(sprintf(_("Your new password must contain less than %d whitespace characters."), $password_policy['maxSpace'] + 1), 'horde.warning');
         } else {
             $notification->push(_("Your new password must not contain whitespace characters."), 'horde.warning');
         }
         break;
     }
+    if (isset($password_policy['minSymbol']) &&
+        $password_policy['minSymbol'] > $symbol) {
+        $notification->push(sprintf(ngettext("Your new password must contain at least %d symbol character.", "Your new password must contain at least %d symbol characters.", $password_policy['minSymbol']), $password_policy['minSymbol']), 'horde.warning');
+        break;
+    }
 
     // Do some simple strength tests, if enabled in the config file.
     if ($conf['password']['strengthtests']) {
@@ -172,7 +182,7 @@ do {
 
     // Create a Password_Driver instance.
     require_once PASSWD_BASE . '/lib/Driver.php';
-    $daemon = &Passwd_Driver::factory($driver, $params);
+    $daemon = Passwd_Driver::factory($driver, $params);
 
     if (is_a($daemon, 'PEAR_Error')) {
         $notification->push(_("Password module is not properly configured"),
@@ -184,7 +194,8 @@ do {
 
     if ($conf['hooks']['username']) {
         $backend_userid = Horde::callHook('_passwd_hook_username',
-                                          array($userid));
+                                          array($userid, &$daemon),
+                                          'passwd');
         if (is_a($backend_userid, 'PEAR_Error')) {
             $notification->push($backend_userid, 'horde.error');
             break;
@@ -208,7 +219,7 @@ do {
             exit;
         }
     } else {
-        $notification->push(sprintf(_("Failure in changing password on %s: %s"),
+        $notification->push(sprintf(_("Failure in changing password for %s: %s"),
                                     $backends[$backend_key]['name'],
                                     $res->getMessage()), 'horde.error');
     }
@@ -239,7 +250,9 @@ if ($conf['backend']['backend_list'] == 'shown') {
 // Extract userid to be shown in the username field.
 if (empty($userid)) {
     if ($conf['hooks']['default_username']) {
-        $userid = Horde::callHook('_passwd_hook_default_username', array(Auth::getAuth()));
+        $userid = Horde::callHook('_passwd_hook_default_username',
+                                  array(Auth::getAuth()),
+                                  'passwd');
     } elseif ($conf['hooks']['full_name']) {
         $userid = Auth::getAuth();
     } else {
diff --git a/po/ar_SY.po b/po/ar_SY.po
index 09913b9..9553d63 100644
--- a/po/ar_SY.po
+++ b/po/ar_SY.po
@@ -1,6 +1,6 @@
 # Passwd module translations.
 # This file is distributed under the same license as the Passwd package.
-# Copyright (C) 2003 Platinum Inc. <pl at tinum.info>
+# Copyright 2003 Platinum Inc. <pl at tinum.info>
 # Custom Web Applications <http://platinum-sy.com>
 # Platinum Development Team <devteam at platinum-sy.net>
 #
diff --git a/po/bg_BG.po b/po/bg_BG.po
index b265d5d..ff1ca25 100644
--- a/po/bg_BG.po
+++ b/po/bg_BG.po
@@ -1,5 +1,5 @@
 # Bulgarian translations for Passwd package.
-# Copyright (C) 2002 Horde Project
+# Copyright 2002-2009 The Horde Project
 # This file is distributed under the same license as the Passwd package.
 # Miroslav Pendev <miro at cybershade.us>, 2002.
 #
diff --git a/po/ca_ES.po b/po/ca_ES.po
index b9cf7e4..cf6d4c8 100644
--- a/po/ca_ES.po
+++ b/po/ca_ES.po
@@ -1,11 +1,12 @@
 # Traducció al catala del módul de canvi de password
-# Copyright (C) 2002 Free Software Foundation, Inc.
+# Copyright 2002 Free Software Foundation, Inc.
 # FIRST AUTHOR <joan.jorba at rusc.net>, 2004.
-# 
+#
 msgid ""
 msgstr ""
 "Project-Id-Version: passwd\n"
-"POT-Creation-Date: 2004-11-29 23:09-0600\n"
+"Report-Msgid-Bugs-To: dev at lists.horde.org\n"
+"POT-Creation-Date: 2005-10-13 17:13+0200\n"
 "PO-Revision-Date: 2004-11-29 23:24 GMT+5\n"
 "Last-Translator: Joan Jorba Calsina <joan.jorba at rusc.net>\n"
 "Language-Team: Catala ca_ES <info at rusc.net>\n"
@@ -13,112 +14,278 @@ msgstr ""
 "Content-Type: text/plain; charset=iso-8859-1\n"
 "Content-Transfer-Encoding: 8-bit\n"
 
+#: lib/Driver/expect.php:34
+#, php-format
+msgid "%s does not exist or is not executable."
+msgstr ""
+
+#: lib/Driver/composite.php:65
+#, php-format
+msgid "%s: unable to load driver: %s"
+msgstr ""
+
+#: lib/Driver/adsi.php:61
+#, php-format
+msgid "ADSI error %s."
+msgstr ""
+
+#: lib/Driver/pspasswd.php:105 lib/Driver/adsi.php:64
+msgid "Access Denied."
+msgstr ""
+
+#: lib/Driver.php:85
+msgid "Backend not correctly implemented."
+msgstr ""
+
+#: main.php:255 templates/main/main.inc:142
+#, fuzzy
+msgid "Change Password"
+msgstr "Canvia la contrasenya"
+
+#: templates/main/main.inc:127
+#, fuzzy
+msgid "Change password on:"
+msgstr "Canvia la contrasenya"
+
+#: templates/main/main.inc:62
 msgid "Change your password"
 msgstr "Canvia la contrasenya"
 
+#: templates/main/main.inc:69
+#, fuzzy, php-format
+msgid "Changing password on %s"
+msgstr "Fallit el canvi de contrasenya"
+
+#: templates/main/main.inc:114
 msgid "Confirm new password:"
 msgstr "Confirma la nova contrasenya:"
 
-msgid "Error"
-msgstr "Error"
+#: lib/Driver/ldap.php:95 lib/Driver/ldap.php:263 lib/Driver/kolab.php:54
+msgid "Could not bind to ldap server"
+msgstr ""
 
-msgid "Failure in changing password : "
-msgstr "Fallit el canvi de contrasenya"
+#: lib/Driver/ldap.php:70 lib/Driver/kolab.php:46
+msgid "Could not connect to ldap server"
+msgstr ""
 
-msgid "Help"
-msgstr "Ajuda"
+#: lib/Driver/smbpasswd.php:57
+msgid "Could not open pipe to smbpasswd."
+msgstr ""
 
-msgid "Language"
-msgstr "Llenguatge"
+#: lib/Driver/smbpasswd.php:79
+msgid "Error sending data to smbpasswd."
+msgstr ""
 
-msgid "Logout"
-msgstr "Finalitzar Sessió"
+#: lib/Driver/pspasswd.php:93
+#, fuzzy
+msgid "Failed to verify old password."
+msgstr "Has de verificar la teva nova contrasenya"
 
-msgid "Message"
-msgstr "Missatge"
+#: main.php:211 lib/Driver/composite.php:99
+#, fuzzy, php-format
+msgid "Failure in changing password on %s: %s"
+msgstr "Fallit el canvi de contrasenya"
 
+#: lib/Driver.php:56 lib/Driver/ldap.php:264 lib/Driver/vmailmgr.php:42
+#: lib/Driver/kolab.php:78 lib/Driver/poppassd.php:114
+msgid "Incorrect Password"
+msgstr ""
+
+#: lib/Driver/ldap.php:255
+msgid "Minimum password age has not yet expired"
+msgstr ""
+
+#: templates/main/main.inc:102
 msgid "New password:"
 msgstr "Nova Contrasenya"
 
+#: lib/Driver.php:112
+#, php-format
+msgid "No such backend \"%s\" found."
+msgstr ""
+
+#: templates/main/main.inc:90
 msgid "Old password:"
 msgstr "Antiga Contrasenya"
 
-msgid "Password changed!"
+#: lib/Driver/smbpasswd.php:47
+#, fuzzy
+msgid "Passwd is not properly configured."
+msgstr "Mòdul de canvi de Clau no configurat adecuadament"
+
+#: main.php:203
+#, fuzzy, php-format
+msgid "Password changed on %s."
 msgstr "Contrasenya Canviada"
 
+#: lib/Driver/sql.php:120
+#, php-format
+msgid "Password column \"%s\" not found in password table."
+msgstr ""
+
+#: lib/Driver/pspasswd.php:75
+#, fuzzy
+msgid "Password module can't find the supplied bin."
+msgstr "Mòdul de canvi de Clau no configurat adecuadament"
+
+#: lib/Driver/pspasswd.php:73
+#, fuzzy
+msgid "Password module is missing required parameters."
+msgstr "Mòdul de canvi de Clau no configurat adecuadament"
+
+#: lib/Driver/adsi.php:51
+#, fuzzy
+msgid "Password module is missing target parameter."
+msgstr "Mòdul de canvi de Clau no configurat adecuadament"
+
+#: main.php:178 lib/Driver/servuftp.php:71
 msgid "Password module is not properly configured"
 msgstr "Mòdul de canvi de Clau no configurat adecuadament"
 
-msgid "Problem?"
-msgstr "¿Problema?"
+#: lib/Driver/servuftp.php:98
+#, fuzzy
+msgid "Password module is not properly configured."
+msgstr "Mòdul de canvi de Clau no configurat adecuadament"
 
-msgid "Reset"
-msgstr "Reiniciar"
+#: templates/main/main.inc:11
+#, fuzzy
+msgid "Please provide a new password"
+msgstr "Has d'escriure la teva nova contrasenya"
+
+#: templates/main/main.inc:7
+msgid "Please provide your current password"
+msgstr ""
 
-msgid "Select your preferred language:"
-msgstr "Seleccioni el seu llenguatge preferit"
+#: templates/main/main.inc:15
+#, fuzzy
+msgid "Please verify your new password"
+msgstr "Has de verificar la teva nova contrasenya"
 
-msgid "Set the language that menu items, explanations, and help are in."
+#: lib/Driver/composite.php:41
+msgid "Required 'drivers' is misconfigured in Composite configuration."
 msgstr ""
-"Estableix el llenguatge en el que estan els menus, explicacions i la ajuda"
 
-msgid "Some of Password module's configuration files are missing:"
+#: lib/Driver/sql.php:46
+msgid "Required 'phptype' not specified in Passwd SQL configuration."
 msgstr ""
-"Alguns dels arxius de mòdul de configuració de canvi de clau no es troben:"
 
-msgid "Success"
-msgstr "Èxit"
+#: lib/Driver/vpopmail.php:49
+msgid "Required 'phptype' not specified in SQL configuration."
+msgstr ""
 
-msgid ""
-"This file controls the default preferences for Password module, and also "
-"controls which preferences users can alter."
+#: templates/main/main.inc:143
+msgid "Reset"
+msgstr "Reiniciar"
+
+#: lib/Driver/sql.php:75 lib/Driver/vpopmail.php:83
+msgid "Unable to connect to SQL server."
 msgstr ""
-"Aquest arxiu controla les preferencies per defecte del mòdul de canvi de "
-"contrasenya i a mes a mes controla quines son les preferencies que poden ser "
-"alterades pels usuaris."
 
-msgid ""
-"This file controls the stylesheet that is used to set colors and fonts in "
-"addition to or overriding Horde defaults."
+#: lib/Driver/sql.php:128 lib/Driver/poppassd.php:108
+#: lib/Driver/vpopmail.php:143
+msgid "User not found"
 msgstr ""
-"Aquest arxiu controla els estils que son usats per establir colors i fonts ó "
-"sobreescriure els valors per defecte de Horde."
 
-msgid ""
-"This is the main Password module configuration file. It contains paths and "
-"options for all Password module scripts."
+#: lib/Driver/ldap.php:131 lib/Driver/kolab.php:70 lib/Driver/pine.php:231
+msgid "User not found."
 msgstr ""
-"Aquest es el arxiu principal de configuració del mòdul de canvio de "
-"contrasenya. Conté rutes i opcions per tots els guions del mòduo de canvi de "
-"contrasenya."
 
+#: templates/main/main.inc:77
 msgid "Username:"
 msgstr "Usuari:"
 
-msgid "Warning"
-msgstr "Advertència"
-
-msgid "You can not change passwd for other user"
-msgstr "No pots canviar la clau a un altre usuari"
-
-#, c-format
+#: main.php:47
+#, php-format
 msgid "You can't change password for user %s"
 msgstr "Vostè no pot canviar la clau pel usuari %s"
 
-msgid "You must give your new password"
+#: main.php:55
+#, fuzzy
+msgid "You must give your current password"
 msgstr "Has d'escriure la teva nova contrasenya"
 
-msgid "You must give your old password"
-msgstr "Has de escriure la antiga contrasenya"
-
-msgid "You must give your userid"
-msgstr "Has d'escriure el teu usuari"
+#: main.php:64
+msgid "You must give your new password"
+msgstr "Has d'escriure la teva nova contrasenya"
 
+#: main.php:68
 msgid "You must verify your new password"
 msgstr "Has de verificar la teva nova contrasenya"
 
-msgid "Your Information"
-msgstr "La seva Informació"
+#: main.php:88
+#, php-format
+msgid ""
+"Your new password is too long; passwords may not be more than %d characters "
+"long!"
+msgstr ""
+
+#: main.php:167
+msgid "Your new password is too simple to guess!  Not changed!"
+msgstr ""
 
+#: main.php:158
+msgid "Your new password is too simple to guess. Not changed!"
+msgstr ""
+
+#: main.php:83
+#, php-format
+msgid "Your new password must be at least %d characters long!"
+msgstr ""
+
+#: main.php:76
+msgid "Your new password must be different from your current password"
+msgstr ""
+
+#: main.php:128
+#, php-format
+msgid "Your new password must contain at least %d alphabetic characters."
+msgstr ""
+
+#: main.php:133
+#, php-format
+msgid "Your new password must contain at least %d alphanumeric characters."
+msgstr ""
+
+#: main.php:138
+#, php-format
+msgid ""
+"Your new password must contain at least %d different types of characters. "
+"The types are: lower, upper, numeric, and symbols."
+msgstr ""
+
+#: main.php:118
+#, php-format
+msgid "Your new password must contain at least %d lowercase characters."
+msgstr ""
+
+#: main.php:123
+#, php-format
+msgid "Your new password must contain at least %d numeric characters."
+msgstr ""
+
+#: main.php:113
+#, php-format
+msgid "Your new password must contain at least %d uppercase characters."
+msgstr ""
+
+#: main.php:144
+#, php-format
+msgid "Your new password must contain less than %d whitespace characters."
+msgstr ""
+
+#: main.php:146
+msgid "Your new password must not contain whitespace characters."
+msgstr ""
+
+#: main.php:72
 msgid "Your new passwords didn't match"
 msgstr "La contrasenya nova i la antiga no concorden"
+
+#: templates/main/main.inc:19
+#, fuzzy
+msgid "Your passwords do not match"
+msgstr "La contrasenya nova i la antiga no concorden"
+
+#: lib/Driver/ldap.php:76
+msgid "ldap_start_tls failed"
+msgstr ""
diff --git a/po/cs_CZ.po b/po/cs_CZ.po
index fd15175..ad9ee66 100644
--- a/po/cs_CZ.po
+++ b/po/cs_CZ.po
@@ -1,5 +1,5 @@
 # Czech translations for Passwd package.
-# Copyright (C) 2004 Horde Project
+# Copyright 2004-2009 The Horde Project
 # This file is distributed under the same license as the Horde package.
 # Pavel Chytil <pavel at chytil.tk>, 2004.
 #
diff --git a/po/da_DK.po b/po/da_DK.po
index 6d7969f..e4067ea 100644
--- a/po/da_DK.po
+++ b/po/da_DK.po
@@ -1,183 +1,302 @@
-# Passwd danish translation
-# Copyright (C) 2003 The Horde Project
+# Danish translations for Passwd package
+# Danske oversættelser for pakke Passwd
+# Copyright 2003-2009 The Horde Project
 # This file is distributed under the same license as the Passwd package.
 # Anders Bruun Olsen <anders at bruun-olsen.net>, 2003.
+# Brian Truelsen <horde+i18n at briantruelsen.dk>, 2006.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: passwd\n"
-"POT-Creation-Date: 2003-07-12 03:39+0200\n"
-"PO-Revision-Date: 2003-07-12 04:00+0200\n"
-"Last-Translator: Anders Bruun Olsen <anders at bruun-olsen.net>\n"
-"Language-Team: Danish <i18n at lists.horde.org>\n"
+"Project-Id-Version: Passwd H3 (3.1-cvs)\n"
+"Report-Msgid-Bugs-To: dev at lists.horde.org\n"
+"POT-Creation-Date: 2006-02-01 21:00+0100\n"
+"PO-Revision-Date: 2006-03-06 22:05+0100\n"
+"Last-Translator: Brian Truelsen <horde+i18n at briantruelsen.dk>\n"
+"Language-Team: i18n at lists.horde.org\n"
 "MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=iso-8859-1\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
 "Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
+#: lib/Driver/expect.php:34
+#, php-format
+msgid "%s does not exist or is not executable."
+msgstr "%s findes ikke eller er ikke eksekverbar."
+
+#: lib/Driver/composite.php:65
+#, php-format
+msgid "%s: unable to load driver: %s"
+msgstr "%s: kan ikke indlæse driver: %s"
+
+#: lib/Driver/adsi.php:61
+#, php-format
+msgid "ADSI error %s."
+msgstr "ADSI fejl %s."
+
+#: lib/Driver/adsi.php:64 lib/Driver/pspasswd.php:105
+msgid "Access Denied."
+msgstr "Adgang nægtet."
+
+#: lib/Driver.php:85
 msgid "Backend not correctly implemented."
 msgstr "Backend er ikke korrekt implementeret."
 
+#: main.php:255 templates/main/main.inc:142
 msgid "Change Password"
 msgstr "Skift kodeord"
 
+#: templates/main/main.inc:127
+msgid "Change password on:"
+msgstr "Skift kodeord på:"
+
+#: templates/main/main.inc:62
 msgid "Change your password"
 msgstr "Skift dit kodeord"
 
-#, c-format
-msgid "Changing Password on %s"
-msgstr "Skift kodeord på %s"
+#: templates/main/main.inc:69
+#, php-format
+msgid "Changing password on %s"
+msgstr "Skifter kodeord på %s"
 
+#: templates/main/main.inc:114
 msgid "Confirm new password:"
 msgstr "Bekræft nyt kodeord:"
 
-msgid "Could not bind to ldap server"
-msgstr "Kunne ikke lave en binding til ldap serveren"
+#: lib/Driver/kolab.php:54 lib/Driver/ldap.php:99 lib/Driver/ldap.php:189
+msgid "Could not bind to LDAP server"
+msgstr "Kunne ikke koble til LDAP-server"
 
-msgid "Could not connect to ldap server"
-msgstr "Kunne ikke opnå forbindelse til ldap serveren"
+#: lib/Driver/kolab.php:46 lib/Driver/ldap.php:74
+msgid "Could not connect to LDAP server"
+msgstr "Kunne ikke opnå forbindelse til LDAP-server"
 
+#: lib/Driver/smbpasswd.php:57
 msgid "Could not open pipe to smbpasswd."
 msgstr "Kunne ikke åbne forbindelse til smbpasswd."
 
+#: lib/Driver/ldap.php:80
+msgid "Could not start TLS connection to LDAP server"
+msgstr "Kunne ikke start TLS-forbindelse til LDAP-server"
+
+#: lib/Driver/smbpasswd.php:79
 msgid "Error sending data to smbpasswd."
 msgstr "Fejl ved dataoverførsel til smbpasswd."
 
-msgid "Error"
-msgstr "Fejl"
-
-msgid "Failure in changing password : "
-msgstr "Der skete en fejl ved ændring af kodeord:"
+#: lib/Driver/pspasswd.php:93
+msgid "Failed to verify old password."
+msgstr "Kontrol af gammelt kodeord fejlede."
 
-msgid "Help"
-msgstr "Hjælp"
+#: main.php:211 lib/Driver/composite.php:104
+#, php-format
+msgid "Failure in changing password on %s: %s"
+msgstr "Der skete en fejl ved ændring af kodeord på %s: %s"
 
-msgid "Incorect Password"
+#: lib/Driver.php:56 lib/Driver/kolab.php:78 lib/Driver/ldap.php:190
+#: lib/Driver/poppassd.php:114 lib/Driver/vmailmgr.php:42
+msgid "Incorrect Password"
 msgstr "Forkert kodeord"
 
-msgid "Logout"
-msgstr "Log ud"
-
-msgid "Message"
-msgstr "Besked"
+#: lib/Driver/ldap.php:166
+msgid "Minimum password age has not yet expired"
+msgstr "Minimum kodeordsalder er endnu ikke udstået"
 
+#: templates/main/main.inc:102
 msgid "New password:"
 msgstr "Nyt kodeord:"
 
+#: lib/Driver.php:113
+#, php-format
+msgid "No such backend \"%s\" found."
+msgstr "Backend \"%s\" ikke fundet."
+
+#: lib/Driver/http.php:72
+msgid "Old password is incorrect."
+msgstr "Gammelt kodeord er ikke korrekt."
+
+#: templates/main/main.inc:90
 msgid "Old password:"
 msgstr "Gammelt kodeord:"
 
-msgid "Password changed!"
-msgstr "Kodeord er nu skiftet!"
+#: lib/Driver/smbpasswd.php:47
+msgid "Passwd is not properly configured."
+msgstr "Passwd-modulet er ikke sat korrekt op."
 
+#: main.php:203
+#, php-format
+msgid "Password changed on %s."
+msgstr "Kodeord er skiftet på %s."
+
+#: lib/Driver/sql.php:127
+#, php-format
+msgid "Password column \"%s\" not found in password table."
+msgstr "Kodeordskolonne \"%s\" ikke fundet i kodeordstabel."
+
+#: lib/Driver/pspasswd.php:75
+msgid "Password module can't find the supplied bin."
+msgstr "Passwd-modulet kan ikke finde den angivne <code>bin</code>."
+
+#: lib/Driver/pspasswd.php:73
+msgid "Password module is missing required parameters."
+msgstr "Passwd-modulet mangler krævede parametre."
+
+#: lib/Driver/adsi.php:51
+msgid "Password module is missing target parameter."
+msgstr "Passwd-modulet mangler mål-parametre."
+
+#: main.php:178 lib/Driver/servuftp.php:71
 msgid "Password module is not properly configured"
 msgstr "Passwd modulet er ikke korrekt opsat"
 
-msgid "Problem?"
-msgstr "Problem?"
+#: lib/Driver/servuftp.php:98
+msgid "Password module is not properly configured."
+msgstr "Passwd-modulet er ikke korrekt sat op."
+
+#: templates/main/main.inc:11
+msgid "Please provide a new password"
+msgstr "Du skal angive et nyt kodeord"
+
+#: templates/main/main.inc:7
+msgid "Please provide your current password"
+msgstr "Indtast venligst dit nuværende kodeord"
+
+#: templates/main/main.inc:15
+msgid "Please verify your new password"
+msgstr "Du skal bekræfte dit nye kodeord"
+
+#: lib/Driver/composite.php:41
+msgid "Required 'drivers' is misconfigured in Composite configuration."
+msgstr "Påkrævet 'drivers' er forkert konfigureret i Composite-konfiguration."
+
+#: lib/Driver/sql.php:46
+msgid "Required 'phptype' not specified in Passwd SQL configuration."
+msgstr "Påkrævet 'phptype' er ikke specificeret i Passwd SQL-opsætning."
 
+#: lib/Driver/vpopmail.php:49
 msgid "Required 'phptype' not specified in SQL configuration."
 msgstr "Påkrævet 'phptype' er ikke specificeret i SQL opsætning"
 
+#: templates/main/main.inc:143
 msgid "Reset"
 msgstr "Nulstil"
 
-msgid "Server"
-msgstr "Server"
-
-msgid "Some of Password module's configuration files are missing:"
-msgstr "Nogle af Passwd modulets opsætningsfiler mangler:"
-
-msgid "Success"
-msgstr "Success"
+#: lib/Driver/http.php:65
+msgid "The requested website for changing user passwords could not be reached."
+msgstr "Websitet, hvortil brugeres kodeord ændres, kunne ikke nås."
 
-msgid ""
-"This file contains backend configuration information for the Password module "
-"scripts."
-msgstr ""
-"Denne fil indeholder backend opsætningsinformation til Passwd modulets "
-"scripts."
-
-msgid ""
-"This is the main Password module configuration file. It contains paths and "
-"options for all Password module scripts."
-msgstr ""
-"Dette er hovedopsætningsfilen for Passwd modulet. Den indeholder stier og "
-"opsætningsvalg til alle Passwd modulets scripts."
+#: lib/Driver/http.php:74
+msgid "The username could not be found."
+msgstr "Brugernavnet kunne ikke findes."
 
+#: lib/Driver/sql.php:75 lib/Driver/vpopmail.php:83
 msgid "Unable to connect to SQL server."
 msgstr "Kunne ikke opnå forbindelse til SQL serveren."
 
+#: lib/Driver/poppassd.php:108 lib/Driver/sql.php:135
+#: lib/Driver/vpopmail.php:150
 msgid "User not found"
 msgstr "Brugernavn ikke fundet"
 
+#: lib/Driver/kolab.php:70 lib/Driver/ldap.php:133 lib/Driver/pine.php:231
 msgid "User not found."
 msgstr "Brugernavn ikke fundet."
 
+#: templates/main/main.inc:77
 msgid "Username:"
 msgstr "Brugernavn:"
 
-msgid "Warning"
-msgstr "Advarsel"
-
-#, c-format
+#: main.php:47
+#, php-format
 msgid "You can't change password for user %s"
 msgstr "Du kan ikke skifte kodeord for brugeren %s"
 
+#: main.php:55
+msgid "You must give your current password"
+msgstr "Du skal angive dit nuværende kodeord"
+
+#: main.php:64
 msgid "You must give your new password"
 msgstr "Du skal angive et nyt kodeord"
 
-msgid "You must give your old password"
-msgstr "Du skal angive dit gamle kodeord"
-
+#: main.php:68
 msgid "You must verify your new password"
 msgstr "Du skal bekræfte dit nye kodeord"
 
-#, c-format
+#: main.php:88
+#, php-format
 msgid ""
 "Your new password is too long; passwords may not be more than %d characters "
 "long!"
 msgstr ""
 "Dit nye kodeord er for langt. Kodeord må ikke være mere end %d tegn lange!"
 
+#: main.php:167
 msgid "Your new password is too simple to guess!  Not changed!"
 msgstr "Dit nye kodeord er for simpelt at gætte!  Det er ikke blevet skiftet!"
 
-#, c-format
+#: main.php:158
+msgid "Your new password is too simple to guess. Not changed!"
+msgstr "Dit nye kodeord er for simpelt at gætte!  Det er ikke blevet skiftet!"
+
+#: main.php:83
+#, php-format
 msgid "Your new password must be at least %d characters long!"
 msgstr "Dit nye kodeord skal være mindst %d tegn langt!"
 
+#: main.php:76
 msgid "Your new password must be different from your current password"
 msgstr "Dit nye kodeord skal være forskelligt fra dit nuværende kodeord"
 
-#, c-format
+#: main.php:128
+#, php-format
 msgid "Your new password must contain at least %d alphabetic characters."
 msgstr "Dit nye kodeord skal indeholde mindst %d bogstaver."
 
-#, c-format
+#: main.php:133
+#, php-format
 msgid "Your new password must contain at least %d alphanumeric characters."
 msgstr "Dit nye kodeord skal indeholde mindst %d alfanumeriske tegn."
 
-#, c-format
+#: main.php:138
+#, php-format
+msgid ""
+"Your new password must contain at least %d different types of characters. "
+"The types are: lower, upper, numeric, and symbols."
+msgstr ""
+"Dit nye kodeord skal indeholde mindst %d forskellige typer tegn. Typerne er: "
+"minuskler, majuskler, cifre og symboler."
+
+#: main.php:118
+#, php-format
 msgid "Your new password must contain at least %d lowercase characters."
 msgstr "Dit nye kodeord skal indeholde mindst %d små bogstaver."
 
-#, c-format
+#: main.php:123
+#, php-format
 msgid "Your new password must contain at least %d numeric characters."
 msgstr "Dit nye kodeord skal indeholde mindst %d tal."
 
-#, c-format
+#: main.php:113
+#, php-format
 msgid "Your new password must contain at least %d uppercase characters."
 msgstr "Dit nye kodeord skal indeholde mindst %d store bogstaver."
 
-#, c-format
-msgid "Your new password must contain at less than %d whitespace characters."
-msgstr "Dit nye kodeord må ikke indeholde mere end %d mellemrumstegn."
+#: main.php:144
+#, php-format
+msgid "Your new password must contain less than %d whitespace characters."
+msgstr "Dit nye kodeord skal indeholde færre end %d mellemrumstegn."
 
+#: main.php:146
 msgid "Your new password must not contain whitespace characters."
 msgstr "Dit nye kodeord må ikke indeholde mellemrumstegn."
 
+#: main.php:72
 msgid "Your new passwords didn't match"
 msgstr "Dit nye kodeord er ikke ens i begge felter"
 
-msgid "tempnam() failed!"
-msgstr "tempnam() fejlede!"
+#: lib/Driver/http.php:76
+msgid "Your password could not be changed."
+msgstr "Dit kodeord kunne ikke ændres."
+
+#: templates/main/main.inc:19
+msgid "Your passwords do not match"
+msgstr "Dine kodeord stemmer ikke overens"
diff --git a/po/de_DE.po b/po/de_DE.po
index 88e50bf..c9b4aee 100644
--- a/po/de_DE.po
+++ b/po/de_DE.po
@@ -1,26 +1,33 @@
-# passwd module translations
-# Copyright (C) 2002-2004 Horde Project.
+# German translations for Passwd.
+# Copyright 2002-2009 The Horde Project
+# This file is distributed under the same license as the Passwd package.
 # Jens Tkotz <jens.tkotz at f2h9.de>, 2002.
-# Jan Schneider <jan at horde.org>, 2002-2004.
+# Jan Schneider <jan at horde.org>, 2002-2009.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: passwd\n"
+"Project-Id-Version: Passwd 3.1-cvs\n"
 "Report-Msgid-Bugs-To: dev at lists.horde.org\n"
-"POT-Creation-Date: 2005-10-09 16:51+0200\n"
-"PO-Revision-Date: 2005-10-09 17:07+0200\n"
+"POT-Creation-Date: 2009-03-19 10:37+0100\n"
+"PO-Revision-Date: 2009-03-19 12:01+0100\n"
 "Last-Translator: Jan Schneider <jan at horde.org>\n"
 "Language-Team: German <i18n at lists.horde.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=iso-8859-1\n"
 "Content-Transfer-Encoding: 8-bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
 #: lib/Driver/expect.php:34
 #, php-format
 msgid "%s does not exist or is not executable."
 msgstr "%s existiert nicht oder ist nicht ausführbar."
 
-#: lib/Driver/composite.php:65
+#: lib/Driver/expectpecl.php:73
+#, php-format
+msgid "%s extension cannot be loaded!"
+msgstr "%s-Erweiterung kann nicht geladen werden!"
+
+#: lib/Driver/composite.php:63
 #, php-format
 msgid "%s: unable to load driver: %s"
 msgstr "%s: Treiber konnte nicht geladen werden: %s"
@@ -34,43 +41,73 @@ msgstr "ADSI Fehler %s."
 msgid "Access Denied."
 msgstr "Zugriff verweigert."
 
-#: lib/Driver.php:85
+#: lib/Driver.php:101
 msgid "Backend not correctly implemented."
 msgstr "Das Backend wurde nicht korrekt implementiert."
 
-#: main.php:255 templates/main/main.inc:142
+#: lib/Driver/poppassd.php:90
+msgid "Cannot send command to server."
+msgstr "Kommando konnte nicht an den Server geschickt werden."
+
+#: main.php:268 templates/main/main.inc:141
 msgid "Change Password"
 msgstr "Passwort ändern"
 
-#: templates/main/main.inc:127
-msgid "Change password on:"
-msgstr "Passwort ändern auf:"
+#: templates/main/main.inc:126
+msgid "Change password for:"
+msgstr "Passwort ändern für:"
 
-#: templates/main/main.inc:62
+#: templates/main/main.inc:67
 msgid "Change your password"
 msgstr "Ändern Sie Ihr Passwort"
 
-#: templates/main/main.inc:69
+#: templates/main/main.inc:65
 #, php-format
-msgid "Changing password on %s"
-msgstr "Passwort auf %s ändern"
+msgid "Changing password for %s"
+msgstr "Passwort für %s ändern"
 
-#: templates/main/main.inc:114
+#: templates/main/main.inc:113
 msgid "Confirm new password:"
 msgstr "Neues Passwort bestätigen:"
 
-#: lib/Driver/ldap.php:95 lib/Driver/ldap.php:263 lib/Driver/kolab.php:54
-msgid "Could not bind to ldap server"
-msgstr "Verbindung zum LDAP-Server fehlgeschlagen"
+#: lib/Driver/ldap.php:114 lib/Driver/kolab.php:60
+msgid "Could not bind to LDAP server"
+msgstr "Anbindung im LDAP-Server fehlgeschlagen."
+
+#: lib/Driver/expectpecl.php:118
+msgid "Could not change password (bad old password?)"
+msgstr "Passwort konnte nicht geändert werden (Ungültiges altes Passwort?)"
 
-#: lib/Driver/ldap.php:70 lib/Driver/kolab.php:46
-msgid "Could not connect to ldap server"
+#: lib/Driver/expectpecl.php:138
+msgid "Could not change password."
+msgstr "Passwort konnte nicht geändert werden."
+
+#: lib/Driver/ldap.php:80 lib/Driver/kolab.php:46
+msgid "Could not connect to LDAP server"
 msgstr "Verbindung zum LDAP-Server fehlgeschlagen"
 
+#: lib/Driver/expectpecl.php:98
+msgid "Could not login to system (no password prompt)"
+msgstr "Anmeldung fehlgeschlagen (kein Passwort-Prompt)"
+
 #: lib/Driver/smbpasswd.php:57
 msgid "Could not open pipe to smbpasswd."
 msgstr "Verbindung zu smbpasswd konnte nicht hergestellt werden."
 
+#: lib/Driver/ldap.php:86
+msgid "Could not start TLS connection to LDAP server"
+msgstr "TLS-Verbindung zum LDAP-Server fehlgeschlagen"
+
+#: lib/Driver/expectpecl.php:108
+msgid "Could not start passwd program (no old password prompt)"
+msgstr ""
+"passwd-Programm konnte nicht gestartet werden (kein Prompt für das alte "
+"Passwort)"
+
+#: lib/Driver/expectpecl.php:44
+msgid "End of file."
+msgstr "Dateiende."
+
 #: lib/Driver/smbpasswd.php:79
 msgid "Error sending data to smbpasswd."
 msgstr "Beim Versenden von Daten zu smbpasswd ist ein Fehler aufgetreten."
@@ -79,30 +116,43 @@ msgstr "Beim Versenden von Daten zu smbpasswd ist ein Fehler aufgetreten."
 msgid "Failed to verify old password."
 msgstr "Das alte Passwort konnte nicht bestätigt werden."
 
-#: main.php:211 lib/Driver/composite.php:99
+#: main.php:222 lib/Driver/composite.php:102
 #, php-format
-msgid "Failure in changing password on %s: %s"
-msgstr "Fehler beim Ändern des Passworts auf %s: %s"
+msgid "Failure in changing password for %s: %s"
+msgstr "Fehler beim Ändern des Passworts für %s: %s"
+
+#: lib/Driver/expectpecl.php:50
+msgid "Full buffer."
+msgstr "Zwischenspeicher voll."
 
-#: lib/Driver.php:56 lib/Driver/ldap.php:264 lib/Driver/vmailmgr.php:42
-#: lib/Driver/kolab.php:78 lib/Driver/poppassd.php:114
-msgid "Incorrect Password"
-msgstr "Falsches Passwort"
+#: lib/Driver.php:72 lib/Driver/ldap.php:131 lib/Driver/http.php:72
+#: lib/Driver/vmailmgr.php:42 lib/Driver/kolab.php:84
+#: lib/Driver/poppassd.php:120
+msgid "Incorrect old password."
+msgstr "Falsches altes Passwort."
 
-#: lib/Driver/ldap.php:255
+#: lib/Driver/ldap.php:190
 msgid "Minimum password age has not yet expired"
 msgstr "Das minimale Passwortalter ist noch nicht abgelaufen"
 
-#: templates/main/main.inc:102
+#: lib/Driver/expectpecl.php:128
+msgid "New password not valid (too short, bad password, too similar, ...)"
+msgstr "Neues Passwort ungültig (zu kurz, ungültige Zeichen, zu ähnlich, ...)"
+
+#: templates/main/main.inc:101
 msgid "New password:"
 msgstr "Neues Passwort:"
 
-#: lib/Driver.php:112
+#: lib/Driver/poppassd.php:67
+msgid "No prompt returned from server."
+msgstr "Kein Prompt vom Server zurückgeliefert."
+
+#: lib/Driver.php:128
 #, php-format
 msgid "No such backend \"%s\" found."
 msgstr "Ein Backend namens \"%s\" konnte nicht gefunden werden."
 
-#: templates/main/main.inc:90
+#: templates/main/main.inc:89
 msgid "Old password:"
 msgstr "Altes Passwort:"
 
@@ -110,11 +160,16 @@ msgstr "Altes Passwort:"
 msgid "Passwd is not properly configured."
 msgstr "Passwd ist nicht vollständig konfiguriert."
 
-#: main.php:203
+#: main.php:214
 #, php-format
 msgid "Password changed on %s."
 msgstr "Passwort auf %s geändert."
 
+#: lib/Driver/sql.php:127
+#, php-format
+msgid "Password column \"%s\" not found in password table."
+msgstr "Passwortspalte \"%s\" in der Passworttabelle nicht gefunden."
+
 #: lib/Driver/pspasswd.php:75
 msgid "Password module can't find the supplied bin."
 msgstr "Passwd kann das angegebene Programm nicht finden."
@@ -127,7 +182,7 @@ msgstr "Passwd fehlen ben
 msgid "Password module is missing target parameter."
 msgstr "Passwd fehlt der \"Ziel\"-Parameter."
 
-#: main.php:178 lib/Driver/servuftp.php:71
+#: main.php:188 lib/Driver/servuftp.php:71
 msgid "Password module is not properly configured"
 msgstr "Passwd ist nicht vollständig konfiguriert"
 
@@ -159,45 +214,62 @@ msgstr "'phptype' wurde in der SQL-Konfiguration nicht angegeben."
 msgid "Required 'phptype' not specified in SQL configuration."
 msgstr "'phptype' wurde in der SQL-Konfiguration nicht angegeben."
 
-#: templates/main/main.inc:143
+#: templates/main/main.inc:142
 msgid "Reset"
 msgstr "Zurücksetzen"
 
+#: lib/Driver/http.php:65
+msgid "The requested website for changing user passwords could not be reached."
+msgstr "Die Webseite zur Änderung der Passwörter konnte nicht erreicht werden."
+
+#: lib/Driver/http.php:74
+msgid "The username could not be found."
+msgstr "Der Benutzername konnte nicht gefunden werden."
+
+#: lib/Driver/expectpecl.php:47
+msgid "Time out."
+msgstr "Zeitüberschreitung."
+
 #: lib/Driver/sql.php:75 lib/Driver/vpopmail.php:83
 msgid "Unable to connect to SQL server."
 msgstr "Verbindung zum SQL Server kann nicht hergestellt werden."
 
-#: lib/Driver/sql.php:125 lib/Driver/poppassd.php:108
-#: lib/Driver/vpopmail.php:143
+#: lib/Driver/expectpecl.php:93
+msgid "Unable to open expect stream!"
+msgstr "Der Expect-Stream konnte nicht geöffnet werden!"
+
+#: lib/Driver/sql.php:135 lib/Driver/poppassd.php:114
+#: lib/Driver/vpopmail.php:150
 msgid "User not found"
 msgstr "Benutzer nicht gefunden"
 
-#: lib/Driver/ldap.php:131 lib/Driver/kolab.php:70 lib/Driver/pine.php:231
+#: lib/Driver/ldap.php:167 lib/Driver/ldap.php:249 lib/Driver/kolab.php:76
+#: lib/Driver/pine.php:231 lib/Driver/smbldap.php:160
 msgid "User not found."
 msgstr "Benutzer nicht gefunden."
 
-#: templates/main/main.inc:77
+#: templates/main/main.inc:76
 msgid "Username:"
 msgstr "Benutzername:"
 
-#: main.php:47
+#: main.php:52
 #, php-format
 msgid "You can't change password for user %s"
 msgstr "Sie können das Passwort von Benutzer %s nicht ändern"
 
-#: main.php:55
+#: main.php:60
 msgid "You must give your current password"
 msgstr "Sie müssen Ihr altes Passwort angeben"
 
-#: main.php:64
+#: main.php:69
 msgid "You must give your new password"
 msgstr "Sie müssen Ihr neues Passwort angeben"
 
-#: main.php:68
+#: main.php:73
 msgid "You must verify your new password"
 msgstr "Sie müssen Ihr neues Passwort bestätigen"
 
-#: main.php:88
+#: main.php:93
 #, php-format
 msgid ""
 "Your new password is too long; passwords may not be more than %d characters "
@@ -206,35 +278,42 @@ msgstr ""
 "Ihr neues Passwort ist zu lang, das Passwort darf nicht länger als %d "
 "Zeichen sein!"
 
-#: main.php:167
+#: main.php:177
 msgid "Your new password is too simple to guess!  Not changed!"
 msgstr "Ihr neues Passwort ist zu leicht zu erraten! Nicht geändert!"
 
-#: main.php:158
+#: main.php:168
 msgid "Your new password is too simple to guess. Not changed!"
 msgstr "Ihr neues Passwort ist zu leicht zu erraten. Nicht geändert!"
 
-#: main.php:83
+#: main.php:88
 #, php-format
 msgid "Your new password must be at least %d characters long!"
 msgstr "Ihr neues Passwort muss mindestens %d Zeichen lang sein!"
 
-#: main.php:76
+#: main.php:81
 msgid "Your new password must be different from your current password"
 msgstr "Ihr neues Passwort muss sich von Ihrem alten unterscheiden"
 
-#: main.php:128
+#: main.php:133
 #, php-format
-msgid "Your new password must contain at least %d alphabetic characters."
-msgstr "Ihr neues Passwort muss mindestens %d Buchstaben enthalten."
+msgid "Your new password must contain at least %d alphabetic character."
+msgid_plural ""
+"Your new password must contain at least %d alphabetic characters."
+msgstr[0] "Ihr neues Passwort muss mindestens %d Buchstaben enthalten."
+msgstr[1] "Ihr neues Passwort muss mindestens %d Buchstaben enthalten."
 
-#: main.php:133
+#: main.php:138
 #, php-format
-msgid "Your new password must contain at least %d alphanumeric characters."
-msgstr ""
+msgid "Your new password must contain at least %d alphanumeric character."
+msgid_plural ""
+"Your new password must contain at least %d alphanumeric characters."
+msgstr[0] ""
+"Ihr neues Passwort muss mindestens %d Buchstaben oder Zahl enthalten."
+msgstr[1] ""
 "Ihr neues Passwort muss mindestens %d Buchstaben oder Zahlen enthalten."
 
-#: main.php:138
+#: main.php:143
 #, php-format
 msgid ""
 "Your new password must contain at least %d different types of characters. "
@@ -243,38 +322,51 @@ msgstr ""
 "Ihr neues Passwort muss mindestens %d verschiedenen Zeichentypen enhalten. "
 "Typen sind: Kleinbuchstaben, Großbuchstaben, Zahlen und Sonderzeichen."
 
-#: main.php:118
+#: main.php:123
 #, php-format
-msgid "Your new password must contain at least %d lowercase characters."
-msgstr "Ihr neues Passwort muss mindestens %d Kleinbuchstaben enthalten."
+msgid "Your new password must contain at least %d lowercase character."
+msgid_plural "Your new password must contain at least %d lowercase characters."
+msgstr[0] "Ihr neues Passwort muss mindestens %d Kleinbuchstaben enthalten."
+msgstr[1] "Ihr neues Passwort muss mindestens %d Kleinbuchstaben enthalten."
 
-#: main.php:123
+#: main.php:128
 #, php-format
-msgid "Your new password must contain at least %d numeric characters."
-msgstr "Ihr neues Passwort muss mindestens %d Zahlen enthalten."
+msgid "Your new password must contain at least %d numeric character."
+msgid_plural "Your new password must contain at least %d numeric characters."
+msgstr[0] "Ihr neues Passwort muss mindestens %d Zahl enthalten."
+msgstr[1] "Ihr neues Passwort muss mindestens %d Zahlen enthalten."
 
-#: main.php:113
+#: main.php:157
 #, php-format
-msgid "Your new password must contain at least %d uppercase characters."
-msgstr "Ihr neues Passwort muss mindestens %d Großbuchstaben enthalten."
+msgid "Your new password must contain at least %d symbol character."
+msgid_plural "Your new password must contain at least %d symbol characters."
+msgstr[0] "Ihr neues Passwort muss mindestens %d Symbolzeichen enthalten."
+msgstr[1] "Ihr neues Passwort muss mindestens %d Symbolzeichen enthalten."
 
-#: main.php:144
+#: main.php:118
+#, php-format
+msgid "Your new password must contain at least %d uppercase character."
+msgid_plural "Your new password must contain at least %d uppercase characters."
+msgstr[0] "Ihr neues Passwort muss mindestens %d Großbuchstaben enthalten."
+msgstr[1] "Ihr neues Passwort muss mindestens %d Großbuchstaben enthalten."
+
+#: main.php:149
 #, php-format
 msgid "Your new password must contain less than %d whitespace characters."
 msgstr "Ihr neues Passwort darf nicht mehr als %d Leerzeichen enthalten."
 
-#: main.php:146
+#: main.php:151
 msgid "Your new password must not contain whitespace characters."
 msgstr "Ihr neues Passwort darf keine Leerzeichen enthalten."
 
-#: main.php:72
+#: main.php:77
 msgid "Your new passwords didn't match"
 msgstr "Ihre neuen Passwörter stimmen nicht überein"
 
+#: lib/Driver/http.php:76
+msgid "Your password could not be changed."
+msgstr "Ihr Passwort konnte nicht geändert werden."
+
 #: templates/main/main.inc:19
 msgid "Your passwords do not match"
 msgstr "Ihre Passwörter stimmen nicht überein"
-
-#: lib/Driver/ldap.php:76
-msgid "ldap_start_tls failed"
-msgstr "ldap_start_tls fehlgeschlagen"
diff --git a/po/es_ES.po b/po/es_ES.po
index d3ba78d..3268a3c 100644
--- a/po/es_ES.po
+++ b/po/es_ES.po
@@ -1,15 +1,15 @@
-# Spanish translations for horde package
-# Traducciones al español para el paquete horde.
-# Copyright (C) 2004 Horde Project
-# This file is distributed under the same license as the horde package.
-# Automatically generated, 2004.
+# Spanish translations for passwd package
+# Traducciones al español para el paquete passwd.
+# Copyright 2008-2009 The Horde Project
+# This file is distributed under the same license as the passwd package.
+# Automatically generated, 2008.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: Passwd 3.0-cvs\n"
+"Project-Id-Version: Passwd 3.1-cvs\n"
 "Report-Msgid-Bugs-To: dev at lists.horde.org\n"
-"POT-Creation-Date: 2004-06-22 18:30+0200\n"
-"PO-Revision-Date: 2004-06-22 18:30+0200\n"
+"POT-Creation-Date: 2009-02-20 17:11+0100\n"
+"PO-Revision-Date: 2009-02-20 17:11+0100\n"
 "Last-Translator: Manuel P. Ayala <mayala at unex.es>\n"
 "Language-Team: i18n at lists.horde.org\n"
 "MIME-Version: 1.0\n"
@@ -17,153 +17,269 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: lib/Driver/composite.php:58
+#: lib/Driver/expect.php:34
+#, php-format
+msgid "%s does not exist or is not executable."
+msgstr "%s no existe o no es ejecutable."
+
+#: lib/Driver/expectpecl.php:73
+#, php-format
+msgid "%s extension cannot be loaded!"
+msgstr "¡No se puede cargar la extensión %s!"
+
+#: lib/Driver/composite.php:63
 #, php-format
 msgid "%s: unable to load driver: %s"
 msgstr "%s: no se puede cargar el controlador: %s"
 
-#: lib/Driver.php:80
+#: lib/Driver/adsi.php:61
+#, php-format
+msgid "ADSI error %s."
+msgstr "Error ADSI %s."
+
+#: lib/Driver/pspasswd.php:105 lib/Driver/adsi.php:64
+msgid "Access Denied."
+msgstr "Acceso denegado."
+
+#: lib/Driver.php:101
 msgid "Backend not correctly implemented."
 msgstr "No se ha desarrollado adecuadamente el motor."
 
-#: main.php:232 templates/main/main.inc:93
+#: lib/Driver/poppassd.php:90
+msgid "Cannot send command to server."
+msgstr "No se puede enviar el comando al servidor."
+
+#: main.php:268 templates/main/main.inc:141
 msgid "Change Password"
 msgstr "Cambiar la contraseña"
 
-#: templates/main/main.inc:78
-msgid "Change password on:"
-msgstr "Cambiar contraseña en:"
+#: templates/main/main.inc:126
+msgid "Change password for:"
+msgstr "Cambiar contraseña de:"
 
-#: templates/main/main.inc:13
+#: templates/main/main.inc:67
 msgid "Change your password"
 msgstr "Cambiar la contraseña"
 
-#: templates/main/main.inc:20
+#: templates/main/main.inc:65
 #, php-format
-msgid "Changing password on %s"
-msgstr "Cambiando la contraseña en %s"
+msgid "Changing password for %s"
+msgstr "Cambiando la contraseña de %s"
 
-#: templates/main/main.inc:65
+#: templates/main/main.inc:113
 msgid "Confirm new password:"
 msgstr "Confirmar la nueva contraseña:"
 
-#: lib/Driver/ldap.php:84 lib/Driver/ldap.php:163 lib/Driver/smbldap.php:88
-#: lib/Driver/smbldap.php:166
-msgid "Could not bind to ldap server"
-msgstr "No se puede enlazar al servidor ldap"
+#: lib/Driver/ldap.php:114 lib/Driver/kolab.php:60
+msgid "Could not bind to LDAP server"
+msgstr "No se pudo enlazar al servidor LDAP"
+
+#: lib/Driver/expectpecl.php:118
+msgid "Could not change password (bad old password?)"
+msgstr "No se pudo cambiar la contraseña (¿antigua contraseña incorrecta)"
+
+#: lib/Driver/expectpecl.php:138
+msgid "Could not change password."
+msgstr "No se pudo cambiar la contraseña."
 
-#: lib/Driver/ldap.php:60 lib/Driver/smbldap.php:65
-msgid "Could not connect to ldap server"
-msgstr "No se puede conectar al servidor ldap"
+#: lib/Driver/ldap.php:80 lib/Driver/kolab.php:46
+msgid "Could not connect to LDAP server"
+msgstr "No se pudo conectar al servidor LDAP"
 
-#: lib/Driver/smbpasswd.php:52
+#: lib/Driver/expectpecl.php:98
+msgid "Could not login to system (no password prompt)"
+msgstr ""
+"No se pudo iniciar sesión en el sistema (no hay solicitud de contraseña)"
+
+#: lib/Driver/smbpasswd.php:57
 msgid "Could not open pipe to smbpasswd."
-msgstr "No se puede abrir una canalización a smbpasswd."
+msgstr "No se pudo abrir una canalización a smbpasswd."
+
+#: lib/Driver/ldap.php:86
+msgid "Could not start TLS connection to LDAP server"
+msgstr "No se pudo iniciar una conexión TLS al servidor LDAP"
+
+#: lib/Driver/expectpecl.php:108
+msgid "Could not start passwd program (no old password prompt)"
+msgstr ""
+"No se pudo iniciar el programa passwd (no hay solicitud de contraseña "
+"antigua)"
+
+#: lib/Driver/expectpecl.php:44
+msgid "End of file."
+msgstr "Fin del archivo."
 
-#: lib/Driver/smbpasswd.php:66
+#: lib/Driver/smbpasswd.php:79
 msgid "Error sending data to smbpasswd."
 msgstr "Error al enviar los datos a smbpasswd."
 
-#: main.php:193 lib/Driver/composite.php:92
+#: lib/Driver/pspasswd.php:93
+msgid "Failed to verify old password."
+msgstr "La comprobación de la contraseña antigua ha fallado."
+
+#: main.php:222 lib/Driver/composite.php:102
 #, php-format
-msgid "Failure in changing password on %s: %s"
-msgstr "Fallo al cambiar la contraseña en %s: %s"
+msgid "Failure in changing password for %s: %s"
+msgstr "Fallo al cambiar la contraseña de %s: %s"
+
+#: lib/Driver/expectpecl.php:50
+msgid "Full buffer."
+msgstr "Buffer lleno."
+
+#: lib/Driver.php:72 lib/Driver/ldap.php:131 lib/Driver/poppassd.php:120
+#: lib/Driver/vmailmgr.php:42 lib/Driver/http.php:72 lib/Driver/kolab.php:84
+msgid "Incorrect old password."
+msgstr "Contraseña antigua incorrecta"
 
-#: templates/menu/menu.inc:13
-msgid "Help"
-msgstr "Ayuda"
+#: lib/Driver/ldap.php:190
+msgid "Minimum password age has not yet expired"
+msgstr "La antigüedad mínima de la contraseña no ha caducado aún"
 
-#: lib/Driver.php:51 lib/Driver/ldap.php:164 lib/Driver/poppassd.php:106
-#: lib/Driver/smbldap.php:167 lib/Driver/vmailmgr.php:35
-msgid "Incorrect Password"
-msgstr "Contraseña incorrecta"
+#: lib/Driver/expectpecl.php:128
+msgid "New password not valid (too short, bad password, too similar, ...)"
+msgstr ""
+"La contraseña nueva no es válida (demasiado corta, incorrecta, muy "
+"parecida, ...)"
 
-#: templates/main/main.inc:53
+#: templates/main/main.inc:101
 msgid "New password:"
 msgstr "Nueva contraseña:"
 
-#: lib/Driver.php:107
+#: lib/Driver/poppassd.php:67
+msgid "No prompt returned from server."
+msgstr "El servidor no devolvió una solicitud."
+
+#: lib/Driver.php:128
 #, php-format
-msgid "No such backend '%s' found."
-msgstr "No se encontró el motor '%s'."
+msgid "No such backend \"%s\" found."
+msgstr "No se encontró el motor \"%s\"."
 
-#: templates/main/main.inc:41
+#: templates/main/main.inc:89
 msgid "Old password:"
 msgstr "Antigua contraseña:"
 
-#: lib/Driver/smbpasswd.php:42
+#: lib/Driver/smbpasswd.php:47
 msgid "Passwd is not properly configured."
 msgstr "Passwd no está bien configurado."
 
-#: main.php:190
+#: main.php:214
 #, php-format
 msgid "Password changed on %s."
 msgstr "Se ha cambiado la contraseña en %s."
 
-#: main.php:171 lib/Driver/servuftp.php:66
+#: lib/Driver/sql.php:127
+#, php-format
+msgid "Password column \"%s\" not found in password table."
+msgstr ""
+"No se encontró la columna de contraseña \"%s\" en la tabla de contraseñas."
+
+#: lib/Driver/pspasswd.php:75
+msgid "Password module can't find the supplied bin."
+msgstr "El módulo de contraseñas no puede localizar el binario indicado."
+
+#: lib/Driver/pspasswd.php:73
+msgid "Password module is missing required parameters."
+msgstr "Al módulo de contraseñas le faltan parámetros necesarios."
+
+#: lib/Driver/adsi.php:51
+msgid "Password module is missing target parameter."
+msgstr "Al módulo de contraseñas le falta el parámetro de destino."
+
+#: main.php:188 lib/Driver/servuftp.php:71
 msgid "Password module is not properly configured"
 msgstr "El módulo de contraseñas no está bien configurado"
 
-#: lib/Driver/servuftp.php:93
+#: lib/Driver/servuftp.php:98
 msgid "Password module is not properly configured."
 msgstr "El módulo de contraseñas no está bien configurado."
 
-#: lib/Driver/composite.php:34
+#: templates/main/main.inc:11
+msgid "Please provide a new password"
+msgstr "Introduzca una nueva contraseña"
+
+#: templates/main/main.inc:7
+msgid "Please provide your current password"
+msgstr "Introduzca su contraseña actual"
+
+#: templates/main/main.inc:15
+msgid "Please verify your new password"
+msgstr "Compruebe la contraseña nueva"
+
+#: lib/Driver/composite.php:41
 msgid "Required 'drivers' is misconfigured in Composite configuration."
 msgstr ""
 "Los 'controladores' requeridos están desconfigurados en la configuración de "
 "Redacción."
 
-#: lib/Driver/sql.php:40
+#: lib/Driver/sql.php:46
 msgid "Required 'phptype' not specified in Passwd SQL configuration."
 msgstr ""
 "No se ha especificado en la configuración de Passwd SQL el 'phptype' "
 "requerido."
 
-#: lib/Driver/vpopmail.php:42
+#: lib/Driver/vpopmail.php:49
 msgid "Required 'phptype' not specified in SQL configuration."
 msgstr ""
 "No se ha especificado en la configuración de SQL el 'phptype' requerido."
 
-#: templates/main/main.inc:94
+#: templates/main/main.inc:142
 msgid "Reset"
 msgstr "Limpiar"
 
-#: lib/Driver/sql.php:69 lib/Driver/vpopmail.php:76
+#: lib/Driver/http.php:65
+msgid "The requested website for changing user passwords could not be reached."
+msgstr ""
+"El sitio web solicitado para cambiar las contraseñas de los usuarios no se "
+"pudo alcanzar."
+
+#: lib/Driver/http.php:74
+msgid "The username could not be found."
+msgstr "No se pudo encontrar el nombre de usuario."
+
+#: lib/Driver/expectpecl.php:47
+msgid "Time out."
+msgstr "Tiempo agotado."
+
+#: lib/Driver/sql.php:75 lib/Driver/vpopmail.php:83
 msgid "Unable to connect to SQL server."
 msgstr "Incapaz de conectarse al servidor SQL."
 
-#: lib/Driver/poppassd.php:100 lib/Driver/sql.php:118
-#: lib/Driver/vpopmail.php:135
+#: lib/Driver/expectpecl.php:93
+msgid "Unable to open expect stream!"
+msgstr "¡Incapaz de abrir el canal esperado!"
+
+#: lib/Driver/poppassd.php:114 lib/Driver/sql.php:135
+#: lib/Driver/vpopmail.php:150
 msgid "User not found"
 msgstr "No se encontró el usuario"
 
-#: lib/Driver/ldap.php:121 lib/Driver/pine.php:219 lib/Driver/smbldap.php:124
+#: lib/Driver/pine.php:231 lib/Driver/ldap.php:167 lib/Driver/ldap.php:249
+#: lib/Driver/smbldap.php:160 lib/Driver/kolab.php:76
 msgid "User not found."
 msgstr "No se encontró el usuario."
 
-#: templates/main/main.inc:28
+#: templates/main/main.inc:76
 msgid "Username:"
 msgstr "Usuario:"
 
-#: main.php:39
+#: main.php:52
 #, php-format
 msgid "You can't change password for user %s"
 msgstr "No puede cambiar la clave del usuario %s"
 
-#: main.php:47
+#: main.php:60
 msgid "You must give your current password"
 msgstr "Tiene que introducir su contraseña actual"
 
-#: main.php:56
+#: main.php:69
 msgid "You must give your new password"
 msgstr "Tiene que introducir su nueva contraseña"
 
-#: main.php:60
+#: main.php:73
 msgid "You must verify your new password"
 msgstr "Tiene que comprobar la contraseña nueva"
 
-#: main.php:80
+#: main.php:93
 #, php-format
 msgid ""
 "Your new password is too long; passwords may not be more than %d characters "
@@ -172,38 +288,46 @@ msgstr ""
 "Su nueva contraseña es demasiado larga; ¡las contraseñas no pueden tener más "
 "de %d caracteres!"
 
-#: main.php:159
+#: main.php:177
 msgid "Your new password is too simple to guess!  Not changed!"
 msgstr ""
 "¡Su nueva contraseña es demasiado fácil de adivinar! ¡No se ha cambiado!"
 
-#: main.php:150
+#: main.php:168
 msgid "Your new password is too simple to guess. Not changed!"
 msgstr ""
 "¡Su nueva contraseña es demasiado fácil de adivinar! ¡No se ha cambiado!"
 
-#: main.php:75
+#: main.php:88
 #, php-format
 msgid "Your new password must be at least %d characters long!"
 msgstr "¡Su nueva contraseña tiene que tener al menos %d caracteres!"
 
-#: main.php:68
+#: main.php:81
 msgid "Your new password must be different from your current password"
 msgstr "Su nueva contraseña tiene que ser distinta de la actual"
 
-#: main.php:120
+#: main.php:133
 #, php-format
-msgid "Your new password must contain at least %d alphabetic characters."
-msgstr ""
+msgid "Your new password must contain at least %d alphabetic character."
+msgid_plural ""
+"Your new password must contain at least %d alphabetic characters."
+msgstr[0] ""
+"Su nueva contraseña tiene que contener al menos %d carácter alfabético."
+msgstr[1] ""
 "Su nueva contraseña tiene que contener al menos %d caracteres alfabéticos."
 
-#: main.php:125
+#: main.php:138
 #, php-format
-msgid "Your new password must contain at least %d alphanumeric characters."
-msgstr ""
+msgid "Your new password must contain at least %d alphanumeric character."
+msgid_plural ""
+"Your new password must contain at least %d alphanumeric characters."
+msgstr[0] ""
+"Su nueva contraseña tiene que contener al menos %d carácter alfanumérico."
+msgstr[1] ""
 "Su nueva contraseña tiene que contener al menos %d caracteres alfanuméricos."
 
-#: main.php:130
+#: main.php:143
 #, php-format
 msgid ""
 "Your new password must contain at least %d different types of characters. "
@@ -212,37 +336,59 @@ msgstr ""
 "Su nueva contraseña tiene que contener al menos %d tipos distintos de "
 "caracteres. Los tipos son: minúsculas, mayúsculas, números y símbolos."
 
-#: main.php:110
+#: main.php:123
 #, php-format
-msgid "Your new password must contain at least %d lowercase characters."
-msgstr ""
+msgid "Your new password must contain at least %d lowercase character."
+msgid_plural "Your new password must contain at least %d lowercase characters."
+msgstr[0] ""
+"Su nueva contraseña tiene que contener al menos %d carácter en minúsculas."
+msgstr[1] ""
 "Su nueva contraseña tiene que contener al menos %d caracteres en minúsculas."
 
-#: main.php:115
+#: main.php:128
 #, php-format
-msgid "Your new password must contain at least %d numeric characters."
-msgstr ""
+msgid "Your new password must contain at least %d numeric character."
+msgid_plural "Your new password must contain at least %d numeric characters."
+msgstr[0] ""
+"Su nueva contraseña tiene que contener al menos %d carácter numérico."
+msgstr[1] ""
 "Su nueva contraseña tiene que contener al menos %d caracteres numéricos."
 
-#: main.php:105
+#: main.php:157
 #, php-format
-msgid "Your new password must contain at least %d uppercase characters."
-msgstr ""
+msgid "Your new password must contain at least %d symbol character."
+msgid_plural "Your new password must contain at least %d symbol characters."
+msgstr[0] ""
+"Su nueva contraseña tiene que contener al menos %d carácter de puntuación."
+msgstr[1] ""
+"Su nueva contraseña tiene que contener al menos %d caracteres de puntuación."
+
+#: main.php:118
+#, php-format
+msgid "Your new password must contain at least %d uppercase character."
+msgid_plural "Your new password must contain at least %d uppercase characters."
+msgstr[0] ""
+"Su nueva contraseña tiene que contener al menos %d carácter en mayúsculas."
+msgstr[1] ""
 "Su nueva contraseña tiene que contener al menos %d caracteres en mayúsculas."
 
-#: main.php:136
+#: main.php:149
 #, php-format
 msgid "Your new password must contain less than %d whitespace characters."
 msgstr "Su nueva contraseña tiene que contener menos de %d espacios."
 
-#: main.php:138
+#: main.php:151
 msgid "Your new password must not contain whitespace characters."
 msgstr "Su nueva contraseña no puede contener espacios."
 
-#: main.php:64
+#: main.php:77
 msgid "Your new passwords didn't match"
 msgstr "La contraseña nueva y la antigua no concuerdan"
 
-#: lib/Driver/ldap.php:66 lib/Driver/smbldap.php:71
-msgid "ldap_start_tls failed"
-msgstr "ha fallado ldap_start_tls"
+#: lib/Driver/http.php:76
+msgid "Your password could not be changed."
+msgstr "Su contraseña no se pudo cambiar"
+
+#: templates/main/main.inc:19
+msgid "Your passwords do not match"
+msgstr "Sus contraseñas no concuerdan"
diff --git a/po/et_EE.po b/po/et_EE.po
index c4f3837..4e618ba 100644
--- a/po/et_EE.po
+++ b/po/et_EE.po
@@ -1,180 +1,290 @@
 # PASSWD ESTONIAN TRANSLATION
-# 
-# Toomas Aas, 2004
-# 
+#
+# Toomas Aas, 2004 - 2006
+#
 msgid ""
 msgstr ""
-"Project-Id-Version: Passwd\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2004-06-01 15:19+0300\n"
-"PO-Revision-Date: 2004-06-01 19:40+0300\n"
-"Last-Translator: Toomas Aas <toomas.aas at mail.ee>\n"
+"Project-Id-Version: Passwd 3.0.1-cvs\n"
+"Report-Msgid-Bugs-To: dev at lists.horde.org\n"
+"POT-Creation-Date: 2008-05-29 15:49+0300\n"
+"PO-Revision-Date: 2008-06-12 11:34+0200\n"
+"Last-Translator: Alar SIng <alar.sing at err.ee>\n"
 "Language-Team: Estonian <i18n at lists.horde.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=ISO-8859-13\n"
 "Content-Transfer-Encoding: 8bit\n"
 
+#: lib/Driver/expect.php:34
+#, php-format
+msgid "%s does not exist or is not executable."
+msgstr "%s puudub või pole käivitatav."
+
+#: lib/Driver/composite.php:63
+#, php-format
+msgid "%s: unable to load driver: %s"
+msgstr "%s: ei õnnestu laadida draiverit: %s"
+
+#: lib/Driver/adsi.php:61
+#, php-format
+msgid "ADSI error %s."
+msgstr "ADSI viga %s."
+
+#: lib/Driver/adsi.php:64 lib/Driver/pspasswd.php:105
+msgid "Access Denied."
+msgstr "Juurdepääs keelatud."
+
+#: lib/Driver.php:89
 msgid "Backend not correctly implemented."
 msgstr "Alusrakendus ei ole korralikult paigaldatud."
 
+#: lib/Driver/poppassd.php:90
+msgid "Cannot send command to server."
+msgstr "Ei saa juhtida serverit."
+
+#: main.php:255 templates/main/main.inc:142
 msgid "Change Password"
 msgstr "Vaheta salasõna"
 
+#: templates/main/main.inc:127
+msgid "Change password on:"
+msgstr "Vaheta salasõna süsteemis:"
+
+#: templates/main/main.inc:62
 msgid "Change your password"
 msgstr "Muuda oma salasõna"
 
-#, c-format
-msgid "Changing Password on %s"
+#: templates/main/main.inc:69
+#, php-format
+msgid "Changing password on %s"
 msgstr "Salasõna muutmine süsteemis: %s"
 
+#: templates/main/main.inc:114
 msgid "Confirm new password:"
 msgstr "Korda uut salasõna:"
 
-msgid "Could not bind to ldap server"
-msgstr "Ei saanud ühendust LDAP serveriga"
+#: lib/Driver/kolab.php:60 lib/Driver/ldap.php:95 lib/Driver/ldap.php:263
+msgid "Could not bind to LDAP server"
+msgstr "Ei saanud sisse LDAP serverisse"
 
-msgid "Could not connect to ldap server"
+#: lib/Driver/kolab.php:46 lib/Driver/ldap.php:70
+msgid "Could not connect to LDAP server"
 msgstr "Ei saanud ühendust LDAP serveriga"
 
+#: lib/Driver/smbpasswd.php:57
 msgid "Could not open pipe to smbpasswd."
 msgstr "Ei õnnestunud avada toru smbpasswd-ga."
 
+#: lib/Driver/ldap.php:76
+msgid "Could not start TLS connection to LDAP server"
+msgstr "Ei saanud alustada TLS ühedust LDAP serveriga"
+
+#: lib/Driver/smbpasswd.php:79
 msgid "Error sending data to smbpasswd."
 msgstr "Viga andmete saatmisel smbpasswd-le."
 
-msgid "Error"
-msgstr "Viga"
+#: lib/Driver/pspasswd.php:93
+msgid "Failed to verify old password."
+msgstr "Vana salasõna kontroll nurjus."
 
-msgid "Failure in changing password : "
-msgstr "Salasõna muutmine ebaõnnestus : "
-
-msgid "Help"
-msgstr "Abi"
+#: main.php:211 lib/Driver/composite.php:97
+#, php-format
+msgid "Failure in changing password on %s: %s"
+msgstr "Salasõna muutmine %s süsteemis nurjus: %s"
 
+#: lib/Driver.php:60 lib/Driver/vmailmgr.php:42 lib/Driver/kolab.php:84
+#: lib/Driver/poppassd.php:120 lib/Driver/ldap.php:264
 msgid "Incorrect Password"
 msgstr "Vale salasõna"
 
-msgid "Logout"
-msgstr "Logi välja"
-
-msgid "Message"
-msgstr "Teade"
+#: lib/Driver/ldap.php:255
+msgid "Minimum password age has not yet expired"
+msgstr "Salasõna vähim kehtivusaeg pole veel täis"
 
+#: templates/main/main.inc:102
 msgid "New password:"
 msgstr "Uus salasõna:"
 
+#: lib/Driver/poppassd.php:67
+msgid "No prompt returned from server."
+msgstr "Viipa ei tagastaud serverist."
+
+#: lib/Driver.php:116
+#, php-format
+msgid "No such backend \"%s\" found."
+msgstr "Alusrakendust \"%s\" ei leitud."
+
+#: templates/main/main.inc:90
 msgid "Old password:"
 msgstr "Vana salasõna:"
 
-msgid "Password changed!"
-msgstr "Salasõna muudetud!"
+#: lib/Driver/smbpasswd.php:47
+msgid "Passwd is not properly configured."
+msgstr "Passwd moodul ei ole korralikult häälestatud."
 
-msgid "Password module is not properly configured"
-msgstr "Password moodul ei ole korralikult häälestatud"
+#: main.php:203
+#, php-format
+msgid "Password changed on %s."
+msgstr "Salasõna süsteemis %s muudetud!"
 
-msgid "Problem?"
-msgstr "Probleem?"
+#: lib/Driver/sql.php:127
+#, php-format
+msgid "Password column \"%s\" not found in password table."
+msgstr "Salasõnade tabelis ei leitud salasõna veergu \"%s\"."
 
-msgid "Required 'phptype' not specified in SQL configuration."
-msgstr "SQL häälestuses puudub vajalik 'phptype'."
+#: lib/Driver/pspasswd.php:75
+msgid "Password module can't find the supplied bin."
+msgstr "Salasõna moodul ei leia etteantud programmi."
 
-msgid "Reset"
-msgstr ""
+#: lib/Driver/pspasswd.php:73
+msgid "Password module is missing required parameters."
+msgstr "Salasõna moodulil puuduvad vajalikud parameetrid."
 
-msgid "Server"
-msgstr ""
+#: lib/Driver/adsi.php:51
+msgid "Password module is missing target parameter."
+msgstr "Salasõna moodulil puudub target parameeter."
+
+#: main.php:178 lib/Driver/servuftp.php:71
+msgid "Password module is not properly configured"
+msgstr "Salasõna moodul ei ole korralikult häälestatud"
 
-msgid "Some of Password module's configuration files are missing:"
-msgstr "Mõned Password mooduli konfiguratsioonifailid on puudu:"
+#: lib/Driver/servuftp.php:98
+msgid "Password module is not properly configured."
+msgstr "Salasõna moodul ei ole korralikult häälestatud"
 
-msgid "Success"
-msgstr "Õnnestus"
+#: templates/main/main.inc:11
+msgid "Please provide a new password"
+msgstr "Sa pead sisestama uue salasõna"
 
-msgid ""
-"This file contains backend configuration information for the Password module "
-"scripts."
-msgstr "See fail sisaldab Password mooduli alusrakenduse häälestusinfot."
+#: templates/main/main.inc:7
+msgid "Please provide your current password"
+msgstr "Sa pead sisestama kehtiva salasõna"
 
-msgid ""
-"This is the main Password module configuration file. It contains paths and "
-"options for all Password module scripts."
+#: templates/main/main.inc:15
+msgid "Please verify your new password"
+msgstr "Uus salasõna tuleb sisestada kaks korda"
+
+#: lib/Driver/composite.php:41
+msgid "Required 'drivers' is misconfigured in Composite configuration."
 msgstr ""
-"See on Password mooduli peamine konfiguratsioonifail. See sisaldab failide "
-"asukohtining seadeid kõigi Password mooduli skriptide jaoks."
+"Kohustuslik parameeter 'drivers' on Composite seadistuses valesti määratud."
+
+#: lib/Driver/sql.php:46
+msgid "Required 'phptype' not specified in Passwd SQL configuration."
+msgstr "SQL häälestuses puudub vajalik 'phptype'."
+
+#: lib/Driver/vpopmail.php:49
+msgid "Required 'phptype' not specified in SQL configuration."
+msgstr "SQL häälestuses puudub vajalik 'phptype'."
 
+#: templates/main/main.inc:143
+msgid "Reset"
+msgstr "Tühjenda vorm"
+
+#: lib/Driver/vpopmail.php:83 lib/Driver/sql.php:75
 msgid "Unable to connect to SQL server."
 msgstr "Ei saa ühendust SQL serveriga."
 
+#: lib/Driver/vpopmail.php:150 lib/Driver/sql.php:135
+#: lib/Driver/poppassd.php:114
 msgid "User not found"
 msgstr "Kasutajat ei leitud"
 
+#: lib/Driver/kolab.php:76 lib/Driver/ldap.php:131 lib/Driver/pine.php:231
 msgid "User not found."
 msgstr "Kasutajat ei leitud."
 
+#: templates/main/main.inc:77
 msgid "Username:"
 msgstr "Kasutajanimi:"
 
-msgid "Warning"
-msgstr "Hoiatus"
-
-#, c-format
+#: main.php:47
+#, php-format
 msgid "You can't change password for user %s"
 msgstr "Sa ei saa muuta kasutaja %s salasõna"
 
+#: main.php:55
+msgid "You must give your current password"
+msgstr "Sa pead sisestama oma kehtiva salasõna"
+
+#: main.php:64
 msgid "You must give your new password"
 msgstr "Sa pead sisestama oma uue salasõna"
 
-msgid "You must give your old password"
-msgstr "Sa pead sisestama oma vana salasõna"
-
+#: main.php:68
 msgid "You must verify your new password"
 msgstr "Uus salasõna tuleb sisestada kaks korda"
 
-#, c-format
+#: main.php:88
+#, php-format
 msgid ""
 "Your new password is too long; passwords may not be more than %d characters "
 "long!"
 msgstr "Uus salasõna on liiga pikk; salasõna ei tohi olla pikem kui %d märki!"
 
+#: main.php:167
 msgid "Your new password is too simple to guess!  Not changed!"
 msgstr "Uut salasõna on liiga lihtne ära arvata! Salasõna ei muudetud!"
 
-#, c-format
+#: main.php:158
+msgid "Your new password is too simple to guess. Not changed!"
+msgstr "Uut salasõna on liiga lihtne ära arvata. Salasõna ei muudetud!"
+
+#: main.php:83
+#, php-format
 msgid "Your new password must be at least %d characters long!"
 msgstr "Uus salasõna peab olema vähemalt %d märki pikk!"
 
+#: main.php:76
 msgid "Your new password must be different from your current password"
 msgstr "Uus salasõna peab erinema praegusest salasõnast"
 
-#, c-format
+#: main.php:128
+#, php-format
 msgid "Your new password must contain at least %d alphabetic characters."
-msgstr "Uus salasõna peab sisaldama vähemale %d tähte."
+msgstr "Uus salasõna peab sisaldama vähemalt %d tähte."
 
-#, c-format
+#: main.php:133
+#, php-format
 msgid "Your new password must contain at least %d alphanumeric characters."
 msgstr "Uus salasõna peab sisaldama vähemalt %d tähte või numbrit."
 
-#, c-format
+#: main.php:138
+#, php-format
+msgid ""
+"Your new password must contain at least %d different types of characters. "
+"The types are: lower, upper, numeric, and symbols."
+msgstr ""
+"Uus salasõna peab sisaldama vähemalt %d eri tüüpi märki. Tüübid on: "
+"väiketäht, suurtäht, number ja muu märk."
+
+#: main.php:118
+#, php-format
 msgid "Your new password must contain at least %d lowercase characters."
 msgstr "Uus salasõna peab sisaldama vähemalt %d väiketähte."
 
-#, c-format
+#: main.php:123
+#, php-format
 msgid "Your new password must contain at least %d numeric characters."
 msgstr "Uus salasõna peab sisaldama vähemalt %d numbrit."
 
-#, c-format
+#: main.php:113
+#, php-format
 msgid "Your new password must contain at least %d uppercase characters."
 msgstr "Uus salasõna peab sisaldama vähemalt %d suurtähte."
 
-#, c-format
+#: main.php:144
+#, php-format
 msgid "Your new password must contain less than %d whitespace characters."
 msgstr "Uus salasõna peab sisaldama vähem kui %d tühikut."
 
+#: main.php:146
 msgid "Your new password must not contain whitespace characters."
 msgstr "Uus salasõna ei tohi sisaldada tühikuid."
 
+#: main.php:72
 msgid "Your new passwords didn't match"
 msgstr "Sisestatud salasõnad ei klapi"
 
-msgid "tempnam() failed!"
-msgstr "tempnam() ebaõnnestus!"
+#: templates/main/main.inc:19
+msgid "Your passwords do not match"
+msgstr "Salasõnad ei klapi"
diff --git a/po/fa_IR.po b/po/fa_IR.po
index 06e12e3..bc815b3 100644
--- a/po/fa_IR.po
+++ b/po/fa_IR.po
@@ -1,7 +1,7 @@
 # Persian translations for Passwd package.
 # This file is distributed under the same license as the Passwd package.
-# 
-# Copyright (C) 2004 High Concil of Informatics (www.shci.ir)
+#
+# Copyright 2004 High Concil of Informatics (www.shci.ir)
 # Provided by  Amirkabir Metanetworking Ltd, 2004 <horde at metanetworking.com>
 # Mohsen Nader-Badr       <naderi at metanetworking.com>
 # Chakameh Mortezania     <mortezania at metanetworking.com>
@@ -9,7 +9,7 @@
 # hamed Gheybit           <gheybi at metanetworking.com>
 # Vahid Ghafarpour        <ghafarpour at metanetworking.com>
 # Zahra Ahmadi Firouzjaee <ahmadi at metanetworking.com>
-# 
+#
 msgid ""
 msgstr ""
 "Project-Id-Version: Passwd 3 ALPHA\n"
@@ -80,7 +80,7 @@ msgstr "نمی‌توان به کارساز ldap متصل شد"
 msgid "Could not open pipe to smbpasswd."
 msgstr "نمی‌توان راهی به smbpasswd باز کرد."
 
-# 
+#
 #: lib/Driver/smbpasswd.php:75
 msgid "Error sending data to smbpasswd."
 msgstr "خطا در ارسال داده به smbpasswd."
diff --git a/po/fi_FI.po b/po/fi_FI.po
index d02a9fc..24e69cb 100644
--- a/po/fi_FI.po
+++ b/po/fi_FI.po
@@ -1,26 +1,32 @@
 # Finnish translation for Passwd.
-# Copyright (C)
+# Copyright
 # Tero Matinlassi <tero.matinlassi at edu.vantaa.fi>, 2002.
-# Leena Heino <liinu at uta.fi>, 2002-2004.
+# Leena Heino <liinu at uta.fi>, 2002-2008.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: Passwd 3.0-cvs\n"
+"Project-Id-Version: Passwd 3.1-cvs\n"
 "Report-Msgid-Bugs-To: dev at lists.horde.org\n"
-"POT-Creation-Date: 2005-08-29 15:19+0300\n"
-"PO-Revision-Date: 2004-12-10 12:59+0200\n"
+"POT-Creation-Date: 2008-11-03 12:17+0200\n"
+"PO-Revision-Date: 2008-11-03 12:59+0200\n"
 "Last-Translator: Leena Heino <liinu at uta.fi>\n"
 "Language-Team: Finnish <i18n at lists.horde.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=iso-8859-1\n"
 "Content-Transfer-Encoding: 8-bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
 #: lib/Driver/expect.php:34
 #, php-format
 msgid "%s does not exist or is not executable."
 msgstr "%s ei ole olemassa tai ei ole ajettava ohjelma."
 
-#: lib/Driver/composite.php:65
+#: lib/Driver/expectpecl.php:73
+#, php-format
+msgid "%s extension cannot be loaded!"
+msgstr "%s-laajennusta ei voitu ladata!"
+
+#: lib/Driver/composite.php:63
 #, php-format
 msgid "%s: unable to load driver: %s"
 msgstr "%s: ei voi ladata ajuria: %s"
@@ -34,43 +40,72 @@ msgstr "ADSI virhe %s."
 msgid "Access Denied."
 msgstr "Käyttö kielletty."
 
-#: lib/Driver.php:85
+#: lib/Driver.php:101
 msgid "Backend not correctly implemented."
 msgstr "Taustajärjestelmä ei toiminut oikein."
 
-#: main.php:250 templates/main/main.inc:142
+#: lib/Driver/poppassd.php:90
+msgid "Cannot send command to server."
+msgstr "Komento lähetettiin palvelimelle."
+
+#: main.php:268 templates/main/main.inc:141
 msgid "Change Password"
 msgstr "Vaihda salasanasi"
 
-#: templates/main/main.inc:127
-msgid "Change password on:"
+#: templates/main/main.inc:126
+msgid "Change password for:"
 msgstr "Vaihda salasana:"
 
-#: templates/main/main.inc:62
+#: templates/main/main.inc:67
 msgid "Change your password"
 msgstr "Vaihda salasanasi"
 
-#: templates/main/main.inc:69
+#: templates/main/main.inc:65
 #, php-format
-msgid "Changing password on %s"
+msgid "Changing password for %s"
 msgstr "Vaihdetaan salasanaa %s:lle"
 
-#: templates/main/main.inc:114
+#: templates/main/main.inc:113
 msgid "Confirm new password:"
 msgstr "Vahvista uusi salasana"
 
-#: lib/Driver/kolab.php:54 lib/Driver/ldap.php:99 lib/Driver/ldap.php:267
-msgid "Could not bind to ldap server"
+#: lib/Driver/kolab.php:60 lib/Driver/ldap.php:114
+msgid "Could not bind to LDAP server"
 msgstr "LDAP-palvelinta ei voitu käyttää"
 
-#: lib/Driver/kolab.php:46 lib/Driver/ldap.php:70
-msgid "Could not connect to ldap server"
+#: lib/Driver/expectpecl.php:118
+msgid "Could not change password (bad old password?)"
+msgstr "Ei voitu vaihtaa salasanaa (väärä vanha salasana?)"
+
+#: lib/Driver/expectpecl.php:138
+msgid "Could not change password."
+msgstr "Ei voitu vaihtaa salasanaa."
+
+#: lib/Driver/kolab.php:46 lib/Driver/ldap.php:80
+msgid "Could not connect to LDAP server"
 msgstr "LDAP-palvelimeen ei saatu yhteyttä"
 
+#: lib/Driver/expectpecl.php:98
+msgid "Could not login to system (no password prompt)"
+msgstr "Ei voitu kirjautua järjestelmään (ei salasanakehoitetta)"
+
 #: lib/Driver/smbpasswd.php:57
 msgid "Could not open pipe to smbpasswd."
 msgstr "Ei voitu aukaista putkea smbpasswd-ohjelmalle."
 
+#: lib/Driver/ldap.php:86
+msgid "Could not start TLS connection to LDAP server"
+msgstr "LDAP-palvelimeen ei saatu TLS-suojattua yhteyttä"
+
+#: lib/Driver/expectpecl.php:108
+msgid "Could not start passwd program (no old password prompt)"
+msgstr ""
+"Ei voitu käynnistää passwd komentoa (ei kehoitetta vanhalle salasanalle)"
+
+#: lib/Driver/expectpecl.php:44
+msgid "End of file."
+msgstr "Tiedoston loppu."
+
 #: lib/Driver/smbpasswd.php:79
 msgid "Error sending data to smbpasswd."
 msgstr "Tapahtui virhe lähetettäessä tietoa smbpasswd-ohjelmalle."
@@ -79,30 +114,45 @@ msgstr "Tapahtui virhe l
 msgid "Failed to verify old password."
 msgstr "Vanha salasana on väärä."
 
-#: main.php:207 lib/Driver/composite.php:99
+#: main.php:222 lib/Driver/composite.php:102
 #, php-format
-msgid "Failure in changing password on %s: %s"
-msgstr "Salasanan vaihto epäonnistui %s: %s"
+msgid "Failure in changing password for %s: %s"
+msgstr "Salasanan vaihto epäonnistui %s:lle: %s"
 
-#: lib/Driver.php:56 lib/Driver/kolab.php:78 lib/Driver/ldap.php:268
-#: lib/Driver/poppassd.php:114 lib/Driver/vmailmgr.php:42
-msgid "Incorrect Password"
-msgstr "Väärä salasana"
+#: lib/Driver/expectpecl.php:50
+msgid "Full buffer."
+msgstr "Bufferi on täynnä."
 
-#: lib/Driver/ldap.php:259
+#: lib/Driver.php:72 lib/Driver/http.php:72 lib/Driver/kolab.php:84
+#: lib/Driver/ldap.php:131 lib/Driver/poppassd.php:120
+#: lib/Driver/vmailmgr.php:42
+msgid "Incorrect old password."
+msgstr "Väärä vanha salasana"
+
+#: lib/Driver/ldap.php:190
 msgid "Minimum password age has not yet expired"
 msgstr "Salasanan vaihtamisenestoaika ei ole vielä kulunut umpeen"
 
-#: templates/main/main.inc:102
+#: lib/Driver/expectpecl.php:128
+msgid "New password not valid (too short, bad password, too similar, ...)"
+msgstr ""
+"Uusi salasana ei kelpaa (liian lynyt, huono salasana, liian "
+"samankaltainen, ...)"
+
+#: templates/main/main.inc:101
 msgid "New password:"
 msgstr "Uusi salasana:"
 
-#: lib/Driver.php:112
+#: lib/Driver/poppassd.php:67
+msgid "No prompt returned from server."
+msgstr "Palvelin ei palauttanut kehoitetta."
+
+#: lib/Driver.php:128
 #, php-format
 msgid "No such backend \"%s\" found."
 msgstr "Taustajärjestelmää \"%s\" ei löytynyt."
 
-#: templates/main/main.inc:90
+#: templates/main/main.inc:89
 msgid "Old password:"
 msgstr "Vanha salasana:"
 
@@ -110,11 +160,16 @@ msgstr "Vanha salasana:"
 msgid "Passwd is not properly configured."
 msgstr "Password-ohjelmisto ei ole asennettu oikein."
 
-#: main.php:199
+#: main.php:214
 #, php-format
 msgid "Password changed on %s."
 msgstr "Salasana vaihdettu %s."
 
+#: lib/Driver/sql.php:127
+#, php-format
+msgid "Password column \"%s\" not found in password table."
+msgstr "Password saraketta \"%s\" ei löytynyt password taulusta."
+
 #: lib/Driver/pspasswd.php:75
 msgid "Password module can't find the supplied bin."
 msgstr "Password-moduuli ei löydä annettua komentoa."
@@ -127,7 +182,7 @@ msgstr "Password-moduulilta puuttuu tarvittavia parametrej
 msgid "Password module is missing target parameter."
 msgstr "Password-moduulille ei ole määritelty target parametria."
 
-#: main.php:176 lib/Driver/servuftp.php:71
+#: main.php:188 lib/Driver/servuftp.php:71
 msgid "Password module is not properly configured"
 msgstr "Password-moduuli ei ole asennettu oikein"
 
@@ -161,45 +216,62 @@ msgstr ""
 msgid "Required 'phptype' not specified in SQL configuration."
 msgstr "Tarvittavaa 'phptype'-asetusta ei ollut määritelty SQL-asetuksissa."
 
-#: templates/main/main.inc:143
+#: templates/main/main.inc:142
 msgid "Reset"
 msgstr "Tyhjennä"
 
+#: lib/Driver/http.php:65
+msgid "The requested website for changing user passwords could not be reached."
+msgstr "Salasananvaihtosivustolle ei saatu yhteyttä."
+
+#: lib/Driver/http.php:74
+msgid "The username could not be found."
+msgstr "Käyttäjätunnusta ei löytynyt."
+
+#: lib/Driver/expectpecl.php:47
+msgid "Time out."
+msgstr "Aika ylittyi."
+
 #: lib/Driver/sql.php:75 lib/Driver/vpopmail.php:83
 msgid "Unable to connect to SQL server."
 msgstr "SQL-palvelimeen ei saada yhteyttä."
 
-#: lib/Driver/poppassd.php:108 lib/Driver/sql.php:125
-#: lib/Driver/vpopmail.php:143
+#: lib/Driver/expectpecl.php:93
+msgid "Unable to open expect stream!"
+msgstr "Expect vuota ei voitu aukaista!"
+
+#: lib/Driver/poppassd.php:114 lib/Driver/sql.php:135
+#: lib/Driver/vpopmail.php:150
 msgid "User not found"
 msgstr "Käyttäjää ei löytynyt"
 
-#: lib/Driver/kolab.php:70 lib/Driver/ldap.php:135 lib/Driver/pine.php:231
+#: lib/Driver/kolab.php:76 lib/Driver/ldap.php:167 lib/Driver/ldap.php:249
+#: lib/Driver/pine.php:231 lib/Driver/smbldap.php:160
 msgid "User not found."
 msgstr "Käyttäjää ei löytynyt."
 
-#: templates/main/main.inc:77
+#: templates/main/main.inc:76
 msgid "Username:"
 msgstr "Käyttäjätunnus:"
 
-#: main.php:45
+#: main.php:52
 #, php-format
 msgid "You can't change password for user %s"
 msgstr "Et voi vaihtaa käyttäjän %s salasanaa"
 
-#: main.php:53
+#: main.php:60
 msgid "You must give your current password"
 msgstr "Sinun täytyy antaa nykyinen salasanasi"
 
-#: main.php:62
+#: main.php:69
 msgid "You must give your new password"
 msgstr "Sinun täytyy antaa haluamasi uusi salasana"
 
-#: main.php:66
+#: main.php:73
 msgid "You must verify your new password"
 msgstr "Sinun täytyy vahvistaa uusi salasanasi"
 
-#: main.php:86
+#: main.php:93
 #, php-format
 msgid ""
 "Your new password is too long; passwords may not be more than %d characters "
@@ -207,34 +279,40 @@ msgid ""
 msgstr ""
 "Uusi salasanasi on liian pitkä; salasanat eivät saa olla %d merkkiä pidempiä!"
 
-#: main.php:165
+#: main.php:177
 msgid "Your new password is too simple to guess!  Not changed!"
 msgstr "Uusi salasanasi on liian helppo arvata. Salasanaa ei vaihdettu!"
 
-#: main.php:156
+#: main.php:168
 msgid "Your new password is too simple to guess. Not changed!"
 msgstr "Uusi salasanasi on liian helppo arvata. Salasanaa ei vaihdettu!"
 
-#: main.php:81
+#: main.php:88
 #, php-format
 msgid "Your new password must be at least %d characters long!"
 msgstr "Uuden salasanasi täytyy olla vähintään %d merkkiä pitkä!"
 
-#: main.php:74
+#: main.php:81
 msgid "Your new password must be different from your current password"
 msgstr "Uusi salasana ei saa olla sama kuin nykyinen salasanasi"
 
-#: main.php:126
+#: main.php:133
 #, php-format
-msgid "Your new password must contain at least %d alphabetic characters."
-msgstr "Uudessa salasanassa pitää olla vähintään %d kirjainta"
+msgid "Your new password must contain at least %d alphabetic character."
+msgid_plural ""
+"Your new password must contain at least %d alphabetic characters."
+msgstr[0] "Uudessa salasanassa pitää olla vähintään %d kirjain"
+msgstr[1] "Uudessa salasanassa pitää olla vähintään %d kirjainta"
 
-#: main.php:131
+#: main.php:138
 #, php-format
-msgid "Your new password must contain at least %d alphanumeric characters."
-msgstr "Uudessa salasanassa pitää olla vähintään %d kirjainta ja numeroa."
+msgid "Your new password must contain at least %d alphanumeric character."
+msgid_plural ""
+"Your new password must contain at least %d alphanumeric characters."
+msgstr[0] "Uudessa salasanassa pitää olla vähintään %d kirjain tai numero."
+msgstr[1] "Uudessa salasanassa pitää olla vähintään %d kirjainta tai numeroa."
 
-#: main.php:136
+#: main.php:143
 #, php-format
 msgid ""
 "Your new password must contain at least %d different types of characters. "
@@ -243,38 +321,51 @@ msgstr ""
 "Uuden salasanan pitää täyttää vähintään %d vaatimusta. Vaatimukset ovat: "
 "pieniä kirjaimia, isoja kirjaimia, numeroita ja symboleita."
 
-#: main.php:116
+#: main.php:123
+#, php-format
+msgid "Your new password must contain at least %d lowercase character."
+msgid_plural "Your new password must contain at least %d lowercase characters."
+msgstr[0] "Uudessa salasanassa pitää olla vähintään %d pieni kirjain."
+msgstr[1] "Uudessa salasanassa pitää olla vähintään %d pientä kirjainta."
+
+#: main.php:128
 #, php-format
-msgid "Your new password must contain at least %d lowercase characters."
-msgstr "Uudessa salasanassa pitää olla vähintään %d pientä kirjainta."
+msgid "Your new password must contain at least %d numeric character."
+msgid_plural "Your new password must contain at least %d numeric characters."
+msgstr[0] "Uudessa salasanassa pitää olla vähintään %d numero."
+msgstr[1] "Uudessa salasanassa pitää olla vähintään %d numeroa."
 
-#: main.php:121
+#: main.php:157
 #, php-format
-msgid "Your new password must contain at least %d numeric characters."
-msgstr "Uudessa salasanassa pitää olla vähintään %d numeroa."
+msgid "Your new password must contain at least %d symbol character."
+msgid_plural "Your new password must contain at least %d symbol characters."
+msgstr[0] "Uudessa salasanassa pitää olla vähintään %d symbolimerkki."
+msgstr[1] "Uudessa salasanassa pitää olla vähintään %d symbolimerkkiä."
 
-#: main.php:111
+#: main.php:118
 #, php-format
-msgid "Your new password must contain at least %d uppercase characters."
-msgstr "Uudessa salasanassa pitää olla vähintään %d isoa kirjainta."
+msgid "Your new password must contain at least %d uppercase character."
+msgid_plural "Your new password must contain at least %d uppercase characters."
+msgstr[0] "Uudessa salasanassa pitää olla vähintään %d iso kirjain."
+msgstr[1] "Uudessa salasanassa pitää olla vähintään %d isoa kirjainta."
 
-#: main.php:142
+#: main.php:149
 #, php-format
 msgid "Your new password must contain less than %d whitespace characters."
 msgstr "Uudessa salasanassa pitää olla vähintään %d välilyöntimerkkiä."
 
-#: main.php:144
+#: main.php:151
 msgid "Your new password must not contain whitespace characters."
 msgstr "Uudessa salasanassa ei saa olla välilyöntimerkkejä."
 
-#: main.php:70
+#: main.php:77
 msgid "Your new passwords didn't match"
 msgstr "Antamasi uudet salasanat eivät täsmää"
 
+#: lib/Driver/http.php:76
+msgid "Your password could not be changed."
+msgstr "Salasanaasii ei voitu vaihtaa."
+
 #: templates/main/main.inc:19
 msgid "Your passwords do not match"
 msgstr "Antamasi salasanat eivät täsmää"
-
-#: lib/Driver/ldap.php:76
-msgid "ldap_start_tls failed"
-msgstr "ldap_start_tls epäonnistui"
diff --git a/po/fr_FR.po b/po/fr_FR.po
index 44689ed..95dcce7 100644
--- a/po/fr_FR.po
+++ b/po/fr_FR.po
@@ -1,6 +1,6 @@
 # Passwd-h3 module translations.
 # translation of fr_FR.po to Français
-# Copyright (C) 2003, 2004 Free Software Foundation, Inc.
+# Copyright 2003, 2004 Free Software Foundation, Inc.
 # Eric Rostetter <rostetter at mail.utexas.edu>, 2002.
 # Pierre Lachance <pl at pierrelachance.net> et Benoit St-André (ben at benoitst-andre.net), 2003, 2004.
 # Thierry Thomas <thierry at pompo.net>, 2005.
diff --git a/po/gl_ES.po b/po/gl_ES.po
index 8d20233..543c656 100644
--- a/po/gl_ES.po
+++ b/po/gl_ES.po
@@ -8,7 +8,7 @@
 # Universidade de Santiago de Compostela
 #
 # Revisada y corregida por:
-# 
+#
 # Servicio de normalizacion linguistica <snlusc at usc.es>
 # Universidade de Santiago de Compostela
 #
diff --git a/po/hu_HU.po b/po/hu_HU.po
index ac66f6a..97845c3 100644
--- a/po/hu_HU.po
+++ b/po/hu_HU.po
@@ -1,5 +1,5 @@
 # passwd module translations
-# Copyright (C) 2002 Horde Project.
+# Copyright 2002-2009 The Horde Project.
 # Gyula Szabo <gyufi at sztaki.hu>, 2003.
 #
 msgid ""
diff --git a/po/id_ID.po b/po/id_ID.po
index 4041bc1..f477b31 100644
--- a/po/id_ID.po
+++ b/po/id_ID.po
@@ -1,5 +1,5 @@
 # SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# Copyright YEAR THE PACKAGE'S COPYRIGHT HOLDER
 # This file is distributed under the same license as the PACKAGE package.
 # FIRST AUTHOR <EMAIL at ADDRESS>, YEAR.
 #
diff --git a/po/it_IT.po b/po/it_IT.po
index 1bbeb50..e3ceca3 100644
--- a/po/it_IT.po
+++ b/po/it_IT.po
@@ -1,246 +1,365 @@
-# Passwd module translations
-# Copyright (C) 2003 Free Software Foundation, Inc.
+# Passwd module translations.
+# Copyright 2003 Free Software Foundation, Inc.
 # Gianrico Fichera <gianrico.fichera at itesys.it>, 2003.
+# Fabio Pedretti <fabio.pedretti at ing.unibs.it>, 2006-2008.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: passwd\n"
+"Project-Id-Version: Passwd 3.2\n"
 "Report-Msgid-Bugs-To: dev at lists.horde.org\n"
-"POT-Creation-Date: 2004-08-30 14:11+0200\n"
-"PO-Revision-Date: 2003-03-25 04:10--100\n"
-"Last-Translator: Marko Djukic <marko at oblo.com>\n"
-"Language-Team: Italian <dev at lists.horde.org>\n"
+"POT-Creation-Date: 2008-06-24 11:21+0200\n"
+"PO-Revision-Date: 2008-06-24 16:10+0200\n"
+"Last-Translator: Fabio Pedretti <fabio.pedretti at ing.unibs.it>\n"
+"Language-Team: Italian <i18n at lists.horde.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=iso-8859-1\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: lib/Driver/composite.php:58
-#, fuzzy, php-format
+#: lib/Driver/expect.php:34
+#, php-format
+msgid "%s does not exist or is not executable."
+msgstr "%s non esiste o non è eseguibile."
+
+#: lib/Driver/expectpecl.php:73
+#, php-format
+msgid "%s extension cannot be loaded!"
+msgstr "L'estensione %s non può essere caricata!"
+
+#: lib/Driver/composite.php:63
+#, php-format
 msgid "%s: unable to load driver: %s"
-msgstr "Impossibile aprire l'archivio compresso."
+msgstr "%s: impossibile caricare il driver: %s"
+
+#: lib/Driver/adsi.php:61
+#, php-format
+msgid "ADSI error %s."
+msgstr "Errore ADSI %s."
 
-#: lib/Driver.php:80
+#: lib/Driver/adsi.php:64 lib/Driver/pspasswd.php:105
+msgid "Access Denied."
+msgstr "Accesso Proibito."
+
+#: lib/Driver.php:101
 msgid "Backend not correctly implemented."
-msgstr ""
+msgstr "Backend non implementato correttamente"
+
+#: lib/Driver/poppassd.php:90
+msgid "Cannot send command to server."
+msgstr "Impossibile inviare comandi al server."
 
-#: main.php:232 templates/main/main.inc:93
+#: main.php:263 templates/main/main.inc:141
 msgid "Change Password"
 msgstr "Cambia Password"
 
-#: templates/main/main.inc:78
-#, fuzzy
-msgid "Change password on:"
-msgstr "Cambia Password"
+#: templates/main/main.inc:126
+msgid "Change password for:"
+msgstr "Cambio password per:"
 
-#: templates/main/main.inc:13
+#: templates/main/main.inc:67
 msgid "Change your password"
 msgstr "Cambia la tua password"
 
-#: templates/main/main.inc:20
-#, fuzzy, php-format
-msgid "Changing password on %s"
-msgstr "Cambio Password su %s"
-
 #: templates/main/main.inc:65
+#, php-format
+msgid "Changing password for %s"
+msgstr "Cambio password per %s"
+
+#: templates/main/main.inc:113
 msgid "Confirm new password:"
-msgstr "Conferma la tua nuova password:"
+msgstr "Conferma la nuova password:"
 
-#: lib/Driver/ldap.php:86 lib/Driver/ldap.php:223 lib/Driver/smbldap.php:88
-#: lib/Driver/smbldap.php:166
-msgid "Could not bind to ldap server"
-msgstr ""
+#: lib/Driver/kolab.php:60 lib/Driver/ldap.php:114
+msgid "Could not bind to LDAP server"
+msgstr "Impossibile collegarsi al LDAP server"
+
+# c-format
+#: lib/Driver/expectpecl.php:118
+msgid "Could not change password (bad old password?)"
+msgstr "Impossibile cambiare la password (vecchia password sbagliata?)"
 
-#: lib/Driver/ldap.php:62 lib/Driver/smbldap.php:65
-msgid "Could not connect to ldap server"
-msgstr "Impossibile connettersi al server ldap"
+#: lib/Driver/expectpecl.php:138
+msgid "Could not change password."
+msgstr "Impossibile cambiare password"
 
-#: lib/Driver/smbpasswd.php:52
+#: lib/Driver/kolab.php:46 lib/Driver/ldap.php:80
+msgid "Could not connect to LDAP server"
+msgstr "Impossibile connettersi al server LDAP"
+
+#: lib/Driver/expectpecl.php:98
+msgid "Could not login to system (no password prompt)"
+msgstr "Impossibile autenticarsi al sistema (mancanza di password)."
+
+#: lib/Driver/smbpasswd.php:57
 msgid "Could not open pipe to smbpasswd."
-msgstr "Non potevo aprire un pipe a smbpasswd."
+msgstr "Impossibile aprire un pipe a smbpasswd."
+
+#: lib/Driver/ldap.php:86
+msgid "Could not start TLS connection to LDAP server"
+msgstr "Impossibile effettuare connessioni TLS al server LDAP"
 
-#: lib/Driver/smbpasswd.php:66
+#: lib/Driver/expectpecl.php:108
+msgid "Could not start passwd program (no old password prompt)"
+msgstr ""
+"Impossibile eseguire il programma passwd (mancanza della vecchia password)."
+
+#: lib/Driver/expectpecl.php:44
+msgid "End of file."
+msgstr "Fine del file."
+
+#: lib/Driver/smbpasswd.php:79
 msgid "Error sending data to smbpasswd."
-msgstr "Errore nel invio di dati a smbpasswd."
+msgstr "Errore nell' invio di dati a smbpasswd."
 
-#: main.php:193 lib/Driver/composite.php:92
-#, fuzzy, php-format
-msgid "Failure in changing password on %s: %s"
-msgstr "Errore nel cambiamento di password: "
+#: lib/Driver/pspasswd.php:93
+msgid "Failed to verify old password."
+msgstr "Verifica della vecchia password fallita."
 
-#: templates/menu/menu.inc:10
-msgid "Help"
-msgstr "Aiuto"
+#: main.php:217 lib/Driver/composite.php:102
+#, php-format
+msgid "Failure in changing password for %s: %s"
+msgstr "Errore nel cambiamento di password per %s: %s"
+
+#: lib/Driver/expectpecl.php:50
+msgid "Full buffer."
+msgstr "Buffer pieno."
 
-#: lib/Driver.php:51 lib/Driver/ldap.php:224 lib/Driver/poppassd.php:106
-#: lib/Driver/smbldap.php:167 lib/Driver/vmailmgr.php:35
+#: lib/Driver.php:72 lib/Driver/kolab.php:84 lib/Driver/poppassd.php:120
+#: lib/Driver/vmailmgr.php:42
 msgid "Incorrect Password"
 msgstr "Password Errata"
 
-#: lib/Driver/ldap.php:207
+#: lib/Driver/ldap.php:131
+msgid "Incorrect old password."
+msgstr "Vecchia password errata."
+
+#: lib/Driver/ldap.php:190
 msgid "Minimum password age has not yet expired"
+msgstr "L'età minima della password non è ancora stata raggiunta"
+
+#: lib/Driver/expectpecl.php:128
+msgid "New password not valid (too short, bad password, too similar, ...)"
 msgstr ""
+"Nuova password non valida (troppo corta, password errata, troppo simile, ...)"
 
-#: templates/main/main.inc:53
+#: templates/main/main.inc:101
 msgid "New password:"
 msgstr "Nuova password:"
 
-#: lib/Driver.php:107
-#, fuzzy, php-format
-msgid "No such backend '%s' found."
-msgstr "Nessun backend '%s' trovato"
+#: lib/Driver/poppassd.php:67
+msgid "No prompt returned from server."
+msgstr "Nessun prompt restituito dal server."
+
+#: lib/Driver.php:128
+#, php-format
+msgid "No such backend \"%s\" found."
+msgstr "Nessun backend \"%s\" trovato."
+
+#: lib/Driver/http.php:72
+msgid "Old password is incorrect."
+msgstr "La vecchia password non è corretta."
 
-#: templates/main/main.inc:41
+#: templates/main/main.inc:89
 msgid "Old password:"
 msgstr "Vecchia password:"
 
-#: lib/Driver/smbpasswd.php:42
-#, fuzzy
+#: lib/Driver/smbpasswd.php:47
 msgid "Passwd is not properly configured."
-msgstr "Il modulo password non e' configurato correttamente"
+msgstr "Passwd non è configurato correttamente"
 
-#: main.php:190
-#, fuzzy, php-format
+#: main.php:209
+#, php-format
 msgid "Password changed on %s."
-msgstr "La password e' stata cambiata."
+msgstr "La password su %s è stata cambiata."
+
+#: lib/Driver/sql.php:127
+#, php-format
+msgid "Password column \"%s\" not found in password table."
+msgstr "Colonna password \"%s\" non trovata nella tabella password."
 
-#: main.php:171 lib/Driver/servuftp.php:66
+#: lib/Driver/pspasswd.php:75
+msgid "Password module can't find the supplied bin."
+msgstr "Il modulo password non ha trovato il binario fornito."
+
+#: lib/Driver/pspasswd.php:73
+msgid "Password module is missing required parameters."
+msgstr "Al modulo password mancano dei parametri richiesti."
+
+#: lib/Driver/adsi.php:51
+msgid "Password module is missing target parameter."
+msgstr "Al modulo password manca il parametro target."
+
+#: main.php:183 lib/Driver/servuftp.php:71
 msgid "Password module is not properly configured"
-msgstr "Il modulo password non e' configurato correttamente"
+msgstr "Modulo password non configurato correttamente"
 
-#: lib/Driver/servuftp.php:93
-#, fuzzy
+#: lib/Driver/servuftp.php:98
 msgid "Password module is not properly configured."
-msgstr "Il modulo password non e' configurato correttamente"
+msgstr "Modulo password non configurato correttamente."
+
+#: templates/main/main.inc:11
+msgid "Please provide a new password"
+msgstr "Inserisci una nuova password"
+
+#: templates/main/main.inc:7
+msgid "Please provide your current password"
+msgstr "Inserisci la tua password attuale"
+
+#: templates/main/main.inc:15
+msgid "Please verify your new password"
+msgstr "Verifica la tua nuova password"
 
-#: lib/Driver/composite.php:34
-#, fuzzy
+#: lib/Driver/composite.php:41
 msgid "Required 'drivers' is misconfigured in Composite configuration."
-msgstr "'%s' non specificata nella configurazione delle categorie."
+msgstr ""
+"Parametro 'drivers' non configurato correttamente nella configurazione di "
+"Composite."
 
-#: lib/Driver/sql.php:40
-#, fuzzy
+#: lib/Driver/sql.php:46
 msgid "Required 'phptype' not specified in Passwd SQL configuration."
-msgstr "'phptype' non specificato nella configurazione SQL delle categorie."
+msgstr ""
+"Parametro 'phptype' non specificato nella configurazione di Passwd SQL."
 
-#: lib/Driver/vpopmail.php:42
+#: lib/Driver/vpopmail.php:49
 msgid "Required 'phptype' not specified in SQL configuration."
-msgstr "'phptype' non specificato nella configurazione SQL delle categorie."
+msgstr "Parametro 'phptype' non specificato nella configurazione SQL."
 
-#: templates/main/main.inc:94
+#: templates/main/main.inc:142
 msgid "Reset"
-msgstr "Annulla"
+msgstr "Resetta"
+
+#: lib/Driver/http.php:65
+msgid "The requested website for changing user passwords could not be reached."
+msgstr "Il sito richiesto per cambiare le password utente non è raggiungibile."
+
+#: lib/Driver/http.php:74
+msgid "The username could not be found."
+msgstr "L'utente non può essere trovato."
 
-#: lib/Driver/sql.php:69 lib/Driver/vpopmail.php:76
+#: lib/Driver/expectpecl.php:47
+msgid "Time out."
+msgstr "Tempo esaurito."
+
+#: lib/Driver/sql.php:75 lib/Driver/vpopmail.php:83
 msgid "Unable to connect to SQL server."
 msgstr "Impossibile connettersi al server SQL."
 
-#: lib/Driver/poppassd.php:100 lib/Driver/sql.php:118
-#: lib/Driver/vpopmail.php:135
+#: lib/Driver/expectpecl.php:93
+msgid "Unable to open expect stream!"
+msgstr "Impossibile aprire il flusso expect!"
+
+#: lib/Driver/poppassd.php:114 lib/Driver/sql.php:135
+#: lib/Driver/vpopmail.php:150
 msgid "User not found"
 msgstr "Utente non trovato"
 
-#: lib/Driver/ldap.php:123 lib/Driver/pine.php:219 lib/Driver/smbldap.php:124
+#: lib/Driver/kolab.php:76 lib/Driver/ldap.php:167 lib/Driver/ldap.php:249
+#: lib/Driver/pine.php:231 lib/Driver/smbldap.php:160
 msgid "User not found."
 msgstr "Utente non trovato."
 
-#: templates/main/main.inc:28
+#: templates/main/main.inc:76
 msgid "Username:"
 msgstr "Nome utente:"
 
 # c-format
-#: main.php:39
+#: main.php:52
 #, php-format
 msgid "You can't change password for user %s"
-msgstr "Non puoi cambiare la password per l'utente %s"
+msgstr "Non puoi cambiare la password dell'utente %s"
 
-#: main.php:47
+#: main.php:60
 msgid "You must give your current password"
 msgstr "Devi inserire la tua password attuale"
 
-#: main.php:56
+#: main.php:69
 msgid "You must give your new password"
 msgstr "Devi inserire la tua nuova password"
 
-#: main.php:60
+#: main.php:73
 msgid "You must verify your new password"
-msgstr "Devi inserire la tua nuova password nella verifica"
+msgstr "Devi verificare la tua nuova password"
 
-#: main.php:80
+#: main.php:93
 #, php-format
 msgid ""
 "Your new password is too long; passwords may not be more than %d characters "
 "long!"
 msgstr ""
-"La tua password e' troppo lunga; una password non puo' essere piu' di %d "
+"La tua password è troppo lunga; una password non può essere lunga più di %d "
 "caratteri!"
 
-#: main.php:159
+#: main.php:172
 msgid "Your new password is too simple to guess!  Not changed!"
-msgstr "La tua password e' troppo facile ad indovinare! Non e' stata cambiata!"
+msgstr "La tua password è troppo facile da indovinare! Non è stata cambiata!"
 
-#: main.php:150
-#, fuzzy
+#: main.php:163
 msgid "Your new password is too simple to guess. Not changed!"
-msgstr "La tua password e' troppo facile ad indovinare! Non e' stata cambiata!"
+msgstr "La tua password è troppo facile da indovinare! Non è stata cambiata!"
 
-#: main.php:75
+#: main.php:88
 #, php-format
 msgid "Your new password must be at least %d characters long!"
-msgstr "La tua password deve essere lunga minimo %d caratteri!"
+msgstr "La tua password deve essere lunga almeno %d caratteri!"
 
-#: main.php:68
+#: main.php:81
 msgid "Your new password must be different from your current password"
 msgstr "La tua nuova password deve essere differente dalla vecchia."
 
-#: main.php:120
+#: main.php:133
 #, php-format
 msgid "Your new password must contain at least %d alphabetic characters."
-msgstr "La tua nuova password deve contenere minimo %d lettere."
+msgstr "La tua nuova password deve contenere almeno %d lettere."
 
-#: main.php:125
+#: main.php:138
 #, php-format
 msgid "Your new password must contain at least %d alphanumeric characters."
 msgstr ""
-"La tua nuova password deve contenere minimo %d caratteri alphanumerici."
+"La tua nuova password deve contenere almeno %d caratteri alphanumerici."
 
-#: main.php:130
-#, fuzzy, php-format
+#: main.php:143
+#, php-format
 msgid ""
 "Your new password must contain at least %d different types of characters. "
 "The types are: lower, upper, numeric, and symbols."
-msgstr "La tua nuova password deve contenere minimo %d caratteri minuscoli."
+msgstr ""
+"La tua nuova password deve contenere almeno %d tipi di caratteri. I tipi "
+"sono: minuscolo, maiuscolo, numerico e simbolico."
 
-#: main.php:110
+#: main.php:123
 #, php-format
 msgid "Your new password must contain at least %d lowercase characters."
-msgstr "La tua nuova password deve contenere minimo %d caratteri minuscoli."
+msgstr "La tua nuova password deve contenere almeno %d caratteri minuscoli."
 
-#: main.php:115
+#: main.php:128
 #, php-format
 msgid "Your new password must contain at least %d numeric characters."
-msgstr "La tua nuova password deve contenere minimo %d caratteri numerici."
+msgstr "La tua nuova password deve contenere almeno %d caratteri numerici."
 
-#: main.php:105
+#: main.php:118
 #, php-format
 msgid "Your new password must contain at least %d uppercase characters."
-msgstr "La tua nuova password deve contenere minimo %d caratteri maiuscoli."
+msgstr "La tua nuova password deve contenere almeno %d caratteri maiuscoli."
 
-#: main.php:136
+#: main.php:149
 #, php-format
 msgid "Your new password must contain less than %d whitespace characters."
 msgstr ""
 "La tua nuova password deve contenere meno di %d caratteri del tipo spazi "
 "bianchi."
 
-#: main.php:138
+#: main.php:151
 msgid "Your new password must not contain whitespace characters."
 msgstr ""
-"La tua nuova password non può contenere caratteri del tipo spazi bianchi."
+"La tua nuova password non deve contenere caratteri del tipo spazi bianchi."
 
-#: main.php:64
+#: main.php:77
 msgid "Your new passwords didn't match"
-msgstr "Le due nuove password sono differenti"
+msgstr "Le tue nuove password non corrispondono"
+
+#: lib/Driver/http.php:76
+msgid "Your password could not be changed."
+msgstr "La password non può essere cambiata."
 
-#: lib/Driver/ldap.php:68 lib/Driver/smbldap.php:71
-msgid "ldap_start_tls failed"
-msgstr "ldap_start_tls falito"
+#: templates/main/main.inc:19
+msgid "Your passwords do not match"
+msgstr "Le tue password non corrispondono"
diff --git a/po/passwd.pot b/po/ja_JP.po
similarity index 61%
copy from po/passwd.pot
copy to po/ja_JP.po
index 4a33459..77153e1 100644
--- a/po/passwd.pot
+++ b/po/ja_JP.po
@@ -1,236 +1,235 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR Horde Project
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL at ADDRESS>, YEAR.
+# Japanese translation for Passwd.
+# Copyright YEAR Horde Project
+# This file is distributed under the same license as the Passwd package.
+# Hiromi Kimura <hiromi at tac.tsukuba.ac.jp>
 #
-#, fuzzy
 msgid ""
 msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
+"Project-Id-Version: Passwd 3.0\n"
 "Report-Msgid-Bugs-To: dev at lists.horde.org\n"
 "POT-Creation-Date: 2005-10-09 16:51+0200\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
-"Language-Team: LANGUAGE <LL at li.org>\n"
+"PO-Revision-Date: 2006-03-24 22:40+0900\n"
+"Last-Translator: Hiromi Kimura <hiromi at tac.tsukuba.ac.jp>\n"
+"Language-Team: Japanese <LL at li.org>\n"
 "MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Type: text/plain; charset=SHIFT_JIS\n"
 "Content-Transfer-Encoding: 8bit\n"
 
 #: lib/Driver/expect.php:34
 #, php-format
 msgid "%s does not exist or is not executable."
-msgstr ""
+msgstr "%s ‚ª‘¶Ý‚µ‚È‚¢‚©ŽÀs‰Â”\‚Å‚Í‚ ‚è‚Ü‚¹‚ñB"
 
 #: lib/Driver/composite.php:65
 #, php-format
 msgid "%s: unable to load driver: %s"
-msgstr ""
+msgstr "%s: ƒhƒ‰ƒCƒo[‚ªƒ[ƒh‚Å‚«‚Ü‚¹‚ñ: %s"
 
 #: lib/Driver/adsi.php:61
 #, php-format
 msgid "ADSI error %s."
-msgstr ""
+msgstr "ADSI ƒGƒ‰[ %sB"
 
 #: lib/Driver/pspasswd.php:105 lib/Driver/adsi.php:64
 msgid "Access Denied."
-msgstr ""
+msgstr "ƒAƒNƒZƒX‚ª‹‘”Û‚³‚ê‚Ü‚µ‚½B"
 
 #: lib/Driver.php:85
 msgid "Backend not correctly implemented."
-msgstr ""
+msgstr "ƒoƒbƒNƒGƒ“ƒh‚̐ݒ肪³‚µ‚­‚ ‚è‚Ü‚¹‚ñB"
 
 #: main.php:255 templates/main/main.inc:142
 msgid "Change Password"
-msgstr ""
+msgstr "ƒpƒXƒ[ƒh•ÏX"
 
 #: templates/main/main.inc:127
 msgid "Change password on:"
-msgstr ""
+msgstr "ƒpƒXƒ[ƒh•ÏX:"
 
 #: templates/main/main.inc:62
 msgid "Change your password"
-msgstr ""
+msgstr "ƒpƒXƒ[ƒh•ÏX"
 
 #: templates/main/main.inc:69
 #, php-format
 msgid "Changing password on %s"
-msgstr ""
+msgstr "%s ‚̃pƒXƒ[ƒh‚ð•ÏX‚µ‚Ü‚·"
 
 #: templates/main/main.inc:114
 msgid "Confirm new password:"
-msgstr ""
+msgstr "V‚µ‚¢ƒpƒXƒ[ƒh‚ÌŠm”FF"
 
 #: lib/Driver/ldap.php:95 lib/Driver/ldap.php:263 lib/Driver/kolab.php:54
 msgid "Could not bind to ldap server"
-msgstr ""
+msgstr "LDAP ƒT[ƒo‚ɃoƒCƒ“ƒh‚Å‚«‚Ü‚¹‚ñ"
 
 #: lib/Driver/ldap.php:70 lib/Driver/kolab.php:46
 msgid "Could not connect to ldap server"
-msgstr ""
+msgstr "LDAP ƒT[ƒo‚ɐڑ±‚Å‚«‚Ü‚¹‚ñ"
 
 #: lib/Driver/smbpasswd.php:57
 msgid "Could not open pipe to smbpasswd."
-msgstr ""
+msgstr "smbpasswd ‚ɃpƒCƒv‚Őڑ±‚Å‚«‚Ü‚¹‚ñB"
 
 #: lib/Driver/smbpasswd.php:79
 msgid "Error sending data to smbpasswd."
-msgstr ""
+msgstr "smbpasswd ‚ւ̃f[ƒ^‘—M’†ƒGƒ‰[‚Å‚·B"
 
 #: lib/Driver/pspasswd.php:93
 msgid "Failed to verify old password."
-msgstr ""
+msgstr "ŒÃ‚¢ƒpƒXƒ[ƒh‚ªŠm”F‚Å‚«‚Ü‚¹‚ñB"
 
 #: main.php:211 lib/Driver/composite.php:99
 #, php-format
 msgid "Failure in changing password on %s: %s"
-msgstr ""
+msgstr "%s ‚̃pƒXƒ[ƒh•ÏXŽ¸”s: %s"
 
 #: lib/Driver.php:56 lib/Driver/ldap.php:264 lib/Driver/vmailmgr.php:42
 #: lib/Driver/kolab.php:78 lib/Driver/poppassd.php:114
 msgid "Incorrect Password"
-msgstr ""
+msgstr "•s³‚ȃpƒXƒ[ƒh‚Å‚·"
 
 #: lib/Driver/ldap.php:255
 msgid "Minimum password age has not yet expired"
-msgstr ""
+msgstr "ƒpƒXƒ[ƒh‚Ì—LŒøŠúŒÀ‚͉߂¬‚Ä‚¢‚Ü‚¹‚ñB"
 
 #: templates/main/main.inc:102
 msgid "New password:"
-msgstr ""
+msgstr "V‚µ‚¢ƒpƒXƒ[ƒhF"
 
 #: lib/Driver.php:112
 #, php-format
 msgid "No such backend \"%s\" found."
-msgstr ""
+msgstr "ƒoƒbƒNƒGƒ“ƒh \"%s\" ‚ªŒ©•t‚©‚è‚Ü‚¹‚ñB"
 
 #: templates/main/main.inc:90
 msgid "Old password:"
-msgstr ""
+msgstr "ŒÃ‚¢ƒpƒXƒ[ƒhF"
 
 #: lib/Driver/smbpasswd.php:47
 msgid "Passwd is not properly configured."
-msgstr ""
+msgstr "Passwd ‚ª³‚µ‚­Ý’肳‚ê‚Ä‚¢‚Ü‚¹‚ñB"
 
 #: main.php:203
 #, php-format
 msgid "Password changed on %s."
-msgstr ""
+msgstr "%s ‚̃pƒXƒ[ƒh‚ð•ÏX‚µ‚Ü‚µ‚½B"
 
 #: lib/Driver/pspasswd.php:75
 msgid "Password module can't find the supplied bin."
-msgstr ""
+msgstr "ƒpƒXƒ[ƒhƒ‚ƒWƒ…[ƒ‹‚ÍŽw’肳‚ꂽƒpƒXibinj‚ðŒ©‚Â‚¯‚ç‚ê‚Ü‚¹‚ñB"
 
 #: lib/Driver/pspasswd.php:73
 msgid "Password module is missing required parameters."
-msgstr ""
+msgstr "ƒpƒXƒ[ƒhƒ‚ƒWƒ…[ƒ‹‚Í—v‹‚³‚ꂽƒpƒ‰ƒ[ƒ^‚ðŒ©‚Â‚¯‚ç‚ê‚Ü‚¹‚ñB"
 
 #: lib/Driver/adsi.php:51
 msgid "Password module is missing target parameter."
-msgstr ""
+msgstr "ƒpƒXƒ[ƒhƒ‚ƒWƒ…[ƒ‹‚Í–Ú“I‚̃pƒ‰ƒ[ƒ^‚ðŒ©‚Â‚¯‚ç‚ê‚Ü‚¹‚ñB"
 
 #: main.php:178 lib/Driver/servuftp.php:71
 msgid "Password module is not properly configured"
-msgstr ""
+msgstr "ƒpƒXƒ[ƒhƒ‚ƒWƒ…[ƒ‹‚ª³‚µ‚­Ý’肳‚ê‚Ä‚¢‚Ü‚¹‚ñ"
 
 #: lib/Driver/servuftp.php:98
 msgid "Password module is not properly configured."
-msgstr ""
+msgstr "ƒpƒXƒ[ƒhƒ‚ƒWƒ…[ƒ‹‚ª³‚µ‚­Ý’肳‚ê‚Ä‚¢‚Ü‚¹‚ñB"
 
 #: templates/main/main.inc:11
 msgid "Please provide a new password"
-msgstr ""
+msgstr "V‚µ‚¢ƒpƒXƒ[ƒh‚ð“ü—Í‚µ‚ĉº‚³‚¢"
 
 #: templates/main/main.inc:7
 msgid "Please provide your current password"
-msgstr ""
+msgstr "Œ»Ý‚̃pƒXƒ[ƒh‚ð“ü—Í‚µ‚ĉº‚³‚¢"
 
 #: templates/main/main.inc:15
 msgid "Please verify your new password"
-msgstr ""
+msgstr "V‚µ‚¢ƒpƒXƒ[ƒh‚ðŠm”F‚µ‚ĉº‚³‚¢"
 
 #: lib/Driver/composite.php:41
 msgid "Required 'drivers' is misconfigured in Composite configuration."
-msgstr ""
+msgstr "—v‹‚³‚ꂽƒhƒ‰ƒCƒo[‚͐³‚µ‚­Ý’肳‚ê‚Ä‚¢‚Ü‚¹‚ñB"
 
 #: lib/Driver/sql.php:46
 msgid "Required 'phptype' not specified in Passwd SQL configuration."
-msgstr ""
+msgstr "SQL Ý’è‚É•K—v‚È 'phptype' ‚ªŽw’肳‚ê‚Ä‚¢‚Ü‚¹‚ñ"
 
 #: lib/Driver/vpopmail.php:49
 msgid "Required 'phptype' not specified in SQL configuration."
-msgstr ""
+msgstr "SQL Ý’è‚É•K—v‚È 'phptype' ‚ªŽw’肳‚ê‚Ä‚¢‚Ü‚¹‚ñ"
 
 #: templates/main/main.inc:143
 msgid "Reset"
-msgstr ""
+msgstr "ƒŠƒZƒbƒg"
 
 #: lib/Driver/sql.php:75 lib/Driver/vpopmail.php:83
 msgid "Unable to connect to SQL server."
-msgstr ""
+msgstr "SQL ƒT[ƒo‚ɐڑ±‚Å‚«‚Ü‚¹‚ñB"
 
 #: lib/Driver/sql.php:125 lib/Driver/poppassd.php:108
 #: lib/Driver/vpopmail.php:143
 msgid "User not found"
-msgstr ""
+msgstr "ƒ†[ƒU‚ªŒ©•t‚©‚è‚Ü‚¹‚ñ"
 
 #: lib/Driver/ldap.php:131 lib/Driver/kolab.php:70 lib/Driver/pine.php:231
 msgid "User not found."
-msgstr ""
+msgstr "ƒ†[ƒU‚ªŒ©•t‚©‚è‚Ü‚¹‚ñ"
 
 #: templates/main/main.inc:77
 msgid "Username:"
-msgstr ""
+msgstr "ƒ†[ƒU–¼F"
 
 #: main.php:47
 #, php-format
 msgid "You can't change password for user %s"
-msgstr ""
+msgstr "‚ ‚È‚½‚̓†[ƒU %s ‚̃pƒXƒ[ƒh‚͕ύX‚Å‚«‚Ü‚¹‚ñ"
 
 #: main.php:55
 msgid "You must give your current password"
-msgstr ""
+msgstr "ŒÃ‚¢ƒpƒXƒ[ƒh‚ðŽw’肵‚ĉº‚³‚¢"
 
 #: main.php:64
 msgid "You must give your new password"
-msgstr ""
+msgstr "V‚µ‚¢ƒpƒXƒ[ƒh‚ðŽw’肵‚ĉº‚³‚¢"
 
 #: main.php:68
 msgid "You must verify your new password"
-msgstr ""
+msgstr "V‚µ‚¢ƒpƒXƒ[ƒh‚ðŠm”F‚µ‚ĉº‚³‚¢"
 
 #: main.php:88
 #, php-format
 msgid ""
 "Your new password is too long; passwords may not be more than %d characters "
 "long!"
-msgstr ""
+msgstr "V‚µ‚¢ƒpƒXƒ[ƒh‚ª’·‚·‚¬‚Ü‚·B%d •¶Žš‚Ü‚Å‚É‚µ‚ĉº‚³‚¢"
 
 #: main.php:167
 msgid "Your new password is too simple to guess!  Not changed!"
-msgstr ""
+msgstr "V‚µ‚¢ƒpƒXƒ[ƒh‚ÍŠÈ’P‚·‚¬‚Ü‚·I •ÏX‚µ‚Ü‚¹‚ñI"
 
 #: main.php:158
 msgid "Your new password is too simple to guess. Not changed!"
-msgstr ""
+msgstr "V‚µ‚¢ƒpƒXƒ[ƒh‚ÍŠÈ’P‚·‚¬‚Ü‚·I •ÏX‚µ‚Ü‚¹‚ñI"
 
 #: main.php:83
 #, php-format
 msgid "Your new password must be at least %d characters long!"
-msgstr ""
+msgstr "V‚µ‚¢ƒpƒXƒ[ƒh‚Í %d •¶ŽšˆÈã‚É‚µ‚ĉº‚³‚¢"
 
 #: main.php:76
 msgid "Your new password must be different from your current password"
-msgstr ""
+msgstr "V‚µ‚¢ƒpƒXƒ[ƒh‚͌¢ƒpƒXƒ[ƒh‚Ƃ͈Ⴄ‚à‚Ì‚É‚µ‚ĉº‚³‚¢"
 
 #: main.php:128
 #, php-format
 msgid "Your new password must contain at least %d alphabetic characters."
-msgstr ""
+msgstr "V‚µ‚¢ƒpƒXƒ[ƒh‚É %d ŒÂˆÈã‚̉pŽš‚ðŠÜ‚߂ĉº‚³‚¢B"
 
 #: main.php:133
 #, php-format
 msgid "Your new password must contain at least %d alphanumeric characters."
-msgstr ""
+msgstr "V‚µ‚¢ƒpƒXƒ[ƒh‚É %d ŒÂˆÈã‚̉p”Žš‚ðŠÜ‚߂ĉº‚³‚¢B"
 
 #: main.php:138
 #, php-format
@@ -238,39 +237,41 @@ msgid ""
 "Your new password must contain at least %d different types of characters. "
 "The types are: lower, upper, numeric, and symbols."
 msgstr ""
+"V‚µ‚¢ƒpƒXƒ[ƒh‚ɂ͏­‚È‚­‚Æ‚à %d ŒÂ‚̈قȂ镶Žš‚ðŠÜ‚߂ĉº‚³‚¢B‚‚܂èA¬•¶"
+"ŽšA‘啶ŽšA”Žš‚Æ‹L†‚Å‚·B"
 
 #: main.php:118
 #, php-format
 msgid "Your new password must contain at least %d lowercase characters."
-msgstr ""
+msgstr "V‚µ‚¢ƒpƒXƒ[ƒh‚É %d ŒÂˆÈã‚̏¬•¶Žš‚ðŠÜ‚߂ĉº‚³‚¢B"
 
 #: main.php:123
 #, php-format
 msgid "Your new password must contain at least %d numeric characters."
-msgstr ""
+msgstr "V‚µ‚¢ƒpƒXƒ[ƒh‚É %d ŒÂˆÈã‚̐”Žš‚ðŠÜ‚߂ĉº‚³‚¢B"
 
 #: main.php:113
 #, php-format
 msgid "Your new password must contain at least %d uppercase characters."
-msgstr ""
+msgstr "V‚µ‚¢ƒpƒXƒ[ƒh‚É %d ŒÂˆÈã‚̑啶Žš‚ðŠÜ‚߂ĉº‚³‚¢B"
 
 #: main.php:144
 #, php-format
 msgid "Your new password must contain less than %d whitespace characters."
-msgstr ""
+msgstr "V‚µ‚¢ƒpƒXƒ[ƒh‚É %d ŒÂˆÈã‚Ì‹ó”’‚ðŠÜ‚߂ĉº‚³‚¢B"
 
 #: main.php:146
 msgid "Your new password must not contain whitespace characters."
-msgstr ""
+msgstr "V‚µ‚¢ƒpƒXƒ[ƒh‚É‹ó”’‚ð“ü‚ê‚È‚¢‚ʼnº‚³‚¢B"
 
 #: main.php:72
 msgid "Your new passwords didn't match"
-msgstr ""
+msgstr "V‚µ‚¢ƒpƒXƒ[ƒh‚ªˆê’v‚µ‚Ü‚¹‚ñ"
 
 #: templates/main/main.inc:19
 msgid "Your passwords do not match"
-msgstr ""
+msgstr "ƒpƒXƒ[ƒh‚ªˆê’v‚µ‚Ü‚¹‚ñ"
 
 #: lib/Driver/ldap.php:76
 msgid "ldap_start_tls failed"
-msgstr ""
+msgstr "ldap_start_tls ‚ÉŽ¸”s‚µ‚Ü‚µ‚½"
diff --git a/po/lt_LT.po b/po/lt_LT.po
index 5d642fc..e1cc570 100644
--- a/po/lt_LT.po
+++ b/po/lt_LT.po
@@ -1,188 +1,279 @@
 # Lithuanian translations for Passwd package.
-# Copyright (C) 2004 Horde Project
+# Copyright 2007-2009 The Horde Project
 # This file is distributed under the same license as the Passwd package.
 # Darius Matuliauskas <darius at lnk.lt>, 2003.
-# Vilius Sumskas <vilius at lnk.lt>, 2004.
+# Vilius Sumskas <vilius at lnk.lt>, 2004, 2007.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: Passwd 3.0-cvs\n"
+"Project-Id-Version: Passwd 3.1-cvs\n"
 "Report-Msgid-Bugs-To: dev at lists.horde.org\n"
-"POT-Creation-Date: 2004-11-24 16:44+0200\n"
-"PO-Revision-Date: 2004-11-30 20:47+0200\n"
+"POT-Creation-Date: 2007-11-23 16:25+0200\n"
+"PO-Revision-Date: 2007-11-23 16:26+0200\n"
 "Last-Translator: Vilius Sumskas <vilius at lnk.lt>\n"
 "Language-Team: Lithuanian <vilius at lnk.lt>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=ISO-8859-13\n"
 "Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%"
+"100<10 || n%100>=20) ? 1 : 2);\n"
 
-#: lib/Driver/composite.php:58
+#: lib/Driver/expect.php:34
+#, php-format
+msgid "%s does not exist or is not executable."
+msgstr "%s neegzistuoja arba nëra paleidþiamasis failas."
+
+#: lib/Driver/expectpecl.php:73
+#, php-format
+msgid "%s extension cannot be loaded!"
+msgstr "Nepavyko uþkrauti %s modulio!"
+
+#: lib/Driver/composite.php:63
 #, php-format
 msgid "%s: unable to load driver: %s"
 msgstr "%s: nepavyko uþkrauti tvarkyklës: %s"
 
-#: lib/Driver/adsi.php:54
+#: lib/Driver/adsi.php:61
 #, php-format
 msgid "ADSI error %s."
 msgstr "ADSI klaida %s."
 
-#: lib/Driver/pspasswd.php:97 lib/Driver/adsi.php:57
+#: lib/Driver/pspasswd.php:105 lib/Driver/adsi.php:64
 msgid "Access Denied."
 msgstr "Neuþtenka teisiø."
 
-#: lib/Driver.php:80
+#: lib/Driver.php:101
 msgid "Backend not correctly implemented."
 msgstr "Slaptaþodþio keitimo posistemë neteisingai realizuota."
 
-#: main.php:231 templates/main/main.inc:144
+#: lib/Driver/poppassd.php:90
+msgid "Cannot send command to server."
+msgstr "Nepavyko nusiøsti komandos á serverá."
+
+#: main.php:263 templates/main/main.inc:141
 msgid "Change Password"
 msgstr "Slaptaþodþio keitimas"
 
-#: templates/main/main.inc:129
-msgid "Change password on:"
+#: templates/main/main.inc:126
+msgid "Change password for:"
 msgstr "Slaptaþodþio keitimas serveryje:"
 
-#: templates/main/main.inc:64
+#: templates/main/main.inc:67
 msgid "Change your password"
 msgstr "Slaptaþodþio keitimas"
 
-#: templates/main/main.inc:71
+#: templates/main/main.inc:65
 #, php-format
-msgid "Changing password on %s"
+msgid "Changing password for %s"
 msgstr "Slaptaþodþio keitimas serveryje %s"
 
-#: templates/main/main.inc:116
+#: templates/main/main.inc:113
 msgid "Confirm new password:"
 msgstr "Pakartokite naujà slaptaþodá:"
 
-#: lib/Driver/smbldap.php:88 lib/Driver/smbldap.php:166 lib/Driver/ldap.php:86
-#: lib/Driver/ldap.php:223
-msgid "Could not bind to ldap server"
-msgstr "Nepavyko autentifikuotis á LDAP serverá"
+#: lib/Driver/kolab.php:60 lib/Driver/ldap.php:99 lib/Driver/ldap.php:190
+msgid "Could not bind to LDAP server"
+msgstr "Nepavyko autentifikuotis á LDAP serverá."
+
+#: lib/Driver/expectpecl.php:118
+msgid "Could not change password (bad old password?)"
+msgstr "Nepavyko pakeisti slaptaþodþio (blogas senas slaptaþodis?)"
 
-#: lib/Driver/smbldap.php:65 lib/Driver/ldap.php:62
-msgid "Could not connect to ldap server"
+#: lib/Driver/expectpecl.php:138
+msgid "Could not change password."
+msgstr "Nepavyko pakeisti slaptaþodþio"
+
+#: lib/Driver/kolab.php:46 lib/Driver/ldap.php:74
+msgid "Could not connect to LDAP server"
 msgstr "Nepavyko prisijungti prie LDAP serverio"
 
-#: lib/Driver/smbpasswd.php:52
+#: lib/Driver/expectpecl.php:98
+msgid "Could not login to system (no password prompt)"
+msgstr "Nepavyko prisijungti prie sistemos (sistema neuþklausë slaptaþodþio)"
+
+#: lib/Driver/smbpasswd.php:57
 msgid "Could not open pipe to smbpasswd."
 msgstr "Klaida jungiantis prie smbpasswd."
 
-#: lib/Driver/smbpasswd.php:74
+#: lib/Driver/ldap.php:80
+msgid "Could not start TLS connection to LDAP server"
+msgstr "Nepavyko prisijungti prie LDAP serverio per TLS"
+
+#: lib/Driver/expectpecl.php:108
+msgid "Could not start passwd program (no old password prompt)"
+msgstr ""
+"Nepavyko paleisti passwd programos (sistema neuþklausæ seno slaptaþodþio)"
+
+#: lib/Driver/expectpecl.php:44
+msgid "End of file."
+msgstr "Failo pabaiga."
+
+#: lib/Driver/smbpasswd.php:79
 msgid "Error sending data to smbpasswd."
 msgstr "Klaida siunèiant duomenis smbpasswd komandai."
 
-#: lib/Driver/pspasswd.php:85
+#: lib/Driver/pspasswd.php:93
 msgid "Failed to verify old password."
 msgstr "Nepavyko patikrinti seno slaptaþodþio."
 
-#: main.php:192 lib/Driver/composite.php:92
+#: main.php:217 lib/Driver/composite.php:102
 #, php-format
-msgid "Failure in changing password on %s: %s"
+msgid "Failure in changing password for %s: %s"
 msgstr "Klaida keièiant slaptaþodá serveryje %s: %s"
 
-#: lib/Driver.php:51 lib/Driver/smbldap.php:167 lib/Driver/poppassd.php:106
-#: lib/Driver/ldap.php:224 lib/Driver/vmailmgr.php:35
+#: lib/Driver/expectpecl.php:50
+msgid "Full buffer."
+msgstr "Buferis pilnas."
+
+#: lib/Driver.php:72 lib/Driver/poppassd.php:120 lib/Driver/kolab.php:84
+#: lib/Driver/vmailmgr.php:42 lib/Driver/ldap.php:191
 msgid "Incorrect Password"
 msgstr "Slaptaþodis neteisingas"
 
-#: lib/Driver/ldap.php:207
+#: lib/Driver/ldap.php:166
 msgid "Minimum password age has not yet expired"
 msgstr "Minimalus slaptaþodþio galiojimo laikas dar nepasibaigë"
 
-#: templates/main/main.inc:104
+#: lib/Driver/expectpecl.php:128
+msgid "New password not valid (too short, bad password, too similar, ...)"
+msgstr ""
+"Neteisingas naujas slaptaþodis (per trumpas, blogas, panaðus á senà, ...)"
+
+#: templates/main/main.inc:101
 msgid "New password:"
 msgstr "Naujas slaptaþodis:"
 
-#: lib/Driver.php:107
+#: lib/Driver/poppassd.php:67
+msgid "No prompt returned from server."
+msgstr "Serveris nepaklausë slaptaþodþio."
+
+#: lib/Driver.php:128
 #, php-format
-msgid "No such backend '%s' found."
-msgstr "'%s' posistemës nëra."
+msgid "No such backend \"%s\" found."
+msgstr "\"%s\" posistemës nëra."
 
-#: templates/main/main.inc:92
+#: lib/Driver/http.php:72
+msgid "Old password is incorrect."
+msgstr "Neteisingas senas slaptaþodis."
+
+#: templates/main/main.inc:89
 msgid "Old password:"
 msgstr "Senas slaptaþodis:"
 
-#: lib/Driver/smbpasswd.php:42
+#: lib/Driver/smbpasswd.php:47
 msgid "Passwd is not properly configured."
 msgstr "Slaptaþodþio keitimo modulis nesukonfigûruotas."
 
-#: main.php:189
+#: main.php:209
 #, php-format
 msgid "Password changed on %s."
 msgstr "Slaptaþodis serveryje %s pakeistas."
 
-#: lib/Driver/pspasswd.php:67
+#: lib/Driver/sql.php:127
+#, php-format
+msgid "Password column \"%s\" not found in password table."
+msgstr "Slaptaþodþiø lentelëje nëra slaptaþodþio stulpelio \"%s\"."
+
+#: lib/Driver/pspasswd.php:75
 msgid "Password module can't find the supplied bin."
 msgstr "Slaptaþodþio keitimo modulis negali rasti reikiamø duomenø."
 
-#: lib/Driver/pspasswd.php:65
+#: lib/Driver/pspasswd.php:73
 msgid "Password module is missing required parameters."
 msgstr "Slaptaþodþio keitimo modulis neranda reikalingø parametrø."
 
-#: lib/Driver/adsi.php:44
+#: lib/Driver/adsi.php:51
 msgid "Password module is missing target parameter."
 msgstr "Slaptaþodþio keitimo modulis neranda nustatytø parametrø."
 
-#: main.php:170 lib/Driver/servuftp.php:66
+#: main.php:183 lib/Driver/servuftp.php:71
 msgid "Password module is not properly configured"
 msgstr "Slaptaþodþio keitimo modulis nesukonfigûruotas"
 
-#: lib/Driver/servuftp.php:93
+#: lib/Driver/servuftp.php:98
 msgid "Password module is not properly configured."
 msgstr "Slaptaþodþio keitimo modulis nesukonfigûruotas."
 
-#: lib/Driver/composite.php:34
+#: templates/main/main.inc:11
+msgid "Please provide a new password"
+msgstr "Nurodykite naujà slaptaþodá"
+
+#: templates/main/main.inc:7
+msgid "Please provide your current password"
+msgstr "Nurodykite savo darbartiná slaptaþodá"
+
+#: templates/main/main.inc:15
+msgid "Please verify your new password"
+msgstr "Pakartokite savo naujà slaptaþodá"
+
+#: lib/Driver/composite.php:41
 msgid "Required 'drivers' is misconfigured in Composite configuration."
 msgstr "Parametras 'drivers' neteisingai sukonfigûruotas nustatymuose."
 
-#: lib/Driver/sql.php:40
+#: lib/Driver/sql.php:46
 msgid "Required 'phptype' not specified in Passwd SQL configuration."
 msgstr "Parametras 'phptype' nenurodytas Passwd SQL konfigûracijoje."
 
-#: lib/Driver/vpopmail.php:42
+#: lib/Driver/vpopmail.php:49
 msgid "Required 'phptype' not specified in SQL configuration."
 msgstr "Parametras 'phptype' nenurodytas SQL konfigûracijoje."
 
-#: templates/main/main.inc:145
+#: templates/main/main.inc:142
 msgid "Reset"
 msgstr "Iðvalyti"
 
-#: lib/Driver/vpopmail.php:76 lib/Driver/sql.php:69
+#: lib/Driver/http.php:65
+msgid "The requested website for changing user passwords could not be reached."
+msgstr "Vartotojø slaptaþodþiø keitimo puslapis nepasiekiamas."
+
+#: lib/Driver/http.php:74
+msgid "The username could not be found."
+msgstr "Tokio vartotojo vardo nëra."
+
+#: lib/Driver/expectpecl.php:47
+msgid "Time out."
+msgstr "Baigësi slaptaþodþio keitimo laikas."
+
+#: lib/Driver/sql.php:75 lib/Driver/vpopmail.php:83
 msgid "Unable to connect to SQL server."
 msgstr "Nepavyko prisijungti prie SQL serverio."
 
-#: lib/Driver/poppassd.php:100 lib/Driver/vpopmail.php:135
-#: lib/Driver/sql.php:118
+#: lib/Driver/expectpecl.php:93
+msgid "Unable to open expect stream!"
+msgstr "Nepavyko atidaryti expect srauto!"
+
+#: lib/Driver/sql.php:135 lib/Driver/poppassd.php:114
+#: lib/Driver/vpopmail.php:150
 msgid "User not found"
 msgstr "Vartotojas nerastas"
 
-#: lib/Driver/smbldap.php:124 lib/Driver/pine.php:219 lib/Driver/ldap.php:123
+#: lib/Driver/smbldap.php:141 lib/Driver/pine.php:231 lib/Driver/kolab.php:76
+#: lib/Driver/ldap.php:133
 msgid "User not found."
 msgstr "Vartotojas nerastas."
 
-#: templates/main/main.inc:79
+#: templates/main/main.inc:76
 msgid "Username:"
 msgstr "Vartotojo vardas:"
 
-#: main.php:39
+#: main.php:52
 #, php-format
 msgid "You can't change password for user %s"
 msgstr "Jûs negalite pakeisti vartotojo %s slaptaþodþio"
 
-#: main.php:47
+#: main.php:60
 msgid "You must give your current password"
 msgstr "Privalote nurodyti dabartiná slaptaþodá"
 
-#: main.php:56
+#: main.php:69
 msgid "You must give your new password"
 msgstr "Áveskite naujà slaptaþodá"
 
-#: main.php:60
+#: main.php:73
 msgid "You must verify your new password"
 msgstr "Pakartokite naujà slaptaþodá"
 
-#: main.php:80
+#: main.php:93
 #, php-format
 msgid ""
 "Your new password is too long; passwords may not be more than %d characters "
@@ -191,34 +282,34 @@ msgstr ""
 "Jûsø naujasis slaptaþodis per ilgas; jame gali bûti nedaugiau nei %d "
 "simboliai"
 
-#: main.php:159
+#: main.php:172
 msgid "Your new password is too simple to guess!  Not changed!"
 msgstr "Slaptaþodis per paprastas - áveskite sudëtingesná!"
 
-#: main.php:150
+#: main.php:163
 msgid "Your new password is too simple to guess. Not changed!"
 msgstr "Slaptaþodis per paprastas - áveskite sudëtingesná."
 
-#: main.php:75
+#: main.php:88
 #, php-format
 msgid "Your new password must be at least %d characters long!"
 msgstr "Slaptaþodis turi bûti bent %d simboliø ilgio!"
 
-#: main.php:68
+#: main.php:81
 msgid "Your new password must be different from your current password"
 msgstr "Naujasis slaptaþodis turi skirtis nuo dabartinio"
 
-#: main.php:120
+#: main.php:133
 #, php-format
 msgid "Your new password must contain at least %d alphabetic characters."
 msgstr "Slaptaþodyje privalo bûti bent %d raidës."
 
-#: main.php:125
+#: main.php:138
 #, php-format
 msgid "Your new password must contain at least %d alphanumeric characters."
 msgstr "Slaptaþodyje privalo bûti bent %d simboliai."
 
-#: main.php:130
+#: main.php:143
 #, php-format
 msgid ""
 "Your new password must contain at least %d different types of characters. "
@@ -227,34 +318,38 @@ msgstr ""
 "Jûsø naujàjá slaptaþodá turi sudaryti bent %d skirtingi simboliø tipai. "
 "Tipai: didþiosios raidës, maþosios raidës, skaièiai ir kiti simboliai."
 
-#: main.php:110
+#: main.php:123
 #, php-format
 msgid "Your new password must contain at least %d lowercase characters."
 msgstr "Slaptaþodyje privalo bûti bent %d maþosios raidës."
 
-#: main.php:115
+#: main.php:128
 #, php-format
 msgid "Your new password must contain at least %d numeric characters."
 msgstr "Slaptaþodyte privalo bûti bent %d skaièiai."
 
-#: main.php:105
+#: main.php:118
 #, php-format
 msgid "Your new password must contain at least %d uppercase characters."
 msgstr "Slaptaþodyje privalo bûti bent %d didþiosios raidës."
 
-#: main.php:136
+#: main.php:149
 #, php-format
 msgid "Your new password must contain less than %d whitespace characters."
 msgstr "Naujajame slaptaþodyje gali bûti nedaugiau nei %d tarpø."
 
-#: main.php:138
+#: main.php:151
 msgid "Your new password must not contain whitespace characters."
 msgstr "Naujajame slaptaþodyje negali bûti tarpø."
 
-#: main.php:64
+#: main.php:77
 msgid "Your new passwords didn't match"
 msgstr "Nauji slaptaþodþiai nesutampa"
 
-#: lib/Driver/smbldap.php:71 lib/Driver/ldap.php:68
-msgid "ldap_start_tls failed"
-msgstr "ldap_start_tls klaida"
+#: lib/Driver/http.php:76
+msgid "Your password could not be changed."
+msgstr "Jûsø slaptaþodþio pakeisti negalima."
+
+#: templates/main/main.inc:19
+msgid "Your passwords do not match"
+msgstr "Jûsø slaptaþodþiai nesutampa"
diff --git a/po/nl_NL.po b/po/nl_NL.po
index f2dcea5..b00d60e 100644
--- a/po/nl_NL.po
+++ b/po/nl_NL.po
@@ -1,5 +1,5 @@
 # Passwd module translations
-# Copyright (C) 2002 Free Software Foundation, Inc.
+# Copyright 2002 Free Software Foundation, Inc.
 # Eric Rostetter <rostetter at mail.utexas.edu>, 2002.
 #
 msgid ""
diff --git a/po/nn_NO.po b/po/nn_NO.po
index 7e54066..dfcd362 100644
--- a/po/nn_NO.po
+++ b/po/nn_NO.po
@@ -1,5 +1,5 @@
 # Passwd Norwegian Nynorsk translation
-# Copyright (C) 2002 Per-Stian Vatne
+# Copyright 2002 Per-Stian Vatne
 # This file is distributed under the same license as the Passwd package.
 # Per-Stian Vatne <psv at orsta.org>, 2002.
 #
diff --git a/po/passwd.pot b/po/passwd.pot
index 4a33459..2ceeb17 100644
--- a/po/passwd.pot
+++ b/po/passwd.pot
@@ -8,20 +8,26 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: dev at lists.horde.org\n"
-"POT-Creation-Date: 2005-10-09 16:51+0200\n"
+"POT-Creation-Date: 2009-03-19 10:37+0100\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
 "Language-Team: LANGUAGE <LL at li.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=CHARSET\n"
 "Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
 
 #: lib/Driver/expect.php:34
 #, php-format
 msgid "%s does not exist or is not executable."
 msgstr ""
 
-#: lib/Driver/composite.php:65
+#: lib/Driver/expectpecl.php:73
+#, php-format
+msgid "%s extension cannot be loaded!"
+msgstr ""
+
+#: lib/Driver/composite.php:63
 #, php-format
 msgid "%s: unable to load driver: %s"
 msgstr ""
@@ -35,43 +41,71 @@ msgstr ""
 msgid "Access Denied."
 msgstr ""
 
-#: lib/Driver.php:85
+#: lib/Driver.php:101
 msgid "Backend not correctly implemented."
 msgstr ""
 
-#: main.php:255 templates/main/main.inc:142
+#: lib/Driver/poppassd.php:90
+msgid "Cannot send command to server."
+msgstr ""
+
+#: main.php:268 templates/main/main.inc:141
 msgid "Change Password"
 msgstr ""
 
-#: templates/main/main.inc:127
-msgid "Change password on:"
+#: templates/main/main.inc:126
+msgid "Change password for:"
 msgstr ""
 
-#: templates/main/main.inc:62
+#: templates/main/main.inc:67
 msgid "Change your password"
 msgstr ""
 
-#: templates/main/main.inc:69
+#: templates/main/main.inc:65
 #, php-format
-msgid "Changing password on %s"
+msgid "Changing password for %s"
 msgstr ""
 
-#: templates/main/main.inc:114
+#: templates/main/main.inc:113
 msgid "Confirm new password:"
 msgstr ""
 
-#: lib/Driver/ldap.php:95 lib/Driver/ldap.php:263 lib/Driver/kolab.php:54
-msgid "Could not bind to ldap server"
+#: lib/Driver/ldap.php:114 lib/Driver/kolab.php:60
+msgid "Could not bind to LDAP server"
+msgstr ""
+
+#: lib/Driver/expectpecl.php:118
+msgid "Could not change password (bad old password?)"
 msgstr ""
 
-#: lib/Driver/ldap.php:70 lib/Driver/kolab.php:46
-msgid "Could not connect to ldap server"
+#: lib/Driver/expectpecl.php:138
+msgid "Could not change password."
+msgstr ""
+
+#: lib/Driver/ldap.php:80 lib/Driver/kolab.php:46
+msgid "Could not connect to LDAP server"
+msgstr ""
+
+#: lib/Driver/expectpecl.php:98
+msgid "Could not login to system (no password prompt)"
 msgstr ""
 
 #: lib/Driver/smbpasswd.php:57
 msgid "Could not open pipe to smbpasswd."
 msgstr ""
 
+#: lib/Driver/ldap.php:86
+msgid "Could not start TLS connection to LDAP server"
+msgstr ""
+
+#: lib/Driver/expectpecl.php:108
+msgid "Could not start passwd program (no old password prompt)"
+msgstr ""
+
+#: lib/Driver/expectpecl.php:44
+msgid "End of file."
+msgstr ""
+
 #: lib/Driver/smbpasswd.php:79
 msgid "Error sending data to smbpasswd."
 msgstr ""
@@ -80,30 +114,43 @@ msgstr ""
 msgid "Failed to verify old password."
 msgstr ""
 
-#: main.php:211 lib/Driver/composite.php:99
+#: main.php:222 lib/Driver/composite.php:102
 #, php-format
-msgid "Failure in changing password on %s: %s"
+msgid "Failure in changing password for %s: %s"
+msgstr ""
+
+#: lib/Driver/expectpecl.php:50
+msgid "Full buffer."
 msgstr ""
 
-#: lib/Driver.php:56 lib/Driver/ldap.php:264 lib/Driver/vmailmgr.php:42
-#: lib/Driver/kolab.php:78 lib/Driver/poppassd.php:114
-msgid "Incorrect Password"
+#: lib/Driver.php:72 lib/Driver/ldap.php:131 lib/Driver/http.php:72
+#: lib/Driver/vmailmgr.php:42 lib/Driver/kolab.php:84
+#: lib/Driver/poppassd.php:120
+msgid "Incorrect old password."
 msgstr ""
 
-#: lib/Driver/ldap.php:255
+#: lib/Driver/ldap.php:190
 msgid "Minimum password age has not yet expired"
 msgstr ""
 
-#: templates/main/main.inc:102
+#: lib/Driver/expectpecl.php:128
+msgid "New password not valid (too short, bad password, too similar, ...)"
+msgstr ""
+
+#: templates/main/main.inc:101
 msgid "New password:"
 msgstr ""
 
-#: lib/Driver.php:112
+#: lib/Driver/poppassd.php:67
+msgid "No prompt returned from server."
+msgstr ""
+
+#: lib/Driver.php:128
 #, php-format
 msgid "No such backend \"%s\" found."
 msgstr ""
 
-#: templates/main/main.inc:90
+#: templates/main/main.inc:89
 msgid "Old password:"
 msgstr ""
 
@@ -111,11 +158,16 @@ msgstr ""
 msgid "Passwd is not properly configured."
 msgstr ""
 
-#: main.php:203
+#: main.php:214
 #, php-format
 msgid "Password changed on %s."
 msgstr ""
 
+#: lib/Driver/sql.php:127
+#, php-format
+msgid "Password column \"%s\" not found in password table."
+msgstr ""
+
 #: lib/Driver/pspasswd.php:75
 msgid "Password module can't find the supplied bin."
 msgstr ""
@@ -128,7 +180,7 @@ msgstr ""
 msgid "Password module is missing target parameter."
 msgstr ""
 
-#: main.php:178 lib/Driver/servuftp.php:71
+#: main.php:188 lib/Driver/servuftp.php:71
 msgid "Password module is not properly configured"
 msgstr ""
 
@@ -160,117 +212,153 @@ msgstr ""
 msgid "Required 'phptype' not specified in SQL configuration."
 msgstr ""
 
-#: templates/main/main.inc:143
+#: templates/main/main.inc:142
 msgid "Reset"
 msgstr ""
 
+#: lib/Driver/http.php:65
+msgid "The requested website for changing user passwords could not be reached."
+msgstr ""
+
+#: lib/Driver/http.php:74
+msgid "The username could not be found."
+msgstr ""
+
+#: lib/Driver/expectpecl.php:47
+msgid "Time out."
+msgstr ""
+
 #: lib/Driver/sql.php:75 lib/Driver/vpopmail.php:83
 msgid "Unable to connect to SQL server."
 msgstr ""
 
-#: lib/Driver/sql.php:125 lib/Driver/poppassd.php:108
-#: lib/Driver/vpopmail.php:143
+#: lib/Driver/expectpecl.php:93
+msgid "Unable to open expect stream!"
+msgstr ""
+
+#: lib/Driver/sql.php:135 lib/Driver/poppassd.php:114
+#: lib/Driver/vpopmail.php:150
 msgid "User not found"
 msgstr ""
 
-#: lib/Driver/ldap.php:131 lib/Driver/kolab.php:70 lib/Driver/pine.php:231
+#: lib/Driver/ldap.php:167 lib/Driver/ldap.php:249 lib/Driver/kolab.php:76
+#: lib/Driver/pine.php:231 lib/Driver/smbldap.php:160
 msgid "User not found."
 msgstr ""
 
-#: templates/main/main.inc:77
+#: templates/main/main.inc:76
 msgid "Username:"
 msgstr ""
 
-#: main.php:47
+#: main.php:52
 #, php-format
 msgid "You can't change password for user %s"
 msgstr ""
 
-#: main.php:55
+#: main.php:60
 msgid "You must give your current password"
 msgstr ""
 
-#: main.php:64
+#: main.php:69
 msgid "You must give your new password"
 msgstr ""
 
-#: main.php:68
+#: main.php:73
 msgid "You must verify your new password"
 msgstr ""
 
-#: main.php:88
+#: main.php:93
 #, php-format
 msgid ""
 "Your new password is too long; passwords may not be more than %d characters "
 "long!"
 msgstr ""
 
-#: main.php:167
+#: main.php:177
 msgid "Your new password is too simple to guess!  Not changed!"
 msgstr ""
 
-#: main.php:158
+#: main.php:168
 msgid "Your new password is too simple to guess. Not changed!"
 msgstr ""
 
-#: main.php:83
+#: main.php:88
 #, php-format
 msgid "Your new password must be at least %d characters long!"
 msgstr ""
 
-#: main.php:76
+#: main.php:81
 msgid "Your new password must be different from your current password"
 msgstr ""
 
-#: main.php:128
-#, php-format
-msgid "Your new password must contain at least %d alphabetic characters."
-msgstr ""
-
 #: main.php:133
 #, php-format
-msgid "Your new password must contain at least %d alphanumeric characters."
-msgstr ""
+msgid "Your new password must contain at least %d alphabetic character."
+msgid_plural ""
+"Your new password must contain at least %d alphabetic characters."
+msgstr[0] ""
+msgstr[1] ""
 
 #: main.php:138
 #, php-format
+msgid "Your new password must contain at least %d alphanumeric character."
+msgid_plural ""
+"Your new password must contain at least %d alphanumeric characters."
+msgstr[0] ""
+msgstr[1] ""
+
+#: main.php:143
+#, php-format
 msgid ""
 "Your new password must contain at least %d different types of characters. "
 "The types are: lower, upper, numeric, and symbols."
 msgstr ""
 
-#: main.php:118
+#: main.php:123
 #, php-format
-msgid "Your new password must contain at least %d lowercase characters."
-msgstr ""
+msgid "Your new password must contain at least %d lowercase character."
+msgid_plural "Your new password must contain at least %d lowercase characters."
+msgstr[0] ""
+msgstr[1] ""
 
-#: main.php:123
+#: main.php:128
 #, php-format
-msgid "Your new password must contain at least %d numeric characters."
-msgstr ""
+msgid "Your new password must contain at least %d numeric character."
+msgid_plural "Your new password must contain at least %d numeric characters."
+msgstr[0] ""
+msgstr[1] ""
 
-#: main.php:113
+#: main.php:157
 #, php-format
-msgid "Your new password must contain at least %d uppercase characters."
-msgstr ""
+msgid "Your new password must contain at least %d symbol character."
+msgid_plural "Your new password must contain at least %d symbol characters."
+msgstr[0] ""
+msgstr[1] ""
 
-#: main.php:144
+#: main.php:118
+#, php-format
+msgid "Your new password must contain at least %d uppercase character."
+msgid_plural "Your new password must contain at least %d uppercase characters."
+msgstr[0] ""
+msgstr[1] ""
+
+#: main.php:149
 #, php-format
 msgid "Your new password must contain less than %d whitespace characters."
 msgstr ""
 
-#: main.php:146
+#: main.php:151
 msgid "Your new password must not contain whitespace characters."
 msgstr ""
 
-#: main.php:72
+#: main.php:77
 msgid "Your new passwords didn't match"
 msgstr ""
 
-#: templates/main/main.inc:19
-msgid "Your passwords do not match"
+#: lib/Driver/http.php:76
+msgid "Your password could not be changed."
 msgstr ""
 
-#: lib/Driver/ldap.php:76
-msgid "ldap_start_tls failed"
+#: templates/main/main.inc:19
+msgid "Your passwords do not match"
 msgstr ""
diff --git a/po/pl_PL.po b/po/pl_PL.po
index 5ca83b8..969bac6 100644
--- a/po/pl_PL.po
+++ b/po/pl_PL.po
@@ -1,102 +1,360 @@
-# Passwd module translations
-# Copyright (C) 2002 Free Software Foundation, Inc.
-# Eric Rostetter <rostetter at mail.utexas.edu>, 2002.
+# Polish translations for Passwd package
+# Polskie tlumaczenia dla pakietu Passwd.
+# Copyright 2007-2009 The Horde Project
+# This file is distributed under the same license as the Passwd package.
+# Mariusz Zynel <mariusz at math.uwb.edu.pl>, 2001.
+# Piotr Roszatycki <dexter at debian.org>, 2001.
+# Krzysztof Kozlowski <kozik1 at o2.pl>, 2005.
+# Piotr Adamcio <adamcios at o2.pl>, 2007.
+# Tadeusz Lesiecki <lesiecki at tmtsystem.pl>, 2007.
+# Piotr Tarnowski <drfugazi at drfugazi.eu.org>, 2007.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: passwd\n"
-"POT-Creation-Date: 2002-08-29 15:50+0200\n"
-"PO-Revision-Date: 2002-02-19 10:23-0600\n"
-"Last-Translator: Mariusz Zynel <mariusz at solaris-x86.org>\n"
-"Language-Team: Polish <dev at lists.horde.org>\n"
+"Project-Id-Version: Passwd H3 (3.1-cvs)\n"
+"Report-Msgid-Bugs-To: dev at lists.horde.org\n"
+"POT-Creation-Date: 2007-06-21 11:08+0200\n"
+"PO-Revision-Date: 2007-06-21 11:45+0200\n"
+"Last-Translator: Piotr Tarnowski <drfugazi at drfugazi.eu.org>\n"
+"Language-Team: Polish <i18n at lists.horde.org>\n"
 "MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=iso-8859-2\n"
+"Content-Type: text/plain; charset=ISO-8859-2\n"
 "Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
+"|| n%100>=20) ? 1 : 2);\n"
 
-msgid "Change your password"
+#: lib/Driver/expect.php:34
+#, php-format
+msgid "%s does not exist or is not executable."
+msgstr "%s nie istnieje lub nie jest wykonywalny."
+
+#: lib/Driver/expectpecl.php:73
+#, php-format
+msgid "%s extension cannot be loaded!"
+msgstr "Nie mo¿na za³adowaæ rozszerzenia %s!"
+
+#: lib/Driver/composite.php:63
+#, php-format
+msgid "%s: unable to load driver: %s"
+msgstr "%s: nie mo¿na za³adowaæ drivera: %s"
+
+#: lib/Driver/adsi.php:61
+#, php-format
+msgid "ADSI error %s."
+msgstr "B³±d ADSI %s."
+
+#: lib/Driver/adsi.php:64 lib/Driver/pspasswd.php:105
+msgid "Access Denied."
+msgstr "Dostêp zabroniony"
+
+#: lib/Driver.php:89
+msgid "Backend not correctly implemented."
+msgstr "Backend nie poprawnie zaimplementowany."
+
+#: lib/Driver/poppassd.php:90
+msgid "Cannot send command to server."
+msgstr "Nie mo¿na wys³aæ polecenia do serwera."
+
+#: main.php:255 templates/main/main.inc:141
+msgid "Change Password"
 msgstr "Zmieñ has³o"
 
+#: templates/main/main.inc:126
+msgid "Change password on:"
+msgstr "Zmieñ has³o na:"
+
+#: templates/main/main.inc:67
+msgid "Change your password"
+msgstr "Zmieñ swoje has³o"
+
+#: templates/main/main.inc:65
+#, php-format
+msgid "Changing password on %s"
+msgstr "Zmiana has³a na %s"
+
+#: templates/main/main.inc:113
 msgid "Confirm new password:"
-msgstr "Potwierd¼ has³o"
+msgstr "Powtórz nowe has³o:"
+
+#: lib/Driver/ldap.php:99 lib/Driver/ldap.php:189 lib/Driver/kolab.php:60
+msgid "Could not bind to LDAP server"
+msgstr "Nie mo¿na przy³±czyæ do serwera LDAP"
+
+#: lib/Driver/expectpecl.php:118
+msgid "Could not change password (bad old password?)"
+msgstr "Nie mo¿na zmieniæ has³a (b³êdne stare has³o?)"
+
+#: lib/Driver/expectpecl.php:138
+msgid "Could not change password."
+msgstr "Nie mo¿na zmieniæ has³a."
+
+#: lib/Driver/ldap.php:74 lib/Driver/kolab.php:46
+msgid "Could not connect to LDAP server"
+msgstr "Nie mo¿na po³±czyæ z serwerem LDAP"
 
-msgid "Failure in changing password : "
-msgstr "B³±d podczas zmiany has³a : "
+#: lib/Driver/expectpecl.php:98
+msgid "Could not login to system (no password prompt)"
+msgstr "Nie mo¿na zalogowaæ siê do systemu (brak promptu has³a)"
 
-msgid "Internal Error"
-msgstr "B³±d wewnêtrzny"
+#: lib/Driver/smbpasswd.php:57
+msgid "Could not open pipe to smbpasswd."
+msgstr "Nie mo¿na otworzyæ tunelu do smbpasswd."
 
-msgid "Logout"
-msgstr "Wyloguj"
+#: lib/Driver/ldap.php:80
+msgid "Could not start TLS connection to LDAP server"
+msgstr "Nie mo¿na ustanowiæ szyfrowanego po³±czenia TLS do serwera LDAP"
 
+#: lib/Driver/expectpecl.php:108
+msgid "Could not start passwd program (no old password prompt)"
+msgstr "Nie mo¿na uruchomiæ programu passwd (brak promptu do starego has³a)"
+
+#: lib/Driver/expectpecl.php:44
+msgid "End of file."
+msgstr "Koniec pliku."
+
+#: lib/Driver/smbpasswd.php:79
+msgid "Error sending data to smbpasswd."
+msgstr "B³±d przy wysy³aniu danych do smbpasswd."
+
+#: lib/Driver/pspasswd.php:93
+msgid "Failed to verify old password."
+msgstr "B³±d podczas weryfikacji starego has³a."
+
+#: main.php:211 lib/Driver/composite.php:102
+#, php-format
+msgid "Failure in changing password on %s: %s"
+msgstr "B³±d przy zmianie has³a na %s: %s"
+
+#: lib/Driver/expectpecl.php:50
+msgid "Full buffer."
+msgstr "Pe³ny bufor."
+
+#: lib/Driver.php:60 lib/Driver/vmailmgr.php:42 lib/Driver/ldap.php:190
+#: lib/Driver/kolab.php:84 lib/Driver/poppassd.php:120
+msgid "Incorrect Password"
+msgstr "Nieprawid³owe has³o"
+
+#: lib/Driver/ldap.php:166
+msgid "Minimum password age has not yet expired"
+msgstr "Minimalny wiek has³a jeszcze nie min±³"
+
+#: lib/Driver/expectpecl.php:128
+msgid "New password not valid (too short, bad password, too similar, ...)"
+msgstr "Nowe has³o nie jest poprawne (zbyt krótkie, z³e, zbyt podobne itp.)"
+
+#: templates/main/main.inc:101
 msgid "New password:"
-msgstr "Nowe has³o"
+msgstr "Nowe has³o:"
 
-msgid ""
-"Note: You will need to logout and back in after you change your password!"
-msgstr "Uwaga: Po zmianie has³a musi siê wylogowaæ i zalogowaæ ponownie!"
+#: lib/Driver/poppassd.php:67
+msgid "No prompt returned from server."
+msgstr "Nie otrzymano promptu od serwera."
+
+#: lib/Driver.php:116
+#, php-format
+msgid "No such backend \"%s\" found."
+msgstr "Nie znaleziono backendu \"%s\"."
+
+#: lib/Driver/http.php:72
+msgid "Old password is incorrect."
+msgstr "Stare has³o jest nieprawid³owe."
 
+#: templates/main/main.inc:89
 msgid "Old password:"
-msgstr "Stare has³o"
+msgstr "Stare has³o:"
+
+#: lib/Driver/smbpasswd.php:47
+msgid "Passwd is not properly configured."
+msgstr "Passwd nie jest prawid³owo skonfigurowane."
+
+#: main.php:203
+#, php-format
+msgid "Password changed on %s."
+msgstr "Zmieniono has³o na %s."
+
+#: lib/Driver/sql.php:127
+#, php-format
+msgid "Password column \"%s\" not found in password table."
+msgstr "Nie znaleziono kolumny has³a \"%s\" w tabeli hase³."
+
+#: lib/Driver/pspasswd.php:75
+msgid "Password module can't find the supplied bin."
+msgstr "Modu³ hase³ nie móg³ znale¼æ w³a¶ciwej binarki."
 
-msgid "Password changed!"
-msgstr "Has³o zmienione!"
+#: lib/Driver/pspasswd.php:73
+msgid "Password module is missing required parameters."
+msgstr "Modu³owi hase³ brakuje wymaganych parametrów."
 
+#: lib/Driver/adsi.php:51
+msgid "Password module is missing target parameter."
+msgstr "Modu³owi hase³ brakuje docelowego parametru."
+
+#: main.php:178 lib/Driver/servuftp.php:71
 msgid "Password module is not properly configured"
-msgstr "Modu³ Password nie jest prawid³owo skonfigurowany"
+msgstr "Modu³ hase³ nie jest poprawnie skonfigurowany"
 
-msgid "Problem?"
-msgstr "Masz problemy?"
+#: lib/Driver/servuftp.php:98
+msgid "Password module is not properly configured."
+msgstr "Modu³ hase³ nie jest skonfigurowany prawid³owo."
 
-msgid "Reset"
-msgstr "Wyczy¶æ"
+#: templates/main/main.inc:11
+msgid "Please provide a new password"
+msgstr "Proszê podaæ nowe has³o"
 
-msgid "Some of Password module's configuration files are missing:"
-msgstr "Brak plików konfiguracyjnych modu³u Password"
+#: templates/main/main.inc:7
+msgid "Please provide your current password"
+msgstr "Proszê podaæ aktualne has³o"
 
-msgid ""
-"This file controls the stylesheet that is used to set colors and fonts in "
-"addition to or overriding Horde defaults."
-msgstr "Ten plik odpowiada za styl fontów i kolorów."
+#: templates/main/main.inc:15
+msgid "Please verify your new password"
+msgstr "Proszê zweryfikowaæ swoje nowe has³o"
 
-msgid ""
-"This is the main Password module configuration file. It contains paths and "
-"options for all Password module scripts."
+#: lib/Driver/composite.php:41
+msgid "Required 'drivers' is misconfigured in Composite configuration."
+msgstr "Wymagane 'drivery' s± ¼le skonfigurowane w konfiguracji composite"
+
+#: lib/Driver/sql.php:46
+msgid "Required 'phptype' not specified in Passwd SQL configuration."
 msgstr ""
-"To jest g³ówny plik konfiguracyjny modu³u Password, Zawiera on ¶cie¿ki  i "
-"opcje dla wszystkich skryptów modu³u Password."
+"Wymagany parametr 'phptype' nie jest okre¶lony w konfiguracji has³a SQL."
+
+#: lib/Driver/vpopmail.php:49
+msgid "Required 'phptype' not specified in SQL configuration."
+msgstr "Wymagany parametr 'phptype' nie jest okre¶lony w konfiguracji SQL."
+
+#: templates/main/main.inc:142
+msgid "Reset"
+msgstr "Przywróæ"
 
-msgid "User name:"
-msgstr "Nazwa u¿ytkownika:"
+#: lib/Driver/http.php:65
+msgid "The requested website for changing user passwords could not be reached."
+msgstr "Nie mo¿na wy¶wietliæ wymaganej do zmiany hase³ u¿ytkowników strony."
 
-#, c-format
+#: lib/Driver/http.php:74
+msgid "The username could not be found."
+msgstr "Nazwa u¿ytkownika nie zosta³a znaleziona."
+
+#: lib/Driver/expectpecl.php:47
+msgid "Time out."
+msgstr "Czas min±³."
+
+#: lib/Driver/sql.php:75 lib/Driver/vpopmail.php:83
+msgid "Unable to connect to SQL server."
+msgstr "Nie mo¿na po³±czyæ z serwerem SQL."
+
+#: lib/Driver/expectpecl.php:93
+msgid "Unable to open expect stream!"
+msgstr "Nie mo¿na otworzyæ oczekiwanego strumienia!"
+
+#: lib/Driver/sql.php:135 lib/Driver/vpopmail.php:150
+#: lib/Driver/poppassd.php:114
+msgid "User not found"
+msgstr "Nie znaleziono u¿ytkownika"
+
+#: lib/Driver/ldap.php:133 lib/Driver/smbldap.php:140 lib/Driver/pine.php:231
+#: lib/Driver/kolab.php:76
+msgid "User not found."
+msgstr "Nie znaleziono u¿ytkownika."
+
+#: templates/main/main.inc:76
+msgid "Username:"
+msgstr "U¿ytkownik:"
+
+#: main.php:47
+#, php-format
 msgid "You can't change password for user %s"
-msgstr "Nie mo¿esz zmieniæ has³a u¿ytkownikowi %s"
+msgstr "Nie mo¿esz zmieniæ has³a dla u¿ytkownika %s"
 
-msgid "You must give your new password"
-msgstr "Musisz podaæ nowe has³o"
+#: main.php:55
+msgid "You must give your current password"
+msgstr "Musisz wpisaæ swoje obecne has³o"
 
-msgid "You must give your old password"
-msgstr "Musisz podaæ stare has³o"
+#: main.php:64
+msgid "You must give your new password"
+msgstr "Musisz wprowadziæ swoje nowe has³o"
 
+#: main.php:68
 msgid "You must verify your new password"
-msgstr "Musisz zweryfikowaæ nowe has³o"
+msgstr "Musisz zweryfikowaæ swoje nowe has³o"
 
-#, c-format
+#: main.php:88
+#, php-format
 msgid ""
 "Your new password is too long; passwords may not be more than %d characters "
 "long!"
 msgstr ""
-"Twoje has³o hest zbyt d³ugie; has³a nie mog± zawieraæ wiêcej ni¿ %d znaków!"
+"Twoje howe has³o jest zbyt d³ugie. Has³o nie mo¿e byæ d³u¿sze ni¿ %d znaków!"
 
+#: main.php:167
 msgid "Your new password is too simple to guess!  Not changed!"
-msgstr "Twoje nowe has³o jest abyt ³atwe to odgadniêcia!  Has³o nie zmienione!"
+msgstr "Twoje nowe has³o jest zbyt proste do odgadniêcia! Nie zmieniam!"
+
+#: main.php:158
+msgid "Your new password is too simple to guess. Not changed!"
+msgstr "Twoje nowe has³o jest zbyt proste do odgadniêcia. Nie zmieniam!"
 
-#, c-format
+#: main.php:83
+#, php-format
 msgid "Your new password must be at least %d characters long!"
-msgstr "Twoje nowe has³o musi zawieraæ przynajmniej %d znaków!"
+msgstr "Twoje has³o musi posiadaæ przynajmniej %d znaków!"
+
+#: main.php:76
+msgid "Your new password must be different from your current password"
+msgstr "Twoje nowe has³o musi siê ró¿niæ od obecnego"
+
+#: main.php:128
+#, php-format
+msgid "Your new password must contain at least %d alphabetic characters."
+msgstr "Twoje nowe has³o musi zawieraæ przynajmniej %d liter."
+
+#: main.php:133
+#, php-format
+msgid "Your new password must contain at least %d alphanumeric characters."
+msgstr ""
+"Twoje nowe has³o musi zawieraæ przynajmniej %d znaków alfanumerycznych."
+
+#: main.php:138
+#, php-format
+msgid ""
+"Your new password must contain at least %d different types of characters. "
+"The types are: lower, upper, numeric, and symbols."
+msgstr ""
+"Twoje nowe has³o musi zawieraæ przynajmniej %d ró¿ne typów znaków. Typy "
+"znaków to: ma³e litery, du¿e litery, cyfry, symbole."
+
+#: main.php:118
+#, php-format
+msgid "Your new password must contain at least %d lowercase characters."
+msgstr "Twoje nowe has³o musi zawieraæ przynajmniej %d ma³ych liter."
+
+#: main.php:123
+#, php-format
+msgid "Your new password must contain at least %d numeric characters."
+msgstr "Twoje nowe has³o musi zawieraæ przynajmniej %d cyfrê(y)."
+
+#: main.php:113
+#, php-format
+msgid "Your new password must contain at least %d uppercase characters."
+msgstr "Twoje nowe has³o musi zawieraæ przynajmniej %d du¿ych liter."
 
+#: main.php:144
+#, php-format
+msgid "Your new password must contain less than %d whitespace characters."
+msgstr ""
+"Twoje nowe has³o musi zawieraæ mniej ni¿ %d bia³ych znaków (spacji itp.)."
+
+#: main.php:146
+msgid "Your new password must not contain whitespace characters."
+msgstr "Twoje has³o nie mo¿e zawieraæ bia³ych znaków (spacji itp.)."
+
+#: main.php:72
 msgid "Your new passwords didn't match"
-msgstr "Twoje nowe has³a nie pasuj± do siebie"
+msgstr "Twoje nowe has³a nie zgadzaj± siê"
+
+#: lib/Driver/http.php:76
+msgid "Your password could not be changed."
+msgstr "Twoje has³o nie mo¿e byæ zmienione."
 
-msgid "Your old password isn't correct"
-msgstr "Twoje stare has³o jest nieprawid³owe"
+#: templates/main/main.inc:19
+msgid "Your passwords do not match"
+msgstr "Twoje has³a nie s± zgodne"
diff --git a/po/pt_BR.po b/po/pt_BR.po
index 5cf61f6..e61805a 100644
--- a/po/pt_BR.po
+++ b/po/pt_BR.po
@@ -1,104 +1,279 @@
 # Portuguese-Brazil translation for Horde Passwd.
-# Copyright (C) YEAR Free Software Foundation, Inc.
+# Copyright 2002-2009 The Horde Project.
 # Darci Antonio Tartari <dtartari at portoriogrande.com.br>, 2002.
+# Fabio de Almeida <fabiodealmeida at gmail.com>, 2005.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: Horde 2.1 Passwd\n"
-"POT-Creation-Date: 2002-05-03 14:09-0300\n"
-"PO-Revision-Date: 2002-05-03 14:09-0300\n"
-"Last-Translator: Darci Antonio Tartari <dtartari at portoriogrande.com.br>\n"
-"Language-Team: Portuguese-Brazil <LL at li.org>\n"
+"Project-Id-Version: Passwd H3 (3.0)\n"
+"Report-Msgid-Bugs-To: dev at lists.horde.org\n"
+"POT-Creation-Date: 2005-11-17 21:29-0200\n"
+"PO-Revision-Date: 2005-11-18 11:40+0100\n"
+"Last-Translator: Fabio de Almeida <fabiodealmeida at gmail.com>\n"
+"Language-Team: Portuguese-Brazil <i18n at lists.horde.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=ISO-8859-1\n"
 "Content-Transfer-Encoding: 8-bit\n"
 
+#: lib/Driver/expect.php:34
+#, php-format
+msgid "%s does not exist or is not executable."
+msgstr "%s não existe ou não é executável."
+
+#: lib/Driver/composite.php:65
+#, php-format
+msgid "%s: unable to load driver: %s"
+msgstr "%s: Impossível carregar driver: %s"
+
+#: lib/Driver/adsi.php:61
+#, php-format
+msgid "ADSI error %s."
+msgstr "Erro ADSI %s."
+
+#: lib/Driver/pspasswd.php:105 lib/Driver/adsi.php:64
+msgid "Access Denied."
+msgstr "Acesso negado."
+
+#: lib/Driver.php:85
+msgid "Backend not correctly implemented."
+msgstr "Backend não implementado ainda."
+
+#: main.php:255 templates/main/main.inc:142
+msgid "Change Password"
+msgstr "Modifique sua senha"
+
+#: templates/main/main.inc:127
+msgid "Change password on:"
+msgstr "Modificar senha em"
+
+#: templates/main/main.inc:62
 msgid "Change your password"
 msgstr "Modifique sua senha"
 
+#: templates/main/main.inc:69
+#, php-format
+msgid "Changing password on %s"
+msgstr "Alterando senha em %s"
+
+#: templates/main/main.inc:114
 msgid "Confirm new password:"
-msgstr "Confirme sua senha nova:"
+msgstr "Confirme a senha nova:"
+
+#: lib/Driver/kolab.php:54 lib/Driver/ldap.php:95 lib/Driver/ldap.php:263
+msgid "Could not bind to ldap server"
+msgstr "Não foi possível conectar ao servidor LDAP."
 
-msgid "Error"
-msgstr "Erro"
+#: lib/Driver/kolab.php:46 lib/Driver/ldap.php:70
+msgid "Could not connect to ldap server"
+msgstr "Falha ao conectar ao servidor LDAP."
 
-msgid "Failure in changing password : "
-msgstr "Ocorreu uma falha ao modificar sua senha :"
+#: lib/Driver/smbpasswd.php:57
+msgid "Could not open pipe to smbpasswd."
+msgstr "Não foi possível se comunicar com smbpasswd."
 
-msgid "Help"
-msgstr "Ajuda"
+#: lib/Driver/smbpasswd.php:79
+msgid "Error sending data to smbpasswd."
+msgstr "Erro enviando dados para smbpasswd."
 
-msgid "Internal Error"
-msgstr "Erro Interno"
+#: lib/Driver/pspasswd.php:93
+msgid "Failed to verify old password."
+msgstr "A senha antiga não confere."
 
-msgid "Logout"
-msgstr "Saida"
+#: main.php:211 lib/Driver/composite.php:99
+#, php-format
+msgid "Failure in changing password on %s: %s"
+msgstr "Ocorreu uma falha ao modificar sua senha em %s: %s"
 
-msgid "Message"
-msgstr "Menssagem"
+#: lib/Driver.php:56 lib/Driver/kolab.php:78 lib/Driver/poppassd.php:114
+#: lib/Driver/ldap.php:264 lib/Driver/vmailmgr.php:42
+msgid "Incorrect Password"
+msgstr "Senha Incorreta"
 
+#: lib/Driver/ldap.php:255
+msgid "Minimum password age has not yet expired"
+msgstr "A validade mínima da senha ainda não foi alcançada"
+
+#: templates/main/main.inc:102
 msgid "New password:"
 msgstr "Senha nova:"
 
-msgid ""
-"Note: You will need to logout and back in after you change your password!"
-msgstr "Aviso: Você deverá sair e retornar após a mudança da sua senha!"
+#: lib/Driver.php:112
+#, php-format
+msgid "No such backend \"%s\" found."
+msgstr "Não foi encontrado o backend \"%s\"."
 
+#: templates/main/main.inc:90
 msgid "Old password:"
 msgstr "Senha antiga:"
 
-msgid "Password changed!"
-msgstr "Senha modificada!"
+#: lib/Driver/smbpasswd.php:47
+msgid "Passwd is not properly configured."
+msgstr "O módulo de senha não está configurado corretamente."
+
+#: main.php:203
+#, php-format
+msgid "Password changed on %s."
+msgstr "Senha modificada em %s."
 
+#: lib/Driver/pspasswd.php:75
+msgid "Password module can't find the supplied bin."
+msgstr "O módulo de senha não está configurado corretamente"
+
+#: lib/Driver/pspasswd.php:73
+msgid "Password module is missing required parameters."
+msgstr "Parâmetros inválidos ou faltando."
+
+#: lib/Driver/adsi.php:51
+msgid "Password module is missing target parameter."
+msgstr "Parâmetros inválidos ou faltando."
+
+#: main.php:178 lib/Driver/servuftp.php:71
 msgid "Password module is not properly configured"
 msgstr "O módulo de senha não está configurado corretamente"
 
-msgid "Problem?"
-msgstr "Problema?"
+#: lib/Driver/servuftp.php:98
+msgid "Password module is not properly configured."
+msgstr "O módulo de senha não está configurado corretamente"
 
-msgid "Reset"
-msgstr "Limpar"
+#: templates/main/main.inc:11
+msgid "Please provide a new password"
+msgstr "Por favor forneça sua nova senha."
 
-msgid "Some of Password module's configuration files are missing:"
-msgstr "Alguns arquivos do módulo Senha não foram encontrados"
+#: templates/main/main.inc:7
+msgid "Please provide your current password"
+msgstr "Por favor forneça sua senha atual."
 
-msgid "Success"
-msgstr "Sucesso"
+#: templates/main/main.inc:15
+msgid "Please verify your new password"
+msgstr "Você deve confirmar sua senha nova"
 
-msgid ""
-"This file controls the default preferences for Password module, and also "
-"controls which preferences users can alter."
-msgstr ""
-"Este arquivo controla as preferências padrão para o módulo de Senha e também "
-"controla quais preferências o usuário pode modificar"
+#: lib/Driver/composite.php:41
+msgid "Required 'drivers' is misconfigured in Composite configuration."
+msgstr "Parâmetro 'drivers' não foi configurado corretamente."
 
-msgid ""
-"This file controls the stylesheet that is used to set colors and fonts in "
-"addition to or overriding Horde defaults."
+#: lib/Driver/sql.php:46
+msgid "Required 'phptype' not specified in Passwd SQL configuration."
 msgstr ""
-"Este arquivo controla o estilo utilizado para definir cores e fontes em "
-"complemento ou sobreescrevendo o estilo padrão do Horde"
+"Parâmetro 'phptype' não foi especificado na configuração SQL do módulo "
+"passwd."
 
-msgid ""
-"This is the main Password module configuration file. It contains paths and "
-"options for all Password module scripts."
-msgstr "Este é o arquivo principal de configuração do módulo de senha"
+#: lib/Driver/vpopmail.php:49
+msgid "Required 'phptype' not specified in SQL configuration."
+msgstr "Parâmetro 'phptype' não foi especificado na configuração SQL."
+
+#: templates/main/main.inc:143
+msgid "Reset"
+msgstr "Limpar"
+
+#: lib/Driver/sql.php:75 lib/Driver/vpopmail.php:83
+msgid "Unable to connect to SQL server."
+msgstr "Impossível conectar ao servidor SQL."
+
+#: lib/Driver/sql.php:125 lib/Driver/poppassd.php:108
+#: lib/Driver/vpopmail.php:143
+msgid "User not found"
+msgstr "Usuário não encontrado."
 
-msgid "Warning"
-msgstr "Atenção"
+#: lib/Driver/kolab.php:70 lib/Driver/ldap.php:131 lib/Driver/pine.php:231
+msgid "User not found."
+msgstr "Usuário não encontrado."
 
-#, c-format
+#: templates/main/main.inc:77
+msgid "Username:"
+msgstr "Usuário:"
+
+#: main.php:47
+#, php-format
 msgid "You can't change password for user %s"
 msgstr "Você não pode mudar a senha para o usuário %s"
 
-msgid "You must give your new password"
-msgstr "Você deve fornecer sua senha nova"
+#: main.php:55
+msgid "You must give your current password"
+msgstr "Você precisa fornecer sua senha atual"
 
-msgid "You must give your old password"
-msgstr "Você deve fornecer sua senha antiga"
+#: main.php:64
+msgid "You must give your new password"
+msgstr "Você precisa fornecer sua senha nova"
 
+#: main.php:68
 msgid "You must verify your new password"
-msgstr "Você deve confirmar sua senha nova"
+msgstr "Você precisa confirmar sua senha nova"
+
+#: main.php:88
+#, php-format
+msgid ""
+"Your new password is too long; passwords may not be more than %d characters "
+"long!"
+msgstr "A senha é muito longa; o limite é de %d caracteres."
+
+#: main.php:167
+msgid "Your new password is too simple to guess!  Not changed!"
+msgstr "A senha nova é muito fácil de adivinhar! Senha não alterada."
+
+#: main.php:158
+msgid "Your new password is too simple to guess. Not changed!"
+msgstr "A senha nova é muito fácil de adivinhar. Senha não alterada."
+
+#: main.php:83
+#, php-format
+msgid "Your new password must be at least %d characters long!"
+msgstr "A senha nova deve ter no mínimo %d caracteres."
 
+#: main.php:76
+msgid "Your new password must be different from your current password"
+msgstr "A senha nova deve ser diferente da senha atual."
+
+#: main.php:128
+#, php-format
+msgid "Your new password must contain at least %d alphabetic characters."
+msgstr "A senha nova deve ter no mínimo %d letras."
+
+#: main.php:133
+#, php-format
+msgid "Your new password must contain at least %d alphanumeric characters."
+msgstr "A senha nova deve ter no mínimo %d caracteres alfanuméricos."
+
+#: main.php:138
+#, php-format
+msgid ""
+"Your new password must contain at least %d different types of characters. "
+"The types are: lower, upper, numeric, and symbols."
+msgstr ""
+"A nova senha deve ter no mínimo %d tipos de caracteres. Os tipos são: "
+"minúsculas, maiúsculas, números e símbolos."
+
+#: main.php:118
+#, php-format
+msgid "Your new password must contain at least %d lowercase characters."
+msgstr "A senha nova deve ter no mínimo %d letras minúsculas."
+
+#: main.php:123
+#, php-format
+msgid "Your new password must contain at least %d numeric characters."
+msgstr "A senha nova deve ter no mínimo %d caracteres numéricos."
+
+#: main.php:113
+#, php-format
+msgid "Your new password must contain at least %d uppercase characters."
+msgstr "A senha nova deve ter no mínimo %d letras maiúsculas."
+
+#: main.php:144
+#, php-format
+msgid "Your new password must contain less than %d whitespace characters."
+msgstr "A senha nova deve ter menos de %d espaços em branco."
+
+#: main.php:146
+msgid "Your new password must not contain whitespace characters."
+msgstr "A senha nova não pode conter espaços."
+
+#: main.php:72
 msgid "Your new passwords didn't match"
-msgstr "Sua senha nova não combina"
+msgstr "Sua senha nova não confere"
+
+#: templates/main/main.inc:19
+msgid "Your passwords do not match"
+msgstr "Sua senha nova não confere"
+
+#: lib/Driver/ldap.php:76
+msgid "ldap_start_tls failed"
+msgstr "ldap_start_tls falhou"
diff --git a/po/passwd.pot b/po/pt_PT.po
similarity index 57%
copy from po/passwd.pot
copy to po/pt_PT.po
index 4a33459..7f7c26a 100644
--- a/po/passwd.pot
+++ b/po/pt_PT.po
@@ -1,202 +1,206 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR Horde Project
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL at ADDRESS>, YEAR.
+# Portuguese-Brazil translation for Horde Passwd.
+# Copyright YEAR Free Software Foundation, Inc.
+# Darci Antonio Tartari <dtartari at portoriogrande.com.br>, 2002.
 #
-#, fuzzy
 msgid ""
 msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
+"Project-Id-Version: Horde 2.1 Passwd\n"
 "Report-Msgid-Bugs-To: dev at lists.horde.org\n"
-"POT-Creation-Date: 2005-10-09 16:51+0200\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
-"Language-Team: LANGUAGE <LL at li.org>\n"
+"POT-Creation-Date: 2006-12-26 23:59+0000\n"
+"PO-Revision-Date: 2007-01-06 12:13-0000\n"
+"Last-Translator: Manuel Menezes de Sequeira <Manuel.Sequeira at iscte.pt>\n"
+"Language-Team: Portuguese of Portugal <Manuel.Sequeira at iscte.pt>\n"
 "MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
 "Content-Transfer-Encoding: 8bit\n"
 
 #: lib/Driver/expect.php:34
 #, php-format
 msgid "%s does not exist or is not executable."
-msgstr ""
+msgstr "%s não existe ou não é executável."
 
 #: lib/Driver/composite.php:65
 #, php-format
 msgid "%s: unable to load driver: %s"
-msgstr ""
+msgstr "%s: impossível carregar o controlador: %s"
 
 #: lib/Driver/adsi.php:61
 #, php-format
 msgid "ADSI error %s."
-msgstr ""
+msgstr "Erro ADSI %s."
 
 #: lib/Driver/pspasswd.php:105 lib/Driver/adsi.php:64
 msgid "Access Denied."
-msgstr ""
+msgstr "Acesso Negado."
 
 #: lib/Driver.php:85
 msgid "Backend not correctly implemented."
-msgstr ""
+msgstr "Mecanismo mal implementado."
 
 #: main.php:255 templates/main/main.inc:142
 msgid "Change Password"
-msgstr ""
+msgstr "Alterar Palavra-Passe"
 
 #: templates/main/main.inc:127
 msgid "Change password on:"
-msgstr ""
+msgstr "Alterar palavra-passe em:"
 
 #: templates/main/main.inc:62
 msgid "Change your password"
-msgstr ""
+msgstr "Altere a sua palavra-passe"
 
 #: templates/main/main.inc:69
 #, php-format
 msgid "Changing password on %s"
-msgstr ""
+msgstr "Alterando palavra-passe em %s"
 
 #: templates/main/main.inc:114
 msgid "Confirm new password:"
-msgstr ""
+msgstr "Confirme a sua nova palavra-passe:"
 
 #: lib/Driver/ldap.php:95 lib/Driver/ldap.php:263 lib/Driver/kolab.php:54
 msgid "Could not bind to ldap server"
-msgstr ""
+msgstr "Falha na ligação (bind) ao servidor LDAP"
 
 #: lib/Driver/ldap.php:70 lib/Driver/kolab.php:46
 msgid "Could not connect to ldap server"
-msgstr ""
+msgstr "Falha na conexão ao servidor LDAP"
 
 #: lib/Driver/smbpasswd.php:57
 msgid "Could not open pipe to smbpasswd."
-msgstr ""
+msgstr "Falha na abertura de ligação (pipe) a smbpasswd."
 
 #: lib/Driver/smbpasswd.php:79
 msgid "Error sending data to smbpasswd."
-msgstr ""
+msgstr "Erro ao enviar dados para smbpasswd."
 
 #: lib/Driver/pspasswd.php:93
 msgid "Failed to verify old password."
-msgstr ""
+msgstr "Falha ao verificar a antiga palavra-passe."
 
 #: main.php:211 lib/Driver/composite.php:99
 #, php-format
 msgid "Failure in changing password on %s: %s"
-msgstr ""
+msgstr "Falha ao alterar a palavra-passe em %s: %s"
 
 #: lib/Driver.php:56 lib/Driver/ldap.php:264 lib/Driver/vmailmgr.php:42
 #: lib/Driver/kolab.php:78 lib/Driver/poppassd.php:114
 msgid "Incorrect Password"
-msgstr ""
+msgstr "Palavra-Passe Incorrecta"
 
 #: lib/Driver/ldap.php:255
 msgid "Minimum password age has not yet expired"
-msgstr ""
+msgstr "Prazo mínimo da palavra-passe ainda não expirou"
 
 #: templates/main/main.inc:102
 msgid "New password:"
-msgstr ""
+msgstr "Nova palavra-passe:"
 
-#: lib/Driver.php:112
+#: lib/Driver.php:115
 #, php-format
 msgid "No such backend \"%s\" found."
-msgstr ""
+msgstr "Mecanismo \"%s\" não encontrado."
 
 #: templates/main/main.inc:90
 msgid "Old password:"
-msgstr ""
+msgstr "Palavra-passe antiga:"
 
 #: lib/Driver/smbpasswd.php:47
 msgid "Passwd is not properly configured."
 msgstr ""
+"O módulo de alteração de palavras-passe não está correctamente configurado."
 
 #: main.php:203
 #, php-format
 msgid "Password changed on %s."
-msgstr ""
+msgstr "Palavra-passe alterada em %s."
 
 #: lib/Driver/pspasswd.php:75
 msgid "Password module can't find the supplied bin."
 msgstr ""
+"O módulo de alteração de palavras-passe não consegue encontrar o binário "
+"fornecido."
 
 #: lib/Driver/pspasswd.php:73
 msgid "Password module is missing required parameters."
 msgstr ""
+"O módulo de alteração de palavras-passe tem parâmetros necessários em falta."
 
 #: lib/Driver/adsi.php:51
 msgid "Password module is missing target parameter."
-msgstr ""
+msgstr "O módulo de alteração de palavras-passe tem parâmetro alvo em falta."
 
 #: main.php:178 lib/Driver/servuftp.php:71
 msgid "Password module is not properly configured"
 msgstr ""
+"O módulo de alteração de palavras-passe não está correctamente configurado"
 
 #: lib/Driver/servuftp.php:98
 msgid "Password module is not properly configured."
 msgstr ""
+"O módulo de alteração de palavras-passe não está correctamente configurado."
 
 #: templates/main/main.inc:11
 msgid "Please provide a new password"
-msgstr ""
+msgstr "Por favor introduza uma nova palavra-passe."
 
 #: templates/main/main.inc:7
 msgid "Please provide your current password"
-msgstr ""
+msgstr "Por favor introduza a sua palavra-passe actual."
 
 #: templates/main/main.inc:15
 msgid "Please verify your new password"
-msgstr ""
+msgstr "Por favor confirme a sua nova palavra-passe"
 
 #: lib/Driver/composite.php:41
 msgid "Required 'drivers' is misconfigured in Composite configuration."
-msgstr ""
+msgstr "O parâmetro 'drivers' está errado na configuração de Composite."
 
 #: lib/Driver/sql.php:46
 msgid "Required 'phptype' not specified in Passwd SQL configuration."
-msgstr ""
+msgstr "O parâmetro 'phptype' está errado na configuração de Password SQL."
 
 #: lib/Driver/vpopmail.php:49
 msgid "Required 'phptype' not specified in SQL configuration."
-msgstr ""
+msgstr "O parâmetro 'phptype' não consta na configuração de SQL."
 
 #: templates/main/main.inc:143
 msgid "Reset"
-msgstr ""
+msgstr "Limpar"
 
 #: lib/Driver/sql.php:75 lib/Driver/vpopmail.php:83
 msgid "Unable to connect to SQL server."
-msgstr ""
+msgstr "Não foi possível ligar ao servidor SQL."
 
 #: lib/Driver/sql.php:125 lib/Driver/poppassd.php:108
 #: lib/Driver/vpopmail.php:143
 msgid "User not found"
-msgstr ""
+msgstr "Utilizador não encontrado"
 
 #: lib/Driver/ldap.php:131 lib/Driver/kolab.php:70 lib/Driver/pine.php:231
 msgid "User not found."
-msgstr ""
+msgstr "Utilizador não encontrado."
 
 #: templates/main/main.inc:77
 msgid "Username:"
-msgstr ""
+msgstr "Nome de Utilizador:"
 
 #: main.php:47
 #, php-format
 msgid "You can't change password for user %s"
-msgstr ""
+msgstr "Não pode alterar a palavra-passe do utilizador %s"
 
 #: main.php:55
 msgid "You must give your current password"
-msgstr ""
+msgstr "Tem de fornecer a sua palavra-passe actual"
 
 #: main.php:64
 msgid "You must give your new password"
-msgstr ""
+msgstr "Tem de fornecer a sua nova palavra-passe"
 
 #: main.php:68
 msgid "You must verify your new password"
-msgstr ""
+msgstr "Tem de confirmar a sua nova palavra-passe"
 
 #: main.php:88
 #, php-format
@@ -204,33 +208,37 @@ msgid ""
 "Your new password is too long; passwords may not be more than %d characters "
 "long!"
 msgstr ""
+"A sua nova palavra-passe é demasiado longa; as palavras-passe não podem ter "
+"mais de %d caracteres!"
 
 #: main.php:167
 msgid "Your new password is too simple to guess!  Not changed!"
-msgstr ""
+msgstr "A sua nova palavra-passe adivinha-se facilmente! Não foi alterada!"
 
 #: main.php:158
 msgid "Your new password is too simple to guess. Not changed!"
-msgstr ""
+msgstr "A sua nova palavra-passe adivinha-se facilmente. Não foi alterada!"
 
 #: main.php:83
 #, php-format
 msgid "Your new password must be at least %d characters long!"
-msgstr ""
+msgstr "A sua nova palavra-passe tem de ter pelo menos %d caracteres!"
 
 #: main.php:76
 msgid "Your new password must be different from your current password"
-msgstr ""
+msgstr "A sua nova palavra-passe tem de ser diferente da actual"
 
 #: main.php:128
 #, php-format
 msgid "Your new password must contain at least %d alphabetic characters."
-msgstr ""
+msgstr "A sua nova palavra-passe tem de conter pelo menos %d letras."
 
 #: main.php:133
 #, php-format
 msgid "Your new password must contain at least %d alphanumeric characters."
 msgstr ""
+"A sua nova palavra-passe tem de conter pelo menos %d caracteres "
+"alfanuméricos."
 
 #: main.php:138
 #, php-format
@@ -238,39 +246,46 @@ msgid ""
 "Your new password must contain at least %d different types of characters. "
 "The types are: lower, upper, numeric, and symbols."
 msgstr ""
+"A sua nova palavra-passe tem de conter pelo menos %d tipos de caracteres. Os "
+"tipos são: letra mínuscula, letra maiúscula, dígito e símbolo."
 
 #: main.php:118
 #, php-format
 msgid "Your new password must contain at least %d lowercase characters."
 msgstr ""
+"A sua nova palavra-passe tem de conter pelo menos %d letras minúsculas."
 
 #: main.php:123
 #, php-format
 msgid "Your new password must contain at least %d numeric characters."
-msgstr ""
+msgstr "A sua nova palavra-passe tem de conter pelo menos %d dígitos."
 
 #: main.php:113
 #, php-format
 msgid "Your new password must contain at least %d uppercase characters."
 msgstr ""
+"A sua nova palavra-passe tem de conter pelo menos %d letras maiúsculas."
 
 #: main.php:144
 #, php-format
 msgid "Your new password must contain less than %d whitespace characters."
 msgstr ""
+"A sua nova palavra-passe tem de conter menos de %d caracteres brancos "
+"(espaços, etc.)."
 
 #: main.php:146
 msgid "Your new password must not contain whitespace characters."
 msgstr ""
+"A sua nova palavra-passe não pode conter caracteres brancos (espaços, etc.)."
 
 #: main.php:72
 msgid "Your new passwords didn't match"
-msgstr ""
+msgstr "As suas novas palavras-passe não correspondem"
 
 #: templates/main/main.inc:19
 msgid "Your passwords do not match"
-msgstr ""
+msgstr "As palavras-passe não correspondem"
 
 #: lib/Driver/ldap.php:76
 msgid "ldap_start_tls failed"
-msgstr ""
+msgstr "ldap_start_tls falhou"
diff --git a/po/ro_RO.po b/po/ro_RO.po
index de7b212..c307250 100644
--- a/po/ro_RO.po
+++ b/po/ro_RO.po
@@ -1,5 +1,5 @@
 # Passwd Romanian Translation.
-# Copyright (C) 2003 Horde Project
+# Copyright 2003-2009 The Horde Project
 # Eugen Hoanca <eugenh at urban-grafx.ro>, 2003.
 # Marius Dragulescu <mariusd at urban-grafx.ro>, 2003.
 msgid ""
diff --git a/po/ru_RU.po b/po/ru_RU.po
index 1c69b43..2ca191c 100644
--- a/po/ru_RU.po
+++ b/po/ru_RU.po
@@ -1,5 +1,5 @@
 # Russian translations for Passwd package
-# Copyright (C) 2005 Horde Project
+# Copyright 2005-2009 The Horde Project
 # This file is distributed under the same license as the Passwd package.
 # Automatically generated, 2005.
 #
diff --git a/po/sk_SK.po b/po/sk_SK.po
index 2aa8372..66b9500 100644
--- a/po/sk_SK.po
+++ b/po/sk_SK.po
@@ -1,6 +1,6 @@
 # Slovak translations for passwd package
 # Slovenské preklady pre balík passwd.
-# Copyright (C) 2005 Ivan Noris <vix at vazka.sk>
+# Copyright 2005 Ivan Noris <vix at vazka.sk>
 # This file is distributed under the same license as the horde package.
 # (C) 2005 Ivan Noris <vix at vazka.sk>
 #
diff --git a/po/de_DE.po b/po/sl_SI.po
similarity index 51%
copy from po/de_DE.po
copy to po/sl_SI.po
index 88e50bf..ddb6c9e 100644
--- a/po/de_DE.po
+++ b/po/sl_SI.po
@@ -1,238 +1,257 @@
-# passwd module translations
-# Copyright (C) 2002-2004 Horde Project.
-# Jens Tkotz <jens.tkotz at f2h9.de>, 2002.
-# Jan Schneider <jan at horde.org>, 2002-2004.
+# Slovenian translations for Passwd packaga
+# Slovenski prevod Passwd paketa
+# Copyright 2006-2009 The Horde Project
+# This file is distributed under the same license as the horde package.
+# Automatically generated, 2006.
 #
 msgid ""
 msgstr ""
 "Project-Id-Version: passwd\n"
 "Report-Msgid-Bugs-To: dev at lists.horde.org\n"
-"POT-Creation-Date: 2005-10-09 16:51+0200\n"
-"PO-Revision-Date: 2005-10-09 17:07+0200\n"
-"Last-Translator: Jan Schneider <jan at horde.org>\n"
-"Language-Team: German <i18n at lists.horde.org>\n"
+"POT-Creation-Date: 2006-07-25 11:30+0200\n"
+"PO-Revision-Date: 2006-04-30 10:32+0100\n"
+"Last-Translator: duck at obala.net\n"
+"Language-Team: sl_SI <duck at obala.net>\n"
 "MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=iso-8859-1\n"
-"Content-Transfer-Encoding: 8-bit\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
 
 #: lib/Driver/expect.php:34
 #, php-format
 msgid "%s does not exist or is not executable."
-msgstr "%s existiert nicht oder ist nicht ausführbar."
+msgstr "%s ne obstaja ali ga ne morem pognati"
 
 #: lib/Driver/composite.php:65
 #, php-format
 msgid "%s: unable to load driver: %s"
-msgstr "%s: Treiber konnte nicht geladen werden: %s"
+msgstr "%s: ne morem naložiti gonilnika: %s"
 
 #: lib/Driver/adsi.php:61
 #, php-format
 msgid "ADSI error %s."
-msgstr "ADSI Fehler %s."
+msgstr "ADSI napaka %s."
 
 #: lib/Driver/pspasswd.php:105 lib/Driver/adsi.php:64
 msgid "Access Denied."
-msgstr "Zugriff verweigert."
+msgstr "Dostop zavrnjen."
 
 #: lib/Driver.php:85
 msgid "Backend not correctly implemented."
-msgstr "Das Backend wurde nicht korrekt implementiert."
+msgstr "Gonilnik ni implementiran."
 
 #: main.php:255 templates/main/main.inc:142
 msgid "Change Password"
-msgstr "Passwort ändern"
+msgstr "Spremeni geslo"
 
 #: templates/main/main.inc:127
 msgid "Change password on:"
-msgstr "Passwort ändern auf:"
+msgstr "Spremeni geslo na:"
 
 #: templates/main/main.inc:62
 msgid "Change your password"
-msgstr "Ändern Sie Ihr Passwort"
+msgstr "Spremeni gelso"
 
 #: templates/main/main.inc:69
 #, php-format
 msgid "Changing password on %s"
-msgstr "Passwort auf %s ändern"
+msgstr "Spremeni geslo na %s"
 
 #: templates/main/main.inc:114
 msgid "Confirm new password:"
-msgstr "Neues Passwort bestätigen:"
+msgstr "Potrdi novo geslo"
 
-#: lib/Driver/ldap.php:95 lib/Driver/ldap.php:263 lib/Driver/kolab.php:54
-msgid "Could not bind to ldap server"
-msgstr "Verbindung zum LDAP-Server fehlgeschlagen"
+#: lib/Driver/ldap.php:99 lib/Driver/ldap.php:189 lib/Driver/kolab.php:54
+msgid "Could not bind to LDAP server"
+msgstr "Ne morem se povezati na LDAP strežnik"
 
-#: lib/Driver/ldap.php:70 lib/Driver/kolab.php:46
-msgid "Could not connect to ldap server"
-msgstr "Verbindung zum LDAP-Server fehlgeschlagen"
+#: lib/Driver/ldap.php:74 lib/Driver/kolab.php:46
+msgid "Could not connect to LDAP server"
+msgstr "Ne morem se povezati na LDAP strežnik."
 
 #: lib/Driver/smbpasswd.php:57
 msgid "Could not open pipe to smbpasswd."
-msgstr "Verbindung zu smbpasswd konnte nicht hergestellt werden."
+msgstr "Ne morem odpreti povezavo na smbpasswd"
+
+#: lib/Driver/ldap.php:80
+msgid "Could not start TLS connection to LDAP server"
+msgstr "Ne morem zagnati TLS povezave na LDAP strežnik"
 
 #: lib/Driver/smbpasswd.php:79
 msgid "Error sending data to smbpasswd."
-msgstr "Beim Versenden von Daten zu smbpasswd ist ein Fehler aufgetreten."
+msgstr "Napaka pri pošiljanu podatkov na smbpasswd"
 
 #: lib/Driver/pspasswd.php:93
 msgid "Failed to verify old password."
-msgstr "Das alte Passwort konnte nicht bestätigt werden."
+msgstr "Ne morem preveriti starega gesla."
 
-#: main.php:211 lib/Driver/composite.php:99
+#: main.php:211 lib/Driver/composite.php:104
 #, php-format
 msgid "Failure in changing password on %s: %s"
-msgstr "Fehler beim Ändern des Passworts auf %s: %s"
+msgstr "Napaka v spreminjanu gesla na %s: %s"
 
-#: lib/Driver.php:56 lib/Driver/ldap.php:264 lib/Driver/vmailmgr.php:42
+#: lib/Driver.php:56 lib/Driver/ldap.php:190 lib/Driver/vmailmgr.php:42
 #: lib/Driver/kolab.php:78 lib/Driver/poppassd.php:114
 msgid "Incorrect Password"
-msgstr "Falsches Passwort"
+msgstr "Napačno geslo"
 
-#: lib/Driver/ldap.php:255
+#: lib/Driver/ldap.php:166
 msgid "Minimum password age has not yet expired"
-msgstr "Das minimale Passwortalter ist noch nicht abgelaufen"
+msgstr "Geslo Å¡e ni poteklo."
 
 #: templates/main/main.inc:102
 msgid "New password:"
-msgstr "Neues Passwort:"
+msgstr "Novo geslo:"
 
-#: lib/Driver.php:112
+#: lib/Driver.php:113
 #, php-format
 msgid "No such backend \"%s\" found."
-msgstr "Ein Backend namens \"%s\" konnte nicht gefunden werden."
+msgstr "Gonilnik %s ne obstaja."
+
+#: lib/Driver/http.php:72
+msgid "Old password is incorrect."
+msgstr "Staro geslo je napačno"
 
 #: templates/main/main.inc:90
 msgid "Old password:"
-msgstr "Altes Passwort:"
+msgstr "Staro geslo"
 
 #: lib/Driver/smbpasswd.php:47
 msgid "Passwd is not properly configured."
-msgstr "Passwd ist nicht vollständig konfiguriert."
+msgstr "Modul ni prav nastavljen."
 
 #: main.php:203
 #, php-format
 msgid "Password changed on %s."
-msgstr "Passwort auf %s geändert."
+msgstr "Geslo je bilo spremenjeno na %s."
+
+#: lib/Driver/sql.php:127
+#, php-format
+msgid "Password column \"%s\" not found in password table."
+msgstr "Kolona za gesla %s ne obstaja v tabeli."
 
 #: lib/Driver/pspasswd.php:75
 msgid "Password module can't find the supplied bin."
-msgstr "Passwd kann das angegebene Programm nicht finden."
+msgstr "Ne najdem binarne aplikacije"
 
 #: lib/Driver/pspasswd.php:73
 msgid "Password module is missing required parameters."
-msgstr "Passwd fehlen benötigte Parameter."
+msgstr "Modulu za gesla manjkajo zahtevani parameterji."
 
 #: lib/Driver/adsi.php:51
 msgid "Password module is missing target parameter."
-msgstr "Passwd fehlt der \"Ziel\"-Parameter."
+msgstr "Modulu za gesla manjkajo zahtevani parameterji."
 
 #: main.php:178 lib/Driver/servuftp.php:71
 msgid "Password module is not properly configured"
-msgstr "Passwd ist nicht vollständig konfiguriert"
+msgstr "Modulu za gesla ni pravilno nastavljen."
 
 #: lib/Driver/servuftp.php:98
 msgid "Password module is not properly configured."
-msgstr "Passwd ist nicht vollständig konfiguriert."
+msgstr "Modulu za gesla manjkajo zahtevani parameterji."
 
 #: templates/main/main.inc:11
 msgid "Please provide a new password"
-msgstr "Bitte geben Sie ein neues Passwort an"
+msgstr "Navedite novo geslo."
 
 #: templates/main/main.inc:7
 msgid "Please provide your current password"
-msgstr "Bitte geben Sie Ihr aktuelles Passwort an"
+msgstr "Navedite trenutno geslo."
 
 #: templates/main/main.inc:15
 msgid "Please verify your new password"
-msgstr "Bitte bestätigen Sie Ihr neues Passwort"
+msgstr "Preverite vaše geslo"
 
 #: lib/Driver/composite.php:41
 msgid "Required 'drivers' is misconfigured in Composite configuration."
-msgstr "'drivers' ist in der Composite-Konfiguration fehlerhaft konfiguriert."
+msgstr "Zahtevani gonilnik je napačno nastavljen v združenem gonilniku."
 
 #: lib/Driver/sql.php:46
 msgid "Required 'phptype' not specified in Passwd SQL configuration."
-msgstr "'phptype' wurde in der SQL-Konfiguration nicht angegeben."
+msgstr "Zahtevani tip povezave ni nastavljen nastavitvah baze podatkov."
 
 #: lib/Driver/vpopmail.php:49
 msgid "Required 'phptype' not specified in SQL configuration."
-msgstr "'phptype' wurde in der SQL-Konfiguration nicht angegeben."
+msgstr "Zahtevani tip povezave ni nastavljen nastavitvah baze podatkov."
 
 #: templates/main/main.inc:143
 msgid "Reset"
-msgstr "Zurücksetzen"
+msgstr "Ponastavi"
+
+#: lib/Driver/http.php:65
+msgid "The requested website for changing user passwords could not be reached."
+msgstr "Zahtevana stran za spremembo gesla ni dostopna."
+
+#: lib/Driver/http.php:74
+msgid "The username could not be found."
+msgstr "Ne najdem uporabniškega imena."
 
 #: lib/Driver/sql.php:75 lib/Driver/vpopmail.php:83
 msgid "Unable to connect to SQL server."
-msgstr "Verbindung zum SQL Server kann nicht hergestellt werden."
+msgstr "Ne morem se povezati na SQL strežnik."
 
-#: lib/Driver/sql.php:125 lib/Driver/poppassd.php:108
-#: lib/Driver/vpopmail.php:143
+#: lib/Driver/sql.php:135 lib/Driver/poppassd.php:108
+#: lib/Driver/vpopmail.php:150
 msgid "User not found"
-msgstr "Benutzer nicht gefunden"
+msgstr "Ne najdem uporabnika."
 
-#: lib/Driver/ldap.php:131 lib/Driver/kolab.php:70 lib/Driver/pine.php:231
+#: lib/Driver/ldap.php:133 lib/Driver/kolab.php:70 lib/Driver/pine.php:231
 msgid "User not found."
-msgstr "Benutzer nicht gefunden."
+msgstr "Ne najdem uporabnika."
 
 #: templates/main/main.inc:77
 msgid "Username:"
-msgstr "Benutzername:"
+msgstr "Uporabniško ime:"
 
 #: main.php:47
 #, php-format
 msgid "You can't change password for user %s"
-msgstr "Sie können das Passwort von Benutzer %s nicht ändern"
+msgstr "Ne moremte spremeniti gesla za uporabnika %s"
 
 #: main.php:55
 msgid "You must give your current password"
-msgstr "Sie müssen Ihr altes Passwort angeben"
+msgstr "Morate vnesti trenutno geslo."
 
 #: main.php:64
 msgid "You must give your new password"
-msgstr "Sie müssen Ihr neues Passwort angeben"
+msgstr "Morate vnesti novo geslo."
 
 #: main.php:68
 msgid "You must verify your new password"
-msgstr "Sie müssen Ihr neues Passwort bestätigen"
+msgstr "Morate vnesti novo geslo."
 
 #: main.php:88
 #, php-format
 msgid ""
 "Your new password is too long; passwords may not be more than %d characters "
 "long!"
-msgstr ""
-"Ihr neues Passwort ist zu lang, das Passwort darf nicht länger als %d "
-"Zeichen sein!"
+msgstr "Vaše geslo je predlogo. Ne more biti daljše od %d znakov."
 
 #: main.php:167
 msgid "Your new password is too simple to guess!  Not changed!"
-msgstr "Ihr neues Passwort ist zu leicht zu erraten! Nicht geändert!"
+msgstr "Geslo je preveč preposto. Ni spremenjano!"
 
 #: main.php:158
 msgid "Your new password is too simple to guess. Not changed!"
-msgstr "Ihr neues Passwort ist zu leicht zu erraten. Nicht geändert!"
+msgstr "Geslo je preveč preposto. Ni spremenjano!"
 
 #: main.php:83
 #, php-format
 msgid "Your new password must be at least %d characters long!"
-msgstr "Ihr neues Passwort muss mindestens %d Zeichen lang sein!"
+msgstr "Geslo mora biti vsaj %d znakov dolgo."
 
 #: main.php:76
 msgid "Your new password must be different from your current password"
-msgstr "Ihr neues Passwort muss sich von Ihrem alten unterscheiden"
+msgstr "Novo geslo mora biti drugaćno od starega."
 
 #: main.php:128
 #, php-format
 msgid "Your new password must contain at least %d alphabetic characters."
-msgstr "Ihr neues Passwort muss mindestens %d Buchstaben enthalten."
+msgstr "Gesl mora vsebovati vsaj %d črk."
 
 #: main.php:133
 #, php-format
 msgid "Your new password must contain at least %d alphanumeric characters."
-msgstr ""
-"Ihr neues Passwort muss mindestens %d Buchstaben oder Zahlen enthalten."
+msgstr "Geslo mroa vsebovati vsaj %d Å¡tevil."
 
 #: main.php:138
 #, php-format
@@ -240,41 +259,41 @@ msgid ""
 "Your new password must contain at least %d different types of characters. "
 "The types are: lower, upper, numeric, and symbols."
 msgstr ""
-"Ihr neues Passwort muss mindestens %d verschiedenen Zeichentypen enhalten. "
-"Typen sind: Kleinbuchstaben, Großbuchstaben, Zahlen und Sonderzeichen."
+"Gelo mora vsebovati vsaj %d razičnih tipov znakov. Tipi znakov: majhne črke, "
+"velike črke, številke, simboli."
 
 #: main.php:118
 #, php-format
 msgid "Your new password must contain at least %d lowercase characters."
-msgstr "Ihr neues Passwort muss mindestens %d Kleinbuchstaben enthalten."
+msgstr "Geslo mora vsebovati vsaj %d majhnih črk."
 
 #: main.php:123
 #, php-format
 msgid "Your new password must contain at least %d numeric characters."
-msgstr "Ihr neues Passwort muss mindestens %d Zahlen enthalten."
+msgstr "Geslo mora vsebovati vsaj %d Å¡tevilk."
 
 #: main.php:113
 #, php-format
 msgid "Your new password must contain at least %d uppercase characters."
-msgstr "Ihr neues Passwort muss mindestens %d Großbuchstaben enthalten."
+msgstr "Geslo mora vsebovati vsaj %d velikih črk."
 
 #: main.php:144
 #, php-format
 msgid "Your new password must contain less than %d whitespace characters."
-msgstr "Ihr neues Passwort darf nicht mehr als %d Leerzeichen enthalten."
+msgstr "Geslo mora vsebovati vsaj manj kot %d presledkov."
 
 #: main.php:146
 msgid "Your new password must not contain whitespace characters."
-msgstr "Ihr neues Passwort darf keine Leerzeichen enthalten."
+msgstr "Geslo ne sme vsebovati presledkov."
 
 #: main.php:72
 msgid "Your new passwords didn't match"
-msgstr "Ihre neuen Passwörter stimmen nicht überein"
+msgstr "Geslo in njegova potrditev si ne ustrezata."
+
+#: lib/Driver/http.php:76
+msgid "Your password could not be changed."
+msgstr "Geslo ne more biti spremenjeno."
 
 #: templates/main/main.inc:19
 msgid "Your passwords do not match"
-msgstr "Ihre Passwörter stimmen nicht überein"
-
-#: lib/Driver/ldap.php:76
-msgid "ldap_start_tls failed"
-msgstr "ldap_start_tls fehlgeschlagen"
+msgstr "Vaše geslo ne ustreza."
diff --git a/po/sv_SE.po b/po/sv_SE.po
index 026dbed..4cfe33d 100644
--- a/po/sv_SE.po
+++ b/po/sv_SE.po
@@ -1,5 +1,5 @@
 # Passwd module translations.
-# Copyright (C) YEAR Free Software Foundation, Inc.
+# Copyright YEAR Free Software Foundation, Inc.
 # Mattias Webjörn Eriksson <mattias at webjorn>, 2002.
 #
 msgid ""
diff --git a/po/passwd.pot b/po/tr_TR.po
similarity index 50%
copy from po/passwd.pot
copy to po/tr_TR.po
index 4a33459..efb3e11 100644
--- a/po/passwd.pot
+++ b/po/tr_TR.po
@@ -1,236 +1,254 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR Horde Project
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL at ADDRESS>, YEAR.
+# Turkish translations for Passwd package
+# Þifre paketi için Türkçe çeviriler.
+# Copyright 2008-2009 The Horde Project
+# This file is distributed under the same license as the Passwd package.
+# horde-tr @ metu.edu.tr, 2007-2008.
 #
-#, fuzzy
 msgid ""
 msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
+"Project-Id-Version: Passwd H3 (3.0.1)\n"
 "Report-Msgid-Bugs-To: dev at lists.horde.org\n"
-"POT-Creation-Date: 2005-10-09 16:51+0200\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
-"Language-Team: LANGUAGE <LL at li.org>\n"
+"POT-Creation-Date: 2008-04-15 12:57+0300\n"
+"PO-Revision-Date: 2008-04-15 12:57+0300\n"
+"Last-Translator: Emre Sezginer\n"
+"Language-Team: i18n at lists.horde.org\n"
 "MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Type: text/plain; charset=ISO-8859-9\n"
 "Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
 
 #: lib/Driver/expect.php:34
 #, php-format
 msgid "%s does not exist or is not executable."
-msgstr ""
+msgstr "%s yok, ya da çalýþtýrýlabilir deðil."
 
-#: lib/Driver/composite.php:65
+#: lib/Driver/composite.php:63
 #, php-format
 msgid "%s: unable to load driver: %s"
-msgstr ""
+msgstr "%s: sürücü yüklenemedi: %s"
 
 #: lib/Driver/adsi.php:61
 #, php-format
 msgid "ADSI error %s."
-msgstr ""
+msgstr "ADSI hatasý %s."
 
 #: lib/Driver/pspasswd.php:105 lib/Driver/adsi.php:64
 msgid "Access Denied."
-msgstr ""
+msgstr "Eriþim Engellendi."
 
-#: lib/Driver.php:85
+#: lib/Driver.php:89
 msgid "Backend not correctly implemented."
-msgstr ""
+msgstr "Arka araç doðru uygulanmamýþ."
+
+#: lib/Driver/poppassd.php:90
+msgid "Cannot send command to server."
+msgstr "Sunucuya komut gönderilemiyor."
 
 #: main.php:255 templates/main/main.inc:142
 msgid "Change Password"
-msgstr ""
+msgstr "Þifre Deðiþtir"
 
 #: templates/main/main.inc:127
 msgid "Change password on:"
-msgstr ""
+msgstr "Þifre deðiþtir:"
 
 #: templates/main/main.inc:62
 msgid "Change your password"
-msgstr ""
+msgstr "Þifrenizi deðiþtirin"
 
 #: templates/main/main.inc:69
 #, php-format
 msgid "Changing password on %s"
-msgstr ""
+msgstr "%s þifreniz deðiþtiriliyor"
 
 #: templates/main/main.inc:114
 msgid "Confirm new password:"
-msgstr ""
+msgstr "Yeni þifreyi doðrulayýnýz:"
 
-#: lib/Driver/ldap.php:95 lib/Driver/ldap.php:263 lib/Driver/kolab.php:54
-msgid "Could not bind to ldap server"
-msgstr ""
+#: lib/Driver/kolab.php:60 lib/Driver/ldap.php:95 lib/Driver/ldap.php:263
+msgid "Could not bind to LDAP server"
+msgstr "LDAP sunucuya bað kurulamadý."
 
-#: lib/Driver/ldap.php:70 lib/Driver/kolab.php:46
-msgid "Could not connect to ldap server"
-msgstr ""
+#: lib/Driver/kolab.php:46 lib/Driver/ldap.php:70
+msgid "Could not connect to LDAP server"
+msgstr "LDAP sunucuya baðlanýlamadý"
 
 #: lib/Driver/smbpasswd.php:57
 msgid "Could not open pipe to smbpasswd."
-msgstr ""
+msgstr "smbpasswd komutuna tünel açýlamadý."
+
+#: lib/Driver/ldap.php:76
+msgid "Could not start TLS connection to LDAP server"
+msgstr "LDAP sunucuya TLS baðlantýsý baþlatýlamadý"
 
 #: lib/Driver/smbpasswd.php:79
 msgid "Error sending data to smbpasswd."
-msgstr ""
+msgstr "smbpasswd ye veri gönderirken hata oluþtu."
 
 #: lib/Driver/pspasswd.php:93
 msgid "Failed to verify old password."
-msgstr ""
+msgstr "Eski þifre doðrulanamadý."
 
-#: main.php:211 lib/Driver/composite.php:99
+#: main.php:211 lib/Driver/composite.php:97
 #, php-format
 msgid "Failure in changing password on %s: %s"
-msgstr ""
+msgstr "%s için þifre deðiþtirilemedi: %s"
 
-#: lib/Driver.php:56 lib/Driver/ldap.php:264 lib/Driver/vmailmgr.php:42
-#: lib/Driver/kolab.php:78 lib/Driver/poppassd.php:114
+#: lib/Driver.php:60 lib/Driver/vmailmgr.php:42 lib/Driver/kolab.php:84
+#: lib/Driver/poppassd.php:120 lib/Driver/ldap.php:264
 msgid "Incorrect Password"
-msgstr ""
+msgstr "Hatalý Þifre"
 
 #: lib/Driver/ldap.php:255
 msgid "Minimum password age has not yet expired"
-msgstr ""
+msgstr "En az þifre kullaným süresi henuz dolmadý"
 
 #: templates/main/main.inc:102
 msgid "New password:"
-msgstr ""
+msgstr "Yeni þifre:"
+
+#: lib/Driver/poppassd.php:67
+msgid "No prompt returned from server."
+msgstr "Sunucudan tepki gelmedi."
 
-#: lib/Driver.php:112
+#: lib/Driver.php:116
 #, php-format
 msgid "No such backend \"%s\" found."
-msgstr ""
+msgstr "\"%s\" arka aracý bulunamadý."
 
 #: templates/main/main.inc:90
 msgid "Old password:"
-msgstr ""
+msgstr "Eski þifre:"
 
 #: lib/Driver/smbpasswd.php:47
 msgid "Passwd is not properly configured."
-msgstr ""
+msgstr "Þifre doðru yapýlandýrýlmadý."
 
 #: main.php:203
 #, php-format
 msgid "Password changed on %s."
-msgstr ""
+msgstr "%s için þifre deðiþtirildi."
+
+#: lib/Driver/sql.php:127
+#, php-format
+msgid "Password column \"%s\" not found in password table."
+msgstr "\"%s\" þifre kolonu, þifre tablosunda bulunamadý."
 
 #: lib/Driver/pspasswd.php:75
 msgid "Password module can't find the supplied bin."
-msgstr ""
+msgstr "Þifre modülü, belirtilen uygulamayý bulamýyor."
 
 #: lib/Driver/pspasswd.php:73
 msgid "Password module is missing required parameters."
-msgstr ""
+msgstr "Þifre modülü için gerekli deðiþkenler eksik."
 
 #: lib/Driver/adsi.php:51
 msgid "Password module is missing target parameter."
-msgstr ""
+msgstr "Þifre modülü için gerekli hedef deðiþken eksik."
 
 #: main.php:178 lib/Driver/servuftp.php:71
 msgid "Password module is not properly configured"
-msgstr ""
+msgstr "Þifre modülü doðru yapýlandýrýlmadý"
 
 #: lib/Driver/servuftp.php:98
 msgid "Password module is not properly configured."
-msgstr ""
+msgstr "Þifre modülü doðru yapýlandýrýlmadý ."
 
 #: templates/main/main.inc:11
 msgid "Please provide a new password"
-msgstr ""
+msgstr "Lütfen yeni bir þifre giriniz"
 
 #: templates/main/main.inc:7
 msgid "Please provide your current password"
-msgstr ""
+msgstr "Lütfen þu anda geçerli olan þifreyi giriniz"
 
 #: templates/main/main.inc:15
 msgid "Please verify your new password"
-msgstr ""
+msgstr "Lütfen yeni þifrenizi doðrulayýnýz"
 
 #: lib/Driver/composite.php:41
 msgid "Required 'drivers' is misconfigured in Composite configuration."
-msgstr ""
+msgstr "Gerekli 'sürücü', bileþik yapýlandýrmada hatalý ayarlanmýþ."
 
 #: lib/Driver/sql.php:46
 msgid "Required 'phptype' not specified in Passwd SQL configuration."
-msgstr ""
+msgstr "Þifre SQL yapýlandýrmasýnda gerekli olan 'phptype' belirtilmedi."
 
 #: lib/Driver/vpopmail.php:49
 msgid "Required 'phptype' not specified in SQL configuration."
-msgstr ""
+msgstr "SQL yapýlandýrmasýnda gerekli olan 'phptype' belirtilmedi."
 
 #: templates/main/main.inc:143
 msgid "Reset"
-msgstr ""
+msgstr "Sýfýrla"
 
 #: lib/Driver/sql.php:75 lib/Driver/vpopmail.php:83
 msgid "Unable to connect to SQL server."
-msgstr ""
+msgstr "SQL sunucuya baðlantý kurulamadý."
 
-#: lib/Driver/sql.php:125 lib/Driver/poppassd.php:108
-#: lib/Driver/vpopmail.php:143
+#: lib/Driver/sql.php:135 lib/Driver/poppassd.php:114
+#: lib/Driver/vpopmail.php:150
 msgid "User not found"
-msgstr ""
+msgstr "Kullanýcý bulunamadý"
 
-#: lib/Driver/ldap.php:131 lib/Driver/kolab.php:70 lib/Driver/pine.php:231
+#: lib/Driver/kolab.php:76 lib/Driver/pine.php:231 lib/Driver/ldap.php:131
 msgid "User not found."
-msgstr ""
+msgstr "Kullanýcý bulunamadý."
 
 #: templates/main/main.inc:77
 msgid "Username:"
-msgstr ""
+msgstr "Kullanýcý Adý:"
 
 #: main.php:47
 #, php-format
 msgid "You can't change password for user %s"
-msgstr ""
+msgstr "%s kullanýcýsý için þifre deðiþtiremezsiniz"
 
 #: main.php:55
 msgid "You must give your current password"
-msgstr ""
+msgstr "Þu anda geçerli olan þifrenizi girmelisiniz"
 
 #: main.php:64
 msgid "You must give your new password"
-msgstr ""
+msgstr "Yeni þifrenizi girmelisiniz"
 
 #: main.php:68
 msgid "You must verify your new password"
-msgstr ""
+msgstr "Yeni þifrenizi doðrulamalýsýnýz"
 
 #: main.php:88
 #, php-format
 msgid ""
 "Your new password is too long; passwords may not be more than %d characters "
 "long!"
-msgstr ""
+msgstr "Yeni þifreniz çok uzun. Þifre %d karakterden daha uzun olamaz!"
 
 #: main.php:167
 msgid "Your new password is too simple to guess!  Not changed!"
-msgstr ""
+msgstr "Yeni þifrenizi tahmin etmek çok kolay! Deðiþtirilmedi!"
 
 #: main.php:158
 msgid "Your new password is too simple to guess. Not changed!"
-msgstr ""
+msgstr "Yeni þifrenizi tahmin etmek çok kolay. Deðiþtirilmedi!"
 
 #: main.php:83
 #, php-format
 msgid "Your new password must be at least %d characters long!"
-msgstr ""
+msgstr "Yeni þifreniz en az %d karakter uzunluðunda olmalýdýr!"
 
 #: main.php:76
 msgid "Your new password must be different from your current password"
-msgstr ""
+msgstr "Yeni þifreniz, þu anda geçerli olandan farklý olmalýdýr"
 
 #: main.php:128
 #, php-format
 msgid "Your new password must contain at least %d alphabetic characters."
-msgstr ""
+msgstr "Yeni þifreniz en az %d harf içermelidir."
 
 #: main.php:133
 #, php-format
 msgid "Your new password must contain at least %d alphanumeric characters."
-msgstr ""
+msgstr "Yeni þifreniz en az %d alfasayýsal karakter içermelidir."
 
 #: main.php:138
 #, php-format
@@ -238,39 +256,37 @@ msgid ""
 "Your new password must contain at least %d different types of characters. "
 "The types are: lower, upper, numeric, and symbols."
 msgstr ""
+"Yeni þifreniz en az %d deðiþik çeþit karakter içermelidir. Çeþitler: küçük "
+"harf, büyük harf, sayý ve simge."
 
 #: main.php:118
 #, php-format
 msgid "Your new password must contain at least %d lowercase characters."
-msgstr ""
+msgstr "Yeni þifreniz en az %d küçük harf içermelidir."
 
 #: main.php:123
 #, php-format
 msgid "Your new password must contain at least %d numeric characters."
-msgstr ""
+msgstr "Yeni þifreniz en az %d sayý içermelidir ."
 
 #: main.php:113
 #, php-format
 msgid "Your new password must contain at least %d uppercase characters."
-msgstr ""
+msgstr "Yeni þifreniz en az %d büyük harf içermelidir."
 
 #: main.php:144
 #, php-format
 msgid "Your new password must contain less than %d whitespace characters."
-msgstr ""
+msgstr "Yeni þifreniz, %d adetden daha az boþluk içermelidir."
 
 #: main.php:146
 msgid "Your new password must not contain whitespace characters."
-msgstr ""
+msgstr "Yeni þifreniz boþluk içermemelidir."
 
 #: main.php:72
 msgid "Your new passwords didn't match"
-msgstr ""
+msgstr "Yeni þifreniz uymadý"
 
 #: templates/main/main.inc:19
 msgid "Your passwords do not match"
-msgstr ""
-
-#: lib/Driver/ldap.php:76
-msgid "ldap_start_tls failed"
-msgstr ""
+msgstr "Þifreleriniz uymuyor"
diff --git a/po/zh_CN.po b/po/zh_CN.po
index 89c465c..dafa893 100644
--- a/po/zh_CN.po
+++ b/po/zh_CN.po
@@ -1,5 +1,5 @@
 # Passwd module translations
-# Copyright (C) 2002 Free Software Foundation, Inc.
+# Copyright 2002 Free Software Foundation, Inc.
 # Wenzhuo Zhang <wenzhuo at zhmail.com>, 2002.
 #
 msgid ""
diff --git a/po/zh_TW.po b/po/zh_TW.po
index 5fa7caa..6a6f64e 100644
--- a/po/zh_TW.po
+++ b/po/zh_TW.po
@@ -1,12 +1,12 @@
 # Passwd module translations
-# Copyright (C) 2002 David Chang. ±i¨}¤å,¥xÆW
+# Copyright 2002 David Chang. ±i¨}¤å,¥xÆW
 # David Chang <david at tmv.gov.tw>, 2002.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: passwd 2.2-cvs\n"
+"Project-Id-Version: passwd H3 (3.1-cvs)\n"
 "Report-Msgid-Bugs-To: dev at lists.horde.org\n"
-"POT-Creation-Date: 2005-08-21 13:16+0800\n"
+"POT-Creation-Date: 2007-01-25 15:10+0800\n"
 "PO-Revision-Date: 2002-02-19 10:23-0600\n"
 "Last-Translator: David Chang <david at tmv.gov.tw>\n"
 "Language-Team: Traditional Chinese <i18n at lists.horde.org>\n"
@@ -19,209 +19,288 @@ msgstr ""
 msgid "%s does not exist or is not executable."
 msgstr "%s ¤£¦s¦b©ÎµLªk°õ¦æ."
 
-#: lib/Driver/composite.php:59
+#: lib/Driver/expectpecl.php:73
+#, php-format
+msgid "%s extension cannot be loaded!"
+msgstr "%s ©µ¦ùµLªk³Q¸ü¤J!"
+
+#: lib/Driver/composite.php:63
 #, php-format
 msgid "%s: unable to load driver: %s"
 msgstr "%s: µLªk¸ü¤JÅX°Êµ{¦¡: %s"
 
-#: lib/Driver/adsi.php:54
+#: lib/Driver/adsi.php:61
 #, php-format
 msgid "ADSI error %s."
 msgstr "ADSI ¿ù»~ %s."
 
-#: lib/Driver/adsi.php:57 lib/Driver/pspasswd.php:97
+#: lib/Driver/adsi.php:64 lib/Driver/pspasswd.php:105
 msgid "Access Denied."
 msgstr "¦s¨ú¾D©Ú."
 
-#: lib/Driver.php:80
+#: lib/Driver.php:89
 msgid "Backend not correctly implemented."
 msgstr "«áºÝ¦øªA¾¹©|¥¼¥¿½T§¹¦¨."
 
-#: main.php:246 templates/main/main.inc:142
+#: lib/Driver/poppassd.php:90
+msgid "Cannot send command to server."
+msgstr "µLªk¶Ç°e©R¥O¨ì¦øªA¾¹."
+
+#: main.php:255 templates/main/main.inc:141
 msgid "Change Password"
 msgstr "§ó§ï±K½X"
 
-#: templates/main/main.inc:127
+#: templates/main/main.inc:126
 msgid "Change password on:"
 msgstr "§ó§ï±K½X©ó:"
 
-#: templates/main/main.inc:62
+#: templates/main/main.inc:67
 msgid "Change your password"
 msgstr "§ó§ï±K½X"
 
-#: templates/main/main.inc:69
+#: templates/main/main.inc:65
 #, php-format
 msgid "Changing password on %s"
 msgstr "Åܧó¦b %s ªº±K½X¤¤"
 
-#: templates/main/main.inc:114
+#: templates/main/main.inc:113
 msgid "Confirm new password:"
 msgstr "½T»{·s±K½X:"
 
-#: lib/Driver/kolab.php:48 lib/Driver/ldap.php:93 lib/Driver/ldap.php:240
-#: lib/Driver/smbldap.php:90 lib/Driver/smbldap.php:171
-msgid "Could not bind to ldap server"
-msgstr "µLªkôµ² ldap ¦øªA¾¹"
+#: lib/Driver/kolab.php:60 lib/Driver/ldap.php:99 lib/Driver/ldap.php:189
+msgid "Could not bind to LDAP server"
+msgstr "µLªkôµ² LDAP ¦øªA¾¹"
+
+#: lib/Driver/expectpecl.php:118
+msgid "Could not change password (bad old password?)"
+msgstr "µLªkÅܧó±K½X (±K½X¿ù»~?)"
 
-#: lib/Driver/kolab.php:40 lib/Driver/ldap.php:64 lib/Driver/smbldap.php:67
-msgid "Could not connect to ldap server"
-msgstr "µLªk³sµ² ldap ¦øªA¾¹"
+#: lib/Driver/expectpecl.php:138
+msgid "Could not change password."
+msgstr "µLªkÅܧó±K½X."
 
-#: lib/Driver/smbpasswd.php:53
+#: lib/Driver/kolab.php:46 lib/Driver/ldap.php:74
+msgid "Could not connect to LDAP server"
+msgstr "µLªk³sµ² LDAP ¦øªA¾¹"
+
+#: lib/Driver/expectpecl.php:98
+msgid "Could not login to system (no password prompt)"
+msgstr "µLªkµn¤J¨ì¨t²Î (¨S¦³±K½X´£¥Ü)"
+
+#: lib/Driver/smbpasswd.php:57
 msgid "Could not open pipe to smbpasswd."
 msgstr "µLªk¶}±Ò¨ì smbpasswd ªººÞ½u."
 
-#: lib/Driver/smbpasswd.php:75
+#: lib/Driver/ldap.php:80
+msgid "Could not start TLS connection to LDAP server"
+msgstr "µLªk±Ò°Ê TLS ³sµ² LDAP ¦øªA¾¹"
+
+#: lib/Driver/expectpecl.php:108
+msgid "Could not start passwd program (no old password prompt)"
+msgstr "µLªk±Ò°Ê passwd µ{¦¡ (¨S¦³Â±K½X´£¥Ü)"
+
+#: lib/Driver/expectpecl.php:44
+msgid "End of file."
+msgstr "ÀÉ®×µ²§ô."
+
+#: lib/Driver/smbpasswd.php:79
 msgid "Error sending data to smbpasswd."
 msgstr "¶Ç°e¸ê®Æ¨ì smbpasswd ®Éµo¥Í¿ù»~."
 
-#: lib/Driver/pspasswd.php:85
+#: lib/Driver/pspasswd.php:93
 msgid "Failed to verify old password."
 msgstr "±K½X½T»{¥¢±Ñ."
 
-#: main.php:203 lib/Driver/composite.php:93
+#: main.php:211 lib/Driver/composite.php:102
 #, php-format
 msgid "Failure in changing password on %s: %s"
 msgstr "Åܧó %s ±K½X¥¢±Ñ: %s"
 
-#: lib/Driver.php:51 lib/Driver/kolab.php:72 lib/Driver/ldap.php:241
-#: lib/Driver/poppassd.php:109 lib/Driver/smbldap.php:172
-#: lib/Driver/vmailmgr.php:35
+#: lib/Driver/expectpecl.php:50
+msgid "Full buffer."
+msgstr "½w½Ä°Ïº¡¸ü(Full buffer)."
+
+#: lib/Driver.php:60 lib/Driver/kolab.php:84 lib/Driver/ldap.php:190
+#: lib/Driver/poppassd.php:120 lib/Driver/vmailmgr.php:42
 msgid "Incorrect Password"
 msgstr "¤£¥¿½Tªº±K½X"
 
-#: lib/Driver/ldap.php:223
+#: lib/Driver/ldap.php:166
 msgid "Minimum password age has not yet expired"
 msgstr "±K½X¥¼¹F¤@©w¨Ï¥Î®É¶¡"
 
-#: templates/main/main.inc:102
+#: lib/Driver/expectpecl.php:128
+msgid "New password not valid (too short, bad password, too similar, ...)"
+msgstr "µL®Äªº·s±K½X (¤Óµu, ¤Ó¬Û¦ü, ¤Ó²³æ, ...)"
+
+#: templates/main/main.inc:101
 msgid "New password:"
 msgstr "·s±K½X:"
 
-#: lib/Driver.php:107
-#, php-format
-msgid "No such backend '%s' found."
-msgstr "§ä¤£¨ì¦¹¦øªAºÝºÝ '%s'."
+#: lib/Driver/poppassd.php:67
+msgid "No prompt returned from server."
+msgstr "¦øªA¾¹¨S¦³¶Ç¦^´£¥Ü."
+
+#: lib/Driver.php:116
+msgid "No such backend \"%s\" found."
+msgstr "§ä¤£¨ì¦øªAºÝ \"%s\"."
 
-#: templates/main/main.inc:90
+#: lib/Driver/http.php:72
+msgid "Old password is incorrect."
+msgstr "±K½X¤£¥¿½T."
+
+#: templates/main/main.inc:89
 msgid "Old password:"
 msgstr "±K½X:"
 
-#: lib/Driver/smbpasswd.php:43
+#: lib/Driver/smbpasswd.php:47
 msgid "Passwd is not properly configured."
 msgstr "Passwd ¼Ò²Õ©|¥¼§¹¾ã³W¹º."
 
-#: main.php:195
+#: main.php:203
 #, php-format
 msgid "Password changed on %s."
 msgstr "%s ªº±K½X¤wÅܧó."
 
-#: lib/Driver/pspasswd.php:67
+#: lib/Driver/sql.php:127
+#, php-format
+msgid "Password column \"%s\" not found in password table."
+msgstr "¦b±K½Xªí®æ(password table)¤¤§ä¤£¨ì Password Äæ¦ì \"%s\""
+
+#: lib/Driver/pspasswd.php:75
 msgid "Password module can't find the supplied bin."
 msgstr "Password ¼Ò²Õ§ä¤£¨ì¤ä´©ªºµ{¦¡."
 
-#: lib/Driver/pspasswd.php:65
+#: lib/Driver/pspasswd.php:73
 msgid "Password module is missing required parameters."
 msgstr "Password ¼Ò²Õ§ä¤£¨ì¥²­nªº°Ñ¼Æ."
 
-#: lib/Driver/adsi.php:44
+#: lib/Driver/adsi.php:51
 msgid "Password module is missing target parameter."
 msgstr "Password ¼Ò²Õ§ä¤£¨ì¥Ø¼Ð°Ñ¼Æ."
 
-#: main.php:176 lib/Driver/servuftp.php:66
+#: main.php:178 lib/Driver/servuftp.php:71
 msgid "Password module is not properly configured"
 msgstr "Password ¼Ò²Õ©|¥¼§¹¾ã³W¹º"
 
-#: lib/Driver/servuftp.php:93
+#: lib/Driver/servuftp.php:98
 msgid "Password module is not properly configured."
 msgstr "Password ¼Ò²Õ©|¥¼§¹¾ã³W¹º."
 
-#: lib/Driver/composite.php:35
+#: templates/main/main.inc:11
+msgid "Please provide a new password"
+msgstr "½Ð¿é¤J¤@²Õ·s±K½X"
+
+#: templates/main/main.inc:7
+msgid "Please provide your current password"
+msgstr "½Ð¿é¤J§A¥Ø«eªº±K½X"
+
+#: templates/main/main.inc:15
+msgid "Please verify your new password"
+msgstr "½Ð½T»{§Aªº·s±K½X"
+
+#: lib/Driver/composite.php:41
 msgid "Required 'drivers' is misconfigured in Composite configuration."
 msgstr "ºî¦X³]©wÀɤ¤,§ä¤£¨ìÃö©ó 'drivers'³]©w¸ê®Æ."
 
-#: lib/Driver/sql.php:41
+#: lib/Driver/sql.php:46
 msgid "Required 'phptype' not specified in Passwd SQL configuration."
 msgstr "Passwd ªº SQL ³]©w¥²¶·«ü©w 'phptype'"
 
-#: lib/Driver/vpopmail.php:44
+#: lib/Driver/vpopmail.php:49
 msgid "Required 'phptype' not specified in SQL configuration."
 msgstr "SQL ³]©w¥²¶·«ü©w 'phptype'"
 
-#: templates/main/main.inc:143
+#: templates/main/main.inc:142
 msgid "Reset"
 msgstr "­«³]"
 
-#: lib/Driver/sql.php:70 lib/Driver/vpopmail.php:78
+#: lib/Driver/http.php:65
+msgid "The requested website for changing user passwords could not be reached."
+msgstr "µLªk³s±µ¤W,Åܧó±K½Xªººô¯¸."
+
+#: lib/Driver/http.php:74
+msgid "The username could not be found."
+msgstr "§ä¤£¨ì³o­Ó¨Ï¥ÎªÌ¦WºÙ."
+
+#: lib/Driver/expectpecl.php:47
+msgid "Time out."
+msgstr "®É¶¡¨ì."
+
+#: lib/Driver/sql.php:75 lib/Driver/vpopmail.php:83
 msgid "Unable to connect to SQL server."
 msgstr "µLªk³sµ² SQL ¦øªA¾¹."
 
-#: lib/Driver/poppassd.php:103 lib/Driver/sql.php:120
-#: lib/Driver/vpopmail.php:138
+#: lib/Driver/expectpecl.php:93
+msgid "Unable to open expect stream!"
+msgstr "µLªk¶}±Ò expect stream!"
+
+#: lib/Driver/poppassd.php:114 lib/Driver/sql.php:135
+#: lib/Driver/vpopmail.php:150
 msgid "User not found"
 msgstr "§ä¤£¨ì¨Ï¥ÎªÌ"
 
-#: lib/Driver/kolab.php:64 lib/Driver/ldap.php:130 lib/Driver/pine.php:225
-#: lib/Driver/smbldap.php:127
+#: lib/Driver/kolab.php:76 lib/Driver/ldap.php:133 lib/Driver/pine.php:231
+#: lib/Driver/smbldap.php:140
 msgid "User not found."
 msgstr "§ä¤£¨ì¨Ï¥ÎªÌ."
 
-#: templates/main/main.inc:77
+#: templates/main/main.inc:76
 msgid "Username:"
 msgstr "¨Ï¥ÎªÌ¦WºÙ:"
 
-#: main.php:45
+#: main.php:47
 #, php-format
 msgid "You can't change password for user %s"
 msgstr "§A¤£¯àÅܧó¨Ï¥ÎªÌ %s ªº±K½X"
 
-#: main.php:53
+#: main.php:55
 msgid "You must give your current password"
 msgstr "§A¥²¶·¿é¤J¥Ø«eªº±K½X"
 
-#: main.php:62
+#: main.php:64
 msgid "You must give your new password"
 msgstr "§A¥²¶·¿é¤J·s±K½X"
 
-#: main.php:66
+#: main.php:68
 msgid "You must verify your new password"
 msgstr "§A¥²¶·½T©w§Aªº·s±K½X"
 
-#: main.php:86
+#: main.php:88
 #, php-format
 msgid ""
 "Your new password is too long; passwords may not be more than %d characters "
 "long!"
 msgstr "§Aªº·s±K½X¤Óªø;³Ì¦h¤£¯à¶W¹L %d ­Ó¦r!"
 
-#: main.php:165
+#: main.php:167
 msgid "Your new password is too simple to guess!  Not changed!"
 msgstr "§Aªº·s±K½X¤Ó¹L²³æ¦³³Q²q¨ìªº¥i¯à! µLªkÅܧó!"
 
-#: main.php:156
+#: main.php:158
 msgid "Your new password is too simple to guess. Not changed!"
 msgstr "§Aªº·s±K½X¤Ó¹L²³æ¦³³Q²q¨ìªº¥i¯à! µLªkÅܧó!"
 
-#: main.php:81
+#: main.php:83
 #, php-format
 msgid "Your new password must be at least %d characters long!"
 msgstr "§Aªº·s±K½X¦Ü¤Ö­n¦³ %d ­Ó¦r!"
 
-#: main.php:74
+#: main.php:76
 msgid "Your new password must be different from your current password"
 msgstr "§Aªº·s±K½X¥²¶·»P¥Ø«eªº±K½X¦³©Ò¤£¦P"
 
-#: main.php:126
+#: main.php:128
 #, php-format
 msgid "Your new password must contain at least %d alphabetic characters."
 msgstr "§Aªº·s±K½X¦Ü¤Ö­n¥]§t %d ­Ó¥H¤Wªº­^¤å¦r."
 
-#: main.php:131
+#: main.php:133
 #, php-format
 msgid "Your new password must contain at least %d alphanumeric characters."
 msgstr "§Aªº·s±K½X¦Ü¤Ö­n¥]§t %d ­Ó¥H¤Wªº­^¤å¦r»P¼Æ¦r."
 
-#: main.php:136
+#: main.php:138
 #, php-format
 msgid ""
 "Your new password must contain at least %d different types of characters. "
@@ -230,34 +309,38 @@ msgstr ""
 "§Aªº·s±K½X¦Ü¤Ö­n¥]§t %d ºØ¤£¦P«¬ºAªº¤å¦r.³o¨Ç«¬ºA¥]¬A:¤p¼g­^¤å¦r,¤j¼g­^¤å¦r,"
 "¼Æ¦r¥H¤Î²Å¸¹."
 
-#: main.php:116
+#: main.php:118
 #, php-format
 msgid "Your new password must contain at least %d lowercase characters."
 msgstr "§Aªº·s±K½X¦Ü¤Ö­n¥]§t %d ­Ó¥H¤Wªº¤p¼g­^¤å¦r."
 
-#: main.php:121
+#: main.php:123
 #, php-format
 msgid "Your new password must contain at least %d numeric characters."
 msgstr "§Aªº·s±K½X¦Ü¤Ö­n¥]§t %d ­Ó¥H¤Wªº¼Æ¦r."
 
-#: main.php:111
+#: main.php:113
 #, php-format
 msgid "Your new password must contain at least %d uppercase characters."
 msgstr "§Aªº·s±K½X¦Ü¤Ö­n¥]§t %d ­Ó¥H¤Wªº¤j¼g­^¤å¦r."
 
-#: main.php:142
+#: main.php:144
 #, php-format
 msgid "Your new password must contain less than %d whitespace characters."
 msgstr "§Aªº·s±K½X¤£±o¥]§t %d ­Ó¥H¤WªºªÅ¥Õ¦r."
 
-#: main.php:144
+#: main.php:146
 msgid "Your new password must not contain whitespace characters."
 msgstr "§Aªº·s±K½X¤£±o¥]§tªÅ¥Õ¦r."
 
-#: main.php:70
+#: main.php:72
 msgid "Your new passwords didn't match"
 msgstr "§Aªº·s±K½X¤£²Å¦X"
 
-#: lib/Driver/ldap.php:70 lib/Driver/smbldap.php:73
-msgid "ldap_start_tls failed"
-msgstr "ldap_start_tls ¥¢±Ñ"
+#: lib/Driver/http.php:76
+msgid "Your password could not be changed."
+msgstr "§Aªº±K½XµLªk³QÅܧó."
+
+#: templates/main/main.inc:19
+msgid "Your passwords do not match"
+msgstr "§Aªº±K½X¤£²Å¦X"
diff --git a/scripts/kpasswd_expect b/scripts/kpasswd_expect
old mode 100644
new mode 100755
index 32d1cef..6099a04
--- a/scripts/kpasswd_expect
+++ b/scripts/kpasswd_expect
@@ -1,4 +1,4 @@
-# $Horde: passwd/scripts/kpasswd_expect,v 1.2 2005/03/01 09:32:14 jan Exp $
+# $Horde: passwd/scripts/kpasswd_expect,v 1.2.2.2 2008/10/09 17:12:24 jan Exp $
 #
 # The following expect script enables the password change over kerberos
 # kpasswd.
@@ -25,7 +25,7 @@ expect {
 }
 
 expect {
-    "Enter new password: : "
+    "Enter new password: "
     {
         send $newpw\r
     }
@@ -37,7 +37,7 @@ expect {
 }
 expect {
     eof {exit 1}
-    "Enter it again: : "
+    "Enter it again: "
     {
         send $newpw\r
     }
@@ -45,15 +45,15 @@ expect {
 expect {
     eof {
         puts $err $expect_out(buffer)
-        close err
+        close $err
         exit 1
     }
     "Password changed."
     {
-        close err
+        close $err
         exit 0
     }
 }
 
-close err
+close $err
 exit 0
diff --git a/scripts/passwd_expect b/scripts/passwd_expect
index e00536e..e9d5a18 100755
--- a/scripts/passwd_expect
+++ b/scripts/passwd_expect
@@ -1,17 +1,23 @@
-# $Horde: passwd/scripts/passwd_expect,v 1.7 2005/09/13 22:17:43 jan Exp $
+# $Horde: passwd/scripts/passwd_expect,v 1.7.2.3 2008/10/09 17:12:24 jan Exp $
 #
-# This scripts changes a password on a remote host.
-# Connections to the remote (this can also be localhost)
-# are made by ssh, rsh, telnet or rlogin.
+# This scripts changes a password on the local system or a remote host.
+# Connections to the remote (this can also be localhost) are made by ssh, rsh,
+# telnet or rlogin.
 
-# @author  Gaudenz Steinlin <gaudenz.steinlin at id.unibe.ch>
+# @author  Gaudenz Steinlin <gaudenz at soziologie.ch>
 # @since   Passwd 2.2
 
-# Modified by Lionel Elie Mamane <lionel at mamane.lu> to manage case where
-# passwd is the login shell.
+# For sudo support alter sudoers (using visudo) so that it contains the
+# following information (replace 'apache' if your webserver runs under another
+# user):
+# -----
+# # Needed for Horde's passwd module
+# Runas_Alias     REGULARUSERS = ALL, !root
+# apache ALL=(REGULARUSERS) NOPASSWD:/usr/bin/passwd
+# -----
 
-# @stdin         The username, oldpassword, newpassword (in this order)
-#                will be taken from stdin
+# @stdin              The username, oldpassword, newpassword (in this order)
+#                     will be taken from stdin
 # @param -prompt      regexp for the shell prompt
 # @param -password    regexp password prompt
 # @param -oldpassword regexp for the old password
@@ -27,39 +33,40 @@
 # @param -ssh         use ssh (default)
 # @param -rlogin      use rlogin
 # @param -slogin      use slogin
+# @param -sudo        use sudo
 # @param -program     command for changing passwords
 #
 # @return             0 on success, 1 on failure
 #
 
 
-# defaults
-set host "localhost"
-set login "ssh"
-set program "passwd"
-set prompt_string "(%|\\\$|>)"
+# default values
+set host               "localhost"
+set login              "ssh"
+set program            "passwd"
+set prompt_string      "(%|\\\$|>)"
 set fingerprint_string "The authenticity of host.* can't be established.*\nRSA key fingerprint is.*\nAre you sure you want to continue connecting.*"
-set password_string "(P|p)assword.*"
+set password_string    "(P|p)assword.*"
 set oldpassword_string "((O|o)ld|login|\\\(current\\\) UNIX) (P|p)assword.*"
 set newpassword_string "(N|n)ew.* (P|p)assword.*"
-#set badpassword_string "(passwd|BAD PASSWORD).*^"
-set badpassword_string "(passwd|Bad:).*\r"
-set verify_string "((R|r)e-*enter.*(P|p)assword|Retype new( UNIX)? password|(V|v)erification|(V|v)erify|(A|a)gain).*"
-set success_string "((P|p)assword.* changed|successfully)"
-set login_string "(((L|l)ogin|(U|u)sername).*)"
-set timeout 20
-set log "/tmp/passwd.out"
-set output false
-set output_file "/tmp/passwd.log"
+set badoldpassword_string "(Authentication token manipulation error).*"
+set badpassword_string "((passwd|BAD PASSWORD).*|(passwd|Bad:).*\r)"
+set verify_string      "((R|r)e-*enter.*(P|p)assword|Retype new( UNIX)? password|(V|v)erification|(V|v)erify|(A|a)gain).*"
+set success_string     "((P|p)assword.* changed|successfully)"
+set login_string       "(((L|l)ogin|(U|u)sername).*)"
+set timeout            20
+set log                "/tmp/passwd.out"
+set output             false
+set output_file        "/tmp/passwd.log"
 
 # read input from stdin
+fconfigure stdin -blocking 1
 
 gets stdin user
 gets stdin password(old)
 gets stdin password(new)
 
-
-# read input from command line
+# alternative: read input from command line
 #if {$argc < 3} {
 #    send_user "Too few arguments: Usage $argv0 username oldpass newpass"
 #    exit 1
@@ -68,7 +75,7 @@ gets stdin password(new)
 #set password(old) [lindex $argv 1]
 #set password(new) [lindex $argv 2]
 
-#no output to the user
+# no output to the user
 log_user 0
 
 # read in other options
@@ -125,12 +132,18 @@ for {set i 0} {$i<$argc} {incr i} {
     } "-ssh" {
         set login "ssh"
         continue
+    } "-ssh-exec" {
+        set login "ssh-exec"
+        continue
     } "-rlogin" {
         set login "rlogin"
         continue
     } "-slogin" {
         set login "slogin"
         continue
+    } "-sudo" {
+        set login "sudo"
+        continue
     } "-program" {
         incr i
         set program [lindex $argv $i]
@@ -152,6 +165,10 @@ if {[string match $login "rlogin"]} {
    set pid [spawn slogin $host -l $user]
 } elseif {[string match $login "ssh"]} {
    set pid [spawn ssh $host -l $user]
+} elseif {[string match $login "ssh-exec"]} {
+   set pid [spawn ssh $host -l $user $program]
+} elseif {[string match $login "sudo"]} {
+   set pid [spawn sudo -u $user $program]
 } elseif {[string match $login "telnet"]} {
    set pid [spawn telnet $host]
    expect -re $login_string {
@@ -159,34 +176,38 @@ if {[string match $login "rlogin"]} {
      send "$user\r"
    }
 } else {
-   puts $err "Invalid login mode: valid modes: rlogin, slogin, ssh, telnet\n"
+   puts $err "Invalid login mode. Valid modes: rlogin, slogin, ssh, telnet, sudo\n"
    close $err
    exit 1
 }
 
-# log in
-expect {
-  -re $fingerprint_string {sleep .5
-                           send yes\r}
-  -re $password_string    {sleep .5
-                           send $password(old)\r}
-  timeout                 {puts $err "Could not login to system (no password prompt)\n"
-                           close $err
-                           exit 1}
-}
-
-# start password changing program
 set old_password_notentered true
-expect {
-  -re $prompt_string      {sleep .5
-                           send $program\r}
-  # The following is for when passwd is the login shell
-  -re $oldpassword_string {sleep .5
-                           send $password(old)\r
-                           set old_password_notentered false}
-  timeout                 {puts $err  "Could not login to system (bad old password?)\n"
-                           close $err
-                           exit 1}
+
+if {![string match $login "sudo"]} {
+  # log in
+  expect {
+    -re $fingerprint_string {sleep .5
+                             send yes\r
+                             exp_continue}
+    -re $password_string    {sleep .5
+                             send $password(old)\r}
+    timeout                 {puts $err "Could not login to system (no password prompt)\n"
+                             close $err
+                             exit 1}
+  }
+
+  # start password changing program
+  expect {
+    -re $prompt_string      {sleep .5
+                             send $program\r}
+    # The following is for when passwd is the login shell or ssh-exec is used
+    -re $oldpassword_string {sleep .5
+                             send $password(old)\r
+                             set old_password_notentered false}
+    timeout                 {puts $err  "Could not login to system (bad old password?)\n"
+                             close $err
+                             exit 1}
+  }
 }
 
 # send old password
@@ -204,6 +225,9 @@ if {$old_password_notentered} {
 expect {
   -re $newpassword_string {sleep .5
                            send $password(new)\r}
+  -re $badoldpassword_string {puts $err "Old password is incorrect\n"
+                           close $err
+                           exit 1}
   timeout                 {puts "Could not change password (bad old password?)\n"
                            close $err
                            exit 1}
diff --git a/templates/common-header.inc b/templates/common-header.inc
index 126a6a5..df4789c 100644
--- a/templates/common-header.inc
+++ b/templates/common-header.inc
@@ -6,9 +6,9 @@ if (isset($language)) {
 }
 ?>
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "DTD/xhtml1-transitional.dtd">
-<!--           Passwd: Copyright 2002-2005, The Horde Project.           -->
-<!-- Horde Project: http://horde.org/ | Passwd: http://horde.org/passwd/ -->
-<!--           Horde Licenses: http://www.horde.org/licenses/            -->
+<!-- Passwd: Copyright 2002-2009 The Horde Project.  Passwd is under a Horde license. -->
+<!--   Horde Project: http://www.horde.org/ | Passwd: http://www.horde.org/passwd/    -->
+<!--                Horde Licenses: http://www.horde.org/licenses/                    -->
 <?php echo !empty($language) ? '<html lang="' . strtr($language, '_', '-') . '">' : '<html>' ?>
 <head>
 <?php
@@ -21,10 +21,9 @@ if (!empty($refresh_time) && ($refresh_time > 0) && !empty($refresh_url)) {
 }
 
 ?>
-<title><?php echo $page_title ?></title>
+<title><?php echo htmlspecialchars($page_title) ?></title>
 <link href="<?php echo $GLOBALS['registry']->getImageDir()?>/favicon.ico" rel="SHORTCUT ICON" />
-<?php echo Horde::stylesheetLink('horde') ?>
+<?php echo Horde::stylesheetLink('passwd') ?>
 </head>
 
-<body<?php if (Util::nonInputVar('bodyClass')) echo ' class="' . $bodyClass . '"'; ?>>
-
+<body<?php if ($bc = Util::nonInputVar('bodyClass')) echo ' class="' . $bc . '"' ?><?php if ($bi = Util::nonInputVar('bodyId')) echo ' id="' . $bi . '"'; ?>>
diff --git a/templates/main/main.inc b/templates/main/main.inc
index 180a2e5..7899cd8 100644
--- a/templates/main/main.inc
+++ b/templates/main/main.inc
@@ -41,6 +41,7 @@ function setFocus()
 
 <div id="menu">
 <?php
+Horde::addScriptFile('stripe.js', 'horde', true);
 require_once 'Horde/Menu.php';
 $menu = &new Menu(HORDE_MENU_MASK_ALL & ~HORDE_MENU_MASK_PREFS);
 echo $menu->render();
@@ -59,25 +60,23 @@ $item = 1;
 <input type="hidden" name="return_to" value="<?php echo htmlspecialchars(Util::getFormData('return_to')) ?>" />
 
 <h1 class="header">
- <?php echo _("Change your password") ?>
+<?php 
+if ($conf['backend']['backend_list'] == 'hidden') {
+    printf(_("Changing password for %s"), htmlspecialchars($backends[$backend_key]['name']));
+} else {
+    echo _("Change your password");
+}
+?>
 </h1>
 
-<table cellspacing="0" width="100%">
-<?php if ($conf['backend']['backend_list'] == 'hidden'): ?>
-<tr class="control">
- <td colspan="3" class="control leftAlign">
-  <?php printf(_("Changing password on %s"), htmlspecialchars($backends[$backend_key]['name'])) ?>
- </td>
-</tr>
-<?php endif; ?>
-
+<table class="striped" style="border-collapse: collapse; width: 100%;">
 <?php if ($conf['user']['change'] === true): ?>
-<tr class="item<?php echo $item++ % 2 ?>">
+<tr>
  <td class="rightAlign">
-  <strong><?php echo _("Username:") ?></strong>
+  <strong><?php echo Horde::label('userid', _("Username:")) ?></strong>
  </td>
- <td class="leftAlign">
-  <input type="text" name="userid" value="<?php echo htmlspecialchars($userid) ?>" />
+ <td>
+  <input type="text" id="userid" name="userid" value="<?php echo htmlspecialchars($userid) ?>" />
  </td>
  <td class="rightAlign">
   <?php echo Help::link('passwd', 'passwd-username') ?>
@@ -85,36 +84,36 @@ $item = 1;
 </tr>
 <?php endif; ?>
 
-<tr class="item<?php echo $item++ % 2 ?>">
+<tr>
  <td width="15%" class="rightAlign">
-  <strong><?php echo _("Old password:") ?></strong>
+  <strong><?php echo Horde::label('oldpassword', _("Old password:")) ?></strong>
  </td>
- <td class="leftAlign">
-  <input type="password" tabindex="1" name="oldpassword" size="32" />
+ <td>
+  <input type="password" tabindex="1" id="oldpassword" name="oldpassword" size="32" />
  </td>
  <td class="rightAlign">
   <?php echo Help::link('passwd', 'passwd-old-password') ?>
  </td>
 </tr>
 
-<tr class="item<?php echo $item++ % 2 ?>">
+<tr>
  <td class="rightAlign">
-  <strong><?php echo _("New password:") ?></strong>
+  <strong><?php echo Horde::label('newpassword0', _("New password:")) ?></strong>
  </td>
- <td class="leftAlign">
-  <input type="password" tabindex="2" name="newpassword0" size="32" />
+ <td>
+  <input type="password" tabindex="2" id="newpassword0" name="newpassword0" size="32" />
  </td>
  <td class="rightAlign">
   <?php echo Help::link('passwd', 'passwd-new-password') ?>
  </td>
 </tr>
 
-<tr class="item<?php echo $item++ % 2 ?>">
+<tr>
  <td class="rightAlign">
-  <strong><?php echo _("Confirm new password:") ?></strong>
+  <strong><?php echo Horde::label('newpassword1', _("Confirm new password:")) ?></strong>
  </td>
- <td class="leftAlign">
-  <input type="password" tabindex="3" name="newpassword1" size="32" />
+ <td>
+  <input type="password" tabindex="3" id="newpassword1" name="newpassword1" size="32" />
  </td>
  <td class="rightAlign">
   <?php echo Help::link('passwd', 'passwd-confirm-password') ?>
@@ -122,12 +121,12 @@ $item = 1;
 </tr>
 
 <?php if ($conf['backend']['backend_list'] == 'shown'): ?>
-<tr class="item<?php echo $item++ % 2 ?>">
+<tr>
  <td class="rightAlign">
-  <strong><?php echo _("Change password on:") ?></strong>
+  <strong><?php echo Horde::label('backend', _("Change password for:")) ?></strong>
  </td>
- <td class="leftAlign" style="direction: ltr">
-  <select name="backend" tabindex="4">
+ <td style="direction: ltr">
+  <select id="backend" name="backend" tabindex="4">
    <?php echo $backends_list ?>
   </select>
  </td>
@@ -138,7 +137,7 @@ $item = 1;
 <?php endif; ?>
 
 <tr class="control">
- <td colspan="3" class="control leftAlign">
+ <td colspan="3" class="control">
   <input class="button" type="submit" name="submit" value="<?php echo _("Change Password") ?>" onclick="return submit_form();" />
   <input class="button" type="reset" name="reset" value="<?php echo _("Reset") ?>" />
  </td>
diff --git a/test.php b/test.php
index 7d3bcb5..c5f8f93 100644
--- a/test.php
+++ b/test.php
@@ -1,31 +1,33 @@
 <?php
 /**
- * $Horde: passwd/test.php,v 1.2 2005/08/16 17:39:26 jan Exp $
+ * $Horde: passwd/test.php,v 1.2.2.6 2009/01/06 15:25:15 jan Exp $
  *
- * Copyright 2005 Charles J. Hagenbuch <chuck at horde.org>
+ * Copyright 2005-2009 The Horde Project (http://www.horde.org/)
  *
- * See the enclosed file LICENSE for license information (ASL). If you
- * did not receive this file, see http://www.horde.org/asl.php.
+ * See the enclosed file COPYING for license information (GPL). If you
+ * did not receive this file, see http://www.horde.org/gpl.php.
+ *
+ * @author Chuck Hagenbuch <chuck at horde.org>
  */
 
 /* Include Horde's core.php file. */
 include_once '../lib/core.php';
 
-/* We should have loaded the String class, from the Horde_Util package, in
- * core.php. If String:: isn't defined, then we're not finding some critical
- * libraries. */
+/* We should have loaded the String class, from the Horde_Util
+ * package, in core.php. If String:: isn't defined, then we're not
+ * finding some critical libraries. */
 if (!class_exists('String')) {
-    echo '<br /><span style="color: red; font-size: 18px; font-weight: bold;">The Horde_Util package was not found. If PHP\'s error_reporting setting is high enough, there should be error messages printed above that may help you in debugging the problem. If you are simply missing these files, then you need to get the <a href="http://cvs.horde.org/cvs.php/framework">framework</a> module from <a href="http://horde.org/source/">Horde CVS</a>, and install the packages in it with the install-packages.php script.</span>';
+    echo '<br /><h2 style="color:red">The Horde_Util package was not found. If PHP\'s error_reporting setting is high enough and display_errors is on, there should be error messages printed above that may help you in debugging the problem. If you are simply missing these files, then you need to get the <a href="http://cvs.horde.org/cvs.php/framework">framework</a> module from <a href="http://www.horde.org/source/">Horde CVS</a>, and install the packages in it with the install-packages.php script.</h2>';
     exit;
 }
 
 /* Initialize the Horde_Test:: class. */
-if (!(@is_readable('../lib/Test.php'))) {
+if (!is_readable('../lib/Test.php')) {
     echo 'ERROR: You must install Horde before running this script.';
     exit;
 }
 require_once '../lib/Test.php';
-$horde_test = &new Horde_Test;
+$horde_test = new Horde_Test;
 
 /* Accounts definitions. */
 $module = 'Passwd';
@@ -37,6 +39,7 @@ require TEST_TEMPLATES . 'version.inc';
 
 /* PHP module capabilities. */
 $module_list = array(
+    'ctype' => 'Ctype Support',
     'mcrypt' => array(
         'descrip' => 'mcrypt',
         'error' => 'If you will be using the smbldap driver for password changes, PHP must have mcrypt support. Compile PHP <code>--with-mcrypt</code> before continuing.'
@@ -44,7 +47,7 @@ $module_list = array(
     'mhash' => array(
         'descrip' => 'mhash',
         'error' => 'If you will be using the smbldap driver for password changes, PHP must have mhash support. Compile PHP <code>--with-mhash</code> before continuing.'
-    )
+    ),
 );
 
 
@@ -53,6 +56,10 @@ $pear_list = array(
     'Crypt_CHAP' => array(
         'path' => 'Crypt/CHAP.php',
         'error' => 'If you will be using the smbldap driver for password changes, then you must install the PEAR Crypt_CHAP module.'
+    ),
+    'HTTP_Request' => array(
+        'path' => 'HTTP/Request.php',
+        'error' => 'If you will be using the http driver for password changes, then you must install the PEAR HTTP_Request module.'
     )
 );
 
diff --git a/themes/graphics/passwd.png b/themes/graphics/passwd.png
index f2e383c..e79c2a5 100644
Binary files a/themes/graphics/passwd.png and b/themes/graphics/passwd.png differ
diff --git a/themes/screen.css b/themes/screen.css
new file mode 100644
index 0000000..e69de29
diff --git a/themes/silver/graphics/favicon.ico b/themes/silver/graphics/favicon.ico
new file mode 100644
index 0000000..8b6ae2e
Binary files /dev/null and b/themes/silver/graphics/favicon.ico differ
diff --git a/themes/silver/graphics/passwd.png b/themes/silver/graphics/passwd.png
new file mode 100644
index 0000000..2ebc4f6
Binary files /dev/null and b/themes/silver/graphics/passwd.png differ
diff --git a/themes/silver/themed_graphics b/themes/silver/themed_graphics
new file mode 100644
index 0000000..e69de29

-- 
Debian Horde Packages repository: sork-passwd-h3 package



More information about the pkg-horde-hackers mailing list