[horde] Account Password

Luiz Morte morte at chsti.com
Mon Dec 11 09:10:48 PST 2006

Jan Schneider escreveu:
> Zitat von Luiz Morte <morte at chsti.com>:
>> Hello,
>> I´ve seen in Horde->Options->Account Password, the user can recover the
>> password.
>> Where is the page from user to put the answer for the question?
> It's linked from the login page, if you use an authentication backend
> that supports resetting passwords.
> Jan.
Hello Jan, thanks for the answer.

I´m using with ldap, so it doesn't supports resetting passwords.

I've made a small solution for that. I hope this can help someone and if
you see a better solution, let me know.
(the solution is based in the "password packet")

In .../horde/lib/Horde/Auth/ldap.php, I created a function like this:

    function resetPassword($user_id)
        list($base) = split("horde", dirname(__FILE__));
        $base = sprintf("%s/horde/passwd", $base);

        @define('PASSWD_BASE', $base);
        require PASSWD_BASE . '/config/backends.php';

        // Get the backend details.
        $backend_key = 'ldapadmin';
        $driver = $backends[$backend_key]['driver'];
        $params = $backends[$backend_key]['params'];

        // Create a Password_Driver instance.
        require_once PASSWD_BASE . '/lib/Driver.php';
        $daemon = &Passwd_Driver::factory($driver, $params);

        if (is_a($daemon, 'PEAR_Error')) {
            $notification->push(_("Password module is not properly

        // Create DN
        list($user, $domain) = split("@", $user_id);
        $userdn = XXXXX
        $admindn = sprintf("%s", $params['admindn']);

        /* Get a new random password. */
        $new_password = Auth::genRandomPassword();
        $new_details[$params['attribute']] =

        // Connect as the user.
        $result = $this->_connect($admindn, $params['adminpw'],
        if (is_a($result, 'PEAR_Error')) {
            if ($result->getMessage() == _("Could not bind to ldap
server")) {
                return PEAR::raiseError(_("Incorrect Password"));
            return $result;

        if (!ldap_mod_replace($this->_ds, $userdn, $new_details)) {
            return PEAR::raiseError(ldap_error($this->_ds));
        return $new_password;

The function needs:
1. The "password packet" installed;
2. XXX: put your DN
3. To change , in ldap.php, the "resetpassoword to true.
    var $capabilities = array('add'           => true,
                              'update'        => true,
                              'resetpassword' => true,
                              'remove'        => true,
                              'list'          => true,
                              'transparent'   => false);

With this changes, It´s work for me.

Don´t forget to test, before put this to work :))

Luiz Morte.

More information about the horde mailing list