> ## Content Index
> Fetch the complete content index at: https://www.process-one.net/llms.txt
> Use this file to discover other available public pages before exploring further.

# ejabberd 18.03
- URL: https://www.process-one.net/blog/ejabberd-18-03/
- Published: 2018-03-26T22:00:00.000Z
- Updated: 2024-09-17T14:48:59.000Z
- Description: After two months of active development, we’re happy to announce the release of ejabberd 18.03 which includes many improvements, new options, and bugfixes.
- Author: Jérôme Sautret

## New configuration options

### New ‘negotiation\_timeout’ option

The option can be used to specify a period (in seconds) for a stream negotiation to complete. If the timer fires, the stream is considered as failed and the underlying connection gets closed.

This is a global option (you cannot set it per domain) and the default is 30 seconds.

### New ‘validate\_stream’ option

If set to `true`, all incoming XML packets are fully validated against known schemas. If an error occurs, the packet will be bounced with the corresponding error reason. The option might be useful to protect client software from sophisticated bugs related to XML validation as well as for client developers who want to catch validation errors at an early stage of development.

The default value is `false`.

Note that the option might have a slight performance impact, so use it with care on loaded machines.

### New ‘global\_routes’ option for ejabberd\_service

The option emulates legacy behavior which registers all routes defined in `hosts` on a component connected. This behavior is considered harmful in the case when it’s desired to multiplex different components on the same port, so, to disable it, set `global_routes` to `false`.

The default value is `true`, e.g. legacy behavior is emulated: the only reason for this is to maintain backward compatibility with existing deployments.

### New ‘rate\_limit’ option for mod\_avatar

The option controls how many avatars a user can upload per minute. The option takes positive integer values. Note that the option only takes effect when an avatar is about to convert to a different format, i.e. it implies that `convert` option is configured.

The default is `10`.

### New ‘access’ option for mod\_block\_strangers

The option is supposed to be used when `allow_local_users` and `allow_transports` are not enough. It’s an ACL where `deny` means the message will be rejected (or a CAPTCHA would be generated for a presence), and `allow` means the sender is whitelisted and the stanza will pass through.

The default value is `none`, which means nothing is whitelisted.

### New ‘captcha’ option for mod\_block\_strangers

When the option is set to `true`, the module will generate CAPTCHA challenges for incoming subscription requests. The option also implies that option `drop` is set to `true`. Note that the module won’t generate CAPTCHA challenges for messages: they will still be rejected if `drop` is set to `true`.

### New force\_node\_config for mod\_pubsub

The option can be used to override configuration options of a particular PubSub node. Example:

```
    mod_pubsub:
      ...
      force_node_config:
        "eu.siacs.conversations.axolotl.*":
          access_model: whitelist
        "*":
          persist_items: true

```

### Remove ‘iqdisc’ option

Since we got rid of all bottleneck processes and we have a connection pool for every database, the option is no longer needed and in fact is detrimental: in practice, what you get is just a bunch of overloaded processes in the IQ handlers pool no matter how much you increase the `iqdisc` value.

Given that the option was not very well known and understood, it’s not simply deprecated but completely removed.

The commit also deprecates the following functions:  
– gen\_iq\_handler:add\_iq\_handler/6  
– gen\_iq\_handler:handle/5  
– gen\_iq\_handler:iqdisc/1

## New SQL schema

With the new database schema, all the tables that include the username, have also server\_host. This means you can set one single database to serve all the virtual hosts. This is not enabled by default and needs explicit configuration in ejabberd.yml file.

When creating a new database, use the new schema to create the tables:

```
    mysql -u ejabberd_test ejadb < sql/mysql.new.sql

```

Then, in the ejabberd configuration file, add this line:

```
    new_sql_schema: true

```

If you already have a PostgreSQL database with old schema and contents, you can upgrade it to the new schema. Right now, only PostgreSQL database can be updated.

For that, first enable this module and restart ejabberd:

```
    new_sql_schema: true
    modules:
      mod_admin_update_sql: {}

```

Then execute the command:

```
    ejabberdctl update_sql

```

## Changes

This is a brief list of most important improvements and fixes.

### Admin

- Avoid logging IP addresses in mod\_register when it's not desired
- Command 'reload-config' allows to reload certificates
- Get rid of 'fs' package dependency
- Improve log message when module startup has failed
- mod\_muc\_admin: New command get\_room\_affiliation
- prosody2ejabberd: Report meaningful error when `luerl` is not available

### Configure

- Accept atoms in `api_permission` command lists and commands with numbers in them
- Validate additional listen opts: `inet`, `inet6`, `backlog`
- Remove 'iqdisc' option
- New option –enable-group=xxx
- New option 'negotiation\_timeout'
- New option 'new\_sql\_schema'
- New option 'validate\_stream'
- ejabberd\_service: New option 'global\_routes' for
- mod\_avatar: New 'rate\_limit' option
- mod\_block\_strangers: New 'access' option
- mod\_block\_strangers: New 'captcha' option
- mod\_pubsub: New option ‘force\_node\_config’

### Miscelanea

- Simplify ejabberd\_sup code
- New gen\_mod mod\_options/1 callback to provide known options and defaults
- Replace ?MYLANG with connection's language wherever possible
- sql/\*: Add username to peer indexes
- cyrsasl: Simplify code for splitting auth string in cyrsasl
- ejabberd\_auth: Cache 'isuser' queries to external auth program
- ejabberd\_web\_admin: Hardcode required ACL rules
- mod\_admin\_extra: Command check\_password\_hash supports all hash methods
- mod\_admin\_extra: Fix srg\_get\_info command with @all@ and @online@
- mod\_avatar: Fulfill all requirements of XEP-0398 v0.2.0
- mod\_avatar: Improve validation of 'convert' option
- mod\_block\_strangers: Bounce groupchat to bare JID
- mod\_block\_strangers: Fix a typo in call to create\_captcha()
- mod\_caps: Only store CAPS if contact is subscribed
- mod\_carboncopy: Copy outgoing MUC PMs
- mod\_mam: Really run use\_cache/1 and cache\_nodes/1 callbacks
- mod\_pubsub: Remove items of unregistered user
- mod\_push\_keepalive: Preserve timeout on resumption
- mod\_shared\_roster: Try to fix ejabberd\_c2s:process\_info: got unexpected info
- mod\_shared\_roster\_ldap: Fix processing of ldap\_memberattr\_format\_re option
- mod\_stream\_mgmt: Abort connection on count error
- mod\_stream\_mgmt: Clean up on timed out resumption

## Feedback

As usual, the release is tagged in the Git source code repository on [Github](https://github.com/processone/ejabberd.git?ref=process-one.net).

The source package and binary installers are available at [ejabberd XMPP & MQTT server download page](https://www.process-one.net/en/ejabberd/downloads/).

If you suspect that you’ve found a bug, please search or fill a bug report on [Github](https://github.com/processone/ejabberd/issues?ref=process-one.net).