## RabbitMQ 4.2.9

RabbitMQ `4.2.9` is a maintenance release in the `4.2.x` [release series](https://www.rabbitmq.com/release-information).

It is **strongly recommended** that you read [4.2.0 release notes](https://github.com/rabbitmq/rabbitmq-server/releases/tag/v4.2.0)
in detail if upgrading from a version prior to `4.2.0`.

### Minimum Supported Erlang Version

**Important**: starting with this release, the minimum supported Erlang version is `27.0`. Erlang/OTP `26` has reached
[end of life](https://endoflife.date/erlang) and is no longer supported.

GitHub issue: [#16914](https://github.com/rabbitmq/rabbitmq-server/pull/16914)

[RabbitMQ and Erlang/OTP Compatibility Matrix](https://www.rabbitmq.com/docs/which-erlang) has more details on Erlang version requirements for RabbitMQ.

Nodes **will fail to start** on older Erlang releases.


## Changes Worth Mentioning

Release notes can be found on GitHub at [rabbitmq-server/release-notes](https://github.com/rabbitmq/rabbitmq-server/tree/v4.2.x/release-notes).

### Core Server

#### Bug Fixes

 * Classic queue index directory paths could accumulate slashes, eventually failing
   with an `enametoolong` file system error.

   GitHub issue: [#16833](https://github.com/rabbitmq/rabbitmq-server/pull/16833)

 * AMQP 1.0 management operations that declare an exchange with an alternate exchange now verify
   the necessary permissions on the alternate exchange, matching AMQP 0-9-1.

   GitHub issue: [#16785](https://github.com/rabbitmq/rabbitmq-server/pull/16785)

 * AMQP 1.0 management `GET /bindings` operations now behave consistently with the rest
   of the binding-related handlers.

   GitHub issue: [#16790](https://github.com/rabbitmq/rabbitmq-server/pull/16790)

 * Worker pool processes no longer terminate when they receive an unexpected message.

   Contributed by @Ayanda-D.

   GitHub issue: [#16666](https://github.com/rabbitmq/rabbitmq-server/pull/16666)

 * A race condition between concurrent queue (or virtual host) deletion and a Ra cluster shutdown
   could log an exception.

   Contributed by @Ayanda-D.

   GitHub issue: [#16880](https://github.com/rabbitmq/rabbitmq-server/pull/16880)

 * A closing channel (connection) that failed to send `channel.close_ok` on an already terminated
   writer or socket no longer produce log noise.

   Contributed by @Ayanda-D.

   GitHub issue: [#16651](https://github.com/rabbitmq/rabbitmq-server/pull/16651)

 * Unexpected failures during channel termination cleanup no longer produce log noise.

   Contributed by @Ayanda-D.

   GitHub issue: [#16740](https://github.com/rabbitmq/rabbitmq-server/pull/16740)

 * Code paths that use `rabbit_queue_type_util:erpc_call/5` now handle more errors.

   Contributed by @Ayanda-D.

   GitHub issue: [#16701](https://github.com/rabbitmq/rabbitmq-server/pull/16701)

 * Nodes could fail to start with a `bad_generator` exception in `rabbit_queue_decorator:select/1`
   when a quorum queue record in the metadata store had its decorators set to `undefined`.

   GitHub issues: [#16843](https://github.com/rabbitmq/rabbitmq-server/issues/16843), [#16844](https://github.com/rabbitmq/rabbitmq-server/pull/16844)

 * Enabling [tracing](https://www.rabbitmq.com/docs/firehose) on multiple virtual hosts concurrently could silently drop
   some of the virtual hosts from the traced set. All virtual host tracing state modifications
   are now linearized.

   GitHub issues: [#16755](https://github.com/rabbitmq/rabbitmq-server/issues/16755), [#16763](https://github.com/rabbitmq/rabbitmq-server/pull/16763)

#### Enhancements

 * Password salts are now generated using a cryptographically secure pseudo-random number generator (CSPRNG).

   GitHub issue: [#16775](https://github.com/rabbitmq/rabbitmq-server/pull/16775)

 * Socket-level metric collection used by several protocol readers and the management agent
   now handles concurrently closed connections safely.

   Inspired by a contribution of @MugemaneBertin2001.

   GitHub issues: [#16856](https://github.com/rabbitmq/rabbitmq-server/pull/16856), [#16832](https://github.com/rabbitmq/rabbitmq-server/pull/16832)


### CLI Tools

#### Bug Fixes

 * `rabbitmq-plugins` commands now tolerate plugins that are listed as enabled but are not installed.

   GitHub issue: [#16896](https://github.com/rabbitmq/rabbitmq-server/pull/16896)

 * `rabbitmq-plugins list` no longer outputs an empty plugin table when the target node
   cannot be reached.

   GitHub issue: [#16791](https://github.com/rabbitmq/rabbitmq-server/pull/16791)

 * `rabbitmq-plugins` commands now correctly handle file paths of remote nodes, validate remote nodes
   in offline mode, and no longer report false positives for `rabbitmq-plugins is_enabled`.

   GitHub issue: [#16842](https://github.com/rabbitmq/rabbitmq-server/pull/16842)

 * Shell (Bash, zsh) command completion fixes.

   Contributed by @Chr1s70ph.

   GitHub issue: [#16776](https://github.com/rabbitmq/rabbitmq-server/pull/16776)

#### Enhancements

 * `rabbitmq-queues` and `rabbitmq-streams` now provide `transfer_leadership` commands
   for individual queues and streams.

   GitHub issue: [#16757](https://github.com/rabbitmq/rabbitmq-server/pull/16757)

 * `rabbitmq-upgrade drain` safety improvements: the command now handles certain failures
   more gracefully.

   Proposed by @MugemaneBertin2001.

   GitHub issues: [#16865](https://github.com/rabbitmq/rabbitmq-server/pull/16865), [#3369](https://github.com/rabbitmq/rabbitmq-server/issues/3369)


### Stream Plugin

#### Bug Fixes

 * Permissions required for certain stream protocol operations were adjusted to be consistent
   with comparable operations over other protocols.

   GitHub issue: [#16754](https://github.com/rabbitmq/rabbitmq-server/pull/16754)

#### Enhancements

 * The maximum number of super stream partitions is now limited to 1,000 partitions by default.
   This limit can be increased using the `stream.max_super_stream_partitions` key in `rabbitmq.conf`.

   GitHub issues: [#16689](https://github.com/rabbitmq/rabbitmq-server/pull/16689), [#16706](https://github.com/rabbitmq/rabbitmq-server/pull/16706)

 * A client RPC timeout is now logged as a concise message instead of an exception
   with a stack trace.

   Contributed by @MugemaneBertin2001.

   GitHub issues: [#16829](https://github.com/rabbitmq/rabbitmq-server/pull/16829), [#15744](https://github.com/rabbitmq/rabbitmq-server/issues/15744)


### Management Plugin

#### Bug Fixes

 * OAuth 2 login could fail in Safari. A new token endpoint proxy is now used
   for the affected authorization flow.

   GitHub issues: [#16664](https://github.com/rabbitmq/rabbitmq-server/issues/16664), [#16892](https://github.com/rabbitmq/rabbitmq-server/pull/16892)

 * Several management UI templates now use safe string escaping in more places.

   GitHub issue: [#16738](https://github.com/rabbitmq/rabbitmq-server/pull/16738), [#16677](https://github.com/rabbitmq/rabbitmq-server/pull/16677)

 * HTTP API message publishing endpoint now uses a timeout when waiting for publisher confirms.

   GitHub issue: [#16911](https://github.com/rabbitmq/rabbitmq-server/pull/16911)

#### Enhancements

 * Definition export over the HTTP API is now significantly more efficient and
   transfers the result using HTTP response streaming.

   GitHub issue: [#16734](https://github.com/rabbitmq/rabbitmq-server/pull/16734)

 * The `Referrer-Policy` HTTP response header is now set (and configurable).

   GitHub issue: [#16893](https://github.com/rabbitmq/rabbitmq-server/pull/16893)

 * HTTP API error responses were refactored to be more consistent and expose fewer internal details.

   GitHub issue: [#16709](https://github.com/rabbitmq/rabbitmq-server/pull/16709)


### OAuth 2 AuthN and AuthZ Backend Plugin

#### Bug Fixes

 * Fractional `exp` (token expiry) timestamp values are now honored.

   GitHub issue: [#16713](https://github.com/rabbitmq/rabbitmq-server/pull/16713)

#### Enhancements

 * The token refresh path is now more robust.

   GitHub issue: [#16858](https://github.com/rabbitmq/rabbitmq-server/pull/16858)


### Shovel Plugin

#### Bug Fixes

 * Several shovel bug fixes, including one for static shovel URIs whose credentials
   could be logged.

   GitHub issues: [#16855](https://github.com/rabbitmq/rabbitmq-server/pull/16855), [#16835](https://github.com/rabbitmq/rabbitmq-server/issues/16835)

 * A shovel deleted before it successfully connected (in the `starting` state) no longer
   leaks its status entry.

   GitHub issue: [#16767](https://github.com/rabbitmq/rabbitmq-server/pull/16767)


### Federation Plugin

#### Bug Fixes

 * Federation upstream URIs are now validated more strictly.

   GitHub issue: [#16942](https://github.com/rabbitmq/rabbitmq-server/pull/16942)


### MQTT Plugin

#### Enhancements

 * More correct peer host detection in setups that have Proxy Protocol enabled.

   GitHub issue: [#16933](https://github.com/rabbitmq/rabbitmq-server/pull/16933)


### Web MQTT Plugin

#### Enhancements

 * More correct peer host detection in setups that have Proxy Protocol enabled.

   GitHub issue: [#16933](https://github.com/rabbitmq/rabbitmq-server/pull/16933)

 * The [HSTS](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Strict-Transport-Security) response header policy can now be configured for Web MQTT listeners.

   GitHub issues: [#14161](https://github.com/rabbitmq/rabbitmq-server/issues/14161), [#16772](https://github.com/rabbitmq/rabbitmq-server/pull/16772)


### STOMP Plugin

#### Enhancements

 * Internal socket handling refactoring shared by STOMP and Web STOMP connections.

   GitHub issue: [#16935](https://github.com/rabbitmq/rabbitmq-server/pull/16935)


### Web STOMP Plugin

#### Enhancements

 * More correct peer host detection in setups that have Proxy Protocol enabled.

   GitHub issue: [#16935](https://github.com/rabbitmq/rabbitmq-server/pull/16935)

 * The [HSTS](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Strict-Transport-Security) response header policy can now be configured for Web STOMP listeners.

   GitHub issues: [#14161](https://github.com/rabbitmq/rabbitmq-server/issues/14161), [#16772](https://github.com/rabbitmq/rabbitmq-server/pull/16772)


### LDAP AuthN and AuthZ Backend Plugin

#### Bug Fixes

 * Additional DN escaping (RFC 4514) improvements

   GitHub issue: [#16712](https://github.com/rabbitmq/rabbitmq-server/pull/16712)


### JMS Topic Exchange Plugin

#### Enhancements

 * JMS selector evaluation now uses much smaller, safer limits.

   GitHub issue: [#16951](https://github.com/rabbitmq/rabbitmq-server/pull/16951)


### AWS Peer Discovery Plugin

#### Bug Fixes

 * Fixed a SigV4 request signing issue (`SignatureDoesNotMatch`) for body-less requests such as S3 `GET`s.

   Contributed by @sdewhitt.

   GitHub issue: [#16759](https://github.com/rabbitmq/rabbitmq-server/pull/16759)


### Dependency Changes

 * `cowboy` was upgraded to [`2.17.0`](https://github.com/ninenines/cowboy/releases)
