nextcloud/server · warning · Sabre\DAV\Exception\NotFound
with name ' ' could not be found
Error message
%s with name '%s' could not be found
What it means
The ACL check denied access to a node owned by someone else, so Nextcloud deliberately answers 404 ('Calendar/Addressbook/Node with name X could not be found') instead of 403 to avoid leaking the resource's existence. The type label is derived from the node class (Calendar, CachedSubscription, Addressbook, or generic Node).
Solutions
- Confirm the resource is actually shared with the authenticated principal and carries the needed permission.
- Re-share or re-accept the share, then refresh or recreate the client subscription.
- Verify the principal segment of the URL (correct, urlencoded owner uid).
Defensive patterns
Strategy: try-catch
Try / catch
try {
$client->propfind($calendarUrl, []);
} catch (NotFound $e) { // 404: not shared with you, or truly gone
clearStaleSubscription($calendarUrl);
promptUserToReshare($calendarUrl);
} Prevention
- Treat 404 on other users' calendars/addressbooks as a possibly-masked 403.
- Refresh principal URLs after username changes.
- Do not probe for resource existence by URL — the server intentionally hides it.
When it happens
Trigger: Accessing another user's calendar/addressbook by direct URL when no valid share exists: the share was revoked or expired, has not been accepted yet, or the principal segment of the URL is wrong.
Common situations: Stale calendar subscriptions after the owner unshared; clients caching old principal URLs across username changes; enumeration attempts probing for resource existence.
Understand the failure class
Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.
Related errors
- Access denied
- Birthday calendars are disabled
- Calendar <$calendarId> not found.
- Calendar <$calendarId> not found
- Entity does not exist or is not available
AI-assisted analysis of nextcloud/server@ecdeb153ff (2026-08-17).
Data as JSON: /api/errors/4b82db9b1317ce22.
Report an issue: GitHub.
Appendix: source
Thrown at apps/dav/lib/Connector/Sabre/DavAclPlugin.php:59
$node = $this->server->tree->getNodeForPath($uri);
switch (get_class($node)) {
case AddressBook::class:
$type = 'Addressbook';
break;
case Calendar::class:
case CachedSubscription::class:
$type = 'Calendar';
break;
default:
$type = 'Node';
break;
}
if ($this->getCurrentUserPrincipal() === $node->getOwner()) {
throw new Forbidden('Access denied');
} else {
throw new NotFound(
sprintf(
"%s with name '%s' could not be found",
$type,
$node->getName()
)
);
}
}
return $access;
}
#[\Override]
public function propFind(PropFind $propFind, INode $node) {
if ($node instanceof Node) {
// files don't use dav acls
return;View on GitHub (pinned to ecdeb153ff)