owncloud / calendar

Calendar app for ownCloud
GNU Affero General Public License v3.0
121 stars 43 forks source link

RFC 2445: recurrence rule is not respected or not correctly interpreted? #971

Closed thommierother closed 5 years ago

thommierother commented 5 years ago

Steps to reproduce

  1. create or import ical calendar
  2. synchronize through caldav with caldavsynchronizer
  3. validation error

Expected behaviour

no validation error. OC calendar app follows RFC standard and/or validates imported data according to the standard . The calendar app either creates new or imports foreign calendar objects with inaccurate recurrence rules. Example string:

DTSTART:19800928T030000 RRULE:FREQ=YEARLY;UNTIL=19961027T030000;COUNT=16;BYDAY=-1SU;BYMONTH=9

The app shall respect the recurrence rule for newly created objects, as described in https://tools.ietf.org/html/rfc2445#page-40calendar :

4.3.10 Recurrence Rule

Value Name: RECUR

Purpose: This value type is used to identify properties that contain a recurrence rule specification.

Formal Definition: The value type is defined by the following notation:

 recur      = "FREQ"=freq *(

            ; either UNTIL or COUNT may appear in a 'recur',
            ; but UNTIL and COUNT MUST NOT occur in the same 'recur'

The calendar importer should also validate calendar objects so that the recurrence rule is respected

For further reference: https://github.com/owncloud/calendar/issues/958#issuecomment-438825275 https://sourceforge.net/p/outlookcaldavsynchronizer/tickets/1057/

Note: currently the example string is parsed by the owncloud calendar without errors, there is only a validation error from other applications like caldavsynchronizer client who receive the data from owncloud

Actual behaviour

validation error in foreign application

Operating system: Ubuntu 18.04 LTS

Web server: Apache 2.4.x

Database: MariaDB

PHP version: 7.2

ownCloud version: (see your admin page) 10.0.10

Calendar version: (see the apps page) 1.6.1

Updated from an older installed version or fresh install: updated

Signing status (ownCloud 9.0 and above): signed

DeepDiver1975 commented 5 years ago

2445 is obsolete. We implement https://tools.ietf.org/html/rfc5545

And rrule is the way to go afaik.

thommierother commented 5 years ago

OK, but we have the same rule in the RFC 5545 on P. 38: "UNTIL or COUNT"

3.3.10. Recurrence Rule Value Name: RECUR Purpose: This value type is used to identify properties that contain a recurrence rule specification. [....] ; The UNTIL or COUNT rule parts are OPTIONAL, ; but they MUST NOT occur in the same 'recur'.

If I create a new reocurring event with the current calendar app, I see a rrule string in the ics which contains both UNTIL and COUNT values, which is not correct. If I understand the RFC correctly.

BEGIN:VCALENDAR PRODID:-//ownCloud calendar v1.6.1 VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20181228T132119Z DTSTAMP:20181228T132216Z LAST-MODIFIED:20181228T132216Z UID:RCORTELEPH5LWU9CQOUPQ SUMMARY:Test recurrence CLASS:PUBLIC STATUS:CONFIRMED RRULE:FREQ=DAILY SEQUENCE:1 DTSTART;TZID=Europe/Berlin:20181228T103000 DTEND;TZID=Europe/Berlin:20181228T110000 END:VEVENT BEGIN:VTIMEZONE TZID:Europe/Berlin BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0000 TZOFFSETTO:+0100 DTSTART:19791231T230000 RDATE:19791231T230000 END:STANDARD BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19810329T020000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3 END:DAYLIGHT BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19800406T020000 RDATE:19800406T020000 END:DAYLIGHT BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19971026T030000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19800928T030000 RRULE:FREQ=YEARLY;UNTIL=19961027T030000;COUNT=16;BYDAY=-1SU;BYMONTH=9 RDATE:19950924T030000 END:STANDARD END:VTIMEZONE END:VCALENDAR

Julian1998 commented 5 years ago

yeah that s not correct! But I can't reproduce that behavior. Do you have any steps for me?

thommierother commented 5 years ago

based on OC 10.0.10 with calendar 1.6.1

I always see that strange "UNTIL=19961027T030000" string in it BUT: if I use a newly created calendar (not one which already existed on the host), the rrule is correct. I only see it if if I add the new calendar object to the one calendar which I used for some years .... Hmmmm, this is really strange ...

thommierother commented 5 years ago

BEGIN:VCALENDAR PRODID:-//ownCloud calendar v1.6.1 VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT CREATED:20181228T222411Z DTSTAMP:20181228T222446Z LAST-MODIFIED:20181228T222446Z UID:BFPS0GXJQWHMKNL65UJ5NQ SUMMARY:test 2 CLASS:PUBLIC STATUS:CONFIRMED DTSTART;TZID=Europe/Berlin:20181231T113000 DTEND;TZID=Europe/Berlin:20181231T120000 RRULE:FREQ=DAILY SEQUENCE:0 END:VEVENT BEGIN:VTIMEZONE TZID:Europe/Berlin BEGIN:DAYLIGHT TZOFFSETFROM:+0100 TZOFFSETTO:+0200 TZNAME:CEST DTSTART:19700329T020000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3 END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0200 TZOFFSETTO:+0100 TZNAME:CET DTSTART:19701025T030000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 END:STANDARD END:VTIMEZONE END:VCALENDAR

Calendar object created in a fresh (!) calendar - all fine!

thommierother commented 5 years ago

I tested again and the wrong rrule lines (with both UNTIL and COUNT) are NOT imported into a fresh calendar. So the validation seems to be correct - good work ;-) Will close this ...