# Authors: # Rob Crittenden # # Copyright (C) 2009 Red Hat # see file 'COPYING' for use and warranty information # # 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 2 only # # 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 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 """ Frontend plugins for taskgroups. """ from ipalib import api from ipalib.plugins.basegroup import * display_attributes = ['cn','description', 'member', 'memberof'] container_taskgroup = "cn=taskgroups,cn=accounts" container_rolegroup = "cn=rolegroups,cn=accounts" class taskgroup(BaseGroup): """ taskgroup object. """ container=container_taskgroup api.register(taskgroup) class taskgroup_add(basegroup_add): 'Add a new taskgroup.' api.register(taskgroup_add) class taskgroup_del(basegroup_del): 'Delete an existing taskgroup.' container = container_taskgroup api.register(taskgroup_del) class taskgroup_mod(basegroup_mod): 'Edit an existing taskgroup.' container = container_taskgroup api.register(taskgroup_mod) class taskgroup_find(basegroup_find): 'Search the groups.' container = container_taskgroup api.register(taskgroup_find) class taskgroup_show(basegroup_show): 'Examine an existing taskgroup.' default_attributes = display_attributes container = container_taskgroup api.register(taskgroup_show) class taskgroup_add_member(basegroup_add_member): 'Add a member to a taskgroup.' container = container_taskgroup takes_options = basegroup_add_member.takes_options + (List('rolegroups?', doc='comma-separated list of role groups to add'),) def execute(self, cn, **kw): """ Execute the group-add-member operation. Returns the updated group entry :param cn: The group name to add new members to. :param kw: groups is a comma-separated list of groups to add :param kw: users is a comma-separated list of users to add :param kw: rolegroups is a comma-separated list of rolegroups to add """ assert self.container ldap = self.api.Backend.ldap dn = ldap.find_entry_dn("cn", cn, self.filter_class, self.container) add_failed = [] to_add = [] completed = 0 # Do the base class additions first add_failed = super(taskgroup_add_member, self).execute(cn, **kw) members = kw.get('rolegroups', []) (to_add, add_failed) = self._find_members(ldap, add_failed, members, "cn", self.filter_class, container_rolegroup) (completed, add_failed) = self._add_members(ldap, completed, to_add, add_failed, dn, "member") return add_failed api.register(taskgroup_add_member) class taskgroup_remove_member(basegroup_remove_member): 'Remove a member from a taskgroup.' container = container_taskgroup takes_options = basegroup_remove_member.takes_options + (List('rolegroups?', doc='comma-separated list of role groups to remove'),) def execute(self, cn, **kw): """ Execute the group-remove-member operation. Returns the updated group entry :param cn: The group name to remove new members from. :param kw: groups is a comma-separated list of groups to remove :param kw: users is a comma-separated list of users to remove :param kw: rolegroups is a comma-separated list of rolegroups to remove """ assert self.container ldap = self.api.Backend.ldap dn = ldap.find_entry_dn("cn", cn, self.filter_class, self.container) remove_failed = [] to_remove = [] completed = 0 # Do the base class removals first remove_failed = super(taskgroup_remove_member, self).execute(cn, **kw) members = kw.get('rolegroups', []) (to_remove, remove_failed) = self._find_members(ldap, remove_failed, members, "cn", self.filter_class, container_rolegroup) (completed, remove_failed) = self._remove_members(ldap, completed, to_remove, remove_failed, dn, "member") return remove_failed api.register(taskgroup_remove_member)