#! /bin/bash # # Bug #16098: univention-directory-listener cache scheint auf Master nicht aktualisiert zu werden # # Debug Listener Modul installieren: cat >/usr/lib/univention-directory-listener/system/debug.py </dev/null ;; OK) tput setaf 2 2>/dev/null ;; *) tput setaf 4 2>/dev/null ;; esac echo "$@" tput op 2>/dev/null } settleChange() { sleep 10 # ldap -> notifier -> listener delay } countDN() { # regex count local c c=$( univention-directory-listener-dump | grep -ci ^"dn: $1" || true) if [ $c -ne $2 ] then MSG ERR countDN "$@" "<>" $c exit 1 else MSG OK countDN "$@" fi } grepLog() { if grep DEBUG /var/log/univention/listener.log | tail -n 2 | grep -q "$@" then MSG OK grepLog "$@" else MSG ERR grepLog "$@" exit 1 fi } startListener() { /etc/init.d/univention-directory-listener start sleep 3 } stopListener() { local i /etc/init.d/univention-directory-listener stop & # hangs after SEGV for ((i=0;i<10;i=i+1)) do sleep 1 pidof univention-directory-listener &>/dev/null || return 0 done fuser -k /usr/sbin/univention-directory-listener &>/dev/null || true } cleanup() { set +e read udm users/user remove --dn "uid=User1,cn=users,$ldap_base" udm users/user remove --dn "uid=User2,cn=users,$ldap_base" udm users/user remove --dn "uid=User3,cn=users,$ldap_base" if grep -q User[123] /var/lib/univention-directory-listener/cache.db then /usr/sbin/univention-directory-listener -F -b "$ldap_base" -m /usr/lib/univention-directory-listener/system -c /var/lib/univention-directory-listener -d 2 -x -ZZ -D cn=admin,$ldap_base -y /etc/ldap.secret -g & local pid=$! sleep 45 kill $pid else univention-directory-listener-ctrl resync debug fi } cleanup || true trap cleanup EXIT #set -x set -e MSG listener aus UCS 2.2-0 installieren: stopListener apt-get -y --force-yes install univention-directory-listener=3.0.2-2.48.200902190935 startListener MSG Test User[123] anlegen udm users/user create --position "cn=users,$ldap_base" --set username=User1 --set description=Test0 --set password=univention --set lastname=Univention udm users/user create --position "cn=users,$ldap_base" --set username=User2 --set description=Test0 --set password=univention --set lastname=Univention udm users/user create --position "cn=users,$ldap_base" --set username=User3 --set description=Test0 --set password=univention --set lastname=Univention settleChange # Cache-Check stopListener countDN uid=User1 1 countDN uid=User2 1 countDN uid=User3 1 MSG listener aus UCS 2.3-0 installieren: apt-get -y --force-yes install univention-directory-listener=4.0.2-1.60.200911241641 startListener MSG Description am User1 ändern udm users/user modify --dn "uid=User1,cn=users,$ldap_base" --set description=Test1 settleChange # Cache-Check: zwei Einträge stopListener countDN uid=User1 2 startListener MSG Erneut Description am User1 ändern udm users/user modify --dn "uid=User1,cn=users,$ldap_base" --set description=Test2 settleChange # Check /var/log/univention/listener.log: # - Die Änderung sollte in 'old' als description 'Test1' und nicht 'Test0' zeigen grepLog 'old:.*User1.*Test0' MSG listener aus UCS 2.3-1 installieren: stopListener apt-get -y --force-yes install univention-directory-listener startListener MSG Erneut Description am User1 ändern udm users/user modify --dn "uid=User1,cn=users,$ldap_base" --set description=Test3 settleChange # Check /var/log/univention/listener.log: # - Die Änderung sollte nun in 'old' als description 'Test2' und nicht 'Test0' zeigen grepLog 'old:.*User1.*Test2' MSG User[123] löschen udm users/user remove --dn "uid=User1,cn=users,$ldap_base" udm users/user remove --dn "uid=User2,cn=users,$ldap_base" udm users/user modify --dn "uid=User3,cn=users,$ldap_base" --set description=Test3 udm users/user remove --dn "uid=User3,cn=users,$ldap_base" settleChange # Cache-Check: ein Eintrag stopListener countDN uid=User1 1 # FIXME 0 countDN uid=User2 0 countDN uid=User3 1 # FIXME 0 MSG User[23] nochmal anlegen startListener udm users/user create --position "cn=users,$ldap_base" --set username=User2 --set description=Test2 --set password=univention --set lastname=Univention udm users/user create --position "cn=users,$ldap_base" --set username=User3 --set description=Test3 --set password=univention --set lastname=Univention settleChange stopListener countDN uid=User2 1 countDN uid=User3 2 # FIXME 1 MSG User[23] endgültig löschen startListener udm users/user remove --dn "uid=User2,cn=users,$ldap_base" udm users/user remove --dn "uid=User3,cn=users,$ldap_base" settleChange stopListener countDN uid=User1 0 countDN uid=User2 0 countDN uid=User3 0 MSG Ende startListener exit 0 # vim:set ft=sh: