Univention Bugzilla – Bug 23189
univention-policy-result Parameter -W -p
Last modified: 2012-07-20 15:24:33 CEST
univention-policy-result ruft getopt mit den Parametern "-W" und "-p" in der Syntax auf, diese Parameter werden jedoch nicht ausgewertet. Wenn man u-p-r mit einem dieser Parameter aufruft, erscheint keine Fehlermeldung für den falschen Parameter, sondern nur die usage().
Das Programm univention-policy-result kann auf folgende Weise getestet werden. eval $(ucr shell) univention-policy-result -s \ -D "uid=Administrator,cn=users,$ldap_base" \ -w univention "$ldap_hostdn" Das Programm soll in Zukunft die Optionen "-W" und "-p" auswerten und ordentliche Fehlermeldungen bringen, wenn was nicht stimmt.
Ich hab beide Optionen implementiert und getestet mit univention_policy_result -s -D "uid=Administrator,cn=users,$ldap_base" -W -p 7389 "$ldap_hostdn" ; echo $? Fehlende Argumente in Optionen und undefinierte Optionen werden nun auch gemeldet. Das changelog im Handbuch hab ich im Abschnitt "others" ergänzt.
Die Abfrage des Passworts als Standard-Benutzer mit univention-policy-result -D uid=Administrator,cn=users,dc=jmm302,dc=test -W uid=Administrator,cn=users,dc=jmm302,dc=test funktioniert. Für -p gibt es aber keine korrekte Fehlerbehandlung: Auf einem System mit Samba 4 kann der 389-Port des S4-LDAP nicht für Policy Result verwendet werden. Gebe ich diesen Port oder einen fiktiven 222-Port ein, bekomme ich folgende Ausgabe anstatt einer Fehlermeldung: jmm01@master:~$ univention-policy-result -p 222 -D uid=Administrator,cn=users,dc=jmm302,dc=test -W uid=Administrator,cn=users,dc=jmm302,dc=test Enter LDAP Password: Return 1 uid=Administrator,cn=users,dc=jmm302,dc=test
Ich hab die Fehlermeldung an einer Stelle geändert auf "could not open policy for %s\n\n". An anderer Stelle habe ich eine Meldung eingefügt, wo keine war und an dann gab es noch eine Stelle wo die Meldung nur kam, wenn OUTPUT_VERBOSE war. Durch meine Änderungen sollte nun jeder Fehlerfall als Text gemeldet werden (auch ohne OUTPUT_VERBOSE). --- tools/univention_policy_result.c (Revision 33926) +++ tools/univention_policy_result.c (Arbeitskopie) @@ -188,9 +188,7 @@ dn = argv[argc - 1]; if ((rc = univention_ldap_open(ldap_parameters)) != 0) { - if (output == OUTPUT_VERBOSE) { - printf("Return 1 %s\n\n", dn); - } + fprintf(stderr, "could not open policy for %s\n\n", dn); goto err2; } @@ -265,8 +263,10 @@ } univention_policy_close(handle); rc = 0; - } else + } else { rc = 1; + printf("could not open policy\n"); + } err2: univention_ldap_close(ldap_parameters); err1: Das von Moritz beschriebene Problem wird nun ordentlich gemeldet: univention_policy_result -s -D "uid=Administrator,cn=users,$ldap_base" -p 222 -w univention "$ldap_hostdn" ; echo $? could not open policy for cn=ucs30-64-backup,cn=dc,cn=computers,dc=jkahrs,dc=dev 1
Weil es mir gerade auffällt: (In reply to comment #4) > --- tools/univention_policy_result.c (Revision 33926) > +++ tools/univention_policy_result.c (Arbeitskopie) ... > - printf("Return 1 %s\n\n", dn); ... > + fprintf(stderr, "could not open policy for %s\n\n", dn); ... > + printf("could not open policy\n"); Fehlermeldungen gehören nach stderr, von daher ist die erste Änderung gut, aber bei der 2. Änderung sollte das auch noch umgesetzt werden. Begründung: univention-policy-result wird von vielen Shell-Skripten (und auch vom Python-Wrapper) aufgerufen, die die Ausgabe von u-p-r parsen. Steht dort plötzlich eine Fehlermeldung statt der erwarteten Ausgabe, können schlimme Dinge™ passieren: <http://de.wikipedia.org/wiki/Ariane_V88>
Ja, stimmt, hab ich gleich eingebaut und Paket univention-policy neu gebaut für 3.0-2. -- tools/univention_policy_result.c (Revision 33948) +++ tools/univention_policy_result.c (Arbeitskopie) @@ -265,7 +265,7 @@ rc = 0; } else { rc = 1; - printf("could not open policy\n"); + fprintf(stderr, "could not open policy\n"); } err2: univention_ldap_close(ldap_parameters);
Ok, es kommt jetzt eine verständliche Fehlermeldung: root@master:~# univention-policy-result -p 222 -D uid=Administrator,cn=users,dc=jmm302,dc=test -W uid=Administrator,cn=users,dc=jmm302,dc=test Enter LDAP Password: could not open policy for uid=Administrator,cn=users,dc=jmm302,dc=test Changelog vorhanden.
UCS 3.0-2 has been released: http://forum.univention.de/viewtopic.php?f=54&t=1905 If this error occurs again, please use "Clone This Bug".