github Kozea/Radicale v3.9.1
3.9.1 Features+Fixes (Security)

31 minutes ago

Fixes (Security)

  • Fix: storage/hook: escape $ on all placeholder values received from external
  • Fix: auth: reject empty login earlier and empty password on all external verification types

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 Mm and Tt in 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 requests to optional extra oauth2 for OAuth2 authentication (pip install radicale[oauth2])
  • Change: move pika to optional extra rabbitmq for 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 Actions view=freebusy, and the WebUI link). format=vfreebusy still 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

Don't miss a new Radicale release

NewReleases is sending notifications on new releases.