diff --git a/CHANGELOG b/CHANGELOG index 941df17c6..2330a83fe 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,7 @@ CHANGELOG Roundcube Webmail =========================== +- Password/cPanel: Add support for hash authentication and reseller accounts (#5252) - Support host-specific imap_conn_options/smtp_conn_options/managesieve_conn_options (#5136) - Center and scale images in attachment preview frame (#5421) - Added max_message_size option enforced when attaching files to a composed message (#4993) diff --git a/plugins/password/drivers/cpanel.php b/plugins/password/drivers/cpanel.php index 01983b4b0..fd2827628 100644 --- a/plugins/password/drivers/cpanel.php +++ b/plugins/password/drivers/cpanel.php @@ -13,10 +13,10 @@ * * This driver has been tested with o2switch hosting and seems to work fine. * - * @version 3.0 + * @version 3.1 * @author Christian Chech * - * Copyright (C) 2005-2013, The Roundcube Dev Team + * Copyright (C) 2005-2016, 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 @@ -41,22 +41,27 @@ class rcube_cpanel_password $rcmail = rcmail::get_instance(); $this->cuser = $rcmail->config->get('password_cpanel_username'); + $cpanel_host = $rcmail->config->get('password_cpanel_host'); + $cpanel_port = $rcmail->config->get('password_cpanel_port'); + $cpanel_hash = $rcmail->config->get('password_cpanel_hash'); + $cpanel_pass = $rcmail->config->get('password_cpanel_password'); // Setup the xmlapi connection - $this->xmlapi = new xmlapi($rcmail->config->get('password_cpanel_host')); - $this->xmlapi->set_port($rcmail->config->get('password_cpanel_port')); + $this->xmlapi = new xmlapi($cpanel_host); + $this->xmlapi->set_port($cpanel_port); + // Hash auth - if (!empty($cpanel_hash = $rcmail->config->get('password_cpanel_hash'))) { - $this->xmlapi->hash_auth( $this->cuser, $cpanel_hash); + if (!empty($cpanel_hash)) { + $this->xmlapi->hash_auth($this->cuser, $cpanel_hash); } // Pass auth - else if (!empty($cpanel_password = $rcmail->config->get('password_cpanel_password'))) { - $this->xmlapi->hash_auth( $this->cuser, $cpanel_password); + else if (!empty($cpanel_pass)) { + $this->xmlapi->password_auth($this->cuser, $cpanel_pass); } else { - return false; + return PASSWORD_ERROR; } - + $this->xmlapi->set_output('json'); $this->xmlapi->set_debug(0); @@ -81,16 +86,16 @@ class rcube_cpanel_password } $data['password'] = $password; - + // Get the cPanel user - $query = $this->xmlapi->listaccts( 'domain', $data['domain'] ); - $query = json_decode( $query, true ); - if ( $query['status'] != 1 ) { + $query = $this->xmlapi->listaccts('domain', $data['domain']); + $query = json_decode($query, true); + if ( $query['status'] != 1) { return false; } $cpanel_user = $query['acct'][0]['user']; - $query = $this->xmlapi->api2_query($cpanel_user, 'Email', 'passwdpop', $data); + $query = $this->xmlapi->api2_query($cpanel_user, 'Email', 'passwdpop', $data); $query = json_decode($query, true); $result = $query['cpanelresult']['data'][0];