bin/domain_delete.php
Aleksander Machniak
machniak at kolabsys.com
Tue Jan 21 10:56:32 CET 2014
bin/domain_delete.php | 128 ++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 128 insertions(+)
New commits:
commit f5b27756f8a2dbc49e027ade438967c7edd262a2
Author: Aleksander Machniak <alec at alec.pl>
Date: Tue Jan 21 10:56:03 2014 +0100
Added domain_delete.php script (Bug #1869)
diff --git a/bin/domain_delete.php b/bin/domain_delete.php
new file mode 100644
index 0000000..74889cf
--- /dev/null
+++ b/bin/domain_delete.php
@@ -0,0 +1,128 @@
+<?php
+/*
+ +--------------------------------------------------------------------------+
+ | This file is part of the Kolab Web Admin Panel |
+ | |
+ | Copyright (C) 2011-2014, Kolab Systems AG |
+ | |
+ | This program is free software: you can redistribute it and/or modify |
+ | it under the terms of the GNU Affero General Public License as published |
+ | by the Free Software Foundation, either version 3 of the License, or |
+ | (at your option) any later version. |
+ | |
+ | This program is distributed in the hope that it will be useful, |
+ | but WITHOUT ANY WARRANTY; without even the implied warranty of |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
+ | GNU Affero General Public License for more details. |
+ | |
+ | You should have received a copy of the GNU Affero General Public License |
+ | along with this program. If not, see <http://www.gnu.org/licenses/> |
+ +--------------------------------------------------------------------------+
+ | Author: Aleksander Machniak <machniak at kolabsys.com> |
+ +--------------------------------------------------------------------------+
+*/
+
+set_time_limit(0);
+
+require_once __DIR__ . '/../lib/functions.php';
+require_once 'Auth/LDAP.php';
+
+$LDAP = new LDAP();
+$CONF = Conf::get_instance();
+
+$username = $CONF->get('ldap', 'bind_dn');
+$password = $CONF->get('ldap', 'bind_pw');
+$domain = $CONF->get('kolab', 'primary_domain');
+
+$LDAP->authenticate($username, $password, $domain);
+
+// get list of domains to delete
+$domains = list_deleted_domains();
+
+if (empty($domains)) {
+ die("Nothing to delete. Done.");
+}
+
+// delete domains
+foreach ($domains as $dn => $domain) {
+ delete_domain($dn, $domain);
+}
+
+
+function list_deleted_domains()
+{
+ global $LDAP, $CONF;
+
+ $result = $LDAP->list_domains(
+ array(
+ 'associateddomain',
+ 'inetdomainbasedn',
+ 'inetdomainstatus',
+ ),
+ array(
+ 'params' => array(
+ 'inetdomainstatus' => array(
+ 'value' => 'deleted',
+ 'type' => 'exact',
+ ),
+ ),
+ ),
+ array(
+ 'page_size' => 999,
+ 'page' => 1,
+ 'sort_by' => 'associateddomain',
+ )
+ );
+
+ return $result['list'];
+}
+
+function delete_domain($domain_dn, $domain)
+{
+ global $LDAP, $CONF;
+
+ // get domain name
+ $domain_name = $domain['associateddomain'];
+ if (is_array($domain_name)) {
+ $domain_name = array_shift($domain_name);
+ }
+
+ // sanity check
+ if ($domain['inetdomainstatus'] != 'deleted') {
+ echo "Domain $domain_name is not marked for deletion. Skipped.";
+ return;
+ }
+
+ echo "Deleting domain $domain_name... ";
+
+ if (!empty($domain['inetdomainbasedn'])) {
+ $inetdomainbasedn = $domain['inetdomainbasedn'];
+ }
+ else {
+ $inetdomainbasedn = "dc=" . implode(',dc=', explode('.', $domain_name));
+ }
+
+ // only deletes associateddomain=domain.tld,cn=kolab,cn=config
+ if (!$LDAP->delete_entry($domain_dn)) {
+ echo "Error: Failed to delete $domain_dn.\n";
+ return;
+ }
+
+ $entries = array();
+ $entries[] = $inetdomainbasedn;
+
+ $cn = str_replace('.', '_', $domain_name);
+ $entries[] = "cn={$cn},cn=ldbm database,cn=plugins,cn=config";
+
+ $cn = str_replace(array(',', '='), array('\2C', '\3D'), $inetdomainbasedn);
+ $entries[] = "cn={$cn},cn=mapping tree,cn=config";
+
+ foreach ($entries as $dn) {
+ if (!$LDAP->delete_entry_recursive($dn)) {
+ echo "Error: Failed to delete $dn.\n";
+ return;
+ }
+ }
+
+ echo "Done.\n";
+}
More information about the commits
mailing list