4 commits - cyruslib.py pykolab/cli pykolab/imap pykolab/setup
Jeroen van Meeuwen
vanmeeuwen at kolabsys.com
Wed Nov 21 14:51:17 CET 2012
cyruslib.py | 2 ++
pykolab/cli/cmd_list_mailbox_metadata.py | 30 +++++++++++++++++++++++++++++-
pykolab/cli/cmd_set_mailbox_metadata.py | 28 +++++++++++++++++++++++++++-
pykolab/imap/__init__.py | 7 +++++++
pykolab/setup/setup_imap.py | 16 ++++++++--------
5 files changed, 73 insertions(+), 10 deletions(-)
New commits:
commit 9b0ffad77a623a088d7b6bff62661b2f4cc11248
Author: Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen at kolabsys.com>
Date: Wed Nov 21 13:50:29 2012 +0000
Add an option --user to allow list-mailbox-metadata and set-mailbox-metadata to be performed on behalf of the user (thus includes private annotations)
diff --git a/pykolab/cli/cmd_list_mailbox_metadata.py b/pykolab/cli/cmd_list_mailbox_metadata.py
index 87fe1b0..b430896 100644
--- a/pykolab/cli/cmd_list_mailbox_metadata.py
+++ b/pykolab/cli/cmd_list_mailbox_metadata.py
@@ -17,6 +17,8 @@
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
+import sys
+
import commands
import pykolab
@@ -31,6 +33,17 @@ conf = pykolab.getConf()
def __init__():
commands.register('list_mailbox_metadata', execute, description=description())
+def cli_options():
+ my_option_group = conf.add_cli_parser_option_group(_("CLI Options"))
+ my_option_group.add_option(
+ '--user',
+ dest = "user",
+ action = "store",
+ default = None,
+ metavar = "USER",
+ help = _("List annotations as user USER")
+ )
+
def description():
return """Obtain a list of metadata entries on a folder."""
@@ -42,11 +55,26 @@ def execute(*args, **kw):
if len(folder.split('@')) > 1:
domain = folder.split('@')[1]
+ elif not conf.user == None and len(conf.user.split('@')) > 1:
+ domain = conf.user.split('@')[1]
else:
domain = conf.get('kolab', 'primary_domain')
imap = IMAP()
- imap.connect(domain=domain)
+
+ if not conf.user == None:
+ imap.connect(domain=domain, login=False)
+
+ backend = conf.get(domain, 'imap_backend')
+ if backend == None:
+ backend = conf.get('kolab', 'imap_backend')
+
+ admin_login = conf.get(backend, 'admin_login')
+ admin_password = conf.get(backend, 'admin_password')
+
+ imap.login_plain(admin_login, admin_password, conf.user)
+ else:
+ imap.connect(domain=domain)
if not imap.has_folder(folder):
print >> sys.stderr, _("No such folder %r") % (folder)
diff --git a/pykolab/cli/cmd_set_mailbox_metadata.py b/pykolab/cli/cmd_set_mailbox_metadata.py
index 9aa9b4e..2cade85 100644
--- a/pykolab/cli/cmd_set_mailbox_metadata.py
+++ b/pykolab/cli/cmd_set_mailbox_metadata.py
@@ -33,6 +33,17 @@ conf = pykolab.getConf()
def __init__():
commands.register('set_mailbox_metadata', execute, description=description())
+def cli_options():
+ my_option_group = conf.add_cli_parser_option_group(_("CLI Options"))
+ my_option_group.add_option(
+ '--user',
+ dest = "user",
+ action = "store",
+ default = None,
+ metavar = "USER",
+ help = _("Set annotation as user USER")
+ )
+
def description():
return """Set an metadata entry on a folder."""
@@ -57,11 +68,26 @@ def execute(*args, **kw):
if len(folder.split('@')) > 1:
domain = folder.split('@')[1]
+ elif not conf.user == None and len(conf.user.split('@')) > 1:
+ domain = conf.user.split('@')[1]
else:
domain = conf.get('kolab', 'primary_domain')
imap = IMAP()
- imap.connect(domain=domain)
+
+ if not conf.user == None:
+ imap.connect(domain=domain, login=False)
+
+ backend = conf.get(domain, 'imap_backend')
+ if backend == None:
+ backend = conf.get('kolab', 'imap_backend')
+
+ admin_login = conf.get(backend, 'admin_login')
+ admin_password = conf.get(backend, 'admin_password')
+
+ imap.login_plain(admin_login, admin_password, conf.user)
+ else:
+ imap.connect(domain=domain)
if not imap.has_folder(folder):
print >> sys.stderr, _("No such folder %r") % (folder)
commit 48e2041fcbfaa8bc2b9fba96f083cd693e9cab80
Author: Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen at kolabsys.com>
Date: Wed Nov 21 13:48:08 2012 +0000
If the annotation response contains a tuple, what we are interested in is tuple[0]
diff --git a/cyruslib.py b/cyruslib.py
index fe06b24..75b636f 100644
--- a/cyruslib.py
+++ b/cyruslib.py
@@ -647,6 +647,8 @@ class CYRUS:
return {}
ann = {}
for annotation in data:
+ if isinstance(annotation, tuple):
+ annotation = annotation[0]
self.__verbose( '[GETANNOTATION] RAW %r (length %d)' % (annotation,len(annotation)))
annotation = annotation.split('"')
self.__verbose( '[GETANNOTATION] SPLIT %r (length %d)' % (annotation,len(annotation)))
commit 3f4c3e162520fff442c76a09657cd3d0606fbfab
Author: Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen at kolabsys.com>
Date: Wed Nov 21 13:47:37 2012 +0000
Restart the Kolab SASL Authentication daemon before restarting the Cyrus IMAP daemon
diff --git a/pykolab/setup/setup_imap.py b/pykolab/setup/setup_imap.py
index d5fe6c9..5e420a2 100644
--- a/pykolab/setup/setup_imap.py
+++ b/pykolab/setup/setup_imap.py
@@ -139,29 +139,29 @@ def execute(*args, **kw):
myaugeas.save()
myaugeas.close()
-
+
if os.path.isfile('/bin/systemctl'):
- subprocess.call(['systemctl', 'restart', 'cyrus-imapd.service'])
subprocess.call(['systemctl', 'restart', 'kolab-saslauthd.service'])
+ subprocess.call(['systemctl', 'restart', 'cyrus-imapd.service'])
elif os.path.isfile('/sbin/service'):
- subprocess.call(['service', 'cyrus-imapd', 'restart'])
subprocess.call(['service', 'kolab-saslauthd', 'restart'])
+ subprocess.call(['service', 'cyrus-imapd', 'restart'])
elif os.path.isfile('/usr/sbin/service'):
- subprocess.call(['/usr/sbin/service','cyrus-imapd','restart'])
subprocess.call(['/usr/sbin/service','kolab-saslauthd','restart'])
+ subprocess.call(['/usr/sbin/service','cyrus-imapd','restart'])
else:
log.error(_("Could not start the cyrus-imapd and kolab-saslauthd services."))
if os.path.isfile('/bin/systemctl'):
- subprocess.call(['systemctl', 'enable', 'cyrus-imapd.service'])
subprocess.call(['systemctl', 'enable', 'kolab-saslauthd.service'])
+ subprocess.call(['systemctl', 'enable', 'cyrus-imapd.service'])
elif os.path.isfile('/sbin/chkconfig'):
- subprocess.call(['chkconfig', 'cyrus-imapd', 'on'])
subprocess.call(['chkconfig', 'kolab-saslauthd', 'on'])
+ subprocess.call(['chkconfig', 'cyrus-imapd', 'on'])
elif os.path.isfile('/usr/sbin/update-rc.d'):
- subprocess.call(['/usr/sbin/update-rc.d', 'cyrus-imapd', 'defaults'])
subprocess.call(['/usr/sbin/update-rc.d', 'kolab-saslauthd', 'defaults'])
subprocess.call(['/usr/sbin/update-rc.d', 'saslauthd', 'disable'])
+ subprocess.call(['/usr/sbin/update-rc.d', 'cyrus-imapd', 'defaults'])
else:
log.error(_("Could not configure to start on boot, the " + \
- "cyrus-imapd and kolab-saslauthd services."))
+ "cyrus-imapd and kolab-saslauthd services."))
commit 645a66f8700e011f966905a66beac48bf8734c91
Author: Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen at kolabsys.com>
Date: Wed Nov 21 10:13:11 2012 +0000
Ensure the mailbox name is lower-cased upon creation
diff --git a/pykolab/imap/__init__.py b/pykolab/imap/__init__.py
index 391714d..68f0c78 100644
--- a/pykolab/imap/__init__.py
+++ b/pykolab/imap/__init__.py
@@ -347,6 +347,13 @@ class IMAP(object):
Returns the full path to the new mailbox folder.
"""
+ # TODO: Whether or not to lowercase the mailbox name is really up to the
+ # IMAP server setting username_tolower (normalize_uid, lmtp_downcase_rcpt).
+
+ if not mailbox_base_name == mailbox_base_name.lower():
+ log.warning(_("Downcasing mailbox name %r") % (mailbox_base_name))
+ mailbox_base_name = mailbox_base_name.lower()
+
folder_name = "user%s%s" % (self.imap.separator, mailbox_base_name)
log.info(_("Creating new mailbox for user %s") %(mailbox_base_name))
More information about the commits
mailing list