From e3bffe6b7ae044cf5582f67a526f2670b729cba5 Mon Sep 17 00:00:00 2001 From: Roland Gruber Date: Fri, 14 May 2010 12:57:00 +0000 Subject: [PATCH] better error handling and no longer depend on ssh2 module --- lam/lib/lamdaemon.pl | 6 +++--- lam/lib/modules/posixAccount.inc | 20 +++++++++---------- lam/lib/modules/quota.inc | 33 ++++++++++++++++++++++++-------- 3 files changed, 37 insertions(+), 22 deletions(-) diff --git a/lam/lib/lamdaemon.pl b/lam/lib/lamdaemon.pl index a5c1b6a2..0710af3d 100755 --- a/lam/lib/lamdaemon.pl +++ b/lam/lib/lamdaemon.pl @@ -340,12 +340,12 @@ sub getQuotas { logMessage(LOG_ERR, "Unable to read quota for $user[0]."); } else { - $return = "$quota_usr[$i][1],$temp[0],$temp[1],$temp[2],$temp[3],$temp[4],$temp[5],$temp[6],$temp[7]:$return"; + $return = "QUOTA_ENTRY $quota_usr[$i][1],$temp[0],$temp[1],$temp[2],$temp[3],$temp[4],$temp[5],$temp[6],$temp[7]:$return"; } } - else { $return = "$quota_usr[$i][1],0,0,0,0,0,0,0,0:$return"; } + else { $return = "QUOTA_ENTRY $quota_usr[$i][1],0,0,0,0,0,0,0,0:$return"; } } - else { $return = "$quota_usr[$i][1],0,0,0,0,0,0,0,0:$return"; } + else { $return = "QUOTA_ENTRY $quota_usr[$i][1],0,0,0,0,0,0,0,0:$return"; } $i++; } ($<, $>) = ($>, $<); # Give up root previleges diff --git a/lam/lib/modules/posixAccount.inc b/lam/lib/modules/posixAccount.inc index 8cc15e38..9761331d 100644 --- a/lam/lib/modules/posixAccount.inc +++ b/lam/lib/modules/posixAccount.inc @@ -572,13 +572,12 @@ class posixAccount extends baseModule implements passwordService { $result = lamdaemon(implode(posixAccount::$SPLIT_DELIMITER, array($this->attributes['uid'][0], "home", "add", "0".$_SESSION['config']->get_scriptRights())), $server); // lamdaemon results if (is_array($result)) { - foreach ($result as $singleresult) { - $singleresult = explode(",", $singleresult); - if (is_array($singleresult)) { - if (($singleresult[0] == 'ERROR') || ($singleresult[0] == 'INFO') || ($singleresult[0] == 'WARN')) { - call_user_func_array('StatusMessage', $singleresult); - } - } + $singleresult = explode(",", $result[0]); + if (($singleresult[0] == 'ERROR') || ($singleresult[0] == 'INFO') || ($singleresult[0] == 'WARN')) { + call_user_func_array('StatusMessage', $singleresult); + } + else { + StatusMessage('ERROR', $result[0]); } } } @@ -972,8 +971,7 @@ class posixAccount extends baseModule implements passwordService { array('kind' => 'input', 'name' => 'homeDirectory', 'type' => 'text', 'size' => '30', 'maxlength' => '255', 'value' => $this->attributes['homeDirectory'][0]), array('kind' => 'help', 'value' => 'homeDirectory')); if ($this->getAccountContainer()->isNewAccount && ($_SESSION['config']->get_scriptPath() != null) - && ($_SESSION['config']->get_scriptPath() != '') - && extension_loaded('ssh2')) { + && ($_SESSION['config']->get_scriptPath() != '')) { // get list of lamdaemon servers $lamdaemonServers = explode(";", $_SESSION['config']->get_scriptServers()); for ($i = 0; $i < sizeof($lamdaemonServers); $i++) { @@ -1019,7 +1017,7 @@ class posixAccount extends baseModule implements passwordService { * @return meta HTML code */ function display_html_delete() { - if ($this->get_scope() == 'user' && ($_SESSION['config']->get_scriptPath() != null) && extension_loaded('ssh2')) { + if ($this->get_scope() == 'user' && ($_SESSION['config']->get_scriptPath() != null)) { $return[] = array ( array('kind' => 'text', 'text' => _('Delete home directory')), array('kind' => 'input', 'name' => 'deletehomedir', 'type' => 'checkbox'), @@ -1109,7 +1107,7 @@ class posixAccount extends baseModule implements passwordService { array('kind' => 'select', 'name' => 'posixAccount_loginShell', 'options' => $shelllist, 'options_selected' => array("/bin/bash")), array('kind' => 'help', 'value' => 'loginShell', 'scope' => 'user')); // lamdaemon settings - if (($_SESSION['config']->get_scriptPath() != null) && extension_loaded('ssh2')) { + if (($_SESSION['config']->get_scriptPath() != null)) { $return[] = array( array('kind' => 'text', 'text' => _('Create home directory') . ": "), array('kind' => 'input', 'type' => 'checkbox', 'name' => 'posixAccount_createHomedir'), diff --git a/lam/lib/modules/quota.inc b/lam/lib/modules/quota.inc index 0343fabf..8d5b0db9 100644 --- a/lam/lib/modules/quota.inc +++ b/lam/lib/modules/quota.inc @@ -40,6 +40,8 @@ $Id$ class quota extends baseModule { private static $SPLIT_DELIMITER = "###x##y##x###"; + + private static $QUOTA_PREFIX = 'QUOTA_ENTRY '; /** this functin fills the error message array with messages **/ @@ -83,8 +85,6 @@ class quota extends baseModule { // module dependencies $return['dependencies'] = array('depends' => array('posixAccount'), 'conflicts' => array()); } - // PHP extensions - $return['extensions'] = array('ssh2'); // managed attributes $return['attributes'] = array('uid', 'cn'); // available PDF fields @@ -157,7 +157,6 @@ class quota extends baseModule { * */ function initQuotas() { - if (!extension_loaded('ssh2')) return; if (isset($this->quota)) return; $userName = '+'; if (($this->getAccountContainer() != null) && !$this->getAccountContainer()->isNewAccount) { @@ -180,6 +179,8 @@ class quota extends baseModule { $allQuotas = explode(":", $quotas[0]); array_pop($allQuotas); // remove empty element at the end for ($i = 0; $i < sizeof($allQuotas); $i++) { + if (strpos($allQuotas[$i], quota::$QUOTA_PREFIX) !== 0) continue; + $allQuotas[$i] = substr($allQuotas[$i], strlen(quota::$QUOTA_PREFIX)); $singleQuota = explode(",", $allQuotas[$i]); $this->quota[$server][$i] = $singleQuota; if ($this->quota[$server][$i][4] < time()) $this->quota[$server][$i][4] = ''; @@ -359,11 +360,6 @@ class quota extends baseModule { * @return array HTML meta data */ function display_html_attributes() { - if (!extension_loaded('ssh2')) { - return array( - array(array('kind' => 'text', 'text' => _('This module requires the PHP ssh2 extension.')) - )); - } $return = array(); $this->initQuotas(); if (!is_array($this->quota)) return $return; @@ -462,9 +458,16 @@ class quota extends baseModule { $dirs = explode(":", $quotas[0]); array_pop($dirs); // remove empty element at the end for ($i = 0; $i < sizeof($dirs); $i++) { + if (strpos($dirs[$i], quota::$QUOTA_PREFIX) !== 0) { + unset($dirs[$i]); + $i--; + continue; + } + $dirs[$i] = substr($dirs[$i], strlen(quota::$QUOTA_PREFIX)); $dirs[$i] = explode(",", $dirs[$i]); $dirs[$i] = $dirs[$i][0]; } + $dirs = array_values($dirs); if (sizeof($dirs) < 1) continue; // stop if no quota directories were found $fieldContent = array(); $fieldContent[] = array ( @@ -516,9 +519,16 @@ class quota extends baseModule { $dirs = explode(":", $quotas[0]); array_pop($dirs); // remove empty element at the end for ($i = 0; $i < sizeof($dirs); $i++) { + if (strpos($dirs[$i], quota::$QUOTA_PREFIX) !== 0) { + unset($dirs[$i]); + $i--; + continue; + } + $dirs[$i] = substr($dirs[$i], strlen(quota::$QUOTA_PREFIX)); $dirs[$i] = explode(",", $dirs[$i]); $dirs[$i] = $dirs[$i][0]; } + $dirs = array_values($dirs); for ($i = 0; $i < sizeof($dirs); $i++) { if (!get_preg($options["quota_softblock_" . $id . "_" . $dirs[$i]][0], 'digit')) $return[] = $this->messages['softblock'][0]; if (!get_preg($options["quota_hardblock_" . $id . "_" . $dirs[$i]][0], 'digit')) $return[] = $this->messages['hardblock'][0]; @@ -629,9 +639,16 @@ class quota extends baseModule { $dirs = explode(":", $quotas[0]); array_pop($dirs); // remove empty element at the end for ($i = 0; $i < sizeof($dirs); $i++) { + if (strpos($dirs[$i], quota::$QUOTA_PREFIX) !== 0) { + unset($dirs[$i]); + $i--; + continue; + } + $dirs[$i] = substr($dirs[$i], strlen(quota::$QUOTA_PREFIX)); $dirs[$i] = explode(",", $dirs[$i]); $dirs[$i] = $dirs[$i][0]; } + $dirs = array_values($dirs); for ($i = 0; $i < sizeof($dirs); $i++) { $return[] = array( 'name' => 'quota_' . $server . ':' . $dirs[$i],