From 043b159256a721853b50631827690eeb842c844a Mon Sep 17 00:00:00 2001 From: alec Date: Wed, 29 Sep 2010 17:23:26 +0000 Subject: - Added possibility to display extended error messages (#1486704) - Added extended error messages in Poppassd driver (#1486704) git-svn-id: https://svn.roundcube.net/trunk@4016 208e9e7b-5314-0410-a742-e7e81cd9613c --- plugins/password/drivers/poppassd.php | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) (limited to 'plugins/password/drivers') diff --git a/plugins/password/drivers/poppassd.php b/plugins/password/drivers/poppassd.php index 8a54fb7d9..fc105de47 100644 --- a/plugins/password/drivers/poppassd.php +++ b/plugins/password/drivers/poppassd.php @@ -5,46 +5,56 @@ * * Driver to change passwords via Poppassd/Courierpassd * - * @version 1.0 + * @version 1.1 * @author Philip Weir * */ +function format_error_result($code, $line) +{ + if (preg_match('/^\d\d\d\s+(\S.*)\s*$/', $line, $matches)) { + return array('code' => $code, 'message' => $matches[1]); + } else { + return $code; + } +} + function password_save($curpass, $passwd) { $rcmail = rcmail::get_instance(); // include('Net/Socket.php'); $poppassd = new Net_Socket(); - if (PEAR::isError($poppassd->connect($rcmail->config->get('password_pop_host'), $rcmail->config->get('password_pop_port'), null))) { - return PASSWORD_CONNECT_ERROR; + $result = $poppassd->connect($rcmail->config->get('password_pop_host'), $rcmail->config->get('password_pop_port'), null); + if (PEAR::isError($result)) { + return format_error_result(PASSWORD_CONNECT_ERROR, $result->getMessage()); } else { $result = $poppassd->readLine(); if(!preg_match('/^2\d\d/', $result)) { $poppassd->disconnect(); - return PASSWORD_ERROR; + return format_error_result(PASSWORD_ERROR, $result); } else { $poppassd->writeLine("user ". $_SESSION['username']); $result = $poppassd->readLine(); if(!preg_match('/^[23]\d\d/', $result) ) { $poppassd->disconnect(); - return PASSWORD_CONNECT_ERROR; + return format_error_result(PASSWORD_CONNECT_ERROR, $result); } else { $poppassd->writeLine("pass ". $curpass); $result = $poppassd->readLine(); if(!preg_match('/^[23]\d\d/', $result) ) { $poppassd->disconnect(); - return PASSWORD_ERROR; + return format_error_result(PASSWORD_ERROR, $result); } else { $poppassd->writeLine("newpass ". $passwd); $result = $poppassd->readLine(); $poppassd->disconnect(); if (!preg_match('/^2\d\d/', $result)) - return PASSWORD_ERROR; + return format_error_result(PASSWORD_ERROR, $result); else return PASSWORD_SUCCESS; } @@ -52,5 +62,3 @@ function password_save($curpass, $passwd) } } } - -?> -- cgit v1.2.3