mirror of
https://github.com/Icinga/icingaweb2.git
synced 2025-07-28 16:24:04 +02:00
Add recursive delete support to LDAP Connection
This commit is contained in:
parent
12933ee706
commit
aed6d74ecd
@ -149,6 +149,61 @@ class Connection
|
|||||||
return array_shift($row);
|
return array_shift($row);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function hasDN($dn)
|
||||||
|
{
|
||||||
|
$this->connect();
|
||||||
|
$result = ldap_read($this->ds, $dn, '(objectClass=*)', array('objectClass'));
|
||||||
|
return ldap_count_entries($this->ds, $result) > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function deleteRecursively($dn)
|
||||||
|
{
|
||||||
|
$this->connect();
|
||||||
|
$result = @ldap_list($this->ds, $dn, '(objectClass=*)', array('objectClass'));
|
||||||
|
if ($result === false) {
|
||||||
|
if (ldap_errno($this->ds) === self::LDAP_NO_SUCH_OBJECT) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
throw new \Exception(
|
||||||
|
sprintf(
|
||||||
|
'LDAP list for "%s" failed: %s',
|
||||||
|
$dn,
|
||||||
|
ldap_error($this->ds)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
$children = ldap_get_entries($this->ds, $result);
|
||||||
|
for($i = 0; $i < $children['count']; $i++) {
|
||||||
|
$result = $this->deleteRecursively($children[$i]['dn']);
|
||||||
|
if (!$result) {
|
||||||
|
//return result code, if delete fails
|
||||||
|
throw new \Exception(sprintf('Recursively deleting "%s" failed', $dn));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $this->deleteDN($dn);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function deleteDN($dn)
|
||||||
|
{
|
||||||
|
$this->connect();
|
||||||
|
|
||||||
|
$result = @ldap_delete($this->ds, $dn);
|
||||||
|
if ($result === false) {
|
||||||
|
if (ldap_errno($this->ds) === self::LDAP_NO_SUCH_OBJECT) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
throw new \Exception(
|
||||||
|
sprintf(
|
||||||
|
'LDAP delete for "%s" failed: %s',
|
||||||
|
$dn,
|
||||||
|
ldap_error($this->ds)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
public function fetchDN($query, $fields = array())
|
public function fetchDN($query, $fields = array())
|
||||||
{
|
{
|
||||||
$rows = $this->fetchAll($query, $fields);
|
$rows = $this->fetchAll($query, $fields);
|
||||||
@ -256,7 +311,6 @@ class Connection
|
|||||||
ldap_error($this->ds)
|
ldap_error($this->ds)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
die('Query failed');
|
|
||||||
}
|
}
|
||||||
$list = array();
|
$list = array();
|
||||||
if ($query instanceof Query) {
|
if ($query instanceof Query) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user