UCS 3.2-1 Zeichen-Bug in UDM

german

#1

Hallo,

ich hab damals (UCS 2.4) leider bei der Ersteinrichtung in den CA-Daten Umlaute benutzt (werden nun so dargestellt: \xfc ). Das User-Modul stolpert seit UCS 3.2 leider darüber, Benutzer sind mit Zertifikat sind nicht mehr bearbeitbar.

Der Traceback:

    data = json.dumps( body )
  File "/usr/lib/pymodules/python2.6/simplejson/__init__.py", line 261, in dumps
    return _default_encoder.encode(obj)
  File "/usr/lib/pymodules/python2.6/simplejson/encoder.py", line 214, in encode
    chunks = self.iterencode(o, _one_shot=True)
  File "/usr/lib/pymodules/python2.6/simplejson/encoder.py", line 282, in iterencode
    return _iterencode(o, 0)
UnicodeDecodeError: 'utf8' codec can't decode byte 0xfc in position 7: invalid start byte

25.02.14 19:11:38.833  DEBUG_INIT
25.02.14 19:13:35.738  ADMIN       ( ERROR   ) : value={'certificateSubjectOrganisationalUnit': 'top2.top1', 'certificateIssuerCommonName': 'Univention Corporate Server Root CA', 'certificateIssuerCountry': 'DE', 'certificateSubjectOrganisation': 'Org', 'certificateIssuerOrganisation': 'Org', 'certificateSerial': 'xx', 'certificateSubjectCommonName': 'user', 'certificateSubjectMail': 'user@top2.top1', 'certificateDateNotAfter': 'xxxxx', 'certificateIssuerLocation': 'Ort', 'certificateVersion': '2', 'certificateSubjectCountry': 'DE', 'certificateIssuerMail': 'ssl@top2.top1', 'certificateSubjectState': 'Land', 'certificateSubjectLocation': 'Ort', 'certificateIssuerState': 'Land', 'certificateIssuerOrganisationalUnit': 'top2.top1', 'certificateDateNotBefore': '2013-01-22'}
25.02.14 19:13:35.814  MODULE      ( ERROR   ) : Traceback (most recent call last):
  File "/usr/sbin/univention-management-console-module", line 112, in <module>
    notifier.loop()
  File "/usr/lib/pymodules/python2.6/notifier/nf_generic.py", line 284, in loop
    step()
  File "/usr/lib/pymodules/python2.6/notifier/nf_generic.py", line 276, in step
    __min_timer = dispatch.dispatcher_run()
  File "/usr/lib/pymodules/python2.6/notifier/dispatch.py", line 72, in dispatcher_run
    if not disp():
  File "/usr/lib/pymodules/python2.6/notifier/threads.py", line 154, in _simple_threads_dispatcher
    task.announce()
  File "/usr/lib/pymodules/python2.6/notifier/threads.py", line 135, in announce
    self._callback( self, self._result )
  File "/usr/lib/pymodules/python2.6/notifier/__init__.py", line 104, in __call__
    return self._function( *tmp, **self._kwargs )
  File "/usr/lib/pymodules/python2.6/univention/management/console/modules/udm/__init__.py", line 139, in _thread_finished
    self.finished( request.id, result )
  File "/usr/lib/pymodules/python2.6/univention/management/console/modules/__init__.py", line 276, in finished
    self.result( res )
  File "/usr/lib/pymodules/python2.6/univention/management/console/modules/__init__.py", line 283, in result
    self.signal_emit( 'success', response )
  File "/usr/lib/pymodules/python2.6/notifier/signals.py", line 75, in signal_emit
    self.__signals[ signal ].emit( *args )
  File "/usr/lib/pymodules/python2.6/notifier/signals.py", line 41, in emit
    cb( *args )
  File "/usr/lib/pymodules/python2.6/notifier/__init__.py", line 104, in __call__
    return self._function( *tmp, **self._kwargs )
  File "/usr/lib/pymodules/python2.6/univention/management/console/protocol/modserver.py", line 106, in _reply
    self.response( msg )
  File "/usr/lib/pymodules/python2.6/univention/management/console/protocol/modserver.py", line 305, in response
    data = str( msg )
  File "/usr/lib/pymodules/python2.6/univention/management/console/protocol/message.py", line 317, in __str__
    return Message._formattedMessage(self._id, self._type, self.mimetype, self.command, body, self.arguments)
  File "/usr/lib/pymodules/python2.6/univention/management/console/protocol/message.py", line 119, in _formattedMessage
    data = json.dumps( body )
  File "/usr/lib/pymodules/python2.6/simplejson/__init__.py", line 261, in dumps
    return _default_encoder.encode(obj)
  File "/usr/lib/pymodules/python2.6/simplejson/encoder.py", line 214, in encode
    chunks = self.iterencode(o, _one_shot=True)
  File "/usr/lib/pymodules/python2.6/simplejson/encoder.py", line 282, in iterencode
    return _iterencode(o, 0)
UnicodeDecodeError: 'utf8' codec can't decode byte 0xfc in position 7: invalid start byte

#2

Hallo,

ein kurzer Test mit einem solchen Zertifikat

udm users/user list| grep cert certificateSubjectOrganisationalUnit: Univention Corporate Serveräö certificateSerial: 2 certificateIssuerCommonName: rööt serverä CA (ID=6bw2pnyX)
hat bei mir keine Probleme verursacht.

Könnten Sie mir einmal das entsprechende Zertifikat für Tests zur Verfügung stellen? Am besten die Ausgabe von

univention-ldapsearch uid=$BENUTZERNAME userCertificate

an feedback at univention.de.

Mit freundlichen Grüßen
Felix Botner


#3

[quote=“botner”]ein kurzer Test mit einem solchen Zertifikat

udm users/user list| grep cert certificateSubjectOrganisationalUnit: Univention Corporate Serveräö certificateSerial: 2 certificateIssuerCommonName: rööt serverä CA (ID=6bw2pnyX)
hat bei mir keine Probleme verursacht.[/quote]

Bei mir auch nicht. Anscheinend ist nur der Web-UDM betroffen. Wenn ich da einen entsprechenden User auswähle sind dann alle Felder leer.

Ja sofern es sofür auch per Web-UDM nicht reproduzierbar ist, kann ich das gerne tun.


#4

Hallo,

ich kann das Benutzerobjekt auch in der UMC (Web) sehen und modifizieren. Hat dann wahrscheinlich etwas mit dem Encoding der Umlaute im Zertifikat zu tun.

Mit freundlichen Grüßen
Felix Botner


#5

Ich habe Ihnen ein Zertifikat übermittelt.


#6

Hallo,

das Problem ist tatsächlich der iso-latin-1 kodierte Umlaut im Zertifikat. Im LDAP werden standardmäßig auch nur UTF8 Zeichen gespeichert und ggf. vorher entsprechend umkodiert. Im Falle des Zertifikats klappt(e) dies nicht, da nicht die einzelnen Zertifikats-Attribute gespeichert werden, sondern das komplette Zertifikat als base64 kodierter String.

Im Anhang finden sie ein Patch für das UDM Benutzermodul (das Backend für die UMC). Der Patch versucht zu prüfen ob die Werte aus dem Zertifikat UTF8 sind um diese ggf. für die Anzeige umzukodieren. Damit sollte sich das Benutzerobjekt auch in der UMC wieder öffnen lassen.

cd / patch -p1 < /opt/udm-users-user-cert-encoding.patch

Dies ist jedoch nur eine kurzfristige Lösung und wird durch spätere Updates der UDM Module überschrieben. Ich kann daher nur vorschlagen, sowie irgend möglich, die komplette Zertifikatskette und alle Zertifikate auszutauschen. Eine entsprechende Anleitung finden Sie unter sdb.univention.de/1050

Mit freundlichen Grüßen
Felix Botner
udm-users-user-cert-encoding.patch (602 Bytes)


#7

Vielen Dank für den Patch. Was spricht denn gegen eine Aufnahme in die Distribution? Ein Austausch der Zertifikate scheint wohl in der Tat sinnvoll zu sein, verlief aber als ich es damals unter UCS 2.4 versuchte nicht erfolgreich, weshalb ich lieber totzdem darauf verzichten würde.