Bug: CalDAV organizer edit re-sends stale attendee PARTSTAT → 403, then retries forever
Environment
- eM Client 10.4.5326.0 (.NET 8.0.25), Windows 11 (10.0.26200)
- CalDAV/CardDAV account against Open-Xchange (OX App Suite)
Summary
When I (the organizer) save an event whose attendee is NEEDS-ACTION on the server, eM Client re-uploads the whole VEVENT with that attendee’s PARTSTAT set to a stale ACCEPTED from local cache. OX correctly rejects it (RFC 6638 §3.2.2.1 — organizer may not change an attendee’s status) with 403. eM Client then re-issues the identical failing PUT every sync cycle indefinitely and won’t pull server state down, so the item is permanently stuck.
Repro
- CalDAV account on an RFC-6638-strict server (Open-Xchange).
- Be organizer of an event with an attendee the server holds as NEEDS-ACTION (here entity=-1 — server treats the address as external/unresolved).
- Edit anything (time/alarm) or let an alarm re-upload, save.
Expected: re-emit each attendee’s PARTSTAT as last reported by the server, change only organizer-owned fields; on 403, re-GET and rebase/drop.
Actual: uploads PARTSTAT=ACCEPTED for an attendee the server has as NEEDS-ACTION → 403; retries forever; never reconciles.
Log (redacted)
PUT https://dav.example.org/caldav//.ics
If-Match: “1002-13582-”
Content-Type: text/calendar
…
ATTENDEE;EMAIL=[email protected];CN=;PARTSTAT=ACCEPTED:mailto:[email protected]
END:VEVENT
→ 403 Forbidden
OX:categoryPERMISSION_DENIED</OX:category>
OX:error_descForbidden attendee change [id 13582, attendee …
partStat=NEEDS-ACTION, uri=mailto:[email protected], entity=-1 …
field PARTSTAT]</OX:error_desc>
The uploaded VEVENT says ACCEPTED; the server says NEEDS-ACTION.
Two defects
- Stale attendee PARTSTAT on organizer save (should preserve server-reported value).
- Infinite retry of a rejected change / deadlock (should reconcile on 403).
Comparison: Thunderbird/Lightning on the same server doesn’t do this.