nextcloud/server · warning · Sabre\DAV\Exception\NotFound
%s with name '%s' 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).
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)
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.
Related errors
- Calendar <$calendarId> not found.
- Calendar <$calendarId> not found
- Entity does not exist or is not available
- Entity type "$name" not found."
- Access denied
AI-assisted analysis of nextcloud/server@ecdeb153ff (2026-08-17).
Data as JSON: /api/errors/4b82db9b1317ce22.
Report an issue: GitHub.