ejabberd 17.11 – Happy Birthday ejabberd !

Ejabberd has been the leading choice to serve reliable XMPP domains for 15 years, and we are happy to announce yet another great new version of your favorite server.

Jérôme Sautret
· 4 min read
Send by email

This version includes great new features from Google Summer of Code, many improvements and a lot of bug fixes. By the way, ejabberd is “Compliance Suite 2018” compatible now (see XEP-0387) !

New features

ACME Support

Google Summer of Code 2017 was a big success for ejabberd project. In this context, Konstantinos Kallas contributed support for the “Let’s Encrypt” ACME protocol, which is now part of ejabberd. The code was reviewed and improved by ejabberd team to ensure we meet the same standard of quality you are used to.

The objective of the ACME protocol is to make it possible to automatically obtain trusted certificates, without any human intervention. So, the main functionality of the implementation is acquiring and managing the aforementioned certificates.

All details are available on pull request #1959 on github.

Many thanks to Konstantinos Kallas for contributing this great feature ! Thanks to Evgeny Khramtsov for being the ProcessOne mentor.

Introduce ‘certfiles’ global option

The option is supposed to replace existing options ‘c2s_certfile’, ‘s2s_certfile’ and ‘domain_certfile’. The option accepts a list of file paths (optionally with wildcards “*”) containing either PEM certificates or PEM private keys. At startup, ejabberd sorts the certificates, finds matching private keys and rebuilds full certificates chains which can be used by fast_tls driver.

Example:

certfiles:
  - "/etc/letsencrypt/live/example.org/*.pem"
  - "/etc/letsencrypt/live/example.com/*.pem"

Allow writing custom modules in own path

In ejabberdctl.cfg, add this parameter to EJABBERD_OPTS

external_beams /path/to/ebin

Then, all beams /path/to/ebin/*.beam will be known by ejabberd_config at startup. This makes ejabberd able to load your own modules. So you can embed ejabberd as a dependency to your Elixir project, or manage your own backend modules, without messing with ejabberd installation.

Use new API for IQ routing

Functions ejabberd_local:route_iq/2,3 are now deprecated: ejabberd_router:route_iq/2,3,4 should be used instead.

Improvements

Build with host dependencies

Building ejabberd takes care of runtime dependencies, and some of them are even needed in order to build ejabberd. For several packaging systems, a package is not allowed to handles dependencies by itself. This makes ejabberd hard to package and maintain on these systems.

Configuring ejabberd with option ‘–enable-system-deps’ help to use hosts libraries to build ejabberd, and avoid ejabberd to handle dependencies by itself. This option has been improved to cover most needs and fix pending issues. Packagers should really have a look at this option to simplify packaging when needed.

PubSub

We are preparing work to improve the PEP implementation in ejabberd. In that regards we already fixed few glitches and improved XEP-0163 coverage.

We also added support of SQL export, to ease migration of your existing PubSub database from Mnesia to an SQL backend.

At last, we fixed the use of historical ‘hometree’ plugin, which now allows to propagate publications in the nodes tree to cover simple needs around nodes hierarchy.

Database

As an experimental feature, if you compile from sources with option ‘–enable-new-sql-schema’, an extra server_host columns will be used in your SQL tables. This feature allows to use the same database for all your vhosts. See ‘ejabberdctl update_sql’ command to update your sql schema in order to try this feature.

Upgrade

If you’re upgrading from a previous version, you must follow the instructions. More details in documentation, see upgrade notes.

Changes

Admin

  • Omit “ProtectSystem” option from systemd unit
  • Log warnings for c2s/s2s certfile option
  • Log a message when a user gets registered
  • ejabberdctl: Fix ‘read’ syntax for non-bash shells
  • Fix renew_certificates ejabberdctl command
  • Unregister commands when stopping node only if it’s last one
  • Halt ejabberd if the top supervisor fails to start

Build

  • Avoid badarg error when running get-deps before ./configure has created src/ejabberd.app
  • Fix sed invocation that was incompatible with FreeBSD’s sed
  • Makefile.in: Fix “make clean && make”
  • Improve –enable-system-deps
  • Install binaries with 755 permissions
  • Install eimp binary with +x attribute
  • Remove find-outdated-deps script, we have better replacement for it

Databases

  • Allow export command regardless of the configured db_type
  • Add SQL_INSERT macro and update SQL queries to use server_host field
  • Update SQL archive index to match mysql.sql
  • mod_muc: Use correct table field name in sql query

MAM

  • Always strip stanza IDs
  • Announce support for stanza IDs
  • Don’t store from ‘sm_receive_packet’ hook
  • Fix mod_mam reloading
  • Ignore non-message stanzas earlier
  • Improve handling of forked messages
  • Make sure a stanza ID is always added
  • Make sure archived message isn’t bounced
  • Prepare version 0.6.1 of XEP-0313 (MAM) support

MUC

  • Properly store subject element
  • Resend presences and history if presence possesses x MUC element
  • Send presence-unavailable when expulsing a participant
  • Add mucsub event for subscribers list changes
  • Optimize muc subscriptions handling
  • Show real jid in mucsub subscription change events

PubSub

  • Add basic PubSub meta-data support
  • Rewrite pubsub export to sql
  • Cleanup tree requests, rename pubsub_node.type to pubsub_node.plugin
  • Fix select_type race on plugin_init
  • Implement parentnodes seek for hometree
  • Delete cached item on node removal
  • Fix delete item from unregistered user
  • Cleanup pubsub subscriptions quering, fix pep case
  • PEP services must send notifications to the account owner

Push

  • Avoid notification duplicates
  • Add support for SQL storage
  • Add export from Mnesia database to SQL file
  • Don’t store xdata() in Mnesia table
  • Simplify backend interface

Miscelanea

  • Mix _xmpp-server and _xmpps-server SRV records (XEP-0368)
  • HTTP: Don’t crash when Host header is missing
  • HTTP fileserver: Accept routes in Host header and map them to vhosts
  • mod_register_web: Better handle mobile devices in CSS
  • mod_stream_mgmt: Improve logging on timeout
  • mod_stream_mgmt: Increase ‘max_ack_queue’ default
  • Updated Catalan, Chinese, Czech, French, Galician, German, Greek, Hebrew, Russian, Spanish translations
  • WebAdmin: Don’t include CSS, javascript and image data directly in the code

Feedback

As usual, the release is tagged in the Git source code repository on Github.

The source package and binary installers are available at ejabberd XMPP & MQTT server download page.

If you suspect that you’ve found a bug, please search or fill a bug report on Github.