Hallo Zusammen
Ich habe ein Problem beim synchronisieren von Kalendern via CalDAV.
Umgebung
Server: CentOS Linux 7.5.1804, eGroupware 17.1.20180720-1.1
Clients: Outlook 2016/365 mit CalDAV9-Client.
PHP 5.6.37 (cli) (built: Jul 19 2018 19:57:52)
Server version: Apache/2.4.6 (CentOS)
MySQL version 5.5.60 (mariadb)
Problem
Wenn ich mit meinem Client A einen ganztägigen Termin in Outlook eintrage und diesen mittels CalDAV in Richtung eGroupware synchronisere, dann wird der Termin im eGroupware WebGUI unter Kalender korrekt dargestellt.
Wenn ich auf meinem Client B ebenfalls von eGroupware in Richtung Client synchronisiere, dann wird der Termin über zwei Tage erstreckt.
Beispiel
Ich erfassen auf Client A einen ganztägigen Termin wie folgt [ganztägig angekreuzt, hier abgeschnitten]:
Dieser ist in Outlook auf dem Client A normal ersichtlich:
Ich synchnroisiere den Eintrag (PUSH) auf den eGroupware Server:
*** 10.0.0.123 2018-08-21T17:59:16+00:00
PUT /egroupware/groupdav.php/thomas/calendar/92fd91d7-8475-406e-8abe-2db110d24121.ics HTTP/1.1
User-Agent: CalDavSynchronizer/3.2
If-None-Match: *
Content-Type: text/calendar; charset=utf-8
Host: mail.netcult.ch
Content-Length: 1985
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//ddaysoftware.com//NONSGML DDay.iCal 1.0//EN
BEGIN:VTIMEZONE
TZID:Europe/Zurich
TZURL:http://tzurl.org/zoneinfo/Europe/Zurich
X-LIC-LOCATION:Europe/Zurich
BEGIN:DAYLIGHT
DTSTART:19810329T020000
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
END:DAYLIGHT
BEGIN:DAYLIGHT
DTSTART:19410505T010000
RDATE:19420504T010000
RDATE:19410505T010000
TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
END:DAYLIGHT
BEGIN:STANDARD
DTSTART:19961027T030000
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
TZNAME:CET
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
END:STANDARD
BEGIN:STANDARD
DTSTART:18530716T000000
RDATE:18530716T000000
TZNAME:BMT
TZOFFSETFROM:+003408
TZOFFSETTO:+002946
END:STANDARD
BEGIN:STANDARD
DTSTART:18940601T000000
RDATE:18940601T000000
TZNAME:CET
TZOFFSETFROM:+002946
TZOFFSETTO:+0100
END:STANDARD
BEGIN:STANDARD
DTSTART:19411006T020000
RDATE:19890924T030000
RDATE:19880925T030000
RDATE:19860928T030000
RDATE:19870927T030000
RDATE:19900930T030000
RDATE:19930926T030000
RDATE:19940925T030000
RDATE:19910929T030000
RDATE:19920927T030000
RDATE:19950924T030000
RDATE:19421005T020000
RDATE:19411006T020000
RDATE:19850929T030000
RDATE:19810927T030000
RDATE:19840930T030000
RDATE:19830925T030000
RDATE:19820926T030000
TZNAME:CET
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
END:STANDARD
BEGIN:STANDARD
DTSTART:19810101T000000
RDATE:19810101T000000
TZNAME:CET
TZOFFSETFROM:+0100
TZOFFSETTO:+0100
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
CLASS:PUBLIC
DESCRIPTION:Hallo Welt\nDies ist ein Testeintrag
DTEND;VALUE=DATE:20180827
DTSTAMP:20180821T175917Z
DTSTART;VALUE=DATE:20180826
LOCATION:Remote
PRIORITY:5
SEQUENCE:0
SUMMARY:Testeintrag
TRANSP:TRANSPARENT
UID:92fd91d7-8475-406e-8abe-2db110d24121
X-MICROSOFT-CDO-BUSYSTATUS:FREE
BEGIN:VALARM
ACTION:DISPLAY
DESCRIPTION:This is an event reminder
TRIGGER:-PT18H
END:VALARM
END:VEVENT
END:VCALENDAR
HTTP/1.1 201 Created
Date: Tue, 21 Aug 2018 17:59:16 GMT
Server: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips PHP/5.6.37
X-Powered-By: PHP/5.6.37
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
X-Dav-Powered-By: EGroupware 17.1.003 CalDAV/CardDAV/GroupDAV server
Schedule-Tag: "566:0"
ETag: "566:0:1534874356"
X-WebDAV-Status: 201 Created
*** PUT /thomas/calendar/92fd91d7-8475-406e-8abe-2db110d24121.ics --> "201 Created" took 0.127 s
Ich synchronisiere den Termin (PULL) auf den Client B:
HTTP/1.1 207 Multi-Status
Date: Tue, 21 Aug 2018 18:00:43 GMT
Server: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips PHP/5.6.37
X-Powered-By: PHP/5.6.37
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
X-Dav-Powered-By: EGroupware 17.1.003 CalDAV/CardDAV/GroupDAV server
X-WebDAV-Status: 207 Multi-Status
DAV: 1, 2, access-control, calendar-access, calendar-auto-schedule, calendar-proxy, calendarserver-principal-property-search, calendarserver-private-events, calendar-managed-attachments
Content-Type: text/xml; charset="utf-8"
<?xml version="1.0" encoding="utf-8"?>
<D:multistatus xmlns:D="DAV:">
<D:response xmlns:ns0="urn:uuid:c2f41010-65b3-11d1-a29f-00aa00c14882/" xmlns:ns2="urn:ietf:params:xml:ns:caldav">
<D:href>/egroupware/groupdav.php/thomas/calendar/92fd91d7-8475-406e-8abe-2db110d24121.ics</D:href>
<D:propstat>
<D:prop>
<D:getetag>"566:0:1534874356"</D:getetag>
<ns2:calendar-data>BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//EGroupware//NONSGML EGroupware Calendar 17.1.001//DE
BEGIN:VTIMEZONE
TZID:Europe/Zurich
BEGIN:DAYLIGHT
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
TZNAME:CEST
DTSTART:19700329T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
TZNAME:CET
DTSTART:19701025T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
DTSTART;VALUE=DATE:20180825
DTEND;VALUE=DATE:20180827
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-CDO-BUSYSTATUS:FREE
SUMMARY:Testeintrag
DESCRIPTION:Hallo Welt\nDies ist ein Testeintrag
LOCATION:Remote
PRIORITY:5
TRANSP:TRANSPARENT
UID:92fd91d7-8475-406e-8abe-2db110d24121
STATUS:CONFIRMED
CREATED:20180821T175916Z
LAST-MODIFIED:20180821T175916Z
DTSTAMP:20180821T180043Z
BEGIN:VALARM
TRIGGER;VALUE=DURATION;RELATED=START:-PT18H
UID:5b7c52f4-42fc-424a-9d17-7b3e0a000120
X-WR-ALARMUID:5b7c52f4-42fc-424a-9d17-7b3e0a000120
ACTION:DISPLAY
DESCRIPTION:This is an event reminder
END:VALARM
END:VEVENT
END:VCALENDAR
</ns2:calendar-data>
<D:displayname>Testeintrag</D:displayname>
</D:prop>
<D:status>HTTP/1.1 200 OK</D:status>
</D:propstat>
</D:response>
</D:multistatus>
*** REPORT calendar-multiget /thomas/calendar/ --> "207 Multi-Status" took 0.121 s
Nun sieht der Termin auf dem Client B so aus:
Die Termindetails sehen dann so aus:
In eGroupware sieht der Termin korrekt so aus (nur das Enddatum 23:59 macht mich etwas stutzig):
Was habe ich bereits ausprobiert?
- In der php.ini habe ich als date.timezone ‘CET’ sowie ‘Europe/Zurich’ getestet.
- In eGroupware unter ‘Einstellungen’ - ‘Kalender’ habe ich ‘Use Event TZ’ und ‘Europe/Zurich’ getestet.
- Wenn ich einen ganztägigen Termin in eGroupware direkt anlege und auf die zwei Clients synchronisiere (PULL), dann habe ich einen korrekten, ganztägigen, Kalendereintrag auf den Clients.
- Wenn ich mit nicht ganztägigen Terminen arbeite, welche als Startzeit 00:00 Uhr haben, dann stelle ich ebenfalls das Problem fest (bin gerade nicht mehr sicher, ob das Enddatum dann auch 00:00 Uhr sein muss).
- Wenn ich mit Terminen arbeite, welche nicht ganztägig sind (zb. 00:01 - 23:59), dann funktioniert alles problemlos.
- Der CalDAV Client hat eine Einstellung in Bezug auf die Zeitzonen-Einstellung, jedoch egal was ich hier einstelle, das Problem bleibt bestehen (Info: Ich habe ja auch nicht generell ein Problem mit den Zeitzonen, sondern nur mit Terminen welche als ‘ganztägig’ markiert sind oder 00:00 als Startdatum haben.)
- Ich habe versucht die gesamte PHP/eGroupware-Config auf UTC zu ändern und in CalDAV die Checkbox Create events on server in UTC zu setzen - ohne Erfolg.
- Ich komme von Horde: Ich konnte ein solches Verhalten mit Horde/CalDAV nicht feststellen (ich weiss nicht ob das etwas aussagt).
- Ich finde jemand, der von einem selben Problem berichtet1: Der Eintrag endet mit dem Satz: “Am I to conclude this is a bug in the caldav implementation in egroupware?”
Update vom 22.08:
- Ich kann das Problem mit der eGroupware Cloud-Lösung (Testaccount) nicht reproduzieren.
- Ich habe in eGroupware die Zeitzoneneinstellungen unter ‘Einstellungen’ - ‘Allgemeine Einstellungen’ - ‘Formatierung und allg. Einstellungen’ auf ‘Europe / Zurich’ gesetzt.
- Ich habe die phpinfo der Cloudlösung und meiner Installation verglichen. In dem Abschnitt ‘date’ habe ich folgende Settings:
In eurer Cloudversion sehe ich folgende Settings:
(Ist Default Timezone = UTC evtl. der Grund? Ich konnte nicht herausfinden, woher die phpinfo diese Information nimmt - weiss das jemand?) - Mein CentOS hat folgende Zeitzonen-Einstellungen:
#date
Wed Aug 22 15:50:20 CEST 2018
#ls -l /etc/localtime
lrwxrwxrwx. 1 root root 35 Jul 31 15:50 /etc/localtime -> …/usr/share/zoneinfo/Europe/Zurich - Als ich das eGroupware RPM installiert habe, war meine /etc/php.ini Datei noch nicht auf die richtige Zeitzone konfiguriert. Irgendwo habe ich gelesen, dass eGroupware bei der Installation des RPMs diese Information aus der php.ini heranzieht um die Zeitzone in der mySQL Datebank (egw_config) zu befüllen. In meiner eGroupware Datenbank befinden sich folgende Informationenen:
Hinweis: Wenn ich den Eintrag von server_timezone hier von UTC auf Europe/Zurich anpasse, dann passiert nichts (keine verschobenen Termine o. ä.) und das Problem ist noch vorhanden. - Ich habe versucht in /etc/httpd/conf.d/egroupware.conf den Config-Eintrag
php_value date.timezone "Europe/Zurich"
zu setzen - auch ohne Erfolg.
Ich bin am Ende meines Lateins angekommen und möchte gerne in die Runde Fragen, ob noch jemand eine Idee hat, was ich noch testen kann resp. weiss jemand auf was es genau ankommt, damit die CalDAV-Synchronisierung so wunderbar wie in der Cloud funktioniert?
Beste Grüsse
Tom Hürlimann
created
last reply
- 10
replies
- 3.8k
views
- 2
users
- 1
like
- 6
links