Bug 17421

Summary: Fehlerhaftes Escaping von Druckerbeschreibungen und Standorten im cups-printer-Listener-Skript
Product: UCS Reporter: Moritz Muehlenhoff <jmm>
Component: PrintserverAssignee: Felix Botner <botner>
Status: CLOSED FIXED QA Contact: Philipp Hahn <hahn>
Severity: normal    
Priority: P5 CC: gohmann, meybohm
Version: UCS 2.3Flags: walkenhorst: Patch_Available+
Target Milestone: UCS 2.3-2   
Hardware: Other   
OS: Linux   
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:
Bug Depends on:    
Bug Blocks: 51196    
Attachments: Ungetesteter Patch

Description Moritz Muehlenhoff univentionstaff 2010-01-21 08:44:52 CET
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.
Comment 1 Stefan Gohmann univentionstaff 2010-01-21 08:49:03 CET
Das hatten wir meines Wissens bereits zur 2.3 angepasst aber scheinbar hier vergessen.
Comment 2 Moritz Muehlenhoff univentionstaff 2010-01-21 09:05:14 CET
(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.
Comment 3 Stefan Gohmann univentionstaff 2010-02-09 13:17:01 CET
*** Bug 17597 has been marked as a duplicate of this bug. ***
Comment 4 Stefan Gohmann univentionstaff 2010-02-10 15:01:28 CET
Bitte zunächst einen Patch an diesen Bug hängen (2.3-1 ist noch nicht freigegeben).
Comment 5 Janek Walkenhorst univentionstaff 2010-02-12 16:34:18 CET
Created attachment 2293 [details]
Ungetesteter Patch

Ich hänge hier mal die erste (ungetestete!) Version des Patches an.
Comment 6 Janek Walkenhorst univentionstaff 2010-02-15 11:08:47 CET
(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
Comment 7 Felix Botner univentionstaff 2010-02-19 08:58:42 CET
Aus den Argumenten werden ' und " jetzt entfernt, außerdem führende und Leerzeichen am Ende. 

Gebaut in ucs2.3-2.
Comment 8 Philipp Hahn univentionstaff 2010-02-22 11:51:01 CET
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
Comment 9 Stefan Gohmann univentionstaff 2010-05-18 10:00:04 CEST
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".