Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Bug]: Caldav limit tag on initial sync causes incorrect Caldav error response. #48678

Open
4 of 8 tasks
JeroenBer opened this issue Oct 13, 2024 · 33 comments
Open
4 of 8 tasks
Assignees
Labels
0. Needs triage Pending check for reproducibility or if it fits our roadmap 28-feedback 29-feedback 30-feedback bug feature: caldav Related to CalDAV internals regression

Comments

@JeroenBer
Copy link

⚠️ This issue respects the following points: ⚠️

Bug description

OneCalendar users are experiencing errors when syncing caldav calendars with Nextcloud. This used to be working.

As OneCalendar developer I tried to reproduce the problem and for the latest versions of 28,29 and 30 the Caldav response is no longer working correctly when
doing a initial sync.

Hereby an overview of which versions are working correct/incorrect:

  • 28.0.9 Correct
  • 28.0.10 Incorrect
  • 28.0.11 Incorrect
  • 29.0.6 Correct
  • 29.0.7 Incorrect
  • 29.0.8 Incorrect
  • 30.0.0 Incorrect

Steps to reproduce

Sync caldav calendar data:

Request data

<sync-collection xmlns="DAV:">
  <sync-token />
  <sync-level>1</sync-level>
  <limit>
    <nresults>100</nresults>
  </limit>
  <prop>
    <getetag />
  </prop>
</sync-collection>

Actual response data (507):

<?xml version="1.0" encoding="utf-8"?>
<d:error xmlns:d="DAV:" xmlns:s="http://sabredav.org/ns">
	<s:exception>Interne serverfout</s:exception>
	<s:message>
		De server was niet in staat je aanvraag te verwerken.		Stuur de hieronder afgebeelde technische details naar de serverbeheerder wanneer dit opnieuw gebeurt.		Meer details in de serverlogging,			</s:message>

	<s:technical-details>
		<s:remote-address>172.17.0.1</s:remote-address>
		<s:request-id>du8YMujFjQr6HIRmBFm1</s:request-id>

		</s:technical-details>
</d:error>

Expected behavior

According to https://tools.ietf.org/html/rfc6578#section-3.11 the caldav server does not need to support limit tag but in that case the following 507 response data is expected:

<?xml version="1.0" encoding="utf-8"?>
<d:error xmlns:d="DAV:" xmlns:s="http://sabredav.org/ns">
  <s:exception>OCA\DAV\Exception\UnsupportedLimitOnInitialSyncException</s:exception>
  <s:message/>
  <d:number-of-matches-within-limits/>
</d:error>

Nextcloud Server version

28

Operating system

None

PHP engine version

None

Web server

None

Database engine version

None

Is this bug present after an update or on a fresh install?

None

Are you using the Nextcloud Server Encryption module?

None

What user-backends are you using?

  • Default user-backend (database)
  • LDAP/ Active Directory
  • SSO - SAML
  • Other

Configuration report

No response

List of activated Apps

No response

Nextcloud Signing status

No response

Nextcloud Logs

No response

Additional info

Perhaps there has been a minor update/fix of SabreDav that caused this problem in the newer 28/29/30 versions ?

@JeroenBer JeroenBer added 0. Needs triage Pending check for reproducibility or if it fits our roadmap bug labels Oct 13, 2024
@joshtrichards
Copy link
Member

joshtrichards commented Oct 13, 2024

<s:request-id>du8YMujFjQr6HIRmBFm1</s:request-id>

The nextcloud.log should have a stack trace or some logging associated with this request id since it's an internal server error (I believe). Happen to have it handy from one of the instances that isn't responding as expected?

Enabling debug mode should also populate technical-details with more info.

I haven't looked too closely, but so far the changes introduced via #47770 & #47805 align most closely with your findings.

@kesselb
Copy link
Contributor

kesselb commented Oct 14, 2024

Thanks for your report, and sorry for the troubles.

I agree with Josh that likely #47770 and #47805 changed how we handle the UnsupportedLimitOnInitialSyncException.

@JeroenBer
Copy link
Author

JeroenBer commented Oct 14, 2024

Hi, I reproduced and looked in the nextcloud.log. This was what came up:

{"reqId":"HXLFwXcaYbWcv9Fym23z","level":3,"time":"2024-10-14T18:45:34+00:00","remoteAddr":"172.17.0.1","user":"admin","app":"webdav","method":"REPORT","url":"/remote.php/dav/calendars/admin/personal/","message":"Exception thrown: OCA\\DAV\\Exception\\UnsupportedLimitOnInitialSyncException","userAgent":"curl/7.54","version":"30.0.0.14","exception":{"Exception":"OCA\\DAV\\Exception\\UnsupportedLimitOnInitialSyncException","Message":"","Code":0,"Trace":[{"file":"/var/www/html/3rdparty/sabre/dav/lib/DAV/Sync/Plugin.php","line":121,"function":"getChanges","class":"OCA\\DAV\\CalDAV\\Calendar","type":"->","args":[null,"1",100]},{"file":"/var/www/html/3rdparty/sabre/dav/lib/DAV/Sync/Plugin.php","line":62,"function":"syncCollection","class":"Sabre\\DAV\\Sync\\Plugin","type":"->","args":["*** sensitive parameters replaced ***"]},{"file":"/var/www/html/3rdparty/sabre/event/lib/WildcardEmitterTrait.php","line":89,"function":"Sabre\\DAV\\Sync\\{closure}","class":"Sabre\\DAV\\Sync\\Plugin","type":"->","args":["*** sensitive parameters replaced ***"]},{"file":"/var/www/html/3rdparty/sabre/dav/lib/DAV/CorePlugin.php","line":690,"function":"emit","class":"Sabre\\DAV\\Server","type":"->","args":["report",["*** sensitive parameters replaced ***","*** sensitive parameters replaced ***","*** sensitive parameters replaced ***"]]},{"file":"/var/www/html/3rdparty/sabre/event/lib/WildcardEmitterTrait.php","line":89,"function":"httpReport","class":"Sabre\\DAV\\CorePlugin","type":"->","args":[["Sabre\\HTTP\\Request"],["Sabre\\HTTP\\Response"]]},{"file":"/var/www/html/3rdparty/sabre/dav/lib/DAV/Server.php","line":472,"function":"emit","class":"Sabre\\DAV\\Server","type":"->","args":["method:REPORT",[["Sabre\\HTTP\\Request"],["Sabre\\HTTP\\Response"]]]},{"file":"/var/www/html/3rdparty/sabre/dav/lib/DAV/Server.php","line":253,"function":"invokeMethod","class":"Sabre\\DAV\\Server","type":"->","args":[["Sabre\\HTTP\\Request"],["Sabre\\HTTP\\Response"]]},{"file":"/var/www/html/apps/dav/lib/Server.php","line":370,"function":"start","class":"Sabre\\DAV\\Server","type":"->","args":[]},{"file":"/var/www/html/apps/dav/appinfo/v2/remote.php","line":19,"function":"exec","class":"OCA\\DAV\\Server","type":"->","args":[]},{"file":"/var/www/html/remote.php","line":146,"args":["/var/www/html/apps/dav/appinfo/v2/remote.php"],"function":"require_once"}],"File":"/var/www/html/apps/dav/lib/CalDAV/Calendar.php","Line":369,"message":"","exception":{},"CustomMessage":"Exception thrown: OCA\\DAV\\Exception\\UnsupportedLimitOnInitialSyncException"}}

It seems indeed the Caldav "UnsupportedLimitOnInitialSyncException".

Probably the changes in #47770 or #47805 changed this behavior and is now producing incorrect exception behavior for Caldav. In my opinion this is clearly a bug, and it might also potentially cause issues in other Caldav errors.

We are receiving more and more mails from people affected by this behavior. Is this something that can be fixed soon ?

@kesselb
Copy link
Contributor

kesselb commented Oct 15, 2024

cc @artonge do you have a tip for us how to prevent the default exception handler to overwrite our exception?

@artonge
Copy link
Contributor

artonge commented Oct 15, 2024

Hmm, maybe we should display the exception for a given set of HTTP code. Probably here:

public function generateBody(\Throwable $ex, int $httpCode): mixed {
if ($this->acceptHtml()) {
$templateName = 'exception';
$renderAs = 'guest';
if ($httpCode === 403 || $httpCode === 404) {
$templateName = (string)$httpCode;
}
} else {
$templateName = 'xml_exception';
$renderAs = null;
$this->server->httpResponse->setHeader('Content-Type', 'application/xml; charset=utf-8');
}
$debug = $this->config->getSystemValueBool('debug', false);
$content = new OC_Template('core', $templateName, $renderAs);
$content->assign('title', $this->server->httpResponse->getStatusText());
$content->assign('remoteAddr', $this->request->getRemoteAddress());
$content->assign('requestID', $this->request->getId());
$content->assign('debugMode', $debug);
$content->assign('errorClass', get_class($ex));
$content->assign('errorMsg', $ex->getMessage());
$content->assign('errorCode', $ex->getCode());
$content->assign('file', $ex->getFile());
$content->assign('line', $ex->getLine());
$content->assign('exception', $ex);
return $content->fetchPage();
}

Update that method to display or not the exception based on the HTTP code.

@JeroenBer
Copy link
Author

JeroenBer commented Oct 25, 2024

Hi,
Any news on this ? Can this be solved quickly for the next release ?
More and more users of OneCalendar are mailing us about this problem in Nextcloud now.
Currently there is no workaround and people cannot use their calendar in OneCalendar.

@pampasadmin
Copy link

The trouble with 30.0.1 is, that there is no switch back possible to 29.0.6 resp. 28.0.9. Therefore waiting for resolution is the only way forward.

@ctosae
Copy link

ctosae commented Oct 29, 2024

I have the same problem!
Is it possible to install a specific version of Nextcloud AIO like 29.0.6?
And... when will this issue be fixed @joshtrichards?

@poek1
Copy link

poek1 commented Nov 1, 2024

I use the Android App OneCalender and get the Errormessage "This does not appear to be a valis CalDav server" when try to add my nextcloud account to it. It does work well with Thunderbird at Mac and Win. Would be nice to get it fixxed soon.

Nextcloud 29.0.3
OneCalender 5.6.0

I am only a user, my Nextcloudadmin gave me that link to Github.

Update: my Admin updated to 29.0.6 and its not working (Server got restart)

@emaas
Copy link

emaas commented Nov 15, 2024

I have multiple users that are running into this issue.
My Nextcloud automatically get's updated every night to keep all the maintenance manageable.
When you are already connected to OneCalender everything works properly.
It is just with the initial setup that it is not working.

@nouse4it
Copy link

I have the exact same problem. I had to reset my phone and start over with the calendar setup. Now I can´t get to run because of the limit error.
When is this going to be fixed?
According to google, this problem occurred several times already in the past Nextcloud versions, f.e. ---> #18490

@pampasadmin
Copy link

On my Android tablet and on win11 the account setup seems to work. However syncing fails.

@bitsky6

This comment has been minimized.

@VEF-Admin
Copy link

VEF-Admin commented Nov 23, 2024

The error is still present with the latest version of NC (30.0.2) and OneCalendar (5.6.0). Is there any guess when a patch/update/workaround will be available? Thanks!

@andreyvb
Copy link

I've tried several apps that sync the calendar over caldav - none work with NextCloud right now.

@Minstrel27
Copy link

Minstrel27 commented Nov 25, 2024

I did some further research and testing, and what I’ve found is that there is a bug in later versions of Nextcloud that prevents INITIAL syncing of caldav calendars. Those versions are 28.0.10 or higher, 29.0.7 or higher, and all versions of 30. Calendars where the initial sync was done in prior versions continue to sync correctly in the latest versions.

I was able to confirm this by going back and installing version 29.0.6, migrating all my data and settings, syncing the calendars, then upgrading to 30.0.2 and everything worked correctly. Obviously doing a new install of 29.0.6 each time I want to add a new user with all that entails is a task I don’t want to do every week, but at least I have an option.

Hopefully this will be fixed in the near future.

@kesselb kesselb moved this from 📄 To do to 🏗️ In progress in 💌 📅 👥 Groupware team Nov 28, 2024
@JeroenBer
Copy link
Author

Hello @kesselb @ChristophWurst @joshtrichards @artonge

We (OneCalendar) have already received hundreds of mails from Nextcloud users facing this issue. Reading the comments above it also seems to fail with other CalDav clients. In reality probably thousands of users are affected who can no longer sync their Nextcloud calendars.

It will be more and more affected users since it fails on initial sync if users try to connect their account again, or if they update their Nextcloud server.

For OneCalendar it's difficult/tricky to build a temporary workaround since OneCalendar syncs with a lot of other servers as well, and it could create problems and loops for non-nextcloud users.

Would it be possible to prioritise this issue ? Any estimates on when it will be solved ?

@JohnNissley
Copy link

This problem makes it very difficult to support calendars in Nextcloud at this time. Please make the nextcloud dav calendar server compliant with industry standards. All dav calendar clients I use are having issues connecting to nextcloud calendars when the initial connection did not happen on a lower version of nextcloud.
Please make this a priority since using nextcloud calendar for any size organization is not practical at this time and calendars are very important for any organization.

@solracsf
Copy link
Member

solracsf commented Dec 2, 2024

Fix should be at #49004 (backports to 30, 29 and 28 will likelly happen in minor releases of January 2025).

@JohnNissley
Copy link

JohnNissley commented Dec 2, 2024 via email

@ibot3
Copy link

ibot3 commented Dec 4, 2024

Is there any chance to get this fix into 30.0.3 @kesselb ?

@poek1
Copy link

poek1 commented Dec 4, 2024

i was trying today to add my nextcloud calender to onecalender and it worked, but syncing failed with a sync error

we have now nextcloud 29.0.9 and onecalender 5.6.0, dont know what changed

but now I get a http error message 507 Insufficient storage ???

@DesertCookie
Copy link

but now I get a http error message 507 Insufficient storage ???

This is exactly the error related to this issue. There's a trail all the way from the OneCalendar support page to here.

@devnoname120
Copy link

@JeroenBer I would suggest you do a pull request next time

@kesselb
Copy link
Contributor

kesselb commented Dec 5, 2024

Hi,

Sorry for not updating you earlier.

We originally planned to resolve this issue with the December 24 maintenance releases (30.0.3, 29.0.10, and 28.0.13), but during the code review, we discovered some issues that needed to be addressed. As a result, the backports weren’t merged.

I plan to resolve the open points and merge the backports for the January 25 maintenance releases (30.0.4 30.0.5, 29.0.11 29.0.12, and 28.0.14 28.0.15). With the holiday season coming up, code review and testing are slower than usual, so there’s a chance the patch might not be ready by the 2025-01-02 deadline.

Thank you for your understanding

@MaggiWuerze
Copy link

Did the review finish in time for the mentioned deadline? Will it ship in January?

@MaggiWuerze
Copy link

So, FYI, with the latest update from Dav5X I could do an initial sync again, so at least that doesn't seem to be connected to this (or at least not in my case)

@JeroenBer
Copy link
Author

Hello @kesselb @ChristophWurst @joshtrichards @artonge

Could anyone please give an update on this when it can be expected. As mentioned earlier a lot of customers facing this problem at the moment for a long time and becoming more and more...

I would like to request again please make a priority of this issue.

@ChristophWurst
Copy link
Member

Thank you for your message, @JeroenBer. This is a high priority for us. It's on the roadmap.

@nouse4it
Copy link

Thank you for your message, @JeroenBer. This is a high priority for us. It's on the roadmap.

Wasn't this planned for the upcoming release of Version 30.0.5?

@MajorP93
Copy link

The PR in question that is supposed to fix this issue (PR #49481) is marked as pending here: #50096

I wonder if and hope that it will be included in 30.0.5.

@VEF-Admin
Copy link

I have just upgraded to Nextcloud 30.0.5, but the error still keeps coming back. Wasn't it supposed to be addressed in this release? It is disappointing....

@kesselb
Copy link
Contributor

kesselb commented Jan 16, 2025

Hi there,

I’m sorry the backports didn’t make it in time. As mentioned before, it’s on our roadmap, but resolving the open points requires further coordination.

We’ll make sure to update you as soon as there’s any progress.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
0. Needs triage Pending check for reproducibility or if it fits our roadmap 28-feedback 29-feedback 30-feedback bug feature: caldav Related to CalDAV internals regression
Projects
Status: 🏗️ In progress
Development

No branches or pull requests