Evolution calendar empty and no REPORT request

77 views
Skip to first unread message

Stefan Seehafer

unread,
May 7, 2013, 3:06:20 AM5/7/13
to sabredav...@googlegroups.com
Hello Evert,

it's been a while I've been writing here. I'm almost finished with my project, but I ran into a problem while testing my SD based implementation with Evolution.

The problem is that CalDAV calendars are empty. Everything like adding a calendar to Evolution and/or events to the calendar works fine, but I've noticed "Evolution" never sends a REPORT-request to the server, neither if I just added the calendar nor I press the refresh button. (except if I add an event, which appears on the server, but the calendar is still empty then)

I've been debugging for a few days now and right now I don't have any further clue, what cause this behavior. :-/

I've added a charles dump file.
charles_070513.chls

Evert Pot

unread,
May 7, 2013, 9:22:36 AM5/7/13
to sabredav...@googlegroups.com
Hi Stefan,

Evolution has had a number of bugs in recent times. I would recommend running 3.6.4 as an absolute minimum. (3.8.0 is the latest).

I don't trust anything before it.

The user-agent in your charles dump is 3.2.3.

Evert
> --
> You received this message because you are subscribed to the Google Groups "SabreDAV Discussion" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to sabredav-discu...@googlegroups.com.
> To post to this group, send email to sabredav...@googlegroups.com.
> Visit this group at http://groups.google.com/group/sabredav-discuss?hl=en.
> For more options, visit https://groups.google.com/groups/opt_out.
>
>
> <charles_070513.chls>

Stefan Seehafer

unread,
May 7, 2013, 9:58:42 AM5/7/13
to sabredav...@googlegroups.com
Hmmm... I've tried Evo 3.6.4 too (but not 3.8, I'll try later) and still have the same effect. However, the pdo CalDAV backend shipped with SabreDAV works well on 3.2.3 and 3.6.4. I made a comparison of Charles outputs from both and they are nearly the same, except the data the need/retrieve. Another suggestion?

Evert Pot

unread,
May 7, 2013, 10:11:05 AM5/7/13
to sabredav...@googlegroups.com
On May 7, 2013, at 2:58 PM, Stefan Seehafer <stsee...@gmail.com> wrote:

> Hmmm... I've tried Evo 3.6.4 too (but not 3.8, I'll try later) and still have the same effect. However, the pdo CalDAV backend shipped with SabreDAV works well on 3.2.3 and 3.6.4. I made a comparison of Charles outputs from both and they are nearly the same, except the data the need/retrieve. Another suggestion?

Well, if you have a charles dump of both a working, and a non-working server.. I'd be happy to take a look to give you a second set of eyes. Perhaps I can see something you didn't..

Evert

Stefan Seehafer

unread,
May 7, 2013, 10:22:24 AM5/7/13
to sabredav...@googlegroups.com
Here is a dump from starting with the pdo base calendar first and then using my custom backend.
charles_070513_2.chls

Evert Pot

unread,
May 7, 2013, 10:43:11 AM5/7/13
to sabredav...@googlegroups.com
One difference I see..

Old:

<cal:calendar-user-address-set>
<d:href>mailto:ad...@example.org</d:href>
<d:href>/sabredav/old/calendarserver.php/principals/admin/</d:href>
</cal:calendar-user-address-set>

<cal:calendar-user-address-set>
<d:href>mailto:</d:href>
<d:href>/newcrm_local/ccdav/index.php/principals/test3/</d:href>
</cal:calendar-user-address-set>

This is probably also a bug in sabredav, but it's wise to return an email address for each user..

Evert


On May 7, 2013, at 3:22 PM, Stefan Seehafer <stsee...@gmail.com> wrote:

> Here is a dump from starting with the pdo base calendar first and then using my custom backend.
>
> --
> You received this message because you are subscribed to the Google Groups "SabreDAV Discussion" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to sabredav-discu...@googlegroups.com.
> To post to this group, send email to sabredav...@googlegroups.com.
> Visit this group at http://groups.google.com/group/sabredav-discuss?hl=en.
> For more options, visit https://groups.google.com/groups/opt_out.
>
>
> <charles_070513_2.chls>

Stefan Seehafer

unread,
May 8, 2013, 2:38:08 AM5/8/13
to sabredav...@googlegroups.com
Email is always returned, but the user I used for testing had no email address set. (and with not change, JFYI)

Right now I'd opened Evolution and got a REPORT request, however the calendar is still empty. Since there a no error from validation() method or another ics validator, I guess it's a bug in Evolutions caldav implementation at least up to Evo 3.6.x...

Stefan Seehafer

unread,
May 8, 2013, 4:03:58 AM5/8/13
to sabredav...@googlegroups.com
I just tested with Evo 3.8.1 and nothing :-/

Evert Pot

unread,
May 8, 2013, 6:58:04 AM5/8/13
to sabredav...@googlegroups.com
On May 8, 2013, at 9:03 AM, Stefan Seehafer <stsee...@gmail.com> wrote:

> I just tested with Evo 3.8.1 and nothing :-/

Another side-by-side comparison would be very handy, _with_ email address.

The goal is to eliminate every difference as best you can, what's left is probably the problem :)
I'd be happy to take a second look again.

Evert

Stefan Seehafer

unread,
May 8, 2013, 8:10:10 AM5/8/13
to sabredav...@googlegroups.com
Here from 3.8.1 (_1 file) and 3.2.3 (_2 file) both with pdo nad my backend.
charles_080513_1.chls
charles_080513_2.chls

Evert Pot

unread,
May 8, 2013, 9:04:42 AM5/8/13
to sabredav...@googlegroups.com
Well, I found at least 1 issue.

On your new server, this is being requested:



<C:calendar-query xmlns:C="urn:ietf:params:xml:ns:caldav" xmlns:D="DAV:">
<D:prop>
<D:getetag/>
</D:prop>
<C:filter>
<C:comp-filter name="VCALENDAR">
<C:comp-filter name="VEVENT">
<C:time-range start="20130403T113929Z" end="20130612T113929Z"/>
</C:comp-filter>
</C:comp-filter>
</C:filter>
</C:calendar-query>


But the etag is not returned, calendar-data is.
Definitely a bug, and I believe this has to be in the sabredav source..

Evert
> --
> You received this message because you are subscribed to the Google Groups "SabreDAV Discussion" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to sabredav-discu...@googlegroups.com.
> To post to this group, send email to sabredav...@googlegroups.com.
> Visit this group at http://groups.google.com/group/sabredav-discuss?hl=en.
> For more options, visit https://groups.google.com/groups/opt_out.
>
>
> <charles_080513_1.chls><charles_080513_2.chls>

Stefan Seehafer

unread,
May 14, 2013, 5:46:35 AM5/14/13
to sabredav...@googlegroups.com
Hope you can find the issue.

I have another problem, this time with CardDAV. If I try to download a vcf-file from my CardDAV server, the file always empty. This effects all CardDAV clients who fetch cards via GET-request (like Evolution) that no contacts are visible. The getCard() function is called correctly and returns the right array/ array properties.

On other client like Kontact or iOS everything works fine.
Message has been deleted

Stefan Seehafer

unread,
May 14, 2013, 6:19:22 AM5/14/13
to sabredav...@googlegroups.com
Well, I've found a solution for this problem.

Evert Pot

unread,
May 14, 2013, 7:36:33 AM5/14/13
to sabredav...@googlegroups.com
On May 14, 2013, at 11:19 AM, Stefan Seehafer <stsee...@gmail.com> wrote:

> Well, I've found a solution for this problem.

What was it?

Evert

Stefan Seehafer

unread,
May 14, 2013, 8:03:15 AM5/14/13
to sabredav...@googlegroups.com
Well, I still couldn't figure out the reason. So maybe you got a suggestion what can cause this?

At the moment I just print the carddata-String in getCars(), if Evolution makes it's request. It's more a workaround than a solution, but it works so far.

Evert Pot

unread,
May 14, 2013, 8:23:07 AM5/14/13
to sabredav...@googlegroups.com
On May 14, 2013, at 1:03 PM, Stefan Seehafer <stsee...@gmail.com> wrote:

> Well, I still couldn't figure out the reason. So maybe you got a suggestion what can cause this?
>
> At the moment I just print the carddata-String in getCars(), if Evolution makes it's request. It's more a workaround than a solution, but it works so far.

I don't.. I also haven't found the cause for your earlier issue. First time I've seen it, and I can't really figure out what's 'special' about your case.

You've only created your own backend classes, right? No other stuff was overridden?

Would it be possible for you to send me your implementations? If there's sensitive information, feel free to send it privately..

Evert

Stefan Seehafer

unread,
May 14, 2013, 8:57:50 AM5/14/13
to sabredav...@googlegroups.com
CalDAV: I'd to create a modified CalDAV plugin since Evolution and Kontact won't work with the shipped one. BUT right now I replaced my plugin with the shipped one and now calendar sync work's oO Looks like one problem solved. (so far xD)

CardDAV: For CardDAV I only made an own backend. I'll send you a copy via E-mail.

Evert Pot

unread,
May 14, 2013, 9:43:19 AM5/14/13
to sabredav...@googlegroups.com
On May 14, 2013, at 1:57 PM, Stefan Seehafer <stsee...@gmail.com> wrote:

> CalDAV: I'd to create a modified CalDAV plugin since Evolution and Kontact won't work with the shipped one. BUT right now I replaced my plugin with the shipped one and now calendar sync work's oO Looks like one problem solved. (so far xD)

Well that's good to hear, and also good information to include in the future ;)

>
> CardDAV: For CardDAV I only made an own backend. I'll send you a copy via E-mail.

I suspect the backend you sent me is the one _after_ you fixed the problem, right?
Is there a chance that the original version (that did have the bug) had a size of 0?

Not including the size in getCards will generally not impact performance or cause any issues, unless you view the address book using the browser plugin..

Evert

Stefan Seehafer

unread,
May 14, 2013, 10:17:16 AM5/14/13
to sabredav...@googlegroups.com

Yes, but the fix in getCards was only the following code around line 212/213.

if(strpos($_SERVER['HTTP_USER_AGENT'], 'Evolution') !== false) { print $cardData; }

The rest is the same as before. If I remove the line, no contacts are shown since the response is empty again.

Evert Pot

unread,
May 14, 2013, 10:34:34 AM5/14/13
to sabredav...@googlegroups.com
On May 14, 2013, at 3:17 PM, Stefan Seehafer <stsee...@gmail.com> wrote:

> Am Dienstag, 14. Mai 2013 15:43:19 UTC+2 schrieb Evert Pot:
> On May 14, 2013, at 1:57 PM, Stefan Seehafer <stsee...@gmail.com> wrote:
>
> > CardDAV: For CardDAV I only made an own backend. I'll send you a copy via E-mail.
>
> I suspect the backend you sent me is the one _after_ you fixed the problem, right?
> Is there a chance that the original version (that did have the bug) had a size of 0?
>
> Not including the size in getCards will generally not impact performance or cause any issues, unless you view the address book using the browser plugin..
>
> Evert
>
> Yes, but the fix in getCards was only the following code around line 212/213.
>
> if(strpos($_SERVER['HTTP_USER_AGENT'], 'Evolution') !== false) { print $cardData; }

That's a terrible hack, stop doing that! :) This is guaranteed to break other stuff..

>
> The rest is the same as before. If I remove the line, no contacts are shown since the response is empty again.

So are you sending back size 0 for cards?

Evert

Stefan Seehafer

unread,
May 14, 2013, 10:39:52 AM5/14/13
to sabredav...@googlegroups.com

Am Dienstag, 14. Mai 2013 16:34:34 UTC+2 schrieb Evert Pot:
On May 14, 2013, at 3:17 PM, Stefan Seehafer <stsee...@gmail.com> wrote:

> Am Dienstag, 14. Mai 2013 15:43:19 UTC+2 schrieb Evert Pot:
> On May 14, 2013, at 1:57 PM, Stefan Seehafer <stsee...@gmail.com> wrote:
>
> > CardDAV: For CardDAV I only made an own backend. I'll send you a copy via E-mail.
>
> I suspect the backend you sent me is the one _after_ you fixed the problem, right?
> Is there a chance that the original version (that did have the bug) had a size of 0?
>
> Not including the size in getCards will generally not impact performance or cause any issues, unless you view the address book using the browser plugin..
>
> Evert
>
> Yes, but the fix in getCards was only the following code around line 212/213.
>
> if(strpos($_SERVER['HTTP_USER_AGENT'], 'Evolution') !== false) { print $cardData; }

That's a terrible hack, stop doing that! :) This is guaranteed to break other stuff..


Of course it is... that's why I'm searching for the reason :D
 
>
> The rest is the same as before. If I remove the line, no contacts are shown since the response is empty again.

So are you sending back size 0 for cards?
 
Evert

No. Actually "size" is set to strlen($cardData). If I made a var_dump of the final return array of getCards() the length is set correct.

Evert Pot

unread,
May 14, 2013, 10:53:13 AM5/14/13
to sabredav...@googlegroups.com
>
> >
> > The rest is the same as before. If I remove the line, no contacts are shown since the response is empty again.
>
> So are you sending back size 0 for cards?
>
> Evert
>
> No. Actually "size" is set to strlen($cardData). If I made a var_dump of the final return array of getCards() the length is set correct.

Could I see a sample of that var_dump for both getCards and getCard?

The issue _must_ be in there somewhere :) Unless there's other modifications that tripped something up..

Evert

Stefan Seehafer

unread,
May 15, 2013, 2:24:05 AM5/15/13
to sabredav...@googlegroups.com

I've added two text files one with getCards and the other with a getCard return.

Evert
vardump_getcard.txt
vardump_getcards.txt

Stefan Seehafer

unread,
May 16, 2013, 8:52:06 AM5/16/13
to sabredav...@googlegroups.com
I finally got my stuff working, without hacks, workaround and such :D  The cause was the following.

During very early stage of development, I'd to override the checkPreconditions() method of Server class in an own Server class. Back then, everytime I was going to update/create a contact/date the check failed. This was probably caused by the missing "false" return of getCard() in my CardDAV before you told me when I asked you for help in March. (and maybe the missing ACL plugin as well)

When checkPreconditions() was called in httpGet(), the check using my custom method failed and so Evolution (or any client who uses GET to fetch the vCards) could not fetch the data because httpGet() returned false.

After I replaced my server class with the shipped one from SD, it works.

Evert Pot

unread,
May 16, 2013, 8:57:30 AM5/16/13
to sabredav...@googlegroups.com
Sorry I didn't answer the last email, I had been looking into the files but I couldn't find anything obvious.

But for future reference _please_ include the fact that you're making these types of modifications. Saves everybody time :)

Evert

Stefan Seehafer

unread,
May 16, 2013, 9:23:34 AM5/16/13
to sabredav...@googlegroups.com
I'm sorry about that. I overlooked this modification until today.
Reply all
Reply to author
Forward
0 new messages