ejabberd Changelog

What's new in ejabberd 16.09

Sep 27, 2016
  • Support for Elixir configuration file. It means it is possible to configure ejabberd using an Elixir script file instead of ejabberd YAML format.
  • Support XEP-0355 – Namespace Delegation
  • This allows to use an external entity to manage some of the server features. This XEP is working with Privileged Entity (XEP-0356).
  • Support XEP-0356 – Privileged Entity
  • This allows a component or any entity to have a “privileged” status. As a result, it can manage an entity roster on its behalf, send or receive stanzas in the name of the server. The main goal of XEP-0356 is to create an external, server agnostic, PEP service.
  • New XMPP Extension support:
  • Support for XEP-0355 – Namespace Delegation
  • Support for XEP-0356 – Privileged Entity
  • Elixir support:
  • Support for Elixir-based configuration files
  • MUC/Sub:
  • Add a new request to list MUC room subscribers
  • Link MUC subscription to bare JID
  • New commands unsubscribe_room and unsubscribe_room for MUC subscriptions management through API
  • Fix nick-to-jid mapping for MUC subscribers
  • Fix subscribed rooms list retrieval
  • Fix message routing from subscribers
  • Do not update muc_online_users table on MUC/Sub operations
  • MUC:
  • Support multiple JIDs in room invitations
  • Create room on configuration request as per XEP-0045, 10.1.3
  • PubSub:
  • Add SQL support for microblogging node plugin
  • Fix publish with subscriber publish model and SQL backend
  • node_mb: Call node_pep instead of node_hometree
  • Stream Management:
  • New Stream Management option: ack_timeout
  • Fix Stream Management feature for the websocket connections
  • Cancel timer when waiting for resumption
  • MAM and Offline:
  • Don’t store messages of type “headline”
  • Simplify “assume_mam_usage” option
  • Honor hint for any non-“error” message
  • Store announcements for offline users
  • Database:
  • Session backend: fix clean Redis table
  • mod_shared_roster: Support SQL backend
  • ejabberdctcl admin tool:
  • ejabberdctl: do not force access rules check on register command
  • ejabberdctl: do not force command line to pass a credential
  • New commands unsubscribe_room and unsubscribe_room for MUC subscriptions management
  • New command create_room_with_opts to create room with custom config
  • ejabberd API:
  • New commands unsubscribe_room and unsubscribe_room for MUC subscriptions management
  • New command create_room_with_opts to create room with custom config
  • Add X-Admin and basic auth header to CORS allowed headers in http_api
  • Properly process OPTIONS header in http_api for all paths
  • Expand parsing of JSON input to be able to handle update_roster command
  • Provide proper args_desc in oauth_issue_token command
  • Developer features: ejabberd Hooks:
  • Add hooks c2s_session_pending, c2s_session_resumed, store_offline_message, store_mam_message
  • Add CSI user’s JID argument to csi_filter_stanza and csi_flush_queue hooks
  • Add functions to get/set some c2s #state elements from external modules
  • mod_client_state: Let other modules filter stanzas
  • rework c2s API to simplify push modules integration
  • Installers:
  • Fix several issues on Windows installer

New in ejabberd 16.08 (Aug 5, 2016)

  • MUC:
  • New MUC/Sub support
  • Add ‘allow_subscription’ room configuration option for MUC/Sub
  • OAuth and ReST API:
  • Add OAUTH SQL backend
  • New special scope: ejabberd:admin and ejabberd:user, to more easily grant group of privileges
  • Add DB backend support for ejabberd_oauth
  • Added ejabberdctl commands to manage OAuth tokens: oauth_issue_token, oauth_list_tokens, oauth_list_scopes, oauth_revoke_token
  • Simplified OAuth form: username and password merged into JID field
  • User configurable validity duration for tokens on OAuth token generation form
  • Add support for sending back missing scope error to API ReST command calls
  • Oauth: several minor fixes
  • Support oauth password grant type, to generate token programmatically
  • Elixir support:
  • Update supported Elixir version to 1.2 and 1.3.
  • Support installation of Elixir contributions with external module command line tool.
  • PubSub:
  • Fix use of like parameter in sql pubsub’s requests
  • Fix node configuration change with sql backends
  • Fix send_last_items duplication with multi-plugin setup
  • MAM:
  • Always limit result set page size
  • Use hooks instead of direct calls
  • API:
  • Add support for checking access rules conformance for commands
  • Add support for rich error reporting for API
  • Add support for sending back missing scope error to API ReST command calls
  • Fix handling of complex values as arguments in http_api
  • Improve error handling
  • Other improvements:
  • External Component Connection Hooks
  • Fix compilation issues on R19
  • Support for OpenSSL 1.1
  • Make access rules in ejabberd_web_admin configurable
  • Make modules loading in a dependent order (#1191)
  • Make s2s stats commands more robust
  • Preserve PID for offline sessions
  • Several quoting fixes for PostgreSQL
  • Switch supervised workers from temporary to transient

New in ejabberd 16.06 (Jul 2, 2016)

  • The big improvement in this release is a new Access Control List (ACL) infrastructure. ACL rules are used in ejabberd config file to define fine-grained access to ejabberd features.
  • In ejabberd 16.06, the ACL configuration has been much improved to make it both simpler to use and easier to read. Moreover, ACL and access rules are not mandatory anymore when configuring access restrictions for a feature or a module: You can just inline the user, for example, making small configuration much easier to setup properly.
  • To make you even more comfortable, our new code is still supporting the old syntax and you can mix old and new syntax. It means that you can still use your existing configuration file and that you can migrate incrementally, as needed.
  • Config:
  • New ACL infrastructure
  • Add shorter version of some common access rules definitions
  • Allow @ inside acl rules user, user_glob or user_regexp to pass both user and server
  • in single string
  • Add acl rule access_rules_validator and shaper_rules_validator for use in mod_opt_type and opt_type callback functions.
  • Allow using shapers defined by name like in s2s_shaper: fast
  • Allow mod_opt_type and opt_type to transform values passed to it, and support
  • better error reporting
  • Do not call transform_terms multiple times in configuration processing when merging them
  • Don’t halt program when include_config_file is missing/can’t be read
  • Allow again multiple fqdn values in configuration
  • Commands:
  • Allow passing username and ip to ejabberd_commands, and use it in mod_http_api
  • Fix path to epmd in ejabberdctl
  • push_roster: must convert read strings to binaries
  • set_presence: Fix command API
  • Fix for modules_update_specs command
  • Add ejabberdctl commands to manage oauth tokens.
  • Core:
  • Bounce messages sent to server JID
  • Fix C2S session leak in rare cases
  • Fix handling of queued stanzas on session timeout
  • Give more time to stop and kill epmd
  • When stopping ejabberd, stop modules after broadcasting c2s shutdown
  • XEP-0198: Use different error message for bounces
  • XEP-0198: Add ‘h’ attribute to element
  • XEP-0198: Also count stanzas when socket is closed
  • Databases:
  • Fix pgsql compatibility on delete_old_messages command
  • Handle Redis connection in a separate module
  • Report in SQL when scram is enabled but the stored password isn’t
  • Update SQL escaping
  • Use MEDIUMTEXT type for muc_room.opts in MySQL schema
  • MAM:
  • Send unique stanza id and archived tag also in the message carbons
  • Fix “assume_mam_usage: if_enabled”
  • Fix typo in mod_mam:select()
  • Updated support of XEP-0313 from version 0.4 to 0.5.1
  • Mnesia: Avoid cleanup on bag when disc_only, switch in memory
  • Mnesia: Don’t exceed table size limit
  • Mnesia: Use transactions when writing
  • Client State Indication:
  • Fix handling of chat states
  • Simplify check for carbon-copied chat states
  • Simplify handling of PEP stanzas
  • Pass chat states of other resources
  • Unwrap carbon copies when checking for chat states
  • Add queue_pep option
  • Queue chat state notifications
  • Move CSI queue handling code from ejabberd_c2s
  • When stopping, delete only the configured hooks
  • Other modules:
  • ext_mod: Set HTTP/1.0 so Github accepts the request
  • gen_mod: Compile early to remove undefined behaviour warning
  • mod_http_upload: Let client retry HTTP upload on file size mismatch
  • mod_last: Produce mod_last entry on account creation
  • mod_muc_room: Notify on affiliation changes
  • mod_register: Check password with jid:resourceprep when registering account
  • mod_roster: respect roster item changes introduced with roster_process_item hooks upon pushing
  • PubSub: Fix PubSub RSM on get_items
  • PubSub: Add support for PubSub publishing options
  • PEP: Fix sender in case of explicit pep subscriptions
  • ejabberd_xmlrpc: Report error when conversion of argument type fails

New in ejabberd 16.04 (Apr 29, 2016)

  • 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

New in ejabberd 16.03 (Mar 30, 2016)

  • Protocols:
  • mod_mix: Experimental support for MIX (XEP-0369)
  • mod_http_upload: Add support for XEP-0363 v0.2
  • Core:
  • Use SASL PLAIN authzid as client identity if auth module permits it
  • Make auto generated resources shorter
  • Start ezlib only if required, as it’s optional
  • Make it possible to get virtual host of a registered route
  • LDAP improvements:
  • Fix issue getting shared roster
  • Do not call to deprected/undefined functions from mod_shared_roster_ldap
  • Proper naming for LDAP test function for shared roster
  • SQL databases support:
  • New parse transform for SQL queries, use prepare/execute calls with Postgres
  • Support for run-time SQL queries selection depending on DBMS version
  • In SQL files create Users table with SCRAM support by default
  • Do not auto append IP suffix to usernames
  • Fix some LIMIT related problems with MSSQL
  • Update Microsoft SQL Server schema
  • Riak:
  • Add support for Riak authentication
  • Fix is_connected/0 function
  • Keep alive Riak connections by default
  • API and Commands:
  • Add support for ReST admin commands that are only restricted by source IP. This is key for easy integration with other backend using ReST API.
  • Fix add_commands and remove_commands options
  • Pass noauth when auth isn’t provided
  • Improve ban_account command to work with other DBs than Mnesia
  • Escape quoting node name for ejabberdctl ping
  • Bare JID in ‘from’ of Roster Push (RFC 6121 section 2.1.6) in mod_admin_extra
  • Fix result type of “connected_users_info” command
  • New command delete_mnesia deletes all tables that can be exported. This is useful after you have migrated to another backend, like SQL.
  • PubSub:
  • Unregister route at the very end
  • Define PubSub node configuration per route/host explicitly
  • Fix config fetch and pubsub disco after host/serverhost cleanup
  • Admin and build chain:
  • Update OTP release to use R17.5 and drop release 17.1
  • Compile ejabberd_config early to stop undefined behaviour warnings
  • Fix start via systemd
  • Fixed type specifications for ‘rebar doc’
  • Specify lacking nodename in ejabberdctl
  • Dependencies:
  • Update p1_pgsql to 1.1.0: This add support for prepared statements.
  • Uptate fast_yaml to 1.0.3: This improves the error reporting on syntax errors in Yaml configuration file.
  • Use the v0.2 release of luerl instead of a commit.
  • Test framework:
  • Add Coveralls support
  • Add ability to run the ejabberd test suite in a modular way. You can now run the test suite, even if you only have a a single backend locally.
  • Other:
  • mod_mam: Don’t store watchdog notifications in MAM archives
  • mod_multicast: Fix Addresses element which lacked others local destinations
  • mod_offline: Mark get_queue_length obsolete, and use count_offline_messages
  • Update Gallician translation

New in ejabberd 16.02 (Feb 29, 2016)

  • New XMPP Extensions support:
  • New Flexible Offline Message Retrieval (XEP-0013) support
  • Admin:
  • New migration script from Prosody to ejabberd
  • Fix --disable-debug compilation flag
  • don’t escape ERL_OPTIONS
  • Two new global timeouts configurable: c2s_hibernate, receiver_hibernate
  • Make it possible to define sm_db_type per virtual host
  • configuration checker: Describe option type in code for domain_balancing option
  • Log failed SQL requests
  • Include mod_muc.hrl and fix records
  • mod_http_upload: Expand docroot before using it, also expand @HOST@
  • Commands:
  • New import_prosody command
  • Start documenting arguments in mod_admin_extra commands
  • We added a way to get all ejabberd_commands, not only those that was registered
  • Allow to pass \n in argument to ejabberdctl
  • Add error handling to send_stanza command
  • Fix format_result so get_room_options command works again after commit reference aa5caa3
  • Dependencies:
  • lager is the default (and only) logging module and we removed p1_logger
  • Handle spaces in vsn attribute of app file when installing deps
  • Renamed dependencies and modules for consistency but also to reflect huge performance gains:
  • . p1_iconv -> iconv
  • . p1_stringprep -> stringprep
  • . p1_stun -> stun
  • . p1_tls -> fast_tls
  • . p1_yaml -> fast_yaml
  • . p1_zlib -> ezlib
  • Message Archive Management:
  • Advertise MUC MAM v0.4.1 in room JID’s disco#info
  • Add “delete_old_mam_messages” admin command
  • Add ‘from’ attribute to tag
  • Add “request_activates_archiving” option
  • Respond to form requests
  • Support XEP-0313 v0.2 MUC archive queries
  • Check whether MUC message is desired
  • Reject -based paging
  • Limit result set page size
  • Sort messages returned by Mnesia
  • Strip existing JID tags from MUC messages
  • Expose MUC occupant JID in more cases
  • Don’t let outcasts access MUC archive
  • Send new preferences when they are set
  • Stream management (XEP-0198): Let MAM take care of pending messages
  • GroupChat:
  • Send presence with code 170 in initial presence from MUC
  • Add most status codes only to initial MUC presence
  • mod_muc_room: Don’t expose JIDs in anonymous rooms
  • mod_muc_room: Let members see admin/owner JIDs
  • PubSub:
  • Fix presence-based delivery
  • Make caps warning less confusing
  • Fix host/serverhost usage
  • Add support of pubsub#itemreply=publisher
  • Other:
  • Accept stream compression request after SASL
  • Make C2S session establishment optional to better conform to XMPP specifications and still be friendly with older clients.
  • MUC: new regexp_room_id option to limit possible room names.
  • ODBC: Set utf8mb4 charset on MySQL connection to support emoji storage as default.
  • LDAP: Improve LDAP shared roster support.
  • mod_register_web: Allow setting host when deleting account or changing password.
  • Rename timestamp_to_iso functions in jlib.
  • Stream management (XEP-0198): Fix session timeout corner case.
  • Several improvements in Elixir support.
  • Updated many translations.
  • Improve web admin stylesheet to fix rendering issues in some browsers.
  • Packaging:
  • ejabberd is now available as an hex.pm package and can be easily included as a dependency in any Elixir or Erlang application.
  • Installers include latest OpenSSL patches.

New in ejabberd 16.01 (Jan 13, 2016)

  • Security:
  • Improve Dialback Key Generation and Validation support (XEP-0185)
  • More generally, improve random number generator to avoid timing / guessing attacks on any random value.
  • Database:
  • Use BLOB instead of TEXT on mysql in stanza storage
  • Use UTF8MB4 character set in MySQL tables
  • Make Riak working on Erlang R18
  • MAM:
  • Use stanza-id tags for deduplication
  • Advertise MAM in disco info for account/room JID
  • Improve MUC support
  • Don’t store resent messages
  • Do not forget to include xmlns in mam prefs response (#859)
  • Honor Message Processing Hints (XEP-0334)
  • MUC:
  • Add support for muc#roomconfig_presencebroadcast option
  • Only filter rooms in Service Disco when more than 100 (EJAB-343)
  • List in Service Disco non-empty rooms and provide Node for empty (EJAB-343)
  • When user joins logged room, he must be warned (EJAB-726)
  • Pubsub:
  • Fix pubsub virtual nodetree plugin
  • Use correct notification_type for last items (#827)
  • PubSub plugin for online users only
  • Disable use of multi-subscribe and subscription-option on standard plugins
  • Limit number of subscriptions per node and allow custom default node configuration
  • Don’t force max_items_node to MAXITEMS if not defined
  • Don’t read pubsub options when plugin does not use them
  • Elixir:
  • Upgrade Elixir to v1.1.0
  • Admin:
  • Add plugin for passing extra erl_opts flags to deps, and use it for hipe
  • Add –enable-latest-deps to configure
  • Remove “–enable-nif” flag
  • New send_stanza command
  • ejabberdctl: new –no-timout flag
  • ejabberdctl: Don’t let “reopen_log” rotate files (EJAB-1243)
  • ejabberdctl: Improve escaping of arguments passed to ejabberdctl
  • OpenSSL minimum required version: raised from 0.9.8 to 1.0.0
  • Config:
  • New option accept_interval in ejabberd_listener
  • Webadmin console visual refresh (EJAB-1142)
  • If mod_register access_from is ‘none’, then don’t advertise IBR (#857)
  • Fix handling of some options in old style configs
  • Fix parsing option trusted_proxies
  • Fix ipv6 configuration processing (#803)
  • ejabberd_service: simplify configuration: no need for ‘hosts’, just provide ‘password’
  • Cleanup and optimizations:
  • Faster string_to_jid/1 implementation
  • Move JID related functions from jlib.erl to jid.erl (#847)
  • Remove usage of erlang’s now()
  • Update dependency name from p1_cache_tab to cache_tab
  • Use crypto:rand_uniform instead of random:uniform
  • Fix randoms.erl on R17 that don’t have random:seed(integer())
  • Faster and more memory efficient XML parsing.
  • Faster stringprep library.
  • Other changes:
  • ejabberd_http: Cope with large POST/PUT requests
  • ejabberd_http: Log debug message on receive errors
  • mod_offline: Discard chat states notifications
  • mod_offline: Honor store hint
  • mod_http_upload: various fixes
  • XEP-0198: Fix stanza counting corner case issue
  • Adding WEBIRC, custom realname & ident, ISO-8859-15 (thanks to iwalkalone69)(#877)
  • Update hebrew translation

New in ejabberd 15.11 (Nov 20, 2015)

  • Improvements:
  • The commands join_cluster and leave_cluster do not depend on external scripts anymore. This makes operation simpler from user perspective and more portable across systems. The commands are supported on Microsoft Windows the same way as on Linux and OS X.
  • Adding a node to a cluster:
  • Suppose you have already configured ejabberd on one node named ejabberd@node1. Let’s create an additional node ejabberd@node2 and connect them together.
  • Copy the .erlang.cookie file from node1‘s home to node2‘s home.
  • Start node2 node, and join it to the cluster:
  • $ ejabberdctl start
  • $ ejabberdctl join_cluster 'ejabberd@node1'
  • $ ejabberdctl list_cluster
  • ejabberd@node1
  • ejabberd@node2
  • This enables ejabberd’s internal replications to be launched across all nodes so new node can start receiving messages from other nodes and be registered in the routing tables.
  • Removing a node from the cluster:
  • Suppose you have already configured ejabberd cluster with nodes named ejabberd@node1 and ejabberd@node2 and you want to remove node1 from the cluster.
  • You just needs to shut down node1. There is no specific delay for the cluster to figure out that the node is gone, the node is immediately removed from other router entries.
  • If the node node1 is started again, it’s immediately attached back to the cluster until it has been explicitly removed permanently from the cluster.
  • To permanently remove node1 from the cluster, just call leave_cluster command from anywhere in your cluster (either node1 or node2): $ ejabberdctl leave_cluster 'ejabberd@node1'
  • The removed node must be running while calling leave_cluster to make it permanently removed. It’s then immediately stopped.

New in ejabberd 15.07 (Jul 29, 2015)

  • Message Archive Management (XEP-0313):
  • Add “complete” attribute to MAM final response
  • Fix mod_mam compatibility with RSM
  • Changed mam iq get to set as specified by XEP-0313 v0.3
  • Modules management:
  • Ensure config snippet is loaded at module installation
  • Allow contribution to include .yml or .yaml config file
  • Allow include of simple dependencies
  • Multi User Chat:
  • New API hook: muc_filter_packet
  • Send notifications on MUC configuration changes
  • Omit warning message regarding non-anonymous room
  • During halt only shutdown MUC rooms on local node
  • Pubsub:
  • Allow migration of old pubsub items with old xmlelement structure in body
  • Trigger PEP notifications on CAPS updates
  • Check for node subscription of bare JID
  • Flat is now the default plugin
  • Stream Management (XEP-0198):
  • Increase timeout during resumption
  • Increase default “max_ack_queue” value
  • ejabberd Client connection:
  • API change: user_send_packet is now a run_fold hook and pass the c2s State as a parameter. It was already the case in ejabberd 15.06, but it was not mentioned in the changelog, by mistake. So, now, you know :)
  • Admin:
  • Do not rely on behaviour info when doing config validation, so that it can work with ejabberd binary installers
  • When passwords are scrammed, report check_password_hash cannot work
  • Fix problem with merging values from multiple config files
  • If local guide.html file not found, redirect to the online guide
  • Support RTL page direction in WebAdmin for Hebrew
  • configure.ac: add AC_CONFIG_MACRO_DIR and static AC_INIT
  • WebAdmin:
  • Don’t crash web admin when displaying info about websocket using users
  • Installers:
  • Both RPM and DEB now are using the improved post-install script which creates ejabberd user when installing as root. This let ejabberd running as user without any manual setup.
  • Windows installer now uses %USERPROFILE% to get path of user writable directory. We made numerous other fixes to that version, thanks to your feedback.

New in ejabberd 15.04 (Apr 25, 2015)

  • New features:
  • We integrated usefull contributions around groupchat (mod_admin_extra and mod_muc_admin) into ejabberd core. This means ejabberd admins get a new set of powerful ejabberdctl command and API they can rely on with standard ejabberd deployments.
  • Also made XEP-0033 Extended Stanza Addressing a default component. This is extremely useful to build chat service that uses adhoc chat mechanisms. It brings to ejabberd the ability to send messages to multiple recipients at once without using Multi User chat or pubsub. You can see a bit like email cc or bcc features. This allows to build extremely simple and lightweight multi party chat features.
  • Among new features, we now have a SQLite backend that can replace Mnesia for those who prefer as basic backend for small and simple standalone deployments.
  • Improvements:
  • We improved a lot of modules, added some major pubsub improvements, better RFC compliance, many bug fixes and small tweaks all over the place thanks to your feedback. The cluster script helpers have been improved to work in more situations.
  • Elixir:
  • We are still pushing Elixir integration further: this new version of ejabberd can be embedded in any Elixir application, for example in a Phoenix Web application. Here is a tutorial showing how it works.
  • PubSub:
  • PubSub improvements include code refactor, bug fixes, minor optimisations and removal of old mod_pubsub_odbc. mod_pubsub now uses db_type parameter like all other ejabberd modules.
  • NOTE: Users of old mod_pubsub_odbc will need to alter pubsub_node table changing the type attribute: set flat when it was flat_odbc, hometree when it was hometree_odbc, and pep when it was pep_odbc. Without this manual change in your database, the new mod_pubsub will not work.
  • R16B03-1 is now the minimal required Erlang/OTP version
  • SQLite support
  • Default db_type can be specified with global default_db option
  • Included mod_muc_admin, mod_admin_extra and mod_multicast modules
  • Removed ejabberd_http_poll
  • Pubsub improvements
  • Better RFC compliance
  • Several other bugfixes

New in ejabberd 15.03 (Mar 21, 2015)

  • Added fixes and some major improvements.
  • You can learn more about the changes and roadmap by meeting part of the team in upcoming ejabberd San Francisco Meetup.
  • New features:
  • Websocket - Websocket support is among the major new features introduced in this release. You can write speedy XMPP web clients. This web support has been tested on large deployments and is extremely fast, with very low latency.
  • Customizable session backends:
  • Introduced a new major feature to give more flexibility in the way sessions are managed in ejabberd. In the past, session were managed in Mnesia because it was the best compromise between speed, latency and scalability. However, ejabberd is deployed on a large variety of usage patterns and platform types and sizes. We thus have decided to provide more flexibility to accommodate with various use cases. For most deployments Mnesia is still the default choice and best backend to store sessions. For corporate deployments that need to get easy access to online users and status from other components, we provide a SQL backend for live sessions storage. Finally, if you want to avoid duplicating session across nodes to deploy a larger cluster, you can store your session information in a central, fast, in-memory backend like redis.
  • This improves scalability or flexibility depending on your platform type.
  • Security improvement: SCRAM support for SQL authentication backend
  • If you use the default ejabberd SQL authentication backend, you can now enable password encryption in the database using the standard SCRAM approach. We also provide a tool to migrate your existing authentication database to the new SCRAM secure scheme.
  • Development community and Elixir improvements:
  • ejabberd 15.03 is also the continuation of 15.02 in the way it simplifies the development and management of contributed modules. The community is growing with more code being contributed by third party developers. You can already find many modules contributed by the community. And now you can even install contributed modules without having developer skills or module compilation.
  • Interest around ejabberd has been accelerating with the introduction of Elixir. This release improves Elixir support. Moreover, you can now write ejabberd tests in Elixir and they are ran transparently with the rest of the test suite.
  • Package management:
  • This feature allows you to install easily ejabberd contributed module, with a simple command like:
  • $ ejabberdctl module_install modulename
  • You can find more details on this blog post: Easy installer and structure for ejabberd contributed modules
  • Simple add cluster command:
  • With our constant desire to simplify deployment we added a new ejabberdctl command to add a node in a cluster in a single command. Those who went to the process of setting up a cluster will certainly love this new command:
  • $ ejabberdctl join_cluster ejabberd@existingnode
  • More details here: Adding a node in a cluster
  • Changelog overview:
  • As a summary, here is the high level changelog:
  • Add support for WebSocket
  • Flexible session management with multiple backends: Mnesia/SQL/Redis or custom backend for session manager
  • Security improvement with SCRAM based password encryption in SQL authentication backends.
  • Package management for ejabberd contributed modules.
  • Improved Elixir experience
  • Automatic clustering scripts
  • Added missing index on database
  • Important updates on the documentation, with the launch of a new documentation site: docs.ejabberd.im
  • Several other bugfixes
  • MySQL database structure improvement:
  • We were missing an index on privacy list in the default MySQL schema. The database schema has been updated.
  • If you want to apply the changes on a running instance, here is the SQL command to issue:
  • CREATE INDEX i_privacy_list_data_id USING BTREE ON privacy_list_data(id);

New in ejabberd 15.02 (Feb 18, 2015)

  • Add Elixir support, allows to write plugins in Elixir
  • New command to reload configuration without restart
  • Support old style erlang expressions in YAML configuration
  • Improved captcha listener parsing when protocol not specified
  • Fix upgrade of old unbinarized pubsub table from 2.1
  • Minor updates in the documentation
  • Other bug fixes

New in ejabberd 14.12 (Dec 18, 2014)

  • Includes many bugfixes, and a few new features:
  • New module mod_client_state implements XEP-0352: Client State Indication
  • New module mod_fail2ban to ban IPs that show malicious signs
  • New option store_empty_body in mod_offline
  • New option disable_sasl_mechanisms
  • Improve option resend_on_timeout to support if_offline
  • Improvements mainly cover:
  • More robust offline server
  • Better charset support in XMLRPC
  • Some PEP issues fixed

New in ejabberd 14.07 (Jul 25, 2014)

  • SIP:
  • SIP Outbound (RFC 5626) support
  • New option always_record_route
  • New options record_route and routes
  • Carbon Copy (XEP-0280):
  • Don’t log MUC messages with hint
  • Don’t carbon copy messages with hint
  • Let is_carbon_copy/1 recognize carbons
  • Don’t send XEP-0280 v1 copies back to sender
  • Stream Management (XEP-0198):
  • XEP-0198: Terminate session if stanza queue becomes too large
  • XEP-0198: Don’t exit on socket send failure
  • XEP-0198: Don’t drop session on failed resume
  • XEP-0198: Check whether routed packets are stanzas
  • Riak:
  • Riak support
  • Install and config:
  • New options log_rotate_count, log_rotate_size and log_rate_limit
  • html guide is now generated when building source tarball
  • Use p1_utils, and move treap.erl to p1_utils
  • Get rid of p1_mnesia file
  • old release notes are not installed anymore
  • Don’t “forget” listener options
  • Always enable STUN at compile time
  • Do not check for Erlang apps at configure time
  • Add –enable-riak configure flag
  • Tests:
  • Add tests for stream management
  • Add tests for mod_carboncopy
  • Add tests for mod_caps
  • Improve MUC test cases
  • Travis CI: Enable Riak tests
  • Add Riak backend to the testing suit
  • The test suite no longer fails without –enable-transient_supervisors.
  • MUC:
  • MUC messages with ~ were not logged (EJAB-1696).

New in ejabberd 14.05 (May 13, 2014)

  • ejabberd now includes support for:
  • XEP-0198: Stream Management (EJAB-532)
  • XEP-0321: Remote Roster Management (EJAB-1381)
  • RFC-3261: SIP proxy/registrar
  • RFC-5766: TURN: Traversal Using Relays around NAT (EJAB-1017)
  • There are several improvements regarding encryption:
  • Add option to specify openssl options
  • Fix extraction of host names from certificates
  • Fix certificate authentication for incoming s2s connections
  • Fix handling of certificate verification errors for incoming s2s
  • Handle “s2s_use_starttls: required_trusted” the same way for outgoing
  • Support certificate verification for outgoing s2s connections
  • Check TLS state before requesting SASL EXTERNAL
  • Log TLS status for outgoing s2s with SASL EXTERNAL
  • Verify host name before offering SASL EXTERNAL
  • Just to mention other improvements:
  • New ejabberd command: disconnect_user/2
  • New Bash completion script for ejabberdctl, experimental (EJAB-1042)
  • Don’t provide current password in webinterface
  • mod_register_web: check same acl as mod_register.
  • Document and enable mod_carboncopy (XEP-0280) by default
  • Make it possible to get/set vCards for MUC rooms
  • Add Travis CI configuration file

New in ejabberd 13.10 (Oct 10, 2013)

  • Doc fixes & suggestions
  • Publish ejabberd community 13.x binary installers
  • access_createnode seems not to be respected when a node is 'auto-created'

New in ejabberd 2.1.13 (Jun 29, 2013)

  • Compilation: Detect correctly newer Darwin versions (EJAB-1594)
  • Guide: ejabberd_service expects a shaper_rule, not a shaper
  • MUC: Handle multiple < and > in mod_muc_log plaintext mode (EJAB-1640)
  • MUC: Handle ~ control sequence in text of mod_muc_log (EJAB-1639)
  • MUC: list_to_integer/2 only works in OTP R14 and newer
  • Pubsub: access_createnode acl also applies to auto created nodes
  • Web: Normalize HTTP path
  • WebAdmin: Fix bug when displaying offline messages in WebAdmin

New in ejabberd 2.1.12 (Mar 23, 2013)

  • Bug:
  • [EJAB-405] - If error occurs in stream setting, it must still open stream tag
  • [EJAB-1053] - Change installation paths in Windows
  • [EJAB-1408] - pubsub_state#items not updated for other publishers of the node
  • [EJAB-1563] - LDAP Connection Broken with 2.1.11 (32 bit)
  • [EJAB-1564] - Function call errors in mod_pubsub
  • [EJAB-1566] - On shutdown, first stop listeners, then modules
  • [EJAB-1572] - Check node name is available before starting ejabberd
  • [EJAB-1578] - Pidgin client digest-uri checks fail with virtual hosts
  • [EJAB-1580] - windows service of ejabberd 2.1.11 doesn't work
  • [EJAB-1599] - [patch included] ejabberd leaks hundreds of mysql connections if database mistyped/
  • [EJAB-1606] - Update copyright to 2013
  • [EJAB-1610] - Fix angle brackets handle in MUC plaintext log
  • [EJAB-1611] - Support different node names and different NIC IP address on the same box
  • [EJAB-1612] - Fix compatibility of LDAP support with Erlang R16A
  • Improvement:
  • [EJAB-984] - Windows ejabberd service
  • [EJAB-1020] - Choice of user shortcuts
  • [EJAB-1081] - Windows Installer unexpected behaviors
  • [EJAB-1082] - Doc fixes & suggestions
  • [EJAB-1560] - Merge Mnesia and ODBC code into one file
  • [EJAB-1567] - Let Windows installer bring up dependencies
  • New Feature:
  • [EJAB-1588] - umask option for mod_muc_log

New in ejabberd 2.1.11 (May 11, 2012)

  • HTTP service:
  • Fix ejabberd_http:get_line
  • Don't use binary:match to extract lines from binaries
  • Parse and encode https header names like native http parser does
  • Parse correctly https request split into multiple packets
  • Properly handle HEAD request in mod_http_bind (EJAB-1538)
  • New option default_host for handling requests with ambiguous Host (EJAB-1261)
  • ODBC:
  • New ODBC support for mod_announce

New in ejabberd 2.1.10 (Dec 27, 2011)

  • Erlang/OTP compatibility
  • Support Erlang/OTP R15B regexp and drivers (EJAB-1521)
  • Fix modules update in R14B04 and higher
  • Fix modules update of stripped beams (EJAB-1520)
  • XMPP Core
  • Fix presence problem in C2S after first unavailable (EJAB-1466)
  • Fix bug on S2S shaper when TLS is used
  • Prevent overload of incoming S2S connections
  • XEPs
  • BOSH: Get rid of useless mnesia transaction (EJAB-1502)
  • MUC: Don’t reveal invitee resource when room informs invitor
  • Privacy: Activate “Blocked Contacts” to current c2s connection (EJAB-1519)
  • Privacy: Always allow packets from user’s server and bare jid (EJAB-1441)
  • Pubsub: Add hooks for node creation/deletion (EJAB-1470)
  • Shared Rosters: support groupname@vhost in Displayed Groups (EJAB-506)
  • Vcard: Fix error when lowercasing some search results (EJAB-1490)

New in ejabberd 2.1.9 (Oct 4, 2011)

  • Bug:
  • [EJAB-1278] - "pubsub_state" and "last_activity" entries not removed from database after unregistering user
  • [EJAB-1378] - Two erlang crashes in mod_pubsub_odbc
  • [EJAB-1424] - node_pep_odbc misprint?
  • [EJAB-1453] - PEP notifications are sent even if pubsub#deliver_notification is false
  • [EJAB-1458] - ejabberdctl doesn't support parameters with blankspaces
  • [EJAB-1462] - Unescaped & when compiled with --disable-nif
  • [EJAB-1472] - PEP notifications sent without any +notify
  • [EJAB-1476] - Fix reference to 'admin' ACL name
  • [EJAB-1484] - Wrong version number in ejabberd.log
  • [EJAB-1491] - Fix ODBC account counting
  • [EJAB-1497] - import_piefxis fails with OpenfireExporter.jar
  • [EJAB-1498] - Fix Denial of Service when user sends malformed stanza
  • [EJAB-1499] - mod_muc_log crashes if first log entry for new day is result of room being destroyed
  • Improvement:
  • [EJAB-305] - Allow multiple entry with same nick to MUC rooms
  • [EJAB-639] - LDAP authentication. Configurable derefAliases
  • [EJAB-740] - Include status 110 in presence to new occupant
  • [EJAB-1299] - Add more ssloptions for LDAPS
  • [EJAB-1395] - Show meaningful error when ldap_filter contains space
  • [EJAB-1479] - New ldap_tls_cacertfile and ldap_tls_depth options when ldap_tls_verify is enabled
  • New Feature:
  • [EJAB-650] - New option resource_conflict to define server action
  • [EJAB-1196] - New SASL authentication method: SCRAM-SHA-1

New in ejabberd 2.1.8 (Jun 7, 2011)

  • Fix issue on PubSub preventing publication of items (EJAB-1457)

New in ejabberd 2.1.6 (Dec 13, 2010)

  • Account register:

  • mod_register: New ip_access option restricts which IPs can register (EJAB-915)

  • mod_register: Default configuration allows registrations only from localhost

  • mod_register: New password_strength for entropy check (EJAB-1326)

  • mod_register: New captcha_protected option to require CAPTCHA (EJAB-1262)

  • mod_register_web: New module, with CAPTCHA support (EJAB-471)
  • BOSH:

  • Don’t loop when there is nothing after a stream start (EJAB-1358)

  • Fix http-bind supervisor to support multiple vhosts (EJAB-1321)

  • Support to restart http-bind (EJAB-1318)

  • Support for X-Forwarded-For HTTP header (EJAB-1356)
  • Erlang/OTP compatibility:

  • R11: Fix detection of Erlang R11 and older (EJAB-1287)

  • R12B5: Fix compatibility in ejabberd_http_bind.erl (EJAB-1343)

  • R14A: Make xml.c correctly compile (EJAB-1288)

  • R14A, R14B: Disapprove the use of R14A and R14B due to the rwlock bug

  • R14B: Use pg2 from this version in systems with older ones (EJAB-1349)
  • Listeners:

  • Bind listener ports early and start accepting connections later

  • Fix a leak of ejabberd_receiver processes

  • Speed up ejabberd_s2s:is_service/2, allow_host/2 (EJAB-1319)

  • S2S: New option to require encryption (EJAB-495)

  • S2S: New option to reject connection if untrusted certificate (EJAB-464)

  • S2S: Include From attribute in the stream header of outgoing S2S connections

  • S2S: Fix domain_certfile tlsopts modifications for S2S connections (EJAB-1086)
  • Pubsub/PEP/Caps:

  • Fix pubsub cross domain eventing (EJAB-1340)

  • Use one_queue IQ discipline by default

  • Implement lifetime for broken hashes

  • New CAPS processing
  • ODBC:

  • Increase maximum restart strategy to handle some SQL timeouts

  • Support PostgreSQL 9.0 (EJAB-1359)

  • Use MEDIUMTEXT type for vcard avatars in MySQL schema (EJAB-1252)
  • Miscellanea:

  • mod_shared_roster_ldap: New Shared Roster Groups using LDAP information

  • mod_privacy: Fix to allow block by group and subscription again

  • Support timezone West of UTC (EJAB-1301)

  • Support to change loglevel per module at runtime (EJAB-225)

New in ejabberd 2.1.5 (Aug 3, 2010)

  • Authentication:
  • Extauth: Support parallel script running (EJAB-1280)
  • mod_register: Return Registered element when account exists
  • ejabberdctl:
  • Fix print of command result that contains ~
  • Fix problem when FIREWALL_WINDOW options for erl kernel were used
  • Fix typo in update_list command (EJAB-1237)
  • Some systems delete the lock dir; in such case don't use flock at all
  • The command Update now returns meaningful message and exit-status (EJAB-1237)
  • HTTP-Bind (BOSH):
  • Don't say v1.2 in the Bind HTTP page
  • New optional BOSH connection attribute process-delay (EJAB-1257)
  • MUC:
  • Document the mod_muc option captcha_protected
  • Now admins are able to see private rooms in disco (EJAB-1269)
  • Show some more room options in the log file
  • ODBC:
  • Correct handling of SQL boolean types (EJAB-1275)
  • Discard too old queued requests (the caller has already got a timeout)
  • Fixes wrong SQL escaping when --enable-full-xml is set
  • Use ets insead of asking supervisor in ejabberd_odbc_sup:get_pids/1
  • Pubsub, PEP and Caps:
  • Enforce disco features results (EJAB-1033, EJAB-1228, EJAB-1238)
  • Support all the hash functions required by Caps XEP-0115
  • Requirements:
  • Fixed support for Erlang R12; which doesn't support: true andalso ok
  • Support OTP R14A by using public_key library instead of old ssl (EJAB-953)
  • Requirement of OpenSSL increased from 0.9.6 to 0.9.8
  • OpenSSL is now required, not optional
  • Other:
  • Don't ask for client certificate when using tls (EJAB-1267)
  • Fix typo in --enable-transient_supervisors
  • Fix privacy check when serving local Last (EJAB-1271)
  • Inform client that SSL session caching is disabled
  • New configure option: --enable-nif
  • Use driver allocator in C files for reflecting memory in erlang:memory(system)
  • Debug: New p1_prof compiled with: make debugtools=true
  • Debug: Added functions to collect stats about queues, memory, reductions etc
  • HTTP: Log error if request has ambiguous Host header (EJAB-1261)
  • Logs: When logging s2s out connection attempt or success, log if TLS is used
  • Shared Rosters: When account is deleted, delete also member of stored rosters

New in ejabberd 2.1.4 (Jun 4, 2010)

  • Bug:
  • [EJAB-930] - Don't send error stanza as reply to error stanza
  • [EJAB-1096] - Pubsub subscription option pubsub#show_values not enforced by the server
  • [EJAB-1208] - Pubsub items are not deleted when a node is deleted, but get delivered to newly created nodes
  • [EJAB-1213] - 100% CPU Usage Problem with a Transport that does XMPP Pings
  • [EJAB-1224] - Don't store blocked messages in offline queue
  • [EJAB-1225] - DAG plugin : Notifications not sent with pubsub#subscription_type=nodes subscription option
  • [EJAB-1227] - Wrong error when unsubscribing from a non-existent node
  • [EJAB-1231] - Don't show HTTP request in logs, because reveals password
  • Improvement:
  • [EJAB-199] - LDAP: Allow inband password change
  • [EJAB-208] - Include avatar hash in presence broadcast on behalf of the client
  • [EJAB-652] - New option pam_userinfotype to provide username or JID
  • [EJAB-1038] - Refactor code to reduce calls to get_affiliation and get_role
  • [EJAB-1214] - Add xml default content type to mod_http_fileserver
  • [EJAB-1229] - Option to enable in LDAPS verification of peer certificate
  • [EJAB-1233] - Pubsub node affiliations should always have one 'owner'
  • [EJAB-1234] - PubSub: make last_item_cache feature cluster aware
  • [EJAB-1237] - New ejabberd commands to update modified modules
  • [EJAB-1240] - Add created_at column also to PostgreSQL schema
  • [EJAB-1242] - Makefile with optional ejabberd_debug.erl compilation
  • New Feature:
  • [EJAB-213] - Read only access to web admin
  • [EJAB-641] - Optionally cache extauth users also in mnesia
  • [EJAB-722] - LDAP extensible match
  • [EJAB-1189] - XEP-0115 - 6.3 - Stream feature element including capabilities
  • [EJAB-1223] - Update mod_caps to XEP-0115 v1.5
  • Task:
  • [EJAB-1247] - check 2.1.x->2.1.4 mnesia PEP nodes upgrade

New in ejabberd 2.1.3 (Mar 17, 2010)

  • New ejabberd_c2s option: max_fsm_queue
  • ejabberdctl: Support concurrent connections with bound connection names
  • Cross-domain HTTP-Bind support (EJAB-1168)
  • Hibernate http-bind process after handling a request

New in ejabberd 2.1.2 (Jan 18, 2010)

  • Core:
  • Close sessions that were half connected.
  • Fix SASL PLAIN authentication message for RFC4616 compliance.
  • Fix support for old Erlang/OTP R10 and R11.
  • Return proper error (not 'conflict') when register is forbidden by ACL.
  • When ejabberd stops, send stream close to clients.
  • ejabberdctl:
  • Check for EGID in ejabberdctl command.
  • Command to stop ejabberd informing users, with grace period.
  • If there's a problem in config file, display config lines and stop node.
  • MUC:
  • Kick occupants with reason when room is stopped due to MUC shutdown.
  • Write in room log when a room is created, destroyed, started, stopped.
  • PubSub and PEP:
  • Don't call gen_server on internal event (improves performance and scalability).
  • Fix duplicate SHIM header in Pubsub message.
  • Notification messages of Pubsub node config change contained a SHIM header.
  • SubID SHIM header missing in Pubsub message with multiple subscriptions on the same node.
  • PEP: last published item not sent from unavailable users when the subscription is implicit (XEP-0115).
  • pep_mapping not working due to Node type mismatch.
  • WebAdmin:
  • If big offline message queue, show only subset on WebAdmin.
  • Support in user list page of WebAdmin when mod_offline is disabled.

New in ejabberd 2.1.1 (Dec 17, 2009)

  • Core:
  • Call ejabberd_router:route/3 instead of sending a message.
  • Can’t connect if starttls_required and zlib are set.
  • Routes vCard request to the occupant full JID, but should to bare JID.
  • S2S: fix allow_host/2 on subdomains. added hook s2s_allow_host.
  • MUC:
  • Support converting one-to-one chat to MUC.
  • Add support for serving a Unique Room Name.
  • Publish Subscribe:
  • Receive same last published PEP items at reconnect if several resources online.
  • Typo in mod_pubsub_odbc breaks Service Discovery and more.
  • Web:
  • Fix memory and port leak when TLS is enabled in HTTP.
  • WebAdmin doesn't report correct last activity with postgresql backend.
  • Option to define custom HTTP headers in mod_http_fileserver.
  • Show informative webpage when browsing the HTTP-Poll page.
  • Other:
  • Change captcha.sh to not depend on bash.
  • Generate main XML file also when exporting only a vhost.
  • Fix last newline in ejabberdctl result.
  • Guide: fix -setcookie, mod_pubsub_odbc host, content_types.

New in ejabberd 2.1.0 (Nov 13, 2009)

  • Anti-abuse:
  • Captcha support (XEP-0158). The example script uses ImageMagick.
  • New option: registration_timeout to limit registrations by time
  • Use send timeout to avoid locking on gen_tcp:send
  • mod_ip_blacklist: client blacklist support by IP
  • API:
  • ejabberd_http provides Host, Port, Headers and Protocol in HTTP requests
  • Export function to create MUC room
  • New events: s2s_send_packet and s2s_receive_packet
  • New event: webadmin_user_parse_query when POST in web admin user page
  • Support distributed hooks over the cluster
  • Authentification:
  • Extauth responses: log strange responses and add timeout
  • Binary Installer:
  • Includes exmpp library to support import/export XML files
  • Caps:
  • Remove useless caps tables entries
  • mod_caps must handle correctly external contacts with several resources
  • Complain if mod_caps disabled and mod_pubsub has PEP plugin enabled
  • Configuration:
  • Added option access_max_user_messages for mod_offline
  • Added option backlog for ejabberd_listener to increase TCP backlog
  • Added option define_macro and use_macro
  • Added option include_config_file to include additional configuration files
  • Added option max_fsm_queue
  • Added option outgoing_s2s_options to define IP address families and timeout
  • Added option registration_timeout to ejabberd.cfg.example
  • Added option s2s_dns_options to define DNS timeout and retries
  • Added option ERL_OPTIONS to ejabberdctl.cfg
  • Added option FIREWALL_WINDOW to ejabberdctl.cfg
  • Added option EJABBERD_PID_PATH to ejabberdctl.cfg
  • Deleted option user_max_messages of mod_offline
  • Check certfiles are readable on server start and listener start
  • Config file management mix file reading and sanity check
  • Include example PAM configuration file: ejabberd.pam
  • New ejabberd listener: ejabberd_stun
  • Support to bind the same port to multiple interfaces
  • New syntax to specify the IP address and IPv6 in listeners configuration. The old options {ip,{1,2,3,4}} and inet6 are supported even if they aren't documented.
  • New syntax to specify the network protocol: tcp or udp
  • Report error at startup if a listener module isn't available
  • Only listen in a port when actually ready to serve requests
  • In default config, only local accounts can create rooms and PubSub nodes
  • Core architecture:
  • More verbose error reporting for xml:element_to_string
  • Deliver messages when first presence is Invisible
  • Better log message when config file is not found
  • Include original timestamp on delayed presences
  • Crypto:
  • Do not ask certificate for client (c2s)
  • SSL code remove from ejabberd in favor of TLS
  • Support Zlib compression after STARTTLS encryption
  • tls v1 client hello
  • Documentation:
  • Document possible default MUC room options
  • Document service_check_from in the Guide
  • Document s2s_default_policy and s2s_host in the Guide
  • new command and guide instructions to change node name in a Mnesia database
  • ejabberd commands:
  • ejabberd commands: separate command definition and calling interface
  • access_commands restricts who can execute what commands and arguments
  • ejabberdctl script now displays help and categorization of commands
  • HTTP Binding and HTTP Polling:
  • HTTP-Bind: module optimization and clean-up
  • HTTP-Bind: allow configuration of max_inactivity timeout
  • HTTP-Poll: turn session timeout into a config file parameter
  • Jingle:
  • STUN server that facilitates the client-to-client negotiation process
  • LDAP:
  • Faster reconnection to LDAP servers
  • LDAP filter optimisation: Add ability to filter user in ejabberd and not LDAP
  • LDAP differentiates failed auth and unavailable auth service
  • Improve LDAP logging
  • LDAPS support using TLS.
  • Localization:
  • Use Gettext PO for translators, export to ejabberd MSG
  • Support translation files for additional projects
  • Most translations are updated to latest code
  • New translation to Greek language
  • Multi-User Chat (MUC):
  • Allow admins to send messages to rooms
  • Allow to store room description
  • Captcha support in MUC: the admin of a room can configure it to require participants to fill a captcha to join the room.
  • Limit number of characters in Room ID, Name and Description
  • Prevent unvoiced occupants from changing nick
  • Support Result Set Management (XEP-0059) for listing rooms
  • Support for decline of invitation to MUC room
  • mod_muc_log options: plaintext format; filename with only room name
  • Performance:
  • Run roster_get_jid_info only if privacy list has subscription or group item
  • Significant PubSub performance improvements
  • Publish-Subscribe:
  • Add nodetree filtering/authorization
  • Add subscription option support for collection nodes
  • Allow Multiple Subscriptions
  • Check option of the nodetree instead of checking configuration
  • Implement whitelist authorize and roster access model
  • Implicit item deletion is not notified when deleting node
  • Make PubSub x-data configuration form handles list value
  • Make default node name convention XEP-compatible, document usage of hierarchy
  • Node names are used verbatim, without separating by slash, unless a node plugin uses its own separator
  • Send authorization update event (XEP-0060, 8.6)
  • Support of collection node subscription options
  • Support ODBC storage. Experimental, needs more testing.
  • Relational databases:
  • Added MSSQL 2000 and 2005
  • Privacy rules storage in MySQL
  • Implement reliable ODBC transaction nesting
  • Source Package:
  • Default installation directories changed. Please see the upgrade notes below.
  • Allow more environment variable overrides in ejabberdctl
  • ChangeLog is not edited manually anymore; it's generated automatically.
  • Install the ejabberd Guide
  • Install the ejabberd include files
  • New option for the 'configure' script: --enable-user which installs ejabberd granting permission to manage it to a regular system user; no need to use root account to.
  • Only try to install epam if pam was enabled in configure script
  • Spool, config and log dirs: owner writes, group reads, others do nothing.
  • Provides an example ejabberd.init file
  • S2S:
  • Option to define s2s outgoing behaviour: IPv4, IPv6 and timeout
  • DNS timeout and retries, configurable with s2s_dns_options.
  • Shared rosters:
  • When a member is added/removed to group, send roster upgrade to group members
  • Users management:
  • When account is deleted, cancel presence subscription for all roster items
  • XEP Support:
  • Added XEP-0059 Result Set Management (for listing rooms)
  • Added XEP-0082 Date Time
  • Added XEP-0085 Chat State Notifications
  • Added XEP-0157 Contact Addresses for XMPP Services
  • Added XEP-0158 CAPTCHA Forms (in MUC rooms)
  • Added STUN server, for XEP-0176: Jingle ICE-UDP Transport Method
  • Added XEP-0199 XMPP Ping
  • Added XEP-0202 Entity Time
  • Added XEP-0203 Delayed Delivery
  • Added XEP-0227 Portable Import/Export Format for XMPP-IM Servers
  • Added XEP-0237 Roster Versioning
  • Web Admin:
  • Display the connection method of user sessions
  • Cross link of ejabberd users in the list of users and rosters
  • Improved the browsing menu: don't disappear when browsing a host or node
  • Include Last-Modified HTTP header in responses to allow caching
  • Make some Input areas multiline: options of listening ports and modules
  • Support PUT and DELETE methods in ejabberd_http
  • WebAdmin serves Guide and links to related sections
  • Web plugins:
  • mod_http_fileserver: new option directory_indices, and improve logging

New in ejabberd 2.0.5 (Apr 6, 2009)

  • Fix two problems introduced in ejabberd 2.0.4: subscription request produced many authorization requests with some clients and transports; and subscription requests were not stored for later delivery when receiver was offline.
  • Fix warning in expat_erl.c about implicit declaration of x_fix_buff
  • HTTP-Bind (BOSH): Fix a missing stream:error in the returned remote-stream-error stanza.

New in ejabberd 2.0.4 (Mar 13, 2009)

  • Ensure ID attribute in roster push is unique.
  • Authentication: Fix Anonymous auth when enabled with broken ODBC.
  • Authentication: Unquote correctly backslash in DIGEST-MD5 SASL responses.
  • Authentication: Cancel presence subscriptions on account deletion.
  • LDAP: Close a connection on tcp_error.
  • LDAP: Implemented queue for pending queries.
  • LDAP: On failure of LDAP connection, waiting is done on pending queue.
  • MUC: Owner of a password protected room must also provide the password.
  • MUC: Prevent XSS in MUC logs by linkifying only a few known protocols.
  • Privacy rules: Items are now processed in the specified order.
  • Privacy rules: Fix to correctly block subscription requests.
  • Proxy65: If ip option is not defined, take an IP address of a local hostname.
  • PubSub: Add roster subscription handling; send PEP events to all resources.
  • PubSub: Allow node creation without configure item.
  • PubSub: Requesting items on a node which exists, but empty returns an error.
  • PEP: Fix sending notifications to other domains and s2s.
  • S2S: Fix problem with encrypted connection to Gtalk and recent Openfire.
  • S2S: Workaround to get DNS SRV lookup to work on Windows machine.
  • Shared Roster Groups: Fix to not resend authorization request.
  • WebAdmin: Fix encryption problem for ejabberd_http after timeout.

New in ejabberd 2.0.3 (Jan 15, 2009)

  • Do not ask certificate for client (c2s).
  • Check digest-uri in SASL digest authentication.
  • Use send timeout to avoid locking on gen_tcp:send.
  • Fix ejabberd reconnection to database.
  • HTTP-Bind: handle wrong order of packets.
  • MUC: Improved traffic regulation management.
  • PubSub: Several bugfixes and improvements for best coverage of XEP-0060 v1.12 .
  • Shared Roster Groups: push immediately membership changes.
  • Rotate also sasl.log on "reopen-log" command.
  • Binary Windows installer: better detect "Error running Post Install Script".

New in ejabberd 2.0.2 (Aug 30, 2008)

  • Anti-abuse feature: client blacklist support by IP.
  • Guide: new section Securing ejabberd; improved usability.
  • LDAP filter optimisation: ability to filter user in ejabberd and not LDAP.
  • MUC improvements: room options to restrict visitors; broadcast reasons.
  • Privacy rules: fix MySQL storage.
  • Pub/Sub and PEP: many improvements in implementation and protocol compliance.
  • Proxy65: send valid SOCKS5 reply (removed support for Psi < 0.10).
  • Web server embedded: better support for HTTPS.
  • Binary installers: SMP on Windows; don't remove config when uninstalling.

New in ejabberd 2.0.1 (May 23, 2008)

  • Erlang/OTP R12B-2 support.
  • Better LDAP handling.
  • PubSub bugfixes.
  • Documentation improvements.
  • In-band registration limitation per IP.
  • S2S improvement.

New in ejabberd 2.0 RC1 (Jan 21, 2008)

  • Clustering and Architecture:
  • New front-end and back-end cluster architecture for better scalability and robustness. Back-end nodes are able to run a fully fault-tolerant XMPP router and services, but you can now deploy many front-end nodes to share the load without needing to synchronize any state with the back-ends.
  • All components now run in cluster mode (For example, Multi-User chat service and file transfer proxy).
  • New load balancing algorithm to support Multi-User chat and gateways clustering. More generally it supports any external component load balancing.
  • ejabberd watchdog to receive warning on suspicious resources consumption.
  • Traffic shapers are now supported on components. This protect ejabberd from components and gateways abuses.
  • Publish and Subscribe:
  • Complete rewrite of the PubSub module. The new PubSub module is plugin-based, allowing developers to create new nodes type. Any application can be plugged to ejabberd and can provide rich presence as a pubsub plugin.
  • Personal Eventing via Pubsub support (XEP-0163). This module is implemented as a PubSub service. It supports user mood (XEP-107), User Tune (XEP-118), user location (XEP-0080) or user avatar (XEP-0084) for example.
  • Server to Server (s2s):
  • More robust code with connection timeout implementation.
  • Support for multiple s2s connections per domain.
  • s2s whitelist and blacklist support.
  • s2s retrial interval.
  • LDAP:
  • Many enterprise-class enhancements such as better behaviour under heavy load.
  • Support for LDAP servers pool.
  • Simplified use of virtual hosting with LDAP with domain substitution in config.
  • Ability to match on several userid attibutes.
  • Multi-user chat:
  • Clustering and load balancing support.
  • Ability to define default room configuration in ejabberd config file.
  • Many anti abuse features have been added:
  • New ACL to limit the creation of persistent room to autorized users.
  • Ability to define the maximum number of users per room.
  • Limitation of the rate of message and presence packets.
  • Limitation of the maximum number of room a user can join at the same time.
  • File transfer:
  • XEP-0065 - Proxy65 file transfer proxy. The proxy can run in cluster mode.
  • Authentication:
  • PAM (Pluggable Authentication Modules) support on *nix systems.
  • External Authentication protocol is now fully documented.
  • Web client support:
  • XEP-0124 - BOSH support: BOSH (Bidirectional-streams Over Synchronous HTTP) was formerly known as "HTTP binding". It provides an efficient alternative to HTTP polling for scalable Web based chat solutions.
  • HTTP module can now serve static documents (with mod_http_fileserver). It is needed for high-performance Web2.0 chat / IM application. System administrators can now avoid using a proxy (like Apache) that handles much less simultaneous than ejabberd HTTP module.
  • Added limitations enforcement on HTTP poll and HTTP bind modules (bandwidth, packet size).
  • System administration:
  • XEP-0133 - Service administration support. System administrators can now perform lot of ejabberd related admin tasks from their XMPP client, through adhoc commands.
  • Dynamic log levels: Improved logging with more log levels. You can now change the loglevel at run time. No performance penalty is involved when less verbose levels are used.
  • Better command-line tool, with more options available.
  • Localization:
  • ejabberd is now available in 22 languages: Catalan, Chinese, Czech, Dutch, English, French, Galicia, German, Italian, Japanese, Polish, Portuguese, Portuguese (Brazil), Russian, Slovak, Spanish, Swedish, Thai, Turkish, Ukrainian, Vietnamese, Wallon.
  • Build and Installer:
  • Many launch script improvements.
  • New translations. The binary installer is now available in Chinese, Dutch, English, French, German, Spanish, Russian.
  • Makefile now implements uninstall command.
  • Full MacOSX compliance in Makefile.
  • Configure script is clever at finding libraries in unusual places.
  • Development API:
  • Several hooks have been added for module developers (most notably presence related hooks).
  • HTTP request handler to write HTTP based plugins.
  • Manage connections IP address.
  • Bugfixes:
  • ejabberd 2.0 also fixes numerous small bugs smile Read the full changelog for details.

New in ejabberd 2.0 RC1 (Jan 21, 2008)

  • Clustering and Architecture:
  • New front-end and back-end cluster architecture for better scalability and robustness. Back-end nodes are able to run a fully fault-tolerant XMPP router and services, but you can now deploy many front-end nodes to share the load without needing to synchronize any state with the back-ends.
  • All components now run in cluster mode (For example, Multi-User chat service and file transfer proxy).
  • New load balancing algorithm to support Multi-User chat and gateways clustering. More generally it supports any external component load balancing.
  • ejabberd watchdog to receive warning on suspicious resources consumption.
  • Traffic shapers are now supported on components. This protect ejabberd from components and gateways abuses.
  • Publish and Subscribe:
  • Complete rewrite of the PubSub module. The new PubSub module is plugin-based, allowing developers to create new nodes type. Any application can be plugged to ejabberd and can provide rich presence as a pubsub plugin.
  • Personal Eventing via Pubsub support (XEP-0163). This module is implemented as a PubSub service. It supports user mood (XEP-107), User Tune (XEP-118), user location (XEP-0080) or user avatar (XEP-0084) for example.
  • Server to Server (s2s):
  • More robust code with connection timeout implementation.
  • Support for multiple s2s connections per domain.
  • s2s whitelist and blacklist support.
  • s2s retrial interval.
  • LDAP:
  • Many enterprise-class enhancements such as better behaviour under heavy load.
  • Support for LDAP servers pool.
  • Simplified use of virtual hosting with LDAP with domain substitution in config.
  • Ability to match on several userid attibutes.
  • Multi-user chat:
  • Clustering and load balancing support.
  • Ability to define default room configuration in ejabberd config file.
  • Many anti abuse features have been added:
  • New ACL to limit the creation of persistent room to autorized users.
  • Ability to define the maximum number of users per room.
  • Limitation of the rate of message and presence packets.
  • Limitation of the maximum number of room a user can join at the same time.
  • File transfer:
  • XEP-0065 - Proxy65 file transfer proxy. The proxy can run in cluster mode.
  • Authentication:
  • PAM (Pluggable Authentication Modules) support on *nix systems.
  • External Authentication protocol is now fully documented.
  • Web client support:
  • XEP-0124 - BOSH support: BOSH (Bidirectional-streams Over Synchronous HTTP) was formerly known as "HTTP binding". It provides an efficient alternative to HTTP polling for scalable Web based chat solutions.
  • HTTP module can now serve static documents (with mod_http_fileserver). It is needed for high-performance Web2.0 chat / IM application. System administrators can now avoid using a proxy (like Apache) that handles much less simultaneous than ejabberd HTTP module.
  • Added limitations enforcement on HTTP poll and HTTP bind modules (bandwidth, packet size).
  • System administration:
  • XEP-0133 - Service administration support. System administrators can now perform lot of ejabberd related admin tasks from their XMPP client, through adhoc commands.
  • Dynamic log levels: Improved logging with more log levels. You can now change the loglevel at run time. No performance penalty is involved when less verbose levels are used.
  • Better command-line tool, with more options available.
  • Localization:
  • ejabberd is now available in 22 languages: Catalan, Chinese, Czech, Dutch, English, French, Galicia, German, Italian, Japanese, Polish, Portuguese, Portuguese (Brazil), Russian, Slovak, Spanish, Swedish, Thai, Turkish, Ukrainian, Vietnamese, Wallon.
  • Build and Installer:
  • Many launch script improvements.
  • New translations. The binary installer is now available in Chinese, Dutch, English, French, German, Spanish, Russian.
  • Makefile now implements uninstall command.
  • Full MacOSX compliance in Makefile.
  • Configure script is clever at finding libraries in unusual places.
  • Development API:
  • Several hooks have been added for module developers (most notably presence related hooks).
  • HTTP request handler to write HTTP based plugins.
  • Manage connections IP address.
  • Bugfixes:
  • ejabberd 2.0 also fixes numerous small bugs smile Read the full changelog for details.

New in ejabberd 2.0b1 (Dec 27, 2007)

  • Clustering and Architecture:
  • New front-end and back-end cluster architecture for better scalability and robustness. Back-end nodes are able to run a fully fault-tolerant XMPP router and services, but you can now deploy many front-end nodes to share the load without needing to synchronize any state with the back-ends.
  • All components now run in cluster mode (For example, Multi-User chat service and file transfer proxy).
  • New load balancing algorithm to support Multi-User chat and gateways clustering. More generally it supports any external component load balancing.
  • ejabberd watchdog to receive warning on suspicious resources consumption.
  • Traffic shapers are now supported on components. This protect ejabberd from components and gateways abuses.
  • Publish and Subscribe:
  • Complete rewrite of the PubSub module. The new PubSub module is plugin-based, allowing developers to create new nodes type. Any application can be plugged to ejabberd and can provide rich presence as a pubsub plugin.
  • Personal Eventing via Pubsub support (XEP-0163). This module is implemented as a PubSub service. It supports user mood (XEP-107), User Tune (XEP-118), user location (XEP-0080) or user avatar (XEP-0084) for example.
  • Server to Server (s2s):
  • More robust code with connection timeout implementation.
  • Support for multiple s2s connections per domain.
  • s2s whitelist and blacklist support.
  • s2s retrial interval.
  • LDAP:
  • Many enterprise-class enhancements such as better behaviour under heavy load.
  • Support for LDAP servers pool.
  • Simplified use of virtual hosting with LDAP with domain substitution in config.
  • Ability to match on several userid attibutes.
  • Multi-user chat:
  • Clustering and load balancing support.
  • Ability to define default room configuration in ejabberd config file.
  • Many anti abuse features have been added:
  • New ACL to limit the creation of persistent room to autorized users.
  • Ability to define the maximum number of users per room.
  • Limitation of the rate of message and presence packets.
  • Limitation of the maximum number of room a user can join at the same time.
  • File transfer:
  • XEP-0065 - Proxy65 file transfer proxy. The proxy can run in cluster mode.
  • Authentication:
  • PAM (Pluggable Authentication Modules) support on *nix systems.
  • External Authentication protocol is now fully documented.
  • Web client support:
  • XEP-0124 - BOSH support: BOSH (Bidirectional-streams Over Synchronous HTTP) was formerly known as "HTTP binding". It provides an efficient alternative to HTTP polling for scalable Web based chat solutions.
  • HTTP module can now serve static documents (with mod_http_fileserver). It is needed for high-performance Web2.0 chat / IM application. System administrators can now avoid using a proxy (like Apache) that handles much less simultaneous than ejabberd HTTP module.
  • Added limitations enforcement on HTTP poll and HTTP bind modules (bandwidth, packet size).
  • System administration:
  • XEP-0133 - Service administration support. System administrators can now perform lot of ejabberd related admin tasks from their XMPP client, through adhoc commands.
  • Dynamic log levels: Improved logging with more log levels. You can now change the loglevel at run time. No performance penalty is involved when less verbose levels are used.
  • Better command-line tool, with more options available.
  • Localization:
  • ejabberd is now available in 22 languages: Catalan, Chinese, Czech, Dutch, English, French, Galicia, German, Italian, Japanese, Polish, Portuguese, Portuguese (Brazil), Russian, Slovak, Spanish, Swedish, Thai, Turkish, Ukrainian, Vietnamese, Wallon.
  • Build and Installer:
  • Many launch script improvements.
  • New translations. The binary installer is now available in Chinese, Dutch, English, French, German, Spanish, Russian.
  • Makefile now implements uninstall command.
  • Full MacOSX compliance in Makefile.
  • Configure script is clever at finding libraries in unusual places.
  • Development API:
  • Several hooks have been added for module developers (most notably presence related hooks).
  • HTTP request handler to write HTTP based plugins.
  • Manage connections IP address.
  • Bugfixes:
  • ejabberd 2.0 also fixes numerous small bugs