From 6814c76ac91a424f2018edaa27e313ce3ba06066 Mon Sep 17 00:00:00 2001 From: Roland Gruber Date: Sat, 21 May 2011 10:58:22 +0000 Subject: [PATCH] memory and speed improvements --- lam/lib/account.inc | 25 ++++++++++++++----------- lam/lib/baseType.inc | 2 +- lam/lib/lists.inc | 11 ++++------- lam/lib/modules.inc | 3 ++- lam/lib/modules/ddns.inc | 2 +- lam/lib/modules/inetOrgPerson.inc | 2 +- lam/lib/modules/kolabUser.inc | 2 +- lam/templates/delete.php | 2 +- lam/templates/login.php | 2 +- 9 files changed, 26 insertions(+), 25 deletions(-) diff --git a/lam/lib/account.inc b/lam/lib/account.inc index 26d21a6b..72d898d0 100644 --- a/lam/lib/account.inc +++ b/lam/lib/account.inc @@ -576,7 +576,8 @@ function searchLDAPByAttribute($name, $value, $objectClass, $attributes, $scopes if ($sr) { $entries = ldap_get_entries($_SESSION['ldap']->server(), $sr); if ($entries) { - $return = array_merge($return, cleanLDAPResult($entries)); + cleanLDAPResult($entries); + $return = array_merge($return, $entries); } @ldap_free_result($sr); } @@ -601,7 +602,8 @@ function searchLDAPByFilter($filter, $attributes, $scopes) { if ($sr) { $entries = ldap_get_entries($_SESSION['ldap']->server(), $sr); if ($entries) { - $return = array_merge($return, cleanLDAPResult($entries)); + cleanLDAPResult($entries); + $return = array_merge($return, $entries); } @ldap_free_result($sr); } @@ -624,9 +626,10 @@ function searchLDAP($suffix, $filter, $attributes) { if ($sr) { $entries = ldap_get_entries($_SESSION['ldap']->server(), $sr); if ($entries) { - $return = cleanLDAPResult($entries); + cleanLDAPResult($entries); + @ldap_free_result($sr); + return $entries; } - @ldap_free_result($sr); } return $return; } @@ -644,8 +647,8 @@ function ldapGetDN($dn, $attributes = array('dn')) { if ($sr) { $entries = ldap_get_entries($_SESSION['ldap']->server(), $sr); if ($entries) { - $return = cleanLDAPResult($entries); - $return = $return[0]; + cleanLDAPResult($entries); + $return = $entries[0]; } @ldap_free_result($sr); } @@ -685,14 +688,14 @@ function getLastLDAPError() { * This will remove all 'count' entries and also all numeric array keys. * * @param array $entries LDAP entries in format $entries[entry number][attribute name][attribute values] - * @return array cleaned entries */ -function cleanLDAPResult($entries) { +function cleanLDAPResult(&$entries) { if (isset($entries['count'])) { unset($entries['count']); } // iterate over all results - for ($e = 0; $e < sizeof($entries); $e++) { + $count = sizeof($entries); + for ($e = 0; $e < $count; $e++) { // remove 'count' entries and numerical entries for ($i = 0; $i < $entries[$e]['count']; $i++) { if (isset($entries[$e][$i])) { @@ -701,13 +704,13 @@ function cleanLDAPResult($entries) { } unset($entries[$e]['count']); $attrNames = array_keys($entries[$e]); - for ($i = 0; $i < sizeof($attrNames); $i++) { + $attrCount = sizeof($attrNames); + for ($i = 0; $i < $attrCount; $i++) { if (is_array($entries[$e][$attrNames[$i]])) { unset($entries[$e][$attrNames[$i]]['count']); } } } - return $entries; } /** diff --git a/lam/lib/baseType.inc b/lam/lib/baseType.inc index 251c0356..65aab7d5 100644 --- a/lam/lib/baseType.inc +++ b/lam/lib/baseType.inc @@ -141,7 +141,7 @@ class baseType { $sr = @ldap_search($_SESSION["ldap"]->server(), escapeDN($suffix), "objectClass=organizationalunit", array("DN"), 0, 0, 0, LDAP_DEREF_NEVER); if ($sr) { $units = ldap_get_entries($_SESSION["ldap"]->server(), $sr); - $units = cleanLDAPResult($units); + cleanLDAPResult($units); // extract Dns for ($i = 0; $i < sizeof($units); $i++) { if ($units[$i]['dn']) $ret[] = $units[$i]['dn']; diff --git a/lam/lib/lists.inc b/lam/lib/lists.inc index 69cc340b..98d5b4a4 100644 --- a/lam/lib/lists.inc +++ b/lam/lib/lists.inc @@ -156,7 +156,7 @@ class lamList { } // sort rows by sort column if (isset($this->entries)) { - $this->entries = $this->listSort($this->entries); + $this->listSort($this->entries); } // insert HTML fragment from listDoPost echo $postFragment; @@ -229,14 +229,12 @@ class lamList { * Sorts an account list by a given attribute * * @param array $info the account list - * @return array sorted account list */ protected function listSort(&$info) { - if (!is_array($this->attrArray)) return $info; - if (!is_string($this->sortColumn)) return $info; + if (!is_array($this->attrArray)) return; + if (!is_string($this->sortColumn)) return; // sort and return account list usort($info, array($this, "cmp_array")); - return $info; } @@ -838,12 +836,11 @@ class lamList { $module_filter = get_ldap_filter($this->type); // basic filter is provided by modules $filter = "(&" . $module_filter . $this->filterPart . ")"; $attrs = $this->attrArray; - $entries = searchLDAP($this->suffix, $filter, $attrs); + $this->entries = searchLDAP($this->suffix, $filter, $attrs); $lastError = getLastLDAPError(); if ($lastError != null) { call_user_func_array('StatusMessage', $lastError); } - $this->entries = $entries; // generate list of possible suffixes $typeObj = new $this->type(); $this->possibleSuffixes = $typeObj->getSuffixList(); diff --git a/lam/lib/modules.inc b/lam/lib/modules.inc index 28d913cd..aa296f07 100644 --- a/lam/lib/modules.inc +++ b/lam/lib/modules.inc @@ -1376,7 +1376,8 @@ class accountContainer { $this->rdn = explode("=", substr($dn, 0, strpos($dn, ','))); $this->rdn = $this->rdn[0]; $attr = ldap_get_attributes($_SESSION['ldap']->server(), $entry); - $attr = cleanLDAPResult(array($attr)); + $attr = array($attr); + cleanLDAPResult($attr); $attr = $attr[0]; // fix spelling errors $attr = $this->fixLDAPAttributes($attr, $modules); diff --git a/lam/lib/modules/ddns.inc b/lam/lib/modules/ddns.inc index 53f45d01..bb46ffb1 100644 --- a/lam/lib/modules/ddns.inc +++ b/lam/lib/modules/ddns.inc @@ -197,7 +197,7 @@ class ddns extends baseModule { if ($search) { $info = @ldap_get_entries($ldap,$search); if ($info) { - $info = cleanLDAPResult($info); + cleanLDAPResult($info); if (sizeof($info) > 0) { return true; } diff --git a/lam/lib/modules/inetOrgPerson.inc b/lam/lib/modules/inetOrgPerson.inc index 8da7fb92..f3765eb4 100644 --- a/lam/lib/modules/inetOrgPerson.inc +++ b/lam/lib/modules/inetOrgPerson.inc @@ -1453,7 +1453,7 @@ class inetOrgPerson extends baseModule implements passwordService { function build_uploadAccounts($rawAccounts, $ids, &$partialAccounts, $selectedModules) { $errors = array(); // get list of existing users - $existingUsers = searchLDAPByAttribute(null, null, 'inetOrgPerson', array('uid'), array('user')); + $existingUsers = searchLDAPByAttribute('uid', '*', 'inetOrgPerson', array('uid'), array('user')); for ($e = 0; $e < sizeof($existingUsers); $e++) { $existingUsers[$e] = $existingUsers[$e]['uid'][0]; } diff --git a/lam/lib/modules/kolabUser.inc b/lam/lib/modules/kolabUser.inc index 1d0f7f32..dcaab7d9 100644 --- a/lam/lib/modules/kolabUser.inc +++ b/lam/lib/modules/kolabUser.inc @@ -837,7 +837,7 @@ class kolabUser extends baseModule { $sr = @ldap_search($_SESSION['ldapHandle'], escapeDN($this->selfServiceSettings->LDAPSuffix), '(&(objectClass=inetOrgPerson)(mail=*))', array('mail'), 0, 0, 0, LDAP_DEREF_NEVER); if ($sr) { $result = ldap_get_entries($_SESSION['ldapHandle'], $sr); - $result = cleanLDAPResult($result); + cleanLDAPResult($result); for ($i = 0; $i < sizeof($result); $i++) { $delegates[] = $result[$i]['mail'][0]; } diff --git a/lam/templates/delete.php b/lam/templates/delete.php index 3b7d1cde..9a1ab4e5 100644 --- a/lam/templates/delete.php +++ b/lam/templates/delete.php @@ -308,7 +308,7 @@ function deleteDN($dn) { $sr = @ldap_list($_SESSION['ldap']->server(), $dn, 'objectClass=*', array('dn'), 0, 0, 0, LDAP_DEREF_NEVER); if ($sr) { $entries = ldap_get_entries($_SESSION['ldap']->server(), $sr); - $entries = cleanLDAPResult($entries); + cleanLDAPResult($entries); for ($i = 0; $i < sizeof($entries); $i++) { // delete recursively $subErrors = deleteDN($entries[$i]['dn']); diff --git a/lam/templates/login.php b/lam/templates/login.php index 4c0f81e4..b276344e 100644 --- a/lam/templates/login.php +++ b/lam/templates/login.php @@ -464,7 +464,7 @@ if(!empty($_POST['checklogin'])) { if ($searchResult) { $searchInfo = @ldap_get_entries($searchLDAP->server(), $searchResult); if ($searchInfo) { - $searchInfo = cleanLDAPResult($searchInfo); + cleanLDAPResult($searchInfo); if (sizeof($searchInfo) == 0) { $searchSuccess = false; $searchError = _('Wrong password/user name combination. Please try again.');