Branch 'pykolab-0.5' - 2 commits - pykolab/cli pykolab/imap pykolab.spec.in

Jeroen van Meeuwen vanmeeuwen at kolabsys.com
Tue Aug 7 13:34:48 CEST 2012


 pykolab.spec.in                       |    2 
 pykolab/cli/cmd_delete_mailbox_acl.py |   65 ++++++++++++++++++++++++++++++
 pykolab/cli/cmd_list_mailbox_acls.py  |   61 ++++++++++++++++++++++++++++
 pykolab/cli/cmd_set_mailbox_acl.py    |   72 ++++++++++++++++++++++++++++++++++
 pykolab/imap/__init__.py              |   13 ++++++
 5 files changed, 212 insertions(+), 1 deletion(-)

New commits:
commit 9ae42876d8138f9b5a91762ad22500123d88fc0e
Author: Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen at kolabsys.com>
Date:   Tue Aug 7 12:34:03 2012 +0100

    Add new command-line utility commands lam, sam and dam (list, set and delete ACLs entries on mailboxes)

diff --git a/pykolab/cli/cmd_delete_mailbox_acl.py b/pykolab/cli/cmd_delete_mailbox_acl.py
new file mode 100644
index 0000000..1bf2ad6
--- /dev/null
+++ b/pykolab/cli/cmd_delete_mailbox_acl.py
@@ -0,0 +1,65 @@
+# -*- coding: utf-8 -*-
+# Copyright 2010-2012 Kolab Systems AG (http://www.kolabsys.com)
+#
+# Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen a kolabsys.com>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; version 3 or, at your option, any later version
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU Library General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+
+import sys
+
+import commands
+
+import pykolab
+
+from pykolab.imap import IMAP
+from pykolab.translate import _
+from pykolab import utils
+
+log = pykolab.getLogger('pykolab.cli')
+conf = pykolab.getConf()
+
+def __init__():
+    commands.register('delete_mailbox_acl', execute, description=description(), aliases=['dam'])
+
+def description():
+    return """Delete an ACL entry for a folder."""
+
+def execute(*args, **kw):
+    try:
+        folder = conf.cli_args.pop(0)
+        try:
+            identifier = conf.cli_args.pop(0)
+        except IndexError, errmsg:
+            identifier = utils.ask_question(_("ACI Subject"))
+
+    except IndexError, errmsg:
+        folder = utils.ask_question(_("Folder name"))
+        quota = utils.ask_question(_("ACI Subject"))
+
+    if len(folder.split('@')) > 1:
+        domain = folder.split('@')[1]
+    else:
+        domain = conf.get('kolab', 'primary_domain')
+
+    imap = IMAP()
+    imap.connect(domain=domain)
+
+    if not imap.has_folder(folder):
+        print >> sys.stderr, _("No such folder %r") % (folder)
+
+    else:
+        folders = imap.lm(folder)
+        for folder in folders:
+            imap.set_acl(folder, identifier, '')
\ No newline at end of file
diff --git a/pykolab/cli/cmd_list_mailbox_acls.py b/pykolab/cli/cmd_list_mailbox_acls.py
new file mode 100644
index 0000000..10a3321
--- /dev/null
+++ b/pykolab/cli/cmd_list_mailbox_acls.py
@@ -0,0 +1,61 @@
+# -*- coding: utf-8 -*-
+# Copyright 2010-2012 Kolab Systems AG (http://www.kolabsys.com)
+#
+# Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen a kolabsys.com>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; version 3 or, at your option, any later version
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU Library General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+
+import commands
+
+import pykolab
+
+from pykolab.imap import IMAP
+from pykolab.translate import _
+from pykolab import utils
+
+log = pykolab.getLogger('pykolab.cli')
+conf = pykolab.getConf()
+
+def __init__():
+    commands.register('list_mailbox_acls', execute, description=description(), aliases=['lam'])
+
+def description():
+    return """Obtain a list of ACL entries on a folder."""
+
+def execute(*args, **kw):
+    try:
+        folder = conf.cli_args.pop(0)
+    except IndexError, errmsg:
+        folder = utils.ask_question(_("Folder name"))
+
+    if len(folder.split('@')) > 1:
+        domain = folder.split('@')[1]
+    else:
+        domain = conf.get('kolab', 'primary_domain')
+
+    imap = IMAP()
+    imap.connect(domain=domain)
+
+    if not imap.has_folder(folder):
+        print >> sys.stderr, _("No such folder %r") % (folder)
+
+    else:
+        acls = []
+        folders = imap.lm(folder)
+        for folder in folders:
+            acls.append((folder, imap.list_acls(folder)))
+
+        for folder, acl in acls:
+            print folder, acl
diff --git a/pykolab/cli/cmd_set_mailbox_acl.py b/pykolab/cli/cmd_set_mailbox_acl.py
new file mode 100644
index 0000000..8ba4567
--- /dev/null
+++ b/pykolab/cli/cmd_set_mailbox_acl.py
@@ -0,0 +1,72 @@
+# -*- coding: utf-8 -*-
+# Copyright 2010-2012 Kolab Systems AG (http://www.kolabsys.com)
+#
+# Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen a kolabsys.com>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; version 3 or, at your option, any later version
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU Library General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+
+import sys
+
+import commands
+
+import pykolab
+
+from pykolab.imap import IMAP
+from pykolab.translate import _
+from pykolab import utils
+
+log = pykolab.getLogger('pykolab.cli')
+conf = pykolab.getConf()
+
+def __init__():
+    commands.register('set_mailbox_acl', execute, description=description(), aliases=['sam'])
+
+def description():
+    return """Set an ACL for a identifier on a folder."""
+
+def execute(*args, **kw):
+    try:
+        folder = conf.cli_args.pop(0)
+        try:
+            identifier = conf.cli_args.pop(0)
+            try:
+                acl = conf.cli_args.pop(0)
+            except IndexError, errmsg:
+                acl = utils.ask_question(_("ACI Permissions"))
+
+        except IndexError, errmsg:
+            identifier = utils.ask_question(_("ACI Subject"))
+            acl = utils.ask_question(_("ACI Permissions"))
+
+    except IndexError, errmsg:
+        folder = utils.ask_question(_("Folder name"))
+        identifier = utils.ask_question(_("ACI Subject"))
+        acl = utils.ask_question(_("ACI Permissions"))
+
+    if len(folder.split('@')) > 1:
+        domain = folder.split('@')[1]
+    else:
+        domain = conf.get('kolab', 'primary_domain')
+
+    imap = IMAP()
+    imap.connect(domain=domain)
+
+    if not imap.has_folder(folder):
+        print >> sys.stderr, _("No such folder %r") % (folder)
+
+    else:
+        folders = imap.lm(folder)
+        for folder in folders:
+            imap.set_acl(folder, identifier, acl)
diff --git a/pykolab/imap/__init__.py b/pykolab/imap/__init__.py
index e5344c7..65c232c 100644
--- a/pykolab/imap/__init__.py
+++ b/pykolab/imap/__init__.py
@@ -248,6 +248,13 @@ class IMAP(object):
 
         return (_personal, _other_users, _shared)
 
+    def set_acl(self, folder, identifier, acl):
+        """
+            Set an ACL entry on a folder.
+        """
+
+        self.imap.sam(folder, identifier, acl)
+
     def shared_folder_create(self, folder_path, server=None):
         """
             Create a shared folder.
@@ -767,6 +774,12 @@ class IMAP(object):
     def get_quota_root(self, mailfolder_path):
         return self.lqr(mailfolder_path)
 
+    def list_acls(self, folder):
+        """
+            List the ACL entries on a folder
+        """
+        return self.imap.lam(folder)
+
     def list_user_folders(self, primary_domain=None, secondary_domains=[]):
         """
             List the INBOX folders in the IMAP backend. Returns a list of unique


commit e935591a4cb62f85e5590d914b5913d051ac4836
Author: Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen at kolabsys.com>
Date:   Tue Aug 7 11:39:06 2012 +0100

    Fix typo

diff --git a/pykolab.spec.in b/pykolab.spec.in
index 1ae1643..00261f8 100644
--- a/pykolab.spec.in
+++ b/pykolab.spec.in
@@ -258,7 +258,7 @@ fi
 if [ $1 = 0 ]; then
 %if 0%{?fedora} >= 15
     /bin/systemctl --no-reload disable wallace.service
-    /biin/systemctl stop wallace.service
+    /bin/systemctl stop wallace.service
 %else
     /sbin/service wallace stop > /dev/null 2>&1
     /sbin/chkconfig --del wallace





More information about the commits mailing list