Bug 27329 - cache_entry_ldap_filter_match() fehlerhaft
cache_entry_ldap_filter_match() fehlerhaft
Status: CLOSED FIXED
Product: UCS
Classification: Unclassified
Component: Listener (univention-directory-listener)
UCS 3.0
All Linux
: P5 normal (vote)
: UCS 3.1
Assigned To: Philipp Hahn
Stefan Gohmann
: interim-1
: 27418 (view as bug list)
Depends on:
Blocks:
  Show dependency treegraph
 
Reported: 2012-05-30 09:19 CEST by Philipp Hahn
Modified: 2015-07-15 11:17 CEST (History)
1 user (show)

See Also:
What kind of report is it?: ---
What type of bug is this?: ---
Who will be affected by this bug?: ---
How will those affected feel about the bug?: ---
User Pain:
Enterprise Customer affected?:
School Customer affected?:
ISV affected?:
Waiting Support:
Flags outvoted (downgraded) after PO Review:
Ticket number:
Bug group (optional): Troubleshooting
Max CVSS v3 score:
hahn: Patch_Available+


Attachments
Fix cache_entry_ldap_filter_match() (8.94 KB, patch)
2012-05-30 09:19 CEST, Philipp Hahn
Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Philipp Hahn univentionstaff 2012-05-30 09:19:56 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.
Comment 1 Philipp Hahn univentionstaff 2012-09-05 11:53:59 CEST
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}).
Comment 2 Stefan Gohmann univentionstaff 2012-09-11 10:13:56 CEST
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.
Comment 3 Philipp Hahn univentionstaff 2012-09-12 08:27:50 CEST
(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}).
Comment 4 Stefan Gohmann univentionstaff 2012-09-12 10:47:23 CEST
(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
Comment 5 Stefan Gohmann univentionstaff 2012-12-12 21:11:15 CET
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".
Comment 6 Philipp Hahn univentionstaff 2015-07-15 11:17:12 CEST
*** Bug 27418 has been marked as a duplicate of this bug. ***