From a3644638aaf0418598196a870204e0b632a4c8ad Mon Sep 17 00:00:00 2001 From: Thomas Bruederli <thomas@roundcube.net> Date: Fri, 17 Apr 2015 06:28:40 -0400 Subject: [PATCH] Allow preference sections to define CSS class names --- plugins/password/drivers/directadmin.php | 115 +++++++++++++++++++++++++++++++++------------------------ 1 files changed, 67 insertions(+), 48 deletions(-) diff --git a/plugins/password/drivers/directadmin.php b/plugins/password/drivers/directadmin.php index d11aae7..08ade51 100644 --- a/plugins/password/drivers/directadmin.php +++ b/plugins/password/drivers/directadmin.php @@ -5,44 +5,67 @@ * * Driver to change passwords via DirectAdmin Control Panel * - * @version 1.0 + * @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 +{ + public function save($curpass, $passwd) + { + $rcmail = rcmail::get_instance(); + $Socket = new HTTPSocket; -function password_save($curpass, $passwd){ + $da_user = $_SESSION['username']; + $da_curpass = $curpass; + $da_newpass = $passwd; + $da_host = $rcmail->config->get('password_directadmin_host'); + $da_port = $rcmail->config->get('password_directadmin_port'); - $rcmail = rcmail::get_instance(); - $Socket = new HTTPSocket; + if (strpos($da_user, '@') === false) { + return array('code' => PASSWORD_ERROR, 'message' => 'Change the SYSTEM user password through control panel!'); + } - $da_user = $_SESSION['username']; - $da_curpass = $curpass; - $da_newpass = $passwd; - $da_host = $rcmail->config->get('password_directadmin_host'); - $da_port = $rcmail->config->get('password_directadmin_port'); + $da_host = str_replace('%h', $_SESSION['imap_host'], $da_host); + $da_host = str_replace('%d', $rcmail->user->get_username('domain'), $da_host); - $Socket->connect($da_host,$da_port); - $Socket->set_method('POST'); - $Socket->query('/CMD_CHANGE_EMAIL_PASSWORD', - array( - 'email' => $da_user, - 'oldpassword' => $da_curpass, - 'password1' => $da_newpass, - 'password2' => $da_newpass, - 'api' => '1' - )); - $response = $Socket->fetch_parsed_body(); + $Socket->connect($da_host,$da_port); + $Socket->set_method('POST'); + $Socket->query('/CMD_CHANGE_EMAIL_PASSWORD', + array( + 'email' => $da_user, + 'oldpassword' => $da_curpass, + 'password1' => $da_newpass, + 'password2' => $da_newpass, + 'api' => '1' + )); + $response = $Socket->fetch_parsed_body(); - //console("DA error response: $response[text] [$da_user]"); + //DEBUG + //rcube::console("Password Plugin: [USER: $da_user] [HOST: $da_host] - Response: [SOCKET: ".$Socket->result_status_code."] [DA ERROR: ".strip_tags($response['error'])."] [TEXT: ".$response[text]."]"); - if($Socket->result_status_code <> 200) - return PASSWORD_CONNECT_ERROR; - elseif($response['error'] == 1){ //Error description: $response[text] - return PASSWORD_ERROR; - }else - return PASSWORD_SUCCESS; - + if($Socket->result_status_code != 200) + return array('code' => PASSWORD_CONNECT_ERROR, 'message' => $Socket->error[0]); + elseif($response['error'] == 1) + return array('code' => PASSWORD_ERROR, 'message' => strip_tags($response['text'])); + else + return PASSWORD_SUCCESS; + } } @@ -53,16 +76,17 @@ * * Very, very basic usage: * $Socket = new HTTPSocket; - * echo $Socket->get('http://user:pass@somesite.com/somedir/some.file?query=string&this=that'); + * echo $Socket->get('http://user:pass@somehost.com:2222/CMD_API_SOMEAPI?query=string&this=that'); * * @author Phi1 'l0rdphi1' Stier <l0rdphi1@liquenox.net> + * @updates 2.7 and 2.8 by Victor Benincasa <vbenincasa @ gmail.com> * @package HTTPSocket - * @version 2.6 + * @version 2.8 */ class HTTPSocket { - var $version = '2.6'; - + var $version = '2.8'; + /* all vars are private except $error, $query_cache, and $doFollowLocationHeader */ var $method = 'GET'; @@ -98,7 +122,7 @@ { if (!is_numeric($port)) { - $port = 80; + $port = 2222; } $this->remote_host = $host; @@ -157,13 +181,13 @@ $this->error = $this->warn = array(); $this->result_status_code = NULL; - // is our request a http:// ... ? - if (preg_match('!^http://!i',$request)) + // is our request a http(s):// ... ? + if (preg_match('/^(http|https):\/\//i',$request)) { $location = parse_url($request); $this->connect($location['host'],$location['port']); $this->set_login($location['user'],$location['pass']); - + $request = $location['path']; $content = $location['query']; @@ -176,7 +200,7 @@ $array_headers = array( 'User-Agent' => "HTTPSocket/$this->version", - 'Host' => ( $this->remote_port == 80 ? $this->remote_host : "$this->remote_host:$this->remote_port" ), + 'Host' => ( $this->remote_port == 80 ? parse_url($this->remote_host,PHP_URL_HOST) : parse_url($this->remote_host,PHP_URL_HOST).":".$this->remote_port ), 'Accept' => '*/*', 'Connection' => 'Close' ); @@ -287,7 +311,6 @@ $status = socket_get_status($socket); $startTime = time(); $length = 0; - $prevSecond = 0; while ( !feof($socket) && !$status['timed_out'] ) { $chunk = fgets($socket,1024); @@ -316,8 +339,8 @@ } } - - list($this->result_header,$this->result_body) = split("\r\n\r\n",$this->result,2); + + list($this->result_header,$this->result_body) = preg_split("/\r\n\r\n/",$this->result,2); if ($this->bind_host) { @@ -355,7 +378,6 @@ $this->query($headers['location']); } } - } function getTransferSpeed() @@ -378,7 +400,7 @@ { if ($asArray) { - return split("\n",$this->fetch_body()); + return preg_split("/\n/",$this->fetch_body()); } return $this->fetch_body(); @@ -438,14 +460,13 @@ */ function fetch_header( $header = '' ) { - $array_headers = split("\r\n",$this->result_header); - - $array_return = array( 0 => $array_headers[0] ); + $array_headers = preg_split("/\r\n/",$this->result_header); + $array_return = array( 0 => $array_headers[0] ); unset($array_headers[0]); foreach ( $array_headers as $pair ) { - list($key,$value) = split(": ",$pair,2); + list($key,$value) = preg_split("/: /",$pair,2); $array_return[strtolower($key)] = $value; } @@ -479,5 +500,3 @@ } } - -?> -- Gitblit v1.9.1