alecpl
2009-10-02 1bf9a86a8e080991b8c15d0fb360c06a6321c72d
- Password: cPanel driver added


3 files modified
1 files added
153 ■■■■■ changed files
CHANGELOG 1 ●●●● patch | view | raw | blame | history
plugins/password/README 8 ●●●●● patch | view | raw | blame | history
plugins/password/config.inc.php.dist 23 ●●●●● patch | view | raw | blame | history
plugins/password/drivers/cpanel.php 121 ●●●●● patch | view | raw | blame | history
CHANGELOG
@@ -1,6 +1,7 @@
CHANGELOG RoundCube Webmail
===========================
- Password: added cPanel driver
- Fix return to first page from e-mail screen (#1486105)
- Fix handling HTML comments in HTML messages (#1486189)
- Fix folder/messagelist controls alignment - icons used (#1486072)
plugins/password/README
@@ -31,6 +31,7 @@
 2.3.    Poppassd/Courierpassd (poppassd)
 2.4.    LDAP (ldap)
 2.5.    DirectAdmin Control Panel
 2.6.   cPanel
 3.    Driver API
@@ -174,6 +175,13 @@
 for more info.
 2.6. cPanel
 -----------
 You can specify parameters for HTTP connection to cPanel's admin
 interface. See config.inc.php file for more info.
 3. Driver API
 -------------
plugins/password/config.inc.php.dist
@@ -3,7 +3,7 @@
// Password Plugin options
// -----------------------
// A driver to use for password change. Default: "sql".
// Current possibilities: 'directadmin', 'ldap', 'poppassd', 'sasl', 'sql', 'vpopmaild'
// Current possibilities: 'directadmin', 'ldap', 'poppassd', 'sasl', 'sql', 'vpopmaild', 'cpanel'
$rcmail_config['password_driver'] = 'sql';
// Determine whether current password is required to change password.
@@ -158,4 +158,25 @@
// TCP port used for vpopmaild connections
$rcmail_config['password_vpopmaild_port'] = 89;
// cPanel Driver options
// --------------------------
// The cPanel Host name
$rcmail_config['password_cpanel_host'] = 'host.domain.com';
// The cPanel admin username
$rcmail_config['password_cpanel_username'] = 'username';
// The cPanel admin password
$rcmail_config['password_cpanel_password'] = 'password';
// The cPanel port to use
$rcmail_config['password_cpanel_port'] = 2082;
// Using ssl for cPanel connections?
$rcmail_config['password_cpanel_ssl'] = true;
// The cPanel theme in use
$rcmail_config['password_cpanel_theme'] = 'x';
?>
plugins/password/drivers/cpanel.php
New file
@@ -0,0 +1,121 @@
<?php
/**
 * cPanel Password Driver
 *
 * Driver that adds functionality to change the users cPanel password.
 * The cPanel PHP API code has been taken from: http://www.phpclasses.org/browse/package/3534.html
 *
 * This driver has been tested with Hostmonster hosting and seems to work fine.
 *
 * @version 1.0
 * @author Fulvio Venturelli <fulvio@venturelli.org>
 */
class HTTP
{
    function HTTP($host, $username, $password, $port, $ssl, $theme)
    {
        $this->ssl = $ssl ? 'ssl://' : '';
        $this->username = $username;
        $this->password = $password;
        $this->theme = $theme;
        $this->auth = base64_encode($username . ':' . $password);
        $this->port = $port;
        $this->host = $host;
        $this->path = '/frontend/' . $theme . '/';
    }
    function getData($url, $data = '')
    {
        $url = $this->path . $url;
        if(is_array($data))
        {
            $url = $url . '?';
            foreach($data as $key=>$value)
            {
                $url .= urlencode($key) . '=' . urlencode($value) . '&';
            }
            $url = substr($url, 0, -1);
        }
        $response = '';
        $fp = fsockopen($this->ssl . $this->host, $this->port);
        if(!$fp)
        {
            return false;
        }
        $out = 'GET ' . $url . ' HTTP/1.0' . "\r\n";
        $out .= 'Authorization: Basic ' . $this->auth . "\r\n";
        $out .= 'Connection: Close' . "\r\n\r\n";
        fwrite($fp, $out);
        while (!feof($fp))
        {
            $response .= @fgets($fp);
        }
        fclose($fp);
        return $response;
    }
}
class emailAccount
{
    function emailAccount($host, $username, $password, $port, $ssl, $theme, $address)
    {
        $this->HTTP = new HTTP($host, $username, $password, $port, $ssl, $theme);
        if(strpos($address, '@'))
        {
            list($this->email, $this->domain) = explode('@', $address);
        }
        else
        {
            list($this->email, $this->domain) = array($address, '');
        }
    }
 /*
  * Change email account password
  *
  * Returns true on success or false on failure.
  * @param string $password email account password
  * @return bool
  */
    function setPassword($password)
    {
        $data['email'] = $this->email;
        $data['domain'] = $this->domain;
        $data['password'] = $password;
        $response = $this->HTTP->getData('mail/dopasswdpop.html', $data);
        if(strpos($response, 'success') && !strpos($response, 'failure'))
        {
            return true;
        }
        return false;
    }
}
function password_save($curpas, $newpass)
{
    $rcmail = rcmail::get_instance();
    // Create a cPanel email object
    $cPanel = new emailAccount($rcmail->config->get('password_cpanel_host'),
    $rcmail->config->get('password_cpanel_username'),
    $rcmail->config->get('password_cpanel_password'),
    $rcmail->config->get('password_cpanel_port'),
    $rcmail->config->get('password_cpanel_ssl'),
    $rcmail->config->get('password_cpanel_theme'),
    $_SESSION['username'] );
    if ($cPanel->setPassword($newpass)){
        return PASSWORD_SUCCESS;
    }
    else
    {
       return PASSWORD_ERROR;
    }
}
?>