327 Commits

Author SHA1 Message Date
Peter Bieringer
9d545b2770 extend changelog 2026-08-07 21:58:44 +02:00
Milan Crha
dc2a6ac1d7 multifilesystem: Improve performance of PROPFIND
The PROPFIND does not need to check the filesystem for the file existence,
because the list comes from the directory listing, similar as the other
parts already do it. That was highly visible with large collections (10k+ items),
causing massive delays.

Also avoid repeated stat() calls on the same path.
2026-08-07 12:22:22 +02:00
Peter Bieringer
86fd5e8aa5 Development 3.8.0 2026-08-06 08:48:07 +02:00
Peter Bieringer
c1f3217c01 Release 3.7.8 2026-08-06 08:01:32 +02:00
TowyTowy
0e15021c11 Fix: time-range filter on VTODO with DTSTART/DUE and CREATED/COMPLETED
visit_time_ranges() reuses a single "original_duration" variable for two
unrelated purposes: the DTSTART->DUE span and the CREATED->COMPLETED span.
When a VTODO carries all four properties (a completed task, which most
clients write with CREATED and COMPLETED), the second assignment clobbers
the first, and the DTSTART/DUE branch of the rfc4791-9.9 table then
reconstructs DUE as DTSTART + (COMPLETED - CREATED).

The elif chain already implements the RFC table correctly (DTSTART/DUE
take precedence over CREATED/COMPLETED), so the CREATED/COMPLETED value
is never wanted there. Keep it in its own variable.

Effect: such a VTODO is filtered against a bogus interval, both in
calendar-query REPORT and in item.find_time_range() (the enclosing range
cached for the storage prefilter), so completed tasks go missing from -
or wrongly appear in - client results.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-04 20:05:04 +02:00
Peter Bieringer
953aebc85f max_vevent_rrule_occurrence: rename option 2026-08-02 10:58:13 +02:00
Peter Bieringer
b044addc53 Add: [system] max_vevent_rrule_entries option to catch DoS by problematic RRULE early enough 2026-08-01 18:54:31 +02:00
Peter Bieringer
4a4e571cce Add: [report] max_expand_occurrence option to separate from max_freebusy_occurrence 2026-08-01 18:52:08 +02:00
Peter Bieringer
6cdf0e75b4 sharing/map: collection missing trailing / - changelog 2026-08-01 08:48:55 +02:00
Peter Bieringer
43eea27b7e Development 3.7.8.dev 2026-07-19 17:18:33 +02:00
Peter Bieringer
49a4bffa85 Release 3.7.7 2026-07-19 16:31:27 +02:00
Peter Bieringer
eb00d8c796 changelog for 802fd4b2cf 2026-07-19 11:07:36 +02:00
Peter Bieringer
802fd4b2cf changelog for 924abaa46cc367e434bc496f847551b916b7f6ef 2026-07-19 10:24:59 +02:00
TowyTowy
651e30211c Fix: serve_resource/serve_folder ignore mimetypes and fallback_mimetype parameters
httputils._serve_traversable looked up the Content-Type in the
module-level MIMETYPES/FALLBACK_MIMETYPE constants instead of the
mimetypes/fallback_mimetype parameters that serve_resource() and
serve_folder() accept and pass through. The parameters exist since the
helper was extracted for use by web plugins (33fcda7c, "Extract
httputils.serve_folder"), and the sibling parameters path_prefix and
index_file are honored, but a custom web plugin passing its own
mimetype mapping (e.g. to serve .json, .ico or .mjs files with a
correct Content-Type) silently got the built-in mapping and
application/octet-stream fallback instead.

Use the parameters for the lookup. No behavior change for the built-in
web module, which relies on the defaults.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-18 12:10:37 +02:00
TowyTowy
f38688456d Fix: free-busy REPORT always fails when max_freebusy_occurrence is 0
free_busy_report() explicitly handles [reporting] max_freebusy_occurrence = 0
as "limit disabled" when fetching occurrences (n=0 lets time_range_fill
return all occurrences), but the subsequent limit check
'len(occurrences) >= max_occurrence' is trivially true for
max_occurrence == 0, so every free-busy query on a non-empty calendar
raised ValueError ("FREEBUSY occurrences limit of 0 hit") and was
answered with HTTP 400.

Skip the limit check when the limit is disabled, consistent with how
xml_report() treats the same setting ('if max_occurrence and ...').
Behavior for positive limits is unchanged.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-17 01:06:51 +02:00
TowyTowy
c2a73cdc2d Fix: bday conversion clobbers NICKNAME when FN is empty
The share-by-map BDAY-to-ICS conversion builds a placeholder mapping for
the SUMMARY/DESCRIPTION/alarm templates. Each block sets the fallback
marker for its own placeholder (e.g. {nickname} -> '!nickname!', {n:f} ->
'!n:f!'), but the {fn} block wrote the empty-FN fallback to {nickname}
instead of {fn}.

As a result, for a VCARD whose FN is present but empty, a genuine
NICKNAME was overwritten with '!fn!' in the generated event, and the
{fn} placeholder never received its '!fn!' marker, so a '[{fn}|...]'
fallback in a template failed to resolve.

Assign the fallback to {fn}, matching the surrounding blocks.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-15 20:28:25 +02:00
TowyTowy
f48dc47177 Fix: text-match filter crashes on structured property (vCard N/ADR)
A CardDAV addressbook-query REPORT with a text-match prop-filter on a
structured property (e.g. N or ADR) returned HTTP 500. vobject parses
these into Name/Address objects rather than plain strings, so text_match
called .lower() on a non-string and raised AttributeError. Coerce
non-string values to their text representation before matching.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-15 11:26:45 +02:00
TowyTowy
9d46d5b63d Fix: expand REPORT leaves recurrence properties on expanded instances
_strip_single_event() removed the recurrence-defining properties (RRULE,
EXDATE, EXRULE, RDATE) with a single try/except around sequential
delattr() calls. When one of them was absent (e.g. an event with no
EXDATE), the AttributeError aborted the whole block and the following
properties -- notably RDATE -- were left on the expanded
single-occurrence VEVENTs returned by a calendar-data expand REPORT.

Remove each property independently so a missing one no longer prevents
removal of the others. Add a regression test and fixture.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-12 22:30:47 +02:00
TowyTowy
e557c0cd5e Fix: time-range filter matches VEVENT with whole-day DURATION
A calendar-query REPORT with a time-range filter failed to return a
VEVENT that has a whole-day DURATION (e.g. DURATION:P1D or P2D) whenever
the queried range fell inside the event but after DTSTART.

The VEVENT time-range logic in radicale/item/filter.py gated the
"non-zero duration" branch (rfc4791-9.9 line 2) on timedelta.seconds
instead of timedelta.total_seconds(). For a duration that is an exact
multiple of 24h, timedelta.seconds is 0 (the days component holds the
value), so the event was treated as zero-length (line 3) and only
matched a one-second window at its start. An identical event expressed
with DTEND matched correctly, confirming the defect is isolated to the
DURATION path.

Use total_seconds() so multi-day durations are handled correctly. Adds a
regression test (event11, DURATION:P2D) covering both an inside-range
match and an outside-range non-match.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-11 15:58:39 +02:00
Peter Bieringer
21ad7466c5 Release 3.7.6 2026-07-07 07:23:17 +02:00
Peter Bieringer
76d7dc3997 imap_append_domain: changelog 2026-07-05 12:58:39 +02:00
Peter Bieringer
4ce951602c add changelog entry 2026-06-28 21:24:01 +02:00
Arkadiusz Juszczyk
828691e3c4 sharing: URL-encode-aware backmap of REPORT/PROPPATCH hrefs
make_href percent-encodes hrefs (an '@' in an email principal becomes
%40), but the backmap compared against the raw PathMapped, so the
rewrite was skipped and the owner's real path leaked -- editing a shared
collection then failed with 403. Compare and rewrite on the quoted form.
2026-06-24 01:02:28 +02:00
Peter Bieringer
51919e2048 add changelog 2026-06-21 16:50:33 +02:00
Peter Bieringer
b156317a29 update changelog 2026-06-19 05:57:05 +02:00
Peter Bieringer
e3301753f9 Development 3.7.6.dev 2026-06-19 05:44:24 +02:00
Peter Bieringer
23b19b92be Release 3.7.5 2026-06-14 09:20:08 +02:00
Peter Bieringer
8d25f93dc0 changelog for fix 2026-06-08 22:02:01 +02:00
Peter Bieringer
e933725e51 update changelog 2026-06-07 08:24:40 +02:00
Peter Bieringer
b4155001c4 extend changelog 2026-06-06 23:22:15 +02:00
Peter Bieringer
07f06e385b sharing/bday: extend changelog 2026-05-31 07:49:08 +02:00
Peter Bieringer
70ec043423 sharing/bday/add support for custom categories 2026-05-31 06:00:55 +02:00
Peter Bieringer
3673854ab5 sharing/bday/templates: changelog 2026-05-31 06:00:55 +02:00
Peter Bieringer
39ad100a64 Development 3.7.5 2026-05-28 21:51:24 +02:00
Peter Bieringer
5637847324 Release 3.7.4 2026-05-28 20:56:38 +02:00
Peter Bieringer
19a2e69293 changelog for https://github.com/Kozea/Radicale/pull/2145 2026-05-27 20:39:21 +02:00
Peter Bieringer
10983fc924 changelog for https://github.com/Kozea/Radicale/pull/2129 2026-05-27 07:30:35 +02:00
Peter Bieringer
e614455ff1 changelog for https://github.com/Kozea/Radicale/pull/2138 2026-05-27 07:30:35 +02:00
Peter Bieringer
4ec4676826 changelog for https://github.com/Kozea/Radicale/pull/2141 2026-05-27 07:30:35 +02:00
Peter Bieringer
0da09b8c47 changelog for https://github.com/Kozea/Radicale/pull/2135 2026-05-27 07:30:35 +02:00
Peter Bieringer
7e3a9d279a sharing: PROPFIND returns also privilege "write" in case "write-content" and "write-properties" is permitted (changelog) 2026-05-15 12:43:24 +02:00
Peter Bieringer
fda97fedfa changelog for sharing/propfind/owner: return empty element 2026-05-15 07:51:37 +02:00
Peter Bieringer
4fa6ffe82e Development 3.7.4.dev 2026-05-15 07:39:05 +02:00
Peter Bieringer
3888e7d958 Release 3.7.3 2026-05-14 07:55:51 +02:00
Peter Bieringer
13cc4b4986 validation/unicode-letter: changelog for fix 2026-05-12 12:31:17 +02:00
Peter Bieringer
07285cbd73 changelog for https://github.com/Kozea/Radicale/pull/2124 2026-05-12 09:18:53 +02:00
Peter Bieringer
552fde3b35 propfind/sharing: changelog for fixes 2026-05-04 21:42:54 +02:00
Peter Bieringer
c05bd1e55c changelog for 97e350341c 2026-04-30 22:34:26 +02:00
Peter Bieringer
802da14519 changelog for https://github.com/Kozea/Radicale/pull/2116 2026-04-30 07:37:48 +02:00
Peter Bieringer
94de65498b Development 3.7.3 2026-04-30 07:29:13 +02:00