types specify suffix list
This commit is contained in:
parent
8def4a53ff
commit
18bc1b0c0d
|
@ -127,38 +127,6 @@ class Ldap{
|
||||||
@ldap_close($this->server);
|
@ldap_close($this->server);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns an array with all organizational units under the given suffix
|
|
||||||
*
|
|
||||||
* @param string $suffix search suffix
|
|
||||||
* @return array DNs of organizational units
|
|
||||||
*/
|
|
||||||
function search_units($suffix) {
|
|
||||||
$ret = array();
|
|
||||||
$sr = @ldap_search($this->server(), escapeDN($suffix), "objectClass=organizationalunit", array("DN"), 0, 0, 0, LDAP_DEREF_NEVER);
|
|
||||||
if ($sr) {
|
|
||||||
$units = ldap_get_entries($this->server, $sr);
|
|
||||||
$units = cleanLDAPResult($units);
|
|
||||||
// extract Dns
|
|
||||||
for ($i = 0; $i < sizeof($units); $i++) {
|
|
||||||
if ($units[$i]['dn']) $ret[] = $units[$i]['dn'];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// add root suffix if needed
|
|
||||||
$found = false;
|
|
||||||
for ($i = 0; $i < sizeof($ret); $i++) { // search suffix case-intensitive
|
|
||||||
if (strtolower($suffix) == strtolower($ret[$i])) {
|
|
||||||
$found = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!$found) {
|
|
||||||
$ret[] = $suffix;
|
|
||||||
}
|
|
||||||
usort($ret, array($this,"cmp_array"));
|
|
||||||
return $ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the LDAP connection handle
|
* Returns the LDAP connection handle
|
||||||
*
|
*
|
||||||
|
@ -303,41 +271,6 @@ class Ldap{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Helper function to sort the unit DNs
|
|
||||||
*
|
|
||||||
* @param string $a first argument to compare
|
|
||||||
* @param string $b second argument to compare
|
|
||||||
* @return integer 0 if equal, 1 if $a is greater, -1 if $b is greater
|
|
||||||
*/
|
|
||||||
function cmp_array($a, $b) {
|
|
||||||
// split DNs
|
|
||||||
$array_a = explode(",", $a);
|
|
||||||
$array_b = explode(",", $b);
|
|
||||||
$len_a = sizeof($array_a);
|
|
||||||
$len_b = sizeof($array_b);
|
|
||||||
// check how many parts to compare
|
|
||||||
$len = min($len_a, $len_b);
|
|
||||||
// compare from last part on
|
|
||||||
for ($i = 0; $i < $len; $i++) {
|
|
||||||
// get parts to compare
|
|
||||||
$part_a = strtolower($array_a[$len_a - $i - 1]);
|
|
||||||
$part_b = strtolower($array_b[$len_b - $i - 1]);
|
|
||||||
// compare parts
|
|
||||||
if ($part_a == $part_b) { // part is identical
|
|
||||||
if ($i == ($len - 1)) {
|
|
||||||
if ($len_a > $len_b) return 1;
|
|
||||||
elseif ($len_a < $len_b) return -1;
|
|
||||||
else return 0; // DNs are identical
|
|
||||||
}
|
|
||||||
}
|
|
||||||
elseif ($part_a == max($part_a, $part_b)) return 1;
|
|
||||||
else return -1;
|
|
||||||
}
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
?>
|
?>
|
||||||
|
|
|
@ -845,7 +845,8 @@ class lamList {
|
||||||
}
|
}
|
||||||
$this->entries = $entries;
|
$this->entries = $entries;
|
||||||
// generate list of possible suffixes
|
// generate list of possible suffixes
|
||||||
$this->possibleSuffixes = $_SESSION['ldap']->search_units($_SESSION["config"]->get_Suffix($this->type));
|
$typeObj = new $this->type();
|
||||||
|
$this->possibleSuffixes = $typeObj->getSuffixList();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -873,7 +874,7 @@ class lamList {
|
||||||
* Prints the list configuration page.
|
* Prints the list configuration page.
|
||||||
*/
|
*/
|
||||||
protected function listPrintConfigurationPage() {
|
protected function listPrintConfigurationPage() {
|
||||||
echo "<div id=\"settingsDialog\" style=\"display: none;\">\n";
|
echo "<div id=\"settingsDialog\" class=\"hidden\">\n";
|
||||||
echo "<form id=\"settingsDialogForm\" action=\"list.php?type=" . $this->type . "&norefresh=true\" method=\"post\">\n";
|
echo "<form id=\"settingsDialogForm\" action=\"list.php?type=" . $this->type . "&norefresh=true\" method=\"post\">\n";
|
||||||
echo '<table width="100%"><tr><td>';
|
echo '<table width="100%"><tr><td>';
|
||||||
|
|
||||||
|
|
|
@ -2183,7 +2183,8 @@ class accountContainer {
|
||||||
return $this->cachedOUs;
|
return $this->cachedOUs;
|
||||||
}
|
}
|
||||||
$rootsuffix = $_SESSION['config']->get_Suffix($this->type);
|
$rootsuffix = $_SESSION['config']->get_Suffix($this->type);
|
||||||
$this->cachedOUs = $_SESSION['ldap']->search_units($rootsuffix);
|
$typeObj = new $this->type();
|
||||||
|
$this->cachedOUs = $typeObj->getSuffixList();
|
||||||
return $this->cachedOUs;
|
return $this->cachedOUs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -64,7 +64,8 @@ if (isset($_POST['createOU']) || isset($_POST['deleteOU'])) {
|
||||||
if (preg_match("/^[a-z0-9 _\\-]+$/i", $_POST['newOU'])) {
|
if (preg_match("/^[a-z0-9 _\\-]+$/i", $_POST['newOU'])) {
|
||||||
// check if ou already exists
|
// check if ou already exists
|
||||||
$new_dn = "ou=" . $_POST['newOU'] . "," . $_POST['parentOU'];
|
$new_dn = "ou=" . $_POST['newOU'] . "," . $_POST['parentOU'];
|
||||||
if (!in_array($new_dn, $_SESSION['ldap']->search_units($_POST['parentOU']))) {
|
$found = ldapGetDN($new_dn);
|
||||||
|
if ($found == null) {
|
||||||
// add new ou
|
// add new ou
|
||||||
$ou = array();
|
$ou = array();
|
||||||
$ou['objectClass'] = "organizationalunit";
|
$ou['objectClass'] = "organizationalunit";
|
||||||
|
@ -167,9 +168,9 @@ function display_main($message, $error) {
|
||||||
$options = array();
|
$options = array();
|
||||||
foreach ($types as $name => $title) {
|
foreach ($types as $name => $title) {
|
||||||
$elements = array();
|
$elements = array();
|
||||||
$units = $_SESSION['ldap']->search_units($_SESSION["config"]->get_Suffix($name));
|
$units = searchLDAPByAttribute(null, null, 'organizationalunit', array('dn'), array($name));
|
||||||
for ($u = 0; $u < sizeof($units); $u++) {
|
for ($u = 0; $u < sizeof($units); $u++) {
|
||||||
$elements[getAbstractDN($units[$u])] = $units[$u];
|
$elements[getAbstractDN($units[$u]['dn'])] = $units[$u]['dn'];
|
||||||
}
|
}
|
||||||
$options[$title] = $elements;
|
$options[$title] = $elements;
|
||||||
}
|
}
|
||||||
|
|
|
@ -179,7 +179,9 @@ $dnContent->addElement(new htmlSpacer(null, '10px'), true);
|
||||||
$rootsuffix = $_SESSION['config']->get_Suffix($type);
|
$rootsuffix = $_SESSION['config']->get_Suffix($type);
|
||||||
// get subsuffixes
|
// get subsuffixes
|
||||||
$suffixes = array();
|
$suffixes = array();
|
||||||
foreach ($_SESSION['ldap']->search_units($rootsuffix) as $suffix) {
|
$typeObj = new $type();
|
||||||
|
$possibleSuffixes = $typeObj->getSuffixList();
|
||||||
|
foreach ($possibleSuffixes as $suffix) {
|
||||||
$suffixes[getAbstractDN($suffix)] = $suffix;
|
$suffixes[getAbstractDN($suffix)] = $suffix;
|
||||||
}
|
}
|
||||||
$selectedSuffix = array();
|
$selectedSuffix = array();
|
||||||
|
|
Loading…
Reference in New Issue