Owncloud Kalendersynchronisation fehlerhaft durch Emojis

Letzte Woche habe ich Owncloud sehr aus dem Tritt gebracht. Durch verschiedene Betriebssysteme, welche darauf zugreifen, war es nicht wirklich leicht herauszufinden, wo genau der Fehler liegt. Die lasche Meldung {vobject} Invalid VObject Document ended prematurely brachte mich auch zuerst leider nicht weiter.

Umgebung

Meine Owncloudinstanz läuft auf CentOS 7 mit Apache 2.4.6,  MariaDB  5.5.41, OpenSSL 1.0.1e-fips, PHP 5.4.16 und skaliert nach meinen Wünschen.

Der Umzug von Debian Wheezy zu CentOS geschah ohne Herausforderungen und als Clients haben per WebDAV Linux, Android, iOS Zugriff. Per Owncloudclient ist es Debian GNU/Linux und Fedora 21.

Fehler

Alle Kontakte und Kalender konnten bis vor drei Tagen synchronisiert werden, dann traten unter Androids DAVdroid ( 0.6.11) und auf iOS Fehler-Meldungen mit einem 404Error bei der Synchronisation des Kalenders auf.

Die URLs für die Synchronisation hatten sich bei dem Update auf Version 8.0 von Owncloud nicht geändert.

Fehlersuche

Mein erster Blick galt den audit.log von SElinux, welches keine Fehler meldete.
Das Einstellen der Loggingfunktion mit Loglevel in der Datei config.php von owncloud brachte das Ergebnis:

journalctl --follow
Feb 15 18:30:02 $SERVERNAME ownCloud[4328]: {PHP} Undefined index: REQUEST_URI at /var/www/html/owncloud/apps/calendar/appinfo/app.php#41
Feb 15 18:30:15 $SEVERNAME ownCloud[1170]: {vobject} Invalid VObject. Document ended prematurely.

Somit stellte ich in der Datei config.php von Owncloud das Loglevel auf 0 für debugging und schaltete des Logging von syslog auf owncloud, welches die Datei owncloud.log in das Verzeichnis data legt:

{"reqId":"da6cc386da34038d2d91371e5f355f01","remoteAddr":"MYIP","app":"vobject","message":"Invalid VObject. Document ended prematurely.","level":3,"time":"2015-02-15T18:43:26+01:00","method":"REPORT","url":"\/remote.php\/caldav\/calendars\/chris\/familie\/"}
 {"reqId":"aaadaae871d0940591832c1f7e2b15cc","remoteAddr":"MYIP","app":"vobject","message":"Invalid VObject. Document ended prematurely.","level":3,"time":"2015-02-15T18:43:40+01:00","method":"REPORT","url":"\/remote.php\/caldav\/calendars\/chris\/familie\/"}

Es meldete sich dazu nur ein einmal auftretendes:

{"reqId":"16feb239b6a6aa53c164267d83121616","remoteAddr":"MYIP","app":"webdav","message":"Exception: {\"Message\":\"No basic authentication headers were found\",\"Code\":0,\"Trace\":\"#0 \\\/var\\\/www\\\/html\\\/owncloud\\\/lib\\\/private\\\/connector\\\/sabre\\\/auth.php(123): Sabre\\\\DAV\\\\Auth\\\\Backend\\\\AbstractBasic->authenticate(Object(OC_Connector_Sabre_Server), 'ownCloud')\\n#1 \\\/var\\\/www\\\/html\\\/owncloud\\\/lib\\\/private\\\/connector\\\/sabre\\\/auth.php(103): OC_Connector_Sabre_Auth->auth(Object(OC_Connector_Sabre_Server), 'ownCloud')\\n#2 \\\/var\\\/www\\\/html\\\/owncloud\\\/3rdparty\\\/sabre\\\/dav\\\/lib\\\/Sabre\\\/DAV\\\/Auth\\\/Plugin.php(108): OC_Connector_Sabre_Auth->authenticate(Object(OC_Connector_Sabre_Server), 'ownCloud')\\n#3 [internal function]: Sabre\\\\DAV\\\\Auth\\\\Plugin->beforeMethod('PROPFIND', '')\\n#4 \\\/var\\\/www\\\/html\\\/owncloud\\\/3rdparty\\\/sabre\\\/dav\\\/lib\\\/Sabre\\\/DAV\\\/Server.php(433): call_user_func_array(Array, Array)\\n#5 \\\/var\\\/www\\\/html\\\/owncloud\\\/3rdparty\\\/sabre\\\/dav\\\/lib\\\/Sabre\\\/DAV\\\/Server.php(455): Sabre\\\\DAV\\\\Server->broadcastEvent('beforeMethod', Array)\\n#6 \\\/var\\\/www\\\/html\\\/owncloud\\\/3rdparty\\\/sabre\\\/dav\\\/lib\\\/Sabre\\\/DAV\\\/Server.php(214): Sabre\\\\DAV\\\\Server->invokeMethod('PROPFIND', '')\\n#7 \\\/var\\\/www\\\/html\\\/owncloud\\\/apps\\\/files\\\/appinfo\\\/remote.php(61): Sabre\\\\DAV\\\\Server->exec()\\n#8 \\\/var\\\/www\\\/html\\\/owncloud\\\/remote.php(54): require_once('\\\/var\\\/www\\\/html\\\/o...')\\n#9 {main}\",\"File\":\"\\\/var\\\/www\\\/html\\\/owncloud\\\/3rdparty\\\/sabre\\\/dav\\\/lib\\\/Sabre\\\/DAV\\\/Auth\\\/Backend\\\/AbstractBasic.php\",\"Line\":73}","level":0,"time":"2015-02-15T18:46:50+01:00","method":"PROPFIND","url":"\/remote.php\/webdav"}

welches aber nicht reproduzierbar war.

Das Log für die Zugriffe auf den Webserver, access.log, gab mir während des Aufretens des Fehlers folgenden Report aus :

MYIP - chris [15/Feb/2015:18:55:23 +0100] "PROPFIND /remote.php/caldav/calendars/chris/familie/ HTTP/1.1" 207 52757 "-" "DAVdroid/0.6.11"
myIP - chris [15/Feb/2015:18:55:28 +0100] "REPORT /remote.php/caldav/calendars/chris/familie/ HTTP/1.1" 404 267 "-" "DAVdroid/0.6.11"

Ich konnte somit daraus schliessen, dass von den zu synchronsierenden Kalendern, derjenige mit dem Namen familie jener ist, welcher mir die synchronisation störte.

Schlussfolgerung

Der in Owncloud abgelegte Kalender besaß etwas, welches Ihn von den anderen Kalendern unterscheidete, sodaß die Verbindung zu der Datenbank gestört ist.

Das Einschalten der Logfunktion für die Verbindung zu der Datenbank brachte leider kein Ergebnis.

Fehler gefunden

Emojitroete
Emojitroete des Synchorrors

Nach einem kurzen Überlegen fiel mir auf, dass dieser Kalender der einzige ist, welchen ich mit Emojis verwende, da dort die Termine meines Sohnes abgelegt sind. Am Montag dem 16.02.2015 findet eine Kinderfaschingsfeier statt, welche eine Faschingströte als Emoji bekommen hatte. Diese Emojis hatte ich nun letzte Woche drei, viermal benutzt um mir diese wichtigen Termine hervozuheben.

Die Abfrage in der Datenbank von owncloud:

SELECT * FROM `oc_clndr_objects` WHERE calendardata NOT LIKE '%END:VCALENDAR%'

bringt mir auch gleich 4 Objekte, alle beinhalten die PRODID:-//Apple Inc.//iOS 8.1.3//EN

Owncloud Kalendersynchronisation fehlerhaft durch Emojis von iOS bzw Android.

Lösung

Entweder werden die Objekte aus der Datenbank gelöscht und auf Emojis verzichtet, oder dem DBMS echtes UTF-8 beigebracht, welches ab mariaDB/mySQL  v5.5.3+ möglich ist.

mariaDB und mySQL beherrschen eigentlich emojis, aber UTF-8 ist so bescheiden Implementiert, dass utf8mb4 als encoding gewählt werden muss.

Siehe hierzu Mathias Bynens Artikel How to support full Unicode in MySQL databases

 

Ich hoffe die nachvollziehbare Fehleranalyse hat Euch ein wenig Spaß gemacht und wünsche Euch noch viel Spaß mit owncloud

 

 

 

5 Gedanken zu „Owncloud Kalendersynchronisation fehlerhaft durch Emojis“

  1. Vielen Dank. Das hat mich der Ursache (EMOJIS in einem Kalender) auf die Spur gebracht. Danke auch für die Lösungsansätze.

  2. Vielen herzlichen Dank für diese Analyse! Ich hatte genau mit dem gleichen Problem zu kämpfen… das Ergebnis dieser Analyse war sehrsehr wertvoll! Vermutlich sogar ausschlaggebend für den Erfolg…!

    • Ichbins, also der Name ist nicht wirklich kommunikativ und dann auch noch die falsche Mailadresse, obwohl es Onemailer mit RSS-unterstüzung gibt.
      Finde ich nicht gut.
      Da ich nicht zensiere, aber nicht mehr gewillt bin, solche Kommentare frei zu geben, ist dies das letzte mal.
      Wenn ich mir Mühe mit Artikeln gebe, kann ich auch erwarten, dass man sich Mühe bei den Kommentaren gibt.
      Da Deine IP aus der Range der Telekom kommt und nicht verschleiert ist, empfinde ich es einfach nur Schwachsinnig einen falschen Namen und erfundene Emailadressen anzugeben.
      Aber Hey, Du warst der Tropfen für das Fass und somit, Danke Dir

  3. Hallo chris,

    vielen Dank für den Beitrag.
    Ich war (mal wieder) völlig am verzweifeln wegen diesen Invalid VObject. Document ended prematurely Fehlern.
    Bis ich auf den Unterschied kam: ich habe keine Probleme mit meinen Kalendern, ein Kollege aber sehr: er verwendet dauern irgendwelche Symbole (Regenschirm für Regen z.B.).
    Die bei owncloud scheinen aus den limits für 4byte Zeichen ein rießen geschiss zu machen.
    Läuft das bei dir ohne Probleme?
    Wie viele CalDAv Einträge sind denn so ein der Tabelle?

    Vielen Dank nochmal.
    Thomas

    • Hallo Thomas,
      also bei mir läuft es ohne Probleme.

      Wie viele CalDAv Einträge sind denn so ein der Tabelle?

      Die Frage verstehe ich nun leider nicht, könntest Du sie mir etwas ausführlicher stellen?

Kommentare sind geschlossen.