Aleksander Machniak
2014-09-08 4baf96a4ca1621a267c10c67e84e80e6bf72dbfd
Added license headers to driver files, CS fixes
22 files modified
833 ■■■■■ changed files
plugins/password/drivers/chpasswd.php 17 ●●●●● patch | view | raw | blame | history
plugins/password/drivers/cpanel.php 15 ●●●●● patch | view | raw | blame | history
plugins/password/drivers/dbmail.php 15 ●●●●● patch | view | raw | blame | history
plugins/password/drivers/directadmin.php 14 ●●●●● patch | view | raw | blame | history
plugins/password/drivers/domainfactory.php 141 ●●●● patch | view | raw | blame | history
plugins/password/drivers/expect.php 21 ●●●● patch | view | raw | blame | history
plugins/password/drivers/gearman.php 15 ●●●●● patch | view | raw | blame | history
plugins/password/drivers/hmail.php 15 ●●●●● patch | view | raw | blame | history
plugins/password/drivers/ldap.php 15 ●●●●● patch | view | raw | blame | history
plugins/password/drivers/ldap_simple.php 17 ●●●●● patch | view | raw | blame | history
plugins/password/drivers/pam.php 15 ●●●●● patch | view | raw | blame | history
plugins/password/drivers/plesk.php 359 ●●●● patch | view | raw | blame | history
plugins/password/drivers/poppassd.php 29 ●●●● patch | view | raw | blame | history
plugins/password/drivers/pw_usermod.php 15 ●●●●● patch | view | raw | blame | history
plugins/password/drivers/sasl.php 15 ●●●●● patch | view | raw | blame | history
plugins/password/drivers/smb.php 16 ●●●●● patch | view | raw | blame | history
plugins/password/drivers/sql.php 32 ●●●● patch | view | raw | blame | history
plugins/password/drivers/virtualmin.php 15 ●●●●● patch | view | raw | blame | history
plugins/password/drivers/vpopmaild.php 19 ●●●● patch | view | raw | blame | history
plugins/password/drivers/ximss.php 17 ●●●● patch | view | raw | blame | history
plugins/password/drivers/xmail.php 15 ●●●●● patch | view | raw | blame | history
program/lib/Roundcube/rcube_db.php 1 ●●●● patch | view | raw | blame | history
plugins/password/drivers/chpasswd.php
@@ -1,7 +1,7 @@
<?php
/**
 * chpasswd Driver
 * chpasswd driver
 *
 * Driver that adds functionality to change the systems user password via
 * the 'chpasswd' command.
@@ -10,6 +10,21 @@
 *
 * @version 2.0
 * @author Alex Cartwright <acartwright@mutinydesign.co.uk>
 *
 * Copyright (C) 2005-2013, The Roundcube Dev Team
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see http://www.gnu.org/licenses/.
 */
class rcube_chpasswd_password
plugins/password/drivers/cpanel.php
@@ -15,6 +15,21 @@
 *
 * @version 3.0
 * @author Christian Chech <christian@chech.fr>
 *
 * Copyright (C) 2005-2013, The Roundcube Dev Team
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see http://www.gnu.org/licenses/.
 */
class rcube_cpanel_password
plugins/password/drivers/dbmail.php
@@ -13,6 +13,21 @@
 * For installation instructions please read the README file.
 *
 * @version 1.0
 *
 * Copyright (C) 2005-2013, The Roundcube Dev Team
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see http://www.gnu.org/licenses/.
 */
class rcube_dbmail_password
plugins/password/drivers/directadmin.php
@@ -8,6 +8,20 @@
 * @version 2.1
 * @author Victor Benincasa <vbenincasa@gmail.com>
 *
 * Copyright (C) 2005-2013, The Roundcube Dev Team
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see http://www.gnu.org/licenses/.
 */
class rcube_directadmin_password
plugins/password/drivers/domainfactory.php
@@ -10,80 +10,91 @@
 * @author Till Krüss <me@tillkruess.com>
 * @link http://tillkruess.com/projects/roundcube/
 *
 * Copyright (C) 2005-2014, The Roundcube Dev Team
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see http://www.gnu.org/licenses/.
 */
class rcube_domainfactory_password
{
    function save($curpass, $passwd)
    {
        $rcmail = rcmail::get_instance();
    function save($curpass, $passwd)
    {
        $rcmail = rcmail::get_instance();
        if (is_null($curpass)) {
            $curpass = $rcmail->decrypt($_SESSION['password']);
        }
        if (is_null($curpass)) {
            $curpass = $rcmail->decrypt($_SESSION['password']);
        }
        if ($ch = curl_init()) {
        if ($ch = curl_init()) {
            // initial login
            curl_setopt_array($ch, array(
                CURLOPT_RETURNTRANSFER => true,
                CURLOPT_URL        => 'https://ssl.df.eu/chmail.php',
                CURLOPT_POST       => true,
                CURLOPT_POSTFIELDS => http_build_query(array(
                    'login'  => $rcmail->user->get_username(),
                    'pwd'    => $curpass,
                    'action' => 'change'
                ))
            ));
            // initial login
            curl_setopt_array($ch, array(
                CURLOPT_RETURNTRANSFER => true,
                CURLOPT_URL => 'https://ssl.df.eu/chmail.php',
                CURLOPT_POST => true,
                CURLOPT_POSTFIELDS => http_build_query(array(
                    'login' => $rcmail->user->get_username(),
                    'pwd' => $curpass,
                    'action' => 'change'
                ))
            ));
            if ($result = curl_exec($ch)) {
                // login successful, get token!
                $postfields = array(
                    'pwd1'           => $passwd,
                    'pwd2'           => $passwd,
                    'action[update]' => 'Speichern'
                );
            if ($result = curl_exec($ch)) {
                // login successful, get token!
                $postfields = array(
                    'pwd1' => $passwd,
                    'pwd2' => $passwd,
                    'action[update]' => 'Speichern'
                );
                preg_match_all('~<input name="(.+?)" type="hidden" value="(.+?)">~i', $result, $fields);
                foreach ($fields[1] as $field_key => $field_name) {
                    $postfields[$field_name] = $fields[2][$field_key];
                }
                preg_match_all('~<input name="(.+?)" type="hidden" value="(.+?)">~i', $result, $fields);
                foreach ($fields[1] as $field_key => $field_name) {
                    $postfields[$field_name] = $fields[2][$field_key];
                }
                // change password
                $ch = curl_copy_handle($ch);
                curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postfields));
                if ($result = curl_exec($ch)) {
                    // has the password been changed?
                    if (strpos($result, 'Einstellungen erfolgreich') !== false) {
                        return PASSWORD_SUCCESS;
                    }
                // change password
                $ch = curl_copy_handle($ch);
                curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postfields));
                if ($result = curl_exec($ch)) {
                    // show error message(s) if possible
                    if (strpos($result, '<div class="d-msg-text">') !== false) {
                        preg_match_all('#<div class="d-msg-text">(.*?)</div>#s', $result, $errors);
                        if (isset($errors[1])) {
                            $error_message = '';
                            foreach ($errors[1] as $error) {
                                $error_message .= trim(mb_convert_encoding( $error, 'UTF-8', 'ISO-8859-15' )).' ';
                            }
                            return array('code' => PASSWORD_ERROR, 'message' => $error_message);
                        }
                    }
                }
                else {
                    return PASSWORD_CONNECT_ERROR;
                }
            }
            else {
                return PASSWORD_CONNECT_ERROR;
            }
        }
        else {
            return PASSWORD_CONNECT_ERROR;
        }
                    // has the password been changed?
                    if (strpos($result, 'Einstellungen erfolgreich') !== false) {
                        return PASSWORD_SUCCESS;
                    }
                    // show error message(s) if possible
                    if (strpos($result, '<div class="d-msg-text">') !== false) {
                        preg_match_all('#<div class="d-msg-text">(.*?)</div>#s', $result, $errors);
                        if (isset($errors[1])) {
                            $error_message = '';
                            foreach ( $errors[1] as $error ) {
                                $error_message .= trim(mb_convert_encoding( $error, 'UTF-8', 'ISO-8859-15' )).' ';
                            }
                            return array('code' => PASSWORD_ERROR, 'message' => $error_message);
                        }
                    }
                } else {
                    return PASSWORD_CONNECT_ERROR;
                }
            } else {
                return PASSWORD_CONNECT_ERROR;
            }
        } else {
            return PASSWORD_CONNECT_ERROR;
        }
        return PASSWORD_ERROR;
    }
        return PASSWORD_ERROR;
    }
}
plugins/password/drivers/expect.php
@@ -1,7 +1,7 @@
<?php
/**
 * expect Driver
 * expect driver
 *
 * Driver that adds functionality to change the systems user password via
 * the 'expect' command.
@@ -10,7 +10,7 @@
 *
 * @version 2.0
 * @author Andy Theuninck <gohanman@gmail.com)
 *
 *
 * Based on chpasswd roundcubemail password driver by
 * @author Alex Cartwright <acartwright@mutinydesign.co.uk)
 * and expect horde passwd driver by
@@ -21,8 +21,23 @@
 * password_expect_script => path to "password-expect" file
 * password_expect_params => arguments for the expect script
 *   see the password-expect file for details. This is probably
 *   a good starting default:
 *   a good starting default:
 *   -telent -host localhost -output /tmp/passwd.log -log /tmp/passwd.log
 *
 * Copyright (C) 2005-2014, The Roundcube Dev Team
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see http://www.gnu.org/licenses/.
 */
class rcube_expect_password
plugins/password/drivers/gearman.php
@@ -8,6 +8,21 @@
 *
 * @version 1.0
 * @author Mohammad Anwari <mdamt@mdamt.net>
 *
 * Copyright (C) 2005-2014, The Roundcube Dev Team
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see http://www.gnu.org/licenses/.
 */
class rcube_gearman_password
plugins/password/drivers/hmail.php
@@ -5,6 +5,21 @@
 *
 * @version 2.0
 * @author Roland 'rosali' Liebl <myroundcube@mail4us.net>
 *
 * Copyright (C) 2005-2014, The Roundcube Dev Team
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see http://www.gnu.org/licenses/.
 */
class rcube_hmail_password
plugins/password/drivers/ldap.php
@@ -12,6 +12,20 @@
 * method hashPassword based on code from the phpLDAPadmin development team (http://phpldapadmin.sourceforge.net/).
 * method randomSalt based on code from the phpLDAPadmin development team (http://phpldapadmin.sourceforge.net/).
 *
 * Copyright (C) 2005-2014, The Roundcube Dev Team
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see http://www.gnu.org/licenses/.
 */
class rcube_ldap_password
@@ -301,5 +315,4 @@
        return $str;
    }
}
plugins/password/drivers/ldap_simple.php
@@ -9,6 +9,22 @@
 *
 * @version 2.0
 * @author Wout Decre <wout@canodus.be>
 * @author Aleksander Machniak <machniak@kolabsys.com>
 *
 * Copyright (C) 2005-2014, The Roundcube Dev Team
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see http://www.gnu.org/licenses/.
 */
class rcube_ldap_simple_password
@@ -219,5 +235,4 @@
            rcube::write_log('ldap', $str);
        }
    }
}
plugins/password/drivers/pam.php
@@ -5,6 +5,21 @@
 *
 * @version 2.0
 * @author Aleksander Machniak
 *
 * Copyright (C) 2005-2013, The Roundcube Dev Team
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see http://www.gnu.org/licenses/.
 */
class rcube_pam_password
plugins/password/drivers/plesk.php
@@ -1,21 +1,33 @@
<?php
/**
 * Roundcube Password Driver for Plesk-RPC.
 *
 * This driver changes a E-Mail-Password via Plesk-RPC
 * Deps: PHP-Curl, SimpleXML
 *
 * @author        Cyrill von Wattenwyl <cyrill.vonwattenwyl@adfinis-sygroup.ch>
 * @copyright     Adfinis SyGroup AG, 2014
 * @license       GNU GPL v3
 * @author     Cyrill von Wattenwyl <cyrill.vonwattenwyl@adfinis-sygroup.ch>
 * @copyright  Adfinis SyGroup AG, 2014
 *
 * Config needed:
 * $config['password_plesk_host']     = '10.0.0.5';
 * $config['password_plesk_user']     = 'admin';
 * $config['password_plesk_pass']     = 'pass';
 * $config['password_plesk_rpc_port']     = 8443;
 * $config['password_plesk_rpc_path']     = enterprise/control/agent.php;
 * $config['password_plesk_host']     = '10.0.0.5';
 * $config['password_plesk_user']     = 'admin';
 * $config['password_plesk_pass']     = 'pass';
 * $config['password_plesk_rpc_port'] = 8443;
 * $config['password_plesk_rpc_path'] = enterprise/control/agent.php;
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see http://www.gnu.org/licenses/.
 */
/**
@@ -23,45 +35,44 @@
 *
 * See {ROUNDCUBE_ROOT}/plugins/password/README for API description
 *
 * @author        Cyrill von Wattenwyl <cyrill.vonwattenwyl@adfinis-sygroup.ch>
 * @author Cyrill von Wattenwyl <cyrill.vonwattenwyl@adfinis-sygroup.ch>
 */
class rcube_plesk_password {
class rcube_plesk_password
{
    /**
     * this method is called from roundcube to change the password
     *
     * roundcube allready validated the old password so we just need to change it at this point
     *
     * @author Cyrill von Wattenwyl <cyrill.vonwattenwyl@adfinis-sygroup.ch>
     * @param string $curpass Current password
     * @param string $newpass New password
     * @returns int PASSWORD_SUCCESS|PASSWORD_ERROR
     */
    function save($currpass, $newpass)\
    {
        // get config
        $rcmail = rcmail::get_instance();
        $host   = $rcmail->config->get('password_plesk_host');
        $user   = $rcmail->config->get('password_plesk_user');
        $pass   = $rcmail->config->get('password_plesk_pass');
        $port   = $rcmail->config->get('password_plesk_rpc_port');
        $path   = $rcmail->config->get('password_plesk_rpc_path');
    /**
     * this method is called from roundcube to change the password
     *
     * roundcube allready validated the old password so we just need to change it at this point
     *
     * @author        Cyrill von Wattenwyl <cyrill.vonwattenwyl@adfinis-sygroup.ch>
     * @param         string $curpass current password
     * @param         string $newpass new password
     * @returns       PASSWORD_SUCCESS|PASSWORD_ERROR
     */
    function save($currpass, $newpass) {
        // create plesk-object
        $plesk = new plesk_rpc;
        $plesk->init($host, $port, $path, $user, $pass);
        // get config
        $rcmail    = rcmail::get_instance();
        $host    = $rcmail->config->get('password_plesk_host');
        $user    = $rcmail->config->get('password_plesk_user');
        $pass    = $rcmail->config->get('password_plesk_pass');
        $port    = $rcmail->config->get('password_plesk_rpc_port');
        $path    = $rcmail->config->get('password_plesk_rpc_path');
        // try to change password and return the status
        $result = $plesk->change_mailbox_password($_SESSION['username'], $newpass);
        //$plesk->destroy();
        // create plesk-object
        $plesk    = new plesk_rpc;
        $plesk->init($host, $port, $path, $user, $pass);
        if ($result) {
            return PASSWORD_SUCCESS;
        }
        // try to change password and return the status
        $result = $plesk->change_mailbox_password($_SESSION['username'], $newpass);
        //$plesk->destroy();
        if ($result) {
            return PASSWORD_SUCCESS;
        }
        return PASSWORD_ERROR;
    }
        return PASSWORD_ERROR;
    }
}
@@ -73,162 +84,158 @@
 *
 * Documentation of Plesk RPC-API: http://download1.parallels.com/Plesk/PP11/11.0/Doc/en-US/online/plesk-api-rpc/
 *
 * @author        Cyrill von Wattenwyl <cyrill.vonwattenwyl@adfinis-sygroup.ch>
 * @author Cyrill von Wattenwyl <cyrill.vonwattenwyl@adfinis-sygroup.ch>
 */
class plesk_rpc {
class plesk_rpc
{
    /**
     * init plesk-rpc via curl
     *
     * @param string $host plesk host
     * @param string $port plesk rpc port
     * @param string $path plesk rpc path
     * @param string $user plesk user
     * @param string $user plesk password
     * @returns void
     */
    function init($host, $port, $path, $user, $pass)
    {
        $headers = array(
            sprintf("HTTP_AUTH_LOGIN: %s", $user),
            sprintf("HTTP_AUTH_PASSWD: %s", $pass),
            "Content-Type: text/xml"
        );
    /**
     * init plesk-rpc via curl
     *
     * @author        Cyrill von Wattenwyl <cyrill.vonwattenwyl@adfinis-sygroup.ch>
     * @param         string $host plesk host
     * @param         string $port plesk rpc port
     * @param         string $path plesk rpc path
     * @param         string $user plesk user
     * @param         string $user plesk password
     * @returns       void
     */
    function init($host, $port, $path, $user, $pass) {
        $headers    = array(
            sprintf("HTTP_AUTH_LOGIN: %s", $user),
            sprintf("HTTP_AUTH_PASSWD: %s", $pass),
            "Content-Type: text/xml"
        );
        $url        = sprintf("https://%s:%s/%s", $host, $port, $path);
        $this->curl = curl_init();
        curl_setopt($this->curl, CURLOPT_CONNECTTIMEOUT , 5);
        curl_setopt($this->curl, CURLOPT_SSL_VERIFYHOST , 0);
        curl_setopt($this->curl, CURLOPT_SSL_VERIFYPEER , false);
        curl_setopt($this->curl, CURLOPT_HTTPHEADER     , $headers);
        curl_setopt($this->curl, CURLOPT_URL            , $url);
    }
        $url        = sprintf("https://%s:%s/%s", $host, $port, $path);
        $this->curl = curl_init();
        curl_setopt($this->curl, CURLOPT_CONNECTTIMEOUT , 5);
        curl_setopt($this->curl, CURLOPT_SSL_VERIFYHOST , 0);
        curl_setopt($this->curl, CURLOPT_SSL_VERIFYPEER , false);
        curl_setopt($this->curl, CURLOPT_HTTPHEADER     , $headers);
        curl_setopt($this->curl, CURLOPT_URL            , $url);
    }
    /**
     * send a request to the plesk
     *
     * @author        Cyrill von Wattenwyl <cyrill.vonwattenwyl@adfinis-sygroup.ch>
     * @param         string $packet XML-Packet to send to Plesk
     * @returns       bool request was successfull or not
     */
    function send_request($packet) {
        curl_setopt($this->curl, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($this->curl, CURLOPT_POSTFIELDS, $packet);
        $retval = curl_exec($this->curl);
    /**
     * send a request to the plesk
     *
     * @param string $packet XML-Packet to send to Plesk
     * @returns bool request was successfull or not
     */
    function send_request($packet)
    {
        curl_setopt($this->curl, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($this->curl, CURLOPT_POSTFIELDS, $packet);
        $retval = curl_exec($this->curl);
        return $retval;
    }
        return $retval;
    }
    /**
     * close curl
     */
    function destroy(){
        curl_close($this->curl);
    }
    /**
     * close curl
     *
     * @author        Cyrill von Wattenwyl <cyrill.vonwattenwyl@adfinis-sygroup.ch>
     * @returns       void
     */
    function destroy(){
        curl_close($this->curl);
    }
    /**
     * Creates an Initial SimpleXML-Object for Plesk-RPC
     *
     * @returns object SimpleXML object
     */
    function get_request_obj()
    {
        $request = new SimpleXMLElement("<packet></packet>");
        $request->addAttribute("version", "1.6.3.0");
        return $request;
    }
    /**
     * Creates an Initial SimpleXML-Object for Plesk-RPC
     *
     * @author        Cyrill von Wattenwyl <cyrill.vonwattenwyl@adfinis-sygroup.ch>
     * @returns       object SimpleXML object
     */
    function get_request_obj(){
        $request = new SimpleXMLElement("<packet></packet>");
        $request->addAttribute("version", "1.6.3.0");
    /**
     * Get all hosting-informations of a domain
     *
     * @param string $domain domain-name
     * @returns object SimpleXML object
     */
    function domain_info($domain)
    {
        // build xml
        $request = $this->get_request_obj();
        $site    = $request->addChild("site");
        $get     = $site->addChild("get");
        $filter  = $get->addChild("filter");
        return $request;
    }
        $filter->addChild("name", utf8_encode($domain));
        $dataset = $get->addChild("dataset");
    /**
     * Get all hosting-informations of a domain
     *
     * @author        Cyrill von Wattenwyl <cyrill.vonwattenwyl@adfinis-sygroup.ch>
     * @param         string $domain domain-name
     * @returns       object SimpleXML object
     */
    function domain_info($domain){
        // build xml
        $request = $this->get_request_obj();
        $site    = $request->addChild("site");
        $get     = $site->addChild("get");
        $filter  = $get->addChild("filter");
        $dataset->addChild("hosting");
        $packet = $request->asXML();
        $filter->addChild("name", utf8_encode($domain));
        $dataset = $get->addChild("dataset");
        // send the request
        $res = $this->send_request($packet);
        $dataset->addChild("hosting");
        $packet = $request->asXML();
        // make it to simple-xml-object
        $xml = new SimpleXMLElement($res);
        // send the request
        $res = $this->send_request($packet);
        return $xml;
    }
        // make it to simple-xml-object
        $xml = new SimpleXMLElement($res);
    /**
     * Get psa-id of a domain
     *
     * @param string $domain domain-name
     *
     * @returns bool|int false if failed and integer if successed
     */
    function get_domain_id($domain)
    {
        $xml = $this->domain_info($domain);
        $id  = intval($xml->site->get->result->id);
        $id  = (is_int($id)) ? $id : false;
        return $xml;
    }
        return $id;
    }
    /**
     * Get psa-id of a domain
     *
     * @author        Cyrill von Wattenwyl <cyrill.vonwattenwyl@adfinis-sygroup.ch>
     * @param         string $domain domain-name
     * @returns       bool|int false if failed and integer if successed
     */
    function get_domain_id($domain){
        $xml = $this->domain_info($domain);
        $id  = intval($xml->site->get->result->id);
        $id  = (is_int($id)) ? $id : false;
        return $id;
    }
    /**
     * Change Password of a mailbox
     *
     * @param string $mailbox full email-adress (user@domain.tld)
     * @param string $newpass new password of mailbox
     *
     * @returns bool
     */
    function change_mailbox_password($mailbox, $newpass)
    {
        list($user, $domain) = explode("@", $mailbox);
        $domain_id = $this->get_domain_id($domain);
        // if domain cannot be resolved to an id, do not continue
        if (!$domain_id) {
            return false;
        }
    /**
     * Change Password of a mailbox
     *
     * @author        Cyrill von Wattenwyl <cyrill.vonwattenwyl@adfinis-sygroup.ch>
     * @param         string $mailbox full email-adress (user@domain.tld)
     * @param         string $newpass new password of mailbox
     * @returns       bool
     */
    function change_mailbox_password($mailbox, $newpass){
        // build xml-packet
        $request = $this    -> get_request_obj();
        $mail    = $request -> addChild("mail");
        $update  = $mail    -> addChild("update");
        $add     = $update  -> addChild("set");
        $filter  = $add     -> addChild("filter");
        $filter->addChild("site-id", $domain_id);
        list($user, $domain) = explode("@", $mailbox);
        $domain_id = $this->get_domain_id($domain);
        $mailname = $filter->addChild("mailname");
        $mailname->addChild("name", $user);
        // if domain cannot be resolved to an id, do not continue
        if (!$domain_id) {
            return false;
        }
        $password = $mailname->addChild("password");
        $password->addChild("value", $newpass);
        $password->addChild("type", "plain");
        // build xml-packet
        $request = $this    -> get_request_obj();
        $mail    = $request -> addChild("mail");
        $update  = $mail    -> addChild("update");
        $add     = $update  -> addChild("set");
        $filter  = $add     -> addChild("filter");
        $filter->addChild("site-id", $domain_id);
        $packet = $request->asXML();
        $mailname = $filter->addChild("mailname");
        $mailname->addChild("name", $user);
        // send the request to plesk
        $res = $this->send_request($packet);
        $xml = new SimpleXMLElement($res);
        $res = strval($xml->mail->update->set->result->status);
        $password = $mailname->addChild("password");
        $password->addChild("value", $newpass);
        $password->addChild("type", "plain");
        $packet = $request->asXML();
        // send the request to plesk
        $res = $this->send_request($packet);
        $xml = new SimpleXMLElement($res);
        $res = strval($xml->mail->update->set->result->status);
        return $res == "ok";
    }
        return $res == "ok";
    }
}
plugins/password/drivers/poppassd.php
@@ -8,6 +8,20 @@
 * @version 2.0
 * @author Philip Weir
 *
 * Copyright (C) 2005-2013, The Roundcube Dev Team
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see http://www.gnu.org/licenses/.
 */
class rcube_poppassd_password
@@ -16,9 +30,9 @@
    {
        if (preg_match('/^\d\d\d\s+(\S.*)\s*$/', $line, $matches)) {
            return array('code' => $code, 'message' => $matches[1]);
        } else {
            return $code;
        }
        return $code;
    }
    function save($curpass, $passwd)
@@ -40,14 +54,14 @@
            else {
                $poppassd->writeLine("user ". $_SESSION['username']);
                $result = $poppassd->readLine();
                if(!preg_match('/^[23]\d\d/', $result) ) {
                if (!preg_match('/^[23]\d\d/', $result) ) {
                    $poppassd->disconnect();
                    return $this->format_error_result(PASSWORD_CONNECT_ERROR, $result);
                }
                else {
                    $poppassd->writeLine("pass ". $curpass);
                    $result = $poppassd->readLine();
                    if(!preg_match('/^[23]\d\d/', $result) ) {
                    if (!preg_match('/^[23]\d\d/', $result) ) {
                        $poppassd->disconnect();
                        return $this->format_error_result(PASSWORD_ERROR, $result);
                    }
@@ -55,10 +69,11 @@
                        $poppassd->writeLine("newpass ". $passwd);
                        $result = $poppassd->readLine();
                        $poppassd->disconnect();
                        if (!preg_match('/^2\d\d/', $result))
                        if (!preg_match('/^2\d\d/', $result)) {
                            return $this->format_error_result(PASSWORD_ERROR, $result);
                        else
                            return PASSWORD_SUCCESS;
                        }
                        return PASSWORD_SUCCESS;
                    }
                }
            }
plugins/password/drivers/pw_usermod.php
@@ -11,6 +11,21 @@
 * @version 2.0
 * @author Alex Cartwright <acartwright@mutinydesign.co.uk>
 * @author Adamson Huang <adomputer@gmail.com>
 *
 * Copyright (C) 2005-2013, The Roundcube Dev Team
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see http://www.gnu.org/licenses/.
 */
class rcube_pw_usermod_password
plugins/password/drivers/sasl.php
@@ -14,6 +14,21 @@
 *
 * @version 2.0
 * @author Thomas Bruederli
 *
 * Copyright (C) 2005-2013, The Roundcube Dev Team
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see http://www.gnu.org/licenses/.
 */
class rcube_sasl_password
plugins/password/drivers/smb.php
@@ -19,6 +19,21 @@
 * Configuration settings:
 * password_smb_host    => samba host (default: localhost)
 * password_smb_cmd => smbpasswd binary (default: /usr/bin/smbpasswd)
 *
 * Copyright (C) 2005-2013, The Roundcube Dev Team
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see http://www.gnu.org/licenses/.
 */
class rcube_smb_password
@@ -56,5 +71,4 @@
        return PASSWORD_ERROR;
    }
}
plugins/password/drivers/sql.php
@@ -8,6 +8,20 @@
 * @version 2.0
 * @author Aleksander 'A.L.E.C' Machniak <alec@alec.pl>
 *
 * Copyright (C) 2005-2013, The Roundcube Dev Team
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see http://www.gnu.org/licenses/.
 */
class rcube_sql_password
@@ -16,8 +30,9 @@
    {
        $rcmail = rcmail::get_instance();
        if (!($sql = $rcmail->config->get('password_query')))
        if (!($sql = $rcmail->config->get('password_query'))) {
            $sql = 'SELECT update_passwd(%c, %u)';
        }
        if ($dsn = $rcmail->config->get('password_db_dsn')) {
            // #1486067: enable new_link option
@@ -42,16 +57,14 @@
        if (strpos($sql, '%c') !== FALSE) {
            $salt = '';
            if (!($crypt_hash = $rcmail->config->get('password_crypt_hash')))
            {
            if (!($crypt_hash = $rcmail->config->get('password_crypt_hash'))) {
                if (CRYPT_MD5)
                    $crypt_hash = 'md5';
                else if (CRYPT_STD_DES)
                    $crypt_hash = 'des';
            }
            switch ($crypt_hash)
            {
            switch ($crypt_hash) {
            case 'md5':
                $len = 8;
                $salt_hashindicator = '$1$';
@@ -128,8 +141,9 @@
                return PASSWORD_ERROR;
            }
            if (!($hash_algo = strtolower($rcmail->config->get('password_hash_algorithm'))))
            if (!($hash_algo = strtolower($rcmail->config->get('password_hash_algorithm')))) {
                $hash_algo = 'sha1';
            }
            $hash_passwd = hash($hash_algo, $passwd);
            $hash_curpass = hash($hash_algo, $curpass);
@@ -185,9 +199,11 @@
        if (!$db->is_error()) {
            if (strtolower(substr(trim($sql),0,6)) == 'select') {
                if ($db->fetch_array($res))
                if ($db->fetch_array($res)) {
                    return PASSWORD_SUCCESS;
            } else {
                }
            }
            else {
                // This is the good case: 1 row updated
                if ($db->affected_rows($res) == 1)
                    return PASSWORD_SUCCESS;
plugins/password/drivers/virtualmin.php
@@ -12,6 +12,21 @@
 *
 * @version 3.0
 * @author Martijn de Munnik
 *
 * Copyright (C) 2005-2013, The Roundcube Dev Team
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see http://www.gnu.org/licenses/.
 */
class rcube_virtualmin_password
plugins/password/drivers/vpopmaild.php
@@ -8,6 +8,20 @@
 * @version 2.0
 * @author Johannes Hessellund
 *
 * Copyright (C) 2005-2013, The Roundcube Dev Team
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see http://www.gnu.org/licenses/.
 */
class rcube_vpopmaild_password
@@ -22,7 +36,7 @@
            $rcmail->config->get('password_vpopmaild_port'), null))) {
            return PASSWORD_CONNECT_ERROR;
        }
        $vpopmaild->setTimeout($rcmail->config->get('password_vpopmaild_timeout'),0);
        $result = $vpopmaild->readLine();
@@ -47,8 +61,9 @@
        $vpopmaild->writeLine("quit");
        $vpopmaild->disconnect();
        if (!preg_match('/^\+OK/', $result))
        if (!preg_match('/^\+OK/', $result)) {
            return PASSWORD_ERROR;
        }
        return PASSWORD_SUCCESS;
    }
plugins/password/drivers/ximss.php
@@ -8,12 +8,26 @@
 *   password_ximss_host - Host name of Communigate server
 *   password_ximss_port - XIMSS port on Communigate server
 *
 *
 * References:
 *   http://www.communigate.com/WebGuide/XMLAPI.html
 *
 * @version 2.0
 * @author Erik Meitner <erik wanderings.us>
 *
 * Copyright (C) 2005-2013, The Roundcube Dev Team
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see http://www.gnu.org/licenses/.
 */
class rcube_ximss_password
@@ -71,6 +85,5 @@
        } //foreach
        return PASSWORD_SUCCESS;
    }
}
plugins/password/drivers/xmail.php
@@ -15,6 +15,20 @@
 * $config['xmail_pass'] = 'YourXmailControlPass';
 * $config['xmail_port'] = 6017;
 *
 * Copyright (C) 2005-2013, The Roundcube Dev Team
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see http://www.gnu.org/licenses/.
 */
class rcube_xmail_password
@@ -103,4 +117,3 @@
        socket_close($this->socket);
    }
}
program/lib/Roundcube/rcube_db.php
@@ -68,6 +68,7 @@
            'sybase'  => 'mssql',
            'dblib'   => 'mssql',
            'mysqli'  => 'mysql',
            'oci'     => 'oracle',
        );
        $driver = isset($driver_map[$driver]) ? $driver_map[$driver] : $driver;