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