pykolab/cli

Jeroen van Meeuwen vanmeeuwen at kolabsys.com
Tue Oct 15 12:06:44 CEST 2013


 pykolab/cli/cmd_sync_mailhost_attrs.py |   49 +++++++++++++++++++++++++++++++--
 1 file changed, 47 insertions(+), 2 deletions(-)

New commits:
commit 9d1c8edc7060d161eb3f1fd1e87a33dd2568e78f
Author: Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen at kolabsys.com>
Date:   Tue Oct 15 12:06:38 2013 +0200

    Make sure mailboxes that are in a domain in IMAP actually have the equivalent domain entry in LDAP

diff --git a/pykolab/cli/cmd_sync_mailhost_attrs.py b/pykolab/cli/cmd_sync_mailhost_attrs.py
index 0f2e4d9..c5d2081 100644
--- a/pykolab/cli/cmd_sync_mailhost_attrs.py
+++ b/pykolab/cli/cmd_sync_mailhost_attrs.py
@@ -73,7 +73,49 @@ def execute(*args, **kw):
 
     domains = auth.list_domains()
 
-    for primary,secondaries in domains:
+    folders = imap.lm()
+
+    imap_domains_not_domains = []
+
+    for folder in folders:
+        if len(folder.split('@')) > 1 and not folder.startswith('DELETED'):
+            _folder_domain = folder.split('@')[-1]
+            if not _folder_domain in list(set(domains.keys() + domains.values())):
+                imap_domains_not_domains.append(folder.split('@')[-1])
+
+    imap_domains_not_domains = list(set(imap_domains_not_domains))
+
+    log.debug(_("Domains in IMAP not in LDAP: %r") % (imap_domains_not_domains), level=8)
+
+    if len(imap_domains_not_domains) > 0:
+        for domain in imap_domains_not_domains:
+            folders = []
+
+            folders.extend(imap.lm('shared/%%@%s' % (domain)))
+            folders.extend(imap.lm('user/%%@%s' % (domain)))
+
+            for folder in folders:
+                if conf.delete:
+                    if conf.dry_run:
+                        if not folder.split('/')[0] == 'shared':
+                            log.warning(_("No recipients for '%s' (would have deleted the mailbox if not for --dry-run)!") % ('/'.join(folder.split('/')[1:])))
+                        else:
+                            continue
+                    else:
+                        if not '/'.join(folder.split('/')[0]) == 'shared':
+                            log.info(_("Deleting mailbox '%s' because it has no recipients") % (folder))
+                            try:
+                                imap.dm(folder)
+                            except Exception, errmsg:
+                                log.error(_("An error occurred removing mailbox %r: %r") % (folder, errmsg))
+                        else:
+                            log.info(_("Not automatically deleting shared folder '%s'") % (folder))
+                else:
+                    log.warning(_("No recipients for '%s' (use --delete to delete)!") % ('/'.join(folder.split('/')[1:])))
+
+    for primary in list(set(domains.values())):
+        secondaries = [x for x in domains.keys() if domains[x] == primary]
+
         folders = []
 
         folders.extend(imap.lm('shared/%%@%s' % (primary)))
@@ -103,7 +145,10 @@ def execute(*args, **kw):
                         else:
                             if not '/'.join(folder.split('/')[0]) == 'shared':
                                 log.info(_("Deleting mailbox '%s' because it has no recipients") % (folder))
-                                imap.dm(folder)
+                                try:
+                                    imap.dm(folder)
+                                except Exception, errmsg:
+                                    log.error(_("An error occurred removing mailbox %r: %r") % (folder, errmsg))
                             else:
                                 log.info(_("Not automatically deleting shared folder '%s'") % (folder))
                     else:




More information about the commits mailing list