Branch 'pykolab-0.5' - 3 commits - pykolab/imap
Jeroen van Meeuwen
vanmeeuwen at kolabsys.com
Tue Sep 4 14:14:05 CEST 2012
pykolab/imap/__init__.py | 85 ++++++++---------------------------------------
pykolab/imap/cyrus.py | 7 ++-
2 files changed, 20 insertions(+), 72 deletions(-)
New commits:
commit 48ffdcd019de3f1c8c2fe8b704648db8b127662f
Author: Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen at kolabsys.com>
Date: Tue Sep 4 13:05:39 2012 +0100
Cherry-pick changes to pykolab/imap/__init__.py from master
diff --git a/pykolab/imap/__init__.py b/pykolab/imap/__init__.py
index 7391669..cabd059 100644
--- a/pykolab/imap/__init__.py
+++ b/pykolab/imap/__init__.py
@@ -194,8 +194,7 @@ class IMAP(object):
if self._imap.has_key(server):
del self._imap[server]
else:
- log.warning(_("Called imap.disconnect() on a server that " + \
- "we had no connection to"))
+ log.warning(_("Called imap.disconnect() on a server that we had no connection to."))
def create_folder(self, folder_path, server=None):
if not server == None:
@@ -314,7 +313,7 @@ class IMAP(object):
if folder_name.startswith("shared%s" % (self.imap.separator) * 2):
folder_name = folder_name[7:]
- self.imap._setannotation(folder_name, '/vendor/kolab/folder-type', folder_type)
+ self.set_metadata(folder_name, '/shared/vendor/kolab/folder-type', folder_type)
def shared_mailbox_create(self, mailbox_base_name, server=None):
"""
@@ -402,12 +401,11 @@ class IMAP(object):
if additional_folders[additional_folder].has_key("annotations"):
for annotation in additional_folders[additional_folder]["annotations"].keys():
- if conf.get('kolab', 'imap_backend') == 'cyrus-imap':
- self.imap._setannotation(
- folder_name,
- "%s" % (annotation),
- "%s" % (additional_folders[additional_folder]["annotations"][annotation])
- )
+ self.set_metadata(
+ folder_name,
+ "%s" % (annotation),
+ "%s" % (additional_folders[additional_folder]["annotations"][annotation])
+ )
if additional_folders[additional_folder].has_key("quota"):
self.imap.sq(
@@ -506,15 +504,12 @@ class IMAP(object):
log.warning(_("Moving INBOX folder %s won't succeed as target folder %s already exists") % (old_name,new_name))
def user_mailbox_server(self, mailbox):
- self.connect(domain=self.domain)
return self.imap.find_mailfolder_server(mailbox)
def has_folder(self, folder):
"""
Check if the environment has a folder named folder.
"""
- self.connect(domain=self.domain)
-
folders = self.imap.lm(folder)
log.debug(_("Looking for folder '%s', we found folders: %r") % (folder,folders), level=8)
# Greater then one, this folder may have subfolders.
@@ -564,8 +559,6 @@ class IMAP(object):
""" Blah functions """
def move_user_folders(self, users=[], domain=None):
- self.connect(domain=domain)
-
for user in users:
if type(user) == dict:
if user.has_key('old_mail'):
@@ -595,9 +588,6 @@ class IMAP(object):
Sets the quota in IMAP using the authentication and authorization
database 'quota' attribute for the users listed in parameter 'users'
"""
-
- self.connect(domain=primary_domain)
-
if conf.has_option(primary_domain, 'quota_attribute'):
_quota_attr = conf.get(primary_domain, 'quota_attribute')
else:
@@ -675,8 +665,6 @@ class IMAP(object):
self.imap._setquota(folder, quota)
def set_user_mailhost(self, users=[], primary_domain=None, secondary_domain=[], folders=[]):
- self.connect(domain=primary_domain)
-
if conf.has_option(primary_domain, 'mailserver_attribute'):
_mailserver_attr = conf.get(primary_domain, 'mailserver_attribute')
else:
@@ -724,7 +712,6 @@ class IMAP(object):
auth.set_user_attribute(primary_domain, user, _mailserver_attr, _current_mailserver)
def parse_mailfolder(self, mailfolder):
- self.connect()
return self.imap.parse_mailfolder(mailfolder)
def expunge_user_folders(self, inbox_folders=None):
@@ -745,8 +732,6 @@ class IMAP(object):
primary_domain, secondary_domains
"""
- self.connect()
-
if inbox_folders == None:
inbox_folders = []
@@ -803,8 +788,6 @@ class IMAP(object):
List the INBOX folders in the IMAP backend. Returns a list of unique
base folder names.
"""
- self.connect(domain=primary_domain)
-
_folders = self.imap.lm("user/%")
# TODO: Replace the .* below with a regex representing acceptable DNS
# domain names.
commit 8dd7946abde86de2ddc99396b22a8486f1fa0519
Author: Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen at kolabsys.com>
Date: Tue Sep 4 12:35:36 2012 +0100
Make sure we don't attempt to parse a mailbox path in full, while we are logged in as a user
diff --git a/pykolab/imap/cyrus.py b/pykolab/imap/cyrus.py
index 02a49b4..bc2a13e 100644
--- a/pykolab/imap/cyrus.py
+++ b/pykolab/imap/cyrus.py
@@ -224,12 +224,13 @@ class Cyrus(cyruslib.CYRUS):
"""
Login to the actual backend server, then set annotation.
"""
- server = self.find_mailfolder_server(mailfolder)
+ try:
+ server = self.find_mailfolder_server(mailfolder)
+ except:
+ server = self.server
log.debug(_("Setting annotation %s on folder %s") % (annotation,mailfolder), level=8)
- #if annotation.startswith('/private'):
-
try:
self.setannotation(mailfolder, annotation, value, shared)
except cyruslib.CYRUSError, e:
commit 9c4c10371707bdd20a7696387617f7b8d7116228
Author: Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen at kolabsys.com>
Date: Tue Sep 4 12:34:57 2012 +0100
Remove setting / removing cyrus-admin privileges before setting annotations, as we now login in as the user before setting any annotations
diff --git a/pykolab/imap/__init__.py b/pykolab/imap/__init__.py
index 3eb6de4..7391669 100644
--- a/pykolab/imap/__init__.py
+++ b/pykolab/imap/__init__.py
@@ -276,35 +276,11 @@ class IMAP(object):
shared = False
metadata_path = metadata_path.replace('/private/', '/')
- backend = conf.get('kolab', 'imap_backend')
-
- if not self.domain == None:
- if conf.has_section(self.domain) and conf.has_option(self.domain, 'imap_backend'):
- backend = conf.get(self.domain, 'imap_backend')
-
if not shared:
log.warning(_("Private annotations need to be set using the appropriate user account."))
- admin_login = conf.get(backend, 'admin_login')
-
- admin_acl = None
-
- acls = self.list_acls(folder)
- if acls.has_key(admin_login):
- admin_acl = acls[admin_login]
-
- if admin_acl == None:
- self.set_acl(folder, admin_login, 'lrsipwa')
- elif not 'w' in admin_acl:
- self.set_acl(folder, admin_login, '%sw' % (admin_acl))
-
self.imap._setannotation(folder, metadata_path, metadata_value, shared)
- if admin_acl == None:
- self.set_acl(folder, admin_login, '')
- elif not 'w' in admin_acl:
- self.set_acl(folder, admin_login, admin_acl)
-
def shared_folder_create(self, folder_path, server=None):
"""
Create a shared folder.
@@ -406,22 +382,18 @@ class IMAP(object):
level=8
)
+ backend = conf.get('kolab', 'imap_backend')
+
+ admin_login = conf.get(backend, 'admin_login')
+ admin_password = conf.get(backend, 'admin_password')
+
+ self.connect(login=False)
+ self.login_plain(admin_login, admin_password, folder)
+
for additional_folder in additional_folders.keys():
_add_folder = {}
- if len(folder.split('@')) > 1:
- folder_name = "user%(separator)s%(username)s%(separator)s%(additional_folder_name)s@%(domainname)s"
- _add_folder['username'] = folder.split('@')[0]
- _add_folder['domainname'] = folder.split('@')[1]
- _add_folder['additional_folder_name'] = additional_folder
- _add_folder['separator'] = self.imap.separator
- folder_name = folder_name % _add_folder
- else:
- folder_name = "user%(separator)s%(username)s%(separator)s%(additional_folder_name)s" % {
- "username": folder,
- "separator": self.imap.separator,
- "additional_folder_name": additional_folder
- }
+ folder_name = additional_folder
try:
self.imap.cm(folder_name)
@@ -451,8 +423,6 @@ class IMAP(object):
"%s" % (additional_folders[additional_folder]["acls"][acl])
)
- backend = conf.get('kolab', 'imap_backend')
-
if len(folder.split('@')) > 1:
domain = folder.split('@')[1]
domain_suffix = "@%s" % (domain)
@@ -470,12 +440,6 @@ class IMAP(object):
uri = None
log.debug(_("Subscribing user to the additional folders"), level=8)
- # Get the credentials
- admin_login = conf.get(backend, 'admin_login')
- admin_password = conf.get(backend, 'admin_password')
-
- self.connect(login=False)
- self.login_plain(admin_login, admin_password, folder)
_tests = []
More information about the commits
mailing list