Univention Bugzilla – Bug 17421
Fehlerhaftes Escaping von Druckerbeschreibungen und Standorten im cups-printer-Listener-Skript
Last modified: 2020-04-30 16:19:02 CEST
Aufgetreten beim Update eines Printservers auf UCS 2.3-0 bei einem Kunden: Der Start des /etc/init.d/cups dauert sehr lange weil eine ganze Reihe von Druckern vergeblich angelegt werden. In /etc/init.d/cups findet sich Code, der durch alle Dateien in /var/cache/univention-printserver iteriert und diese ausführt. Wenn der Exitcode 0 ist, werden sie anschliessend gelöscht. Die Shell-Skripte rufen univention-lpadmin auf, das wiederum über Expect lpadmin aufruft. Das kann aber nicht ausgeführt werden, da das Escaping von Beschreibungen nicht korrekt ist. Ein anonymisiertes Beispiel für ein solches Skript: #!/bin/sh /usr/sbin/univention-lpadmin -u allow root,@iosgh -p pr14012 -L Foo and Bar -m foo/km40Pnp.ppd -D Konica MIN bizhub 40P -v cupspykota:lpd://10.36.44.71 -E Es fehlen min. doppelte Anführungszeichen um die Beschreibung und den Standort. Ändere ich das Skript in #!/bin/sh /usr/sbin/univention-lpadmin -u allow root,@iosgh -p pr14012 -L "Foo and Bar" -m foo/km40Pnp.ppd -D "Konica MIN bizhub 40P" -v cupspykota:lpd://10.36.44.71 -E wird der Drucker angelegt. Die Dateien in /var/cache/univention-printserver werden durch das cups-printer Listener-Skript offenbar fehlerhaft erzeugt.
Das hatten wir meines Wissens bereits zur 2.3 angepasst aber scheinbar hier vergessen.
(In reply to comment #0) > Aufgetreten beim Update eines Printservers auf UCS 2.3-0 bei einem Kunden: > > Der Start des /etc/init.d/cups dauert sehr lange weil eine ganze Reihe von > Druckern vergeblich angelegt werden. In /etc/init.d/cups findet sich Code, der > durch alle Dateien in /var/cache/univention-printserver iteriert und diese > ausführt. Wenn der Exitcode 0 ist, werden sie anschliessend gelöscht. Die > Shell-Skripte rufen univention-lpadmin auf, das wiederum über Expect lpadmin > aufruft. Das kann aber nicht ausgeführt werden, da das Escaping von > Beschreibungen nicht korrekt ist. Ein anonymisiertes Beispiel für ein solches > Skript: > > #!/bin/sh > /usr/sbin/univention-lpadmin -u allow root,@iosgh -p pr14012 -L Foo and Bar -m > foo/km40Pnp.ppd -D Konica MIN bizhub 40P -v cupspykota:lpd://10.36.44.71 -E > > Es fehlen min. doppelte Anführungszeichen um die Beschreibung und den Standort. > Ändere ich das Skript in > > #!/bin/sh > /usr/sbin/univention-lpadmin -u allow root,@iosgh -p pr14012 -L "Foo and Bar" > -m foo/km40Pnp.ppd -D "Konica MIN bizhub 40P" -v cupspykota:lpd://10.36.44.71 > -E > > wird der Drucker angelegt. Die Dateien in /var/cache/univention-printserver > werden durch das cups-printer Listener-Skript offenbar fehlerhaft erzeugt. Kleine Korrektur: Wenn ich den Befehl in lpadmin mit " angebe funktioniert es, wenn ich die " in das Skript einfüge, das univention-lpadmin aufruft, funktioniert es nicht. Das Maschinen-Kennwort in /etc/machine.secret ist aber korrekt, ein authentifiziertes ldapsearch auf das Maschinenkonto mit dem Inhalt von /etc/machine.secret funktioniert.
*** Bug 17597 has been marked as a duplicate of this bug. ***
Bitte zunächst einen Patch an diesen Bug hängen (2.3-1 ist noch nicht freigegeben).
Created attachment 2293 [details] Ungetesteter Patch Ich hänge hier mal die erste (ungetestete!) Version des Patches an.
(In reply to comment #5) > Created an attachment (id=2293) [details] > Ungetesteter Patch > > Ich hänge hier mal die erste (ungetestete!) Version des Patches an. Patch_Available: Patch funktioniert
Aus den Argumenten werden ' und " jetzt entfernt, außerdem führende und Leerzeichen am Ende. Gebaut in ucs2.3-2.
Der Patch ist zwar etwas zu übereifrig, da doppelte Anführungszeichen innerhalb von einfachen Anführungszeichen okay sind. Einfache Anführungszeichen ließen sich aus richtig esacpen: s/'/'\''/g Patch funktioniert ansonsten. # /etc/init.d/cups stop # udm shares/printer create --superordinate "cn=printers,`ucr get ldap/base`" --set name="cc" --set model=None --set spoolHost="`ucr get ldap/master`" --set sambaName="c c" --set uri=file:"/tmp/c c" --set location='$PATH `date` $(date) '\'foo\'' "bar"' --set description='$PATH `date` $(date) '\'foo\'' "bar"' Object created: cn=cc,cn=printers,dc=univention,dc=qa # cat /var/cache/univention-printserver/* #!/bin/sh /usr/sbin/univention-lpadmin '-u' 'allow:all' '-p' 'cc' '-L' '$PATH `date` $(date) foo bar' '-D' '$PATH `date` $(date) foo bar' '-v' 'file:/tmp/c c' '-E' # /etc/init.d/cups start # ls /var/cache/univention-printserver/ # ChangeLog-Eintrag ist vorhanden. VERIFIED
UCS 2.3-2 wurde veröffentlicht. Sollte der hier beschriebene Bug mit einer neueren Version von UCS erneut auftreten, so sollte der Bug dupliziert werden: "Clone This Bug".