Changeset View
Changeset View
Standalone View
Standalone View
pykolab/cli/cmd_mailbox_cleanup.py
Show First 20 Lines • Show All 74 Lines • ▼ Show 20 Lines | else: | ||||
imap.connect() | imap.connect() | ||||
domain_folders = {} | domain_folders = {} | ||||
subjects = [] | subjects = [] | ||||
# Placeholder for subjects that would have already been deleted | # Placeholder for subjects that would have already been deleted | ||||
subjects_deleted = [] | subjects_deleted = [] | ||||
for domain in domains.keys(): | for domain in domains: | ||||
domain_folders[domain] = imap.lm("user/%%@%s" % (domain)) | domain_folders[domain] = imap.lm("user/%%@%s" % (domain)) | ||||
for domain in domain_folders.keys(): | for domain in domain_folders: | ||||
auth = Auth(domain=domain) | auth = Auth(domain=domain) | ||||
auth.connect(domain) | auth.connect(domain) | ||||
for folder in domain_folders[domain]: | for folder in domain_folders[domain]: | ||||
user = folder.replace('user/','') | user = folder.replace('user/','') | ||||
try: | try: | ||||
recipient = auth.find_recipient(user) | recipient = auth.find_recipient(user) | ||||
except ldap.NO_SUCH_OBJECT, errmsg: | except ldap.NO_SUCH_OBJECT: | ||||
if not user in subjects_deleted and conf.dryrun: | if not user in subjects_deleted and conf.dryrun: | ||||
subjects_deleted.append(user) | subjects_deleted.append(user) | ||||
if conf.dryrun: | if conf.dryrun: | ||||
log.info(_("Would have deleted folder 'user/%s' (dryrun)") % (user)) | log.info(_("Would have deleted folder 'user/%s' (dryrun)") % (user)) | ||||
else: | else: | ||||
log.info(_("Deleting folder 'user/%s'") % (user)) | log.info(_("Deleting folder 'user/%s'") % (user)) | ||||
continue | continue | ||||
Show All 19 Lines | def execute(*args, **kw): | ||||
imap_domains = [] | imap_domains = [] | ||||
folders = imap.lm() | folders = imap.lm() | ||||
for folder in folders: | for folder in folders: | ||||
namespace = folder.split('/')[0] | namespace = folder.split('/')[0] | ||||
mailbox = folder.split('/')[1] | mailbox = folder.split('/')[1] | ||||
if len(mailbox.split('@')) > 1: | if len(mailbox.split('@')) > 1: | ||||
domain = mailbox.split('@')[1] | domain = mailbox.split('@')[1] | ||||
if not domain in domains.keys() and not domain in imap_domains: | if not domain in domains and not domain in imap_domains: | ||||
imap_domains.append(domain) | imap_domains.append(domain) | ||||
for domain in imap_domains: | for domain in imap_domains: | ||||
for folder in imap.lm('user/%%@%s' % (domain)): | for folder in imap.lm('user/%%@%s' % (domain)): | ||||
user = folder.replace('user/', '') | user = folder.replace('user/', '') | ||||
if not user in subjects_deleted and conf.dryrun: | if not user in subjects_deleted and conf.dryrun: | ||||
Show All 17 Lines | for domain in imap_domains: | ||||
imap.dm(folder) | imap.dm(folder) | ||||
except: | except: | ||||
log.error(_("Error deleting folder '%s'") % (folder)) | log.error(_("Error deleting folder '%s'") % (folder)) | ||||
for folder in [x for x in imap.lm() if not x.startswith('DELETED/')]: | for folder in [x for x in imap.lm() if not x.startswith('DELETED/')]: | ||||
folder = imap_utf7.decode(folder) | folder = imap_utf7.decode(folder) | ||||
acls = imap.list_acls(folder) | acls = imap.list_acls(folder) | ||||
for subject in acls.keys(): | for subject in acls: | ||||
if subject == 'anyone': | if subject == 'anyone': | ||||
log.info( | log.info( | ||||
_("Skipping removal of ACL %s for subject %s on folder %s") % ( | _("Skipping removal of ACL %s for subject %s on folder %s") % ( | ||||
acls[subject], | acls[subject], | ||||
subject, | subject, | ||||
folder | folder | ||||
) | ) | ||||
) | ) | ||||
Show All 32 Lines |