From 23a2c43e680fc4d7e310b22fbf8b5288560bc789 Mon Sep 17 00:00:00 2001 From: Peter Bieringer Date: Fri, 15 May 2026 07:49:19 +0200 Subject: [PATCH 1/3] sharing/propfind/owner: return empty element in case of a mapped share / clients try PROPFIND on this not accessable href --- radicale/app/propfind.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/radicale/app/propfind.py b/radicale/app/propfind.py index 151577f4..d01c5c45 100644 --- a/radicale/app/propfind.py +++ b/radicale/app/propfind.py @@ -395,7 +395,8 @@ def xml_propfind_response( is404 = True elif tag == xmlutils.make_clark("D:owner"): # return empty elment, if no owner available (rfc3744-5.1) - if collection.owner: + # return empty element in case of a mapped share / clients try PROPFIND on this not accessable href + if collection.owner and not share: child_element = ET.Element(xmlutils.make_clark("D:href")) child_element.text = xmlutils.make_href( base_prefix, "/%s/" % collection.owner) From 1349714d937c8262570ec6c5fe97d76a3fc89b42 Mon Sep 17 00:00:00 2001 From: Peter Bieringer Date: Fri, 15 May 2026 07:49:47 +0200 Subject: [PATCH 2/3] sharing/propfind/owner: return empty element in case of a mapped share / clients try PROPFIND on this not accessable href (extend test case) --- radicale/tests/test_sharing.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/radicale/tests/test_sharing.py b/radicale/tests/test_sharing.py index 1ae9a294..2d6f8e3b 100644 --- a/radicale/tests/test_sharing.py +++ b/radicale/tests/test_sharing.py @@ -2236,15 +2236,18 @@ class TestSharingApiSanity(BaseTest): + """, login="user:userpw", check=207) logging.info("response: %r", responses) response = responses[path_shared] - assert not isinstance(response, int) and len(response) == 1 + assert not isinstance(response, int) and len(response) == 2 status, prop = response["D:current-user-principal"] assert status == 200 and len(prop) == 1 element = prop.find(xmlutils.make_clark("D:href")) assert element is not None and element.text == "/user/" + status, prop = response["D:owner"] + assert status == 200 and len(prop) == 0 def test_sharing_api_map_proppatch_acl(self) -> None: """share-by-map API usage tests related to report.""" From fda97fedfa3a677490539b8c2dc1bf645d8bce6c Mon Sep 17 00:00:00 2001 From: Peter Bieringer Date: Fri, 15 May 2026 07:51:37 +0200 Subject: [PATCH 3/3] changelog for sharing/propfind/owner: return empty element --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 34bc118e..736b018c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ # Changelog ## 3.7.4.dev +* Fix: sharing: PROPFIND returns now empty owner element in case of a mapped share as clients try PROPFIND on this not accessable href ## 3.7.3 * Extension: expose RADICALE:version for authenticated users via PROPFIND