diff options
author | Arthur de Jong <arthur@arthurdejong.org> | 2011-12-12 22:59:00 +0000 |
---|---|---|
committer | Arthur de Jong <arthur@arthurdejong.org> | 2011-12-12 22:59:00 +0000 |
commit | 8c480f86c83b45d8922ae2b7353874ed499f3df1 (patch) | |
tree | ff609b39a803cf74d59f1a53fda272e73f1c0097 /pynslcd/group.py | |
parent | 330a28040095fff67e9cb105019f3b4cb7cb5f0e (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.py | 39 |
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): |