Commit Graph

322 Commits

Author SHA1 Message Date
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
Peter Bieringer
98d9257b84 Release 3.7.2 2026-04-29 19:22:41 +02:00
Peter Bieringer
45f2693f17 changelog for WebUI improvement (several PRs) 2026-04-29 07:49:04 +02:00
Peter Bieringer
6d8d29b287 changelog for https://github.com/Kozea/Radicale/pull/2115 2026-04-29 07:47:58 +02:00
Peter Bieringer
5a6bae0a2c user/path value check: add additional option 2026-04-23 06:13:32 +02:00
Peter Bieringer
873e48f518 changelog: fix 2026-04-23 06:13:32 +02:00