From ee6a25f9ea4b774745f285e43729dddc489be29e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Sven=20M=C3=A4der?= <maeder@phys.ethz.ch>
Date: Thu, 23 Aug 2018 19:15:14 +0200
Subject: [PATCH] Use fast search in xymon check

---
 bin/check-home-permissions.py | 21 ++++++++++++++-------
 bin/xymon-home.py             | 35 +++++++++++++++++++++++------------
 2 files changed, 37 insertions(+), 19 deletions(-)

diff --git a/bin/check-home-permissions.py b/bin/check-home-permissions.py
index bc68786..4409261 100755
--- a/bin/check-home-permissions.py
+++ b/bin/check-home-permissions.py
@@ -72,26 +72,33 @@ def search_ldap():
     ldap.search('(objectClass=posixAccount)', search_base=people, attributes=['uid', 'blocked', 'homeDirectory'])
     ldap_users = ldap.response
     for user in ldap_users:
+        uid = user['attributes']['uid'][0]
+        blocked = user['attributes']['blocked']
+        home_dir = user['attributes']['homeDirectory']
         user_attrs = {}
-        user_attrs['homeDirectory'] = user['attributes']['homeDirectory']
-        if user['attributes']['blocked']:
-            user_attrs['blocked'] = user['attributes']['blocked']
+        user_attrs['homeDirectory'] = home_dir
+        if blocked:
+            user_attrs['blocked'] = blocked
         else:
-            no_blocked.append(user['attributes']['uid'][0])
+            no_blocked.append(uid)
             user_attrs['blocked'] = 'no'
-        users[user['attributes']['uid'][0]] = user_attrs
+        users[uid] = user_attrs
 
     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['attributes']['cn'][0]] = entry['attributes']['nisMapEntry']
+        cn = entry['attributes']['cn'][0]
+        nis_map = entry['attributes']['nisMapEntry']
+        nis_homes[cn] = nis_map
 
     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['attributes']['cn'][0]] = entry['attributes']['nisMapEntry']
+        cn = entry['attributes']['cn'][0]
+        nis_map = entry['attributes']['nisMapEntry']
+        nis_shares[cn] = nis_map
 
 
 def check_homes(top):
diff --git a/bin/xymon-home.py b/bin/xymon-home.py
index d0c7f98..53b3019 100755
--- a/bin/xymon-home.py
+++ b/bin/xymon-home.py
@@ -72,28 +72,39 @@ class Home(object):
 
 def search_ldap():
     ldap = dphysldap.Ldap()
-    ldap_users = dphysldap.Users(ldap, ['uid', 'uidNumber', 'gidNumber', 'homeDirectory'])
-    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:
+        uid = user['attributes']['uid'][0]
+        blocked = user['attributes']['blocked']
+        home_dir = user['attributes']['homeDirectory']
         user_attrs = {}
-        user_attrs['homeDirectory'] = user['homeDirectory'][0]
-        if user['blocked']:
-            user_attrs['blocked'] = user['blocked'][0]
+        user_attrs['homeDirectory'] = home_dir
+        if blocked:
+            user_attrs['blocked'] = blocked
         else:
-            no_blocked.append(user['uid'][0])
+            no_blocked.append(uid)
             user_attrs['blocked'] = 'no'
-        users[user['uid'][0]] = user_attrs
+        users[uid] = 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]
+        cn = entry['attributes']['cn'][0]
+        nis_map = entry['attributes']['nisMapEntry']
+        nis_homes[cn] = nis_map
 
-    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]
+        cn = entry['attributes']['cn'][0]
+        nis_map = entry['attributes']['nisMapEntry']
+        nis_shares[cn] = nis_map
 
 
 def check_homes(top):
-- 
GitLab