Mercurial > hg > rc1
comparison plugins/password/drivers/cpanel.php @ 0:1e000243b222
vanilla 1.3.3 distro, I hope
author | Charlie Root |
---|---|
date | Thu, 04 Jan 2018 15:50:29 -0500 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:1e000243b222 |
---|---|
1 <?php | |
2 | |
3 /** | |
4 * cPanel Password Driver | |
5 * | |
6 * Driver that adds functionality to change the users cPanel password. | |
7 * Originally written by Fulvio Venturelli <fulvio@venturelli.org> | |
8 * | |
9 * Completely rewritten using the cPanel API2 call Email::passwdpop | |
10 * as opposed to the original coding against the UI, which is a fragile method that | |
11 * makes the driver to always return a failure message for any language other than English | |
12 * see https://github.com/roundcube/roundcubemail/issues/3063 | |
13 * | |
14 * This driver has been tested with o2switch hosting and seems to work fine. | |
15 * | |
16 * @version 3.1 | |
17 * @author Christian Chech <christian@chech.fr> | |
18 * | |
19 * Copyright (C) 2005-2016, The Roundcube Dev Team | |
20 * | |
21 * This program is free software: you can redistribute it and/or modify | |
22 * it under the terms of the GNU General Public License as published by | |
23 * the Free Software Foundation, either version 3 of the License, or | |
24 * (at your option) any later version. | |
25 * | |
26 * This program is distributed in the hope that it will be useful, | |
27 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
28 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
29 * GNU General Public License for more details. | |
30 * | |
31 * You should have received a copy of the GNU General Public License | |
32 * along with this program. If not, see http://www.gnu.org/licenses/. | |
33 */ | |
34 | |
35 class rcube_cpanel_password | |
36 { | |
37 public function save($curpas, $newpass) | |
38 { | |
39 require_once 'xmlapi.php'; | |
40 | |
41 $rcmail = rcmail::get_instance(); | |
42 | |
43 $this->cuser = $rcmail->config->get('password_cpanel_username'); | |
44 $cpanel_host = $rcmail->config->get('password_cpanel_host'); | |
45 $cpanel_port = $rcmail->config->get('password_cpanel_port'); | |
46 $cpanel_hash = $rcmail->config->get('password_cpanel_hash'); | |
47 $cpanel_pass = $rcmail->config->get('password_cpanel_password'); | |
48 | |
49 // Setup the xmlapi connection | |
50 $this->xmlapi = new xmlapi($cpanel_host); | |
51 $this->xmlapi->set_port($cpanel_port); | |
52 | |
53 // Hash auth | |
54 if (!empty($cpanel_hash)) { | |
55 $this->xmlapi->hash_auth($this->cuser, $cpanel_hash); | |
56 } | |
57 // Pass auth | |
58 else if (!empty($cpanel_pass)) { | |
59 $this->xmlapi->password_auth($this->cuser, $cpanel_pass); | |
60 } | |
61 else { | |
62 return PASSWORD_ERROR; | |
63 } | |
64 | |
65 $this->xmlapi->set_output('json'); | |
66 $this->xmlapi->set_debug(0); | |
67 | |
68 return $this->setPassword($_SESSION['username'], $newpass); | |
69 } | |
70 | |
71 /** | |
72 * Change email account password | |
73 * | |
74 * @param string $address Email address/username | |
75 * @param string $password Email account password | |
76 * | |
77 * @return int|array Operation status | |
78 */ | |
79 function setPassword($address, $password) | |
80 { | |
81 if (strpos($address, '@')) { | |
82 list($data['email'], $data['domain']) = explode('@', $address); | |
83 } | |
84 else { | |
85 list($data['email'], $data['domain']) = array($address, ''); | |
86 } | |
87 | |
88 $data['password'] = $password; | |
89 | |
90 // Get the cPanel user | |
91 $query = $this->xmlapi->listaccts('domain', $data['domain']); | |
92 $query = json_decode($query, true); | |
93 if ( $query['status'] != 1) { | |
94 return false; | |
95 } | |
96 $cpanel_user = $query['acct'][0]['user']; | |
97 | |
98 $query = $this->xmlapi->api2_query($cpanel_user, 'Email', 'passwdpop', $data); | |
99 $query = json_decode($query, true); | |
100 $result = $query['cpanelresult']['data'][0]; | |
101 | |
102 if ($result['result'] == 1) { | |
103 return PASSWORD_SUCCESS; | |
104 } | |
105 | |
106 if ($result['reason']) { | |
107 return array( | |
108 'code' => PASSWORD_ERROR, | |
109 'message' => $result['reason'], | |
110 ); | |
111 } | |
112 | |
113 return PASSWORD_ERROR; | |
114 } | |
115 } |