App Suite Middleware
8.47.124
Configuration
SCR-1803
Summary: New properties for the replication monitor's replica status check
Effective: 8.47.124 and later
The replication monitor now probes read replicas' replication status (SHOW SLAVE STATUS) and redirects reads to the master while a replica reports broken replication or excessive lag. This closes the gap that a re-seeded or inconsistently restored replica could serve incomplete data undetected (middleware/core#4, follow-up to the incident behind appsuite/support#1599). Four new lean configuration properties control the behavior:
com.openexchange.database.replicationMonitor.checkReplicaStatus(default: true) - Whether to watch read replicas for broken or excessively lagging replication and redirect reads to the master meanwhile. Works out of the box: where the REPLICA MONITOR (MariaDB) or REPLICATION CLIENT (MySQL) privilege is available, the replication status statement provides fast, precise detection; without it the check falls back to a privilege-free heartbeat, a time stamp periodically written through the replication channel into the replicationMonitor table (reserved row cid=4294967295), needing only the regular INSERT/UPDATE/SELECT permissions.REPLICA MONITOR(MariaDB) or REPLICATION CLIENT (MySQL) privilege; both are global privileges, so one grant per database host covers all existing and future schemas, and initconfigdb -a now grants them automatically. Without the privilege the check suspends itself for the affected pool. Only effective if the replication monitor is active. Default: true. Reloadable: false. Config-cascade aware: false.com.openexchange.database.replicationMonitor.maxReplicaLag- Maximum tolerated replication lag in seconds before reads are redirected to the master. Default: 300. Reloadable: false. Config-cascade aware: false.com.openexchange.database.replicationMonitor.replicaStatusCheckInterval- Minimum number of seconds between two replication status probes per read pool. Default: 10. Reloadable: false. Config-cascade aware: false.com.openexchange.database.replicationMonitor.requireReplication- Whether a read host that does not act as a replica at all (emptySHOW SLAVE STATUS) is considered unhealthy. Keep false for Galera or multi-primary setups; set to true where read pools are always asynchronous replicas. Default: false. Reloadable: false. Config-cascade aware: false.
All four properties are read once at middleware start-up; changing them requires a restart. They are server-scoped (no config-cascade evaluation) and documented in documentation-generic/config/ConfigDB.yml. Defaults are safe for every topology: without the privilege or without asynchronous replication the check fails open and behavior is unchanged.
8.47.112
General
SCR-1793
Summary: Redis connector: per-node client name, max. connection lifetime, deterministic shutdown
Effective: 8.47.112 and later
Hardening of the Redis connector against stale / orphaned connected clients.
New configuration option:
com.openexchange.redis.connection.pool.maxLifetimeSecondsMaximum lifetime in seconds of a pooled Redis connection. Once a connection exceeds this age it is proactively recycled by the connection-pool cleaner as soon as it becomes idle, regardless of usage; this applies to both the shared and the dedicated pool. Acts as defense-in-depth against slowly accumulating or long-lived stale connections that TCP keepalive cannot reap (a live-but-idle connection is never detected as dead). A value of0(zero) disables max. lifetime recycling. Default3600(one hour). Not reloadable, not config.cascade aware. Package:open-xchange-core.
Behavioral changes (no configuration):
- Client name: the announced Redis client name now includes the local host / pod name (e.g.
Open-Xchange-Redis-Connector-v8.53.0-<host>), so connections become attributable per node via RedisCLIENT LIST. This is what lets operators tell restart orphans (dead pod addresses) apart from live-node connections. - Deterministic shutdown: the shared connection pool now closes its connections synchronously on shutdown, so Redis reclaims the clients immediately on a graceful (rolling) restart instead of leaving them as ghosts.
8.47.82
CLT
SCR-1691
Summary: Added command-line tools for mail signatures
Effective: 8.47.82 and later
Added the following command-line tools for mail signatures
usage: listsignatures -c <contextId> -u <userId> -A <masterAdmin | contextAdmin> -P <masterAdminPassword |
contextAdminPassword> [-p <RMI-Port>] [-s <RMI-Server] [--responsetimeout <responseTimeout>] |
[-h]
-A,--adminuser <adminUser> Admin username
-c,--context <contextId> The context identifier
-h,--help Prints this help text
-p,--port <rmiPort> The optional RMI port (default:1099)
-P,--adminpass <adminPassword> Admin password
--responsetimeout <timeout> The optional response timeout in seconds when reading data from server (default: 0s;
infinite)
-s,--server <rmiHost> The optional RMI server (default: localhost)
-u,--user <userId> The user identifier
Command-line tool for listing signatures of a certain user.
usage: deletesignature -c <contextId> -u <userId> -s <signatureId> -A <masterAdmin | contextAdmin> -P
<masterAdminPassword | contextAdminPassword> [-p <RMI-Port>] [-s <RMI-Server] [--responsetimeout
<responseTimeout>] | [-h]
-A,--adminuser <adminUser> Admin username
-c,--context <contextId> The context identifier
-h,--help Prints this help text
-i,--identifier <signatureId> The signature identifier
-p,--port <rmiPort> The optional RMI port (default:1099)
-P,--adminpass <adminPassword> Admin password
--responsetimeout <timeout> The optional response timeout in seconds when reading data from server (default: 0s;
infinite)
-s,--server <rmiHost> The optional RMI server (default: localhost)
-u,--user <userId> The user identifier
Command line tool to delete a certain signatures of a user.
8.47.52
General
SCR-1656
Summary: Updated Apache Commons CLI library from v1.9.0 to v1.11.0
Effective: 8.47.52 and later
Updated Apache Commons CLI library from v1.9.0 to v1.11.0 in target platform (com.openexchange.bundles)
SCR-1650
Summary: Updated Jackson libraries from v2.19.2 to v2.21.0 in target platform
Effective: 8.47.52 and later
Updated Jackson libraries from v2.19.2 to v2.21.0 in `}com.openexchange.bundles}
jackson-annotationsv2.19.2 to v2.21.0jackson-corev2.19.2 to v2.21.0jackson-databindv2.19.2 to v2.21.0jackson-dataformat-cborv2.19.2 to v2.21.0jackson-dataformat-xmlv2.19.2 to v2.21.0jackson-dataformat-yamlv2.19.2 to v2.21.0jackson-datatype-jsr310v2.19.2 to v2.21.0jackson-datatype-jsr353v2.19.2 to v2.21.0jackson-jakarta-rs-basev2.19.2 to v2.21.0jackson-jakarta-rs-json-providerv2.19.2 to v2.21.0jackson-jakarta-rs-xml-providerv2.19.2 to v2.21.0jackson-module-jakarta-xmlbind-annotationsv2.19.2 to v2.21.0jackson-module-jaxb-annotationsv2.19.2 to v2.21.0
3rd Party Libraries/License Change
SCR-1657
Summary: Updated Apache Commons Collections4 library from v4.4 to v4.5.0
Effective: 8.47.52 and later
Updated Apache Commons Collections4 library from v4.4 to v4.5.0 in target platform (com.openexchange.bundles)
SCR-1655
Summary: Update Apache Commons Codec
Effective: 8.47.52 and later
Updated Apache Commons Codec from v.1.17.2 to v1.21.0 in target platform (com.openexchange.bundles)
SCR-1654
Summary: Updated Apache Mime4j
Effective: 8.47.52 and later
Updated Apache Mime4j libraries in target platform (com.openexchange.bundles)
apache-mime4j-core-0.8.10.jar->apache-mime4j-core-0.8.13.jarapache-mime4j-dom-0.8.10jar->apache-mime4j-dom-0.8.13.jarapache-mime4j-storage-0.8.10.jar->apache-mime4j-storage-0.8.13.jar
SCR-1653
Summary: Upgraded JSoup library
Effective: 8.47.52 and later
Upgraded JSoup library from v1.21.1 to v1.22.1 in target platform (com.openexchange.bundles)
SCR-1652
Summary: Updated OSGi target platform bundles
Effective: 8.47.52 and later
Updated the following OSGi target platform bundles
org.eclipse.osgi_3.23.200.v20250812-1847.jarupdated toorg.eclipse.osgi_3.24.0.v20251126-0427.jar
SCR-1649
Summary: Updated Fabric8 libraries from v7.4.0 to v7.5.2
Effective: 8.47.52 and later
Updated Fabric8 ibraries from v7.4.0 to v7.5.2 in bundle io.fabric8.kubernetes
kubernetes-client-7.5.2.jarkubernetes-client-api-7.5.2.jarkubernetes-httpclient-jdk-7.5.2.jarkubernetes-model-admissionregistration-7.5.2.jarkubernetes-model-apiextensions-7.5.2.jarkubernetes-model-apps-7.5.2.jarkubernetes-model-autoscaling-7.5.2.jarkubernetes-model-batch-7.5.2.jarkubernetes-model-certificates-7.5.2.jarkubernetes-model-common-7.5.2.jarkubernetes-model-coordination-7.5.2.jarkubernetes-model-core-7.5.2.jarkubernetes-model-discovery-7.5.2.jarkubernetes-model-events-7.5.2.jarkubernetes-model-extensions-7.5.2.jarkubernetes-model-flowcontrol-7.5.2.jarkubernetes-model-gatewayapi-7.5.2.jarkubernetes-model-metrics-7.5.2.jarkubernetes-model-networking-7.5.2.jarkubernetes-model-node-7.5.2.jarkubernetes-model-policy-7.5.2.jarkubernetes-model-rbac-7.5.2.jarkubernetes-model-resource-7.5.2.jarkubernetes-model-scheduling-7.5.2.jarkubernetes-model-storageclass-7.5.2.jarzjsonpatch-7.5.2.jar
SCR-1648
Summary: Updated lettuce library from v6.5.5 to v6.8.2
Effective: 8.47.52 and later
Updated lettuce library from v6.5.5 to v6.8.2 in bundle io.lettuce
lettuce-core-6.8.2.RELEASE.jar
SCR-1647
Summary: Updated Netty libraries
Effective: 8.47.52 and later
Updated Netty libraries from v4.1.124 to v4.1.130 in bundle io.netty
- netty-buffer-4.1.130.Final.jar
- netty-codec-4.1.130.Final.jar
- netty-codec-dns-4.1.130.Final.jar
- netty-codec-http2-4.1.130.Final.jar
- netty-codec-http-4.1.130.Final.jar
- netty-codec-socks-4.1.130.Final.jar
- netty-common-4.1.130.Final.jar
- netty-handler-4.1.130.Final.jar
- netty-handler-proxy-4.1.130.Final.jar
- netty-resolver-4.1.130.Final.jar
- netty-resolver-dns-4.1.130.Final.jar
- netty-transport-4.1.130.Final.jar
- netty-transport-native-unix-common-4.1.130.Final.jar
- netty-transport-classes-epoll-4.1.130.Final.jar
- netty-transport-native-epoll-4.1.130.Final.jar
- netty-transport-classes-kqueue-4.1.130.Final.jar
- netty-transport-native-kqueue-4.1.130.Final.jar
- netty-tcnative-classes-2.0.72.Final
SCR-1646
Summary: Updated OpenId Connect libraries
Effective: 8.47.52 and later
Updated OpenId Connect libraries in bundle com.nimbus:
accessors-smart-2.4.11.jarupdated toaccessors-smart-2.5.2.jarasm-9.1.jarupdated toasm-9.7.1.jarcontent-type-2.2.jarupdated tocontent-type-2.3.jarjson-smart-2.4.11.jarupdated tojson-smart-2.5.2.jarnimbus-jose-jwt-10.0.2.jarupdated tonimbus-jose-jwt-10.6.jaroauth2-oidc-sdk-10.7.jarupdated tooauth2-oidc-sdk-11.32.jar
SCR-1641
Summary: Added RE2/J - linear time regular expression matching in Java
Effective: 8.47.52 and later
Added Google Open Source library RE2/J "re2j-1.8.jar" as bundle to target platform "com.openexchange.bundles". RE2 is a regular expression engine that runs in time linear in the size of the input.
SCR-1638
Summary: Updated Spring Framework libraries
Effective: 8.47.52 and later
Updated Spring Framework libraries from v5.3.39 to v6.2.15 in bundle com.openexchange.xml
com.openexchange.xml/lib/spring-beans-5.3.39.jar->com.openexchange.xml/lib/spring-beans-6.2.15.jarcom.openexchange.xml/lib/spring-core-5.3.39.jar->com.openexchange.xml/lib/spring-core-6.2.15.jarcom.openexchange.xml/lib/spring-jcl-5.3.39.jar->com.openexchange.xml/lib/spring-jcl-6.2.15.jar
SCR-1663
Summary: Updated Apache Commons Pool2 library
Effective: 8.47.52 and later
Updated Apache Commons Pool2 library from v2.12.0 to v2.13.1 in target platform (com.openexchange.bundles)
SCR-1662
Summary: Updated Apache Commons Net library
Effective: 8.47.52 and later
Updated Apache Commons Compress library from v3.10.0 to v3.12.0 in target platform (com.openexchange.bundles)
SCR-1661
Summary: Updated Apache Commons Lang3 library
Effective: 8.47.52 and later
Updated Apache Commons Lang3 library from v318.0 to v3.20.0 in target platform (com.openexchange.bundles)
SCR-1660
Summary: Updated Apache Commons Exec library
Effective: 8.47.52 and later
Updated Apache Commons Exec library from v1.4.0 to v1.6.0 in target platform (com.openexchange.bundles)
SCR-1659
Summary: Updated Apache Commons CSV library
Effective: 8.47.52 and later
Updated Apache Commons CSV library from v1.13.0 to v1.14.1 in target platform (com.openexchange.bundles)
SCR-1658
Summary: Updated Apache Commons Compress library
Effective: 8.47.52 and later
Updated Apache Commons Compress library from v1.26.0 to v1.28.0 in target platform (com.openexchange.bundles)
API - Java
SCR-1505
Summary: Added methods to the MultifactorLoginService
Effective: 8.47.52 and later
Extended the com.openexchange.login.multifactor.MultifactorLoginService interface by following methods:
/**
* Checks if multi-factor enforcement property is set and the enforceMfa flag is set for a given user.
*
* @param userId The user identifier
* @param contextId The context identifier
* @return <code>true<code> If multi-factor enforcement is enabled
* @throws OXException
*/
boolean checkEnforceMultiFactorAuthentication(int userId, int contextId)throws OXException;
/**
* Checks if multi-factor enforcement property is set for a given user.
*
* @param userId The user identifier
* @param contextId The context identifier
* @return <code>true<code> If multi-factor enforcement is enabled as dismissable; otherwise <code>false</code>
* @throws OXException If something went wrong trying to access the database
*/
boolean checkEnforceMultiFactorAuthenticationDismissable(int userId, int contextId);
/**
* Records the login attempt for a given user.
*
* @param userId The user identifier
* @param contextId The context identifier
* @throws OXException If something went wrong trying to access the database
*/
void recordLoginAttempt(int id, int contextId) throws OXException;
/**
* Gets the login information record.
*
* @param userId The user identifier
* @param contextId The context identifier
* @return A MultifactorEnforcementInformation record holding the information
* @throws OXException If something went wrong trying to access the database
*/
MultifactorEnforcementInformation getLoginInformation(int id, int contextId) throws OXException;
/**
* Enhances JSON with multi-factor enforcement data.
*
* @param json The JSON content to enhance
* @param userId The user identifier
* @param contextId The context identifier
*/
void enhanceLoginJson(JSONObject json, int userId, int contextId);
/**
* Resets the login information for an user.
*
* @param userId The user identifier
* @param contextId The context identifier
* @throws OXException If something went wrong trying to access the database
*/
void resetLoginInformation(int userId, int contextId) throws OXException;
API - REST
SCR-1504
Summary: Introduced a new REST interface for multifactor enforcement
Effective: 8.47.52 and later
New REST endpoint is introduced in order to manage multifactor enforcement.
Retrieve login information for a certain user:
GET /admin/v1/contexts/\{context-id}/users/\{user-id}/multifactor/enforcement
Response:
{
"enforceMfa": true,
"loginCounter": 5,
"firstLogin": "<time-stamp>"
}
Reset login information for a certain user:
DELETE /admin/v1/contexts/\{context-id}/users/\{user-id}/multifactor/enforcement
CLT
SCR-1503
Summary: Add CLT for multifactor enforcement
Effective: 8.47.52 and later
Command-line tool resetenforcemfa to allow a reset of the multi-factor enforcement informations
usage: resetenforcemfa -c <contextId> -i <userId> -A <masterAdmin | contextAdmin> -P <masterAdminPassword |
contextAdminPassword>
-A,--adminuser <adminuser> Admin username
--api-host <arg> URL for an alternative REST end-point host. Example: 'https://192.168.0.1:8443'.
Default: 'http://localhost:8009'
--api-root <arg> URL to an alternative HTTP API endpoint. Example: 'https://192.168.0.1:8443/admin/v1/'
-c,--contextid <arg> A valid context identifier.
-h,--help Prints this help text
-i,--userid <arg> A valid user identifier.
-P,--adminpass <adminpassword> Admin password
The command-line tool to reset the multifactor enforcement for an user.
Configuration
SCR-1645
Summary: Added various properties for proxy functionality
Effective: 8.47.52 and later
Added various lean properties for proxy functionality
com.openexchange.proxy.pathSpecifies the path taken when replacing URIs and for registering proxy Servlet. Default value is"/servlet/proxy". It is reloadable, but not config-cascade aware.com.openexchange.proxy.servlet.enabledThe switch to enable/disable Proxy Servlet. Default value istrue. It is reloadable, but not config-cascade aware. If Proxy Servlet is enabled,com.openexchange.proxy.encodingis required being set to"object".com.openexchange.proxy.encodingThe method how original URI and accompanying proxy registration is encoded."plain": Only the original URI is base64-encoded."object": The complete registration object is compressed and obfuscated within a base64 representation. Default value is"object". It is reloadable, but not config-cascade aware.
SCR-1501
Summary: Added new properties for MFA enforcement
Effective: 8.47.52 and later
Introduced new lean webauthn properties to use webauthn as a 2nd factor and as a preparation for webautn as a "full" authentication service
com.openexchange.multifactor.enabledDefines if MFA should be enforced.com.openexchange.multifactor.login_limitConfigures the amount of login attempts a user can do before MFA is really enforced.com.openexchange.multifactor.period_limitConfigures the period of time in days, starting from the first login, which defines when MFA is really enforced.
Database
SCR-1502
Summary: Add table for mfa enforcement
Effective: 8.47.52 and later
Warning
Update Task com.openexchange.multifactor.enforcement.storage.rdb.CreateMultifactorEnforcementTableTask
In order to implement the possibility to enforce multi-factor, a database table called multifactor_enforcement needs to be created to store the relevant informations.
CREATE TABLE `multifactor_enforcement`(
`cid` int(10) unsigned NOT NULL,
`id` int(10) unsigned NOT NULL,
`enforceMfa` TINYINT(1) DEFAULT 0,
`loginCounter` int(10) DEFAULT 0,
`firstLogin` DATETIME DEFAULT NULL,
PRIMARY KEY (`cid`, `id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci"
8.47.39
Configuration
SCR-1651
Summary: Added possibility to move a context to another database (pool) w/o using a surrounding transaction on config database
Effective: 8.47.39 and later
Added new lean property com.openexchange.admin.context.move.useSurroundingConfigdbTransaction considered when moving a context to another database (pool) that controls whether to use a surrounding transaction on config database or not. If set to false concurrent context provisioning is not blocked through locks on database layer, but comes with the burden that inconsistent data might be left on config database in case an unrecoverable error occurs. Default value is true (surrounding transaction is used and thus highest level of consistency safety). It is reloadable and config-cascade aware (down to context scope)
8.47.5
3rd Party Libraries/License Change
SCR-1644
Summary: Removed Eclipse Collections from target platform
Effective: 8.47.5 and later
Removed Eclipse Collections from target platform (com.openexchange.bundles):
eclipse-collections-api-13.0.0.jareclipse-collections-13.0.0.jar
8.47.1
Database
SCR-1643
Summary: Drops update task entry for orphaned "InitialTombstoneCleanupUpdateTask" update task
Effective: 8.47.1 and later
Warning
Update Task com.openexchange.database.tombstone.cleanup.update.DropInitialTombstoneCleanupEntryTask
Drops update task entry for orphaned "c.o.database.tombstone.cleanup.update.InitialTombstoneCleanupUpdateTask" update task