2.1.2 - 2026-02-09
==================

Broker:
- Forbid running with `persistence true` and with a persistence plugin at the
  same time.

Build:
- Build fixes for OpenBSD. Closes #3474.
- Add missing libedit to docker builds. Closes #3476.
- Fix static/shared linking of libwebsockets under cmake.


2.1.1 - 2026-02-04
==================

# Broker

- Fix PUID/PGID checking for docker
- Add MOSQUITTO_UNSAFE_ALLOW_SYMLINKS environment variable to allow the
  restrictions on reading files through symlinks to be lifted in safe
  environments like kubernetes. Closes #3461.
- Fix inconsistent disconnect log message format, and add address:port.
- Fix `plugin`/`global_plugin` option not allowing space characters.
- Fix $SYS load values not being published initially. Closes #3459.
- Fix max_connections not being honoured on libwebsockets listeners. This does
  not affect the built-in websockets support. Closes #3455.
- Don't enforce receive-maximum, just log a warning. This allows badly
  behaving clients to be fixed. Closes #3471.

# Plugins
- Fix incorrect linking of libmosquitto_common.so for the acl and password
  file plugins. Closes #3460.

# Build
- Fix building with WITH_TLS=no


2.1.0 - 2026-01-29
==================

# Broker

## Deprecations
- The acl_file option is deprecated in favour of the acl-file plugin, which is
  the same code but moved into a plugin. The acl_file option will be removed
  in 3.0.
- The password_file option is deprecated in favour of the password-file plugin,
  which is the same code but moved into a plugin. The password_file option will
  be removed in 3.0.
- The per_listener_settings option is deprecated in favour of the new listener
  specific options. The per_listener_settings option will be removed in 3.0.

## Behaviour changes

- max_packet_size now defaults to 2,000,000 bytes instead of the 256MB MQTT
  limit. If you are using payloads that will result in a packet larger than
  this, you need to manually set the option to a value that suits your
  application.
- acl_file and password_file will produce an error on invalid input when
  reloading the config, causing the broker to quit.

## Protocol related
- Add support for broker created topic aliases. Topics are allocated on a
  first come first serve basis.
- Add support for bridges to allow remote brokers to create topic aliases when
  running in MQTT v5 mode.
- Enforce receive maximum on MQTT v5.
- Return protocol error if a client attemps to subscribe to a shared
  subscription and also sets no-local.
- Protocol version numbers reported in the log when a client connects now
  match the MQTT protocol version numbers, not internal Mosquitto values.
- Send DISCONNECT With session-takeover return code to MQTT v5 clients when a
  client connects with the same client id. Closes #2340.
- The `allow_duplicate_messages` now defaults to `true`.
- Add `accept_protocol_versions` option to allow limiting which MQTT protocol
  versions are allowed for a particular listener.

## TLS related
- Add `--tls-keylog` option which can be used to generate a file that can be
  used by wireshark to decrypt TLS traffic for debugging purposes. Closes #1818.
- Add `disable_client_cert_date_checks` option to allow expired client
  certificate to be considered valid.
- Add `bridge_tls_use_os_certs` option to allow bridges to be easily configured
  to trust default CA certificates. Closes #2473.
- Remove support for TLS v1.1 (clients only - it remains available in the
  broker but is now undocumented)
- Use openssl provided function for x509 certificate hostname verification,
  rather than own function.

## Bridge related
- Add `bridge_receive_maximum` option for MQTT v5.0 bridges.
- Add `bridge_session_expiry_interval` option for MQTT v5.0 bridges.
- Bridge reconnection backoff improvements.

## Transport related
- Add the `websockets_origin` option to allow optional enforcement of origin
  when a connection attempts an upgrade to WebSockets.
- Add built-in websockets support that doesn't use libwebsockets. This is the
  preferred websockets implementation.
- Add support for X-Forwarded-For header for built in websockets.
- Add suport for PROXY protocol v1 and v2.

## Platform specific
- Increase maximum connection count on Windows from 2048 to 8192 where
  supported. Closes #2122.
- Allow multiple instances of mosquitto to run as services on Windows. See
  README-windows.txt.
- Add kqueue support.
- Add support for systemd watchdog.

## General
- Report on what compile time options are enabled. Closes #2193.
- Performance: reduce memory allocations when sending packets.
- Log protocol version and ciphers that a client negotiates when connecting.
- Password salts are now 64 bytes long.
- Add the `global_plugin` option, which gives global plugin loaded regardless
  of `per_listener_settings`.
- Add `global_max_clients` option to allow limiting client sessions globally
  on the broker.
- Add `global_max_connections` option to allow limiting client connections globally
  on the broker.
- Improve idle performance. The broker now calculates when the next event of
  interest is, and uses that as the timeout for e.g. `epoll_wait()`. This can
  reduce the number of process wakeups by 100x on an idle broker.
- Add more efficient keepalive check.
- Add support for sending the SIGRTMIN signal to trigger log rotation.
  Closes #2337.
- Add `--test-config` option which can be used to test a configuration file
  before trying to use it in a live broker. Closes #2521.
- Add support for PUID/PGID environment variables for setting the user/group
  to drop privileges to. Closes #2441.
- Report persistence stats when starting.
- $SYS updates are now aligned to `sys_interval` seconds, meaning that if set
  to 10, for example, updates will be sent at times matching x0 seconds.
  Previously update intervals were aligned to the time the broker was started.
- Add `log_dest android` for logging to the Android logd daemon.
- Fix some retained topic memory not being cleared immediately after used.
- Add -q option to allow logging to be disabled at the command line.
- Log message if a client attempts to connect with TLS to a non-TLS listener.
- Add `listener_allow_anonymous` option.
- Add `listener_auto_id_prefix` option.
- Allow seconds when defining `persistent_client_expiration`.

## Plugin interface
- Add `mosquitto_topic_matches_sub_with_pattern()`, which can match against
  subscriptions with `%c` and `%u` patterns for client id / username
  substitution.
- Add support for modifying outgoing messages using `MOSQ_EVT_MESSAGE_OUT`.
- Add `mosquitto_client()` function for retrieving a client struct if that
  client is connected.
- Add `MOSQ_ERR_PLUGIN_IGNORE` to allow plugins to register basic auth or acl
  check callbacks, but still act as though they are not registered. A plugin
  that wanted to act as a blocklist for certain usernames, but wasn't carrying
  out authentication could return `MOSQ_ERR_PLUGIN_IGNORE` for usernames not on
  its blocklist. If no other plugins were configured, the client would be
  authenticated. Using `MOSQ_ERR_PLUGIN_DEFER` instead would mean the clients
  would be denied if no other plugins were configured.
- Add `mosquitto_client_port()` function for plugins.
- Add `MOSQ_EVT_CONNECT`, to allow plugins to know when a client has
  successfully authenticated to the broker.
- Add connection-state example plugin to demonstrate `MOSQ_EVT_CONNECT`.
- Add `MOSQ_EVT_CLIENT_OFFLINE`, to allow plugins to know when a client with a
  non-zero session expiry interval has gone offline.
- Plugins on non-Windows platforms now no longer make their symbols globally
  available, which means they are self contained.
- Add support for delayed basic authentication in plugins.
- Plugins using the `MOSQ_EVT_MESSAGE_WRITE` callback can now return
  `MOSQ_ERR_QUOTA_EXCEEDED` to have the message be rejected. MQTT v5 clients
  using QoS 1 or 2 will receive the quota-exceeded reason code in the
  corresponding PUBACK/PUBREC.
- `MOSQ_EVT_TICK` is now passed to plugins when `per_listener_settings` is true.
- Add `mosquitto_sub_matches_acl()`, which can match one topic filter (a
  subscription) against another topic filter (an ACL).
- Registration of the `MOSQ_EVT_CONTROL` plugin event is now handled globally
  across the broker, so only a single plugin can register for a given $CONTROL
  topic.
- Add `mosquitto_plugin_set_info()` to allow plugins to tell the broker their
  name and version.
- Add builtin $CONTROL/broker/v1 control topic with the `listPlugins`
  command. This is disabled by default, but can be enabled with the
  `enable_control_api` option.
- Plugins no longer need to define `mosquitto_plugin_cleanup()` if they do not
  need to do any of their own cleanup. Callbacks will be unregistered
  automatically.
- Add `mosquitto_set_clientid()` to allow plugins to force a client id for a
  client.
- Add `MOSQ_EVT_SUBSCRIBE` and `MOSQ_EVT_UNSUBSCRIBE` events that are called when
  subscribe/unsubscribes actually succeed. Allow modifying topic and qos.
- Add `mosquitto_persistence_location()` for plugins to use to find a valid
  location for storing persistent data.
- Plugins can now use the `next_s` and `next_ms` members of the tick event data
  struct to set a minimum interval that the broker will wait before calling the
  tick callback again.
- MOSQ_EVT_ACL_CHECK event is now passed message properties where possible.

# Plugins
- Add acl-file plugin.
- Add password-file plugin.
- Add persist-sqlite plugin.
- Add sparkplug-aware plugin.

# Dynamic security plugin
- Add ability to deny wildcard subscriptions for a role to the dynsec plugin.
- The dynamic security plugin now only kicks clients at the start of the next
  network loop, to give chance for PUBACK/PUBREC to be sent. Closes #2474.
- The dynamic security plugin now reports client connections in getClient and
  listClients.
- The dynamic security plugin now generates an initial configuration if none
  is present, including a set of default roles.
- The dynamic security plugin now supports `%c` and `%u` patterns for
  substituting client id and username respectively, in all ACLs except for
  subscribeLiteral and unsubscribeLiteral.
- The dynamic security plugin now supports multiple ways to initialise the
  first configuration file.

# Client library
- Add `MOSQ_OPT_DISABLE_SOCKETPAIR` to allow the disabling of the socketpair
  feature that allows the network thread to be woken from select() by another
  thread when e.g.  `mosquitto_publish()` is called. This reduces the number of
  sockets used by each client by two.
- Add `on_pre_connect()` callback to allow clients to update
  username/password/TLS parameters before an automatic reconnection.
- Callbacks no longer block other callbacks, and can be set from within a
  callback. Closes #2127.
- Add support for MQTT v5 broker to client topic aliases.
- Add `mosquitto_topic_matches_sub_with_pattern()`, which can match against
  subscriptions with `%c` and `%u` patterns for client id / username
  substitution.
- Add `mosquitto_sub_matches_acl()`, which can match one topic filter (a
  subscription) against another topic filter (an ACL).
- Add `mosquitto_sub_matches_acl_with_pattern()`, which can match one topic
  filter (a subscription) against another topic filter (an ACL), with `%c` and
  `%u` patterns for client id / username substitution.
- Performance: reduce memory allocations when sending packets.
- Reintroduce threading support for Windows. Closes #1509.
- `mosquitto_subscribe*()` now returns `MOSQ_ERR_INVAL` if an empty string is
  passed as a topic filter.
- `mosquitto_unsubscribe*()` now returns `MOSQ_ERR_INVAL` if an empty string is
  passed as a topic filter.
- Add websockets support.
- `mosquitto_property_read_binary/string/string_pair` will now set the
  name/value parameter to NULL if the binary/string is empty. This aligns the
  behaviour with other property functions. Closes #2648.
- Add `mosquitto_unsubscribe2_v5_callback_set`, which provides a callback that
  gives access to reason codes for each of the unsubscription requests.
- Add `mosquitto_property_remove`, for removing properties from property
  lists.
- Add `on_ext_auth()` callback to allow handling MQTT v5 extended authentication.
- Add `mosquitto_ext_auth_continue()` function to continue an MQTT v5 extended
  authentication.
- Remove support for TLS v1.1.
- Use openssl provided function for x509 certificate hostname verification,
  rather than own function.

# Clients

## General
- Add `-W` timeout support to Windows.
- The `--insecure` option now disables all server certificate verification.
- Add websockets support.
- Using `-x` now sets the clients to use MQTT v5.0.
- Fix parsing of IPv6 addresses in socks proxy urls.
- Add `--tls-keylog` option which can be used to generate a file that can be
  used by wireshark to decrypt TLS traffic for debugging purposes.
- Remove support for TLS v1.1.
- Add `-o` option for all clients loading options from a specific file.
- Add `--no-tls` option for all clients which disables all TLS options for
  that instance. This is useful for negating TLS options provided in a config
  file, or to disable the automatic use of TLS when using port 8883.
  Closes #2180.

## mosquitto_rr
- Fix `-f` and `-s` options in mosquitto_rr.
- Add `--latency` option to mosquitto_rr, for printing the request/response
  latency.
- Add `--retain-handling` option.

## mosquitto_sub
- Fix incorrect output formatting in mosquitto_sub when using field widths
  with `%x` and `%X` for printing the payload in hex.
- Add float printing option to mosquitto_sub.
- mosquitto_sub payload hex output can now be split by fixed field length.
- Add `--message-rate` option to mosquitto_sub, for printing the count of
  messages received each second.
- Add `--retain-handling` option.
- Add `-w`/`--watch` to mosquitto_sub which means messages will be printed on a
  fixed line number based on the topic and order in which messages were
  received. Requires ANSI escape code support in the terminal.
- mosquitto_sub now only needs `-t` or `-U` to run - this means that `-t` is
  not required in all situations.

# Apps

## mosquitto_signal
- Add `mosquitto_signal` for helping send signals to mosquitto on Windows.

## mosquitto_ctrl
- Add interactive shell mode to mosquitto_ctrl.
- Add support for `listPlugins` to mosquitto_ctrl.
- Allow mosquitto_ctrl dynsec module to update passwords in files rather than
  having to connect to a broker.

## mosquitto_passwd
- Print messages in mosquitto_passwd when adding/updating passwords.
  Closes #2544.
- When creating a new file with `-c`, setting the output filename to a dash `-`
  will output the result to stdout.

## mosquitto_db_dump
- Add `--json` output mode do mosquitto_db_dump.

# Build
- Increased CMake minimal required version to 3.14, which is required for the
  preinstalled SQLite3 find module.
- Add an CMake option `WITH_LTO` to enable/disable link time optimization.
- Set C99 as the explicit, rather than implicit, build standard.
- cJSON is now a required dependency.
- Refactored headers for easier discovery.
- Support for openssl < 3.0 removed.


2.0.23 - 2026-01-14
===================

Broker:
- Fix handling of disconnected sessions for `per_listener_settings true`
- Check return values of openssl *_get_ex_data() and *_set_ex_data() to
  prevent possible crash. This could occur only in extremely unlikely
  situations. See https://github.com/eclipse-mosquitto/mosquitto/issues/3389
  Closes #3389.
- Check return value of openssl ASN1_string_[get0_]data() functions for NULL.
  This prevents a crash in case of incorrect certificate handling in openssl.
  Closes #3390.
- Fix potential crash on startup if a malicious/corrupt persistence file from
  mosquitto 1.5 or earlier is loaded. Closes #3439.
- Limit auto_id_prefix to 50 characters. Closes #3440.


2.0.22 - 2025-07-11
===================

# Broker
- Windows: Fix broker crash on startup if using `log_dest stdout`
- Bridge: Fix idle_timeout never occurring for lazy bridges.
- Fix case where max_queued_messages = 0 was not treated as unlimited.
  Closes #3244.
- Fix `--version` exit code and output. Closes #3267.
- Fix crash on receiving a $CONTROL message over a bridge, if
  per_listener_settings is set true and the bridge is carrying out topic
  remapping. Closes #3261.
- Fix incorrect reference clock being selected on startup on Linux.
  Closes #3238.
- Fix reporting of client disconnections being incorrectly attributed to "out
  of memory". Closes #3253.
- Fix compilation when using `WITH_OLD_KEEPALIVE`. Closes #3250.
- Add Windows linker file for the broker to the installer. Closes #3269.
- Fix Websockets PING not being sent on Windows. Closes #3272.
- Fix problems with secure websockets. Closes #1211.
- Fix crash on exit when using WITH_EPOLL=no. Closes #3302.
- Fix clients being incorrectly expired when they have keepalive ==
  max_keepalive. Closes #3226, #3286.

# Dynamic security plugin
- Fix mismatch memory free when saving config which caused memory tracking to
  be incorrect.

# Client library
- Fix C++ symbols being removed when compiled with link time optimisation.
  Closes #3259.
- TLS error handling was incorrectly setting a protocol error for non-TLS
  errors.  This would cause the mosquitto_loop_start() thread to exit if no
  broker was available on the first connection attempt. This has been fixed.
  Closes #3258.
- Fix linker errors on some architectures using cmake. Closes #3167.


# Tests
- Fix 08-ssl-connect-cert-auth-expired and 08-ssl-connect-cert-auth-revoked
  tests when running on a single CPU system. Closes #3230.


2.0.21 - 2025-03-06
===================

# Security
- Fix leak on malicious SUBSCRIBE by authenticated client.
  Closes eclipse #248.
- Further fix for CVE-2023-28366.

# Broker
- Fix clients sending a RESERVED packet not being quickly disconnected.
  Closes #2325.
- Fix `bind_interface` producing an error when used with an interface that has
  an IPv6 link-local address and no other IPv6 addresses. Closes #2696.
- Fix mismatched wrapped/unwrapped memory alloc/free in properties. Closes #3192.
- Fix `allow_anonymous false` not being applied in local only mode. Closes #3198.
- Add `retain_expiry_interval` option to fix expired retained message not
  being removed from memory if they are not subscribed to. Closes #3221.
- Produce an error if invalid combinations of cafile/capath/certfile/keyfile
  are used. Closes #1836. Closes #3130.
- Backport keepalive checking from develop to fix problems in current
  implementation. Closes #3138.

# Client library
- Fix potential deadlock in mosquitto_sub if `-W` is used. Closes #3175.

# Apps
- mosquitto_ctrl dynsec now also allows `-i` to specify a clientid as well as
  `-c`. This matches the documentation which states `-i`. Closes #3219.
# Client library
- Fix threads linking on Windows for static libmosquitto library
  Closes #3143

# Build
- Fix Windows builds not having websockets enabled.
- Add tzdata to docker images

# Tests
- Fix 08-ssl-connect-cert-auth-expired and 08-ssl-connect-cert-auth-revoked
  tests when under load. Closes #3208.


2.0.20 - 2024-10-16
===================

# Broker
- Fix QoS 1 / QoS 2 publish incorrectly returning "no subscribers".
  Closes #3128.
- Open files with appropriate access on Windows. Closes #3119.
- Don't allow invalid response topic values.
- Fix some strict protocol compliance issues. Closes #3052.

# Client library
- Fix cmake build on OS X. Closes #3125.

# Build
- Fix build on NetBSD


2.0.19 - 2024-10-02
===================

# Security
- Fix mismatched subscribe/unsubscribe with normal/shared topics.
- Fix crash on bridge using remapped topic being sent a crafted packet.

# Broker
- Fix assert failure when loading a persistence file that contains
  subscriptions with no client id.
- Fix local bridges being incorrectly expired when
  persistent_client_expiration is in use.
- Fix use of CLOCK_BOOTTIME for getting time. Closes #3089.
- Fix mismatched subscribe/unsubscribe with normal/shared topics.
- Fix crash on bridge using remapped topic being sent a crafted packet.

# Client library
- Fix some error codes being converted to string as "unknown". Closes #2579.
- Clear SSL error state to avoid spurious error reporting. Closes #3054.
- Fix "payload format invalid" not being allowed as a PUBREC reason code.
- Don't allow SUBACK with missing reason codes.

# Build
- Thread support is re-enabled on Windows.


2.0.18 - 2023-09-18
===================

# Broker
- Fix crash on subscribe under certain unlikely conditions. Closes #2885.
  Closes #2881.

# Clients
- Fix mosquitto_rr not honouring `-R`. Closes #2893.

# Windows
- Installer will start/stop the mosquitto service when installing and
  uninstalling, to prevent problems with not being able to overwrite or remove
  mosquitto.exe.


2.0.17 - 2023-08-22
===================

# Broker
- Fix `max_queued_messages 0` stopping clients from receiving messages.
  Closes #2879.
- Fix `max_inflight_messages` not being set correctly. Closes #2876.

# Apps
- Fix `mosquitto_passwd -U` backup file creation. Closes #2873.


2.0.16 - 2023-08-16
===================

# Security
- CVE-2023-28366: Fix memory leak in broker when clients send multiple QoS 2
  messages with the same message ID, but then never respond to the PUBREC
  commands.
- CVE-2023-0809: Fix excessive memory being allocated based on malicious
  initial packets that are not CONNECT packets.
- CVE-2023-3592: Fix memory leak when clients send v5 CONNECT packets with a
  will message that contains invalid property types.
- Broker will now reject Will messages that attempt to publish to $CONTROL/.
- Broker now validates usernames provided in a TLS certificate or TLS-PSK
  identity are valid UTF-8.
- Fix potential crash when loading invalid persistence file.
- Library will no longer allow single level wildcard certificates, e.g. *.com

# Broker
- Fix $SYS messages being expired after 60 seconds and hence unchanged values
  disappearing.
- Fix some retained topic memory not being cleared immediately after used.
- Fix error handling related to the `bind_interface` option.
- Fix std* files not being redirected when daemonising, when built with
  assertions removed. Closes #2708.
- Fix default settings incorrectly allowing TLS v1.1. Closes #2722.
- Use line buffered mode for stdout. Closes #2354. Closes #2749.
- Fix bridges with non-matching cleansession/local_cleansession being expired
  on start after restoring from persistence. Closes #2634.
- Fix connections being limited to 2048 on Windows. The limit is now 8192,
  where supported. Closes #2732.
- Broker will log warnings if sensitive files are world readable/writable, or
  if the owner/group is not the same as the user/group the broker is running
  as. In future versions the broker will refuse to open these files.
- mosquitto_memcmp_const is now more constant time.
- Only register with DLT if DLT logging is enabled.
- Fix any possible case where a json string might be incorrectly loaded. This
  could have caused a crash if a textname or textdescription field of a role was
  not a string, when loading the dynsec config from file only.
- Dynsec plugin will not allow duplicate clients/groups/roles when loading
  config from file, which matches the behaviour for when creating them.
- Fix heap overflow when reading corrupt config with "log_dest file".

# Client library
- Use CLOCK_BOOTTIME when available, to keep track of time. This solves the
  problem of the client OS sleeping and the client hence not being able to
  calculate the actual time for keepalive purposes. Closes #2760.
- Fix default settings incorrectly allowing TLS v1.1. Closes #2722.
- Fix high CPU use on slow TLS connect. Closes #2794.

# Clients
- Fix incorrect topic-alias property value in mosquitto_sub json output.
- Fix confusing message on TLS certificate verification. Closes #2746.

# Apps
- mosquitto_passwd uses mkstemp() for backup files.
- `mosquitto_ctrl dynsec init` will refuse to overwrite an existing file,
  without a race-condition.


2.0.15 - 2022-08-16
===================

# Security
- Deleting the group configured as the anonymous group in the Dynamic Security
  plugin, would leave a dangling pointer that could lead to a single crash.
  This is considered a minor issue - only administrative users should have
  access to dynsec, the impact on availability is one-off, and there is no
  associated loss of data. It is now forbidden to delete the group configured
  as the anonymous group.

# Broker
- Fix memory leak when a plugin modifies the topic of a message in
  MOSQ_EVT_MESSAGE.
- Fix bridge `restart_timeout` not being honoured.
- Fix potential memory leaks if a plugin modifies the message in the
  MOSQ_EVT_MESSAGE event.
- Fix unused flags in CONNECT command being forced to be 0, which is not
  required for MQTT v3.1. Closes #2522.
- Improve documentation of `persistent_client_expiration` option.
  Closes #2404.
- Add clients to session expiry check list when restarting and reloading from
  persistence. Closes #2546.
- Fix bridges not sending failure notification messages to the local broker if
  the remote bridge connection fails. Closes #2467. Closes #1488.
- Fix some PUBLISH messages not being counted in $SYS stats. Closes #2448.
- Fix incorrect return code being sent in DISCONNECT when a client session is
  taken over. Closes #2607.
- Fix confusing "out of memory" error when a client is kicked in the dynamic
  security plugin. Closes #2525.
- Fix confusing error message when dynamic security config file was a
  directory. Closes #2520.
- Fix bridge queued messages not being persisted when local_cleansession is
  set to false and cleansession is set to true. Closes #2604.
- Dynamic security: Fix modifyClient and modifyGroup commands to not modify
  the client/group if a new group/client being added is not valid.
  Closes #2598.
- Dynamic security: Fix the plugin being able to be loaded twice. Currently
  only a single plugin can interact with a unique $CONTROL topic. Using
  multiple instances of the plugin would produce duplicate entries in the
  config file. Closes #2601. Closes #2470.
- Fix case where expired messages were causing queued messages not to be
  delivered. Closes #2609.
- Fix websockets not passing on the X-Forwarded-For header.

# Client library
- Fix threads library detection on Windows under cmake. Bumps the minimum
  cmake version to 3.1, which is still ancient.
- Fix use of `MOSQ_OPT_TLS_ENGINE` being unable to be used due to the openssl
  ctx not being initialised until starting to connect. Closes #2537.
- Fix incorrect use of SSL_connect. Closes #2594.
- Don't set SIGPIPE to ignore, use MSG_NOSIGNAL instead. Closes #2564.
- Add documentation of struct mosquitto_message to header. Closes #2561.
- Fix documentation omission around mosquitto_reinitialise. Closes #2489.
- Fix use of MOSQ_OPT_SSL_CTX when used in conjunction with
  MOSQ_OPT_SSL_CTX_DEFAULTS. Closes #2463.
- Fix failure to close thread in some situations. Closes #2545.

# Clients
- Fix mosquitto_pub incorrectly reusing topic aliases when reconnecting.
  Closes #2494.

# Apps
- Fix `-o` not working in `mosquitto_ctrl`, and typo in related documentation.
  Closes #2471.


2.0.14 - 2021-11-17
===================

# Broker
- Fix bridge not respecting receive-maximum when reconnecting with MQTT v5.

# Client library
- Fix mosquitto_topic_matches_sub2() not using the length parameters.
  Closes #2364.
- Fix incorrect subscribe_callback in mosquittopp.h. Closes #2367.


2.0.13 - 2021-10-27
===================

# Broker
- Fix `max_keepalive` option not being able to be set to 0.
- Fix LWT messages not being delivered if `per_listener_settings` was set to
  true. Closes #2314.
- Various fixes around inflight quota management. Closes #2306.
- Fix problem parsing config files with Windows line endings. Closes #2297.
- Don't send retained messages when a shared subscription is made.
- Fix log being truncated in Windows.
- Fix client id not showing in log on failed connections, where possible.
- Fix broker sending duplicate CONNACK on failed MQTT v5 reauthentication.
  Closes #2339.
- Fix mosquitto_plugin.h not including mosquitto_broker.h. Closes #2350.
- Fix unlimited message quota not being properly checked for incoming
  messages. Closes #2593.
- Fixed build for openssl compiled with OPENSSL_NO_ENGINE. Closes #2589.

# Client library
- Initialise sockpairR/W to invalid in `mosquitto_reinitialise()` to avoid
  closing invalid sockets in `mosquitto_destroy()` on error. Closes #2326.

# Clients
- Fix date format in mosquitto_sub output. Closes #2353.


2.0.12 - 2021-08-31
===================

# Security
- An MQTT v5 client connecting with a large number of user-property properties
  could cause excessive CPU usage, leading to a loss of performance and
  possible denial of service. This has been fixed.
- Fix `max_keepalive` not applying to MQTT v3.1.1 and v3.1 connections.
  These clients are now rejected if their keepalive value exceeds
  max_keepalive. This option allows CVE-2020-13849, which is for the MQTT
  v3.1.1 protocol itself rather than an implementation, to be addressed.
- Using certain listener related configuration options e.g. `cafile`, that
  apply to the default listener without defining any listener would cause a
  remotely accessible listener to be opened that was not confined to the local
  machine but did have anonymous access enabled, contrary to the
  documentation. This has been fixed. Closes #2283.
- CVE-2021-34434: If a plugin had granted ACL subscription access to a
  durable/non-clean-session client, then removed that access, the client would
  keep its existing subscription. This has been fixed.
- Incoming QoS 2 messages that had not completed the QoS flow were not being
  checked for ACL access when a clean session=False client was reconnecting.
  This has been fixed.

# Broker
- Fix possible out of bounds memory reads when reading a corrupt/crafted
  configuration file. Unless your configuration file is writable by untrusted
  users this is not a risk. Closes #567213.
- Fix `max_connections` option not being correctly counted.
- Fix TLS certificates and TLS-PSK not being able to be configured at the same
  time.
- Disable TLS v1.3 when using TLS-PSK, because it isn't correctly configured.
- Fix `max_keepalive` not applying to MQTT v3.1.1 and v3.1 connections.
  These clients are now rejected if their keepalive value exceeds
  max_keepalive. This option allows CVE-2020-13849, which is for the MQTT
  v3.1.1 protocol itself rather than an implementation, to be addressed.
- Fix broker not quitting if e.g. the `password_file` is specified as a
  directory. Closes #2241.
- Fix listener mount_point not being removed on outgoing messages.
  Closes #2244.
- Strict protocol compliance fixes, plus test suite.
- Fix $share subscriptions not being recovered for durable clients that
  reconnect.
- Update plugin configuration documentation. Closes #2286.

# Client library
- If a client uses TLS-PSK then force the default cipher list to use "PSK"
  ciphers only. This means that a client connecting to a broker configured
  with x509 certificates only will now fail. Prior to this, the client would
  connect successfully without verifying certificates, because they were not
  configured.
- Disable TLS v1.3 when using TLS-PSK, because it isn't correctly configured.
- Threaded mode is deconfigured when the mosquitto_loop_start() thread ends,
  which allows mosquitto_loop_start() to be called again. Closes #2242.
- Fix MOSQ_OPT_SSL_CTX not being able to be set to NULL. Closes #2289.
- Fix reconnecting failing when MOSQ_OPT_TLS_USE_OS_CERTS was in use, but none
  of capath, cafile, psk, nor MOSQ_OPT_SSL_CTX were set, and
  MOSQ_OPT_SSL_CTX_WITH_DEFAULTS was set to the default value of true.
  Closes #2288.

# Apps
- Fix `mosquitto_ctrl dynsec setDefaultACLAccess` command not working.

# Clients
- mosquitto_sub and mosquitto_rr now open stdout in binary mode on Windows
  so binary payloads are not modified when printing.
- Document TLS certificate behaviour when using `-p 8883`.

# Build
- Fix installation using WITH_TLS=no. Closes #2281.
- Fix builds with libressl 3.4.0. Closes #2198.
- Remove some unnecessary code guards related to libressl.
- Fix printf format build warning on MIPS. Closes #2271.



2.0.11 - 2021-06-08
===================

# Security
- If a MQTT v5 client connects with a crafted CONNECT packet a memory leak
  will occur. This has been fixed.

# Broker
- Fix possible crash having just upgraded from 1.6 if `per_listener_settings
  true` is set, and a SIGHUP is sent to the broker before a client has
  reconnected to the broker. Closes #2167.
- Fix bridge not reconnectng if the first reconnection attempt fails.
  Closes #2207.
- Improve QoS 0 outgoing packet queueing.
- Fix non-reachable bridge blocking the broker on Windows. Closes #2172.
- Fix possible corruption of pollfd array on Windows when bridges were
  reconnecting. Closes #2173.
- Fix QoS 0 messages not being queued when `queue_qos0_messages` was enabled.
  Closes #2224.
- Fix openssl not being linked to dynamic security plugin. Closes #2277.

# Clients
- If sending mosquitto_sub output to a pipe, mosquitto_sub will now detect
  that the pipe has closed and disconnect. Closes #2164.
- Fix `mosquitto_pub -l` quitting if a message publication is attempted when
  the broker is temporarily unavailable. Closes #2187.


2.0.10 - 2021-04-03
==================

# Security
- CVE-2021-28166: If an authenticated client connected with MQTT v5 sent a
  malformed CONNACK message to the broker a NULL pointer dereference occurred,
  most likely resulting in a segfault.
  Affects versions 2.0.0 to 2.0.9 inclusive.

# Broker
- Don't over write new receive-maximum if a v5 client connects and takes over
  an old session. Closes #2134.
- Fix CVE-2021-28166. Closes #2163.

# Clients
- Set `receive-maximum` to not exceed the `-C` message count in mosquitto_sub
  and mosquitto_rr, to avoid potentially lost messages. Closes #2134.
- Fix TLS-PSK mode not working with port 8883. Closes #2152.

# Client library
- Fix possible socket leak. This would occur if a client was using
  `mosquitto_loop_start()`, then if the connection failed due to the remote
  server being inaccessible they called `mosquitto_loop_stop(, true)` and
  recreated the mosquitto object.

# Build
- A variety of minor build related fixes, like functions not having previous
  declarations.
- Fix CMake cross compile builds not finding opensslconf.h. Closes #2160.
- Fix build on Solaris non-sparc. Closes #2136.


2.0.9 - 2021-03-11
==================

# Security
- If an empty or invalid CA file was provided to the client library for
  verifying the remote broker, then the initial connection would fail but
  subsequent connections would succeed without verifying the remote broker
  certificate. Closes #2130.
- If an empty or invalid CA file was provided to the broker for verifying the
  remote broker for an outgoing bridge connection then the initial connection
  would fail but subsequent connections would succeed without verifying the
  remote broker certificate. Closes #2130.

# Broker
- Fix encrypted bridge connections incorrectly connecting when `bridge_cafile`
  is empty or invalid. Closes #2130.
- Fix `tls_version` behaviour not matching documentation. It was setting the
  exact TLS version to use, not the minimum TLS version to use. Closes #2110.
- Fix messages to `$` prefixed topics being rejected. Closes #2111.
- Fix QoS 0 messages not being delivered when max_queued_bytes was configured.
  Closes #2123.
- Fix bridge increasing backoff calculation.
- Improve handling of invalid combinations of listener address and bind
  interface configurations. Closes #2081.
- Fix `max_keepalive` option not applying to clients connecting with keepalive
  set to 0. Closes #2117.

# Client library
- Fix encrypted connections incorrectly connecting when the CA file passed to
  `mosquitto_tls_set()` is empty or invalid. Closes #2130.
- Fix connections retrying very rapidly in some situations.

# Build
- Fix cmake epoll detection.


2.0.8 - 2021-02-25
==================

# Broker
- Fix incorrect datatypes in `struct mosquitto_evt_tick`. This changes the
  size and offset of two of the members of this struct, and changes the size
  of the struct. This is an ABI break, but is considered to be acceptable
  because plugins should never be allocating their own instance of this
  struct, and currently none of the struct members are used for anything, so a
  plugin should not be accessing them. It would also be safe to read/write
  from the existing struct parameters.
- Give compile time warning if libwebsockets compiled without external poll
  support. Closes #2060.
- Fix memory tracking not being available on FreeBSD or macOS. Closes #2096.

# Client library
- Fix mosquitto_{pub|sub}_topic_check() functions not returning MOSQ_ERR_INVAL
  on topic == NULL.

# Clients
- Fix possible loss of data in `mosquitto_pub -l` when sending multiple long
  lines. Closes #2078.

# Build
- Provide a mechanism for Docker users to run a broker that doesn't use
  authentication, without having to provide their own configuration file.
  Closes #2040.


2.0.7 - 2021-02-04
==================

# Broker
- Fix exporting of executable symbols on BSD when building via makefile.
- Fix some minor memory leaks on exit only.
- Fix possible memory leak on connect. Closes #2057.
- Fix openssl engine not being able to load private key. Closes #2066.

# Clients
- Fix config files truncating options after the first space. Closes #2059.

# Build
- Fix man page building to not absolutely require xsltproc when using CMake.
  This now handles the case where we are building from the released tar, or
  building from git if xsltproc is available, or building from git if xsltproc
  is not available.


1.6.13 - 2021-02-04
===================

# Broker
- Fix crash on Windows if loading a plugin fails. Closes #1866.
- Fix DH group not being set for TLS connections, which meant ciphers using
  DHE couldn't be used. Closes #1925. Closes #1476.
- Fix local bridges being disconnected on SIGHUP. Closes #1942.
- Fix $SYS/broker/publish/messages/+ counters not being updated for QoS 1, 2
  messages. Closes #1968.
- Fix listener not being reassociated with client when reloading a persistence
  file and `per_listener_settings true` is set and the client did not set a
  username. Closes #1891.
- Fix file logging on Windows. Closes #1880.
- Fix bridge sock not being removed from sock hash on error. Closes #1897.

# Client library
- Fix build on Mac Big Sur. Closes #1905.
- Fix DH group not being set for TLS connections, which meant ciphers using
  DHE couldn't be used. Closes #1925. Closes #1476.

# Clients
- mosquitto_sub will now quit with an error if the %U option is used on
  Windows, rather than just quitting. Closes #1908.
- Fix config files truncating options after the first space. Closes #2059.

# Apps
- Perform stricter parsing of input username in mosquitto_passwd. Closes
  #570126 (Eclipse bugzilla).

# Build
- Enable epoll support in CMake builds.


2.0.6 - 2021-01-28

# Broker
- Fix calculation of remaining length parameter for websockets clients that
  send fragmented packets. Closes #1974.
# Broker
- Fix potential duplicate Will messages being sent when a will delay interval
  has been set.
- Fix message expiry interval property not being honoured in
  `mosquitto_broker_publish` and `mosquitto_broker_publish_copy`.
- Fix websockets listeners with TLS not responding. Closes #2020.
- Add notes that libsystemd-dev or similar is needed if building with systemd
  support. Closes #2019.
- Improve logging in obscure cases when a client disconnects. Closes #2017.
- Fix reloading of listeners where multiple listeners have been defined with
  the same port but different bind addresses. Closes #2029.
- Fix `message_size_limit` not applying to the Will payload. Closes #2022.
- The error topic-alias-invalid was being sent if an MQTT v5 client published
  a message with empty topic and topic alias set, but the topic alias hadn't
  already been configured on the broker. This has been fixed to send a
  protocol error, as per section 3.3.4 of the specification.
- Note in the man pages that SIGHUP reloads TLS certificates. Closes #2037.
- Fix bridges not always connecting on Windows. Closes #2043.

# Apps
- Allow command line arguments to override config file options in
  mosquitto_ctrl. Closes #2010.
- mosquitto_ctrl: produce an error when requesting a new password if both
  attempts do not match. Closes #2011.

# Build
- Fix cmake builds using `WITH_CJSON=no` not working if cJSON not found.
  Closes #2026.

# Other
- The SPDX identifiers for EDL-1.0 have been changed to BSD-3-Clause as per
  The Eclipse legal documentation generator. The licenses are identical.


2.0.5 - 2021-01-11
==================

# Broker
- Fix `auth_method` not being provided to the extended auth plugin event.
  Closes #1975.
- Fix large packets not being completely published to slow clients.
  Closes #1977.
- Fix bridge connection not relinquishing POLLOUT after messages are sent.
  Closes #1979.
- Fix apparmor incorrectly denying access to
  /var/lib/mosquitto/mosquitto.db.new. Closes #1978.
- Fix potential intermittent initial bridge connections when using poll().
- Fix `bind_interface` option. Closes #1999.
- Fix invalid behaviour in dynsec plugin if a group or client is deleted
  before a role that was attached to the group or client is deleted.
  Closes #1998.
- Improve logging in dynsec addGroupRole command. Closes #2005.
- Improve logging in dynsec addGroupClient command. Closes #2008.

# Client library
- Improve documentation around the `_v5()` and non-v5 functions, e.g.
  `mosquitto_publish()` and `mosquitto_publish_v5().

# Build
- `install` Makefile target should depend on `all`, not `mosquitto`, to ensure
  that man pages are always built. Closes #1989.
- Fixes for lots of minor build warnings highlighted by Visual Studio.

# Apps
- Disallow control characters in mosquitto_passwd usernames.
- Fix incorrect description in mosquitto_ctrl man page. Closes #1995.
- Fix `mosquitto_ctrl dynsec getGroup` not showing roles. Closes #1997.


2.0.4 - 2020-12-22
==================

# Broker
- Fix $SYS/broker/publish/messages/+ counters not being updated for QoS 1, 2
  messages. Closes #1968.
- mosquitto_connect_bind_async() and mosquitto_connect_bind_v5() should not
  reset the bind address option if called with bind_address == NULL.
- Fix dynamic security configuration possibly not being reloaded on Windows
  only. Closes #1962.
- Add more log messages for dynsec load/save error conditions.
- Fix websockets connections blocking non-websockets connections on Windows.
  Closes #1934.

# Build
- Fix man pages not being built when using CMake. Closes #1969.


2.0.3 - 2020-12-17
==================

# Security
- Running mosquitto_passwd with the following arguments only
  `mosquitto_passwd -b password_file username password` would cause the
  username to be used as the password.

# Broker
- Fix excessive CPU use on non-Linux systems when the open file limit is set
  high. Closes #1947.
- Fix LWT not being sent on client takeover when the existing session wasn't
  being continued. Closes #1946.
- Fix bridges possibly not completing connections when WITH_ADNS is in use.
  Closes #1960.
- Fix QoS 0 messages not being delivered if max_queued_messages was set to 0.
  Closes #1956.
- Fix local bridges being disconnected on SIGHUP. Closes #1942.
- Fix slow initial bridge connections for WITH_ADNS=no.
- Fix persistence_location not appending a '/'.

# Clients
- Fix mosquitto_sub being unable to terminate with Ctrl-C if a successful
  connection is not made. Closes #1957.

# Apps
- Fix `mosquitto_passwd -b` using username as password (not if `-c` is also
  used). Closes #1949.

# Build
- Fix `install` target when using WITH_CJSON=no. Closes #1938.
- Fix `generic` docker build. Closes #1945.


2.0.2 - 2020-12-10
==================

# Broker
- Fix build regression for WITH_WEBSOCKETS=yes on non-Linux systems.


2.0.1 - 2020-12-10
==================

# Broker
- Fix websockets connections on Windows blocking subsequent connections.
  Closes #1934.
- Fix DH group not being set for TLS connections, which meant ciphers using
  DHE couldn't be used. Closes #1925. Closes #1476.
- Fix websockets listeners not causing the main loop not to wake up.
  Closes #1936.

# Client library
- Fix DH group not being set for TLS connections, which meant ciphers using
  DHE couldn't be used. Closes #1925. Closes #1476.

# Apps
- Fix `mosquitto_passwd -U`

# Build
- Fix cjson include paths.
- Fix build using WITH_TLS=no when the openssl headers aren't available.
- Distribute cmake/ and snap/ directories in tar.


2.0.0 - 2020-12-03
==================

# Breaking changes
- When the Mosquitto broker is run without configuring any listeners it will
  now bind to the loopback interfaces 127.0.0.1 and/or ::1. This means that
  only connections from the local host will be possible.

  Running the broker as `mosquitto` or `mosquitto -p 1883` will bind to the
  loopback interface.

  Running the broker with a configuration file with no listeners configured
  will bind to the loopback interface with port 1883.

  Running the broker with a listener defined will bind by default to `0.0.0.0`
  / `::` and so will be accessible from any interface. It is still possible to
  bind to a specific address/interface.

  If the broker is run as `mosquitto -c mosquitto.conf -p 1884`, and a
  listener is defined in the configuration file, then the port defined on the
  command line will be IGNORED, and no listener configured for it.
- All listeners now default to `allow_anonymous false` unless explicitly set
  to true in the configuration file. This means that when configuring a
  listener the user must either configure an authentication and access control
  method, or set `allow_anonymous true`. When the broker is run without a
  configured listener, and so binds to the loopback interface, anonymous
  connections are allowed.
- If Mosquitto is run on as root on a unix like system, it will attempt to
  drop privileges as soon as the configuration file has been read. This is in
  contrast to the previous behaviour where elevated privileges were only
  dropped after listeners had been started (and hence TLS certificates loaded)
  and logging had been started. The change means that clients will never be
  able to connect to the broker when it is running as root, unless the user
  explicitly sets it to run as root, which is not advised. It also means that
  all locations that the broker needs to access must be available to the
  unprivileged user. In particular those people using TLS certificates from
  Lets Encrypt will need to do something to allow Mosquitto to access
  those certificates. An example deploy renewal hook script to help with this
  is at `misc/letsencrypt/mosquitto-copy.sh`.
  The user that Mosquitto will change to are the one provided in the
  configuration, `mosquitto`, or `nobody`, in order of availability.
- The `pid_file` option will now always attempt to write a pid file,
  regardless of whether the `-d` argument is used when running the broker.
- The `tls_version` option now defines the *minimum* TLS protocol version to
  be used, rather than the exact version. Closes #1258.
- The `max_queued_messages` option has been increased from 100 to 1000 by
  default, and now also applies to QoS 0 messages, when a client is connected.
- The mosquitto_sub, mosquitto_pub, and mosquitto_rr clients will now load
  OS provided CA certificates by default if `-L mqtts://...` is used, or if
  the port is set to 8883 and no other CA certificates are loaded.
- Minimum support libwebsockets version is now 2.4.0
- The license has changed from "EPL-1.0 OR EDL-1.0" to "EPL-2.0 OR EDL-1.0".

# Broker features
- New plugin interface which is more flexible, easier to develop for and
  easier to extend.
- New dynamic security plugin, which allows clients, groups, and roles to be
  defined and updated as the broker is running.
- Performance improvements, particularly for higher numbers of clients.
- When running as root, if dropping privileges to the "mosquitto" user fails,
  then try "nobody" instead. This reduces the burden on users installing
  Mosquitto themselves.
- Add support for Unix domain socket listeners.
- Add `bridge_outgoing_retain` option, to allow outgoing messages from a
  bridge to have the retain bit completely disabled, which is useful when
  bridging to e.g. Amazon or Google.
- Add support for MQTT v5 bridges to handle the "retain-available" property
  being false.
- Allow MQTT v5.0 outgoing bridges to fall back to MQTT v3.1.1 if connecting
  to a v3.x only broker.
- DLT logging is now configurable at runtime with `log_dest dlt`.
  Closes #1735.
- Add `mosquitto_broker_publish()` and `mosquitto_broker_publish_copy()`
  functions, which can be used by plugins to publish messages.
- Add `mosquitto_client_protocol_version()` function which can be used by
  plugins to determine which version of MQTT a client has connected with.
- Add `mosquitto_kick_client_by_clientid()` and `mosquitto_kick_client_by_username()`
  functions, which can be used by plugins to disconnect clients.
- Add support for handling $CONTROL/ topics in plugins.
- Add support for PBKDF2-SHA512 password hashing.
- Enabling certificate based TLS encryption is now through certfile and
  keyfile, not capath or cafile.
- Added support for controlling UNSUBSCRIBE calls in v5 plugin ACL checks.
- Add "deny" acl type. Closes #1611.
- The broker now sends the receive-maximum property for MQTT v5 CONNACKs.
- Add the `bridge_max_packet_size` option. Closes #265.
- Add the `bridge_bind_address` option. Closes #1311.
- TLS certificates for the server are now reloaded on SIGHUP.
- Default for max_queued_messages has been changed to 1000.
- Add `ciphers_tls1.3` option, to allow setting TLS v1.3 ciphersuites.
  Closes #1825.
- Bridges now obey MQTT v5 server-keepalive.
- Add bridge support for the MQTT v5 maximum-qos property.
- Log client port on new connections. Closes #1911.

# Broker fixes
- Send DISCONNECT with `malformed-packet` reason code on invalid PUBLISH,
  SUBSCRIBE, and UNSUBSCRIBE packets.
- Document that X509_free() must be called after using
  mosquitto_client_certificate(). Closes #1842.
- Fix listener not being reassociated with client when reloading a persistence
  file and `per_listener_settings true` is set and the client did not set a
  username. Closes #1891.
- Fix bridge sock not being removed from sock hash on error. Closes #1897.
- mosquitto_password now forbids the : character. Closes #1833.
- Fix `log_timestamp_format` not applying to `log_dest topic`. Closes #1862.
- Fix crash on Windows if loading a plugin fails. Closes #1866.
- Fix file logging on Windows. Closes #1880.
- Report an error if the config file is set to a directory. Closes #1814.
- Fix bridges incorrectly setting Wills to manage remote notifications when
  `notifications_local_only` was set true. Closes #1902.

# Client library features
- Client no longer generates random client ids for v3.1.1 clients, these are
  now expected to be generated on the broker. This matches the behaviour for
  v5 clients. Closes #291.
- Add support for connecting to brokers through Unix domain sockets.
- Add `mosquitto_property_identifier()`, for retrieving the identifier integer
  for a property.
- Add `mosquitto_property_identifier_to_string()` for converting a property
  identifier integer to the corresponding property name string.
- Add `mosquitto_property_next()` to retrieve the next property in a list, for
  iterating over property lists.
- mosquitto_pub now handles the MQTT v5 retain-available property by never
  setting the retain bit.
- Added MOSQ_OPT_TCP_NODELAY, to allow disabling Nagle's algorithm on client
  sockets. Closes #1526.
- Add `mosquitto_ssl_get()` to allow clients to access their SSL structure and
  perform additional verification.
- Add MOSQ_OPT_BIND_ADDRESS to allow setting of a bind address independently
  of the `mosquitto_connect*()` call.
- Add `MOSQ_OPT_TLS_USE_OS_CERTS` option, to instruct the client to load and
  trust OS provided CA certificates for use with TLS connections.

# Client library fixes
- Fix send quota being incorrectly reset on reconnect. Closes #1822.
- Don't use logging until log mutex is initialised. Closes #1819.
- Fix missing mach/mach_time.h header on OS X. Closes #1831.
- Fix connect properties not being sent when the client automatically
  reconnects. Closes #1846.

# Client features
- Add timeout return code (27) for `mosquitto_sub -W <secs>` and
  `mosquitto_rr -W <secs>`. Closes #275.
- Add support for connecting to brokers through Unix domain sockets with the
  `--unix` argument.
- Use cJSON library for producing JSON output, where available. Closes #1222.
- Add support for outputting MQTT v5 property information to mosquitto_sub/rr
  JSON output. Closes #1416.
- Add `--pretty` option to mosquitto_sub/rr for formatted/unformatted JSON
  output.
- Add support for v5 property printing to mosquitto_sub/rr in non-JSON mode.
  Closes #1416.
- Add `--nodelay` to all clients to allow them to use the MOSQ_OPT_TCP_NODELAY
  option.
- Add `-x` to all clients to all the session-expiry-interval property to be
  easily set for MQTT v5 clients.
- Add `--random-filter` to mosquitto_sub, to allow only a certain proportion
  of received messages to be printed.
- mosquitto_sub %j and %J timestamps are now in a ISO 8601 compatible format.
- mosquitto_sub now supports extra format specifiers for field width and
  precision for some parameters.
- Add `--version` for all clients.
- All clients now load OS provided CA certificates if used with `-L
  mqtts://...`, or if port is set to 8883 and no other CA certificates are
  used. Closes #1824.
- Add the `--tls-use-os-certs` option to all clients.

# Client fixes
- mosquitto_sub will now exit if all subscriptions were denied.
- mosquitto_pub now sends 0 length files without an error when using `-f`.
- Fix description of `-e` and `-t` arguments in mosquitto_rr. Closes #1881.
- mosquitto_sub will now quit with an error if the %U option is used on
  Windows, rather than just quitting. Closes #1908.


1.6.12 - 2020-08-19
===================

# Security
- In some circumstances, Mosquitto could leak memory when handling PUBLISH
  messages. This is limited to incoming QoS 2 messages, and is related
  to the combination of the broker having persistence enabled, a clean
  session=false client, which was connected prior to the broker restarting,
  then has reconnected and has now sent messages at a sufficiently high rate
  that the incoming queue at the broker has filled up and hence messages are
  being dropped. This is more likely to have an effect where
  max_queued_messages is a small value. This has now been fixed. Closes #1793.

# Broker
- Build warning fixes when building with WITH_BRIDGE=no and WITH_TLS=no.

# Clients
- All clients exit with an error exit code on CONNACK failure. Closes #1778.
- Don't busy loop with `mosquitto_pub -l` on a slow connection.


1.5.10 - 2020-08-19
===================

# Security
- In some circumstances, Mosquitto could leak memory when handling PUBLISH
  messages. This is limited to incoming QoS 2 messages, and is related
  to the combination of the broker having persistence enabled, a clean
  session=false client, which was connected prior to the broker restarting,
  then has reconnected and has now sent messages at a sufficiently high rate
  that the incoming queue at the broker has filled up and hence messages are
  being dropped. This is more likely to have an effect where
  max_queued_messages is a small value. This has now been fixed. Closes #1793.


1.6.11 - 2020-08-11
===================

# Security
- On Windows the Mosquitto service was being installed without appropriate
  path quoting, this has been fixed.

# Broker
- Fix usage message only mentioning v3.1.1. Closes #1713.
- Fix broker refusing to start if only websockets listeners were defined.
  Closes #1740.
- Change systemd unit files to create /var/log/mosquitto before starting.
  Closes #821.
- Don't quit with an error if opening the log file isn't possible.
  Closes #821.
- Fix bridge topic remapping when using "" as the topic. Closes #1749.
- Fix messages being queued for disconnected bridges when clean start was
  set to true. Closes #1729.
- Fix `autosave_interval` not being triggered by messages being delivered.
  Closes #1726.
- Fix websockets clients sometimes not being disconnected promptly.
  Closes #1718.
- Fix "slow" file based logging by switching to line based buffering.
  Closes #1689. Closes #1741.
- Log protocol error message where appropriate from a bad UNSUBSCRIBE, rather
  than the generic "socket error".
- Don't try to start DLT logging if DLT unavailable, to avoid a long delay
  when shutting down the broker. Closes #1735.
- Fix potential memory leaks. Closes #1773. Closes #1774.
- Fix clients not receiving messages after a previous client with the same
  client ID and positive will delay interval quit. Closes #1752.
- Fix overly broad HAVE_PTHREAD_CANCEL compile guard. Closes #1547.

# Client library
- Improved documentation around connect callback return codes. Close #1730.
- Fix `mosquitto_publish*()` no longer returning `MOSQ_ERR_NO_CONN` when not
  connected. Closes #1725.
- `mosquitto_loop_start()` now sets a thread name on Linux, FreeBSD, NetBSD,
  and OpenBSD. Closes #1777.
- Fix `mosquitto_loop_stop()` not stopping on Windows. Closes #1748. Closes #117.


1.6.10 - 2020-05-25
===================

# Broker
- Report invalid bridge prefix+pattern combinations at config parsing time
  rather than letting the bridge fail later. Issue #1635.
- Fix `mosquitto_passwd -b` not updating passwords for existing users
  correctly. Creating a new user with `-b` worked without problem.
  Closes #1664.
- Fix memory leak when connecting clients rejected.
- Don't disconnect clients that are already disconnected. This prevents the
  session expiry being extended on SIGHUP. Closes #1521.
- Fix support for openssl 3.0.
- Fix check when loading persistence file of a different version than the
  native version. Closes #1684.
- Fix possible assert crash associated with bridge reconnecting when compiled
  without epoll support. Closes #1700.

# Client library
- Don't treat an unexpected PUBACK, PUBREL, or PUBCOMP as a fatal error.
  Issue #1629.
- Fix support for openssl 3.0.
- Fix memory leaks from multiple calls to
  `mosquitto_lib_init()`/`mosquitto_lib_cleanup()`. Closes #1691.
- Fix documentation on return code of `mosquitto_lib_init()` for Windows.
  Closes #1690.

# Clients
- Fix mosquitto_sub %j or %J not working on Windows. Closes #1674.

# Build
- Various fixes for building with <C99 support. Closes #1622.
- Fix use of sed on BSD. Closes #1614.


1.6.9 - 20200227
================

# Broker
- Fix session expiry with very large expiry intervals. Closes #1525.
- Check ACL patterns for validity when loading. Closes #1539.
- Use presence of password file as indicator for whether username checks
  should take place, not whether usernames are defined in the password file.
  Closes #1545.
- Strip whitespace from end of config file string options. Closes #1566.
- Satisfy valgrind when exiting on error due to not being able to open a
  listening socket, by calling freeaddrinfo. Closes #1565.
- Fix config->user not being freed on exit. Closes #1564.
- Fix trailing whitespace not being trimmed on acl users. Closes #1539.
- Fix `bind_interface` not working for the default listener. Closes #1533.
- Improve password file parsing in the broker and mosqitto_passwd. Closes #1584.
- Print OpenSSL errors in more situations, like when loading certificates
  fails. Closes #1552.
- Fix `mosquitto_client_protocol() returning incorrect values.

# Client library
- Set minimum keepalive argument to `mosquitto_connect*()` to be 5 seconds.
  Closes #1550.
- Fix `mosquitto_topic_matches_sub()` not returning MOSQ_ERR_INVAL if the
  topic contains a wildcard. Closes #1589.

# Clients
- Fix `--remove-retained` not obeying the `-T` option for filtering out
  topics. Closes #1585.
- Default behaviour for v5 clients using `-c` is now to use infinite length
  sessions, as with v3 clients. Closes #1546.


1.6.8 - 20191128
================

# Broker
- Various fixes for `allow_zero_length_clientid` config, where this option was
  not being set correctly. Closes #1429.
- Fix incorrect memory tracking causing problems with memory_limit option.
  Closes #1437.
- Fix subscription topics being limited to 200 characters instead of 200
  hierarchy levels. Closes #1441.
- Only a single CRL could be loaded at once. This has been fixed.
  Closes #1442.
- Fix problems with reloading config when `per_listener_settings` was true.
  Closes #1459.
- Fix retained messages with an expiry interval not being expired after being
  restored from persistence. Closes #1464.
- Fix messages with an expiry interval being sent without an expiry interval
  property just before they were expired. Closes #1464.
- Fix TLS Websockets clients not receiving messages after taking over a
  previous connection. Closes #1489.
- Fix MQTT 3.1.1 clients using clean session false, or MQTT 5.0 clients using
  session-expiry-interval set to infinity never expiring, even when the global
  `persistent_client_expiration` option was set. Closes #1494.

# Client library
- Fix publish properties not being passed to on_message_v5 callback for QoS 2
  messages. Closes #1432.
- Fix documentation issues in mosquitto.h. Closes #1478.
- Document `mosquitto_connect_srv()`. Closes #1499.

# Clients
- Fix duplicate cfg definition in rr_client. Closes #1453.
- Fix `mosquitto_pub -l` hang when stdin stream ends. Closes #1448.
- Fix `mosquitto_pub -l` not sending the final line of stdin if it does not
  end with a new line. Closes #1473.
- Make documentation for `mosquitto_pub -l` match reality - blank lines are
  sent as empty messages. Closes #1474.
- Free memory in `mosquitto_sub` when quitting without having made a successful
  connection. Closes #1513.

# Build
- Added `CLIENT_STATIC_LDADD` to makefile builds to allow more libraries to be
  linked when compiling the clients with a static libmosquitto, as required
  for e.g. openssl on some systems.

# Installer
- Fix mosquitto_rr.exe not being included in Windows installers. Closes #1463.


1.6.7 - 20190925
================

# Broker
- Add workaround for working with libwebsockets 3.2.0.
- Fix potential crash when reloading config. Closes #1424, #1425.

# Client library
- Don't use `/` in autogenerated client ids, to avoid confusing with topics.
- Fix `mosquitto_max_inflight_messages_set()` and `mosquitto_int_option(...,
  MOSQ_OPT_*_MAX, ...)` behaviour. Closes #1417.
- Fix regression on use of `mosquitto_connect_async()` not working.
  Closes #1415 and #1422.

# Clients
- mosquitto_sub: Fix `-E` incorrectly not working unless `-d` was also
  specified. Closes #1418.
- Updated documentation around automatic client ids.


1.6.6 - 20190917
================

# Security
- Restrict topic hierarchy to 200 levels to prevent possible stack overflow.
  Closes #1412.

# Broker
- Restrict topic hierarchy to 200 levels to prevent possible stack overflow.
  Closes #1412.
- mosquitto_passwd now returns 1 when attempting to update a user that does
  not exist. Closes #1414.


1.6.5 - 20190912
================

# Broker
- Fix v5 DISCONNECT packets with remaining length == 2 being treated as a
  protocol error. Closes #1367.
- Fix support for libwebsockets 3.x.
- Fix slow websockets performance when sending large messages. Closes #1390.
- Fix bridges potentially not connecting on Windows. Closes #478.
- Fix clients authorised using `use_identity_as_username` or
  `use_subject_as_username` being disconnected on SIGHUP. Closes #1402.
- Improve error messages in some situations when clients disconnect. Reduces
  the number of "Socket error on client X, disconnecting" messages.
- Fix Will for v5 clients not being sent if will delay interval was greater
  than the session expiry interval. Closes #1401.
- Fix CRL file not being reloaded on HUP. Closes #35.
- Fix repeated "Error in poll" messages on Windows when only websockets
  listeners are defined. Closes #1391.

# Client library
- Fix reconnect backoff for the situation where connections are dropped rather
  than refused. Closes #737.
- Fix missing locks on `mosq->state`. Closes #1374.

# Documentation
- Improve details on global/per listener options in the mosquitto.conf man page.
  Closes #274.
- Clarify behaviour when clients exceed the `message_size_limit`. Closes #448.
- Improve documentation for `max_inflight_bytes`, `max_inflight_messages`,
  and `max_queued_messages`.

# Build
- Fix missing function warnings on NetBSD.
- Fix WITH_STATIC_LIBRARIES using CMake on Windows. Closes #1369.
- Guard ssize_t definition on Windows. Closes #522.


1.6.4 - 20190801
================

# Broker
- Fix persistent clients being incorrectly expired on Raspberry Pis.
  Closes #1272.
- Windows: Allow other applications access to the log file when running.
  Closes #515.
- Fix incoming QoS 2 messages being blocked when `max_inflight_messages` was
  set to 1. Closes #1332.
- Fix incoming messages not being removed for a client if the topic being
  published to does not have any subscribers. Closes #1322.

# Client library
- Fix MQTT v5 subscription options being incorrectly set for MQTT v3
  subscriptions. Closes #1353.
- Make behaviour of `mosquitto_connect_async()` consistent with
  `mosquitto_connect()` when connecting to a non-existent server.
  Closes #1345.
- `mosquitto_string_option(mosq, MOSQ_OPT_TLS_KEYFORM, ...)` was incorrectly
  returning `MOSQ_ERR_INVAL` with valid input. This has been fixed.
  Closes #1360.
- on_connect callback is now called with the correct v5 reason code if a v5
  client connects to a v3.x broker and is sent a CONNACK with the
  "unacceptable protocol version" connack reason code.
- Fix memory leak when setting v5 properties in mosquitto_connect_v5().
- Fix properties not being sent on QoS>0 PUBLISH messages.

# Clients
- mosquitto_pub: fix error codes not being returned when mosquitto_pub exits.
  Closes #1354.
- All clients: improve error messages when connecting to a v3.x broker when in
  v5 mode. Closes #1344.

# Other
- Various documentation fixes.


1.6.3 - 20190618
================

# Broker
- Fix detection of incoming v3.1/v3.1.1 bridges. Closes #1263.
- Fix default max_topic_alias listener config not being copied to the in-use
  listener when compiled without TLS support.
- Fix random number generation if compiling using `WITH_TLS=no` and on Linux
  with glibc >= 2.25. Without this fix, no random numbers would be generated
  for e.g. on broker client id generation, and so clients connecting expecting
  this feature would be unable to connect.
- Fix compilation problem related to `getrandom()` on non-glibc systems.
- Fix Will message for a persistent client incorrectly being sent when the
  client reconnects after a clean disconnect. Closes #1273.
- Fix Will message for a persistent client not being sent on disconnect.
  Closes #1273.
- Improve documentation around the upgrading of persistence files. Closes
  #1276.
- Add 'extern "C"' on mosquitto_broker.h and mosquitto_plugin.h for C++ plugin
  writing. Closes #1290.
- Fix persistent Websockets clients not receiving messages after they
  reconnect, having sent DISCONNECT on a previous session. Closes #1227.
- Disable TLS renegotiation. Client initiated renegotiation is considered to
  be a potential attack vector against servers. Closes #1257.
- Fix incorrect shared subscription topic '$shared'.
- Fix zero length client ids being rejected for MQTT v5 clients with clean
  start set to true.
- Fix MQTT v5 overlapping subscription behaviour. Clients now receive message
  from all matching subscriptions rather than the first one encountered, which
  ensures the maximum QoS requirement is met.
- Fix incoming/outgoing quota problems for QoS>0.
- Remove obsolete `store_clean_interval` from documentation.
- Fix v4 authentication plugin never calling psk_key_get.

# Client library
- Fix typo causing build error on Windows when building without TLS support.
  Closes #1264.

# Clients
- Fix -L url parsing when `/topic` part is missing.
- Stop some error messages being printed even when `--quiet` was used.
  Closes #1284.
- Fix mosquitto_pub exiting with error code 0 when an error occurred.
  Closes #1285.
- Fix mosquitto_pub not using the `-c` option. Closes #1273.
- Fix MQTT v5 clients not being able to specify a password without a username.
  Closes #1274.
- Fix `mosquitto_pub -l` not handling network failures. Closes #1152.
- Fix `mosquitto_pub -l` not handling zero length input. Closes #1302.
- Fix double free on exit in mosquitto_pub. Closes #1280.

# Documentation
- Remove references to Python binding and C++ wrapper in libmosquitto man
  page. Closes #1266.

# Build
- CLIENT_LDFLAGS now uses LDFLAGS. Closes #1294.


1.6.2 - 20190430
================

# Broker
- Fix memory access after free, leading to possible crash, when v5 client with
  Will message disconnects, where the Will message has as its first property
  one of `content-type`, `correlation-data`, `payload-format-indicator`, or
  `response-topic`.  Closes #1244.
- Fix build for WITH_TLS=no. Closes #1250.
- Fix Will message not allowing user-property properties.
- Fix broker originated messages (e.g. $SYS/broker/version) not being
  published when `check_retain_source` set to true. Closes #1245.
- Fix $SYS/broker/version being incorrectly expired after 60 seconds.
  Closes #1245.

# Library
- Fix crash after client has been unable to connect to a broker. This occurs
  when the client is exiting and is part of the final library cleanup routine.
  Closes #1246.

# Clients
- Fix -L url parsing. Closes #1248.


1.6.1 - 20190426
================

# Broker
- Document `memory_limit` option.

# Clients
- Fix compilation on non glibc systems due to missing sys/time.h header.

# Build
- Add `make check` target and document testing procedure. Closes #1230.
- Document bundled dependencies and how to disable. Closes #1231.
- Split CFLAGS and CPPFLAGS, and LDFLAGS and LDADD/LIBADD.
- test/unit now respects CPPFLAGS and LDFLAGS. Closes #1232.
- Don't call ldconfig in CMake scripts. Closes #1048.
- Use CMAKE_INSTALL_* variables when installing in CMake. Closes #1049.


1.6 - 20190417
==============

# Broker features
- Add support for MQTT v5
- Add support for OCSP stapling.
- Add support for ALPN on bridge TLS connections. Closes #924.
- Add support for Automotive DLT logging.
- Add TLS Engine support.
- Persistence file read/write performance improvements.
- General performance improvements.
- Add max_keepalive option, to allow a maximum keepalive value to be set for
  MQTT v5 clients only.
- Add `bind_interface` option which allows a listener to be bound to a
  specific network interface, in a similar fashion to the `bind_address` option.
  Linux only.
- Add improved bridge restart interval based on Decorrelated Jitter.
- Add `dhparamfile` option, to allow DH parameters to be loaded for Ephemeral
  DH support
- Disallow writing to $ topics where appropriate.
- Fix mosquitto_passwd crashing on corrupt password file. Closes #1207.
- Add explicit support for TLS v1.3.
- Drop support for TLS v1.0.
- Improved general support for broker generated client ids. Removed libuuid
  dependency.
- auto_id_prefix now defaults to 'auto-'.
- QoS 1 and 2 flow control improvements.

# Client library features
- Add support for MQTT v5
- Add mosquitto_subscribe_multiple() for sending subscriptions to multiple
  topics in one command.
- Add TLS Engine support.
- Add explicit support for TLS v1.3.
- Drop support for TLS v1.0.
- QoS 1 and 2 flow control improvements.

# Client features
- Add support for MQTT v5
- Add mosquitto_rr client, which can be used for "request-response" messaging,
  by sending a request message and awaiting a response.
- Add TLS Engine support.
- Add support for ALPN on TLS connections. Closes #924.
- Add -D option for all clients to specify MQTT v5 properties.
- Add -E to mosquitto_sub, which causes it to exit immediately after having
  its subscriptions acknowledged. Use with -c to create a durable client
  session without requiring a message to be received.
- Add --remove-retained to mosquitto_sub, which can be used to clear retained
  messages on a broker.
- Add --repeat and --repeat-delay to mosquitto_pub, which can be used to
  repeat single message publishes at a regular interval.
- -V now accepts `5, `311`, `31`, as well as `mqttv5` etc.
- Add explicit support for TLS v1.3.
- Drop support for TLS v1.0.

# Broker fixes
- Improve error reporting when creating listeners.
- Fix build on SmartOS due to missing IPV6_V6ONLY. Closes #1212.

Client library fixes
- Add missing `mosquitto_userdata()` function.

# Client fixes
- mosquitto_pub wouldn't always publish all messages when using `-l` and
  QoS>0. This has been fixed.
- mosquitto_sub was incorrectly encoding special characters when using %j
  output format. Closes #1220.


1.5.8 - 20190228
================

# Broker
- Fix clients being disconnected when ACLs are in use. This only affects the
  case where a client connects using a username, and the anonymous ACL list is
  defined but specific user ACLs are not defined. Closes #1162.
- Make error messages for missing config file clearer.
- Fix some Coverity Scan reported errors that could occur when the broker was
  already failing to start.
- Fix broken mosquitto_passwd on FreeBSD. Closes #1032.
- Fix delayed bridge local subscriptions causing missing messages.
  Closes #1174.

# Library
- Use higher resolution timer for random initialisation of client id
  generation. Closes #1177.
- Fix some Coverity Scan reported errors that could occur when the library was
  already quitting.


1.5.7 - 20190213
================

# Broker
- Fix build failure when using WITH_ADNS=yes
- Ensure that an error occurs if `per_listener_settings true` is given after
  other security options. Closes #1149.
- Fix include_dir not sorting config files before loading. This was partially
  fixed in 1.5 previously.
- Improve documentation around the `include_dir` option. Closes #1154.
- Fix case where old unreferenced msg_store messages were being saved to the
  persistence file, bloating its size unnecessarily. Closes #389.

# Library
- Fix `mosquitto_topic_matches_sub()` not returning MOSQ_ERR_INVAL for
  invalid subscriptions like `topic/#abc`. This only affects the return value,
  not the match/no match result, which was already correct.

# Build
- Don't require C99 compiler.
- Add rewritten build test script and remove some build warnings.


1.5.6 - 20190206
================

# Security
- CVE-2018-12551: If Mosquitto is configured to use a password file for
  authentication, any malformed data in the password file will be treated as
  valid. This typically means that the malformed data becomes a username and no
  password. If this occurs, clients can circumvent authentication and get access
  to the broker by using the malformed username. In particular, a blank line
  will be treated as a valid empty username. Other security measures are
  unaffected. Users who have only used the mosquitto_passwd utility to create
  and modify their password files are unaffected by this vulnerability.
  Affects version 1.0 to 1.5.5 inclusive.
- CVE-2018-12550: If an ACL file is empty, or has only blank lines or
  comments, then mosquitto treats the ACL file as not being defined, which
  means that no topic access is denied. Although denying access to all topics
  is not a useful configuration, this behaviour is unexpected and could lead
  to access being incorrectly granted in some circumstances. This is now
  fixed. Affects versions 1.0 to 1.5.5 inclusive.
- CVE-2018-12546. If a client publishes a retained message to a topic that
  they have access to, and then their access to that topic is revoked, the
  retained message will still be delivered to future subscribers. This
  behaviour may be undesirable in some applications, so a configuration option
  `check_retain_source` has been introduced to enforce checking of the
  retained message source on publish.

# Broker
- Fixed comment handling for config options that have optional arguments.
- Improved documentation around bridge topic remapping.
- Handle mismatched handshakes (e.g. QoS1 PUBLISH with QoS2 reply) properly.
- Fix spaces not being allowed in the bridge remote_username option. Closes
  #1131.
- Allow broker to always restart on Windows when using `log_dest file`. Closes
  #1080.
- Fix Will not being sent for Websockets clients. Closes #1143.
- Windows: Fix possible crash when client disconnects. Closes #1137.
- Fixed durable clients being unable to receive messages when offline, when
  per_listener_settings was set to true. Closes #1081.
- Add log message for the case where a client is disconnected for sending a
  topic with invalid UTF-8. Closes #1144.

# Library
- Fix TLS connections not working over SOCKS.
- Don't clear SSL context when TLS connection is closed, meaning if a user
  provided an external SSL_CTX they have less chance of leaking references.

# Build
- Fix comparison of boolean values in CMake build. Closes #1101.
- Fix compilation when openssl deprecated APIs are not available.
  Closes #1094.
- Man pages can now be built on any system. Closes #1139.


1.5.5 - 20181211
================

# Security
- If `per_listener_settings` is set to true, then the `acl_file` setting was
  ignored for the "default listener" only. This has been fixed. This does not
  affect any listeners defined with the `listener` option. Closes #1073.
  This is now tracked as CVE-2018-20145.

# Broker
- Add `socket_domain` option to allow listeners to disable IPv6 support.
  This is required to work around a problem in libwebsockets that means
  sockets only listen on IPv6 by default if IPv6 support is compiled in.
  Closes #1004.
- When using ADNS, don't ask for all network protocols when connecting,
  because this can lead to confusing "Protocol not supported" errors if the
  network is down. Closes #1062.
- Fix outgoing retained messages not being sent by bridges on initial
  connection. Closes #1040.
- Don't reload auth_opt_ options on reload, to match the behaviour of the
  other plugin options. Closes #1068.
- Print message on error when installing/uninstalling as a Windows service.
- All non-error connect/disconnect messages are controlled by the
  `connection_messages` option. Closes #772. Closes #613. Closes #537.

# Library
- Fix reconnect delay backoff behaviour. Closes #1027.
- Don't call on_disconnect() twice if keepalive tests fail. Closes #1067.

# Client
- Always print leading zeros in mosquitto_sub when output format is hex.
  Closes #1066.

# Build
- Fix building where TLS-PSK is not available. Closes #68.


1.5.4 - 20181108
================

# Security
- When using a TLS enabled websockets listener with "require_certificate"
  enabled, the mosquitto broker does not correctly verify client certificates.
  This is now fixed. All other security measures operate as expected, and in
  particular non-websockets listeners are not affected by this. Closes #996.

# Broker
- Process all pending messages even when a client has disconnected. This means
  a client that send a PUBLISH then DISCONNECT quickly, then disconnects will
  have its DISCONNECT message processed properly and so no Will will be sent.
  Closes #7.
- $SYS/broker/clients/disconnected should never be negative. Closes #287.
- Give better error message if a client sends a password without a username.
  Closes #1015.
- Fix bridge not honoring restart_timeout. Closes #1019.
- Don't disconnect a client if an auth plugin denies access to SUBSCRIBE.
  Closes #1016.

# Library
- Fix memory leak that occurred if mosquitto_reconnect() was used when TLS
  errors were present. Closes #592.
- Fix TLS connections when using an external event loop with
  mosquitto_loop_read() and mosquitto_write(). Closes #990.

# Build
- Fix clients not being compiled with threading support when using CMake.
  Closes #983.
- Header fixes for FreeBSD. Closes #977.
- Use _GNU_SOURCE to fix build errors in websockets and getaddrinfo usage.
  Closes #862 and #933.
- Fix builds on QNX 7.0.0. Closes #1018.


1.5.3 - 20180925
================

# Security
- Fix CVE-2018-12543. If a message is sent to Mosquitto with a topic that
  begins with $, but is not $SYS, then an assert that should be unreachable is
  triggered and Mosquitto will exit.

# Broker
- Elevate log level to warning for situation when socket limit is hit.
- Remove requirement to use `user root` in snap package config files.
- Fix retained messages not sent by bridges on outgoing topics at the first
  connection. Closes #701.
- Documentation fixes. Closes #520, #600.
- Fix duplicate clients being added to by_id hash before the old client was
  removed. Closes #645.
- Fix Windows version not starting if include_dir did not contain any files.
  Closes #566.
- When an authentication plugin denied access to a SUBSCRIBE, the client would
  be disconnected incorrectly. This has been fixed. Closes #1016.

# Build
- Various fixes to ease building.


1.5.2 - 20180919
================

# Broker
- Fix build when using WITH_ADNS=yes.
- Fix incorrect call to setsockopt() for TCP_NODELAY. Closes #941.
- Fix excessive CPU usage when the number of sockets exceeds the system limit.
  Closes #948.
- Fix for bridge connections when using WITH_ADNS=yes.
- Fix round_robin false behaviour. Closes #481.
- Fix segfault on HUP when bridges and security options are configured.
  Closes #965.

# Library
- Fix situation where username and password is used with SOCKS5 proxy. Closes
  #927.
- Fix SOCKS5 behaviour when passing IP addresses. Closes #927.

# Build
- Make it easier to build without bundled uthash.h using "WITH_BUNDLED_DEPS=no".
- Fix build with OPENSSL_NO_ENGINE. Closes #932.


1.5.1 - 20180816
================

# Broker
- Fix plugin cleanup function not being called on exit of the broker.
  Closes #900.
- Print more OpenSSL errors when loading certificates/keys fail.
- Use AF_UNSPEC etc. instead of PF_UNSPEC to comply with POSIX. Closes #863.
- Remove use of AI_ADDRCONFIG, which means the broker can be used on systems
  where only the loopback interface is defined. Closes #869, Closes #901.
- Fix IPv6 addresses not being able to be used as bridge addresses.
  Closes #886.
- All clients now time out if they exceed their keepalive*1.5, rather than
  just reach it. This was inconsistent in two places.
- Fix segfault on startup if bridge CA certificates could not be read.
  Closes #851.
- Fix problem opening listeners on Pi caused by unsigned char being default.
  Found via #849.
- ACL patterns that do not contain either %c or %u now produce a warning in
  the log. Closes #209.
- Fix bridge publishing failing when per_listener_settings was true. Closes
  #860.
- Fix `use_identity_as_username true` not working. Closes #833.
- Fix UNSUBACK messages not being logged. Closes #903.
- Fix possible endian issue when reading the `memory_limit` option.
- Fix building for libwebsockets < 1.6.
- Fix accessor functions for username and client id when used in plugin auth
  check.

# Library
- Fix some places where return codes were incorrect, including to the
  on_disconnect() callback. This has resulted in two new error codes,
  MOSQ_ERR_KEEPALIVE and MOSQ_ERR_LOOKUP.
- Fix connection problems when mosquitto_loop_start() was called before
  mosquitto_connect_async(). Closes #848.

# Clients
- When compiled using WITH_TLS=no, the default port was incorrectly being set
  to -1. This has been fixed.
- Fix compiling on Mac OS X <10.12. Closes #813 and #240.

# Build
- Fixes for building on NetBSD. Closes #258.
- Fixes for building on FreeBSD.
- Add support for compiling with static libwebsockets library.


1.5 - 20180502
==============

# Security
- Fix memory leak that could be caused by a malicious CONNECT packet.
  CVE-2017-7654. Closes #533493 (on Eclipse bugtracker)

# Broker features
- Add per_listener_settings to allow authentication and access control to be
  per listener.
- Add limited support for reloading listener settings. This allows settings
  for an already defined listener to be reloaded, but port numbers must not be
  changed.
- Add ability to deny access to SUBSCRIBE messages as well as the current
  read/write accesses. Currently for auth plugins only.
- Reduce calls to malloc through the use of UHPA.
- Outgoing messages with QoS>1 are no longer retried after a timeout period.
  Messages will be retried when a client reconnects.  This change in behaviour
  can be justified by considering when the timeout may have occurred.
  * If a connection is unreliable and has dropped, but without one end
    noticing, the messages will be retried on reconnection. Sending
    additional PUBLISH or PUBREL would not have changed anything.
  * If a client is overloaded/unable to respond/has a slow connection then
    sending additional PUBLISH or PUBREL would not help the client catch
    up. Once the backlog has cleared the client will respond. If it is not
    able to catch up, sending additional duplicates would not help either.
- Add use_subject_as_username option for certificate based client
  authentication to use the entire certificate subject as a username, rather
  than just the CN. Closes #469467.
- Change sys tree printing output. This format shouldn't be relied upon and
  may change at any time. Closes #470246.
- Minimum supported libwebsockets version is now 1.3.
- Add systemd startup notification and services. Closes #471053.
- Reduce unnecessary malloc and memcpy when receiving a message and storing
  it. Closes #470258.
- Support for Windows XP has been dropped.
- Bridge connections now default to using MQTT v3.1.1.
- mosquitto_db_dump tool can now output some stats on clients.
- Perform utf-8 validation on incoming will, subscription and unsubscription
  topics.
- new $SYS/broker/store/messages/count (deprecates $SYS/broker/messages/stored)
- new $SYS/broker/store/messages/bytes
- max_queued_bytes feature to limit queues by real size rather than
  than just message count. Closes Eclipse #452919 or Github #100
- Add support for bridges to be configured to only send notifications to the
  local broker.
- Add set_tcp_nodelay option to allow Nagle's algorithm to be disabled on
  client sockets. Closes #433.
- The behaviour of allow_anonymous has changed. In the old behaviour, the
  default if not set was to allow anonymous access. The new behaviour is to
  default is to allow anonymous access unless another security option is set.
  For example, if password_file is set and allow_anonymous is not set, then
  anonymous access will be denied. It is still possible to allow anonymous
  access by setting it explicitly.

# Broker fixes
- Fix UNSUBSCRIBE with no topic is accepted on MQTT 3.1.1. Closes #665.
- Produce an error if two bridges share the same local_clientid.
- Miscellaneous fixes on Windows.
- queue_qos0_messages was not observing max_queued_** limits
- When using the include_dir configuration option sort the files
  alphabetically before loading them.  Closes #17.
- IPv6 is no longer disabled for websockets listeners.
- Remove all build timestamp information including $SYS/broker/timestamp.
  Close #651.
- Correctly handle incoming strings that contain a NULL byte. Closes #693.
- Use constant time memcmp for password comparisons.
- Fix incorrect PSK key being used if it had leading zeroes.
- Fix memory leak if a client provided a username/password for a listener with
  use_identity_as_username configured.
- Fix use_identity_as_username not working on websockets clients.
- Don't crash if an auth plugin returns MOSQ_ERR_AUTH for a username check on
  a websockets client. Closes #490.
- Fix 08-ssl-bridge.py test when using async dns lookups. Closes #507.
- Lines in the config file are no longer limited to 1024 characters long.
  Closes #652.
- Fix $SYS counters of messages and bytes sent when message is sent over
  a Websockets. Closes #250.
- Fix upgrade_outgoing_qos for retained message. Closes #534.
- Fix CONNACK message not being sent for unauthorised connect on websockets.
  Closes #8.
- Maximum connections on Windows increased to 2048.
- When a client with an in-use client-id connects, if the old client has a
  will, send the will message. Closes #26.
- Fix parsing of configuration options that end with a space. Closes #804.

# Client library features
- Outgoing messages with QoS>1 are no longer retried after a timeout period.
  Messages will be retried when a client reconnects.
- DNS-SRV support is now disabled by default.
- Add mosquitto_subscribe_simple() This is a helper function to make
  retrieving messages from a broker very straightforward. Examples of its use
  are in examples/subscribe_simple.
- Add mosquitto_subscribe_callback() This is a helper function to make
  processing messages from a broker very straightforward. An example of its use
  is in examples/subscribe_simple.
- Connections now default to using MQTT v3.1.1.
- Add mosquitto_validate_utf8() to check whether a string is valid UTF-8
  according to the UTF-8 spec and to the additional restrictions imposed by
  the MQTT spec.
- Topic inputs are checked for UTF-8 validity.
- Add mosquitto_userdata function to allow retrieving the client userdata
  member variable. Closes #111.
- Add mosquitto_pub_topic_check2(), mosquitto_sub_topic_check2(), and
  mosquitto_topic_matches_sub2() which are identical to the similarly named
  functions but also take length arguments.
- Add mosquitto_connect_with_flags_callback_set(), which allows a second
  connect callback to be used which also exposes the connect flags parameter.
  Closes #738 and #128.
- Add MOSQ_OPT_SSL_CTX option to allow a user specified SSL_CTX to be used
  instead of the one generated by libmosquitto. This allows greater control
  over what options can be set. Closes #715.
- Add MOSQ_OPT_SSL_CTX_WITH_DEFAULTS to work with MOSQ_OPT_SSL_CTX and have
  the default libmosquitto SSL_CTX configuration applied to the user provided
  SSL_CTX. Closes #567.

# Client library fixes
- Fix incorrect PSK key being used if it had leading zeroes.
- Initialise "result" variable as soon as possible in
  mosquitto_topic_matches_sub. Closes #654.
- No need to close socket again if setting non-blocking failed. Closes #649.
- Fix mosquitto_topic_matches_sub() not correctly matching foo/bar against
  foo/+/#. Closes #670.
- SNI host support added.

# Client features
- Add -F to mosquitto_sub to allow the user to choose the output format.
- Add -U to mosquitto_sub for unsubscribing from topics.
- Add -c (clean session) to mosquitto_pub.
- Add --retained-only to mosquitto_sub to exit after receiving all retained
  messages.
- Add -W to allow mosquitto_sub to stop processing incoming messages after a
  timeout.
- Connections now default to using MQTT v3.1.1.
- Default to using port 8883 when using TLS.
- mosquitto_sub doesn't continue to keep connecting if CONNACK tells it the
  connection was refused.

# Client fixes
- Correctly handle empty files with "mosquitto_pub -l". Closes #676.

# Build
- Add WITH_STRIP option (defaulting to "no") that when set to "yes" will strip
  executables and shared libraries when installing.
- Add WITH_STATIC_LIBRARIES (defaulting to "no") that when set to "yes" will
  build and install static versions of the client libraries.
- Don't run TLS-PSK tests if TLS-PSK disabled at compile time. Closes #636.
- Support for openssl versions 1.0.0 and 1.0.1 has been removed as these are
  no longer supported by openssl.

# Documentation
- Replace mentions of deprecated 'c_rehash' with 'openssl rehash'.

1.4.15 - 20180228
=================

# Security
- Fix CVE-2017-7652. If a SIGHUP is sent to the broker when there are no more
  file descriptors, then opening the configuration file will fail and security
  settings will be set back to their default values.
- Fix CVE-2017-7651. Unauthenticated clients can cause excessive memory use by
  setting "remaining length" to be a large value. This is now mitigated by
  limiting the size of remaining length to valid values. A "memory_limit"
  configuration option has also been added to allow the overall memory used by
  the broker to be limited.

# Broker
- Use constant time memcmp for password comparisons.
- Fix incorrect PSK key being used if it had leading zeroes.
- Fix memory leak if a client provided a username/password for a listener with
  use_identity_as_username configured.
- Fix use_identity_as_username not working on websockets clients.
- Don't crash if an auth plugin returns MOSQ_ERR_AUTH for a username check on
  a websockets client. Closes #490.
- Fix 08-ssl-bridge.py test when using async dns lookups. Closes #507.
- Lines in the config file are no longer limited to 1024 characters long.
  Closes #652.
- Fix $SYS counters of messages and bytes sent when message is sent over
  a Websockets. Closes #250.
- Fix upgrade_outgoing_qos for retained message. Closes #534.
- Fix CONNACK message not being sent for unauthorised connect on websockets.
  Closes #8.

# Client library
- Fix incorrect PSK key being used if it had leading zeroes.
- Initialise "result" variable as soon as possible in
  mosquitto_topic_matches_sub. Closes #654.
- No need to close socket again if setting non-blocking failed. Closes #649.
- Fix mosquitto_topic_matches_sub() not correctly matching foo/bar against
  foo/+/#. Closes #670.

# Clients
- Correctly handle empty files with "mosquitto_pub -l". Closes #676.

# Build
- Don't run TLS-PSK tests if TLS-PSK disabled at compile time. Closes #636.


1.4.14 - 20170710
=================

# Broker
- Fix regression from 1.4.13 where persistence data was not being saved.


1.4.13 - 20170627
=================

# Security
- Fix CVE-2017-9868. The persistence file was readable by all local users,
  potentially allowing sensitive information to be leaked.
  This can also be fixed administratively, by restricting access to the
  directory in which the persistence file is stored.

# Broker
- Fix for poor websockets performance.
- Fix lazy bridges not timing out for idle_timeout. Closes #417.
- Fix problems with large retained messages over websockets. Closes #427.
- Set persistence file to only be readable by owner, except on Windows. Closes
  #468.
- Fix CONNECT check for reserved=0, as per MQTT v3.1.1 check MQTT-3.1.2-3.
- When the broker stop, wills for any connected clients are now "sent". Closes
  #477.
- Auth plugins can be configured to disable the check for +# in
  usernames/client ids with the auth_plugin_deny_special_chars option.
  Partially closes #462.
- Restrictions for CVE-2017-7650 have been relaxed - '/' is allowed in
  usernames/client ids. Remainder of fix for #462.

# Clients
- Don't use / in auto-generated client ids.


1.4.12 - 20170528
=================

# Security
- Fix CVE-2017-7650, which allows clients with username or client id set to
  '#' or '+' to bypass pattern based ACLs or third party plugins. The fix
  denies message sending or receiving of messages for clients with a '#' or
  '+' in their username or client id and if the message is subject to a
  pattern ACL check or plugin check.
  Patches for other versions are available at
  https://mosquitto.org/files/cve/2017-7650/

# Broker
- Fix mosquitto.db from becoming corrupted due to client messages being
  persisted with no stored message. Closes #424.
- Fix bridge not restarting properly. Closes #428.
- Fix uninitialised memory in gets_quiet on Windows. Closes #426.
- Fix building with WITH_ADNS=no for systems that don't use glibc. Closes
  #415.
- Fixes to readme.md.
- Fix deprecation warning for OpenSSL 1.1. PR #416.
- Don't segfault on duplicate bridge names. Closes #446.
- Fix CVE-2017-7650.


1.4.11 - 20170220
=================

# Broker
- Fix crash when "lazy" type bridge attempts to reconnect. Closes #259.
- maximum_connections now applies to websockets listeners. Closes #271.
- Allow bridges to use TLS with IPv6.
- Don't error on zero length persistence files. Closes #316.
- For http only websockets clients, close files served over http in all cases
  when the client disconnects. Closes #354.
- Fix error message when websockets http_dir directory does not exist.
- Improve password utility error message. Closes #379.

# Clients
- Use of --ciphers no longer requires you to also pass --tls-version.
  Closes #380.

# Client library
- Clients can now use TLS with IPv6.
- Fix potential socket leakage when reconnecting. Closes #304.
- Fix potential negative timeout being passed to pselect. Closes #329.


1.4.10 - 20160816
=================

# Broker
- Fix TLS operation with websockets listeners and libwebsockts 2.x. Closes
  #186.
- Don't disconnect client on HUP before reading the pending data. Closes #7.
- Fix some $SYS messages being incorrectly persisted. Closes #191.
- Support OpenSSL 1.1.0.
- Call fsync after persisting data to ensure it is correctly written. Closes
  #189.
- Fix persistence saving of subscription QoS on big-endian machines.
- Fix will retained flag handling on Windows. Closes #222.
- Broker now displays an error if it is unable to open the log file. Closes
  #234.

# Client library
- Support OpenSSL 1.1.0.
- Fixed the C++ library not allowing SOCKS support to be used. Closes #198.
- Fix memory leak when verifying a server certificate with a subjectAltName
  section. Closes #237.

# Build
- Don't attempt to install docs when WITH_DOCS=no. Closes #184.


1.4.9 - 20160603
================

# Broker
- Ensure websockets clients that previously connected with clean session set
  to false have their queued messages delivered immediately on reconnecting.
  Closes #476314.
- Reconnecting client with clean session set to false doesn't start with mid=1
  again.
- Will topic isn't truncated by one byte when using a mount_point any more.
- Network errors are printed correctly on Windows.
- Fix incorrect $SYS heap memory reporting when using ACLs.
- Bridge config parameters couldn't contain a space, this has been fixed.
  Closes #150.
- Fix saving of persistence messages that start with a '/'. Closes #151.
- Fix reconnecting for bridges that use TLS on Windows. Closes #154.
- Broker and bridges can now cope with unknown incoming PUBACK, PUBREC,
  PUBREL, PUBCOMP without disconnecting. Closes #57.
- Fix websockets listeners not being able to bind to an IP address. Closes
  #170.
- mosquitto_passwd utility now correctly deals with unknown command line
  arguments in all cases. Closes #169.
- Fix publishing of $SYS/broker/clients/maximum
- Fix order of #includes in lib/send_mosq.c to ensure struct mosquitto doesn't
  differ between source files when websockets is being used. Closes #180.
- Fix possible rare crash when writing out persistence file and a client has
  incomplete messages inflight that it has been denied the right to publish.

# Client library
- Fix the case where a message received just before the keepalive timer
  expired would cause the client to miss the keepalive timer.
- Return value of pthread_create is now checked.
- _mosquitto_destroy should not cancel threads that weren't created by
  libmosquitto. Closes #166.
- Clients can now cope with unknown incoming PUBACK, PUBREC, PUBREL, PUBCOMP
  without disconnecting. Closes #57.
- Fix mosquitto_topic_matches_sub() reporting matches on some invalid
   subscriptions.

# Clients
- Handle some unchecked malloc() calls. Closes #1.

# Build
- Fix string quoting in CMakeLists.txt. Closes #4.
- Fix building on Visual Studio 2015. Closes #136.


1.4.8 - 20160214
================

# Broker
- Wills published by clients connected to a listener with mount_point defined
  now correctly obey the mount point. This was a potential security risk
  because it allowed clients to publish messages outside of their restricted
  mount point. This is only affects brokers where the mount_point option is in
  use. Closes #487178.
- Fix detection of broken connections on Windows. Closes #485143.
- Close stdin etc. when daemonised. Closes #485589.
- Fix incorrect detection of FreeBSD and OpenBSD. Closes #485131.

# Client library
- mosq->want_write should be cleared immediately before a call to SSL_write,
  to allow clients using mosquitto_want_write() to get accurate results.


1.4.7 - 20151221
================

# Broker
- Fix support for libwebsockets 1.22.


1.4.6 - 20151220
================

# Broker
- Add support for libwebsockets 1.6.

# Client library
- Fix _mosquitto_socketpair() on Windows, reducing the chance of delays when
  publishing. Closes #483979.

# Clients
- Fix "mosquitto_pub -l" stripping the final character on a line. Closes
  #483981.


1.4.5 - 20151108
================

# Broker
- Fix possible memory leak if bridge using SSL attempts to connect to a
  host that is not up.
- Free unused topic tree elements (fix in 1.4.3 was incomplete). Closes
  #468987.

# Clients
- "mosquitto_pub -l" now no longer limited to 1024 byte lines. Closes #478917.


1.4.4 - 20150916
================

# Broker
- Don't leak sockets when outgoing bridge with multiple addresses cannot
  connect. Closes #477571.
- Fix cross compiling of websockets. Closes #475807.
- Fix memory free related crashes on openwrt. Closes #475707.
- Fix excessive calls to message retry check.


1.4.3 - 20150818
================

# Broker
- Fix incorrect bridge notification on initial connection. Closes #467096.
- Build fixes for OpenBSD.
- Fix incorrect behaviour for autosave_interval, most noticeable for
  autosave_interval=1. Closes #465438.
- Fix handling of outgoing QoS>0 messages for bridges that could not be sent
  because the bridge connection was down.
- Free unused topic tree elements. Closes #468987.
- Fix some potential memory leaks. Closes #470253.
- Fix potential crash on libwebsockets error.

# Client library
- Add missing error strings to mosquitto_strerror.
- Handle fragmented TLS packets without a delay. Closes #470660.
- Fix incorrect loop timeout being chosen when using threaded interface and
  keepalive = 0. Closes #471334.
- Increment inflight messages count correctly. Closes #474935.

# Clients
- Report error string on connection failure rather than error code.


1.4.2 - 20150507
================

# Broker
- Fix bridge prefixes only working for the first outgoing message. Closes
  #464437.
- Fix incorrect bridge connection notifications on local broker.
- Fix persistent db writing on Windows. Closes #464779.
- ACLs are now checked before sending a will message.
- Fix possible crash when using bridges on Windows. Closes #465384.
- Fix parsing of auth_opt_ arguments with extra spaces/tabs.
- Broker will return CONNACK rc=5 when a username/password is not authorised.
  This was being incorrectly set as rc=4.
- Fix handling of payload lengths>4096 with websockets.

# Client library
- Inflight message count wasn't being decreased for outgoing messages using
  QoS 2, meaning that only up to 20 QoS 2 messages could be sent. This has
  been fixed. Closes #464436.
- Fix CMake dependencies for C++ wrapper building. Closes #463884.
- Fix possibility of select() being called with a socket that is >FD_SETSIZE.
  This is a fix for #464632 that will be followed up by removing the select()
  call in a future version.
- Fix calls to mosquitto_connect*_async() not completing.


1.4.1 - 20150403
================

# Broker
- Fix possible crash under heavy network load. Closes #463241.
- Fix possible crash when using pattern ACLs.
- Fix problems parsing config strings with multiple leading spaces. Closes
  #462154.
- Websockets clients are now periodically disconnected if they have not
  maintained their keepalive timer. Closes #461619.
- Fix possible minor memory leak on acl parsing.

# Client library
- Inflight limits should only apply to outgoing messages. Closes #461620.
- Fix reconnect bug on Windows. Closes #463000.
- Return -1 on error from mosquitto_socket(). Closes #461705.
- Fix crash on multiple calls to mosquitto_lib_init/mosquitto_lib_cleanup.
  Closes #462780.
- Allow longer paths on Windows. Closes #462781.
- Make _mosquitto_mid_generate() thread safe. Closes #463479.


1.4 - 20150218
==============

# Important changes
- Websockets support in the broker.
- Bridge behaviour on the local broker has changed due to the introduction of
  the local_* options. This may affect you if you are using authentication
  and/or ACLs with bridges.
- The default TLS behaviour has changed to accept all of TLS v1.2, v1.1 and
  v1.0, rather than only only one version of the protocol. It is still
  possible to restrict a listener to a single version of TLS.
- The Python client has been removed now that the Eclipse Paho Python client
  has had a release.
- When a durable client reconnects, its queued messages are now checked
  against ACLs in case of a change in username/ACL state since it last
  connected.
- New use_username_as_clientid option on the broker, for preventing hijacking
  of a client id.
- The client library and clients now have experimental SOCKS5 support.
- Wildcard TLS certificates are now supported for bridges and clients.
- The clients have support for config files with default options.
- Client and client libraries have support for MQTT v3.1.1.
- Bridge support for MQTT v3.1.1.


# Broker
- Websockets support in the broker.
- Add local_clientid, local_username, local_password for bridge connections to
  authenticate to the local broker.
- Default TLS mode now accepts TLS v1.2, v1.1 and v1.0.
- Support for ECDHE-ECDSA family ciphers.
- Fix bug #1324411, which could have had unexpected consequences for delayed
  messages in rare circumstances.
- Add support for "session present" in CONNACK messages for MQTT v3.1.1.
- Remove strict protocol #ifdefs.
- Change $SYS/broker/clients/active -> $SYS/broker/clients/connected
- Change $SYS/broker/clients/inactive -> $SYS/broker/clients/disconnected
- When a durable client reconnects, its queued messages are now checked
  against ACLs in case of a change in username/ACL state since it last
  connected.
- libuuid is used to generate client ids, where it is available, when an MQTT
  v3.1.1 client connects with a zero length client id.
- Anonymous clients are no longer accidently disconnected from the broker
  after a SIGHUP.
- mosquitto_passwd now supports -b (batch mode) to allow the password to be
  provided at the command line.
- Removed $SYS/broker/changeset. This was intended for use with debugging, but
  in practice is of no use.
- Add support for use_username_as_clientid which can be used with
  authentication to restrict ownership of client ids and hence prevent one
  client disconnecting another by using the same client id.
- When "require_certificate" was false, the broker was incorrectly asking for
  a certificate (but not checking it). This caused problems with some clients
  and has been fixed so the broker no longer asks.
- When using syslog logging on non-Windows OSs, it is now possible to specify
  the logging facility to one of local0-7 instead of the default "daemon".
- The bridge_attempt_unsubscribe option has been added, to allow the sending
  of UNSUBSCRIBE requests to be disabled for topics with "out" direction.
  Closes bug #456899.
- Wildcard TLS certificates are now supported for bridges.
- Support for "hour" client expiration lengths for the
  persistent_client_expiration option. Closes bug #425835.
- Bridge support for MQTT v3.1.1.
- Root privileges are now dropped after starting listeners and loading
  certificates/private keys, to allow private keys to have their permissions
  restricted to the root user only. Closes bug #452914.
- Usernames and topics given in ACL files can now include a space. Closes bug
  #431780.
- Fix hang if pattern acl contains a %u but an anonymous client connect.
  Closes bug #455402.
- Fix man page installation with cmake. Closes bug #458843.
- When using "log_dest file" the output file is now flushed periodically.

# Clients
- Both clients can now load default configuration options from a file.
- Add -C option to mosquitto_sub to allow the client to quit after receiving a
  certain count of messages. Closes bug #453850.
- Add --proxy SOCKS5 support for both clients.
- Pub client supports setting its keepalive. Closes bug #454852.
- Add support for config files with default options.
- Add support for MQTT v3.1.1.

# Client library
- Add experimental SOCKS5 support.
- mosquitto_loop_forever now quits after a fatal error, rather than blindly
  retrying.
- SRV support is now not compiled in by default.
- Wildcard TLS certificates are now supported.
- mosquittopp now has a virtual destructor. Closes bug #452915.
- Add support for MQTT v3.1.1.
- Don't quit mosquitto_loop_forever() if broker not available on first
  connect. Closes bug #453293, but requires more work.
- Don't reset queued messages state on CONNACK. Fixes bug with duplicate
  messages on connection.


1.3.5 - 20141008
================

# Broker
- Fix possible memory leak when using a topic that has a leading slash. Fixes
  bug #1360985.
- Fix saving persistent database on Windows.
- Temporarily disable ACL checks on subscriptions when using MQTT v3.1.1. This
  is due to the complexity of checking wildcard ACLs against wildcard
  subscriptions. This does not have a negative impact on security because
  checks are still made before a message is sent to a client.
  Fixes bug #1374291.
- When using -v and the broker receives a SIGHUP, verbose logging was being
  disabled. This has been fixed.

# Client library
- Fix mutex being incorrectly passed by value. Fixes bug #1373785.


1.3.4 - 20140806
================

# Broker
- Don't ask client for certificate when require_certificate is false.
- Backout incomplete functionality that was incorrectly included in 1.3.2.


1.3.3 - 20140801
================

# Broker
- Fix incorrect handling of anonymous bridges on the local broker.


1.3.2 - 20140713
================

# Broker
- Don't allow access to clients when authenticating if a security plugin
  returns an application error. Fixes bug #1340782.
- Ensure that bridges verify certificates by default when using TLS.
- Fix possible crash when using pattern ACLs that do not include a %u and
  clients that connect without a username.
- Fix subscriptions being deleted when clients subscribed to a topic beginning
  with a $ but that is not $SYS.
- When a durable client reconnects, its queued messages are now checked
  against ACLs in case of a change in username/ACL state since it last
  connected.
- Fix bug #1324411, which could have had unexpected consequences for delayed
  messages in rare circumstances.
- Anonymous clients are no longer accidently disconnected from the broker
  after a SIGHUP.

# Client library
- Fix topic matching edge case.
- Fix callback deadlocks after calling mosquitto_disconnect(), when using the
  threaded interfaces. Closes bug #1313725.
- Fix SRV support when building with CMake.
- Remove strict protocol #ifdefs.

# General
- Use $(STRIP) for stripping binaries when installing, to allow easier cross
  compilation.


1.3.1 - 20140324
================

# Broker
- Prevent possible crash on client reconnect. Closes bug #1294108.
- Don't accept zero length unsubscription strings (MQTT v3.1.1 fix)
- Don't accept QoS 3 (MQTT v3.1.1 fix)
- Don't disconnect clients immediately on HUP to give chance for all data to
  be read.
- Reject invalid un/subscriptions e.g. foo/+bar #/bar.
- Take more care not to disconnect clients that are sending large messages.

# Client library
- Fix socketpair code on the Mac.
- Fix compilation for WITH_THREADING=no.
- Break out of select() when calling mosquitto_loop_stop().
- Reject invalid un/subscriptions e.g. foo/+bar #/bar.
- Add mosquitto_threaded_set().

# Clients
- Fix keepalive value on mosquitto_pub.
- Fix possibility of mosquitto_pub not exiting after sending messages when
  using -l.


1.3 - 20140316
==============

# Broker
- The broker no longer ignores the auth_plugin_init() return value.
- Accept SSLv2/SSLv3 HELLOs when using TLSv1, whilst keeping SSLv2 and SSLv3
  disabled. This increases client compatibility without sacrificing security.
- The $SYS tree can now be disabled at runtime as well as at compile time.
- When remapping bridged topics, only check for matches when the message
  direction is correct. This allows two identical topics to be remapped
  differently for both in and out.
- Change "$SYS/broker/heap/current size" to "$SYS/broker/heap/current" for
  easier parsing.
- Change "$SYS/broker/heap/maximum size" to "$SYS/broker/heap/maximum" for
  easier parsing.
- Topics are no longer normalised from e.g a///topic to a/topic. This matches
  the behaviour as clarified by the Oasis MQTT spec. This will lead to
  unexpected behaviour if you were using topics of this form.
- Log when outgoing messages for a client begin to drop off the end of the
  queue.
- Bridge clients are recognised as bridges even after reloading from
  persistence.
- Basic support for MQTT v3.1.1. This does not include being able to bridge to
  an MQTT v3.1.1 broker.
- Username is displayed in log if present when a client connects.
- Support for 0 length client ids (v3.1.1 only) that result in automatically
  generated client ids on the broker (see option allow_zero_length_clientid).
- Ability to set the prefix of automatically generated client ids (see option
  auto_id_prefix).
- Add support for TLS session resumption.
- When using TLS, the server now chooses the cipher to use when negotiating
  with the client.
- Weak TLS ciphers are now disabled by default.

# Client library
- Fix support for Python 2.6, 3.0, 3.1.
- Add support for un/subscribing to multiple topics at once in un/subscribe().
- Clients now close their socket after sending DISCONNECT.
- Python client now contains its version number.
- C library mosquitto_want_write() now supports TLS clients.
- Fix possible memory leak in C/C++ library when communicating with
  a broker that doesn't follow the spec.
- Return strerror() through mosquitto_strerror() to make error printing
  easier.
- Topics are no longer normalised from e.g a///topic to a/topic. This matches
  the behaviour as clarified by the Oasis MQTT spec. This will lead to
  unexpected behaviour if you were using topics of this form.
- Add support for SRV lookups.
- Break out of select() on publish(), subscribe() etc. when using the threaded
  interface. Fixes bug #1270062.
- Handle incoming and outgoing messages separately. Fixes bug #1263172.
- Don't terminate threads on mosquitto_destroy() when a client is not using
  the threaded interface but does use their own thread. Fixes bug #1291473.

# Clients
- Add --ciphers to allow specifying which TLS ciphers to support.
- Add support for SRV lookups.
- Add -N to sub client to suppress printing of EOL after the payload.
- Add -T to sub client to suppress printing of a topic hierarchy.


1.2.3 - 20131202
================

# Broker
- Don't always attempt to call read() for SSL clients, irrespective of whether
  they were ready to read or not. Reduces syscalls significantly.
- Possible memory leak fixes.
- Further fix for bug #1226040: multiple retained messages being delivered for
  subscriptions ending in #.
- Fix bridge reconnections when using multiple bridge addresses.

# Client library
- Fix possible memory leak in C/C++ library when communicating with
  a broker that doesn't follow the spec.
- Block in Python loop_stop() until all messages are sent, as the
  documentation states should happen.
- Fix for asynchronous connections on Windows. Closes bug #1249202.
- Module version is now available in mosquitto.py.

# Clients
- mosquitto_sub now uses fwrite() instead of printf() to output messages, so
  messages with NULL characters aren't truncated.


1.2.2 - 20131021
================

# Broker
- Fix compliance with max_inflight_messages when a non-clean session client
  reconnects. Closes one of the issues on bug #1237389.

# Client library
- Fix incorrect inflight message accounting, which caused messages to go
  unsent. Partial fix for bug #1237351.
- Fix potential memory corruption when sending QoS>0 messages at a high rate
  using the threaded interface. Further fix for #1237351.
- Fix incorrect delay scaling when exponential_backoff=true in
  mosquitto_reconnect_delay_set().
- Some pep8 fixes for Python.


1.2.1 - 20130918
================

# Broker
- The broker no longer ignores the auth_plugin_init() return value. Closes
  bug #1215084.
- Use RTLD_GLOBAL when opening authentication plugins on posix systems. Fixes
  resolving of symbols in libraries used by authentication plugins.
- Add/fix some config documentation.
- Fix ACLs for topics with $SYS.
- Clients loaded from the persistence file on startup were not being added to
  the client hash, causing subtle problems when the client reconnected,
  including ACLs failing. This has been fixed.
- Add note to mosquitto-tls man page stating that certificates need to be
  unique. Closes bug #1221285.
- Fix incorrect retained message delivery when using wildcard subs in some
  circumstances. Fixes bug #1226040.

# Client library
- Fix support for Python 2.6, 3.0, 3.1.
- Fix TLS subjectAltName verification and segfaults.
- Handle EAGAIN in Python on Windows. Closes bug #1220004.
- Fix compilation when using WITH_TLS=no.
- Don't fail reconnecting in Python when broker is temporarily unavailable.


1.2 - 20130708
==============

# Broker
- Replace O(n) username lookup on CONNECT with a roughly O(1) hashtable version.
- It is now possible to disable $SYS at compile time.
- Add dropped publish messages to load tree in $SYS. Closes bug #1183318.
- Add support for logging SUBSCRIBE/UNSUBSCRIBE events.
- Add "log_dest file" logging support.
- Auth plugin ACL check function now passes the client id as well as username
  and password.
- The queue_qos0_messages option wasn't working correctly, this has now been
  fixed. Closes bug #1125200.
- Don't drop all messages for disconnected durable clients when
  max_queued_messages=0.
- Add support for "log_type all".
- Add support for "-v" option on the command line to provide the equivalent of
  "log_type all" without needing a config file.
- Add the "upgrade_outgoing_qos" option, a non-standard feature.
- Persistence data is now written to a temporary file which is atomically
  renamed on completion, so a crash during writing will not produce a corrupt
  file.
- mosquitto.conf is now installed as mosquitto.conf.example
- Configuration file errors are now reported with filename and line number.
- The broker now uses a monotonic clock if available, to avoid changes in time
  causing client disconnections or message retries.
- Clean session and keepalive status are now display the log when a client
  connects.
- Add support for TLSv1.2 and TLSv1.1.
- Clients that connect with zero length will topics are now rejected.
- Add the ability to set a maximum allowed PUBLISH payload size.
- Fix an ACL with topic "#" incorrectly granting access to $SYS.
- Fix retained messages incorrectly being set on wildcard topics, leading to
  duplicate retained messages being sent on subscription. Closes bug #1116233.
- Don't discard listener values when no "port" option given. Closes bug
  #1131406.
- Client password check was always failing when security was being reapplied
  after a config reload. This meant that all clients were being disconnected.
  This has been fixed.
- Fix build when WITH_TLS=no. Closes bug #1174971.
- Fix single outgoing packets not being sent in a timely fashion if they were
  not sent in one call to write(). Closes bug #1176796.
- Fix remapping of messages for clients connected to a listener with
  mount_point set. Closes bug #1180765.
- Fix duplicate retained messages being sent for some wildcard patterns.
- If a client connects with a will topic to which they do not have write
  access, they are now disconnected with CONNACK "not authorised".
- Fix retained messages on topic foo being incorrectly delivered to
  subscriptions of /#
- Fix handling of SSL errors on SSL_accept().
- Fix handling of QoS 2 messages on client reconnect.
- Drop privileges now sets supplementary groups correctly.
- Fix load reporting interval (is now 60s).
- Be strict with malformed PUBLISH packets - clients are now disconnected
  rather than the packet discarded. This goes inline with future OASIS spec
  changes and makes other changes more straightforward.
- Process incoming messages denied by ACL properly so that clients don't keep
  resending them.

- Add support for round_robin bridge option.
- Add bridge support for verifying remote server certificate subject against
  the remote hostname.
- Fix problem with out of order calls to free() when restarting a lazy bridge.
- The broker now attempts to resolve bind_address and bridge addresses
  immediately when parsing the config file in order to detect invalid hosts.
- Bridges now set their notification state before attempting to connect, so if
  they fail to connect the state can still be seen.
- Fix bridge notification payload length - no need to send a null byte.

- mosquitto_passwd utility now reports errors more clearly.
- Fix "mosquitto_passwd -U".

# Client library
- Add support for TLSv1.2 and TLSv1.1, except for on the Python module.
- Add support for verifying remote server certificate subject against the
  remote hostname.
- Add mosquitto_reconnect_async() support and make asynchronous connections
  truly asynchronous rather than simply deferred. DNS lookups are still
  blocking, so asynchronous connections require an IP address instead of
  hostname.
- Allow control of reconnection timeouts in mosquitto_loop_forever() and after
  mosquitto_loop_start() by using mosquitto_reconnect_delay_set().
- Fix building on Android NDK.
- Re-raise unhandled errors in Python so as not to provide confusing error
  messages later on.
- Python module supports IPv6 connections.
- mosquitto_sub_topic_tokenise() was behaving incorrectly if the last topic
  hierarchy had only a single character. This has been fixed. Closes bug
  #1163348.
- Fix possible crash after disconnects when using the threaded interface with
  TLS.
- Allow build/install without Python. Closes bug #1174972.
- Add support for binding connection to a local interface.
- Implement maximum inflight messages handling.
- Fix Python client not handling will_payload==None.
- Fix potential memory leak when setting username/password.
- Fix handling of QoS 2 messages on reconnect.
- Improve handling of mosquitto_disconnect() with threaded mode.


# Clients
- Add support for TLSv1.2 and TLSv1.1.
- Sub client can now suppress printing of messages with the retain bit set.
- Add support for binding connection to a local interface.
- Implement maximum inflight messages handling for the pub client.


1.1.3 - 20130211
================

# Broker
- mosquitto_passwd utility now uses tmpfile() to generate its temporary data
  storage file. It also creates a backup file that can be used to recover data
  if an errors occur.

# Other
- Build script fixes to help packaging on Debian.


1.1.2 - 20130130
================

# Client library
- Fix tls_cert_reqs not being set to SSL_VERIFY_PEER by default. This meant
  that clients were not verifying the server certificate when connecting over
  TLS. This affects the C, C++ and Python libraries.


1.1.1 - 20130116
================

# Broker
- Fix crash on reload if using acl patterns.

# Client library
- Fix static C++ functions not being exported on Windows. Fixes bug #1098256.


1.1 - 20121219
==============

# Broker
- Add $SYS/broker/messages/dropped
- Add $SYS/broker/clients/expired
- Replace $SYS/broker/+/per second/+ with moving average versions published at
  $SYS/broker/load/#
- Add $SYS/broker/load/sockets/+ and $SYS/broker/load/connections/+
- Documentation on password file format has been fixed.
- Disable SSL compression. This reduces memory usage significantly and removes
  the possibility of CRIME type attacks.
- Enable SSL_MODE_RELEASE_BUFFERS mode to reduce SSL memory usage further.
- Add allow_duplicate_messages option.
- ACL files can now have comment lines with # as the first character.
- Display message on startup about which config is being loaded.
- Fix max_inflight_messages and max_queued_messages not being applied.
- Fix documentation error in mosquitto.conf.
- Ensure that QoS 2 queued messages are sent out in a timely manner.
- Local bridges now act on clean_session correctly.
- Local bridges with clean_session==false now remove unused subscriptions on
  broker restart.
- The $SYS/broker/heap/# messages now no longer include "bytes" as part of the
  string for ease of use.

# Client library
- Free memory used by OpenSSL in mosquitto_lib_cleanup() where possible.
- Change WebSocket subprotocol name to mqttv3.1 to make future changes easier
  and for compatibility with other implementations.
- mosquitto_loop_read() and mosquitto_loop_write() now handle errors
  themselves rather than having mosquitto_loop() handle their errors. This
  makes using them in a separate event loop more straightforward.
- Add mosquitto_loop_forever() / loop_forever() function call to make simple
  clients easier.
- Disable SSL compression. This reduces memory usage significantly and removes
  the possibility of CRIME type attacks.
- Enable SSL_MODE_RELEASE_BUFFERS mode to reduce SSL memory usage further.
- mosquitto_tls_set() will now return an error or raise an exception
  immediately if the CA certificate or client certificate/key cannot be
  accessed.
- Fix potential memory leaks on connection failures.
- Don't produce return error from mosquitto_loop() if a system call is
  interrupted. This prevents disconnects/reconnects in threaded mode and
  simplifies non-threaded client handling.
- Ignore SIGPIPE to prevent unnecessary client quits in threaded mode.
- Fix document error for mosquitto_message_retry_set().
- Fix mosquitto_topic_matches_sub() for subscriptions with + as the final
  character. Fixes bug #1085797.
- Rename all "obj" parameters to "userdata" for consistency with other
  libraries.
- Reset errno before network read/write to ensure EAGAIN isn't mistakenly
  returned.
- The message queue length is now tracked and used to determine the maximum
  number of packets to process at once. This removes the need for the
  max_packets parameter which is now unused.
- Fix incorrect error value in Python error_string() function. Fixes bug
  #1086777.
- Reset last message in/out timer in Python module when we send a PINGREQ.
  Fixes too-early disconnects.

# Clients
- Clients now display their own version number and library version number in
  their help messages.
- Fix "mosquitto_pub -l -q 2" disconnecting before all messages were
  transmitted.
- Fix potential out-of-bounds array access with client ids. Fixes bug
  #1083182.

# Other
- mosquitto_passwd can now convert password files with plain text files to
  hashed versions.


1.0.5 - 20121103
================

# Broker
- Fix crash when the broker has use_identity_as_username set to true but a
  client connects without a certificate.
- mosquitto_passwd should only be installed if WITH_TLS=yes.

# Library
- Use symbolic errno values rather than numbers in Python module to avoid
  cross platform issues (incorrect errno on Mac OS).

# Other
- Build script fixes for FreeBSD.


1.0.4 - 20121017
================

# Broker
- Deal with poll() POLLIN/POLLOUT before POLL[RD]HUP to correctly handle the
  case where a client sends data and immediately closes its socket.

# Library
- Fix memory leak with messages of QoS=2. Fixes bug #1064981.
- Fix potential thread synchronisation problem with outgoing packets in the
  Python module. Fixes bug #1064977.

# Clients
- Fix "mosquitto_sub -l" incorrectly only sending one message per second.


1.0.3 - 20120927
================

# Broker
- Fix loading of psk files.
- Don't return an error when reloading config if an ACL file isn't defined.
  This was preventing psk files being reloaded.
- Clarify meaning of $SYS/broker/clients/total in mosquitto(8) man page.
- Clarify meaning of $SYS/broker/messages/stored in mosquitto(8) man page.
- Fix non-retained message delivery when subscribing to #.
- Fix retained message delivery for subs to foo/# with retained messages at
  foo.
- Include the filename in password/acl file loading errors.

# Library
- Fix possible AttributeError when self._sock == None in Python module.
- Fix reconnecting after a timeout in Python module.
- Fix reconnecting when there were outgoing packets in the queue in the Python
  module.
- Fix problem with mutex initialisation causing crashes on some Windows
  installations.


1.0.2 - 20120919
================

# Broker
- If the broker was configured for persistence, a durable client had a
  subscription to topics in $SYS/# and had messages in its queue when the
  broker restarted, then the persistent database would have messages missing
  and so the broker would not restart properly. This has been fixed.

# Library
- Fix threading problem on some systems.

# Tests
- Close socket after 08-ssl-connect-no-auth-wrong-ca.py test to prevent
  subsequent tests having problems.

# Build scripts
- Install pskfile.example in CMake. Fixes bug #1037504.

# Other
- Fix db_dump parameter printing message store and sub chunks.


1.0.1 - 20120815
================

# Broker
- Fix default log_dest when running as a Windows service.

# Client library
- Fix incorrect parameters in Python on_log() callback call. Fixes bug
  #1036818.

# Clients
- Clients now don't display TLS/TLS-PSK usage help if they don't support it.

# Build scripts
- Fix TLS-PSK support in the CMake build files.
- Fix man page installation in the CMake build files.
- Fix SYSCONFDIR in cmake on *nix when installing to /usr. Fixes bug #1036908.

# Documentation
- Fix mqtt/MQTT capitalisation in man pages.
- Update compiling.txt.
- Fix incorrect callback docs in mosquitto.py. Fixes bug #1036607.
- Fix various doc typos and remove obsolete script. Fixes bug #1037088.


1.0 - 20120814
==============

# Broker

- Add SSL/TLS support.
- Add TLS-PSK support, providing a simpler encryption method for constrained
  devices.
- Passwords are now salted+hashed if compiled with WITH_TLS (recommended).
- Add mosquitto_passwd for handling password files.
- Add $SYS/broker/publish/messages/{sent|received} to show the number of
  PUBLISH messages sent/received.
- Add $SYS/broker/publish/bytes/{sent|received} to show the number of
  PUBLISH bytes sent/received.
- Add reload parameter for security init/cleanup functions.
- Add option for expiring disconnected persistent clients.
- Add option for queueing of QoS 0 messages when persistent clients are
  disconnected.
- Enforce client id limits in the broker (only when WITH_STRICT_PROTOCOL is
  defined).
- Fix reloading of log configuration.
- Add support for try_private config option for bridge connections.
- Add support for autosave_on_changes config option.
- Add support for include_dir config option.
- Add support for topic remapping.
- Usernames were being lost when a non clean-session client reconnected,
  potentially causing problems with ACLs. This has been fixed.
- Significant improvement to memory handling on Windows.
- Bridges with outgoing topics will now set the retain flag correctly so that
  messages will be retained on the remote broker.
- Incoming bridge connections are now detected by checking if bit 8 of the
  protocol version number is set. This requires support from the remote broker.
- Add support for notification_topic option.
- Add $SYS/broker/subscriptions/count and $SYS/broker/retained messages/count.
- Add restart_timeout to control the amount of time an automatic bridge will
  wait before reconnecting.
- Overlapping subscriptions are now handled properly. Fixes bug #928538.
- Fix reloading of persistence_file and persistence_location.
- Fix broker crash on incorrect protocol number.
- Fix missing COMPAT_ECONNRESET define on Windows.
- Clients that had disconnected were not always being detected immediately on
  Linux. This has been fixed.
- Don't save $SYS messages to the on-disk persistent db. All $SYS messages
  should be reconstructed on a restart. This means bridge connection
  notifications will now be correct on a restart.
- Fix reloading of bridge clients from the persistent db. This means that
  outgoing bridged topics should always work.
- Local bridges are now no longer restricted by local ACLs.
- Discard publish messages with zero length topics.
- Drop to "mosquitto" user even if no config file specified.
- Don't incorrectly allow topic access if ACL patterns but no normal ACL rules
  are defined.

# Client library

- Add SSL/TLS support.
- Add TLS-PSK support, providing a simpler encryption method for constrained
  devices.
- Add javascript/websockets client library.
- Add "struct mosquitto *mosq" parameter for all callbacks in the client
  library. This is a binary incompatible change so the soversion of the
  libraries has been incremented. The new parameter should make it easier to
  use callbacks in practice.
- Add mosquitto_want_write() for use when using own select() loop with
  mosquitto_socket().
- Add mosquitto_connect_async() to provide a non-blocking connect client call.
- Add mosquitto_user_data_set() to allow user data pointer to be updated.
- Add "int rc" parameter to disconnect callback to indicate whether disconnect
  was unexpected or the result of calling mosquitto_disconnect().
- Add mosquitto_strerror() for obtaining a string description of error numbers.
- Add mosquitto_connack_string() for obtaining a string description of MQTT
  connection results.
- Add mosquitto_will_clear() and change mosquitto_will_set() to only set the
  will.
- Add mosquitto_sub_topic_tokenise() and mosquitto_sub_topic_tokens_free()
  utility functions to tokenise a subscription/topic string into a string
  array.
- Add mosquitto_topic_matches_sub() to check whether a topic matches a
  subscription.
- Replaced mosquitto_log_init() with mosquitto_log_callback_set() to allow
  clients to decide what to do with log messages.
- Client will now disconnect itself from the broker if it doesn't receive a
  PINGRESP in the keepalive period after sending a PINGREQ.
- Client will now send a PINGREQ if it has not received a message from the
  broker in keepalive seconds.
- mosquitto_new() will now generate a random client id if the id parameter is
  NULL.
- Added max_packets to mosquitto_loop(), mosquitto_loop_read() and
  mosquitto_loop_write() to control the maximum number of packets that are
  handled per call.
- Payload parameters are now void * instead of uint8_t *.
- The clean_session parameter has been moved from mosquitto_connect() to
  mosquitto_new() because it is a client parameter rather than a connection
  parameter.
- Functions now use int instead of uint*_t where possible.
- mosquitto_new() now sets errno to indicate failure type.
- Return MOSQ_ERR_INVAL on zero length topic.
- Fix automatic client id generation on Windows.
- mosquitto_loop_misq() can now return MOSQ_ERR_NO_CONN.
- Compile static library as well as dynamic library with default makefiles.
- Rename C++ namespace from mosquittopp to mosqpp to remove ambiguity.
- C++ lib_init(), lib_version() and lib_cleanup() are now in the mosqpp
  namespace directly, not mosquittopp class members.
- The Python library is now written in pure Python and so no longer depends on
  libmosquitto.
- The Python library includes SSL/TLS support.
- The Python library should now be compatible with Python 3.

# Other

- Fix db_dump reading of retained messages.
- Add example of logging all messages to mysql.
- Add C++ client example.
- Fix potential buffer overflow in pub/sub clients.
- Add "make binary" target that doesn't make documents.
- Add "--help" arguments to pub/sub clients.
- Fix building on Solaris.


0.15 - 20120205
===============

- Add support for $SYS/broker/clients/maximum and $SYS/broker/clients/active
  topics.
- Add support for $SYS messages/byte per second received/sent topics.
- Updated mosquitto man page - $SYS hierarchy and signal support were out of
  date.
- Auto generated pub/sub client ids now include the hostname.
- Tool for dumping persistent DB contents is available in src/db_dump. It isn't
  installed by default.
- Enforce topic length checks in client library.
- Implement "once" and "lazy" bridge start types.
- Add new return type MOSQ_ERR_ERRNO to indicate that the errno variable should
  be checked for the real error code.
- Add support for connection_messages config option.
- mosquitto_sub will now refuse to run if the -c option (disable clean session)
  is given and no client id is provided.
- mosquitto_pub now gives more useful error messages on invalid input or other
  error conditions.
- Fix Python will_set() true/True typo.
- Fix messages to topic "a/b" incorrectly matching on a subscription "a" if
  another subscription "a/#" exists.


0.14.4 - 20120106
=================

- Fix local bridge notification messages.
- Fix return values for more internal library calls.
- Fix incorrect out of memory checks in library and broker.
- Never time out local bridge connections.


0.14.3 - 20111210
=================

- Fix potential crash when client connects with an invalid CONNECT packet.
- Fix incorrect invalid socket comparison on Windows.
- Server shouldn't crash when a message is published to foo/ when a
  subscription to foo/# exists (bug #901697).
- SO_REUSEADDR doesn't work the same on Windows, so don't use it.
- Cygwin builds now support Windows service features.
- Fix $SYS/broker/bytes/sent reporting.


0.14.2 - 20111123
=================

- Add uninstall target for libs.
- Don't try to write packet whilst in a callback.


0.14.1 - 20111117
=================

- Fix Python syntax errors (bug #891673).


0.14 - 20111116
===============

- Add support for matching ACLs based on client id and username.
- Add a Windows installer file (NSIS based).
- Add native support for running the broker as a Windows service. This is the
  default when installed using the new installer.
- Fix client count for listeners. When clients disconnect, decrement the
  count. Allow max_connections to work again.
- Attempt to send all packets immediately upon being queued. This will result
  in more immediate network communication in many cases.
- Log IP address when reporting CONNACK packets if the client id isn't yet
  known.
- Fix payload length calculation in python will_set function.
- Fix Python publish and will_set functions for payload=None.
- Fix keepalive value being lost when reconnecting a client (bug #880863).
- Persistence file writing now uses portable file functions, so the Cygwin
  broker build should no longer be necessary.
- Duplicate code between the client and broker side has been reduced.
- Queued messages for clients reconnecting with clean_session=false set were
  not being sent until the next message for that client was received. This has
  been fixed (bug #890724).
- Fix subscriptions to # incorrectly matching against topics beginning with /


0.13 - 20110920
===============

- Implement bridge state notification messages.
- Save client last used mid in persistent database (DB version number bumped).
- Expose message id in Python MosquittoMessage.
- It is now possible to set the topic QoS level for bridges.
- Python MosquittoMessage payload parameter is now a Python string, not a
  ctypes object which makes it much easier to use.
- Fix queueing of messages for disconnected clients. The max_queued_messages
  option is now obeyed.
- C++ library is now in its own namespace, mosquittopp.
- Add support for adding log message timestamps in the broker.
- Fix missing mosquitto_username_pw_set() python binding.
- Fix keepalive timeout for reconnecting non clean-session clients. Prevents
  immediate disconnection on reconnection.
- Fix subscription wildcard matching - a subscription of +/+ will now match
  against /foo
- Fix subscription wildcard matching - a subscription of foo/# will now match
  against foo
- When restoring persistent database, clients should be set to non
  clean-session or their subscriptions will be immediately removed.
- Fix SUBACK payload for multiple topic subscriptions.
- Don't send retained messages when a client subscribes to a topic it is
  already subscribed to.


0.12 - 20110725
===============

- Reload (most) configuration on SIGHUP.
- Memory tracking is no longer compiled in the client library.
- Add --help option to mosquitto to display usage.
- Add --id-prefix option to clients to allow easier use with brokers that are
  using the clientid_prefix option.
- Fix compilation on QNX.
- Add -P as a synonym argument for --pw in the clients.
- Fix python MosquittoMessage payload parameter. This is now returned as a
  pointer to an array of c_uint8 values so binary data is handled correctly.
  If a string is needed, use msg.payload_str
- Fix memory leaks on client authentication.
- If password_file is not defined then clients can now connect even if they
  use a username/password.
- Add mosquitto_reconnect() to the client library.
- Add option for compiling with liberal protocol compliance support (enabled
  by default).
- Fix problems with clients reconnecting and old messages remaining in the
  message store.
- Display both ip and client id in the log message when a client connects.
  Change the socket connection message to make it more obvious that it is just
  a socket connection being made (bug #801135).
- Fix retained message delivery where a subscription contains a +.
- Be more lenient when reloading persistent database to reduce errors with
  empty retained messages.


0.11.3 - 20110707
=================

- Don't complain and quit if persistence_file option is given (bug #802423).
- Initialise listeners correctly when clients with duplicate client ids
  connect. Bug #801678.
- Memory tracking is now disabled for Symbian builds due to lack of malloc.h.
- Fix memory tracking compilation for kFreeBSD.
- Python callbacks can now be used with class member functions.
- Fix persistent database writing of client message chunks which caused
  errors when restoring (bug #798164).


0.11.2 - 20110626
=================

- Don't free contexts in mqtt3_context_disconnect() (bug #799688 / #801678).
- Only free will if present when freeing a client context.


0.11.1 - 20110620
=================

- Fix buffer overrun when checking for + and # in topics (bug #799688).
- Pub client now quits if publish fails.


0.11 - 20110619
===============

- Removed all old sqlite code.
- Remove client id limit in clients.
- Implemented $SYS/broker/heap/maximum size
- Implemented $SYS/broker/clients/inactive to show the number of disconnected
  non-clean session clients.
- $SYS/broker/heap/current size and maximum size messages now include "bytes"
  to match rsmb message format.
- Implemented the retained_persistence config file option - a synonym of the
  "persistence" option.
- Added security_external.c to broker source to make it easier for third
  parties to add support for their existing username/password and ACL database
  for security checks. See external_security_checks.txt.
- $SYS messages are now only republished when their value changes.
- Windows native broker now responds to command line arguments.
- Simplify client disconnecting so wills gets sent in all cases (bug #792468).
- Clients now have a --quiet option.
- The on_disconnect() callback will always be called now, even if the client
  has disconnected unexpectedly.
- Always close persistent DB file after restoring.
- Return error code when exiting the clients.
- mosquitto_publish() now returns MOSQ_ERR_INVAL if the topic contains + or #
- mosquitto now silently rejects published messages with + or # in the topic.
- max_connections is now a per-listener setting instead of global.
- Connection count is now reduced when clients disconnect (bug #797983).


0.10.2 - 20110106
=================

- Don't abort when connecting if the first connection fails. This is important
  on e.g. Windows 7, where IPV6 is offered as the first choice but may not be
  available.
- Deal with long logging messages properly (bug #785882).
- Fix library compilation on Symbian - no pselect() available.
- Don't stop processing subscriptions on received messages after a
  subscription with # matches. (bug #791206).


0.10.1 - 20110512
=================

- Fix Windows compilation.
- Fix mosquitto.py on Windows - call lib init/cleanup.
- Don't abort when connecting if given an unknown address type (assuming an
  IPv4 or IPv6 address is given).


0.10 - 20110429
===============

- Implement support for the password_file option and accompanying
  authentication requirements in the broker.
- Implement topic Access Control Lists.
- mosquitto_will_set() and mosquitto_publish() now return
  MOSQ_ERR_PAYLOAD_SIZE if the payload is too large (>268,435,455 bytes).
- Bridge support can now be disabled at compile time.
- Group together network writes for outgoing packets - don't send single byte
  writes!
- Add support for clientid_prefixes variable.
- Add support for the clientid config variable for controlling bridge client
  ids.
- Remove 32-bit database ID support because htobe64() no longer used.
- Multiple client subscriptions to the same topic result in only a single
  subscription. Bug #744077.


0.9.3 - 20110310
================

- Set retained message status for QoS 2 messages (bug #726535).
- Only abort with an error when opening listening sockets if no address family
  is available, rather than aborting when any address family is not available.
- Don't clean queued messages when a non clean session client reconnects.
- Make mosquitto.py compatible with Python <2.6.
- Fix mosquitto.h header includes for Windows.


0.9.2 - 20110208
================

- Only send a single DISCONNECT command when using -l in the pub client.
- Set QoS=1 on PUBREL commands to meet protocol spec.
- Don't leak sockets on connection failure in the library.
- Install man pages when building under cmake.
- Fix crash bug on malformed CONNECT message.
- Clients are now rejected if their socket peer name cannot be obtained on
  connection.
- Fix a number of potential problems caused when a client with a duplicate id
  connects.
- Install mosquitto.conf under cmake.


0.9.1 - 20101203
================

- Add missing code for parsing the "bind_address" configuration option.
- Fix missing include when compiling with tcp-wrappers support.
- Add linker version script for C library to control exported functions.


0.9 - 20101114
==============

- Client and message data is now stored in memory with custom routines rather
  than a sqlite database. This removes the dependencies on sqlite, pcre and
  sqlite3-pcre. It also means that the persistent database format has had to
  be reimplemented in a custom format. Optional support for importing old
  sqlite databases is provided.
- Added IPv6 support for mosquitto and the clients.
- Provide username and password support for the clients and client libraries.
  This is part of the new MQTT v3.1 spec.
- The broker supports the username and password connection flags, but will not
  do anything with the username and password.
- Python callback functions now optionally take an extra argument which will
  return the user object passed to the Mosquitto() constructor, or the calling
  python object itself if nothing was given to Mosquitto().
- Remove the mosquitto command line option "-i interface".
- Remove the mosquitto.conf "interface" variable.
- Add support for the listener config variable (replaces the interface
  variable)
- Add support for the bind_address config variable.
- Change the port config variable behaviour to match that of rsmb (applies to
  the default listener only, can be given just once).
- Fix QoS 2 protocol compliance - stop sending duplicate messages and handle
  timeouts correctly. Fixes bug #598290.
- Set retain flag correctly for outgoing messages. It should only be set for
  messages sent in response to a subscribe command (ie. stale data).
- Fix bug in returning correct CONNACK result to on_connect client callback.
- Don't send client will if it is disconnected for exceeding its keepalive
  timer.
- Fix client library unsubscribe function incorrectly sending a SUBSCRIBE
  command when it should be UNSUBSCRIBE.
- Fix max_inflight_messages and max_queued_messages operation. These
  parameters now apply only to QoS 1 and 2 messages and are used regardless of
  the client connection state.
- mosquitto.conf now installed to /etc/mosquitto/mosquitto.conf instead of
  /etc/mosquitto.conf. The /etc/mosquitto/ directory will be used for password
  and access control files in the future.
- Give the compile time option of using 32-bit integers for the database IDs
  instead of 64-bit integers. This is useful where htobe64()/be64toh() are not
  available or for embedded systems for example.
- The DUP bit is now set correctly when resending PUBREL messages.
- A port to Windows native has been partially completed. This currently drops a
  number of features, including the ability to change configuration parameters
  and persistent storage.


0.8.3 - 20101004
================

- Fix QoS 2 protocol compliance - stop sending duplicate messages and handle
  timeouts correctly. Fixes bug #598290. (backported from future 0.9 code)


0.8.2 - 20100815
================

- Fix default loop() timeout value in mosquitto.py. Previous value was 0,
  causing high cpu load.
- Fix message handling problem in client library when more than one message was
  in the client queue.
- Fix the logic used to determine whether a QoS>0 message needs to be retried.
- Fix the Python sub.py example so that it quits on error.


0.8.1 - 20100812
================

- Improve python interface
- Fix incorrect return value from message delete function
- Use logging function to print error messages in clients.
- Fix python installation script DESTDIR.
- Fix library destination path for 64-bit machines.


0.8 - 20100807
==============

- Topics starting with a / are treated as distinct to those not starting with
  a /. For example, /topic/path is different to topic/path. This matches the
  behaviour of rsmb.
- Correctly calculate the will QoS on a new client connection (bug #597451).
- Add "addresses" configuration file variable as an alias of "address", for
  better rsmb compatibility.
- Bridge clean_session setting is now false, to give more sensible behaviour
  and be more compatible with rsmb.
- Add cleansession variable for configuring bridges.
- Add keepalive_interval variable for bridges.
- Remove default topic subscription for mosquitto_sub because the old
  behaviour was too confusing.
- Added a C client library, which the pub and sub clients now use.
- Added a C++ client library (bound to the C library).
- Added a Python client library (bound to the C library).
- Added CMake build scripts to allow the library and clients (not the broker)
  to be compiled natively on Windows.


0.7 - 20100615
==============

- mosquitto_pub can now send null (zero length) messages.
- Don't store QoS=0 messages for disconnected clients with subscriptions of
  QoS>0.
- accept() all available sockets when new clients are connecting, rather than
  just one.
- Add option to print debug messages in pub and sub clients.
- hg revision is now exported via $SYS/broker/changeset
- Send Will when client exceeds keepalive timer and is disconnected.
- Check to see if a client has a will before sending it.
- Correctly deal with clients connecting with the same id multiple times.
- Add compile time option to disable heap memory tracking.
- Use poll() instead of select() to allow >1024 clients.
- Implement max_connections.
- Run VACUUM on in-memory database on receiving SIGUSR2.
- Fix bridge keepalive timeouts and reconnects.
- Don't attempt to drop root privileges when running on Windows as this isn't
  well supported (bug #586231).


0.6.1 - 20100506
================

- Fix DB auto upgrade for messages table.


0.6 - 20100505
==============

- Basic support for connecting multiple MQTT brokers together (bridging).
- mosquitto_sub can now subscribe to multiple topics (limited to a global QoS).
- mosquitto_pub can now send a file as a message.
- mosquitto_pub can now read all of stdin and send it as a message.
- mosquitto_pub can now read stdin and send each line as a message.
- mosquitto will now correctly run VACUUM on the persistent database on exit.
- Implement a more efficient database design, so that only one copy of each
  message is held in the database, rather than one per subscribed client.
- Add the store_cleanup_interval config option for dealing with the internal
  message store.
- Add support for disabling "clean session" for the sub client.
- Add support for automatic upgrading of the mosquitto DB from v1 to v2.
- Add persistence_file config option to allow changing the filename of the
  persistence database. This allows multiple mosquitto DBs to be stored in the
  same location whilst keeping persistence_location compatible with rsmb.
- Don't store QoS=0 messages for disconnected clients. Fixes bug #572608. This
  wasn't correctly fixed in version 0.5.
- Don't disconnect clients if they send a PUBLISH with zero length payload
  (bug #573610).
- If a retained message is received with a zero length payload, the retained
  message for that topic is deleted.
- Send through zero length messages.
- Produce a warning on unsupported rsmb options instead of quitting.
- Describe clean session flag in the mqtt man page.
- Implement the max_inflight_messages and max_queued_messages features in the
  broker.


0.5.4 - 20100311
================

- Fix memory allocation in mqtt3_fix_sub_topic() (bug #531861).
- Remove accidental limit of 100 client connections.
- Fix mosquitto_pub handling of messages with QoS>0 (bug #537061).


0.5.3 - 20100303
================

- Will messages are now only sent when a client disconnects unexpectedly.
- Fix all incoming topics/subscriptions that start with a / or contain
  multiple / in a row (//).
- Do actually disconnect client when it sends an empty subscription/topic string.
- Add missing $SYS/broker/clients/total to man page.


0.5.2 - 20100302
================

- Always update last backup time, so that the backup doesn't run every time
  through the main loop once autosave_interval has been reached.
- Report $SYS/broker/uptime in the same format as rsmb.
- Make mandatory options obvious in usage output and man page of mosquitto_pub.
  Fixes bug #529990.
- Treat subscriptions with a trailing slash correctly. This should fix bugs
  #530369 and #530099.


0.5.1 - 20100227
================

- Must daemonise before pid file is written.


0.5 - 20100227
==============

- No longer store QoS=0 messages for disconnected clients that do not have
  clean start set.
- Rename msg_timeout option to retry_interval for better rsmb compatibility.
- Change persistence behaviour. The database is now stored in memory even if
  persistence is enabled. It is written to disk when mosquitto exits and also at
  periodic intervals as defined by the new autosave_interval option.
- The writing of the persistence database may be forced by sending mosquitto
  the SIGUSR1 signal.
- Clients that do not send CONNECT as their first command are now
  disconnected.
- Boolean configuration values may now be specified with true/false as well as
  1/0.
- Log message on CONNECT with invalid protocol or protocol version.
- Default sqlite3-pcre path on Linux is now /usr/lib/sqlite3/pcre.so to match
  future sqlite3-pcre packages.
- Add mosquitto_sub and mosquitto_pub, simple clients for subscribe/publish.
- Add man pages for clients.
- Add general man page on mqtt.
- Root privileges are now dropped only after attempting to write a pid file
  (if configured). This means that the pid file can be written to /var/run/
  directly and should fix bug #523183.


0.4.2 - 20100203
================

- Fix segfault on client connect with invalid protocol name/version.


0.4.1 - 20100112
===============

- Fix regex used for finding retained messages to send on new subscription.


0.4 - 20100105
==============

- Added support for wildcard subscriptions using + and #.
- All network operations are now non-blocking and can cope with partial
  packets, meaning that networking should be a lot more reliable.
- Total messsages/bytes sent/received are now available in $SYS.
- Improved logging information - use client ip address and id instead of
  socket number.
- Broker build timestamp is available in $SYS.
- Keepalive==0 is now correctly treated as "never disconnect".
- Fixed manpage installation.
- Fixed incorrect $SYS hierarchy locations in documentation and code.
- Debug type log messages are no longer sent to "topics".
- Default logging destination no longer includes "topics" to prevent possible
  error logging to the db before it is initialised.
- Periodic $SYS messages can now be disabled.
- stdout and stderr are flushed when logging to them to give more timely
  updates.
- dup is now set correctly when resending messages.
- Database format bumped due to topic column naming fix.


0.3 - 20091217
==============

- The port option in the configuration file and --port command line argument
  may now be given any number of times to make mosquitto listen on multiple
  sockets.
- Add new config file and command line option "interface" to specify an
  interface to listen on, rather than all interfaces.
- Added host access control through tcp-wrappers support.
- Set SO_REUSEADDR on the listening socket so restart is much quicker.
- Added support for tracking current heap memory usage - this is published on
  the topic "$SYS/broker/heap/current size"
- Added code for logging to stderr, stdout, syslog and topics.
- Added logging to numerous places - still plenty of scope for more.


0.2 - 20091204
==============

- Replaced the command line option --foreground with --daemon, swapping the
  default behaviour.
- Added the command line option --config-file, to specify a config file to
  load.  If this is not given, no config file is load and the default options
  are used.
- Added the command line option --port for specifying the port to listen on.
  This overrides values in the config file.
- Don't use persistence by default.
- Default behaviour is now more sane when run by a normal user with no command
  line options (combination of above changes).
- Added option user to config file, defaulting to a value of mosquitto. If
  this value isn't blank and mosquitto is started by root, then it will drop
  privileges by changing to the user and its primary group. This replaces the
  current behaviour of refusing to start if run by root.
- Fix non-persistent mode, which would never work in the previous release.
- Added information on default values of msg_timeout and sys_interval to the
  mosquitto.conf man page. (closes bug #492045).
