diff --git a/doc/dev.html b/doc/dev.html index b86448c56..bff534bfb 100644 --- a/doc/dev.html +++ b/doc/dev.html @@ -2,7 +2,7 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> -Ejabberd 2.1.x Developers Guide +<TITLE>Ejabberd 2.1.12 Developers Guide @@ -49,7 +49,7 @@ TD P{margin:0px;}

-

Ejabberd 2.1.x Developers Guide

Alexey Shchepin
+

Ejabberd 2.1.12 Developers Guide

Alexey Shchepin
mailto:alexey@sevcom.net
xmpp:aleksey@jabber.ru

diff --git a/doc/features.html b/doc/features.html index 503ac0d3f..bd7cb666f 100644 --- a/doc/features.html +++ b/doc/features.html @@ -2,7 +2,7 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> -Ejabberd 2.1.x Feature Sheet +<TITLE>Ejabberd 2.1.12 Feature Sheet @@ -50,7 +50,7 @@ SPAN{width:20%; float:right; text-align:left; margin-left:auto;}

-

Ejabberd 2.1.x Feature Sheet

Sander Devrieze
+

Ejabberd 2.1.12 Feature Sheet

Sander Devrieze
mailto:s.devrieze@pandora.be
xmpp:sander@devrieze.dyndns.org

diff --git a/doc/guide.html b/doc/guide.html index 849e2c9ed..67d88478e 100644 --- a/doc/guide.html +++ b/doc/guide.html @@ -6,7 +6,7 @@ - ejabberd 2.1.x + ejabberd 2.1.12 Installation and Operation Guide @@ -76,7 +76,7 @@ BLOCKQUOTE.figure DIV.center DIV.center HR{display:none;}


- +
ejabberd 2.1.x
ejabberd 2.1.12
 
Installation and Operation Guide

@@ -1068,7 +1068,7 @@ then this option is not respected, and the action performed is closeold of the machine, in case it isn’t detected automatically. The FQDN is used to authenticate some clients that use the DIGEST-MD5 SASL mechanism. The option syntax is: -

{fqdn, undefined|FqdnString}.

+

{fqdn, undefined|FqdnString|[FqdnString]}.

Internal

ejabberd uses its internal Mnesia database as the default authentication method. The value internal will enable the internal authentication method.

The option {auth_password_format, plain|scram} @@ -1115,7 +1115,7 @@ the CacheTimeInteger indicates the number of seconds that ejabberd can reuse the authentication information since the user last disconnected, to verify again the user authentication without querying again the extauth script. Note: caching should not be enabled in a host if internal auth is also enabled. -If caching is enabled, mod_last or mod_last_odbc must be enabled also in that vhost. +If caching is enabled, mod_last must be enabled also in that vhost.

This example sets external authentication, the extauth script, enables caching for 10 minutes, and starts three instances of the script for each virtual host defined in ejabberd:

{auth_method, [external]}.
@@ -1569,12 +1569,10 @@ MySQL interface. Anyway, the first configuration step is to define the odbc
 

Storage

MySQL also can be used to store information into from several ejabberd -modules. See section 3.3.1 to see which modules have a version -with the ‘_odbc’. This suffix indicates that the module can be used with +modules. See section 3.3.1 to see which modules can be used with relational databases like MySQL. To enable storage to your database, just make -sure that your database is running well (see previous sections), and replace the -suffix-less or ldap module variant with the odbc module variant. Keep in mind -that you cannot have several variants of the same module loaded!

+sure that your database is running well (see previous sections), and add the +module option {db_type, odbc}.

3.2.2  Microsoft SQL Server

Although this section will describe ejabberd’s configuration when you want to use Microsoft SQL Server, it does not describe Microsoft SQL Server’s @@ -1601,13 +1599,10 @@ is the same as the configuration for ODBC compatible servers (see section 3.2.4).

Storage

Microsoft SQL Server also can be used to store information into from several -ejabberd modules. See section 3.3.1 to see which modules have -a version with the ‘_odbc’. This suffix indicates that the module can be used -with relational databases like Microsoft SQL Server. To enable storage to your -database, just make sure that your database is running well (see previous -sections), and replace the suffix-less or ldap module variant with the odbc -module variant. Keep in mind that you cannot have several variants of the same -module loaded!

+modules. See section 3.3.1 to see which modules can be used with +relational databases like MySQL. To enable storage to your database, just make +sure that your database is running well (see previous sections), and add the +module option {db_type, odbc}.

3.2.3  PostgreSQL

Although this section will describe ejabberd’s configuration when you want to use the native PostgreSQL driver, it does not describe PostgreSQL’s installation @@ -1659,12 +1654,10 @@ PostgreSQL interface. Anyway, the first configuration step is to define the odbc

Storage

PostgreSQL also can be used to store information into from several ejabberd -modules. See section 3.3.1 to see which modules have a version -with the ‘_odbc’. This suffix indicates that the module can be used with -relational databases like PostgreSQL. To enable storage to your database, just -make sure that your database is running well (see previous sections), and -replace the suffix-less or ldap module variant with the odbc module variant. -Keep in mind that you cannot have several variants of the same module loaded!

+modules. See section 3.3.1 to see which modules can be used with +relational databases like MySQL. To enable storage to your database, just make +sure that your database is running well (see previous sections), and add the +module option {db_type, odbc}.

3.2.4  ODBC Compatible

Although this section will describe ejabberd’s configuration when you want to use the ODBC driver, it does not describe the installation and database creation @@ -1703,13 +1696,11 @@ example:

Storage

An ODBC compatible database also can be used to store information into from -several ejabberd modules. See section 3.3.1 to see which -modules have a version with the ‘_odbc’. This suffix indicates that the module -can be used with ODBC compatible relational databases. To enable storage to your -database, just make sure that your database is running well (see previous -sections), and replace the suffix-less or ldap module variant with the odbc -module variant. Keep in mind that you cannot have several variants of the same -module loaded!

+several ejabberd +modules. See section 3.3.1 to see which modules can be used with +relational databases like MySQL. To enable storage to your database, just make +sure that your database is running well (see previous sections), and add the +module option {db_type, odbc}.

3.2.5  LDAP

ejabberd has built-in LDAP support. You can authenticate users against LDAP server and use LDAP directory as vCard storage.

Usually ejabberd treats LDAP as a read-only storage: @@ -1959,10 +1950,7 @@ all entries end with a comma: - - - @@ -1970,73 +1958,38 @@ all entries end with a comma: - - - - + - - - - - - - - - - + + - - - +
ModuleFeatureDependencies
mod_adhocAd-Hoc Commands (XEP-0050) 
mod_announceManage announcementsrecommends mod_adhoc
mod_announce_odbcManage announcementsrecommends mod_adhoc
  supported DB (*)
mod_blockingSimple Communications Blocking (XEP-0191)mod_privacy
mod_blocking_odbcSimple Communications Blocking (XEP-0191)mod_privacy_odbc
mod_capsEntity Capabilities (XEP-0115) 
mod_configureServer configuration using Ad-Hocmod_adhoc
mod_discoService Discovery (XEP-0030) 
mod_http_bindXMPP over Bosh service (HTTP Binding) 
mod_http_fileserverSmall HTTP file server 
mod_ircIRC transport 
mod_irc_odbcIRC transportsupported DB (*)
mod_lastLast Activity (XEP-0012) 
mod_last_odbcLast Activity (XEP-0012)supported DB (*)
mod_mucMulti-User Chat (XEP-0045) 
mod_muc_odbcMulti-User Chat (XEP-0045)supported DB (*)
mod_muc_logMulti-User Chat room loggingmod_muc or mod_muc_odbc
mod_muc_logMulti-User Chat room loggingmod_muc
mod_offlineOffline message storage (XEP-0160) 
mod_offline_odbcOffline message storage (XEP-0160)supported DB (*)
mod_pingXMPP Ping and periodic keepalives (XEP-0199) 
mod_pres_counterDetect presence subscription flood 
mod_privacyBlocking Communication (XEP-0016) 
mod_privacy_odbcBlocking Communication (XEP-0016)supported DB (*)
mod_privatePrivate XML Storage (XEP-0049) 
mod_private_odbcPrivate XML Storage (XEP-0049)supported DB (*)
mod_proxy65SOCKS5 Bytestreams (XEP-0065) 
mod_pubsubPub-Sub (XEP-0060), PEP (XEP-0163)mod_caps
mod_pubsub_odbcPub-Sub (XEP-0060), PEP (XEP-0163)supported DB (*) and mod_caps
mod_registerIn-Band Registration (XEP-0077) 
mod_register_webWeb for Account Registrations 
mod_rosterRoster management (XMPP IM) 
mod_roster_odbcRoster management (XMPP IM)supported DB (*)
mod_service_logCopy user messages to logger service 
mod_shared_rosterShared roster managementmod_roster or
  mod_roster_odbc
mod_shared_roster_odbcShared roster managementsupported DB (*) and
  mod_roster or mod_roster_odbc
mod_shared_roster_ldapLDAP Shared roster managementmod_roster or
  mod_roster_odbc
mod_shared_rosterShared roster managementmod_roster
mod_shared_roster_ldapLDAP Shared roster managementmod_roster
mod_sicServer IP Check (XEP-0279) 
mod_statsStatistics Gathering (XEP-0039) 
mod_timeEntity Time (XEP-0202) 
mod_vcardvcard-temp (XEP-0054) 
mod_vcard_ldapvcard-temp (XEP-0054)LDAP server
mod_vcard_odbcvcard-temp (XEP-0054)supported DB (*)
mod_vcard_xupdatevCard-Based Avatars (XEP-0153)mod_vcard or mod_vcard_odbc
mod_vcard_xupdate_odbcvCard-Based Avatars (XEP-0153)mod_vcard or mod_vcard_odbc
mod_vcard_xupdatevCard-Based Avatars (XEP-0153)mod_vcard
mod_versionSoftware Version (XEP-0092) 


  • (*) This module requires a supported database. For a list of supported databases, see section 3.2.

You can see which database backend each module needs by looking at the suffix:

  • -No suffix, this means that the modules uses Erlang’s built-in database -Mnesia as backend. -
  • ‘_odbc’, this means that the module needs a supported database -(see 3.2) as backend. +No suffix, this means that the module uses Erlang’s built-in database +Mnesia as backend, or a ODBC database in some cases (see 3.2).
  • ‘_ldap’, this means that the module needs an LDAP server as backend. -

If you want to, -it is possible to use a relational database to store the tables created by some ejabberd modules. -You can do this by changing the module name to a name with an -_odbc suffix in ejabberd config file. You can use a relational -database for the following data:

  • -Last connection date and time: Use mod_last_odbc instead of -mod_last. -
  • Offline messages: Use mod_offline_odbc instead of -mod_offline. -
  • Rosters: Use mod_roster_odbc instead of mod_roster. -
  • Shared Rosters: Use mod_shared_roster_odbc instead of mod_shared_roster. -
  • Users’ VCARD: Use mod_vcard_odbc instead of mod_vcard. -
  • vCard-Based Avatars: Use mod_vcard_xupdate_odbc instead of mod_vcard_xupdate. -
  • Private XML storage: Use mod_private_odbc instead of mod_private. -
  • User rules for blocking communications: Use mod_privacy_odbc instead of mod_privacy. -
  • Simple Communications Blocking: Use mod_blocking_odbc instead of mod_blocking. -
  • Pub-Sub nodes, items and subscriptions: Use mod_pubsub_odbc instead of mod_pubsub. -
  • Multi-user chats: Use mod_muc_odbc instead of mod_muc. -
  • Manage announcements: Use mod_announce_odbc instead of mod_announce. -
  • IRC transport: Use mod_irc_odbc instead of mod_irc.

You can find more contributed modules on the ejabberd website. Please remember that these contributions might not work or @@ -2128,7 +2081,11 @@ login. The message is not sent to any currently connected user. Any message sent to this JID removes the existing message of the day (MOTD).

Options:

-{access, AccessName}
This option specifies who is allowed to +{db_type, mnesia|odbc}
+Define the type of storage where the module will create the tables and store user information. +The default is to store in the internal Mnesia database. +If odbc value is defined, make sure you have defined the database, see 3.2. +
{access, AccessName}
This option specifies who is allowed to send announcements and to set the message of the day (by default, nobody is able to send such messages).

Examples: @@ -2404,6 +2361,10 @@ service. If the host option is not specified, the Jabber ID will be the hostname of the virtual host with the prefix ‘irc.’. The keyword "@HOST@" is replaced at start time with the real virtual host name. +

{db_type, mnesia|odbc}
+Define the type of storage where the module will create the tables and store user information. +The default is to store in the internal Mnesia database. +If odbc value is defined, make sure you have defined the database, see 3.2.
{access, AccessName}
This option can be used to specify who may use the IRC transport (default value: all).
{default_encoding, Encoding}
Set the default IRC encoding. @@ -2444,6 +2405,10 @@ connected user was last active on the server, or to query the uptime of the

{iqdisc, Discipline}
This specifies the processing discipline for Last activity (jabber:iq:last) IQ queries (see section 3.3.2). +
{db_type, mnesia|odbc}
+Define the type of storage where the module will create the tables and store user information. +The default is to store in the internal Mnesia database. +If odbc value is defined, make sure you have defined the database, see 3.2.

3.3.10  mod_muc

This module provides a Multi-User Chat (XEP-0045) service. @@ -2472,6 +2437,10 @@ service. If the host option is not specified, the Jabber ID will be the hostname of the virtual host with the prefix ‘conference.’. The keyword "@HOST@" is replaced at start time with the real virtual host name. +

{db_type, mnesia|odbc}
+Define the type of storage where the module will create the tables and store user information. +The default is to store in the internal Mnesia database. +If odbc value is defined, make sure you have defined the database, see 3.2.
{access, AccessName}
You can specify who is allowed to use the Multi-User Chat service. By default everyone is allowed to use it.
{access_create, AccessName}
To configure who is @@ -2725,6 +2694,10 @@ Define the format of the log files: html stores in HTML format, plaintext stores in plain text. The default value is html. +
{file_permissions, {Mode, Group}}
+Define the permissions that must be used when creating the log files: +the number of the mode, and the numeric id of the group that will own the files. +The default value is {644, 33}.
{outdir, Path}
This option sets the full path to the directory in which the HTML files should be stored. Make sure the ejabberd daemon user has write access on that @@ -2786,6 +2759,8 @@ top link will be the default <a href="/">Home</a>. {access_log, muc_log}, {cssfile, false}, {dirtype, subdirs}, + {dirtype, subdirs}, + {file_permissions, {644, 33}}, {outdir, "/var/www/muclogs"}, {timezone, local} ]}, @@ -2799,7 +2774,11 @@ sent to an offline user will be stored on the server until that user comes online again. Thus it is very similar to how email works. Note that ejabberdctl has a command to delete expired messages (see section 4.1).

-{access_max_user_messages, AccessName}
+{db_type, mnesia|odbc}
+Define the type of storage where the module will create the tables and store user information. +The default is to store in the internal Mnesia database. +If odbc value is defined, make sure you have defined the database, see 3.2. +
{access_max_user_messages, AccessName}
This option defines which access rule will be enforced to limit the maximum number of offline messages that a user can have (quota). When a user has too many offline messages, any new messages that he receive are discarded, @@ -2904,6 +2883,10 @@ subscription type (or globally).

{iqdisc, Discipline}
This specifies the processing discipline for Blocking Communication (jabber:iq:privacy) IQ queries (see section 3.3.2). +
{db_type, mnesia|odbc}
+Define the type of storage where the module will create the tables and store user information. +The default is to store in the internal Mnesia database. +If odbc value is defined, make sure you have defined the database, see 3.2.

3.3.16  mod_private

This module adds support for Private XML Storage (XEP-0049): @@ -2916,6 +2899,10 @@ of client-specific preferences; another is Bookmark Storage (

{iqdisc, Discipline}
This specifies the processing discipline for Private XML Storage (jabber:iq:private) IQ queries (see section 3.3.2). +
{db_type, mnesia|odbc}
+Define the type of storage where the module will create the tables and store user information. +The default is to store in the internal Mnesia database. +If odbc value is defined, make sure you have defined the database, see 3.2.

3.3.17  mod_proxy65

This module implements SOCKS5 Bytestreams (XEP-0065). @@ -3202,6 +3189,10 @@ It also supports Roster Versioning (

{iqdisc, Discipline}
This specifies the processing discipline for Roster Management (jabber:iq:roster) IQ queries (see section 3.3.2). +
{db_type, mnesia|odbc}
+Define the type of storage where the module will create the tables and store user information. +The default is to store in the internal Mnesia database. +If odbc value is defined, make sure you have defined the database, see 3.2.
{versioning, false|true}
Enables Roster Versioning. This option is disabled by default. @@ -3212,7 +3203,7 @@ Enabling this option reduces the load for both ejabberd and the database. This option does not affect the client in any way. This option is only useful if Roster Versioning is enabled. This option is disabled by default. -Important: if you use mod_shared_roster, mod_shared_roster_odbc or mod_shared_roster_ldap, +Important: if you use mod_shared_roster or mod_shared_roster_ldap, you must disable this option.

This example configuration enables Roster Versioning with storage of current id:

{modules,
@@ -3260,7 +3251,13 @@ manually add all users to their rosters, and that they cannot permanently delete
 users from the shared roster groups.
 A shared roster group can have members from any XMPP server,
 but the presence will only be available from and to members
-of the same virtual host where the group is created.

Shared roster groups can be edited only via the Web Admin. Each group +of the same virtual host where the group is created.

Options: +

+{db_type, mnesia|odbc}
+Define the type of storage where the module will create the tables and store user information. +The default is to store in the internal Mnesia database. +If odbc value is defined, make sure you have defined the database, see 3.2. +

Shared roster groups can be edited only via the Web Admin. Each group has a unique identification and the following parameters:

Name
The name of the group, which will be displayed in the roster. @@ -3607,6 +3604,10 @@ is replaced at start time with the real virtual host name.
{iqdisc, Discipline}
This specifies the processing discipline for vcard-temp IQ queries (see section 3.3.2). +
{db_type, mnesia|odbc}
+Define the type of storage where the module will create the tables and store user information. +The default is to store in the internal Mnesia database. +If odbc value is defined, make sure you have defined the database, see 3.2.
{search, true|false}
This option specifies whether the search functionality is enabled or not If disabled, the option host will be ignored and the @@ -3622,7 +3623,7 @@ users who added some information to their vCard. The default value is
{search_all_hosts, true|false}
If this option is set to true, search operations will apply to all virtual hosts. Otherwise only the current host will be searched. The default value is true. -This option is available in mod_vcard, but not available in mod_vcard_odbc. +This option is available in mod_vcardwhen using Mnesia, but not when using ODBC storage.

Examples:

  • In this first situation, search results are limited to twenty items, @@ -3844,7 +3845,13 @@ it is replaced with the element generated by ejabberd.

    By enabling this mo and each presence sent by a client produces hash retrieval and a presence stanza rewrite. For this reason, enabling this module will introduce a computational overhead -in servers with clients that change frequently their presence.

    +in servers with clients that change frequently their presence.

    Options: +

    +{db_type, mnesia|odbc}
    +Define the type of storage where the module will create the tables and store user information. +The default is to store in the internal Mnesia database. +If odbc value is defined, make sure you have defined the database, see 3.2. +

    3.3.31  mod_version

    This module implements Software Version (XEP-0092). Consequently, it answers ejabberd’s version when queried.

    Options: @@ -3889,7 +3896,6 @@ Add the option to the file ejabberd.cfg. In this example there is no restriction:

    {ejabberdctl_access_commands, []}.
     

    If account robot1@example.org is registered in ejabberd with password abcdef -(which MD5 is E8B501798950FC58AAD83C8C14978E), and ejabberd.cfg contains this setting:

    {hosts, ["example.org"]}.
     {acl, bots, {user, "robot1", "example.org"}}.
    @@ -3898,7 +3904,7 @@ and ejabberd.cfg contains this setting:
     

    then you can do this in the shell:

    $ ejabberdctl registered_users example.org
     Error: no_auth_provided
    -$ ejabberdctl --auth robot1 example.org E8B501798950FC58AAD83C8C14978E registered_users example.org
    +$ ejabberdctl --auth robot1 example.org abcdef registered_users example.org
     robot1
     testuser1
     testuser2
    @@ -4038,6 +4044,8 @@ using jabberd1.4 formatted XML files.
     from other Jabber/XMPP servers
     There exist tutorials to
     migrate from other software to ejabberd.
    +
    export2odbc virtualhost directory
    +Export virtual host information from Mnesia tables to SQL files.
    delete_expired_messages
    This option can be used to delete old messages in offline storage. This might be useful when the number of offline messages is very high. @@ -4061,8 +4069,7 @@ The authentication information is provided when executing a command, and is Username, Hostname and Password of a local XMPP account that has permission to execute the corresponding command. This means that the account must be registered in the local ejabberd, -because the information will be verified. -It is possible to provide the plaintext password or its MD5 sum.

    When one or several access restrictions are defined and the +because the information will be verified.

    When one or several access restrictions are defined and the authentication information is provided, each restriction is verified until one matches completely: the account matches the Access rule, diff --git a/doc/version.tex b/doc/version.tex index 905ac86f2..924b6afae 100644 --- a/doc/version.tex +++ b/doc/version.tex @@ -1,2 +1,2 @@ % ejabberd version (automatically generated). -\newcommand{\version}{2.1.x} +\newcommand{\version}{2.1.12} diff --git a/src/configure b/src/configure index 89e32a5f1..cd9f81e9e 100755 --- a/src/configure +++ b/src/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.68 for ejabberd 2.1.x. +# Generated by GNU Autoconf 2.68 for ejabberd 2.1.12. # # Report bugs to . # @@ -560,8 +560,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='ejabberd' PACKAGE_TARNAME='ejabberd' -PACKAGE_VERSION='2.1.x' -PACKAGE_STRING='ejabberd 2.1.x' +PACKAGE_VERSION='2.1.12' +PACKAGE_STRING='ejabberd 2.1.12' PACKAGE_BUGREPORT='ejabberd@process-one.net' PACKAGE_URL='' @@ -1288,7 +1288,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures ejabberd 2.1.x to adapt to many kinds of systems. +\`configure' configures ejabberd 2.1.12 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1354,7 +1354,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of ejabberd 2.1.x:";; + short | recursive ) echo "Configuration of ejabberd 2.1.12:";; esac cat <<\_ACEOF @@ -1479,7 +1479,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -ejabberd configure 2.1.x +ejabberd configure 2.1.12 generated by GNU Autoconf 2.68 Copyright (C) 2010 Free Software Foundation, Inc. @@ -1823,7 +1823,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by ejabberd $as_me 2.1.x, which was +It was created by ejabberd $as_me 2.1.12, which was generated by GNU Autoconf 2.68. Invocation command line was $ $0 $@ @@ -5690,7 +5690,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by ejabberd $as_me 2.1.x, which was +This file was extended by ejabberd $as_me 2.1.12, which was generated by GNU Autoconf 2.68. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -5743,7 +5743,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -ejabberd config.status 2.1.x +ejabberd config.status 2.1.12 configured by $0, generated by GNU Autoconf 2.68, with options \\"\$ac_cs_config\\" diff --git a/src/ejabberd.app b/src/ejabberd.app index 725cce35e..720278394 100644 --- a/src/ejabberd.app +++ b/src/ejabberd.app @@ -2,7 +2,7 @@ {application, ejabberd, [{description, "ejabberd"}, - {vsn, "2.1.x"}, + {vsn, "2.1.12"}, {modules, [acl, adhoc, configure,