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