App Suite Releases
  • 8.47
  • 8.35
  • 7.10.6
Imprint
  • 8.47
  • 8.35
  • 7.10.6
Imprint
  • Release 8.54
    • Noteworthy Changes
      • Important Changes
      • App Suite Middleware
    • Changelogs
      • App Suite UI
      • App Suite Middleware
      • Additional Components
        • AI Service
        • Booking Service
        • OX Guard UI
        • Switchboard
        • UI Service
    • Helm Charts
      • Helm chart values
      • App Suite Stack Chart
      • Booking
      • Helm Chart core-cacheservice
      • Helm Chart core-documentconverter
      • Helm Chart core-imageconverter
      • core-mw
      • UI Service
      • Switchboard
  • Release 8.53
  • Release 8.52
  • Release 8.51
  • Release 8.50
  • Release 8.49
Maintained. Older releases are best effort.
Upcoming
Not released yet
LTS
Long-term support branch
LTS discontinued
No longer supported, upgrade recommended

App Suite Middleware

8.54.476 - 2026-10-26

Fixed

  • ASB-383: Serialize concurrent moves out of a mail folder and still move the messages left when some were removed meanwhile

8.54.473 - 2026-10-26

Changed

  • SCR-2119: Upgrade Apache CXF to 4.2.4, Guava to 33.7.2, Jackson to 2.22.4 and Logback to 1.6.5
  • SCR-2204: Make the Lifetime of Pending OIDC Authentication Requests Configurable and Default It to 30 Minutes
    • SCR-2204: New property com.openexchange.oidc.stateLifetimeSeconds for pending OpenID Connect logins
  • SCR-2205: Restart the OIDC Login for a Callback With an Unknown or Expired State
    • SCR-2205: Restart the OpenID Connect login for a callback with an unknown or expired state

Fixed

  • ASB-373: Name the thumbnail of an external storage after its image type so Office files of Box.com and Google Drive get a preview
  • Keep the OIDC State After a Failed Login Attempt So a Retried Callback Completes
  • Skip Mail Connections for Standard Folder Settings of Shared Account Sessions
  • Unknown Login Names No Longer Log a Failed Mail-Login Cache Load at WARN Level
  • Unknown login names no longer log a failed cache load at WARN level (core-gitlab-com#68)
    • LocalCachingUserStorage.getUserId(login) looks the login up outside the Caffeine loader, so that a login name without a user, e.g. a mistyped login or a user of a connected system without a counterpart, no longer makes the cache log "Exception thrown during asynchronous load" with a stack trace; successful lookups are cached as before, failures stay uncached

8.54.472 - 2026-10-22

Fixed

  • ASB-335: Keep a single-use Guard token unused when saving an encrypted draft

8.54.470 - 2026-10-22

Fixed

  • ASB-367: State the Shared with me folder and the trash folders of an OpenCloud account as allowing no creation

8.54.469 - 2026-10-22

Fixed

  • ASB-366: Let the root of an OpenCloud account be renamed again, which renames the account

8.54.468 - 2026-10-22

Fixed

  • ASB-366: Let the root of an OpenCloud account be renamed again, which renames the account

8.54.466 - 2026-10-22

Added

  • SCR-1995: Empty a folder, mark all its messages read and read the mail quota on the Mobile API

Changed

  • SCR-2130: Keep derived Argon2 keys cached for an hour without use, configurable via com.openexchange.crypto.argon.keyCacheIdleMinutes

Fixed

  • ASB-346: Don't lose an OpenCloud file or folder when moving it onto itself through another account
  • ASB-347: Apply a new file name when saving new contents of a file in a WebDAV-based storage like Nextcloud or OpenCloud
  • ASB-348: List namespace-aware update tasks as pending unless their namespace is actually excluded
  • ASB-350: Signal truncated CalDAV sync-collection results also when post-processing drops events
  • ASB-353: Pick a free name when creating or moving a folder onto a taken name in an OpenCloud or Nextcloud storage
  • ASB-355: Keep an inline image's position between plain-text parts also for raw mail content
  • ASB-356: Don't batch mail updates combining several changes inside a multiple request
  • ASB-359: Copying a shared file into another storage fails, as the shares of the source are copied along
  • ASB-360: Sorted mail search with a date misses or adds mail received around the day of the given time
  • ASB-362: Renaming the primary mail account fails without multiple_mail_accounts permission
  • ASB-364: Categories several users add to a shared account overwrite each other
    • SCR-2188: New version of shared account data in the JSlob API and error code JSNCON-0012

8.54.465 - 2026-10-16

Added

  • SCR-2020: Name the folders a Mobile API search by account passes over in unavailableFolders

8.54.464 - 2026-10-16

Added

  • SCR-2020: Name the folders a Mobile API search by account passes over in unavailableFolders

Fixed

  • ASB-340: State the root and the grouping virtual folders of an OpenCloud account as read-only
  • ASB-342: Apply the rollout strategy of a core-mw StatefulSet as spec.updateStrategy

8.54.463 - 2026-10-16

Added

  • Search one mail account on the Mobile API with scope.accountId (core-gitlab-com#57)
    • SCR-2020: New Mobile API endpoints for message lists, conversations and search

8.54.462 - 2026-10-16

Added

  • Search one mail account on the Mobile API with scope.accountId (core-gitlab-com#57)
    • SCR-2020: New Mobile API endpoints for message lists, conversations and search

Fixed

  • Keep schema update states with running or pending blocking updates out of the near cache

8.54.460 - 2026-10-15

Changed

  • SCR-2167: A Module Omitted When Setting Shared Account Permissions Falls Back to the Default Permission Set

8.54.456 - 2026-10-15

Fixed

  • The MCP endpoint and the Mobile API match an access token audience with spaces, e.g. "OX App Suite", as a whole (core-gitlab-com#89)
    • SCR-2027: New configuration option for the audience of JWTs accepted by the MCP server

8.54.455 - 2026-10-14

Fixed

  • ASB-334: Let the SOAP operation grantMultiple of OXDeputyPermissionsService accept a list of deputy permissions

8.54.454 - 2026-10-14

Added

  • Translation updates 8.54

8.54.453 - 2026-10-14

Added

  • Translation updates 8.54

8.54.448 - 2026-10-14

Added

  • Rotate the token of the Mobile API, sliding its lifetime (core-gitlab-com#93)
    • SCR-2010: New Mobile API endpoints for sign-in, account data and recipient suggestions
    • SCR-2165: New columns for the rotation of personal access tokens in table access_token

8.54.447 - 2026-10-13

Changed

  • Keep percent and plus signs that AJAXUtility marks URL-safe instead of re-encoding them

8.54.436 - 2026-10-12

Fixed

  • ASB-321: Look up a user by mail address or mail login exactly instead of treating *, ?, % and _ as wildcards

8.54.435 - 2026-10-12

Fixed

  • ASB-321: Look up a user by mail address or mail login exactly instead of treating *, ?, % and _ as wildcards
  • Keep the sent folder of sent messages in threaded Unified Mail listings instead of reporting them in the INBOX

8.54.434 - 2026-10-09

Fixed

  • ASB-320: Check a folder missing from LIST by opening it instead of a raw EXAMINE on the connection of another open folder

8.54.433 - 2026-10-09

Fixed

  • ASB-320: Probe the user flag support without selecting the INBOX on the connection of another open folder

8.54.432 - 2026-10-09

Fixed

  • ASB-320: Probe the user flag support without selecting the INBOX on the connection of another open folder

8.54.431 - 2026-10-09

Fixed

  • Decide the TLS trust per connection and keep pooled connections of users' own trust decisions apart (core-gitlab-com#91)
  • Expunge the message by its sequence number on an IMAP VANISHED response instead of its message number (core-gitlab-com#92)

8.54.430 - 2026-10-09

Fixed

  • Decide the TLS trust per connection and keep pooled connections of users' own trust decisions apart (core-gitlab-com#91)
  • Expunge the message by its sequence number on an IMAP VANISHED response instead of its message number (core-gitlab-com#92)

8.54.429 - 2026-10-09

Fixed

  • ASB-320: Set user flags in the intended folder when the session has not yet probed the user flag support

8.54.428 - 2026-10-09

Changed

  • SCR-2162: Never match the SSL white-list against the address of an HTTP proxy tunneling the connection, only against the target host

8.54.426 - 2026-10-09

Fixed

  • ASB-303: Leave scheduled mails unsent while the feature is disabled and tell about a failed transport attempt only once
  • ASB-305: Reject mail?action=transport with MSG-0129 instead of sending with a foreign From
  • ASB-306: Withhold deputy grants if the granting user's state cannot be determined
  • ASB-307: Skip a granting context whose deputy grants cannot be read instead of failing all cross-context grants
  • Open redirects, ReDoS and unbounded RMI deserialization from SAST triage

8.54.423 - 2026-10-07

Fixed

  • PBSR-1877: Appsuite Shared Accounts with OAuth2 Break on Dovecot 2.4.5 and 3.1.6
    • SCR-2131: New Properties to Log In to Secondary and Shared Accounts With the Acting User's Credentials

8.54.422 - 2026-10-07

Fixed

  • ASB-298: Fall back to formal German for texts missing in the informal translations and ship the informal translations

8.54.421 - 2026-10-07

Changed

  • SCR-2149: The Go entrypoint forwards termination signals to the middleware, waits for it and exits with its exit code

Fixed

  • ASB-298: Fall back to formal German for texts missing in the informal translations and ship the informal translations

8.54.420 - 2026-10-07

Changed

  • SCR-2136: Handle failed middleware nodes for live change streams: streams of dead nodes no longer replace healthy ones, refused clients retry spread out, and overloaded nodes rebalance
  • SCR-2149: The Go entrypoint forwards termination signals to the middleware, waits for it and exits with its exit code

8.54.419 - 2026-10-07

Fixed

  • KPN-98: Mark the OIDC State Binding, PKCE and PAR Properties as Available Since 8.53
    • SCR-2008: New Configuration Property to Bind OpenID Connect Logins to the Initiating Browser
    • SCR-2009: New Configuration Property to Use PKCE in the OpenID Connect Authorization Code Flow
    • SCR-2085: New Configuration Property to Use Pushed Authorization Requests in the OpenID Connect Authorization Code Flow

8.54.418 - 2026-10-07

Changed

  • SCR-2132: Fall back for a scheduled or snoozed mail only to a session of its user that is alive at that time, not to the one it was scheduled with

Fixed

  • KPN-98: Mark the OIDC State Binding, PKCE and PAR Properties as Available Since 8.53
    • SCR-2008: New Configuration Property to Bind OpenID Connect Logins to the Initiating Browser
    • SCR-2009: New Configuration Property to Use PKCE in the OpenID Connect Authorization Code Flow
    • SCR-2085: New Configuration Property to Use Pushed Authorization Requests in the OpenID Connect Authorization Code Flow

8.54.417 - 2026-10-07

Changed

  • SCR-2132: Keep-alive puts off rows of a misconfigured back-end by an interval and no longer ends the run for them

8.54.415 - 2026-10-06

Changed

  • SCR-2136: Refuse live change streams of sessions that await their second factor or fail for good with 401 resp. 403 instead of a retryable 503

8.54.414 - 2026-10-06

Changed

  • SCR-2132: Find the token revocation endpoint through OpenID Connect discovery where none is configured, and warn where refresh tokens expire before their keep-alive
  • SCR-2136: Refuse live change streams of sessions that await their second factor or fail for good with 401 resp. 403 instead of a retryable 503

8.54.413 - 2026-10-06

Changed

  • SCR-2136: Keep watched mailboxes up off the timer, checking sessions at most every 30 seconds, so that a slow session storage or cluster map delays neither looks nor claims

8.54.412 - 2026-10-06

Added

  • SCR-2132: Count refreshes of kept OAuth tokens that the configuration does not allow

8.54.411 - 2026-10-06

Added

  • SCR-2132: Count refreshes of kept OAuth tokens that the configuration does not allow

8.54.410 - 2026-10-06

Changed

  • SCR-2132: Keep refreshing kept OAuth tokens on use after a refresh without expires_in, and handle a refused client like an unusable credential

8.54.409 - 2026-10-06

Changed

  • SCR-2136: Keep the pings of live change streams on time however slow Redis is, by checking each session once per interval in the background and writing stream presence in batches
  • SCR-2138: Sweep a user's contact trash at most hourly per node and read only the oldest contacts' identifiers and timestamps, a thousand at most

Fixed

  • ASB-282: Snooze and schedule mails where a mail authenticator brings its own credentials, e.g. a token issued per access

8.54.408 - 2026-10-06

Changed

  • SCR-2136: Keep the pings of live change streams on time however slow Redis is, by checking each session once per interval in the background and writing stream presence in batches

Fixed

  • ASB-282: Snooze and schedule mails where a mail authenticator brings its own credentials, e.g. a token issued per access
  • Unsnoozing a mail that is not snoozed (any more) fails with a NullPointerException and hard-deletes it from the snoozed folder

8.54.407 - 2026-10-06

Changed

  • SCR-2132: Keep mail credentials that cannot be read or rewritten for now instead of taking them for unreadable or lost
  • SCR-2134: Revoke access tokens only for mail password refusals that go on without a pause, and schedule credentials older nodes leave unscheduled while the keep-alive is off

8.54.406 - 2026-10-06

Changed

  • SCR-2132: Keep mail credentials that cannot be read or rewritten for now instead of taking them for unreadable or lost
  • SCR-2134: Revoke access tokens only for mail password refusals that go on without a pause, and schedule credentials older nodes leave unscheduled while the keep-alive is off

8.54.405 - 2026-10-06

Changed

  • SCR-2130: Reuse a per-node salt for the session obfuscation key and bound concurrent Argon2 key derivations
  • SCR-2133: Leave the tokens a repair replaces with tokens of the same back-end to expire, as the repaired credential may share their client session

8.54.404 - 2026-10-05

Changed

  • SCR-2129: Keep refreshed tokens with the current ID token where the identity provider's signing keys cannot be fetched, instead of ending the session

8.54.403 - 2026-10-05

Changed

  • SCR-2128: Keep a mail credential that cannot be read on a password change, and tell a cipher that is not there for now apart from an unreadable one

8.54.402 - 2026-10-05

Changed

  • SCR-2128: Keep a mail credential that cannot be read on a password change, and tell a cipher that is not there for now apart from an unreadable one

8.54.400 - 2026-10-05

Changed

  • SCR-2126: Revoke no access token and refresh no kept credential while the session storage cannot be read, and revoke after a refused password without a comparing session only once a lockout is over
    • SCR-2127: New configuration option for revoking access tokens after a refused mail password

8.54.399 - 2026-10-05

Changed

  • SCR-2124: Queue the logouts of deleted users' and contexts' exchanged tokens instead of tying up pool threads
  • SCR-2125: Answer an administrator's repair of a mail credential another node works on with deferred, and go on with the next session where a repair lost the credential

8.54.398 - 2026-10-05

Added

  • KPN-101: OIDC: Enable Pushed Authorization Requests
    • SCR-2085: New Configuration Property to Use Pushed Authorization Requests in the OpenID Connect Authorization Code Flow

Changed

  • SCR-2124: Queue the logouts of deleted users' and contexts' exchanged tokens instead of tying up pool threads
  • SCR-2125: Answer an administrator's repair of a mail credential another node works on with deferred, and go on with the next session where a repair lost the credential
  • Modernize the OpenID Connect SSO Documentation and Flow Diagrams

Fixed

  • KPN-101: Correct the OIDC Property Fallback Documentation and Mark PAR as Available Since 8.54

8.54.396 - 2026-10-05

Fixed

  • ASB-279: B-encode mostly non-ASCII file names so iOS Mail can decode them

8.54.395 - 2026-10-05

Fixed

  • ASB-279: B-encode mostly non-ASCII file names so iOS Mail can decode them

8.54.394 - 2026-10-05

Changed

  • SCR-2118: Log out exchanged tokens only with the last exchanged mail credential of a user for their back-end

8.54.393 - 2026-10-05

Changed

  • SCR-2117: Leave rows of the old format alone while their feature handles them, keep a credential whose rewrite outcome is unclear, and remember walks that take several runs
  • SCR-2118: Log out exchanged tokens only with the last exchanged mail credential of a user for their back-end

8.54.392 - 2026-10-05

Changed

  • SCR-2116: Answer RMI callers of a context on another site with errors they can load

8.54.391 - 2026-10-02

Changed

  • SCR-2111: Leave the OpenID Connect logout mapping to real sessions when the mail credential vault refreshes kept tokens
  • SCR-2112: Schedule kept tokens while the mail credential vault's keep-alive is switched off, so that switching it on takes them up
  • SCR-2113: Hand out no expired access token of a kept mail credential when its refresh fails for now

8.54.390 - 2026-10-02

Changed

  • SCR-2111: Leave the OpenID Connect logout mapping to real sessions when the mail credential vault refreshes kept tokens
  • SCR-2112: Schedule kept tokens while the mail credential vault's keep-alive is switched off, so that switching it on takes them up
  • SCR-2113: Hand out no expired access token of a kept mail credential when its refresh fails for now

8.54.387 - 2026-10-02

Changed

  • SCR-2110: Refresh a live session's own tokens before a repair of a mail credential takes them over

8.54.385 - 2026-10-02

Changed

  • SCR-2109: Try further live sessions, the freshest first, when one cannot repair a kept mail credential

8.54.383 - 2026-10-02

Added

  • SCR-2106: Repair or refresh a kept mail credential on an administrator's request, and report the vault's gauges cluster-wide
    • SCR-2107: New OXMailCredentialInterface methods to repair or refresh a kept mail credential
    • SCR-2108: Mail credential vault gauges report the cluster-wide count on every node

8.54.382 - 2026-10-02

Added

  • SCR-2103: Repair the mail credential of a personal access token when the token is presented, and revoke exchanged tokens without an ID token
    • SCR-2104: Mail credential vault repairs personal access token credentials on use and revokes exchanged tokens

8.54.381 - 2026-10-02

Added

  • SCR-2103: Repair the mail credential of a personal access token when the token is presented, and revoke exchanged tokens without an ID token
    • SCR-2104: Mail credential vault repairs personal access token credentials on use and revokes exchanged tokens

8.54.378 - 2026-10-02

Fixed

  • ASB-205: Treat a push registration as owned only while permanent push is enabled

8.54.377 - 2026-10-02

Added

  • SCR-2098: Administer kept mail credentials through the provisioning API, keep short-lived refreshed tokens, exchange for refresh tokens and tell snoozed mail owners
    • SCR-2099: New option to ask for a refresh token in the token exchange of the mail credential vault
    • SCR-2100: Mail credential vault keeps short-lived refreshed tokens, tells snoozed mail owners and reports more metrics

Fixed

  • ASB-205: Treat a push registration as owned only while permanent push is enabled

8.54.376 - 2026-10-02

Added

  • SCR-2098: Administer kept mail credentials through the provisioning API, keep short-lived refreshed tokens, exchange for refresh tokens and tell snoozed mail owners
    • SCR-2099: New option to ask for a refresh token in the token exchange of the mail credential vault
    • SCR-2100: Mail credential vault keeps short-lived refreshed tokens, tells snoozed mail owners and reports more metrics

8.54.374 - 2026-10-02

Fixed

  • ASB-273: Account-specific IMAP failures after login no longer mark the server as temporarily down
    • SCR-2096: IMAP temporary-down back-off no longer triggered by account-specific failures after login

8.54.373 - 2026-10-02

Fixed

  • ASB-273: Account-specific IMAP failures after login no longer mark the server as temporarily down
    • SCR-2096: IMAP temporary-down back-off no longer triggered by account-specific failures after login

8.54.372 - 2026-10-02

Added

  • SCR-2093: Keep personal access token and exchanged mail credentials alive, count vault metrics and accept a previous session encryption key
    • SCR-2094: Index refresh_due of table mail_credential now starts with caller_key
    • SCR-2095: Mail credential vault keeps more OAuth tokens alive and reports metrics

Fixed

  • ASB-275: Close Redis connections that get established only after the connect timeout elapsed

8.54.370 - 2026-10-01

Added

  • SCR-2086: Keep idle mail credential tokens alive, repair rejected refresh tokens and survive a change of the session encryption key
    • SCR-2087: New column refresh_due in table mail_credential
    • SCR-2088: Mail credential vault keeps idle OAuth tokens alive and repairs rejected ones

8.54.364 - 2026-09-30

Fixed

  • ASB-268: Show the signature size limit in a human-readable unit

8.54.363 - 2026-09-30

Fixed

  • ASB-268: Show the signature size limit in a human-readable unit

8.54.360 - 2026-09-30

Added

  • SCR-1946: REST-like alternative for the accesstoken HTTP API on the collection accesstokens

8.54.359 - 2026-09-30

Changed

  • PBSR-1876: Answer Searches Including Unmapped Fields from the LDAP Contacts Cache

8.54.350 - 2026-09-29

Changed

  • SCR-2047: SSL: fall back to the JVM's trust store instead of trusting every certificate if no trust managers are available or the trust level is invalid
  • SCR-2048: User feedback: pseudonymize users in exports with an HMAC keyed by a configurable secret instead of a plain MD5 hash
    • SCR-2049: New configuration options for user feedback pseudonyms

8.54.349 - 2026-09-29

Fixed

  • GUARD-539: Keep the bare Guard token in a draft's security settings

8.54.348 - 2026-09-29

Fixed

  • GUARD-539: Keep the bare Guard token in a draft's security settings

8.54.346 - 2026-09-29

Changed

  • SCR-2044: Removed the unused libraries eddsa, cose-java and nekohtml and replaced PBKDF2 with the JDK implementation

8.54.345 - 2026-09-28

Changed

  • Log OAuth configuration hints at DEBUG instead WARN or INFO

8.54.344 - 2026-09-28

Changed

  • Mobile API clients send Accept: application/problem+json and pick the Bearer challenge

8.54.343 - 2026-09-28

Changed

  • SCR-2041: Upgraded the Apache Kafka client from 4.0.0 to 4.0.2 to fix CVE-2026-35554 and CVE-2026-33558

Fixed

  • PBSR-1820: SSL White-List No Longer Resolves Host Names, So a Crafted DNS Answer Cannot Skip Certificate Checks

8.54.342 - 2026-09-28

Fixed

  • PBSR-1820: SSL White-List No Longer Resolves Host Names, So a Crafted DNS Answer Cannot Skip Certificate Checks

8.54.341 - 2026-09-28

Fixed

  • PBSR-1820: Connections Opened During Start-Up No Longer Trust Every Certificate With trustlevel=restricted

8.54.339 - 2026-09-28

Changed

  • Log a Data Export Clean-up Run Disabled per Configuration at DEBUG instead of WARN

8.54.335 - 2026-09-27

Added

  • Search across all mail accounts in the Mobile API (core-gitlab-com#72)

Changed

  • SCR-2028: Require the session secret for creating an OAuth account instead of accepting the token of the call-back URL
  • Harden the MCP endpoint after a full review (core-gitlab-com#45)
    • SCR-1944: New configuration options for the MCP server
    • SCR-1945: New MCP server endpoint for read-only access to mail, calendar, contacts, files and tasks
    • SCR-1974: New capabilities access_tokens and mcp
    • SCR-2027: New configuration option for the audience of JWTs accepted by the MCP server

8.54.334 - 2026-09-26

Added

  • Send read receipts through the Mobile API (core-gitlab-com#72)
  • Folder changes since a state in the Mobile API (core-gitlab-com#73)

8.54.333 - 2026-09-26

Added

  • Send read receipts through the Mobile API (core-gitlab-com#72)
  • Folder changes since a state in the Mobile API (core-gitlab-com#73)

Fixed

  • ASB-259: Inline Images Without File Name Missing for Raw Mail View

8.54.332 - 2026-09-25

Added

  • German translation updates 8.54
  • Folder states before and after bulk message changes in the Mobile API (core-gitlab-com#63)
    • SCR-2017: New Mobile API endpoint to change many messages at once

Fixed

  • Tolerate Unknown Shared Account Capabilities in Stored Permissions
  • Read external mail accounts through the Mobile API with an access token (core-gitlab-com#69)

8.54.331 - 2026-09-24

Added

  • Folder states before and after bulk message changes in the Mobile API (core-gitlab-com#63)
    • SCR-2017: New Mobile API endpoint to change many messages at once

8.54.330 - 2026-09-24

Added

  • Mobile API message lists, conversations and search (core-gitlab-com#62)
    • SCR-2020: New Mobile API endpoints for message lists, conversations and search
    • SCR-2018: New Mobile API endpoints to read a message, its body, source, attachments and attachment previews

8.54.329 - 2026-09-24

Added

  • Mobile API message lists, conversations and search (core-gitlab-com#62)
    • SCR-2020: New Mobile API endpoints for message lists, conversations and search
    • SCR-2018: New Mobile API endpoints to read a message, its body, source, attachments and attachment previews

8.54.328 - 2026-09-24

Added

  • Change many messages at once through the Mobile API (core-gitlab-com#63)
    • SCR-2017: New Mobile API endpoint to change many messages at once

8.54.325 - 2026-09-24

Changed

  • Refuse live change streams under the dispatcher prefix with the problem codes of the Mobile API (core-gitlab-com#57)
    • SCR-2014: New Mobile API operations for live events and batch requests

Fixed

  • ASB-254: Delete contexts under MariaDB snapshot isolation by keeping delete listeners in the deletion's transaction

8.54.324 - 2026-09-24

Added

  • Mobile API message changes of a folder (core-gitlab-com#62)
    • SCR-2013: New Mobile API endpoint for the message changes of a mail folder

Changed

  • Refuse live change streams under the dispatcher prefix with the problem codes of the Mobile API (core-gitlab-com#57)
    • SCR-2014: New Mobile API operations for live events and batch requests

Fixed

  • ASB-254: Delete contexts under MariaDB snapshot isolation by keeping delete listeners in the deletion's transaction

8.54.323 - 2026-09-24

Added

  • KPN-99: PKCE for the OIDC Authorization Code Flow
    • SCR-2009: New Configuration Property to Use PKCE in the OpenID Connect Authorization Code Flow
  • Live events and batch requests for the Mobile API (core-gitlab-com#66)
    • SCR-2014: New Mobile API operations for live events and batch requests
    • SCR-1978: New configuration options for live change events

Fixed

  • KPN-98: Decline OIDC Callbacks for an Unknown State
    • SCR-2008: New Configuration Property to Bind OpenID Connect Logins to the Initiating Browser

8.54.322 - 2026-09-24

Added

  • Mobile API folders with a state per folder (core-gitlab-com#61)
    • SCR-2012: New Mobile API endpoints for mail folders
  • Live events and batch requests for the Mobile API (core-gitlab-com#66)
    • SCR-2014: New Mobile API operations for live events and batch requests
    • SCR-1978: New configuration options for live change events

8.54.321 - 2026-09-24

Added

  • Mobile API folders with a state per folder (core-gitlab-com#61)
    • SCR-2012: New Mobile API endpoints for mail folders

8.54.320 - 2026-09-24

Added

  • ASB-64: Virtual "All my public appointments" collection via CalDAV
    • SCR-1876: New configuration option for the virtual CalDAV collection "All my public appointments"
  • ASB-65: Import parameter applyDefaultAlarms to apply the user's own reminders to imported appointments
    • SCR-1875: New optional parameter applyDefaultAlarms for the iCal import request
  • ASB-132: Light-weight deputy action=reverseIds listing grantors without resolving grant details
    • SCR-1844: New deputy module action reverseIds that lists the granting users without resolving grant details
  • ASB-195: Document and cover the folder operations permitted within a shared account's mail folders
  • ASB-244: Having the Default Reminder Time Configurable for New Accounts
    • SCR-1975: New Properties to Configure Default Alarms for Newly Provisioned Calendar Accounts
  • ASB-251: Enforce anti-virus scans, ICAP over TLS with time-outs, strict verdicts and a scan log
    • SCR-2000: New configuration options for anti-virus scanning
    • SCR-2001: Stricter anti-virus verdicts, more scanned downloads and a scan log
  • PBSR-1689: New Options to Reassign Shared Data When Soft-Deleting a User
    • Soft user delete: a leaver state between deactivated and deleted (core-gitlab-com#44)
  • PBSR-1694: Subadmin Provisioning Tests for Shared Accounts and Deputy
  • PBSR-1874: Register a Cross-Context Liaison for Shared Account Permissions
    • SCR-1985: Changed behavior of listing the permission holders of a shared account
    • SCR-1986: New administrative REST endpoints for inspecting the cross-context grant index
    • SCR-1987: Added the "xctx_grants" Cross-Context Grant Index Table and Create-Table Update Task
  • PBSR-1882: Login Parameter to Admit an Account That Is Not Enabled
  • SCR-1845: New Configuration Option for Expanding Nested LDAP Distribution Lists
  • SCR-1861: Add endpoint that resolves a user for external auth
  • SCR-1878: Vacation notice can answer internal and external senders differently
    • SCR-1879: New properties "vacation.internal.enabled" and "vacation.internal.externalTagHeader" for vacation notices treating internal and external senders differently
    • SCR-1880: Changed behavior of Sieve script parsing: "elsif"/"else" control blocks become branches of a single rule instead of unsupported rules
    • New optional fields of the vacation action in the mail filter v2 API: the explicit vacationMode names the notice's mode - "all" (the classic rule), "split" (external senders receive the separate subjectExt/textExt) or "internalOnly" (external senders receive no notice). Clients supporting the fields send the mode on every vacation write; a vacation action without it comes from a field-unaware client and preserves an existing extended structure across the otherwise complete replace - only an explicit "all" downgrades. While the feature is unavailable, clients echo the mode they read for an existing extended rule; its modes stay accepted. Invalid mode/field combinations, line breaks in subjectExt and in the legacy subject are rejected with MAIL_FILTER-0044, a second vacation action in one rule with MAIL_FILTER-0045.
    • The sender class is decided solely by the classifier header the mail platform stamps on every delivered message (property ...options.vacation. internal.externalTagHeader names the header, values are fixed: true = external, false = internal); a message carrying neither value - or both - receives no vacation reply at all, so broken or forged stamping fails closed. The feature is an operator opt-in (...options.vacation.internal. enabled, default false) and announced to clients as vacationInternalAvailable while the vacation action itself is offered. The vacationDomains allowlist covers every branch of extended rules, and the vacationRestrictToAddresses restriction covers every vacation-carrying branch.
    • Sieve scripts containing elsif/else control blocks now parse into single multi-branch rules instead of unsupported error rules, regardless of the feature toggle, and lone CR line breaks are normalized to CRLF; MailFilterInterceptor implementations must not assume single-branch rules any more (Rule.getBranches/hasMultipleBranches). Hand-written multi-branch rules are read-only through both JSON interfaces: the v2 list action announces that up front via errormsg while the leading branch stays reported, and updates are refused - v2 with MAIL_FILTER-0042 for vacation-carrying rules ("changed outside this application") and MAIL_FILTER-0041 otherwise, v1 with the same pair keyed on the vacation flag, pointing editors of extended vacation rules to an up-to-date client.
  • SCR-1897: Provisioning tokens that open several contexts at once
    • SCR-1898: New tables provisioning_token in the context schema and crosscontext_provisioning_token in the configdb
    • SCR-1940: New command line tool createprovisioningtoken
    • SCR-1941: New command line tool listprovisioningtokens
    • SCR-1942: New command line tool revokeprovisioningtoken
    • SCR-1943: New RMI interface OXProvisioningTokenInterface
    • SCR-1950: New SOAP service OXProvisioningTokenService
    • SCR-1966: New command line tool detachprovisioningtoken
  • SCR-1916: Shared bundle com.openexchange.admin.soap.common and optional contextId for admin SOAP operations - SCR-1916
    • SCR-1921: Administrative SOAP operations accept a plain contextId, and moveContextFilestore reports the correct fault
  • Archive the folders of an OpenCloud account as a ZIP file
  • Documentation of the Nextcloud file storage
  • Documentation of the OpenCloud file storage
    • Describes the setup of the storage, its authentication, the mapping of the users and groups, and the differences to the other storages
    • States that OAuth requires the package open-xchange-oauth in addition to open-xchange-file-storage-webdav, and how the endpoints of an instance that is fronted by an identity provider of its own are configured
    • Describes what an instance with an identity provider of its own requires, so the claims its own client states and the scopes to request for them
    • Describes how a search is performed, which criteria it states and that its items are taken from an index
    • Documents the new properties, the new HTTP API actions for the shares of an item, the additional columns 3250 and 7050, and the managed HTTP client of the storage
    • Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
  • Module access reference article, replacing the stale per-tool documentation of access rights and combinations
  • OAuth, versioning, trash, sharing and search for the Nextcloud file storage
    • SCR-1970: New folder type for the virtual folders of a file storage
    • SCR-1971: New properties matching the users and groups of a Nextcloud instance with the ones of the server
    • SCR-1981: New properties of the OAuth provider of a Nextcloud instance
    • SCR-1982: The folders of a Nextcloud account are arranged like the ones of an OpenCloud account
    • SCR-1983: The Nextcloud file storage supports OAuth, versions, trash, sharing and search
    • SCR-1984: A Nextcloud account whose credentials the instance rejects states an error
  • OpenCloud documentation, requirement for user mapping per mail
  • OpenCloud file storage
    • Integrates the files of an OpenCloud instance as a file storage of its own, accessing the files through WebDAV and the spaces, shares and permissions of the instance through the libre graph API.
    • Adds the generated client of the libre graph API as the bundle com.openexchange.opencloud, along with the OAuth provider of an OpenCloud instance as the bundle com.openexchange.oauth.opencloud
    • States the personal space of the user, the project spaces, the shared items and the trash bins of the spaces within the folders of an account
    • Expresses the shares of an item as its object permissions, and the ones of a folder as its permissions, resolving the users and groups of the instance to the ones of the server
    • Authenticates with a username and an app token, or with OAuth, in which case the URL of an account is derived from the configured instance
    • States the OAuth account an account is linked to as a field of its own, so that the configuration a client states keeps it, and derives the URL of the instance from the configuration for such an account
    • Searches through the search service of the instance, stating a query that yields the items a search term may match, which are matched exactly afterwards, so that a search covers a folder tree of any depth with a single request
    • Restores a previous version of a file by copying that version onto it
    • Reads the collections of the libre graph API page by page, and takes over the listing of a trash bin from item to item
    • Holds the role definitions and the resolved entities of an instance within the cache of the deployment
    • States the identifier of a request the instance refused along with the issuer, the party and the audience of the access token that was used, so that a token the instance does not accept can be told apart from one it cannot associate with a user of its own
    • Requests the scopes that are configured, as the claims an instance needs may only be stated if a further scope asks for them
    • Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
    • SCR-1856: New file storage service for OpenCloud
    • SCR-1857: New properties for the OpenCloud file storage
    • SCR-1860: New setting stating the trash folders of the OpenCloud accounts of a user
  • Optional deputy right to see the granting user's confidential appointments with all details, granted via the new deputy permission attribute classifiedAccess
    • SCR-1887: New Attribute classifiedAccess for Deputy Permissions to See Confidential Appointments
    • SCR-1888: New Element classifiedAccess in the Deputy Permissions of the OXDeputyPermissionsService
    • SCR-1889: New Field classifiedAccess in the Deputy Permission Data Objects of the Administrative RMI and gRPC Interfaces
    • SCR-1890: New Column classifiedAccess in Table deputy for the Calendar Deputy Right to See Confidential Appointments
  • Plural existingSecrets lists for every additive existingSecret value of the core-mw chart
    • SCR-1989: New plural existing*Secrets list values in the core-mw Helm chart
  • Search by term in the "My attachments" Mail Drive file storage, pushing file name, size and date criteria down to IMAP
  • Support for external shares and folder permissions in the file storage framework
    • Prepares the file storage framework for a storage that expresses its shares and permissions through an API of its own, as the OpenCloud storage does.
    • States the properties of an external share through the new constants in FileStorageShareConstants, along with the exception codes 82 to 87
    • Lets an item be shared with or without a file identifier, so that a folder is shared through the same actions as a file
    • States the shares of a folder and of a file as the additional columns 3250 and 7050
    • Sorts a merged listing of files by the order it is encountered in if no field to sort by is stated
    • States one value per item for the columns 3250 and 7050, no matter whether the shares of an item can be looked up, and takes over the access to an account from item to item
    • Skips the permissions that do not refer to an entity of the server when notifying about the added ones
    • Collects the folders shared by a user from every storage that serves the requested content type, rather than from a single one
    • States the account of an external storage within the path of a folder
    • Stores the expiration of an OAuth account's access token as the time stamp it is expected to be
    • Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
    • SCR-1858: New actions and columns for the shares of items within external file storages
    • SCR-1859: Folders shared within an external file storage are stated by the shares action of the folders module
  • WebDAV search and OAuth support to the WebDAV based file storages
    • Extends the base of the file storages that are based on WebDAV, so that a storage of its own can build upon it.
    • Expresses a search term as the WebDAV SEARCH request of a storage that supports it
    • States the resources a REPORT request answers with, so that a storage whose search is served that way needs no parsing of its own
    • Lets a storage state the context and the scheme its requests are authenticated with, so that OAuth is used rather than a username and a password
    • Applies a search term as it is stated, so that every term of an "and" is required, a "not" is negated, and a term that cannot be matched against the names of the resources is rejected rather than ignored
    • Lets a storage state that its folders are not to be held in the folder cache of the middleware
    • States the trash folder of a storage that has one within its root folder
    • Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
    • SCR-1855: New bundles for OpenCloud and new dependency of open-xchange-file-storage-webdav on open-xchange-oauth
  • WebDAV-Push support for CalDAV/CardDAV clients like DAVx5 via a new Web Push transport
    • SCR-1953: New bundles for WebDAV-Push: com.openexchange.dav.push and com.openexchange.pns.transport.webpush
    • SCR-1954: New configuration options for the Web Push transport and WebDAV-Push
    • core-gitlab-com#48
  • Wildcards within a file search pattern now also apply to Mail Drive
  • Translation updates 8.53
  • Repeat cache invalidations and local-cache invalidation messages on remote Redis sites (core-gitlab-com#40)
    • SCR-1884: New configuration options for remote Redis sites
    • SCR-1885: Cache invalidations cross remote Redis sites
  • Provisioning tokens as bearer credentials for scoped provisioning interfaces (core-gitlab-com#43)
    • SCR-1897: Added provisioning tokens as bearer credentials for scoped provisioning interfaces
    • SCR-1898: New tables provisioning_token in the context schema and crosscontext_provisioning_token in the configdb
    • SCR-1901: Added a SCIM 2.0 service provider for provisioning the users of a context from an identity provider
    • SCR-1902: New properties com.openexchange.scim.deleteMode, com.openexchange.scim.allowBasicAuth and com.openexchange.scim.allowUnauthenticatedDiscovery
    • SCR-1903: New table scim_external_id in the context schema
    • SCR-1904: Added package open-xchange-scim and the chart feature scim
    • SCR-1907: Added the /Groups endpoint to the SCIM 2.0 service provider
    • SCR-1908: Added the App Suite user extension to the SCIM 2.0 service provider
    • SCR-1909: Added resource versions with If-Match and read-only checks to the SCIM 2.0 service provider
    • SCR-1910: Added JSON Web Tokens as bearer credential to the SCIM 2.0 service provider
    • SCR-1911: New property com.openexchange.scim.allowJwt
    • SCR-1912: New property com.openexchange.oauth.provider.jwt.audience; EC and RSA-PSS signatures accepted
    • SCR-1914: Added the /Resources type and group memberships on users to the SCIM 2.0 service provider
    • SCR-1917: Completed the App Suite user extension of the SCIM 2.0 service provider: capabilities, clearing by null, driveUserFolderMode, filestoreId
    • SCR-1918: Added the /SharedAccounts, /Deputies and /SecondaryAccounts types to the SCIM 2.0 service provider
    • SCR-1931: The SCIM endpoint names its origin in the provisioning log entries and counts its authentications
    • SCR-1940: New command line tool createprovisioningtoken
    • SCR-1941: New command line tool listprovisioningtokens
    • SCR-1942: New command line tool revokeprovisioningtoken
    • SCR-1943: New RMI interface OXProvisioningTokenInterface
    • SCR-1950: New SOAP service OXProvisioningTokenService
  • Soft-deleted user state for leavers between disabled and deleted (core-gitlab-com#44)
    • SCR-1922: New column softDeleted in the user tables
    • SCR-1923: Soft-deleting and restoring users over OXUserInterface
    • SCR-1924: Soft-deleting and restoring users over the OXUserService SOAP interface
    • SCR-1925: Soft-deleting and restoring users over the provisioning API
    • SCR-1926: New configuration options for soft-deleted users
    • SCR-1927: Soft-deleted user state for leavers
    • SCR-1928: New command line tool softdeleteuser
    • SCR-1929: New command line tool restoreuser
    • SCR-1930: New option --soft-deleted for listuser
    • SCR-1933: Soft-deleted user state visible in the HTTP API
    • SCR-1939: SCIM: query parameter deleteMode on DELETE /Users/{id} for an immediate hard delete
    • SCR-1938: Alerting for a failed retention purge of a soft-deleted user
    • SCR-1937: Audit trail of the user lifecycle: soft-delete, restore, delete and failed purge
    • SCR-1936: Soft-Deleted Attendees Marked with a Read-Only Extended Parameter in the Calendar HTTP API
  • SCCR-1944: SCR-1949: SCR-1965: MCP server with contacts, mail and calendar tools behind OAuth or user-minted access tokens (core-gitlab-com#45)
    • SCR-1945: New MCP server endpoint for read-only access to mail, calendar, contacts, files and tasks
    • SCR-1949: New package open-xchange-mcp with the bundles of the MCP server
    • SCR-1965: Drive offers the OAuth scope read_files
    • SCR-1974: New capabilities access_tokens and mcp
  • Personal access tokens as user-minted bearer credentials for the OAuth provider (core-gitlab-com#49)
    • SCR-1946: New HTTP API module accesstoken for personal access tokens
    • SCR-1947: New table access_token in the context database schema
  • Push notification topics for changed and deleted mail and changed mail folders (core-gitlab-com#50)
    • SCR-1977: New parameter pushToken for changing mail requests
    • SCR-1978: New configuration options for live change events
    • SCR-1979: New bundle com.openexchange.pns.transport.sse
  • Command-line tool jfrrecord for on-demand flight recordings (core-gitlab-com#51)
    • SCR-1980: Added command-line tool jfrrecord for on-demand flight recordings
  • Send a mail at most once per Idempotency-Key or client message identifier (core-gitlab-com#55)
    • SCR-1993: New header Idempotency-Key and parameter clientMessageId to send a mail at most once
    • SCR-1994: New configuration options for sending a mail at most once
  • Sign in with user name and password for a personal access token (core-gitlab-com#56)
    • SCR-1991: New login actions accessToken and accessTokenSecondFactor to sign in for a personal access token
    • SCR-1992: New configuration options for signing in for a personal access token
  • Mobile API under /mobile/v1 with bearer sign-in, problem details and request helpers (core-gitlab-com#58)
    • SCR-1995: New Mobile API for native mail apps at /mobile/v1
    • SCR-1996: New configuration options for the Mobile API
    • SCR-1997: New package open-xchange-mobile-api and Helm feature mobile-api

Changed

  • ASB-56: Cap autocomplete results and honor right_hand_limit for all sort orders
    • SCR-1877: New configuration option for contact auto-complete result limiting
  • ASB-132: Report send-on-behalf-of and the granter's addresses in deputy action=reverseIds
    • SCR-1844: New deputy module action reverseIds that lists the granting users without resolving grant details
  • PBSR-1873: Single Administrator Credential for Cross-Context Permission Provisioning
    • SCR-1963: Shared Account Permissions Across Contexts Require Only the Shared Account's Context Administrator
    • SCR-1964: Cross-Context Shared Account Permissions Are Subject to the Cross-Context Trust Zones
  • SCR-1851: Bound the init container's configdb and middleware readiness waits
  • SCR-1862: Fix the spelling of com.openexchange.mail.prependReplyPrefix and keep the old name working
  • SCR-1863: Upgraded Netty libraries to v4.2.17 and Lettuce to v7.7.0
  • SCR-1864: Upgraded BouncyCastle, Jackson, PDFBox, jsoup, HttpClient5, FreeMarker, Commons Codec and snappy-java in target platform
  • SCR-1865: Upgraded commons-collections4, commons-validator, javassist, jctools, joda-time, jakarta.validation-api, xmlunit, protobuf-java, HK2, GlassFish CORBA and Logback in target platform
  • SCR-1866: Upgraded Kotlin OSGi bundle and Equinox Configuration Admin in target platform, added the OSGi Coordinator API
  • SCR-1867: Upgraded MySQL Connector/J from 9.7.0 to 26.7.0 in target platform
  • SCR-1868: Upgraded logback-extensions to 3.0.8, custom fields now use nested elements
  • SCR-1869: Upgraded Logback from 1.5.38 to 1.6.3 in target platform
  • SCR-1870: Upgraded Jackrabbit WebDAV from 2.21.19 to 2.22.4 in target platform
  • SCR-1881: Omit the database password from provisioning responses in the HTTP API, SOAP and listdatabase --csv
  • SCR-1882: Require credentials for provisioning read operations and fix the defects found while documenting the API
  • SCR-1883: Create the "Collected addresses" folder on the first collected contact instead of at login
  • SCR-1891: Upgraded the embedded TwelveMonkeys, CXF, Google API, Jetty and OkHttp libraries
  • SCR-1893: Upgraded 26 embedded third-party libraries across 20 bundles
  • SCR-1894: Upgraded the Kotlin OSGi bundle from 2.4.10 to 2.4.20
  • SCR-1895: Upgraded the embedded SAAJ implementation from 2.0.1 to 3.0.6
  • SCR-1896: Upgraded the embedded S3 encryption client from 3.6.1 to 4.0.2
  • SCR-1899: Upgraded eight third-party libraries to their latest patch or minor release
  • SCR-1905: Upgraded Apache Tika from 3.3.1 to 4.0.0
  • SCR-1913: Upgraded the Bean Validation API from 1.1.0.Final to 2.0.1.Final
  • SCR-1915: Resource permissions are returned by getData, validated in simple mode and compared by value in the provisioning API
  • SCR-1919: Removing the calendar access of a shared account permission is persisted when the permission has no mail access
  • SCR-1920: Upgraded the Equinox OSGi framework from 3.24.200 to 3.24.300 and dropped the superseded OSGi annotation bundle
  • SCR-1934: Remove the experimental streaming operation mode of the Anti-Virus service
  • SCR-1967: Add authentication and TLS configuration for the Cassandra connection
  • SCR-1973: Consult every configured trust store, not just the first one
  • SCR-1998: Run virtual threads on more carrier threads than CPU cores, so that threads loading classes cannot pin them all
  • SCR-2006: Reject Own-Object Rights in Cross-Context Folder Permissions
  • Keep Migrated Legacy Task Data Read-Only
  • Read the API URL of an OAuth provider through the configuration cascade
    • Introduces the default method API.getURL(Session), which states the URL of a provider as it applies to the user of a session, the no-argument variant staying the one that states the URL of the server. Only a provider whose URL is configurable implements it, so the other providers are unaffected
    • Lets OAuthUtil.handleScribeOAuthException state the URL of the session's user, that being the only place the URL is read and one that holds a session, so the host an untrusted certificate is reported for is the one the user actually connects to
    • Reads the hostname of the OpenCloud instance through the LeanConfigurationService in OpenCloudAPI, so through the configuration cascade rather than per server, and drops its hardcoded "127.0.0.1" fallback in favor of the default value of the property
  • Serve complete contacts from the LDAP provider's cache if all mapped fields are cached
  • State no OAuth for OpenCloud for a user the credentials are not configured for
    • The credentials of the provider need not be configured for the server, so they may be configured for a certain context or user only, or not at all in a deployment that does not integrate an OpenCloud instance. They are evaluated along with the "enabled" property when the capability of the provider is checked from now on, so a user they are not configured for is stated to have no OAuth for OpenCloud rather than being offered one whose authorization would fail on an empty client identifier or secret.
  • Strip redundant leading and trailing wildcards from file search patterns so that every storage matches them
  • Take the link back into an OpenCloud instance from the private link of an item
    • An instance states the URL that opens an item within its web interface twice: as the "oc:privatelink" property of the item's WebDAV resource, and as the "webUrl" property of its drive item. Only the latter was taken, which an instance of version 5.2 states for a space, but not for an item, so that no link was stated for an item at all there.
    • Requests "oc:privatelink" along with the "oc:fileid" the resource of the item is looked up by anyway, and takes the link from it, so that the link needs no request of its own. The item of the libre graph API is only asked for if the instance states no private link
    • Keeps "webUrl" as the fallback, so that an instance that states no private link is served by it nevertheless
    • Leaves the items of a trash bin with the URL of their space, the trash bin of a space stating no private link
  • Use 'io.ox/files//opencloud/folder/trash' jslob path
  • Align the active-task watcher with the request watcher (core-gitlab-com#26)
    • SCR-1849: New configuration options for the thread pool's active-task watcher
    • SCR-1850: Changed reporting of long-running tasks by the thread pool's active-task watcher
  • Make the thread pool's saturation semantics effective and observable (core-gitlab-com#27)
    • SCR-1847: Changed behavior of the thread pool saturation settings
    • SCR-1848: New thread pool saturation metrics
  • Give AJAX job-queue jobs their own virtual-thread budget instead of the shared one (core-gitlab-com#28)
    • SCR-1841: New configuration option for the AJAX job queue
  • Accept a schema URN as PATCH path, answer unknown SCIM endpoints with an error document and declare the required mailbox address (core-gitlab-com#43)
    • SCR-1932
  • Withhold every share of a soft-deleted user from every other user while the state lasts (core-gitlab-com#44)
    • SCR-1935: Shares of a soft-deleted user are frozen for every other user
  • Answer an over-sized request body in the protocol, the same way on both paths (core-gitlab-com#45)
    • SCR-1972: An over-sized MCP request body is refused with a JSON-RPC error instead of an empty 413
  • Central mail credential vault for scheduled mail, snoozed mail, data export and push (core-gitlab-com#46)
    • SCR-1952: New tables mail_credential and mail_credential_migration
    • SCR-1955: New configuration options for the mail credential vault's token exchange
    • SCR-1961: Permanent push keeps its credential in the mail credential vault, persisted regardless of com.openexchange.push.credstorage.rdb

Fixed

  • ASB-18: Calendar colors set via CalDAV were lost on every other change and could not be set on shared calendars
  • ASB-19: Give guest_created_by its own column 627 instead of clashing with yomiFirstName
    • SCR-1874: Moved the user field guest_created_by from column 616 to column 627
  • ASB-21: Register late-looked-up mailboxes with their actual subscription state instead of LIST-only
  • ASB-22: Let the folder's create-objects permission suffice for importing iCal data
  • ASB-25: Report the server's refusal when moving a mail folder into a shared mailbox is denied
  • ASB-38: Refuse synchronization of ignored paths like the temporary .drive folder
  • ASB-67: Propagate renamed user categories to contacts, tasks and appointments
  • ASB-100: Keep a mailbox accessible when the mail server only did not finish indexing in time
  • ASB-119: Leave \Draft flags untouched when a draft is copied or moved into a foreign folder
  • ASB-146: Isolate a failing mail account from account status and folder listing
  • ASB-148: Parse a multipart body that lost its start boundary instead of failing the whole mail
  • ASB-162: Parse mail filter rule metadata for non-IPv4 update sources and heal polluted rule names
  • ASB-171: Gate deputy modules on the sharing permission and keep permissions removable
  • ASB-175: ASB-175: Optionally use the configured no-reply address as From for internal calendar notifications
    • SCR-1854: New property com.openexchange.calendar.useNoReplyAddressForNotifications
  • ASB-179: Bind OXTaskManagement again so the jobcontrol CLI works
  • ASB-180: Apply the configured batch sizes when moving a context and keep its idle connections alive
  • ASB-181: Drop the cached database assignment when a failed context move is reverted
  • ASB-185: Let an attendee reply from the mail module to an appointment in an inaccessible public folder
  • ASB-189: Keep the bearer token alive across the WebDAV auth cache round trip
  • ASB-190: Keep a user's SMS tokens in one cluster map entry instead of scanning the whole Redis key space to count them
  • ASB-192: Reload lean reloadables when a configuration file they declared interest in changes
  • ASB-194: OIDC login declined for a disabled user or context strands the user on a dead-end 403 page
    • SCR-1886: Readable 403 page for OpenID Connect logins declined because the user or context is disabled
  • ASB-197: Use the organizer's own address as sender of scheduling mails
  • ASB-199: CSV contact import drops columns whose name belongs to another CSV flavor
  • ASB-204: Keep a custom common name of an internal organizer when persisting an event, regardless of whether an alias or the default address is used
  • ASB-205: Remove the Dovecot Push registration when the owning session ends
    • SCR-1900: New lean configuration property com.openexchange.push.dovecot.unregisterOnMissingSession
  • ASB-207: Repair broken internal links in the middleware documentation
  • ASB-208: CalDAV DELETE on a shared calendar did not unsubscribe the user
  • ASB-209: Encapsulate a well-formed, terminated res-hdr in ICAP RESPMOD requests
  • ASB-212: Spell out the Gotenberg liveness and readiness probe timings
  • ASB-215: Update the shipped Grafana and Zabbix dashboards to the renamed gauges
  • ASB-216: Declare the foreign-key-dropping update tasks as dependencies of the folder permission primary key restructuring
  • ASB-221: Drop quotes surrounding an address, as Outlook writes them, when they render it invalid
  • ASB-222: Keep the calendar user when an update turns a single-user appointment into a meeting
  • ASB-232: Keep the user's own signatures listed when a shared account's snippets are inaccessible
  • ASB-233: Name the time zone in scheduling and reminder mails after the event's daylight saving state
  • ASB-234: Walk the folder tree once when cascading Infostore permissions and let long cascades run as a job
  • ASB-235: Keep drive file checksums calculated before a sync is aborted
  • ASB-237: Declare the permission-context column update task as a dependency of the guest permission downscoping
  • ASB-238: Let a file storage service that cannot state its accounts not fail the whole account and root folder listing
  • ASB-240: Draw schema numbers outside the creating transaction so a retried creation never reuses an orphaned name
  • ASB-251: Never hand session cookies, credentials or the request's own Content-Length to the anti-virus service
  • ASB-252: Copying a user fails for attachments that reference an external URI instead of a stored file
  • PBSR-1874: Reclaim Cross-Context Liaisons of Deleted Sharing Contexts
  • SCR-1853: Keep the deputy mail ACL baseline in its own table and fix the surrounding METADATA handling
  • A client-provided file name made zip_messages produce an empty archive
  • Add an OpenCloud account that authenticates with credentials rather than with an OAuth account
    • Every field of the form description of the storage was stated as a mandatory one: the field for the OAuth account along with the ones the WebDAV based storages state for the credentials and the URL. A client that honors the description could therefore add no account at all, an account that states credentials missing the OAuth account, and one that is linked to an OAuth account missing the credentials and the URL.
    • States none of the fields as a mandatory one, as it depends on the way an account authenticates which of them it states. Which ones an account needs is checked when it is accessed, so an account that misses one is answered with a missing configuration then
    • Takes a copy of the inherited fields over rather than adjusting them, the form description of the WebDAV based storages sharing its fields with the storages that build upon it
  • Added missing 'BACKWARD_LINK' capability to OpenCloud file storage
  • Allow organizer reassignment when the current organizer has no calendar access
  • Apply the init container's hazelcast join override after the configuration is rendered
  • Do not announce IGNORABLE_VERSION capability for OpenCloud
  • Match the single-character wildcard of a search pattern within the OpenCloud file storage
    • Lets OpenCloudSearchFilterVisitor match a "?" of a pattern against a single character, as an OpenCloud instance does. It was matched literally before, and a pattern that stated no "*" besides was not even recognized as a pattern, so an item was only found if its name held a "?" itself
    • Rewrites the translation of a pattern into a regular expression around the two wildcards, quoting everything between them, so that a pattern may still state characters that mean something within a regular expression
    • Leaves a media type that states a "?" out of the query, just like one that states a "*", the instance matching an exact media type only. Stating it would let the query yield less than the search term matches, which the query is built never to do
  • Pass the virtual folders of a file storage over when a folder is archived
  • Reading an Event Without an Organizer Fails With a NullPointerException
  • Resolve image URLs independent of the configured dispatcher prefix
  • Start an OAuth provider up whose properties are configured through the configuration cascade only
    • A property of a provider was required to be configured for the server, an unconfigured one keeping the bundle of that provider from starting up at all, stating e.g. a missing "apiKey" property. That holds no longer: every property of a provider is read through the configuration cascade whenever it is asked for, so it may well be configured for a certain context or user only, and a provider that is registered no matter whether it is enabled has none of its properties configured in a deployment that does not use it.
    • An unconfigured property is taken over as empty from now on, along with a warning naming it, so that the provider is set up nevertheless and states its properties as they are configured for the user they are asked for.
  • State it towards the user if an OpenCloud instance offers no link back into its web interface
    • The link that opens an item within the web interface of an OpenCloud instance is the one the instance states for the item itself, which it cannot compose unless it knows the URL it is published under. An instance that states none, just like an item that has no counterpart within the instance at all, let the storage state that its service does not support the operation: an error that names neither the instance nor the reason, and that is logged as an error although nothing failed on the server.
    • Introduces FILE_STORAGE-0088, which names the instance that offers no link and is stated towards the user, its category being the one of a user input so that it is logged at debug level rather than as an error
    • States the host of the instance the account refers to along with it, taken from the URL of the account, falling back to that URL and to the display name of the account
    • States it for the virtual folders of an account as well, so for the ones listing the spaces, the shared items and the trash bins, which have no counterpart to point to either
  • State the media type of the files of a WebDAV file storage
  • Unbounded Retry Loop in the Contacts Account Storage Operation
  • Refresh a session's OAuth tokens before mail access uses them outside of HTTP requests, e.g. for IMAP-IDLE (core-gitlab-com#36)
  • Drop the registration and release the cluster lock of an IMAP-IDLE listener that failed to start, was canceled after a severe error or is stopped on shutdown (core-gitlab-com#38)
  • Route an OIDC login declined for an unknown or expired session reservation through the exception handler and keep internal wording out of the bad-request pages (core-gitlab-com#41)
  • Skip the bcrypt check for a recently verified master password on provisioning calls and expose the authentication duration as a metric (core-gitlab-com#42)
    • SCR-1892: New configuration option for caching the master administrator's password verification on provisioning calls
  • Delete a folder's contacts within the folder transaction, including an on-demand contacts trash folder (core-gitlab-com#47)
  • IMAP-IDLE push no longer logs an error for primary accounts that are not IMAP (core-gitlab-com#50)
  • Charsets now reach Charset.forName() without patching JDK internals (core-gitlab-com#52)
  • Fail a schema dump loudly and refuse to re-point contexts to a schema that does not hold their data (support#1607)
Prev
App Suite UI
Next
Additional Components