Fixes (Security)
- Fix: storage/hook: escape
$on all placeholder values received from external- credits to @sdushantha for report
- Fix: auth: reject empty login earlier and empty password on all external verification types
- credits to @sdushantha for report
Fixes
- Fix: [sharing] owner cannot change the user or the mapped collection of a map-based share if not permitted to create it
- Fix: doc of rights permissions
MmandTtin reference config and SHARING.md - Fix: [auth]: add server hostname as SNI option (ldap3+tls) for proper validation
- Fix: [sharing] CSV database: improve JSON parser for particular cells
Improvements
- Improvement: auth/ldap: align catch of exceptions of python-ldap with python-ldap3
- Improvement: extend USER/PATH blacklist "minimal" with backtick and
$
Adjustments
- Change: move
requeststo optional extraoauth2for OAuth2 authentication (pip install radicale[oauth2]) - Change: move
pikato optional extrarabbitmqfor the RabbitMQ hook (pip install radicale[rabbitmq]) - Adjustment: CLI option --verify-storage returns now non-zero exit code in case of broken items are found and [storage] skip_broken_item=True
Extensions
- Add: [sharing] permit_create_map = self: permit map-based sharing to self only (e.g. birthday calendar) without sharing with other users
- Add: [rights] permission
S: permit map-based sharing to self only, whatever permit_create_map is - Add: opt-in iTIP scheduling to email hook
- Add: free/busy view returns one VEVENT per busy period (
?view=freebusy, a token with Actionsview=freebusy, and the WebUI link).format=vfreebusystill returns one VFREEBUSY
Features
- Add: [server] type: serve with cheroot (HTTP/1.1, keep-alive;
pip install radicale[cheroot]) - Feature: support zstd compression for responses
Warning
In case of storage hook is in use with version >= 3.5.1, it's adviced to update immediately to 3.9.1
or apply workaround in file radicale/storage/multifilesystem/lock.py by adding .replace('$', '\\$') to "path" and "to_path" at external command generation command = self._hook % ... or takeover related current code of lock.py from here
or apply: [server] validate_path_value = strict (supported since 3.7.2) - may cause issues if strange path names already in use
Warning
In case of authentication via LDAP is active (supported since >= 3.3.0) and server is not rejecting unauthenticated named bind, it's adviced to update immediately to 3.9.1 or apply workaround in file radicale/auth/ldap.py by by adding short after the login function or takeover related current code of ldap.py from here:
- 3.9.0
def _login_ext_with_groups(self, login: str, password: str, context: auth.AuthContext) -> Tuple[str, set]
if not login or not password:
return auth.NO_LOGIN_NO_GROUPS
- 3.3.0 - 3.8.3
def _login(self, login: str, password: str) -> str:
if not login or not password:
return ""
Note
Builds for EL/Fedora are already available https://koji.fedoraproject.org/koji/packageinfo?packageID=16893