Cyrus IMAP / CalDAV

Ken Murchison murch at andrew.cmu.edu
Mon Dec 16 14:09:46 EST 2013


I confirmed that the DELETE problem is indeed a bug in the Apple client, 
and that Apple is aware of it. I'm somewhat reluctant to to include a 
fix in Cyrus for a bug in a client that will hopefully get fixed sooner 
rather than later. The patch below will work around the problem by 
making the faulty conditional DELETE a non-conditional one.  But, by 
doing so we may delete a resource that has been changed by another 
user/client/session.  Given that we really don't support shared 
calendars at the moment, this probably isn't a big deal but I don't 
really want to create potentially bigger problems moving forward.

The real fix is Apple correcting their client to use an If-Match header 
rather than If-Schedule-Tag-Match header if the resource doesn't have a 
Schedule-Tag and/or isn't a scheduling object.


On 12/14/2013 01:02 PM, Ken Murchison wrote:
> I just committed a fix to git for the 406 response to GET.  I will make
> a beta9 release with this fix, and hopefully with a fix for the DELETE
> issue by early next week.
>
> I have an email into one of the CalDAV experts that I know at Apple to
> see what CalendarServer does with the empty If-Schedule-Tag-Match
> header.  I think its a bug in the Apple client, but I will have to come
> up with a sane workaround for it. In the meantime, this uncommitted
> patch should fix your problem with DELETE:
>
>
> diff --git a/imap/http_caldav.c b/imap/http_caldav.c
> index c00223f..641feb8 100644
> --- a/imap/http_caldav.c
> +++ b/imap/http_caldav.c
> @@ -695,6 +695,7 @@ static int caldav_check_precond(struct transaction_t
> *txn, const void *data,
>
>        /* Per RFC 6638, check Schedule-Tag */
>        if ((hdr = spool_getheader(txn->req_hdrs, "If-Schedule-Tag-Match"))) {
> +    if (!*hdr[0]) return precond;  /* XXX  Hack for bug in Apple client */
>        if (etagcmp(hdr[0], stag)) return HTTP_PRECOND_FAILED;
>        }
>
>
>
>
> On 12/14/2013 09:39 AM, Marty Lee wrote:
>> No worries.. I'm about to get back onto another train so will back out b8.. Only me using it in earnest, so if you need anything else tested before pushing out, just send me a link.
>>
>> Marty Lee
>> v: 07827 950 918
>>
>>> On 14 Dec 2013, at 14:26, Ken Murchison <murch at andrew.cmu.edu> wrote:
>>>
>>> Hi Marty,
>>>
>>> Thanks for the info.  The 406 is in response to the GET, caused by a bug I introduced when I added support for jCal and xCal data.  I can't believe that this didn't present itself in my testing.  I will need to fix this immediately.  You probably want to downgrade to beta7 in the meantime.
>>>
>>> I *think* the problem with DELETE is that iCal is sending an empty If-Schedule-Tag-Match header.  I will need to test this here and possibly talk to the Apple guys to find out why they are sending an empty header, and what they expect the behavior to be.
>>>
>>>
>>>> On 12/14/2013 03:09 AM, Marty Lee wrote:
>>>> Ken,
>>>>
>>>> I haven’t but have just taken the opportunity to update to Beta 8 and also to refresh Sqlite, which
>>>> seems to be the source of the error message…
>>>>
>>>> Using cyrus beta 7, the iCal client would delete the event, but when it updated with the server, the
>>>> event would magically just re-appear. With b8, this has changed; now I get a dialog box:
>>>>
>>>> ------
>>>> The request for “Marty” in account “Maui” failed.
>>>>
>>>> The server responded with
>>>> “406” to operation CalDAVDeleteEntityQueueableOperation.
>>>> -----
>>>>
>>>> Telemetry log:
>>>>
>>>> <1387007669<DELETE /dav/calendars/user/marty/Default/0C48ECD9-44A7-4F1F-9C87-9A2EF647C574.ics HTTP/1.1
>>>> Accept-encoding: gzip, deflate
>>>> Max-forwards: 10
>>>> Accept-language: en-gb
>>>> User-agent: Mac_OS_X/10.9 (13A603) CalendarAgent/174
>>>> Host: 192.168.253.16:1443
>>>> Accept: */*
>>>> Content-length: 0
>>>> X-forwarded-server: dav.maui.co.uk
>>>> If-schedule-tag-match:
>>>> X-forwarded-for: 176.12.107.140
>>>> Authorization: Basic ...
>>>> X-forwarded-host: cal.maui.co.uk
>>>>
>>>> BEGIN:VCALENDAR
>>>> VERSION:2.0
>>>> PRODID:-//Apple Inc.//Mac OS X 10.9//EN
>>>> CALSCALE:GREGORIAN
>>>> BEGIN:VTIMEZONE
>>>> TZID:Europe/London
>>>> BEGIN:DAYLIGHT
>>>> TZOFFSETFROM:+0000
>>>> RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
>>>> DTSTART:19810329T010000
>>>> TZNAME:BST
>>>> TZOFFSETTO:+0100
>>>> END:DAYLIGHT
>>>> BEGIN:STANDARD
>>>> TZOFFSETFROM:+0100
>>>> RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
>>>> DTSTART:19961027T020000
>>>> TZNAME:GMT
>>>> TZOFFSETTO:+0000
>>>> END:STANDARD
>>>> END:VTIMEZONE
>>>> BEGIN:VEVENT
>>>> CREATED:<1387007670<GET /dav/calendars/user/marty/Default/0C48ECD9-44A7-4F1F-9C87-9A2EF647C574.ics HTTP/1.1
>>>> Accept-encoding: gzip, deflate
>>>> Max-forwards: 10
>>>> Accept-language: en-gb
>>>> User-agent: Mac_OS_X/10.9 (13A603) CalendarAgent/174
>>>> Host: 192.168.253.16:1443
>>>> Accept: */*
>>>> Content-length: 0
>>>> X-forwarded-server: dav.maui.co.uk
>>>> X-forwarded-for: 176.12.107.140
>>>> Authorization: Basic ...
>>>> X-forwarded-host: cal.maui.co.uk
>>>>
>>>> BEGIN:VCALENDAR
>>>> VERSION:2.0
>>>> PRODID:-//Apple Inc.//Mac OS X 10.9//EN
>>>> CALSCALE:GREGORIAN
>>>> BEGIN:VTIMEZONE
>>>> TZID:Europe/London
>>>> BEGIN:DAYLIGHT
>>>> TZOFFSETFROM:+0000
>>>> RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
>>>> DTSTART:19810329T010000
>>>> TZNAME:BST
>>>> TZOFFSETTO:+0100
>>>> END:DAYLIGHT
>>>> BEGIN:STANDARD
>>>> TZOFFSETFROM:+0100
>>>> RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
>>>> DTSTART:19961027T020000
>>>> TZNAME:GMT
>>>> TZOFFSETTO:+0000
>>>> END:STANDARD
>>>> END:VTIMEZONE
>>>> BEGIN:VEVENT
>>>> CREATED:20131214T075350Z
>>>> UID:0C48ECD9-44A7-4F1F-9C87-9A2EF647C574
>>>> DTEND;TZID=Europe/London:20131207T100000
>>>> TRANSP:OPAQUE
>>>> SUMMARY:Change Event Name
>>>> DTSTART;TZID=Europe/London:20131207T090000
>>>> DTSTAMP:20131214T075411Z
>>>> SEQUENCE:3
>>>> END:VEVENT
>>>> END:VCALENDAR
>>>>> 1387007670>HTTP/1.1 406 Not Acceptable
>>>> Date: Sat, 14 Dec 2013 07:54:30 GMT
>>>> Strict-Transport-Security: max-age=600
>>>> Vary: Accept-Encoding
>>>> Server: Cyrus/v2.4.17-caldav-beta8 Cyrus-SASL/2.1.23 OpenSSL/0.9.8 zlib/1.2.3 libxml2/2.6.29 SQLite/3.8.2 libical/0.48
>>>> Content-Length: 0
>>>>
>>>>
>>>> I’ll keep looking; I can create and edit events, just not delete them…
>>>>
>>>> marty
>>>>
>>>>
>>>>> On 12 Dec 2013, at 17:30, Ken Murchison <murch at andrew.cmu.edu> wrote:
>>>>>
>>>>> Hi Marty,
>>>>>
>>>>> Did you find anything related to this?  I don't have Mavericks yet, but maybe a telemetry log of the client trying to delete an entry would point me in the right direction.
>>>>>
>>>>> Worst case, I will be with the Apple client developers in early February and can test then.
>>>>>
>>>>>
>>>>>
>>>>>> On 10/24/2013 07:22 AM, Marty Lee wrote:
>>>>>> Good afternoon (local time for me!)
>>>>>>
>>>>>> Updated my Mac to Mavericks this morning and am now getting the following error from
>>>>>> the CalDAV part of Cyrus when I try to delete an entry.
>>>>>>
>>>>>> dav_exec() step: cannot start a transaction within a transaction
>>>>>>
>>>>>> Creation & modification works fine, but iCal on the mac now can’t delete items. I can work
>>>>>> around this by using a web interface to my calendars, but I just thought I’d mention it here
>>>>>> that Apple have changed something in iCal with the new version of OS-X.
>>>>>>
>>>>>> If I get a chance this weekend, I’ll have a look at the source code and see if I can do
>>>>>> anything to help.
>>>>>>
>>>>>> cheers
>>>>>>
>>>>>> marty
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> -----
>>>>>> Marty Lee                         e:
>>>>>> marty at maui-systems.co.uk
>>>>>>
>>>>>> Technical Director                v: +44 845 869 2661
>>>>>> Maui Systems Ltd                  f: +44 871 433 8922
>>>>>> Scotland, UK                      w:
>>>>>> http://www.maui-systems.co.uk
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> ----
>>>>>> Cyrus Home Page:
>>>>>> http://www.cyrusimap.org/
>>>>>>
>>>>>> List Archives/Info:
>>>>>> http://lists.andrew.cmu.edu/pipermail/info-cyrus/
>>>>>>
>>>>>> To Unsubscribe:
>>>>>>
>>>>>> https://lists.andrew.cmu.edu/mailman/listinfo/info-cyrus
>>>>> -- 
>>>>> Kenneth Murchison
>>>>> Principal Systems Software Engineer
>>>>> Carnegie Mellon University
>>>> -----
>>>> Marty Lee                         e: marty at maui-systems.co.uk
>>>> Technical Director                v: +44 845 869 2661
>>>> Maui Systems Ltd                  f: +44 871 433 8922
>>>> Scotland, UK                      w: http://www.maui-systems.co.uk
>>> -- 
>>> Kenneth Murchison
>>> Principal Systems Software Engineer
>>> Carnegie Mellon University
>>>
>


-- 
Kenneth Murchison
Principal Systems Software Engineer
Carnegie Mellon University



More information about the Info-cyrus mailing list