summaryrefslogtreecommitdiff
path: root/pynslcd/group.py
diff options
context:
space:
mode:
authorArthur de Jong <arthur@arthurdejong.org>2011-12-12 22:59:00 +0000
committerArthur de Jong <arthur@arthurdejong.org>2011-12-12 22:59:00 +0000
commit8c480f86c83b45d8922ae2b7353874ed499f3df1 (patch)
treeff609b39a803cf74d59f1a53fda272e73f1c0097 /pynslcd/group.py
parent330a28040095fff67e9cb105019f3b4cb7cb5f0e (diff)
define the search separately from the request
git-svn-id: http://arthurdejong.org/svn/nss-pam-ldapd/nss-pam-ldapd@1571 ef36b2f9-881f-0410-afb5-c4e39611909c
Diffstat (limited to 'pynslcd/group.py')
-rw-r--r--pynslcd/group.py39
1 files changed, 26 insertions, 13 deletions
diff --git a/pynslcd/group.py b/pynslcd/group.py
index aacc44e..00a39eb 100644
--- a/pynslcd/group.py
+++ b/pynslcd/group.py
@@ -40,10 +40,33 @@ attmap = common.Attributes(cn='cn',
filter = '(|(objectClass=posixGroup)(objectClass=groupOfNames))'
-class GroupRequest(common.Request):
+class Search(common.Search):
case_sensitive = ('cn', )
limit_attributes = ('cn', 'gidNumber')
+
+ def __init__(self, *args, **kwargs):
+ super(Search, self).__init__(*args, **kwargs)
+ if attmap['member'] and 'memberUid' in self.parameters:
+ # set up our own attributes that leave out membership attributes
+ self.attmap = common.Attributes(self.attmap)
+ del self.attmap['memberUid']
+ del self.attmap['member']
+
+ def mk_filter(self):
+ # we still need a custom mk_filter because this is an | query
+ if attmap['member'] and 'memberUid' in self.parameters:
+ memberuid = self.parameters['memberUid']
+ dn = uid2dn(self.conn, memberuid)
+ if dn:
+ return '(&%s(|(%s=%s)(%s=%s)))' % ( self.filter,
+ attmap['memberUid'], ldap.filter.escape_filter_chars(memberuid),
+ attmap['member'], ldap.filter.escape_filter_chars(dn) )
+ return super(Search, self).mk_filter()
+
+
+class GroupRequest(common.Request):
+
wantmembers = True
def write(self, dn, attributes, parameters):
@@ -96,6 +119,8 @@ class GroupByGidRequest(GroupRequest):
return dict(gidNumber=fp.read_gid_t())
+
+
class GroupByMemberRequest(GroupRequest):
action = constants.NSLCD_ACTION_GROUP_BYMEMBER
@@ -113,18 +138,6 @@ class GroupByMemberRequest(GroupRequest):
common.validate_name(memberuid)
return dict(memberUid=memberuid)
- def mk_filter(self, parameters):
- # we still need a custom mk_filter because this is an | query
- memberuid = parameters['memberUid']
- if attmap['member']:
- dn = uid2dn(self.conn, memberuid)
- if dn:
- return '(&%s(|(%s=%s)(%s=%s)))' % ( self.filter,
- attmap['memberUid'], ldap.filter.escape_filter_chars(memberuid),
- attmap['member'], ldap.filter.escape_filter_chars(dn) )
- return '(&%s(%s=%s))' % ( self.filter,
- attmap['memberUid'], ldap.filter.escape_filter_chars(memberuid) )
-
class GroupAllRequest(GroupRequest):