alecpl
2009-06-20 4534ab8771aa563ba7628b78e2321a4322a13a9e
- Password plugin: added poppassd driver


8 files modified
1 files added
100 ■■■■ changed files
plugins/password/README 12 ●●●● patch | view | raw | blame | history
plugins/password/config.inc.php 13 ●●●● patch | view | raw | blame | history
plugins/password/drivers/poppassd.php 56 ●●●●● patch | view | raw | blame | history
plugins/password/localization/en_US.inc 3 ●●●● patch | view | raw | blame | history
plugins/password/localization/et_EE.inc 2 ●●● patch | view | raw | blame | history
plugins/password/localization/hu_HU.inc 2 ●●● patch | view | raw | blame | history
plugins/password/localization/nl_NL.inc 2 ●●● patch | view | raw | blame | history
plugins/password/localization/pl_PL.inc 3 ●●●● patch | view | raw | blame | history
plugins/password/password.php 7 ●●●● patch | view | raw | blame | history
plugins/password/README
@@ -28,6 +28,7 @@
 2.    Drivers
 2.1.     Database (sql)
 2.2.    Cyrus/SASL (sasl)
 2.3.    Poppassd/Courierpassd (poppassd)
 3.    Driver API
@@ -149,11 +150,18 @@
   This could save you some headaches if you are the paranoid type.
 2.3. Poppassd/Courierpassd (poppassd)
 ----------------------------
 You can specify which host to connect to via `password_pop_host` and
 what port via `password_pop_port`. See config.inc.php file for more info.
 3. Driver API
 -------------
 
 Driver file (<driver_name>.php) must define 'password_save' function with
 two arguments. First - current password, second - new password. Function
 may return PASSWORD_SUCCESS on success or PASSWORD_ERROR on any error.
 may return PASSWORD_SUCCESS on success or any of PASSWORD_CONNECT_ERROR,
 PASSWORD_CRYPT_ERROR, PASSWORD_ERROR when driver was unable to change password.
 See existing drivers in drivers/ directory for examples.
plugins/password/config.inc.php
@@ -3,11 +3,11 @@
// Password Plugin options
// -----------------------
// A driver to use for password change. Default: "sql".
$rcmail_config['password_driver'] = 'sql';
$rcmail_config['password_driver'] = 'poppassd';
// Determine whether current password is required to change password.
// Default: false.
$rcmail_config['password_confirm_current'] = false;
$rcmail_config['password_confirm_current'] = true;
// SQL Driver options
@@ -28,4 +28,13 @@
// Default: "SELECT update_passwd(%c, %u)" 
$rcmail_config['password_query'] = 'SELECT update_passwd(%c, %u)';
// Poppassd Driver options
// -----------------------
// The host which changes the password
$rcmail_config['password_pop_host'] = 'localhost';
// TCP port used for poppassd connections
$rcmail_config['password_pop_port'] = 106;
?>
plugins/password/drivers/poppassd.php
New file
@@ -0,0 +1,56 @@
<?php
/**
 * Poppassd Password Driver
 *
 * Driver to change passwords via Poppassd/Courierpassd
 *
 * @version 1.0
 * @author Philip Weir
 *
 */
function password_save($curpass, $passwd)
{
    $rcmail = rcmail::get_instance();
//    include('Net/Socket.php');
    $poppassd = new Net_Socket();
    if (PEAR::isError($poppassd->connect($rcmail->config->get('password_pop_host'), $rcmail->config->get('password_pop_port'), null))) {
        return PASSWORD_CONNECT_ERROR;
    }
    else {
        $result = $poppassd->readLine();
        if(!preg_match('/^2\d\d/', $result)) {
            $poppassd->disconnect();
            return PASSWORD_ERROR;
        }
        else {
            $poppassd->writeLine("user ". $_SESSION['username']);
            $result = $poppassd->readLine();
            if(!preg_match('/^[23]\d\d/', $result) ) {
                $poppassd->disconnect();
                return PASSWORD_CONNECT_ERROR;
            }
            else {
                $poppassd->writeLine("pass ". $curpass);
                $result = $poppassd->readLine();
                if(!preg_match('/^[23]\d\d/', $result) ) {
                    $poppassd->disconnect();
                    return PASSWORD_ERROR;
                }
                else {
                    $poppassd->writeLine("newpass ". $passwd);
                    $result = $poppassd->readLine();
                    $poppassd->disconnect();
                    if (!preg_match('/^2\d\d/', $result))
                        return PASSWORD_ERROR;
                    else
                        return PASSWORD_SUCCESS;
                }
            }
        }
    }
}
?>
plugins/password/localization/en_US.inc
@@ -11,7 +11,8 @@
$messages['nocurpassword'] = 'Please input current password.';
$messages['passwordincorrect'] = 'Current password incorrect.';
$messages['passwordinconsistency'] = 'Passwords do not match, please try again.';
$messages['nocryptfunction'] = 'The server is missing a function to encrypt your password.';
$messages['crypterror'] = 'Could not save new password. Encrypt function missing.';
$messages['connecterror'] = 'Could not save new password. Connection error.';
$messages['internalerror'] = 'Could not save new password.';
?>
plugins/password/localization/et_EE.inc
@@ -11,7 +11,7 @@
$messages['nocurpassword'] = 'Palun sisesta vana parool.';
$messages['passwordincorrect'] = 'Vana parool on vale.';
$messages['passwordinconsistency'] = 'Paroolid ei kattu, palun proovi uuesti.';
$messages['nocryptfunction'] = 'Serveris ei ole parooli krüpteerimiseks vajalikku funktsiooni.';
$messages['crypterror'] = 'Serveris ei ole parooli krüpteerimiseks vajalikku funktsiooni.';
$messages['internalerror'] = 'Uue parooli andmebaasi salvestamine nurjus.';
?>
plugins/password/localization/hu_HU.inc
@@ -11,7 +11,7 @@
$messages['nocurpassword'] = 'Kérjük adja meg a jelenlegi jelszót.';
$messages['passwordincorrect'] = 'Érvénytelen a jelenlegi jelszó.';
$messages['passwordinconsistency'] = 'A két új jelszó nem egyezik.';
$messages['nocryptfunction'] = 'Hiba történt a kérés feldolgozása során.';
$messages['crypterror'] = 'Hiba történt a kérés feldolgozása során.';
$messages['internalerror'] = 'Hiba történt a kérés feldolgozása során.';
?>
plugins/password/localization/nl_NL.inc
@@ -11,7 +11,7 @@
$messages['nocurpassword'] = 'vul het huidige wachtwoord in.';
$messages['passwordincorrect'] = 'Huidig wachtwoord is onjuist.';
$messages['passwordinconsistency'] = 'Wachtwoorden komen niet overeen, probeer het opnieuw.';
$messages['nocryptfunction'] = 'De server mist een functie om uw wachtwoord et beveiligen.';
$messages['crypterror'] = 'De server mist een functie om uw wachtwoord et beveiligen.';
$messages['internalerror'] = 'Uw wachtwoord kan niet worden opgeslagen.';
?>
plugins/password/localization/pl_PL.inc
@@ -11,7 +11,8 @@
$messages['nocurpassword'] = 'Wprowadź aktualne hasło.';
$messages['passwordincorrect'] = 'Błędne aktualne hasło, spróbuj ponownie.';
$messages['passwordinconsistency'] = 'Hasła nie pasują, spróbuj ponownie.';
$messages['nocryptfunction'] = 'Nie udało się zapisać nowego hasła. Brak funkcji kodującej.';
$messages['crypterror'] = 'Nie udało się zapisać nowego hasła. Brak funkcji kodującej.';
$messages['connecterror'] = 'Nie udało się zapisać nowego hasła. Błąd połączenia.';
$messages['internalerror'] = 'Nie udało się zapisać nowego hasła.';
?>
plugins/password/password.php
@@ -3,7 +3,7 @@
/*
 +-------------------------------------------------------------------------+
 | Password Plugin for Roundcube                                           |
 | Version 1.2                                                             |
 | Version 1.3                                                             |
 |                                                                         |
 | Copyright (C) 2009, RoundCube Dev. - Switzerland                        |
 |                                                                         |
@@ -30,6 +30,7 @@
define('PASSWORD_CRYPT_ERROR', 1);
define('PASSWORD_ERROR', 2);
define('PASSWORD_CONNECT_ERROR', 3);
define('PASSWORD_SUCCESS', 0);
class password extends rcube_plugin
@@ -192,7 +193,9 @@
      case PASSWORD_SUCCESS:
        return;
      case PASSWORD_CRYPT_ERROR;
        return $this->gettext('nocryptfunction');
        return $this->gettext('crypterror');
      case PASSWORD_CONNECT_ERROR;
        return $this->gettext('connecterror');
      case PASSWORD_ERROR:
      default:
        return $this->gettext('internalerror');