From 765279d82b24da0aac1821fea0c4c02859ffe00c Mon Sep 17 00:00:00 2001 From: Kevin McCarthy Date: Tue, 25 Sep 2007 13:35:43 -0700 Subject: Show the list of groups a user belongs to. --- ipa-server/xmlrpc-server/funcs.py | 27 +++++++++++++++++++++++++-- ipa-server/xmlrpc-server/ipaxmlrpc.py | 1 + 2 files changed, 26 insertions(+), 2 deletions(-) (limited to 'ipa-server/xmlrpc-server') diff --git a/ipa-server/xmlrpc-server/funcs.py b/ipa-server/xmlrpc-server/funcs.py index b34c5d06..2f9606d0 100644 --- a/ipa-server/xmlrpc-server/funcs.py +++ b/ipa-server/xmlrpc-server/funcs.py @@ -204,6 +204,20 @@ class IPAServer: return self.convert_entry(ent) + def __get_list (self, base, filter, sattrs=None, opts=None): + """Gets a list of entries. Each is converted to a dict of values. + Multi-valued fields are represented as lists. + """ + entries = [] + + conn = self.getConnection(opts) + try: + entries = conn.getList(base, self.scope, filter, sattrs) + finally: + self.releaseConnection(conn) + + return map(self.convert_entry, entries) + def __update_entry (self, oldentry, newentry, opts=None): """Update an LDAP entry @@ -571,7 +585,7 @@ class IPAServer: cn = self.__safe_filter(cn) filter = "(cn=" + cn + ")" return self.__get_entry(self.basedn, filter, sattrs, opts) - + def get_group_by_dn (self, dn, sattrs=None, opts=None): """Get a specific group's entry. Return as a dict of values. Multi-valued fields are represented as lists. @@ -579,7 +593,16 @@ class IPAServer: filter = "(objectClass=*)" return self.__get_entry(dn, filter, sattrs, opts) - + + def get_groups_by_member (self, member_dn, sattrs=None, opts=None): + """Get a specific group's entry. Return as a dict of values. + Multi-valued fields are represented as lists. + """ + + filter = "(&(objectClass=posixGroup)(uniqueMember=%s))" % member_dn + + return self.__get_list(self.basedn, filter, sattrs, opts) + def add_group (self, group, group_container=None, opts=None): """Add a group in LDAP. Takes as input a dict where the key is the attribute name and the value is either a string or in the case diff --git a/ipa-server/xmlrpc-server/ipaxmlrpc.py b/ipa-server/xmlrpc-server/ipaxmlrpc.py index 6e0750b4..baeb5070 100644 --- a/ipa-server/xmlrpc-server/ipaxmlrpc.py +++ b/ipa-server/xmlrpc-server/ipaxmlrpc.py @@ -326,6 +326,7 @@ def handler(req, profiling=False): h.register_function(f.modifyPassword) h.register_function(f.get_group_by_cn) h.register_function(f.get_group_by_dn) + h.register_function(f.get_groups_by_member) h.register_function(f.add_group) h.register_function(f.find_groups) h.register_function(f.add_user_to_group) -- cgit