X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=gosa-core%2Finclude%2Fclass_filterLDAP.inc;h=34aff04a8e5652b6c00a9e61cb5bdb8df7dbb459;hb=c1afefdafd7148a79da1e9173c711839aa5be8ea;hp=5a6701d65540462693a5b681e7b475167d8e2a60;hpb=9fd2e5d3dfc118c48d94bfec2b8faf5ebd663876;p=gosa.git diff --git a/gosa-core/include/class_filterLDAP.inc b/gosa-core/include/class_filterLDAP.inc index 5a6701d65..34aff04a8 100644 --- a/gosa-core/include/class_filterLDAP.inc +++ b/gosa-core/include/class_filterLDAP.inc @@ -2,7 +2,7 @@ class filterLDAP { - static function query($base, $scope, $filter, $attributes, $category, $objectStorage= "") + static function query($base, $scope, $filter, $attributes, $category, $objectStorage= array("")) { $config= session::global_get('config'); $ldap= $config->get_ldap_link(TRUE); @@ -21,20 +21,22 @@ class filterLDAP { if (!is_array($category)) { $category= array($category); } - if (!is_array($objectStorage)) { - $objectStorage= array($objectStorage); - } + + // Store in base - i.e. is a rdn value empty? + $storeOnBase= count($objectStorage) == 1 && empty($objectStorage[0]); + + $method= ($storeOnBase && !($flags & GL_SUBSEARCH))?"ls":"search"; // Initialize search bases $bases= array(); // Get list of sub bases to search on - if (count($objectStorage) == 0) { + if ($storeOnBase) { $bases[$base]= ""; } else { foreach ($objectStorage as $oc) { $oc= preg_replace('/,$/', '', $oc); - $tmp= split(',', $oc); + $tmp= explode(',', $oc); if (count($tmp) == 1) { preg_match('/([^=]+)=(.*)$/', $oc, $m); if ($flags & GL_SUBSEARCH) { @@ -69,7 +71,6 @@ class filterLDAP { } // Switch to new base and search - $ldap->cd($base); if (is_array($dnFilters)){ $dnFilter= "(|"; foreach ($dnFilters as $df) { @@ -79,7 +80,12 @@ class filterLDAP { } else { $dnFilter= ""; } - $ldap->search ("(&$filter$dnFilter)", $attributes); + $ldap->cd($base); + if ($method == "ls") { + $ldap->ls("(&$filter$dnFilter)", $base, $attributes); + } else { + $ldap->search("(&$filter$dnFilter)", $attributes); + } // Check for size limit exceeded messages for GUI feedback if (preg_match("/size limit/i", $ldap->get_error())){