summaryrefslogtreecommitdiffstats
path: root/pykolab
diff options
context:
space:
mode:
authorJeroen van Meeuwen (Kolab Systems) <vanmeeuwen@kolabsys.com>2012-08-07 12:34:03 +0100
committerJeroen van Meeuwen (Kolab Systems) <vanmeeuwen@kolabsys.com>2012-08-07 12:34:42 +0100
commit9ae42876d8138f9b5a91762ad22500123d88fc0e (patch)
tree1996531b3487d26bf4d613908e4983d803366e6d /pykolab
parente935591a4cb62f85e5590d914b5913d051ac4836 (diff)
downloadpykolab-9ae42876d8138f9b5a91762ad22500123d88fc0e.tar.gz
Add new command-line utility commands lam, sam and dam (list, set and delete ACLs entries on mailboxes)
Diffstat (limited to 'pykolab')
-rw-r--r--pykolab/cli/cmd_delete_mailbox_acl.py65
-rw-r--r--pykolab/cli/cmd_list_mailbox_acls.py61
-rw-r--r--pykolab/cli/cmd_set_mailbox_acl.py72
-rw-r--r--pykolab/imap/__init__.py13
4 files changed, 211 insertions, 0 deletions
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