Bug 19428 - univention-directory-policy wertet ldap/server/addition nicht aus
univention-directory-policy wertet ldap/server/addition nicht aus
Status: CLOSED FIXED
Product: UCS
Classification: Unclassified
Component: LDAP
UCS 2.4
Other Linux
: P5 normal (vote)
: UCS 3.1
Assigned To: Felix Botner
Arvid Requate
: interim-3
: 22186 (view as bug list)
Depends on:
Blocks:
  Show dependency treegraph
 
Reported: 2010-08-12 17:21 CEST by Sönke Schwardt-Krummrich
Modified: 2013-03-24 21:21 CET (History)
4 users (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):
Max CVSS v3 score:
walter: Patch_Available+


Attachments
UCS 2.4 Patches (10.00 KB, patch)
2011-10-20 16:13 CEST, Lukas Walter
Details | Diff
UCS 3.0 Patches (10.00 KB, patch)
2011-10-20 16:16 CEST, Lukas Walter
Details | Diff
Patch für univention-policy (free für duplizierte Strings). (425 bytes, patch)
2012-11-13 18:28 CET, Arvid Requate
Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Sönke Schwardt-Krummrich univentionstaff 2010-08-12 17:21:21 CEST
In /etc/init.d/univention-directory-policy wird nur die Erreichbarkeit des Hosts ldap/server/name geprüft. ldap/server/addition wird im Fehlerfall nicht geprüft.

if /bin/netcat -q0 -w4 $ldap_server_name 389 </dev/null >/dev/null 2>&1; then
     run-parts /usr/lib/univention-directory-policy \
                       >>/var/log/univention/ldap-policy.log 2>&1

Es sollte auch geprüft werden, ob die Skripte unterhalb von 
"/usr/lib/univention-directory-policy" ldap/server/addition auch (nicht) auswerten.
Comment 1 Lukas Walter univentionstaff 2011-10-20 16:13:03 CEST
Created attachment 3659 [details]
UCS 2.4 Patches

Der im Archiv enthaltene Patch univention-directory-policy.init.diff fügt dem script (2.4)/univention-directory-policy/debian/univention-directory-policy.init einen else-Zweig hinzu der ausgeführt wird sollte der primäre ldap-Server nicht erreichbar sein. 

Im else-Zweig wird über die in ldap/server/addition enthaltenen FQDNS iteriert und jeweils geprüft ob der zur FQDN gehörende ldap-Server erreichbar ist oder nicht.

Sollte er es sein wird "run-parts /usr/lib/univention-directory-policy --host $host" (wobei $host der aktuellen FQDN des aktiven ldap-Servers entspricht) aufgerufen und entsprechend ausgewertet.



Der ebenfalls im Archiv enthaltene Patch nfsmounts.py.diff passt das script  (2.4)/univention-config-registry/nfsmounts.py so an, dass der im else-Zweig durch run-parts an /usr/lib/univention-directory-policy übergebene Paramter "--host" dementsprechend berücksichtig wird.
Comment 2 Lukas Walter univentionstaff 2011-10-20 16:16:40 CEST
Created attachment 3660 [details]
UCS 3.0 Patches

Der im Archiv enthaltene Patch univention-directory-policy.init.diff fügt dem script (3.0)/univention-directory-policy/debian/univention-directory-policy.init einen else-Zweig hinzu der ausgeführt wird sollte der primäre ldap-Server nicht erreichbar sein. 

Im else-Zweig wird über die in ldap/server/addition enthaltenen FQDNS iteriert und jeweils geprüft ob der zur FQDN gehörende ldap-Server erreichbar ist oder nicht.

Sollte er es sein wird "run-parts /usr/lib/univention-directory-policy --host $host" (wobei $host der aktuellen FQDN des aktiven ldap-Servers entspricht) aufgerufen und entsprechend ausgewertet.



Der ebenfalls im Archiv enthaltene Patch nfsmounts.py.diff passt das script  (3.0)/univention-base-files/univention-directory-policy/nfsmounts.py so an, dass der im else-Zweig durch run-parts an /usr/lib/univention-directory-policy übergebene Paramter "--host" dementsprechend berücksichtig wird.
Comment 3 Lukas Walter univentionstaff 2011-10-20 16:17:24 CEST
Sowohl die Patches für 2.4 und 3.0 müssten abermals getestet werden. Funktionsweise der Änderungen an nfsmounts.py ist nicht verifiziert.
Comment 4 Alexander Kläser univentionstaff 2011-11-07 00:00:04 CET
Info zum Patch, in der Zeile:

opts, pargs = getopt.getopt(sys.argv[1:], 'hsvh', ['help', 'simulate', 'verbose', 'host'])

sollte --host nicht auf -h, sondern -H gemappt werden (ansonsten gibt es eine Überschneidung mit --help). 

(Kleiner Hinweis: Bitte Patches als Patches an den Bug hängen, dann können sie einfach betrachtet werden.)
Comment 5 Felix Botner univentionstaff 2012-11-01 15:36:24 CET
/etc/init.d/univention-directory-policy (univention-directory-policy) wurde entsprechend angepasst (zunächst wird $ldap_server_name getestet, dann $ldap_server_addition, bei Erfolg wird run-parts aufgerufen und die Schleife beendet)

Unter /usr/lib/univention-directory-policy habe ich keine Skripte mehr gefunden, die direkt $ldap_server_name verwenden. Jedoch verwenden alle univention_policy_result und das ging bisher nur gegen $ldap_server_name.

univention_policy_result (univention-policy) wurde auch angepasst. Wenn kein Host angegeben wurde und das erste univention_ldap_open (auf $ldap_server_name, siehe lib/ldap.c -> univention_ldap_open()) fehl schlägt, wird ldap/server/addition ausgelesen und auf alle Elemente (Leerzeichen ist Trenner!) ein univention_ldap_open versucht, bis eines erfolgreich ist.
Comment 6 Arvid Requate univentionstaff 2012-11-13 18:28:38 CET
Created attachment 4788 [details]
Patch für univention-policy (free für duplizierte Strings).
Comment 7 Felix Botner univentionstaff 2012-11-14 10:10:08 CET
(In reply to comment #6)
> Created an attachment (id=4788) [details]
> Patch für univention-policy (free für duplizierte Strings).

eingebaut.
Comment 8 Arvid Requate univentionstaff 2012-11-14 17:01:55 CET
root@slave:~# ucr set ldap/server/name="invalid1
root@slave:~# ucr set ldap/server/addition="invalid2 invalid3 invalid4"
root@slave:~# /usr/bin/univention-policy-result -D "$ldap_hostdn"\
               -y /etc/machine.secret "$ldap_hostdn"
could not open policy for cn=slave,cn=dc,cn=computers,dc=arucs31i5,dc=qa

*** glibc detected *** /usr/bin/univention-policy-result: double free or corruption (fasttop): 0x00000000022fb670 ***
======= Backtrace: =========
/lib/libc.so.6(+0x71e16)[0x7f6c5d7f6e16]
/lib/libc.so.6(cfree+0x6c)[0x7f6c5d7fbb8c]
/usr/lib/libuniventionpolicy.so.0(univention_ldap_close+0x62)[0x7f6c5dae98f2]
/usr/bin/univention-policy-result[0x40155d]
/lib/libc.so.6(__libc_start_main+0xfd)[0x7f6c5d7a3c8d]
/usr/bin/univention-policy-result[0x401149]
Comment 9 Felix Botner univentionstaff 2012-11-15 11:07:22 CET
Kann ich nicht nachvollziehen.

->  ucr set ldap/server/name="invalid1"  ldap/server/addition="invalid2 invalid3 invalid4"

-> univention_policy_result   -D $(ucr get ldap/hostdn) -y /etc/machine.secret $(ucr get ldap/hostdn)
could not open policy for cn=master,cn=dc,cn=computers,dc=ucs,dc=new

# master.ucs.new ist der erreichbare UCS Master
-> ucr set ldap/server/name="invalid1"  ldap/server/addition="invalid2 invalid3 invalid4 master.ucs.new"

-> univention_policy_result   -D $(ucr get ldap/hostdn) -y /etc/machine.secret $(ucr get ldap/hostdn)
DN: cn=master,cn=dc,cn=computers,dc=ucs,dc=new

POLICY cn=master,cn=dc,cn=computers,dc=ucs,dc=new

Policy: cn=default-users,cn=admin-settings,cn=users,cn=policies,dc=ucs,dc=new
Attribute: univentionAdminMayOverrideSettings
Value: 0
...
Comment 10 Felix Botner univentionstaff 2012-11-15 11:27:11 CET
OK, hatte nicht mit der aktuellen Version getestet.
Comment 11 Felix Botner univentionstaff 2012-11-15 11:48:12 CET
univention_policy_result.c gibt ldap_parameters->hosf nun mit FREE frei. Dadurch wird der Pointer zugleich auf NULL gesetzt und ein späteres FREE in lib/ldap.c.univention_ldap_close() führt nicht mehr zum Fehler.
Comment 12 Arvid Requate univentionstaff 2012-11-15 13:36:21 CET
Ok, funktioniert super, mit gültigen und ungültigen Servernamen.
Comment 13 Stefan Gohmann univentionstaff 2012-12-12 21:09:49 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 14 Stefan Gohmann univentionstaff 2013-03-24 21:21:23 CET
*** Bug 22186 has been marked as a duplicate of this bug. ***