diff --git a/bin/check-home-permissions.py b/bin/check-home-permissions.py index 5083dcfb6d5c008fbeb0641939cc885b5b0a6b6b..bc68786ee4e64366b79885831ecc8b05be44e416 100755 --- a/bin/check-home-permissions.py +++ b/bin/check-home-permissions.py @@ -66,28 +66,32 @@ class Home(object): def search_ldap(): ldap = dphysldap.Ldap() - ldap_users = dphysldap.Users(ldap, ['uid', 'uidNumber', 'gidNumber', 'homeDirectory', 'blocked']) - entries = dphysldap.Entries(ldap, ['cn', 'nisMapEntry']) + people = 'ou=people,dc=phys,dc=ethz,dc=ch' auto_home = 'nisMapName=auto.home,ou=automount,dc=phys,dc=ethz,dc=ch' - ldap_users.search('*') + ldap.search('(objectClass=posixAccount)', search_base=people, attributes=['uid', 'blocked', 'homeDirectory']) + ldap_users = ldap.response for user in ldap_users: user_attrs = {} - user_attrs['homeDirectory'] = user['homeDirectory'][0] - if user['blocked']: - user_attrs['blocked'] = user['blocked'][0] + user_attrs['homeDirectory'] = user['attributes']['homeDirectory'] + if user['attributes']['blocked']: + user_attrs['blocked'] = user['attributes']['blocked'] else: - no_blocked.append(user['uid'][0]) + no_blocked.append(user['attributes']['uid'][0]) user_attrs['blocked'] = 'no' - users[user['uid'][0]] = user_attrs + users[user['attributes']['uid'][0]] = user_attrs - entries.search('cn: *, nisMapEntry: phd-home*', ['nisObject'], base=auto_home) + ldap.search('(&(objectClass=nisObject)(cn=*)(nisMapEntry=phd-home*))', + search_base=auto_home, attributes=['cn', 'nisMapEntry']) + entries = ldap.response for entry in entries: - nis_homes[entry['cn'][0]] = entry['nisMapEntry'][0] + nis_homes[entry['attributes']['cn'][0]] = entry['attributes']['nisMapEntry'] - entries.search('cn: *, nisMapEntry: != phd-home*', ['nisObject'], base=auto_home) + ldap.search('(&(objectClass=nisObject)(cn=*)(!(nisMapEntry=phd-home*)))', + search_base=auto_home, attributes=['cn', 'nisMapEntry']) + entries = ldap.response for entry in entries: - nis_shares[entry['cn'][0]] = entry['nisMapEntry'][0] + nis_shares[entry['attributes']['cn'][0]] = entry['attributes']['nisMapEntry'] def check_homes(top): diff --git a/lib/isg/dphysldap.py b/lib/isg/dphysldap.py index 80b2c40953f9884874f8b4d2e57fa5cde93d37b9..7aaeb68f2889d68588a01a58e1de124c22a997e3 100644 --- a/lib/isg/dphysldap.py +++ b/lib/isg/dphysldap.py @@ -241,6 +241,25 @@ class Ldap(object): entries = self.get_entries(obj=self.obj_group, query=query, attributes=attributes) return [Group(e) for e in entries] + def search(self, search_filter, search_base=None, search_scope=ldap3.SUBTREE, + attributes=[ldap3.ALL_ATTRIBUTES, ldap3.ALL_OPERATIONAL_ATTRIBUTES]): + """ + LDAP search operation + """ + if not search_base: + search_base = self.base + response = self.connection.search(search_base, search_filter, + search_scope=search_scope, + attributes=attributes) + return response + + @property + def response(self): + """ + Get search operation response + """ + return self.connection.response + class Entries(list): """