ejabberd 16.04

This new ejabberd release includes bugfixes, and also two major source code refactorings: one for ejabberd commands, and other for database specific code in many modules. This version is doing lot of under the scene changes to prepare further improvements and refactoring.

For consistency, modules configured to use an SQL RDBMS are named sql instead of the more confusing odbc. You are not required to modify your configuration file, old style ‘odbc’ keyword works, but you may want to update it and replace ‘odbc’ with ‘sql’.

We have also introduced a straightforward and new way for developers to add data / backend modules. If a developer need to add backend mystore to module mod_example, they only need to create mod_example_mystore, implement it with behaviour mod_example and add db_type: mystore in configuration of that module.

Erlang/OTP 18.3 is now used in all official installers and packages available in the download area.

Changes

API Commands

  • Add API versionning
  • Changed error handling, based on exception
  • ejabberd Command bugfixes
  • Accept commands: add_commands syntax (along commands: – add_commands)
  • Fix mod_muc_admin:get_room_options and set_room_affiliation
  • mod_http_api: support ‘open’ ejabberd commands

Databases

  • Split modules DB specific code into separate modules
  • Rename “odbc” to “sql” everywhere
  • Rename “internal” auth to “mnesia”
  • Improve detection of databases supported by modules
  • Switch to varchar(64) in mysql user.server/salt as text can’t have default values
  • ‘serverkey’ and ‘salt’ should have empty string as default

XMPP

  • Drop headline messages sent to offline resources
  • Don’t omit bounces for messages of type “result”
  • Match namespace when checking for chat states
  • Fix check for standalone chat state notifications
  • Disable TLS compression for s2s by default
  • Make sure that ejabberd_sm sid are unique
  • Send stream trailer at the very end of the processing
  • Generate shorted jid for anonymous connections
  • Fix anonymous SASL auth

ejabberdctl

  • Add option to migration script to delete data from a table after they have been successfully moved to SQL database: ejabberdctl delete_mnesia example.org
  • Remove useless variable and quote EPMD and SPOOL_DIR
  • Fix node ping command
  • Use UUID for ctl node name
  • Remove –auth in ejabberd_ctl.erl as it’s useless, still useful for mod_rest
  • Force ERL_PATH for Elixir console

Pubsub

  • Fix use of pubsub node plugin when configured with default_node_config
  • Set default value for pubsub#itemreply option
  • Add subscribe/unsubscribe hooks

Internal

  • Add mod_mam header file
  • Replace ?ERR_* macros with ?ERRT_*
  • change mod_ping Timers using maps instead of dict

Dependencies

  • Update p1_utils to 1.0.4: Adds p1_time_compat:unique_timestamp()
  • Uptate fast_tls to 1.0.3: Prevent buffer overflows and allocation failures
  • Uptate stringprep to 1.0.3: Fix compilation on Windows and error message
  • Uptate stun to 1.0.3: Use fast_tls 1.0.3
  • Uptate esip to 1.0.4: Use fast_tls 1.0.3

Feedback

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

The source package and binary installers are available at ProcessOne.

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

6 thoughts on “ejabberd 16.04

  1. Hi, Im trying to use ejabberd hex package and its contains a dependency to stringprep-1.0.3 in hex.pm packages. When compiling stringprep it raises an error in windows. The console log is as follows:

    ==> stringprep (compile)
    Compiled src/stringprep_app.erl
    Compiled src/stringprep.erl
    Compiled src/stringprep_sup.erl
    Compiling c_src/stringprep.cpp
    Microsoft (R) C/C++ Optimizing Compiler Version 19.00.23918 for x86
    Copyright (C) Microsoft Corporation. All rights reserved.

    cl : Command line warning D9002 : ignoring unknown option ‘-O3’
    cl : Command line warning D9024 : unrecognized source file type ‘Files/erl7.2.1/lib/erl_interface-3.8.1/include’, object file assumed
    cl : Command line warning D9027 : source file ‘Files/erl7.2.1/lib/erl_interface-3.8.1/include’ ignored
    cl : Command line warning D9024 : unrecognized source file type ‘Files/erl7.2.1/erts-7.2.1/include’, object file assumed
    cl : Command line warning D9027 : source file ‘Files/erl7.2.1/erts-7.2.1/include’ ignored
    stringprep.cpp
    c_src/stringprep.cpp(23): fatal error C1083: Cannot open include file: ‘erl_nif.h’: No such file or directory
    ERROR: compile failed while processing d:/DEV/Elixir/Test/ejabee/deps/stringprep: rebar_abort
    ==> ejabee
    ** (Mix) Could not compile dependency :stringprep, “escript.exe “c:/Users/Reynier Pupo/.mix/rebar” compile skip_deps=true deps_dir=”d:/DEV/Elixir/Test/ejabee/_build/dev/lib”” command failed. You can recompile this dependency with “mix deps.compile stringprep”, update it with “mix deps.update stringprep” or clean it with “mix deps.clean stringprep”

    Please help me.

      • Hi thanks for your suggestion, the fact is that Im trying to use ejabberd in elixir. When I make a `mix deps.get`, ejabberd is a dependency of my project and stringprep is a dependency of ejabberd. In the compile step `mix compile`, mix try to compile every fetched dependencies, including stringprep. I don’t know how to bypass this step.
        Thanks.

    • I set up phoenex in Ubuntu and configured my project to work with ejabberd. It download fine all dependencies and compile, but starting the server it throw an error:

      mix phoenix.server
      [info] Ignoring ejabberd logger options, using Elixir Logger.
      [info] Application lager exited: exited in: :lager_app.start(:normal, [])
      ** (EXIT) an exception was raised:
      ** (FunctionClauseError) no function clause matching in :lager_app.start_error_logger_handler/3
      (lager) src/lager_app.erl:141: :lager_app.start_error_logger_handler(false, 50, [Logger.ErrorHandler])
      (lager) src/lager_app.erl:217: :lager_app.start/2
      (kernel) application_master.erl:273: :application_master.start_it_old/4
      [error] Process #PID raised an exception
      ** (ArgumentError) argument error
      (stdlib) gen_event.erl:232: :gen_event.send/2

      Crash dump is being written to: erl_crash.dump…*** stack smashing detected ***: /usr/lib/erlang/erts-7.3/bin/beam.smp terminated
      Aborted (core dumped)

Leave a Comment