Univention Bugzilla – Bug 27329
cache_entry_ldap_filter_match() fehlerhaft
Last modified: 2015-07-15 11:17:12 CEST
Created attachment 4403 [details] Fix cache_entry_ldap_filter_match() Listener unterstützen eine ausführlichere Form, um LDAP-Filter zu spezifizieren filters = [(basedn, ldap_scope, ldap_filter), ...] (Die Dokumentation dazu fehlt btw. noch unter <http://wiki.univention.de/index.php?title=Entwicklung_von_Univention_Directory_Listener-Modulen>) Das funktioniert allerdings derzeit nicht, weil die Funktion cache_entry_ldap_filter_match() aus src/filter.c fehlerhaft ist: Dort wird per strstr() die Nadel im Heuhaufen "dn" gesucht und anschließend dieser Pointer "p" mit einem 2. Pointer verglichen, dessen Basis allerdings "(*f)->base" ist. Damit ist der Vergleich immer falsch und die Schleife beendet sich schließlich mit p=NULL, was als nicht-Treffer gewertet wird. Patch und Test-Case anbei.
Die Funktion wurde korrigiert und ein unit-Test hinzugefügrt, der während dem Build ausgeführt wird: make -C tests make[2]: Entering directory `/var/build/temp/tmp.UcAhfpsZVj/3.1-0-0/univention-directory-listener/univention-directory-listener-7.0.1/tests' gcc -g -Wall -Werror -D_FILE_OFFSET_BITS=64 -I/usr/include/db3 -DWITH_DB3 -I../src -c -o test__filter__cache_entry_ldap_filter_match.o test__filter__cache_entry_ldap_filter_match.c gcc test__filter__cache_entry_ldap_filter_match.o ../src/filter.o -o test__filter__cache_entry_ldap_filter_match set -e ; for t in test__filter__cache_entry_ldap_filter_match; do ./$t ; done +test_match_exact +test_match_one +test_match_other +test_match_sub +test_match_case +test_match_short +test_match_infix svn35234,35236, univention-directory-listener_7.0.1-1.156.201209051131 ChangeLog: svn14594 \item The implementation for the extended LDAP filter has been fixed (\ucsBug{27329}).
So gelingt es mir noch nicht das Feature zu nutzen, beispielsweise: filter='objectClass=*' filters=[('dc=deadlock14,dc=local', 0, 'objectClass=*')] Da das Feature bisher undokumentiert war und einiges aufwendiger macht, bin ich dafür das Handling dafür komplett zu entfernen.
(In reply to comment #2) > So gelingt es mir noch nicht das Feature zu nutzen, beispielsweise: > > filter='objectClass=*' > filters=[('dc=deadlock14,dc=local', 0, 'objectClass=*')] svn35517: Da hat sich doch trotz Unit-Test noch ein Fehler eingeschlichen: es wurde bei Punkten anstatt bei Kommata getrennt. Die Implementierung wurde korrigiert und passende Unit-Tests ergänzt, weil die Funktion auch weiterhin genutzt wird. > Da das Feature bisher undokumentiert war und einiges aufwendiger macht, bin ich > dafür das Handling dafür komplett zu entfernen. svn35518: Die Parsen von "filters" wurde im Code und Wiki entfernt. "filter" (ohne 's') ist im Code weiterhin als optional markiert, was einem "don't match anything" entspricht. (siehe handlers.c#handler_import() für was Optional und was Required ist) univention-directory-listener_7.0.3-3.160.201209120806 ChangeLog: svn14746 \item The implementation for the extended LDAP filter has been [-fixed-][+removed+] (\ucsBug{27329}).
(In reply to comment #3) > (In reply to comment #2) > > So gelingt es mir noch nicht das Feature zu nutzen, beispielsweise: > > > > filter='objectClass=*' > > filters=[('dc=deadlock14,dc=local', 0, 'objectClass=*')] > > svn35517: Da hat sich doch trotz Unit-Test noch ein Fehler eingeschlichen: es > wurde bei Punkten anstatt bei Kommata getrennt. Die Implementierung wurde > korrigiert und passende Unit-Tests ergänzt, weil die Funktion auch weiterhin > genutzt wird. Das habe ich nicht mehr getestet, da der Code ja jetzt entfernt wurde. Changelog: OK Replikation: OK
UCS 3.1-0 has been released: http://forum.univention.de/viewtopic.php?f=54&t=2125 If this error occurs again, please use "Clone This Bug".
*** Bug 27418 has been marked as a duplicate of this bug. ***