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