upstream changes:
-----------------
The new ejabberd 21.04 release includes many bugfixes and a few improvements.
This release includes minor improvements to fully support Erlang/OTP 24 and
Rebar3. At the same time, it maintains support back to the old Erlang/OTP 19.3
and Rebar2.
upstream changes:
-----------------
Miscellaneous:
log_rotate_size option: Fix handling of ‘infinity’ value
mod_time: Fix invalid timezone
Auth JWT: New check_decoded_jwt hook runs the default JWT verifier
MUC: Allow non-occupant non-subscribed service admin send private MUC message
MUC: New max_password and max_captcha_whitelist options
OAth: New oauth_cache_rest_failure_life_time option
PEP: Skip reading pep nodes that we know won’t be requested due to caps
SQL: Add sql script to migrate mysql from old schema to new
SQL: Don’t use REPLACE for upsert when there are “-” fields.
Shared Rosters LDAP: Add multi-domain support (and flexibility)
Sqlite3: Fix dependency version
Stun: Block loopback addresses by default
Several documentation fixes and clarifications
Commands:
decide_room: Use better fallback value for room activity time when skipping room
delete_old_message: Fix when using sqlite spool table
module_install: Make ext_mod compile module with debug_info flags
room_unused_*: Don’t fetch subscribers list
send_message: Don’t include empty in messages
set_room_affiliation: Validate affiliations
Running:
Docker: New Dockerfile and devcontainer.json
New ‘ejabberdctl foreground-quiet’
Systemd: Allow for listening on privileged ports
Systemd: Integrate nicely with systemd
Translations:
Moved gettext PO files to a new ejabberd-po repository
Improved several translations: Catalan, Chinese, German, Greek, Indonesian, Norwegian, Portuguese (Brazil), Spanish.
pkgsrc changes:
---------------
* The spool directory is set to ${VARBASE}/spool/ejabberd by pkgsrc but
ejabberdctl used ${VARBASE}/lib/ejabberd
* Bump revision
pkgsrc changes:
---------------
* This update is mainly justified by the fact that OTS 23 breaks a lot
of dependencies which are very old.
upstream changes:
-----------------
Version 20.12
Add support for SCRAM-SHA-{256,512}-{PLUS} authentication
Don't use same value in cache for user don't exist and wrong password
outgoing_s2s_ipv*_address: New options to set ipv4/ipv6 outbound s2s out interface
s2s_send_packet: this hook now filters outgoing s2s stanzas
start_room: new hook runs when a room process is started
check_decoded_jwt: new hook to check decoded JWT after success authentication
Admin
Docker: Fix DB initialization
New sql_odbc_driver option: choose the mssql ODBC driver
Rebar3: Fully supported. Enable with ./configure --with-rebar=/path/to/rebar3
systemd: start ejabberd in foreground
Modules:
MAM: Make sure that jid used as base in mam xml_compress is bare
MAM: Support for MAM Flipped Pages
MUC: Always show MucSub subscribers nicks
MUC: Don't forget not-persistent rooms in load_permanent_rooms
MUC Admin: Better error reporting
MUC Admin: Fix commands with hibernated rooms
MUC Admin: Many improvements in rooms_unused_list/destroy
MUC Admin: create_room_with_opts Store options only if room starts
Pubsub: Remove 'dag' node plugin documentation
Push: Fix API call return type on error
Push: Support cache config changes on reload
Register: Allow for account-removal-only setup again
Roster: Make roster subscriptions work better with invalid roster state in db
Vcard: Fix vCard search by User when using Mnesia
WebAdmin: Allow vhost admins to view WebAdmin menus
WebAdmin: Don't do double utf-8 conversion on translated strings
WebAdmin: Mark dangerous buttons with CSS
WebSocket: Make websocket send put back pressure on c2s process
Version 20.07
Changes in this version
Add support for using unix sockets in listeners.
Make this version compatible with erlang R23
Make room permissions checks more strict for subscribers
Fix problem with muc rooms crashing when using muc logger with some locales
Limit stat calls that logger module issues
Don't throw errors when using user_regexp acl rule and having non-matching host
Fix problem with leaving old data when updating shared rosters
Fix edge case that caused failure of resuming old sessions with stream management.
Fix crash when room that was started with loging enabled was later changed to logging disabled
Increase default shaper limits (this should help with delays for clients that are using jingle)
Fix couple compatibility problems which prevented working on erlang R19
Fix sending presence unavailable when session terminates for clients that only send directed presences (helps with sometimes not leaving muc rooms on disconnect).
Prevent supervisor errors for sockets that were closed before they were passed to handler modules
Make stun module work better with ipv6 addresses
Version 20.03
Changes in this version
Add support of ssl connection when connection to mysql database (configured with sql_ssl: true option)
Experimental support for cockroachdb when configured with postgres connector
Add cache and optimize queries issued by mod_shared_roster, this should greatly improve performance of this module when used with sql backend
Fix problem with accessing webadmin
Make webadmin work even when url is missing trailing slash
When compiling external modules with ext_mod, use flags that were detected during compilation of ejabberd
Make config changed to ldap options be updated when issued reload_config command
Fix room_empty_destory command
Fix reporting errors in send_stanza command when xml passed to it couldn't be passed correctly
Version 20.02
Changes in this version
Fix problems when trying to use string format with unicode values directly in xmpp nodes
Add missing oauth_client table declaration in lite.new.sql
Improve compatibility with CocroachDB
Fix importing of piefxis files that did use scram passwords
Fix importing of piefxis files that had multiple includes in them
Update jiffy dependency
Allow storage of emojis when using mssql database (Thanks to Christoph Scholz)
Make ejabberd_auth_http be able to use auth_opts
Make custom_headers options in http modules correctly override built-in values
Fix return value of reload_config and dump_config commands
Version 20.01
New features
Implement OAUTH authentication in mqtt
Make logging infrastructure use new logger introduced in Erlang (requires OTP22)
New configuration parser/validator
Initial work on being able to use CockroachDB as database backend
Add gc command
Add option to disable using prepared statements on Postgresql
Implement routine for converting password to SCRAM format for all backends not only SQL
Add infrastructure for having module documentation directly in individual module source code
Generate man page automaticaly
Implement copy feature in mod_carboncopy
Fixes
Make webadmin work with configurable paths
Fix handling of result in xmlrpc module
Make webadmin work even when accessed through not declared domain
Better error reporting in xmlrpc
Limit ammount of results returned by disco queries to pubsub nodes
Improve validation of configured JWT keys
Fix race condition in Redis/SQL startup
Fix loading order of third party modules
Fix reloading of ACL rules
Make account removal requests properly route response
Improve handling of malformed inputs in send_message command
Omit push notification if storing message in offline storage failed
Fix crash in stream management when timeout was not set
Version 19.09
Admin
The minimum required Erlang/OTP version is now 19.3
Fix API call using OAuth (#2982)
Rename MUC command arguments from Host to Service (#2976)
Webadmin
Don't treat 'Host' header as a virtual XMPP host (#2989)
Fix some links to Guide in WebAdmin and add new ones (#3003)
Use select fields to input host in WebAdmin Backup (#3000)
Check account auth provided in WebAdmin is a local host (#3000)
ACME
Improve ACME implementation
Fix IDA support in ACME requests
Fix unicode formatting in ACME module
Log an error message on IDNA failure
Support IDN hostnames in ACME requests
Don't attempt to create ACME directory on ejabberd startup
Don't allow requesting certificates for localhost or IP-like domains
Don't auto request certificate for localhost and IP-like domains
Add listener for ACME challenge in example config
Authentication
JWT-only authentication for some users (#3012)
MUC
Apply default role after revoking admin affiliation (#3023)
Custom exit message is not broadcast (#3004)
Revert "Affiliations other than admin and owner cannot invite to members_only rooms" (#2987)
When join new room with password, set pass and password_protected (#2668)
Improve rooms_* commands to accept 'global' as MUC service argument (#2976)
Rename MUC command arguments from Host to Service (#2976)
SQL
Fix transactions for Microsoft SQL Server (#2978)
Spawn SQL connections on demand only
Misc
Add support for XEP-0328: JID Prep
Added gsfonts for captcha
Log Mnesia table type on creation
Replicate Mnesia 'bosh' table when nodes are joined
Fix certificate selection for s2s (#3015)
Provide meaningful error when adding non-local users to shared roster (#3000)
Websocket: don't treat 'Host' header as a virtual XMPP host (#2989)
Fix sm ack related c2s error (#2984)
Don't hide the reason why c2s connection has failed
Unicode support
Correctly handle unicode in log messages
Fix unicode processing in ejabberd.yml
Version 19.08
Administration
Improve ejabberd halting procedure
Process unexpected erlang messages uniformly: logging a warning
mod_configure: Remove modules management
Configuration
Use new configuration validator
ejabberd_http: Use correct virtual host when consulting trusted_proxies
Fix Elixir modules detection in the configuration file
Make option 'validate_stream' global
Allow multiple definitions of host_config and append_host_config
Introduce option 'captcha_url'
mod_stream_mgmt: Allow flexible timeout format
mod_mqtt: Allow flexible timeout format in session_expiry option
Misc
Fix SQL connections leakage
New authentication method using JWT tokens
extauth: Add 'certauth' command
Improve SQL pool logic
Add and improve type specs
Improve extraction of translated strings
Improve error handling/reporting when loading language translations
Improve hooks validator and fix bugs related to hooks registration
Gracefully close inbound s2s connections
mod_mqtt: Fix usage of TLS
mod_offline: Make count_offline_messages cache work when using mam for storage
mod_privacy: Don't attempt to query 'undefined' active list
mod_privacy: Fix race condition
MUC
Add code for hibernating inactive muc_room processes
Improve handling of unexpected iq in mod_muc_room
Attach mod_muc_room processes to a supervisor
Restore room when receiving message or generic iq for not started room
Distribute routing of MUC messages accross all CPU cores
PubSub
Fix pending nodes retrieval for SQL backend
Check access_model when publishing PEP
Remove deprecated pubsub plugins
Expose access_model and publish_model in pubsub#metadata
Version 19.05
Admin
The minimum required Erlang/OTP version is now 19.1
Provide a suggestion when unknown command, module, option or request handler is detected
Deprecate some listening options: captcha, register, web_admin, http_bind and xmlrpc
Add commands to get Mnesia info: mnesia_info and mnesia_table_info
Fix Register command to respect mod_register's Access option
Fixes in Prosody import: privacy and rooms
Remove TLS options from the example config
Improve request_handlers validator
Fix syntax in example Elixir config file
Auth
Correctly support cache tags in ejabberd_auth
Don't process failed EXTERNAL authentication by mod_fail2ban
Don't call to mod_register when it's not loaded
Make anonymous auth don't {de}register user when there are other resources
Developer
Rename listening callback from start/2 to start/3
New hook called when room gets destroyed: room_destroyed
New hooks for tracking mucsub subscriptions changes: muc_subscribed, muc_unsubscribed
Make static hooks analyzer working again
MUC
Service admins are allowed to recreate room even if archiv is nonempty
New option user_mucsub_from_muc_archive
Avoid late arrival of get_disco_item response
Handle get_subscribed_rooms call from mod_muc_room pid
Fix room state cleanup from db on change of persistent option change
Make get_subscribed_rooms work even for non-persistant rooms
Allow non-moderator subscribers to get list of room subscribers
Offline
New option bounce_groupchat: make it not bounce mucsub/groupchat messages
New option use_mam_for_storage: fetch data from mam instead of spool table
When applying limit of max msgs in spool check only spool size
Do not store mucsub wrapped messages with no-store hint in offline storage
Always store ActivityMarker messages
Don't issue count/message fetch queries for offline from mam when not needed
Properly handle infinity as max number of message in mam offline storage
Sort messages by stanza_id when using mam storage in mod_offline
Return correct value from count_offline_messages with mam storage option
Make mod_offline put msg ignored by mam in spool when mam storage is on
SQL:
Add SQL schemas for MQTT tables
Report better errors on SQL terms decode failure
Fix PostgreSQL compatibility in mod_offline_sql:remove_old_messages
Fix handling of list arguments on pgsql
Preliminary support for SQL in process_rosteritems command
Tests
Add tests for user mucsub mam from muc mam
Add tests for offline with mam storage
Add tests for offline use_mam_for_storage
Initial Docker environment to run ejabberd test suite
Test offline:use_mam_for_storage, mam:user_mucsub_from_muc_archive used together
Websocket
Add WebSockets support to mod_mqtt
Return "Bad request" error when origin in websocket connection doesn't match
Fix RFC6454 violation on websocket connection when validating Origin header
Origin header validation on websocket connection
Other modules
mod_adhoc: Use xml:lang from stanza when it's missing in element
mod_announce: Add 'sessionid' attribute when required
mod_bosh: Don't put duplicate polling attribute in bosh payload
mod_http_api: Improve argument error messages and log messages
mod_http_upload: Feed whole image to eimp:identify/1
mod_http_upload: Log nicer warning on unknown host
mod_http_upload: Case-insensitive host comparison
mod_mqtt: Support other socket modules
mod_push: Check for payload in encrypted messages
Version 19.02
Admin
Fix in configure.ac the Erlang/OTP version: from 17.5 to 19.0
reload_config command: Fix crash when sql_pool_size option is used
reload_config command: Fix crash when SQL is not configured
rooms_empty_destroy command: Several fixes to behave more conservative
Fix serverhost->host parameter name for muc_(un)register_nick API
Configuration
Allow specifying tag for listener for api_permission purposes
Change default ciphers to intermediate
Define default ciphers/protocol_option in example config
Don't crash on malformed 'modules' section
mod_mam: New option clear_archive_on_room_destroy to prevent archive removal on room destroy
mod_mam: New option access_preferences to restrict who can modify the MAM preferences
mod_muc: New option access_mam to restrict who can modify that room option
mod_offline: New option store_groupchat to allow storing group chat messages
Core
Add MQTT protocol support
Fix (un)setting of priority
Use OTP application startup infrastructure for starting dependencies
Improve starting order of several dependencies
MAM
mod_mam_mnesia/sql: Improve check for empty archive
disallow room creation if archive not empty and clear_archive_on_room_destroy is false
allow check if archive is empty for or user or room
Additional checks for database failures
MUC
Make sure that room_destroyed is called even when some code throws in terminate
Update muc room state after adding extra access field to it
MUC/Sub: Send mucsub subscriber notification events with from set to room jid
Shared Roster
Don't perform roster push for non-local contacts
Handle versioning result when shared roster group has remote account
Fix SQL queries
Miscelanea
CAPTCHA: Add no-store hint to CAPTCHA challenge stanzas
HTTP: Reject http_api request with malformed Authentication header
mod_carboncopy: Don't lose carbons on presence change or session resumption
mod_mix: Fix submission-id and channel resource
mod_ping: Fix ping IQ reply/timeout processing (17.x regression)
mod_private: Hardcode item ID for PEP bookmarks
mod_push: Improve notification error handling
PIEFXIS: Fix user export when password is scrammed
Prosody: Improve import of roster items, rooms and attributes
Translations: fixed "make translations"
WebAdmin: Fix support to restart module with new options
Version 18.12
MAM data store compression
Proxy protocol support (http://www.haproxy.org/download/1.8/doc/proxy-protocol.txt)
MUC Self-Ping optimization (XEP-0410)
Bookmarks conversion (XEP-0411)
Admin
- Stop ejabberd initialization on invalid/unknown options
- Add new options for OOM watchdog: oom_watermark and oom_queue
- Add ability to modify version string
- Add option ext_api_headers to define REST API custom headers
- Fix Erlang limits in ejabberdctl.cfg.example to reflect current
situation
- Make trusted_proxied ejabberd_http option accept ip masks
- Teach acl ip matching about ipv4 mapped ipv6 addresses
- Removed watchdog_admins option from config, as has no effect anymore
- Improve logging of external authentication failures
- ejabberd_auth: Don't use cache if the option is disabled
- Make connected_users_info and user_sessions_info DB-agnostic
Core
- Support SASL PLAIN by xmpp_stream_out
- Add Resource Binding support to xmpp_stream_out
- Improve robustness of external authentication backends
- Don't use 'unsupported-version' inside SM element
- Generate SASL failures on unencrypted connections only for s2s
- Fix reset_stream in websocket using pre-rfc protocol
- Don't crash in bosh when we receive request with RID < prev_rid
- Get rid of all calls to jlib.erl module
- Support IPv6 connections for PostgreSQL, MySQL and LDAP
- Fix authentication for usernames containing uppercase characters
- Optimize HTTP requests memory usage
- PKIX: Just warn instead of ignore a certificate containing no domain
names
- PKIX: Don't replace valid certificates with invalid ones
Modules
- Log modules startup
- mod_disco: Advertise disco#info and disco#items features
- mod_irc: is moved away from ejabberd repo to ejabberd-contrib
- mod_mam: Don't replace existing stanza ID
- HTTP upload: Generate HTTP Upload form using xdata codec
- HTTP upload: Improve error formatting
- HTTP upload: Return detailed error if HTTP upload is too large
MUC
- Always display room's xdata in disco#info
- Display muc#roomconfig_changesubject in room's disco#info
- Render roomname, allowinvites and allowpm in room disco#info
- Support for roomconfig_lang/roominfo_lang
- mod_muc_sql: Fix export to SQL
Push
- Omit summary for outgoing messages
- Further improve handling of carbons
- Also include sender/body for carbons
- Include a static body text by default
- keepalive: Increase default timeout to 3 days
- SQL: Check 'max_user_sessions' limit
- Don't produce a crash dump during intentional exit
- ejabberdctl: fix parameter parsing
- New hook 'component_send_packet' for sending packet from component
- gen_mod: Carefully validate options list
- gen_mod: Support global module processes
- gen_mod: Remove frontend process support
- gen_mod: Don't crash on invalid module's sub-options
- config: move section about direct-tls for c2s just under regular c2s
config
- fast_tls: Clear cache on configuration reload
- http: Add support for PATCH http method
- mod_client_state: Add 'csi_activity' hook
- mod_http_upload: Accept characters of any script
- mod_http_upload: Add MIME type for M4A files
- mod_mam: Add commands for cleaning up archives for a given user
- mod_muc: Let a MUC room to route presences from its bare JID
- mod_muc: Introduce new mod_muc option: access_register
- mod_muc_room: Add stubs for affiliation-specific backend callbacks
- mod_muc_log: Fix Code format when logging a MUC room kick/ban
- mod_multicast: Improved
- mod_push: New options include_sender and include_body
- mod_push: Don't notify on stream errors
- mod_push_keepalive: Reset timeout on messages only
- mod_roster: Use 'lserver' for configuration lookup
- mod_vcard_ldap: Fix returning value from mod_vcard_ldap's search()
callback
- mod_pubsub: Fix notification payload generated by pubsub
- mod_pubsub: Improve pubsub#itemreply implementation
- mod_pubsub: PubSub purge_node must use a transaction
- Utils: Use httpc directly instead of using p1_http wrapper
- Rest: Add flexibility on rest url config
- SystemMonitors: Get rid of useless memory/disk usage warnings
- WebSocket: Pass access option from websocket to c2s
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
- Fix TLS driver memory management
- Fix privacy_set command
- Report 'fs' support as unavailable on SunOS
- Let mod_block_strangers bounce an error when a message is rejected
pkgsrc
- Change installation home for Erlang libs to prevent build conflicts
with previous versions that may be present on the system, as
encountered by @gdt.
Core
- Rewrite ejabberd system monitor for efficiency
- Fix incoming XMPP processing order
- Use xmpp:try_subtag/2 wherever possible
- Better process subtag decoding errors
- Only allow compression after SASL as per XEP-0170
- Don't crash on unexpected XML events
- Fix session mnesia table cleanup
- Don't let privacy list prevent local roster update
Encryption
- Rely on Server Name Indication for incoming Direct-TLS connections
- Speedup certificate chains creation and validation
- Log warning on empty wildcard paths
- Don't call pkix_is_self_signed/1 too frequently
- Eat less memory during building certificates graph
- Avoid infinite loop between self-signed certs
- Fix function clause on filelib:wildcard/1
- Use ejabberd_pkix API in mod_sip
- Move 'certfile' based options in a single place
Groupchat
- Don't crash on malformed IQ
- Include x tag in presence errors related to nick change
- Include 110 status on shutdown
- Improve muc#roominfo and muc#roomconfig forms
- mod_mam: Never store MUC messages in user archives
PubSub
- Fix num_subscribers on node metadata
- Fix send last items on initial presence
- Send last PEP items to owner on initial presence
- Support pubsub#publish-options PRECONDITIONs
- Add pubsub#multi-items to features list (Support XEP-0060 v1.14)
- Add missing Nidx building records from sql result
- Don't force RSM in get_items when max_items is not provided
Admin
- Introduce option 'ca_file'
- Set executable permission on mac_listener when installing
- Use /bin/sh as the explicit shell when using su in ejabberdctl.
- Windows does not have /tmp, fallback to $HOME/conf for ODBC
configuration files
Logging
- Change loglevel of TLS failures
- Log a warning when a disk is almost full
- Disable default alarm handler
- Handle also process_memory_high_watermark alarm
- Kill and restart lager when it's overloaded
- Avoid excessive logging of SQL failures
Commands
- New muc_online_room_by_regex command
- Fix race between join_cluster and ejabberd_mnesia
- Fix commands rooms_unused_list and _destroy
- send_direct_invitations accepts only user jids
- ejabberd_sm: Fix get_session_sid/3
SQL
- Add missing server_host column in pg.new.sql
- Add new schema for MySQL and Sqlite
- Fix SQL serialization
Installer
- MacOS installer is signed. You can now easily install ejabberd on
your Mac.
Build
- Compile sql_pt early
- Binary installer uses OTP 20.2
New features
- ACME Support
- Introduce 'certfiles' global option
- Use new API for IQ routing
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
Admin
- Harden ejabberdctl
- Fix ejabberdctl quoting when using iex
- Call earlier deps configure scripts during compilation
- Fix iexdebug and iexlive commands
- Quote $PEER in ping command to avoid hostnames containing "-" being
interpreted as arithmetic
- Docker: Sync containers from rroemhild and add instructions in
README
- Use eimp instead of ImageMagick calls for thumbnails creation
- Add forgotten caching options to the validator
- Fix 'make install' to work with new output from rebar list-deps
- Rewrite muc_register_nick and muc_unregister_nick to be DB
independent
- WebAdmin: Fix deletion of multiple offline messages
Encryption
- Add support for XEP-0368 in outgoing s2s: SRV records for XMPP over
TLS
- Deprecate s2s_use_starttls: required_trusted
- Don't attempt to access(2) a certificate file
- Let 'domain_certfile' take higher precedence instead of s2s_certfile
or c2s_certfile
Databases
- mysql.sql: Use multi-column index on username/ID
- Use forked repo of Riak Erlang client to support OTP20
Modules
- mod_avatar: New module with support for legacy and modern clients
- mod_block_strangers: Introduce option 'allow_transports'
- mod_block_strangers: Block messages from strangers before
mod_mam/mod_offline processing
- mod_http_upload: Don't ignore 'custom_headers'
- mod_muc: Improve presence-error and unavailable of multi-session
occupants
- mod_multicast: Fix start and reading of configured limits
- mod_mam: Simplify check for anon MUC JID filtering
- mod_mam: Refuse filtering anon MUC queries by JID
- mod_privacy: Explicitly match against
- mod_register: Introduce 'redirect_url' option
- mod_stream_mgmt: Delete 'c2s_init' hook
- mod_vcard_xupdate: Also replace vcard-x-update in direct presences
PubSub
- Fix get_items/get_item calls
- Add correct order when requesting all items
- Implement '6.5.7 Requesting the Most Recent Items'
- Fix RSM support on SQL
- Add RSM support on mnesia
- Fix node_options: default options only apply on first plugin
- Broadcast updated node configuration
- Enforce controls on publish and delete items
Miscelanea
- Preserve correct order of deserialized XML elements
- Suppress push notifications for online clients
- Extract strings and prepare translation files works again
Core
- Erlang/OTP 17.5 or higher is required, and 20 is now supported
- Make ejabberd_cluster modular
- Replace gen_fsm with p1_fsm to avoid warnings in OTP20+
- Fix clustering table reg_users_counter
- ext_mod: Update spec from custom and allow modules dependencies
- extauth.py: Fix to support : in passwords
- Set high water mark in lager for all backends
- Fix old route record in mnesia’s route table haven’t been remove
when restarting in some cases
- ejabberd_cluster*.erl: Add copyright and fix description
- Add support of rfc6120 section 4.9.3.16 on node shutdown
Configuration
- ejabberd_c2s: Fix priority of ‘certfile’ option
- Introduce ‘hosts’ modules option
- Fix ERLANG_OPTS, INET_DIST_INTERFACE and FIREWALL_WINDOW option
- Remove unused ‘managers’ option, related to the deferred XEP-0321
Commands
- Fix errors when running ejabberdctl as root
- Fix set_presence command to work in recent ejabberd
- Rename stop_all_connections to stop_s2s_connections for consistency
- Change policy of user_resources command, from user to admin
- Remove old command calling interface
- Describe more command arguments and results
Modules
- mod_http_api: Use hide_sensitive_log_data option when registering
users
- mod_http_fileserver: Request basic auth dialog from browser
- mod_muc: Fix nick bug with MUC on riak
- mod_muc: new hooks
- mod_push: Support XEP-0357: Push Notifications
- mod_push_keepalive: New module
PubSub/PEP
- Keep disco#info on PEP compatible with XEP-0060
- Preliminary export PubSub data from Mnesia tables to SQL file
- Fix PubSub send last published items
- Fix PEP node removal
- Fix PEP node identity
- Fix disco#items on PEP service
- Fix getting cached last item
- Add import of PEP from prosody
Version 17.07
=============
Core
- Close accepted socket if sockname/peername has failed.
Version 17.06
=============
New features
- The new cache system is also a new component that allows fine tuning
of ejabberd performance for either small systems or large scale
servers.
- Certificate Manager is a feature that has been requested by many
organisations, allowing administrators to manage their certificate
more easily
- Riak support for several modules
API
- Deprecate misc:encode_base64/1 and misc:decode_base64/1
- Rename is_user_exists function to user_exists
- Allow api access on both ipv4 and 6 loopback addresses
- Fix invalid argument in get_messages_susbset
Admin
- Refactor ejabberdctl
- Improve ejabberdctl parameters parsing
- Quote all paths to allow spaces in directory names
- update-deps-releases.pl: Show operations to perform before asking to
apply them
- Fix Salt import from prosody SCRAMmed password
Configuration
- Validate module options on start_module/2
- Validate new options before module reloading
- Validate second-level options
- Introduce iqdisc global option
- stream_management listen option deprecated, use mod_stream_mgmt
- Check presence of some files during option validation
- Speedup configuration options lookup
- Validate all certfiles on startup
- Only validate certfiles if public_key:short_name_hash/1 is available
- Introduce Certficate Manager
Commands
- Add clear_cache admin command
- Parse correctly presence_broadcast option in change_room_option
command
- Describe command arguments and results in mod_muc_admin
- Improve export2sql explanation; remove obsolete and duplicated
command
- Fix and document push_roster_all command
- Fix mod_muc_admin command set_room_affiliation
- Fix invalid {args,result}_examples in mod_muc_admin
- Fix srg_user_add/del for non-Mnesia database backends
- Make ext_mod api return rescode
Compilation
- Erlang 17.5 or higher is required
- Add --enable-system-deps configure option
- Add --enable-stun and --enable-sip configure options
Core
- Speedup Mnesia tables initialization
- Improve Mnesia tables creation and transformation
- Improve ejabberd_c2s:close()
- ejabberd_c2s: Don’t close session on stream resume
- Speedup loading of translation files
- Fix ejabberd_router:is_my_route/1
- Don’t let a receiver crash if a controller is unavailable
- Fix OTP-17.5 support
- websocket: Catch exception that may happen when sending data over
websocket
Databases
- New sql_connect_timeout option
- New sql_query_timeout option
- Get rid of sql_queries.erl
- Use round-robin algorithm when selecting worker from DB pool
- Add Riak as BOSH RAM backend
- Add Riak as mod_proxy65 RAM backend
- Add Riak as mod_carboncopy RAM backend
- Add Riak as router RAM backend
- Add Riak as session manager RAM backend
- Fix cleaning of Riak route table
- Add pubsub import from prosody/metronome
- Fix username in mam export
- Fix Salt import from prosody SCRAMmed password
- In offline export to SQL, first write all DELETE, later all INSERT
Cache
- Implement cache for mod_announce
- Implement cache for mod_private
- Implement cache for mod_privacy/mod_blocking
- Implement cache for mod_last
- Implement cache for mod_vcard and mod_vcard_xupdate
- Implement cache for roster
- Add cache options to the validator
- Use cache for authentication backends
- Use new cache API in mod_shared_roster_ldap
- Use new cache API in ejabberd_oauth
- Use new cache API in mod_mam
- Use new cache API in mod_caps
- Use cache in front of Redis/SQL RAM backends
Modules
- mod_http_upload: Add support for HTTP File Upload 0.3.0
- mod_mam: Added export function
- mod_metrics: Don’t leak with UDP sockets
- mod_metrics: New options ip and port
- mod_muc: Allow a room admin to un/subscribe another JID
- mod_offline: Don’t store messages via a single process
- mod_offline: Make sure only jabber❌event tag is present in offline
event
- mod_register: New option ‘access_remove’ ACL
- mod_stream_mgmt: Preserve stanza count on timeout
- mod_vcard_ldap: Parse ldap_uids like in eldap_utils
- mod_client_state: Reset state on session resume
- mod_metrics: Fix IP address parsing
- mod_pubsub: Avoid useless calls on simples subscriptions
- mod_block_strangers: Add allow_local_users option
Elixir
- Update elixir to v1.4.4
Make the Redis support unconditional (no extra dependencies).
Changes in 17.04:
Admin
- Add more examples on config template
- Generate ejabberd lib dir when not available in code server
- Set default prefix to /usr/local
- Start supervisors after ext_mod
- Don't log warning on successful ping reply
- New muc_register_nick command
Core
- Deprecate jlib.erl in favor of misc.erl
- Add support for file-based queues
- ejabberd_sm: Fix routing of headline and groupchat messages
- Fix c2s connection close on demand
- Improve overloaded S2S queue processing
Databases
- Improve Redis related code
- Add Redis pool support
- Improve logging of Redis errors
- Add Redis and SQL as mod_proxy65 RAM backends
- Add Redis and SQL as mod_carboncopy RAM backends
- Add Redis and SQL as mod_bosh RAM backends
- Add Redis and SQL as router RAM backends
- Add SQL as mod_muc RAM backend
- Remove obsolete Pubsub mnesia migration calls
Miscellany
- ejabberd_http: Expand @VERSION@ in custom headers
- ejabberd_http: Add "custom_headers" option
- mod_client_state: Queue stanzas of each full JID
- mod_http_upload: Don't add "Server" header line
- Pubsub: Refactor pubsub's get_last_items
- Pubsub: Fix PEP issues
Major improvements
- New modular code allows to develop modules for a wide scope of
functionalities without patching the core code such as C2S, S2S and
router
- Now 'From' and 'To' arguments must be omitted in functions and
structures related to routing
- Ejabberd used to store all in-memory shared data such as ACLs,
proxy65, sessions, routes, clustering, etc in internal Mnesia
database and this used to be hardcoded. With new API it's now possible
to store such data in any database. However, currently only Mnesia
backend is supported.
- Dynamic configuration reload allows to reload modules, database
connections, listeners, ACLs and global options without restarting
ejabberd
- Spam protection allows to block packets from non-subscribers
- S2S dialback is now an optional module
Developer
- tools/hook_deps.sh: checks hook dependencies
- tools/find-outdated-deps.pl: checks which dependences need update
- Mark as deprecated add/get_local/global_option config functions
- Change routing API
Core
- Fix some corner cases while re-reading RFC6120
- Attach IP metadata to every stanza received from stream
- Apply SASLprep before storing/converting passwords
- Send compressed in correct order
- Reset XML stream before sending SASL success
- Speedup features list when a lot of virtual hosts configured
- Fix s2s_dns_timeout issues
- Better handling of IPv6 domains
- Rename mod_sm -> mod_stream_mgmt
- Don't count resent stanzas
- Improve startup procedure, and log startup time
- Add more processes to supervision
- sm_sql: Avoid PID collisions
Admin
- Add 'supervisor' listening option
- Accept "add_commands: admin" in commands section
- Make sure that api_permissions always have "console commands"
section
- Change name of pam dep from p1_pam to epam
- Improve compilation with rebar3
- Add TLS support for external components
- Specify "ExecReload" command in systemd unit
- Don't attempt to resolve _jabber._tcp SRV record
- Improve error reporting for forbidden servers
- mod_block_strangers: New module to block packets from
non-subscribers
- mod_register: Report password change in the log
- Remove relict mod_service_log
- Remove unused mod_ip_blacklist
- Remove ejabberd_frontend_socket
- WebAdmin: improve formatting when showing erlang terms
- Import from Prosody: Fix import of SCRAM passwords, offline
API & Commands
- get_last now always returns tuple with UTC XEP-0082 and status
- Protect users from delete_old_users command using a fixed access
rule
- Separate list of strings with \n for srg_get_info in mod_http_api
- Support non-JID lines in command create_rooms_file
- stop_all_connections now stops all s2s connections via supervisor
calls
- Support scrammed passwords in ejabberdctl import_prosody
Configuration
- Provide example mod_http_api configuration with couple commands
- Clarify new modules usage in the example config
- Don't crash on malformed IP addresses
- Fix parsing of acl/access rules inside oauth sections of
api_permissions
Config reload improvements
- Start/stop auth modules when host is added/deleted
- Improve modules start/stop procedures
- Check result of gen_mod:start/2 callback
- Improve reload_config admin command
- Invalidate access permissions on configuration reload
- Start/stop virtual hosts when reloading configuration file
- Reload modules when reloading configuration file
- Restart listeners on configuration reload
- Make sure all hooks are called with proper host
Databases
- Add missing NOT NULL restrictions in schemas
- Move archive tables into lite.sql for better comparison with other
schemas
- Implement database backend interface for mod_proxy65
- Implement database backend interface for MUC, BOSH and auth_anonyous
- Implement database backend interface for ejabberd_router
- Propagate the TRANSACTION_TIMEOUT to pgsql driver
New XMPP stream behavior
- Reflect cyrsasl API changes in remaining code
- Improve return values in cyrsasl API
- More refactoring on session management
- Add xmpp_stream_out behavior and rewrite s2s/SM code
- Rewrite ejabberd_service to use new XMPP stream API
MAM & offline storage
- Make a message is not bounced if it's archived
- Archive message before delivering it to offline storage
- Include stanza ID with archived offline messages
- Add stanza-id to every archived message
PubSub
- Avoid orphan_item leak on affiliation/subscription removal
- Fix pubsub SQL schemas, add NOT NULL restrictions
- Fix last item cache for multiple hosts
Server to server
- Several improvements of S2S errors logging
- Resolve all addresses from SRV lookup
- Add s2s work-around for gmail.com
Most relevant changes:
Admin
- Add example api_permissions: definition to config template
- Allow old-stype mod_vcard_ldap in the config
- Fix migration of old pubsub database (migrating from 2.1.x)
- Get nodes from ejabberd_cluster instead of mnesia
- mod_configure: Fix configuration commands
Core
- Fix case clauses when using compression
- Set from/to in every routed packet
- Correctly process errors from new cyrsasl API
- Improve return values in cyrsasl API
Modules
- mod_http_bind: remove and migration code to mod_bosh
- mod_muc: Allow a subscriber to create room, then set
allow_subscription=true
- mod_muc: Support legacy muc#roomconfig values
- mod_offline: Decode message before checking for expiration
Mnesia
- Let ejabberd_mnesia handles copy_type
- Fix index processing
- Speedup table setup, no i/o if EJABBERD_SCHEMA_PATH not set
SQL
- Add SSL support for SQL connections with PostgreSQL 1.1.2+
- Cope with malformed values in 'rosterusers' SQL table
- Improve tag insertion, avoid duplication
API / integration
- New API permissions framework
Commands
- Add configurable weight for ejabberd commands
- add_rosteritem: Support several groups separated by ;
- create_rooms_file: Fix reading room jids from file
- delete_old_messages: Fix command for SQL backends
- send_message: Don't duplicate the message
- Remove obsolete remove_node command (use leave_cluster)
- Fix reload_config
- Cleanup mod_admin_extra, add few functions
- Expose unregister API command
Core XMPP
- New BOSH module
- Use fxml_gen XML generator
- Use our new stand-alone XMPP library instead of jlib.erl
- Don't let MAM messages go into offline storage
- Add xdata generator for XMPP data form
- Get rid of excessive (io)list_to_binary/1 calls
HTTP
- Add authentication support to mod_http_fileserver
- ejabberd_http: Handle missing POST data gracefully
- Use inets instead of lhttpc in http_p1
- Add http_p1.erl, rest.erl, and oauth2 ReST backend for OAuth2 tokens
MUC
- Create room on configuration request as per XEP-0045, 10.1.3
- Ensure that presence_broadcast room option is stored
- Fix conference disco#items when running multiple virtual hosts
- Fix Result Set Management (RSM) for conference disco#items
- Introduce muc_invite hook
- Make the constant MAX_ROOMS_DISCOITEMS configurable
- mod_carboncopy: Don't copy MUC private messages
MUC/Sub
- Store the flag "Allow Subscription" room option in database
- When getting list of subscribed rooms, also check temporary ones
- Add password support in muc_subscribe
- When unsubscribes, check if room should get closed
Pubsub
- Enforce pubsub node removal
- Relational databases support
- Append ; to privacy_list_data exporting lines
- Improve relational database import
Build
- Make build system compatible with rebar3
- Produce ejabberd.service and fix for systemd usage
- Cleanup ext_mod and fix compilation path
- Fix compilation of external module with new xmpp lib
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
ejabberd 16.08
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
ejabberd 16.06
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
for all pkgsrc dir/file ownership rules. Fixes unprivileged
user/group names from leaking into binary packages, manifest as
non-fatal chown/chgrp failure messages at pkg_add time.
Bump respective packages' PKGREVISION.
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()
- Update fast_tls to 1.0.3: Prevent buffer overflows and
allocation failures
- Update stringprep to 1.0.3: Fix compilation on Windows and error
message
- Update stun to 1.0.3: Use fast_tls 1.0.3
- Update esip to 1.0.4: Use fast_tls 1.0.3
16.03
=====
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
16.02
=====
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.
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 optimisations
- 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
- Update hebrew translation
Switch dependencies to use standalone packages for Erlang modules.
Core
- c2s: Let stop/1 close XEP-0198 sessions
- c2s: Close socket when waiting for resume
- s2s: Don't crash on certificates without extensions
- xml: Optimizations in memory allocator
- OAuth: Fix cyrsasl_oauth:mech_new call
Modules
- mod_http_upload: New HTTP File Upload module (XEP-0363)
- mod_http_upload_quota: New module to support user quotas
- mod_metrics: New simple metrics module for use with grapherl
- mod_mam: Advertise XEP-0313 v0.4 support in room disco
- mod_mam: Avoid MAM dups when routing to multiple resources
Compilation
- Make: Pass {C,CPP,LD}FLAGS used in main ./configure to deps
- Use OTP directory structure for `make install`
- mix.lock should be commited to ensure consistent builds
- Code cosmetic cleanup
Commands
- Let modules_update_specs report failures
- Fix problem with -auth
- Fix unauthenticated calls to commands with policy=user
- Improve access_commands option backward compatibility
Configuration
- ejabberdctl.cfg: New CONTRIB_MODULES_CONF_DIR
- Be able to merge old style configs with {listen,...}
- Fix support for macros
- mod_ping: New option ping_ack_timeout
Problems found with existing distfiles:
distfiles/icb-5.0.9.tar.gz
distfiles/icb.2.1.4.tar.Z
distfiles/zenicb-19981202.tar.gz
No changes made to these /distinfo files.
Otherwise, existing SHA1 digests verified and found to be the same on
the machine holding the existing distfiles (morden). All existing
SHA1 digests retained for now as an audit trail.
### Major changes
- Added OAuth delegation framework
- Preliminary OAuth and HTTP based ejabberd API
- X-AUTH2 authentication mechanism,
- MAM now can store MUC room
- MSSQL: improved schema, simplified config, and fixed support
*Note: ejabberd now requires erlang 17.1 or higher*
### Core improvements
- New `set_loglevel` admin command to ease changing loglevel.
- Configuration: allow to override main config file options with data
from included files
- Improve S2S certificate checks
- Log TLS errors as debug messages only
- XEP-0198: new option "max_resume_timeout"
- XEP-0198: Improve handling of non-message stanzas
- ext_mod: Check external modules configuration on load
- ext_mod: Don't override custom configuration on module upgrade
- Several Elixir fixes
- Updated most translation languages
### Modules improvements
- Carbon Copy: Don't copy messages of type "normal" without body
- HTTP-Bind: More eye-candy mod_http_bind help page
- HTTP-Bind: Nameprep host name passed to http-bind before using in
- HTTP-Bind: Set disable caching headers in http-bind responses
- HTTP: pass stream management options defined in http listener to
http-bind and websocket
- MAM: Add XEP-0359 to archived messages
- MAM: Add XEP-0313 v0.4 support
- MUC commands: Changed argument names in two commands
- MUC commands: Fix and document create_rooms_file and destroy_rooms_file
- MUC hooks: added muc_filter_presence
- MUC hooks: renamed muc_filter_packet to muc_filter_message
- MUC logging: check for hint
- Multicast: many improvements in the source code
- SIP: Do not crash SIP authentication on SCRAMed passwords
### Packaging
- Remove bashisms in join_cluster leave_cluster and postinstall scripts
- Allow root to run join_cluster and leave_cluster
- Allow building an ejabberd release with mix and elixir release manager
- Allow installing as root
- Fix Debian/Ubuntu package
- Rename idna to ejabberd_idna
- Improve 'make install' to remove useless failure cases
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
Message archiving
- Add support for message archiving in Mnesia or relational databases.
Protocol
- Document protocol support and version inside each module and use that
info in documentation
- Remove deprecated XEP-0090 Entity Time and XEP-0091 Delayed Delivery
- Don't add body element to MUC subject messages
- Do not bounce normal messages sent to unavailable resource
Admin command-line tool
- Fixed several ejabberd commands
- Allow password with ';' passed in ejabberdctl
- Improve ejabberdctl external module install code, allows better
error checking
- New ping ejabberdctl command to check if the node is up and running
- New commands for Multi-User chat management: get_room_options and
get_user_rooms
Configuration
- Add config validation at startup
- Fix include of non yaml config files
- New option hide_sensitive_log_data to hide client IP address in log
- New option net_ticktime, to fine tune Erlang cluster networking
- New option max_users_presence in mod_muc, to avoid broadcasting
presence packet from users after a chat room has reached a given size
Elixir
- Add correct package version for mix
Security
- New options to configure your own custom Diffie-Helman parameters:
dhfile and s2s_dhfile
PubSub
- Enforce definition of pubsub node max_items
- Fix pubsub/odbc crash on remote user unsubscribe
- Fix use of publish_only affiliation with odbc backend
Multicast
- Pick first local multicast service, otherwise remote
Databases
- Fix anonymous user login, it wasn't stored in anonymous mnesia table
- Fixed some string/binary issues in ejabberd_odbc
- PostgreSQL storage: added missing sm (session manager) table
Packaging
- Microsoft Windows 64 bits installer
- Provide RPM and DEB binary packages for linux 64 bits.
Clean up
- Remove obsolete doc and win32 files
Upstream changes:
- 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