From eebaa73d3df425e309893d30f1f9dd6f43124439 Mon Sep 17 00:00:00 2001 From: "rcritten@redhat.com" Date: Tue, 28 Aug 2007 13:52:08 -0400 Subject: Implement delete users and groups Implement adding a group to a group Some other small fixups Add new cmd-line tool ipa-delgroup --- ipa-python/ipaclient.py | 24 +++++++++++++++++++++--- ipa-python/rpcclient.py | 41 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+), 3 deletions(-) (limited to 'ipa-python') diff --git a/ipa-python/ipaclient.py b/ipa-python/ipaclient.py index 71def70f..9fd51db3 100644 --- a/ipa-python/ipaclient.py +++ b/ipa-python/ipaclient.py @@ -113,6 +113,14 @@ class IPAClient: result = self.transport.update_user(user.origDataDict(), user.toDict()) return result + def delete_user(self,uid): + """Delete a user entry.""" + + realm = config.config.get_realm() + + result = self.transport.delete_user(uid) + return result + def mark_user_deleted(self,uid): """Set a user as inactive by uid.""" @@ -202,7 +210,17 @@ class IPAClient: def update_group(self,group): """Update a group entry.""" - realm = config.config.get_realm() + return self.transport.update_group(group.origDataDict(), group.toDict()) - result = self.transport.update_group(group.origDataDict(), group.toDict()) - return result + def delete_group(self,group_cn): + """Delete a group entry.""" + + return self.transport.delete_group(group_cn) + + def add_group_to_group(self, group_cn, tgroup_cn): + """Add a group to an existing group. + group_cn is a cn of the group to add + tgroup_cn is the cn of the group to be added to + """ + + return self.transport.add_group_to_group(group_cn, tgroup_cn) diff --git a/ipa-python/rpcclient.py b/ipa-python/rpcclient.py index 3e5bb113..7d41caee 100644 --- a/ipa-python/rpcclient.py +++ b/ipa-python/rpcclient.py @@ -181,6 +181,19 @@ class RPCClient: return ipautil.unwrap_binary_data(result) + def delete_user(self,uid): + """Delete a user. uid is the uid of the user to delete.""" + server = self.setup_server() + + try: + result = server.delete_user(uid) + except xmlrpclib.Fault, fault: + raise ipaerror.gen_exception(fault.faultCode, fault.faultString) + except socket.error, (value, msg): + raise xmlrpclib.Fault(value, msg) + + return result + def mark_user_deleted(self,uid): """Mark a user as deleted/inactive""" server = self.setup_server() @@ -344,3 +357,31 @@ class RPCClient: raise xmlrpclib.Fault(value, msg) return ipautil.unwrap_binary_data(result) + + def delete_group(self,group_cn): + """Delete a group. group_cn is the cn of the group to be deleted.""" + server = self.setup_server() + + try: + result = server.delete_group(group_cn) + except xmlrpclib.Fault, fault: + raise ipaerror.gen_exception(fault.faultCode, fault.faultString) + except socket.error, (value, msg): + raise xmlrpclib.Fault(value, msg) + + return ipautil.unwrap_binary_data(result) + + def add_group_to_group(self, group_cn, tgroup_cn): + """Add a group to an existing group. + group_cn is a cn of the group to add + tgroup_cn is the cn of the group to be added to + """ + server = self.setup_server() + try: + result = server.add_group_to_group(group_cn, tgroup_cn) + except xmlrpclib.Fault, fault: + raise ipaerror.gen_exception(fault.faultCode, fault.faultString) + except socket.error, (value, msg): + raise xmlrpclib.Fault(value, msg) + + return ipautil.unwrap_binary_data(result) -- cgit From e9bd8dee3b0350c08d16d57bfd008a72cb283c48 Mon Sep 17 00:00:00 2001 From: Kevin McCarthy Date: Tue, 28 Aug 2007 16:01:07 -0700 Subject: Change user search to be asynchronous. This way it returns results even if the search times out. The find_users() search now returns a counter as the first result, which is set to -1 if the results are partial. --- ipa-python/ipaclient.py | 10 ++++++---- ipa-python/rpcclient.py | 5 +++-- 2 files changed, 9 insertions(+), 6 deletions(-) (limited to 'ipa-python') diff --git a/ipa-python/ipaclient.py b/ipa-python/ipaclient.py index 9fd51db3..fcfb29f1 100644 --- a/ipa-python/ipaclient.py +++ b/ipa-python/ipaclient.py @@ -94,12 +94,14 @@ class IPAClient: return result def find_users(self, criteria, sattrs=None): - """Find users whose uid matches the criteria. Wildcards are - acceptable. Returns a list of User objects.""" + """Return a list: counter followed by a User object for each user that + matches the criteria. If the results are truncated, counter will + be set to -1""" result = self.transport.find_users(criteria, sattrs) + counter = result[0] - users = [] - for attrs in result: + users = [counter] + for attrs in result[1:]: if attrs is not None: users.append(user.User(attrs)) diff --git a/ipa-python/rpcclient.py b/ipa-python/rpcclient.py index 7d41caee..e0d6e2ee 100644 --- a/ipa-python/rpcclient.py +++ b/ipa-python/rpcclient.py @@ -151,8 +151,9 @@ class RPCClient: return ipautil.unwrap_binary_data(result) def find_users (self, criteria, sattrs=None): - """Return a list containing a User object for each user that matches - the criteria.""" + """Return a list: counter followed by a User object for each user that + matches the criteria. If the results are truncated, counter will + be set to -1""" server = self.setup_server() try: -- cgit From a57fe697a7fbeff0596334fc75289ac378e11c61 Mon Sep 17 00:00:00 2001 From: Kevin McCarthy Date: Mon, 27 Aug 2007 09:49:35 -0700 Subject: Fix python-ldap attribution for cidict. --- ipa-python/ipautil.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'ipa-python') diff --git a/ipa-python/ipautil.py b/ipa-python/ipautil.py index 74f7cfff..be6b037f 100644 --- a/ipa-python/ipautil.py +++ b/ipa-python/ipautil.py @@ -25,9 +25,10 @@ class CIDict(dict): """ Case-insensitive but case-respecting dictionary. - Idea from python-ldap cidict, however this version extends 'dict' - so it works properly with TurboGears. + This code is derived from python-ldap's cidict.py module, + written by stroeder: http://python-ldap.sourceforge.net/ + This version extends 'dict' so it works properly with TurboGears. If you extend UserDict, isinstance(foo, dict) returns false. """ -- cgit