Univention Bugzilla – Bug 18594
Fehlendes Escaping für eval "$(ucr shell)" — ucslint
Last modified: 2012-12-12 21:09:56 CET
ucslint sollte das auch prüfen +++ This bug was initially created as a clone of Bug #18444 +++ Es sollte ein ucs-test-Modul dafür geben. +++ This bug was initially created as a clone of Bug #18443 +++ In vielen Skripten wird nur eval $(ucr shell) statt eval "$(ucr shell)" verwendet. Dies führt dazu, daß nach der Expansion von "ucr shell" die Variablenzuweisungen nochmals durch die Shell expandiert werden. Das folgende Beispiel zeigt das Problem: # echo * sources.list # ucr set test="* * *" Create test # ucr shell test test="* * *" # eval $(ucr shell test) # echo "$test" * sources.list * # eval "$(ucr shell test)" # echo "$test" * * * Das ist insbesondere UCR-Variablen mit Shell-Metazeichen kritisch: # ucr search --brief --value '[*?$`]' ldap/connection/check: */3 * * * * ldap/policy/cron: 5 * * * * mrtg/cron: */15 * * * * Siehe Bug #8417 Comment 7 für weitere Informationen. Ggf. ist Bug #17269 auch auf diese Problematik zurückzuführen. Alle Skripte sollten korrigiert werden und ggf. ein ucs-test-Test oder ucs-lint-Check eingebaut werden, der fehlerhaften Verwendung anprangert.
ucslint prüft jetzt die {pre,post}{inst,rm}-Skripte und die Joinskripte auf das "eval $(ucr shell)" Konstrukt. ucslint muss noch für univention-policy-result erweitert werden. Ggf. sollten alle im zu testenden Paket verfügbaren Shell-Skripte überprüft werden.
(In reply to comment #1) > Ggf. sollten alle im zu testenden Paket verfügbaren Shell-Skripte überprüft > werden. Das ist bei univention-check-printers aufgefallen: Die Zeile eval `/usr/sbin/univention-config-registry shell cups/checkprinters/mail/subject cups/checkprinters/mail/address` wird in univention-check-printers.sh nicht erkannt.
An Bug #18443 wurde jetzt auch umgesetzt, das alle Shell-Skript auf das fehlerhafte Konstrukt überprüft werden, von daher WORKS-FOR-ME Der Fehler in univention-check-printers ist bereits korrigiert.
Das Konstrukt ... ======================= eval `/usr/sbin/univention-config-registry shell cups/checkprinters/mail/subject cups/checkprinters/mail/address` ======================= wird von ucslint erkannt und wurde in univention-check-printers.sh durch ... ======================= eval "$(/usr/sbin/univention-config-registry shell cups/checkprinters/mail/subject cups/checkprinters/mail/address)" ======================= ersetzt. Daher: Verified.
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".