
                              Release Notes
                             ejabberd 2.1.0

  ejabberd 2.1.0 is a major new version for ejabberd adding many
  new features, performance and scalability improvements.

  ejabberd 2.1.0 includes many new features, improvements and bug fixes.
  A complete list of changes can be retrieved from:
   http://redir.process-one.net/ejabberd-2.1.0

  The new code can be downloaded from ejabberd download page:
     http://www.process-one.net/en/ejabberd/


  New features and improvements:

* 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

* Clustering and Architecture

* 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


   Important Notes:

- ejabberd 2.1.0 requires Erlang R10B-9 or higher.
  R12B-5 is the recommended version. Support for R13B is experimental.


   Upgrading From ejabberd 1.x.x:

- Check the Release Notes of the intermediate versions for additional
  information about database or configuration changes.


   Upgrading From ejabberd 2.0.x:

- The database schemas have three changes since ejabberd 2.0.x.
  Check the database creation SQL files and update your database.
  1) New table roster_version to support roster versioning.
  2) Six new tables for optional pubsub ODBC storage.
  3) Some tables in the MySQL database have a new created_at column.

- As usual, it is recommended to backup the Mnesia spool directory and
  your SQL database (if used) before upgrading ejabberd.

- Between ejabberd 2.0.0 and 2.0.5, mod_pubsub used "default" as the
  default node plugin. But in 2.1.0 this is renamed to "hometree".
  You have to edit your ejabberd config file and replace those names.
  If you used ejabberd 2.0.5 or older, the database will be updated
  automatically. But if you were using ejabberd from SVN, you must
  manually run ejabberdctl with the command: rename_default_nodeplugin.
  Running this command on already updated database does nothing.

- The listener options 'ip' and 'inet6' are not documented anymore
  but they are supported and you can continue using them.
  There is a new syntax to define IP address and IP version.
  As usual, check the ejabberd Guide for more information.

- The log file sasl.log is now called erlang.log

- ejabberdctl commands now have _ characters instead of -.
  For backwards compatibility, it is still supported -.

- mod_offline has a new option: access_max_user_messages.
  The old option user_max_messages is no longer supported.

- If you upgrade from ejabberd trunk SVN, you must execute this:
  $ ejabberdctl rename_default_nodeplugin

- Default installation directories changed a bit:
  * The Mnesia spool files that were previously stored in
      /var/lib/ejabberd/db/NODENAME/*
    are now stored in
      /var/lib/ejabberd/*
  * The directories
      /var/lib/ejabberd/ebin
      /var/lib/ejabberd/priv
    and their content is now installed as
      /lib/ejabberd/ebin
      /lib/ejabberd/priv
  * There is a new directory with Erlang header files:
      /lib/ejabberd/include
  * There is a new directory for ejabberd documentation,
    which includes the Admin Guide and the release notes::
      /share/doc/ejabberd

- How to upgrade from previous version to ejabberd 2.1.0:
  1. Stop the old instance of ejabberd.
  2. Run 'make install' of new ejabberd 2.1.0 to create the new directories.
  3. Copy the content of your old directory:
       /var/lib/ejabberd/db/NODENAME/
     to the new location:
       /var/lib/ejabberd/
     so you will have the files like this:
       /var/lib/ejabberd/acl.DCD ...
  4. You can backup the content of those directories and delete them:
       /var/lib/ejabberd/ebin
       /var/lib/ejabberd/priv
       /var/lib/ejabberd/db
  5. Now try to start your new ejabberd 2.1.0.


  Bug reports

  You can officially report bugs on ProcessOne support site:
  http://support.process-one.net/
