From f89f62167124ab7e92eba22942a3fd812bea9e01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micka=C3=ABl=20R=C3=A9mond?= Date: Mon, 28 Nov 2005 10:55:45 +0000 Subject: [PATCH] Documentation update SVN Revision: 445 --- ChangeLog | 10 + doc/guide.html | 2588 +++++++++++++++++++++++++++++------------- doc/guide.tex | 1856 ++++++++++++++++++++---------- doc/introduction.tex | 131 +++ doc/logo.png | Bin 19917 -> 83054 bytes doc/version.tex | 2 + 6 files changed, 3152 insertions(+), 1435 deletions(-) create mode 100644 doc/introduction.tex create mode 100644 doc/version.tex diff --git a/ChangeLog b/ChangeLog index f5626e9ef..80e6de228 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2005-11-28 Mickael Remond + + * doc/guide.tex: Improved and updated documentation (Thanks to Sander + Devrieze) + * doc/guide.html: Likewise + * doc/features.tex: Likewise + * doc/introduction.tex: Likewise + * doc/version.tex: Likewise + * doc/logo.png: New logo for ejabberd doc (Thanks to Sander Devrieze) + 2005-11-26 Alexey Shchepin * src/web/ejabberd_http.erl: Now web interface is compliant to diff --git a/doc/guide.html b/doc/guide.html index 06f9025d2..7a08f9078 100644 --- a/doc/guide.html +++ b/doc/guide.html @@ -1,278 +1,386 @@ -Ejabberd Installation and Operation Guide - - + + +Ejabberd 0.9.9-alpha Installation and Operation Guide + + + + + - + +
+
+ - -

Ejabberd Installation and Operation Guide

- -

Alexey Shchepin
+ + +
+

Ejabberd 0.9.9-alpha Installation and Operation Guide

+

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

- -

July 31, 2005


+
+
+ -

+

+ +
I can thoroughly recommend ejabberd for ease of setup – + Kevin Smith, Current maintainer of the Psi project
+ - +

Contents

-

Table of Contents

- -
  • +
    • 1  Introduction -
    • 2  Installation from Source -
      • -2.1  Installation Requirements -
        • -2.1.1  Unix -
        • 2.1.2  Windows + -
        • 2.2  Obtaining -
        • 2.3  Compilation -
          • -2.3.1  Unix -
          • 2.3.2  Windows +
          • 2  Installation from Source +
            • +2.1  Installation Requirements + -
            • 2.4  Starting +
            • 2.2  Obtaining ejabberd +
            • 2.3  Compilation + -
            • 3  Configuration -
              • -3.1  Initial Configuration - -
              • 3.2  Online Configuration and Monitoring -
                • -3.2.1  Web-based Administration Interface -
                • 3.2.2  ejabberdctl tool +
                • 3  Configuration + -
                • 4  Clustering -
                  • -4.1  How it works -
                    • -4.1.1  Router -
                    • 4.1.2  Local Router -
                    • 4.1.3  Session Manager -
                    • 4.1.4  S2S Manager +
                    • 4  Firewall Settings +
                    • 5  SRV Records +
                    • 6  Clustering + -
                    • A  Built-in Modules -
                      • -A.1  Common Options - -

                        1  Introduction

                        +

                        1  Introduction

                        - -ejabberd is a Free and Open Source fault-tolerant distributed Jabber -server. It is written mostly in Erlang.
                        + + +ejabberd is a free (GPL) distributed fault-tolerant Jabber/XMPP server and is mainly written in Erlang.

                        -The main features of ejabberd are: -
                        • -Works on most of popular platforms: *nix (tested on Linux, FreeBSD and - NetBSD) and Win32 -
                        • Distributed: You can run ejabberd on a cluster of machines to let all of - them serve one Jabber domain. -
                        • Fault-tolerance: You can setup an ejabberd cluster so that all the - information required for a properly working service will be stored - permanently on more than one node. This means that if one of the nodes - crashes, then the others will continue working without disruption. - You can also add or replace nodes ``on the fly''. -
                        • Support for virtual hosting -
                        • Built-in Multi-User Chat service -
                        • Built-in IRC transport -
                        • Built-in Publish-Subscribe service -
                        • Built-in Jabber Users Directory service based on users vCards -
                        • Built-in web-based administration interface -
                        • Built-in HTTP Polling service -
                        • SSL support -
                        • Support for LDAP authentication -
                        • Ability to interface with external components (JIT, MSN-t, Yahoo-t, etc.) -
                        • Migration from jabberd14 is possible -
                        • Mostly XMPP-compliant -
                        • Support for Service Discovery. -
                        • Support for Statistics Gathering. -
                        • Support for xml:lang +ejabberd is designed to be a stable and feature rich Jabber/XMPP server.
                          +
                          +ejabberd is suitable for small servers, whether they need to be scalable or not, as well as extremely big servers.
                          +
                          + + +

                          1.1  Key Features

                          + + + +ejabberd is: +
                          • +Multiplatform: ejabberd runs under Windows NT/2000/XP and Unix derived systems such as Linux, FreeBSD and NetBSD.
                            +
                            +
                          • Distributed: You can run ejabberd on a cluster of machines and all of them will serve one Jabber domain. When you need more capacity you can simply add a new cheap node to your cluster. Accordingly, you do not need to buy an expensive high-end machine to support hundreds of concurrent users.
                            +
                            +
                          • Fault-tolerant: You can deploy an ejabberd cluster so that all the information required for a properly working service will be replicated permanently on all nodes. This means that if one of the nodes crashes, the others will continue working without disruption. In addition, nodes also can be added or replaced “on the fly”.
                            +
                            +
                          • Administrator Friendly: ejabberd is built on top of the Open Source Erlang. As a result you do not need to install an external database, an external web server, amongst others because everything is already installed, and ready to run out of the box. Other benefits for administrators include: +
                            • +Comprehensive documentation. +
                            • Straightforward installers for Windows and Linux. +
                            • Web interface for administration tasks. +
                            • Shared Roster groups. +
                            • Command line administration tool. +
                            • Can integrate with existing authentication mechanisms. +
                            • Capability to send announce messages. +
                            • Statistics via JEP-0039 (Statistics Gathering). +

                            +
                            +
                          • Internationalized: ejabberd leads in internationalization. Hence it is very well suited in a globalized world. Related features are: +
                            • +Translated in 11 languages. +
                            • Support for IDNA. +
                            • Support for xml:lang. +

                            +
                            +
                          • Modular: ejabberd's modular architecture allows easy customization: +
                            • +Load only the modules you want. +
                            • Extend ejabberd with your own custom modules. +
                          + + +

                          1.2  Additional Features

                          + + + +Besides common Jabber server features, ejabberd comes with a wide range of other features: +
                          • +The ability to interface via external components with networks such as: +
                            • +AIM +
                            • ICQ +
                            • MSN +
                            • Yahoo! +
                            +
                          • Open Standards +
                            • +Many JEPs supported. +
                            • XML-based protocol +
                            • Fully XMPP compliant for c2s connections (Core & IM) +
                            +
                          • Security +
                            • +SASL and STARTTLS for c2s connections. +
                            • STARTTLS and Dialback s2s connections. +
                            • Obsolete SSL for c2s connections also supported. +
                            • Web interface accessible via HTTPS secure access. +
                            +
                          • Databases +
                            • +Mnesia. +
                            • ODBC data storage support (tested against PostgreSQL). +
                            +
                          • Authentication +
                            • +LDAP. +
                            • External Authentication script. +
                            • Internal Authentication. +
                            +
                          • Others + -The misfeatures of ejabberd are: -
                            • -No support for authentication and STARTTLS in S2S connections
                            -

                            2  Installation from Source

                            +

                            2  Installation from Source

                            + -

                            2.1  Installation Requirements

                            +

                            2.1  Installation Requirements

                            - + -

                            2.1.1  Unix

                            +

                            2.1.1  “Unix-like” operating systems

                            -To compile ejabberd, you will need the following packages: -
                            • + +To compile ejabberd on a “Unix-like” operating system, you need: +
                              • GNU Make; -
                              • GCC; -
                              • libexpat 1.95 or later; -
                              • Erlang/OTP R8B or later; -
                              • OpenSSL 0.9.6 or later (optional). +
                              • GCC; +
                              • libexpat 1.95 or higher; +
                              • Erlang/OTP R8B or higher; +
                              • OpenSSL 0.9.6 or higher (optional).
                              -

                              2.1.2  Windows

                              +

                              2.1.2  Windows

                              -To compile ejabberd in MS Windows environment, you will need the following -packages: -
                              • + +To compile ejabberd on a Windows flavour, you need: + - + -

                                2.2  Obtaining

                                +

                                2.2  Obtaining ejabberd

                                -Stable ejabberd release can be obtained at + +Released versions of ejabberd can be obtained from
                                http://www.process-one.net/en/projects/ejabberd/download.html.

                                -The latest alpha version can be retrieved from Subversion repository. -
                                -  svn co svn://svn.process-one.net/opt/data/svn/ejabberd/trunk ejabberd
                                +
                                +The latest development version can be retrieved from the Subversion repository.
                                +
                                +  svn co http://svn.process-one.net/ejabberd/trunk ejabberd
                                 
                                -

                                2.3  Compilation

                                +

                                2.3  Compilation

                                - -

                                2.3.1  Unix

                                + + +

                                2.3.1  “Unix-like” operating systems

                                -
                                +
                                +Compile ejabberd on a “Unix-like” operating system by executing:
                                +
                                   ./configure
                                   make
                                   su
                                   make install
                                 
                                -This will install ejabberd to /var/lib/ejabberd directory, -ejabberd.cfg to /etc/ejabberd directory and create -/var/log/ejabberd directory for log files.
                                -
                                +These commands will: +
                                • +install ejabberd into the directory /var/lib/ejabberd, +
                                • install the configuration file into /etc/ejabberd, +
                                • create a directory called /var/log/ejabberd to store log files. +
                                -

                                2.3.2  Windows

                                +

                                2.3.2  Windows

                                -
                                • + +
                                  • Install Erlang emulator (for example, into C:\Program Files\erl5.3). -
                                  • Install Expat library into C:\Program Files\Expat-1.95.7 +
                                  • Install Expat library into C:\Program Files\Expat-1.95.7 directory.

                                    Copy file C:\Program Files\Expat-1.95.7\Libs\libexpat.dll to your Windows system directory (for example, C:\WINNT or C:\WINNT\System32) -
                                  • Build and install Iconv library into C:\Program Files\iconv-1.9.1 directory.
                                    +
                                  • Build and install the Iconv library into the directory + C:\Program Files\iconv-1.9.1.

                                    Copy file C:\Program Files\iconv-1.9.1\bin\iconv.dll to your - Windows system directory.
                                    + Windows system directory (more installation instructions can be found in the + file README.woe32 in the iconv distribution).

                                    -Note: Instead of copying libexpat.dll and iconv.dll to Windows - directory, you can add directories +Note: instead of copying libexpat.dll and iconv.dll to the Windows + directory, you can add the directories C:\Program Files\Expat-1.95.7\Libs and - C:\Program Files\iconv-1.9.1\bin to PATH environment + C:\Program Files\iconv-1.9.1\bin to the PATH environment variable. -
                                  • Being in ejabberd\src directory run: -
                                    +
                                  • While in the directory ejabberd\src run: +
                                     configure.bat
                                     nmake -f Makefile.win32
                                    -
                                  • Edit file ejabberd\src\ejabberd.cfg and run -
                                    +
                                  • Edit the file ejabberd\src\ejabberd.cfg and run +
                                     werl -s ejabberd -name ejabberd
                                     
                                  -

                                  2.4  Starting

                                  +

                                  2.4  Starting

                                  -To start ejabberd, use the following command: -
                                  +
                                  +Execute the following command to start ejabberd:
                                  +
                                     erl -pa /var/lib/ejabberd/ebin -name ejabberd -s ejabberd
                                   
                                  or -
                                  +
                                     erl -pa /var/lib/ejabberd/ebin -sname ejabberd -s ejabberd
                                  -
                                  In the latter case Erlang node will be identified using only first part of host -name, i. e. other Erlang nodes outside this domain can't contact this node.
                                  +
                                  In the latter case the Erlang node will be identified using only the first part +of the host name, i. e. other Erlang nodes outside this domain can't contact +this node.

                                  -Note that when using above command ejabberd will search for config file -in current directory and will use current directory for storing user database -and logging.
                                  +Note that when using the above command, ejabberd will search for the +configuration file in the current directory and will use the current directory +for storing its user database and for logging.

                                  -To specify path to config file, log files and Mnesia database directory, -you may use the following command: -
                                  +To specify the path to the configuration file, the log files and the Mnesia
                                  +database directory, you may use the following command:
                                  +
                                     erl -pa /var/lib/ejabberd/ebin \
                                         -sname ejabberd \
                                         -s ejabberd \
                                  @@ -281,273 +389,356 @@ you may use the following command:
                                         -sasl sasl_error_logger \{file,\"/var/log/ejabberd/sasl.log\"\} \
                                         -mnesia dir \"/var/lib/ejabberd/spool\"
                                   
                                  -You can find other useful options in Erlang manual page (erl -man erl).
                                  +You can find other useful options in the Erlang manual page +(erl -man erl).

                                  -To use more than 1024 connections, you should set environment variable +To use more than 1024 connections, you should set the environment variable ERL_MAX_PORTS: -
                                  +
                                     export ERL_MAX_PORTS=32000
                                  -
                                  Note that with this value ejabberd will use more memory (approximately 6MB +
                                  Note that with this value, ejabberd will use more memory (approximately 6 MB more).

                                  -To reduce memory usage, you may set environment variable +To reduce memory usage, you may set the environment variable ERL_FULLSWEEP_AFTER: -
                                  +
                                     export ERL_FULLSWEEP_AFTER=0
                                   
                                  But in this case ejabberd can start to work slower.

                                  -

                                  3  Configuration

                                  +

                                  3  Configuration

                                  -

                                  3.1  Initial Configuration

                                  +

                                  3.1  Initial Configuration

                                  -The configuration file is initially loaded the first time ejabberd is -executed, when it is parsed and stored in a database. Subsequently the -configuration is loaded from the database and any commands in the configuration -file are appended to the entries in the database. The configuration file -consists of a sequence of Erlang terms. Parts of lines after `%' sign -are ignored. Each term is tuple, where first element is name of option, and -other are option values. E. g. if this file does not contain a ``host'' -definition, then old value stored in the database will be used.
                                  + +The configuration file will be loaded the first time you start ejabberd. The +content from this file will be parsed and stored in a database. Subsequently the +configuration will be loaded from the database and any commands in the +configuration file are appended to the entries in the database. The +configuration file contains a sequence of Erlang terms. Lines beginning with a +`%' sign are ignored. Each term is a tuple of which the first element is +the name of an option, and any further elements are that option's values. If the +configuration file do not contain for instance the “hosts” option, the old +host name(s) stored in the database will be used.

                                  -To override old values stored in the database the following lines can be added -in config: -
                                  +You can override the old values stored in the database by adding next lines to
                                  +the configuration file:
                                  +
                                     override_global.
                                     override_local.
                                     override_acls.
                                  -
                                  With this lines old global or local options or ACLs will be removed before -adding new ones.
                                  +
                                  With these lines the old global options, local options and ACLs will be removed +before new ones are added.

                                  -

                                  3.1.1  Host Names

                                  +

                                  3.1.1  Host Names

                                  -Option hosts defines a list of Jabber domains that ejabberd -serves. E. g. to serve example.org and example.com domains add -the following line in the config: -
                                  -  {hosts, ["example.org", "example.com"]}.
                                  -
                                  -Option host defines one Jabber domain that ejabberd serves. -E. g. to serve only example.org domain add the following line in the -config: -
                                  -  {host, "example.org"}.
                                  -
                                  It have the same effect as -
                                  +
                                  +The option hosts defines a list containing one or more domains that
                                  +ejabberd will serve.
                                  +
                                  +Examples: +
                                  • +Serving one domain: +
                                    • +
                                         {hosts, ["example.org"]}.
                                      -
                                      +
                                • Backwards compatibility with older ejabberd versions can be retained + with: +
                                  +  {host, "example.org"}.
                                  +
                                +
                              • Serving two domains: +
                                +  {hosts, ["one.org", "two.org"]}.
                                +
                              -

                              3.1.2  Default Language

                              +

                              3.1.2  Default Language

                              -Option language defines default language of ejabberd messages, sent -to users. Default value is "en". In order to take effect there must be a -translation file <language>.msg in ejabberd msgs directory. -E. g. to use Russian as default language add the following line in the config: -
                              +
                              +The option language defines the default language of server strings that
                              +can be seen by Jabber clients. If a Jabber client do not support
                              +xml:lang, the specified language is used. The default value for the
                              +option language is "en". In order to take effect there must be a
                              +translation file <language>.msg in ejabberd's msgs directory.
                              +
                              +Examples: +
                              • +To set Russian as default language: +
                                   {language, "ru"}.
                                -
                                +
                            • To set Spanish as default language: +
                              +  {language, "es"}.
                              +
                            -

                            3.1.3  Access Rules

                            +

                            3.1.3  Access Rules

                            -Access control in ejabberd is performed via Access Control Lists (ACL). The -declarations of ACL in config file have following syntax: -
                            +
                            +Access control in ejabberd is performed via Access Control Lists (ACLs). The
                            +declarations of ACLs in the configuration file have the following syntax:
                            +
                               {acl, <aclname>, {<acltype>, ...}}.
                             
                            -<acltype> can be one of following: -
                            -all
                            Matches all JIDs. Example: -
                            +<acltype> can be one of the following:
                            +
                            +all
                            Matches all JIDs. Example: +
                             {acl, all, all}.
                            -
                            {user, <username>}
                            Matches user with name +
                            {user, <username>}
                            Matches the user with the name <username> at the first virtual host. Example: -
                            -{acl, admin, {user, "aleksey"}}.
                            -
                            {user, <username>, <server>}
                            Matches user with JID +
                            +{acl, admin, {user, "yozhik"}}.
                            +
                            {user, <username>, <server>}
                            Matches the user with the JID <username>@<server> and any resource. Example: -
                            -{acl, admin, {user, "aleksey", "jabber.ru"}}.
                            -
                            {server, <server>}
                            Matches any JID from server +
                            +{acl, admin, {user, "yozhik", "example.org"}}.
                            +
                            {server, <server>}
                            Matches any JID from server <server>. Example: -
                            -{acl, jabberorg, {server, "jabber.org"}}.
                            -
                            {user_regexp, <regexp>}
                            Matches local user with name that +
                            +{acl, exampleorg, {server, "example.org"}}.
                            +
                            {user_regexp, <regexp>}
                            Matches any local user with a name that matches <regexp> at the first virtual host. Example: -
                            +
                             {acl, tests, {user, "^test[0-9]*$"}}.
                            -
                            {user_regexp, <regexp>, <server>}
                            Matches user with name - that matches <regexp> and from server <server>. Example: -
                            +
                            {user_regexp, <regexp>, <server>}
                            Matches any user with a name + that matches <regexp> at server <server>. Example: +
                             {acl, tests, {user, "^test", "example.org"}}.
                            -
                            {server_regexp, <regexp>}
                            Matches any JID from server that +
                            {server_regexp, <regexp>}
                            Matches any JID from the server that matches <regexp>. Example: -
                            +
                             {acl, icq, {server, "^icq\\."}}.
                            -
                            {node_regexp, <user_regexp>, <server_regexp>}
                            Matches user - with name that matches <user_regexp> and from server that matches +
                            {node_regexp, <user_regexp>, <server_regexp>}
                            Matches any user + with a name that matches <user_regexp> at any server that matches <server_regexp>. Example: -
                            -{acl, aleksey, {node_regexp, "^aleksey$", "^jabber.(ru|org)$"}}.
                            -
                            {user_glob, <glob>}
                            -
                            {user_glob, <glob>, <server>}
                            -
                            {server_glob, <glob>}
                            -
                            {node_glob, <user_glob>, <server_glob>}
                            This is same as - above, but uses shell glob patterns instead of regexp. These patterns can - have following special characters: -
                            - *
                            matches any string including the null string. -
                            ?
                            matches any single character. -
                            [...]
                            matches any of the enclosed characters. Character +
                            +{acl, yohzik, {node_regexp, "^yohzik$", "^example.(com|org)$"}}.
                            +
                            {user_glob, <glob>}
                            +
                            {user_glob, <glob>, <server>}
                            +
                            {server_glob, <glob>}
                            +
                            {node_glob, <user_glob>, <server_glob>}
                            This is the same as + above. However, it uses shell glob patterns instead of regexp. These patterns + can have the following special characters: +
                            + *
                            matches any string including the null string. +
                            ?
                            matches any single character. +
                            [...]
                            matches any of the enclosed characters. Character ranges are specified by a pair of characters separated by a `-'. - If the first character after `[' is a `!', then any + If the first character after `[' is a `!', any character not enclosed is matched.
                            The following ACLs are pre-defined: -
                            -all
                            Matches all JIDs. -
                            none
                            Matches none JIDs. +
                            +all
                            Matches any JID. +
                            none
                            Matches no JID.
                            -An entry allowing or denying access to different services would look similar to +An entry allowing or denying access to different services looks similar to this: -
                            +
                               {access, <accessname>, [{allow, <aclname>},
                                                       {deny, <aclname>},
                                                       ...
                                                      ]}.
                             
                            When a JID is checked to have access to <accessname>, the server -sequentially checks if this JID mathes one of the ACLs that are second elements -in each tuple in list. If it is matched, then the first element of matched -tuple is returned else ``deny'' is returned.
                            +sequentially checks if that JID mathes any of the ACLs that are named in the +second elements of the tuples in the list. If it matches, the first element of +the first matched tuple is returned, otherwise “deny” is returned.

                            Example: -
                            +
                               {access, configure, [{allow, admin}]}.
                               {access, something, [{deny, badmans},
                                                    {allow, all}]}.
                             
                            -Following access rules pre-defined: -
                            -all
                            Always returns ``allow'' -
                            none
                            Always returns ``deny'' +The following access rules are pre-defined: +
                            +all
                            Always returns “allow” +
                            none
                            Always returns “deny
                            - + -

                            3.1.4  Shapers Configuration

                            +

                            3.1.4  Shapers

                            -With shapers is possible to bound connection traffic. The declarations of -shapers in config file have following syntax: -
                            +
                            +Shapers enable you to limit connection traffic. The syntax of
                            +shapers is like this:
                            +
                               {shaper, <shapername>, <kind>}.
                            -
                            Currently implemented only one kind of shaper: maxrate. It have +
                            Currently only one kind of shaper called maxrate is available. It has the following syntax: -
                            +
                               {maxrate, <rate>}
                            -
                            where <rate> means maximum allowed incomig rate in bytes/second. -E. g. to define shaper with name ``normal'' and maximum allowed rate -1000 bytes/s, add following line in config: -
                            +
                            where <rate> stands for the maximum allowed incomig rate in bytes per +second.
                            +
                            +Examples: +
                            • +To define a shaper named “normal” with traffic speed limited to +1,000 bytes/second: +
                                 {shaper, normal, {maxrate, 1000}}.
                              -
                              +
                          • To define a shaper named “fast” with traffic speed limited to +50,000 bytes/second: +
                            +  {shaper, fast, {maxrate, 50000}}.
                            +
                          -

                          3.1.5  Listened Sockets

                          +

                          3.1.5  Listened Sockets

                          -Option listen defines list of listened sockets and what services -runned on them. Each element of list is a tuple with following elements: -
                          • -Port number; -
                          • Module that serves this port; -
                          • Options to this module. + +The option listen defines for which addresses and ports ejabberd +will listen and what services will be run on them. Each element of the list is a +tuple with the following elements: +
                            • +Port number. +
                            • Module that serves this port. +
                            • Options to this module.
                            -Currently these modules are implemented: -
                            - ejabberd_c2s
                            This module serves C2S connections.
                            + +Currently next modules are implemented: +

                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                            ejabberd_c2sDescriptionHandles c2s connections.
                             Optionsaccess, certfile, inet6, + ip, shaper, ssl, tls, + starttls,
                              starttls_required
                            ejabberd_s2s_inDescriptionHandles incoming s2s + connections.
                             Optionsinet6, ip
                            ejabberd_serviceDescriptionInteracts with external + components (*).
                             Optionsaccess, hosts, inet6, + ip, shaper
                            ejabberd_httpDescriptionHandles incoming HTTP + connections.
                             Optionscertfile, http_poll, + inet6, ip, tls, web_admin
                            +

                            +(*) The mechanism for external components is defined in Jabber Component Protocol (JEP-0114).

                            -The following options are defined: -
                            - {access, <access rule>}
                            This option defines access of users - to this C2S port. Default value is ``all''. -
                            {shaper, <access rule>}
                            This option is like previous, but - use shapers instead of ``allow'' and ``deny''. Default - value is ``none''. -
                            {ip, IPAddress}
                            This option specifies which network interface to - listen on. For example {ip, {192, 168, 1, 1}}. -
                            inet6
                            Set up the socket for IPv6. -
                            starttls
                            This option specifies that STARTTLS extension is available - on connections to this port. You should also set ``certfile'' - option. -
                            tls
                            This option specifies that traffic on this port will be - encrypted using SSL immediately after connecting. You should also set - ``certfile'' option. -
                            ssl
                            This option specifies that traffic on this port will be - encrypted using SSL. You should also set ``certfile'' option. It - is recommended to use tls option instead. -
                            {certfile, Path}
                            Path to a file containing the SSL certificate. -
                            -
                            ejabberd_s2s_in
                            This module serves incoming S2S connections. -
                            ejabberd_service
                            This module serves connections from Jabber - services (i. e. that use the jabber:component:accept namespace).
                            +The following options are available: +
                            + {access, <access rule>}
                            This option defines + access to the port. The default value is “all”. +
                            {certfile, Path}
                            Path to a file containing the SSL certificate. +
                            {hosts, [Hostnames], [HostOptions]}
                            This option + defines one or more hostnames of connected services and enables you to + specify additional options including {password, Secret}. +
                            http_poll
                            + This option enables HTTP Polling (JEP-0025) support. HTTP Polling + enables access via HTTP requests to ejabberd from behind firewalls which + do not allow outgoing sockets on port 5222.

                            -The following additional options are defined for ejabberd_service - (options access, shaper, ip, inet6 are - still valid): -
                            - {host, Hostname, [HostOptions]}
                            This option defines hostname of connected - service and allows to specify additional options, e. g. - {password, Secret}. -
                            {hosts, [Hostnames], [HostOptions]}
                            The same as above, but allows to - specify several hostnames. -
                            -
                            ejabberd_http
                            This module serves incoming HTTP connections.
                            -
                            -The following options are defined: -
                            - http_poll
                            This option enables JEP-0025 (HTTP Polling) - support. It is available then at http://server:port/http-poll/.
                            -
                            -
                            web_admin
                            This option enables web-based interface for ejabberd - administration which is available at http://server:port/admin/, - login and password should be equal to username and password of one of - registered users who have permission defined in ``configure'' access rule. -
                            +If HTTP Polling is enabled, it will be available at + http://server:port/http-poll/. Be aware that support for HTTP Polling + is also needed in the Jabber client. Remark also that HTTP Polling can be + interesting to host a web-based Jabber client such as + JWChat (there is a tutorial to + install JWChat with + instructions for ejabberd). +
                            inet6
                            Set up the socket for IPv6. +
                            {ip, IPAddress}
                            This option specifies which network + interface to listen for. For example {ip, {192, 168, 1, 1}}. +
                            {shaper, <access rule>}
                            This option defines a + shaper for the port (see section 3.1.4). The default value + is “none”. +
                            ssl
                            This option specifies that traffic on + the port will be encrypted using SSL. You should also set the + certfile option. It is recommended to use the tls option + instead. +
                            starttls
                            This option + specifies that STARTTLS encryption is available on connections to the port. + You should also set the certfile option. +
                            starttls_required
                            This option + specifies that STARTTLS encryption is required on connections to the port. + No unencrypted connections will be allowed. You should also set the + certfile option. +
                            tls
                            This option specifies that traffic on + the port will be encrypted using SSL immediately after connecting. You + should also set the certfile option. +
                            web_admin
                            This option + enables the web interface for ejabberd administration which is available + at http://server:port/admin/. Login and password are the username and + password of one of the registered users who are granted access by the + “configure” access rule.
                            -For example, the following configuration defines that: -
                            • -C2S connections are listened on port 5222 and 5223 (SSL) and denied for - user ``bad'' -
                            • S2S connections are listened on port 5269 -
                            • HTTP connections are listened on port 5280 and administration interface - and HTTP Polling support are enabled -
                            • All users except admins have traffic limit 1000 B/s -
                            • AIM transport aim.example.org is connected to port 5233 with - password ``aimsecret'' -
                            • JIT transports icq.example.org and sms.example.org are - connected to port 5234 with password ``jitsecret'' -
                            • MSN transport msn.example.org is connected to port 5235 with - password ``msnsecret'' -
                            • Yahoo! transport yahoo.example.org is connected to port 5236 with - password ``yahoosecret'' -
                            • Gadu-Gadu transport gg.example.org is connected to port 5237 with - password ``ggsecret'' -
                            • ILE service ile.example.org is connected to port 5238 with - password ``ilesecret'' +For instance, the following configuration defines that: +
                              • +c2s connections are listened for on port 5222 and 5223 (SSL) and denied + for the user “bad” +
                              • s2s connections are listened for on port 5269 +
                              • Port 5280 is serving the web interface and the HTTP Polling service. Note + that it is also possible to serve them on different ports. The second + example in section 3.3.1 shows how exactly this can be done. +
                              • All users except for the administrators have a traffic of limit + 1,000 Bytes/second +
                              • The + AIM transport + aim.example.org is connected to port 5233 with password + “aimsecret” +
                              • The ICQ transport JIT (icq.example.org and + sms.example.org) is connected to port 5234 with password + “jitsecret” +
                              • The + MSN transport + msn.example.org is connected to port 5235 with password + “msnsecret” +
                              • The + Yahoo! transport + yahoo.example.org is connected to port 5236 with password + “yahoosecret” +
                              • The Gadu-Gadu transport gg.example.org is + connected to port 5237 with password “ggsecret” +
                              • The + Jabber Mail Component + jmc.example.org is connected to port 5238 with password + “jmcsecret
                              -
                              +
                                 {acl, blocked, {user, "bad"}}.
                                 {access, c2s, [{deny, blocked},
                                                {allow, all}]}.
                              @@ -570,13 +761,13 @@ C2S connections are listened on port 5222 and 5223 (SSL) and denied for
                                                              [{password, "yahoosecret"}]}]},
                                   {5237, ejabberd_service, [{host, "gg.example.org",
                                                              [{password, "ggsecret"}]}]},
                              -    {5238, ejabberd_service, [{host, "ile.example.org",
                              -                               [{password, "ilesecret"}]}]}
                              +    {5238, ejabberd_service, [{host, "jmc.example.org",
                              +                               [{password, "jmcsecret"}]}]}
                                  ]
                                 }.
                              -
                              Note, that for jabberd14- or wpjabberd-based services you have to make the -transports log and do XDB by themselves: -
                              +
                              Note, that for jabberd 1.4- or WPJabber-based +services you have to make the transports log and do XDB by themselves: +
                                 <!--
                                    You have to add elogger and rlogger entries here when using ejabberd.
                                    In this case the transport will do the logging.
                              @@ -591,8 +782,8 @@ transports log and do XDB by themselves:
                               
                                 <!--
                                    Some Jabber server implementations do not provide
                              -     XDB services (for example jabberd 2.0 and ejabberd).
                              -     xdb_file_so is loaded in to handle all XDB requests.
                              +     XDB services (for example, jabberd2 and ejabberd).
                              +     xdb_file.so is loaded in to handle all XDB requests.
                                 -->
                               
                                 <xdb id="xdb">
                              @@ -608,16 +799,18 @@ transports log and do XDB by themselves:
                               
                              -

                              3.1.6  Modules

                              +

                              3.1.6  Modules

                              -Option modules defines the list of modules that will be loaded after -ejabberd startup. Each list element is a tuple where first element is a -name of a module and second is list of options to this module. See -section A for detailed information on each module.
                              + +The option modules defines the list of modules that will be loaded after +ejabberd startup. Each entry in the list is a tuple in which the first +element is the name of a module and the second is a list of options for that +module. Read section A for detailed information about each +module.

                              Example: -
                              +
                                 {modules,
                                  [{mod_register,  []},
                                   {mod_roster,    []},
                              @@ -628,7 +821,7 @@ Example:
                                   {mod_vcard,     []},
                                   {mod_offline,   []},
                                   {mod_announce,  [{access, announce}]},
                              -    {mod_echo,      [{host, "echo.example.org"}]},
                              +    {mod_echo,      [{hosts, ["echo.example.org"]}]},
                                   {mod_private,   []},
                                   {mod_irc,       []},
                                   {mod_muc,       []},
                              @@ -638,268 +831,426 @@ Example:
                                   {mod_version,   []}
                                  ]}.
                               
                              - + -

                              3.1.7  Virtual Host Configuration

                              +

                              3.1.7  Virtual Hosting

                              -Options can be defined separately for different virtual hosts using -host_config option. It have the have following syntax: -
                              +
                              +Options can be defined separately for every virtual host using the
                              +host_config option. It has the following
                              +syntax:
                              +
                                 {host_config, <hostname>, [<option>, <option>, ...]}.
                               
                              -Example: -
                              -{host_config, "example.org", [{auth_method, internal}]}.
                              +Examples:
                              +
                              • +Domain one.org is using the internal authentication method while + domain two.org is using the LDAP server running on the domain + localhost to perform authentication: +
                                +{host_config, "one.org", [{auth_method, internal}]}.
                                 
                                -{host_config, "example.com", [{auth_method, ldap},
                                +{host_config, "two.org", [{auth_method, ldap},
                                                               {ldap_servers, ["localhost"]},
                                                               {ldap_uidattr, "uid"},
                                                               {ldap_rootdn, "dc=localdomain"},
                                                               {ldap_rootdn, "dc=example,dc=com"},
                                                               {ldap_password, ""}]}.
                                -
                                +
                            • Domain one.org is using ODBC to perform authentication + while domain two.org is using the LDAP servers running on the domains + localhost and otherhost: +
                              +{host_config, "one.org", [{auth_method, odbc},
                              +                              {odbc_server, "DSN=ejabberd;UID=ejabberd;PWD=ejabberd"}]}.
                              +
                              +{host_config, "two.org", [{auth_method, ldap},
                              +                              {ldap_servers, ["localhost", "otherhost"]},
                              +                              {ldap_uidattr, "uid"},
                              +                              {ldap_rootdn, "dc=localdomain"},
                              +                              {ldap_rootdn, "dc=example,dc=com"},
                              +                              {ldap_password, ""}]}.
                              +
                            + + +

                            3.2  Creating an Initial Administrator

                            + + +Before the web interface can be entered to perform administration tasks, an +account with administrator rights is needed on your ejabberd deployment.
                            +
                            +Instructions to create an initial administrator account: +
                            1. +Register an account on your ejabberd deployment. An account can be + created in two ways: +
                              1. + Using the tool ejabberdctl (see + section 3.3.2): +
                                +% ejabberdctl node@host register admin example.org password
                                +
                              2. Using In-Band Registration (see section A.12): you can + use a Jabber client to register an account. +
                              +
                            2. Edit the configuration file to promote the account created in the previous + step to an account with administrator rights. Note that if you want to add + more administrators, a seperate acl entry is needed for each administrator. +
                              +  {acl, admins, {user, "admin", "example.org"}}.
                              +  {access, configure, [{allow, admins}]}.
                              +
                            3. Restart ejabberd to load the new configuration. +
                            4. Open the web interface (http://server:port/admin/) in your + favourite browser. Make sure to enter the full JID as username (in this + example: admin@example.org. The reason that you also need to enter the + suffix, is because ejabberd's virtual hosting support. +
                            -

                            3.2  Online Configuration and Monitoring

                            +

                            3.3  Online Configuration and Monitoring

                            - + -

                            3.2.1  Web-based Administration Interface

                            +

                            3.3.1  Web Interface

                            -To perform online reconfiguration of ejabberd you need to enable -ejabberd_http listener with option web_admin (see -section 3.1.5). After that you can open URL -http://server:port/admin/ with you favorite web-browser and enter -username and password of an ejabberd user with administrator rights. E. g. -with such config: -
                            -  ...
                            -  {host, "example.org"}.
                            -  ...
                            -  {listen,
                            -   [...
                            -    {5280, ejabberd_http, [web_admin]},
                            -    ...
                            -   ]
                            -  }.
                            -
                            you should enter URL http://example.org:5280/admin/. After -authentication you should see something like in figure 1. -

                            + +To perform online configuration of ejabberd you need to enable the +ejabberd_http listener with the option web_admin (see +section 3.1.5). Then you can open +http://server:port/admin/ in your favourite web browser. You +will be asked to enter the username (the full Jabber ID) and password +of an ejabberd user with administrator rights. After authentication +you will see a page similar to figure 1. +


                            -
                            Figure 1: Web-administration top page

                            +
                            +
                            Figure 1: Top page from the web interface

                            +
                            -

                            -Here you can edit access restrictions, manage users, create backup files, -manage DB, enable/disable listened ports, and view statistics.
                            +

                            +Here you can edit access restrictions, manage users, create backups, +manage the database, enable/disable ports listened for, view server +statistics,...

                            - +Examples: +
                            • +You can serve the web interface on the same port as the + HTTP Polling interface. In this example + you should point your web browser to http://example.org:5280/admin/ to + administer all virtual hosts or to + http://example.org:5280/admin/server/two.org/ to administer only the + virtual host two.org. Before you get access to the web interface you + need to enter as username, the JID and password from a registered user that is + allowed to configure ejabberd. In this example you can enter as username + “admin@one.org” to administer all virtual hosts (first URL). If you + log in with “admin@two.org” on
                              +http://example.org:5280/admin/server/two.org/ you can only administer + the virtual host two.org. +
                              +  ...
                              +  {acl, admins, {user, "admin", "one.org"}}.
                              +  {host_config, "two.org", [{acl, admins, {user, "admin", "two.org"}}]}.
                              +  {access, configure, [{allow, admins}]}.
                              +  ...
                              +  {hosts, ["example.org"]}.
                              +  ...
                              +  {listen,
                              +   [...
                              +    {5280, ejabberd_http, [http_poll, web_admin]},
                              +    ...
                              +   ]
                              +  }.
                              +
                            • For security reasons, you can serve the web interface on a secured + connection, on a port differing from the HTTP Polling interface, and bind it + to the internal LAN IP. The web interface will be accessible by pointing your + web browser to https://192.168.1.1:5280/admin/: +
                              +  ...
                              +  {hosts, ["example.org"]}.
                              +  ...
                              +  {listen,
                              +   [...
                              +    {5270, ejabberd_http,    [http_poll]},
                              +    {5280, ejabberd_http,    [web_admin, {ip, {192, 168, 1, 1}},
                              +                              tls, {certfile, "/usr/local/etc/server.pem"}]},
                              +    ...
                              +   ]
                              +  }.
                              +
                            + -

                            3.2.2  ejabberdctl tool

                            +

                            3.3.2  ejabberdctl

                            -It is possible to do some administration operations using ejabberdctl -command-line tool. You can check available options running this command -without arguments: -
                            +It is possible to do some administration operations using the command
                            +line tool ejabberdctl. You can list all available options by
                            +running ejabberdctl without arguments:
                            +
                             % ejabberdctl
                             Usage: ejabberdctl node command
                             
                             Available commands:
                            +  status                        get ejabberd status
                               stop                          stop ejabberd
                               restart                       restart ejabberd
                               reopen-log                    reopen log file
                            -  register user password        register a user
                            -  unregister user               unregister a user
                            -  backup file                   store a database backup in file
                            +  register user server password register a user
                            +  unregister user server        unregister a user
                            +  backup file                   store a database backup to file
                               restore file                  restore a database backup from file
                               install-fallback file         install a database fallback from file
                            -  dump file                     dump a database in a text file
                            +  dump file                     dump a database to a text file
                               load file                     restore a database from a text file
                            +  import-file file              import user data from jabberd 1.4 spool file
                            +  import-dir dir                import user data from jabberd 1.4 spool directory
                               registered-users              list all registered users
                            +  delete-expired-messages       delete expired offline messages from database
                             
                             Example:
                               ejabberdctl ejabberd@host restart
                             
                            +Additional information: +
                            +reopen-log
                            If you use a tool to rotate logs, you have to configure it + so that this command is executed after each rotation. +
                            backup, restore, install-fallback, dump, load
                            You can use these + commands to create and restore backups. +
                            import-file, import-dir
                            + These options can be used to migrate from other Jabber/XMPP servers. There + exist tutorials to migrate from jabberd 1.4 + and to migrate from jabberd2. +
                            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. +
                            + + +

                            4  Firewall Settings

                            + + + +You need to take the following ports in mind when configuring your firewall: +

                            + + + + + + + + + + + + + + + + + + +
                            PortDescription
                            5222SASL and unencrypted c2s connections.
                            5223Obsolete SSL c2s connections.
                            5269s2s connections.
                            4369Only for clustering (see 6).
                            port rangeOnly for clustring (see 6). This range + is configurable (see 2.4).
                            +

                            + + +

                            5  SRV Records

                            + + + + -

                            4  Clustering

                            +

                            6  Clustering

                            - -

                            4.1  How it works

                            + + +

                            6.1  How it Works

                            + A Jabber domain is served by one or more ejabberd nodes. These nodes can -be runned on different machines that are connected via a network. They all +be run on different machines that are connected via a network. They all must have the ability to connect to port 4369 of all another nodes, and must have the same magic cookie (see Erlang/OTP documentation, in other words the file ~ejabberd/.erlang.cookie must be the same on all nodes). This is -needed because all nodes exchange information about connected users, S2S +needed because all nodes exchange information about connected users, s2s connections, registered services, etc...

                            -Each ejabberd node have following modules: -
                            • -router; -
                            • local router. -
                            • session manager; -
                            • S2S manager; +Each ejabberd node has the following modules: +
                              • +router, +
                              • local router, +
                              • session manager, +
                              • s2s manager.
                              -

                              4.1.1  Router

                              +

                              6.1.1  Router

                              + This module is the main router of Jabber packets on each node. It -routes them based on their destinations domains. It uses a global -routing table. A domain of packet destination is searched in the -routing table, and if it is found, then the packet is routed to -appropriate process. If no, then it is sent to the S2S manager.
                              +routes them based on their destination's domains. It uses a global +routing table. The domain of the packet's destination is searched in the +routing table, and if it is found, the packet is routed to the +appropriate process. If not, it is sent to the s2s manager.

                              -

                              4.1.2  Local Router

                              +

                              6.1.2  Local Router

                              + This module routes packets which have a destination domain equal to -this server name. If destination JID has a non-empty user part, then -it is routed to the session manager, else it is processed depending on -its content.
                              +one of this server's host names. If the destination JID has a non-empty user +part, it is routed to the session manager, otherwise it is processed depending +on its content.

                              -

                              4.1.3  Session Manager

                              +

                              6.1.3  Session Manager

                              -This module routes packets to local users. It searches to what user -resource a packet must be sent via a presence table. Then packet is -either routed to appropriate C2S process, or stored in offline + +This module routes packets to local users. It looks up to which user +resource a packet must be sent via a presence table. Then the packet is +either routed to the appropriate c2s process, or stored in offline storage, or bounced back.

                              - + + +

                              6.1.4  s2s Manager

                              -

                              4.1.4  S2S Manager

                              This module routes packets to other Jabber servers. First, it -checks if an opened S2S connection from the domain of the packet -source to the domain of packet destination is existing. If it is -existing, then the S2S manager routes the packet to the process -serving this connection, else a new connection is opened.
                              +checks if an opened s2s connection from the domain of the packet's +source to the domain of the packet's destination exists. If that is the case, +the s2s manager routes the packet to the process +serving this connection, otherwise a new connection is opened.

                              - + -

                              4.2  How to setup ejabberd cluster

                              +

                              6.2  Clustering Setup

                              -Suppose you already setuped ejabberd on one of machines (first), and -you need to setup another one to make ejabberd cluster. Then do + +Suppose you already configured ejabberd on one machine named (first), +and you need to setup another one to make an ejabberd cluster. Then do following steps: -
                              1. +
                                1. Copy ~ejabberd/.erlang.cookie file from first to second.

                                  -(alt) You can also add ``-cookie content_of_.erlang.cookie'' - option to all ``erl'' commands below.
                                  +(alt) You can also add “-cookie content_of_.erlang.cookie” + option to all “erl” commands below.

                                  -
                                2. On second run under `ejabberd' user in a directory - where ejabberd will work later the following command: -
                                  +
                                3. On second run as the `ejabberd' user in the directory + where ejabberd will work later the following command: +
                                   erl -sname ejabberd \
                                       -mnesia extra_db_nodes "['ejabberd@first']" \
                                       -s mnesia
                                  -
                                  This will start mnesia serving same DB as ejabberd@first. - You can check this running ``mnesia:info().'' command. You - should see a lot of remote tables and a line like the following: -
                                  -running db nodes   = [ejabberd@first, ejabberd@second]
                                   
                                  - -
                                4. Now run the following in the same ``erl'' session: -
                                  + This will start Mnesia serving the same database as ejabberd@first.
                                  + You can check this by running the command “mnesia:info().”. You
                                  + should see a lot of remote tables and a line like the following:
                                  +
                                  +running db nodes   = [ejabberd@first, ejabberd@second]
                                  +

                                  +
                                  +
                                5. Now run the following in the same “erl” session: +
                                   mnesia:change_table_copy_type(schema, node(), disc_copies).
                                   
                                  - This will create local disc storage for DB.
                                  + This will create local disc storage for the database.

                                  -(alt) Change storage type of `scheme' table to ``RAM and disc - copy'' on second node via web interface.
                                  +(alt) Change storage type of `scheme' table to “RAM and disc + copy” on the second node via the web interface.

                                  -
                                6. Now you can add replicas of various tables to this node with - ``mnesia:add_table_copy'' or - ``mnesia:change_table_copy_type'' as above (just replace - ``schema'' with another table name and ``disc_copies'' - can be replaced with ``ram_copies'' or - ``disc_only_copies'').
                                  +
                                7. Now you can add replicas of various tables to this node with + “mnesia:add_table_copy” or + “mnesia:change_table_copy_type” as above (just replace + “schema” with another table name and “disc_copies” + can be replaced with “ram_copies” or + “disc_only_copies”).

                                  -What tables to replicate is very depend on your needs, you can get - some hints from ``mnesia:info().'' command, by looking at - size of tables and default storage type for each table on 'first'.
                                  +Which tables to replicate is very dependant on your needs, you can get + some hints from the command “mnesia:info().”, by looking at the + size of tables and the default storage type for each table on 'first'.

                                  -Replicating of table makes lookup in this table faster on this node, - but writing will be slower. And of course if machine with one of - replicas is down, other replicas will be used.
                                  +Replicating a table makes lookups in this table faster on this node. + Writing, on the other hand, will be slower. And of course if machine with one + of the replicas is down, other replicas will be used.

                                  -Also section 5.3 (Table Fragmentation) of - Mnesia Reference Manual can be useful.
                                  +Also section 5.3 (Table Fragmentation) of Mnesia User's Guide can be helpful. +

                                  -(alt) Same as in previous item, but for other tables.
                                  + (alt) Same as in previous item, but for other tables.

                                  -
                                8. Run ``init:stop().'' or just ``q().'' to exit from - erlang shell. This probably can take some time if mnesia is not yet - transfer and process all data it needed from first.
                                  +
                                9. Run “init:stop().” or just “q().” to exit from + the Erlang shell. This probably can take some time if Mnesia has not yet + transfered and processed all data it needed from first.

                                  -
                                10. Now run ejabberd on second with almost the same config as - on first (you probably don't need to duplicate ``acl'' - and ``access'' options --- they will be taken from +
                                11. Now run ejabberd on second with almost the same config as + on first (you probably don't need to duplicate “acl” + and “access” options — they will be taken from first, and mod_muc and mod_irc should be - enabled only on one machine in cluster). + enabled only on one machine in the cluster).
                                You can repeat these steps for other machines supposed to serve this domain.

                                -

                                A  Built-in Modules

                                +

                                A  Built-in Modules

                                + -

                                A.1  Common Options

                                +

                                A.1  Common Options

                                -The following options are used by many modules, so they are described in -separate section.
                                +The following options are used by many modules. Therefore, they are described in +this separate section.

                                -

                                A.1.1  iqdisc

                                +

                                A.1.1  iqdisc

                                + Many modules define handlers for processing IQ queries of different namespaces -to this server or to user (e. g. to example.org or to -user@example.org). This option defines processing discipline of +to this server or to a user (e. g. to example.org or to +user@example.org). This option defines processing discipline for these queries. Possible values are: -
                                -no_queue
                                All queries of namespace with this processing - discipline processed immediately. This also means that no other packets can - be processed until finished this. Hence this discipline is not recommended - if processing of query can take relatively long time. -
                                one_queue
                                In this case created separate queue for processing - of IQ queries of namespace with this discipline, and processing of this queue - is done in parallel with processing of other packets. This discipline is most - recommended. -
                                parallel
                                In this case for all packets with this discipline - spawned separate Erlang process, so all these packets processed in parallel. - Although spawning of Erlang process have relatively low cost, this can broke - server normal work, because Erlang emulator have limit on number of processes - (32000 by default). +
                                +no_queue
                                All queries of a namespace with this processing discipline are + processed immediately. This also means that no other packets can be processed + until this one has been completely processed. Hence this discipline is not + recommended if the processing of a query can take a relatively long time. +
                                one_queue
                                In this case a separate queue is created for the processing + of IQ queries of a namespace with this discipline. In addition, the processing + of this queue is done in parallel with that of other packets. This discipline + is most recommended. +
                                parallel
                                For every packet with this discipline a separate Erlang process + is spawned. Consequently, all these packets are processed in parallel. + Although spawning of Erlang process has a relatively low cost, this can break + the server's normal work, because the Erlang emulator has a limit on the + number of processes (32000 by default).
                                Example: -
                                +
                                   {modules,
                                    [
                                     ...
                                @@ -907,78 +1258,88 @@ Example:
                                     ...
                                    ]}.
                                 
                                - + -

                                A.1.2  host

                                +

                                A.1.2  hosts

                                - -This option explicitly defines hostname for the module which acts as a service.
                                + + +A module acting as a service can have one or more hostnames. These hostnames +can be defined with the hosts option.

                                -Example: -
                                +Examples:
                                +
                                • +Serving the echo module on one domain: +
                                  • +
                                    +  {modules,
                                    +   [
                                    +    ...
                                    +    {mod_echo, [{hosts, ["echo.example.org"]}]},
                                    +    ...
                                    +   ]}.
                                    +
                                  • Backwards compatibility with older ejabberd versions can be retained + with: +
                                       {modules,
                                        [
                                         ...
                                         {mod_echo, [{host, "echo.example.org"}]},
                                         ...
                                        ]}.
                                    -
                                    - - -

                                    A.1.3  hosts

                                    - - -This option explicitly defines a list of hostnames for the module which acts as -a service.
                                    -
                                    -Example: -
                                    +
                                  +
                                • Serving the echo module on tho domains: +
                                     {modules,
                                      [
                                       ...
                                  -    {mod_echo, [{hosts, ["echo.example.org", "echo.example.com"]}]},
                                  +    {mod_echo, [{hosts, ["echo.one.org", "echo.two.org"]}]},
                                       ...
                                      ]}.
                                  -
                                  +
                            -

                            A.2  mod_announce

                            +

                            A.2  mod_announce

                            -This module adds support for broadcast announce messages and MOTD. -When the module is loaded, it handles messages sent to the following JID's -(suppose that main server has address example.org): -
                            -example.org/announce/all
                            Message is sent to all registered users at -example.org. If the user is online and connected to several resources, -only resource with the highest priority will receive the message. If the -registered user is not connected, the message will be stored offline (if -oflline storage is available). -
                            example.org/announce/online
                            Message is sent to all connected users at -example.org. If the user is online and connected to several resources, -all resources will receive the message. -
                            example.org/announce/all-hosts/online
                            Message is sent to all connected -users at every virtual host. If the user is online and connected to several -resources, all resources will receive the message. -
                            example.org/announce/motd
                            Message is set as MOTD (Message of the Day) -and is sent to users at example.org as they login. In addition the -message is sent to all connected users (similar to announce/online -resource). -
                            example.org/announce/motd/update
                            Message is set as MOTD (Message of the -Day) and is sent to users at example.org as they login. The message -is not sent to all connected users. -
                            example.org/announce/motd/delete
                            Any message sent to this JID -removes existing MOTD. + +This module enables configured users to broadcast announcements and to set +the message of the day (MOTD). Configured users can do these actions with their +Jabber client by sending messages to specific JIDs. These JIDs are listed in +next paragraph. The first JID in each entry will apply only to the virtual host +example.org, while the JID between brackets will apply to all virtual +hosts: +
                            +example.org/announce/all (example.org/announce/all-hosts/all)
                            The + message is sent to all registered users. If the user is online and connected + to several resources, only the resource with the highest priority will receive + the message. If the registered user is not connected, the message will be + stored offline in assumption that offline storage + (see section A.8) is enabled. +
                            example.org/announce/online (example.org/announce/all-hosts/online)
                            The + message is sent to all connected users. If the user is online and connected + to several resources, all resources will receive the message. +
                            example.org/announce/motd (example.org/announce/all-hosts/motd)
                            The + message is set as the message of the day (MOTD) and is sent to users when they + login. In addition the message is sent to all connected users (similar to + announce/online). +
                            example.org/announce/motd/update (example.org/announce/all-hosts/motd/update)
                            + The message is set as message of the day (MOTD) and is sent to users when they + login. The message is not sent to any currently connected user. +
                            example.org/announce/motd/delete (example.org/announce/all-hosts/motd/delete)
                            + Any message sent to this JID removes the existing message of the day (MOTD).
                            Options: -
                            -access
                            Specifies who is allowed to send announce messages -and set MOTD (default value is none). +
                            +access
                            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).
                            -Example: -
                            -  % Only admins can send announcement messages:
                            -  {access, announce, [{allow, admin}]}.
                            +Examples:
                            +
                            • +Only administrators can send announcements: +
                              +  {access, announce, [{allow, admins}]}.
                               
                                 {modules,
                                  [
                              @@ -986,191 +1347,380 @@ Example:
                                   {mod_announce, [{access, announce}]},
                                   ...
                                  ]}.
                              -
                              - - -

                              A.3  mod_configure

                              - - -Options: -
                              -iqdisc
                              ejabberd:config IQ queries processing -discipline (see A.1.1). -
                              - - -

                              A.4  mod_disco

                              - - -This module adds support for JEP-0030 (Service Discovery).
                              -
                              -Options: -
                              -iqdisc
                              http://jabber.org/protocol/disco#items and - http://jabber.org/protocol/disco#info IQ queries processing -discipline (see A.1.1). -
                              extra_domains
                              List of domains that will be added to server - items reply -
                              -Example: -
                              +
                            • Administrators as well as the direction can send announcements: +
                              +  {acl, direction, {user, "big_boss", "example.org"}}.
                              +  {acl, direction, {user, "assistant", "example.org"}}.
                              +  {acl, admins, {user, "admin", "example.org"}}.
                              +  ...
                              +  {access, announce, [{allow, admins},
                              +                      {allow, direction}]}.
                              +  ...
                                 {modules,
                                  [
                                   ...
                              -    {mod_disco, [{extra_domains, ["jit.example.com",
                              -                                  "etc.example.com"]}]},
                              +    {mod_announce, [{access, announce}]},
                                   ...
                                  ]}.
                              -
                              +
                          + + +

                          A.3  mod_disco

                          + + + +This module adds support for Service Discovery (JEP-0030). With +this module enabled, services on your server can be discovered by +Jabber clients. Note that ejabberd has no modules with support +for the superseded Jabber Browsing (JEP-0011) and Agent Information +(JEP-0094). Accordingly, Jabber clients need to have support for +the newer Service Discovery protocol if you want them be able to discover +the services you offer.
                          +
                          +Options: +
                          +iqdisc
                          This specifies +the processing discipline for Service Discovery (http://jabber.org/protocol/disco#items and + http://jabber.org/protocol/disco#info) IQ queries +(see section A.1.1). +
                          extra_domains
                          With this option, + extra domains can be added to the Service Discovery item list. +
                          +Examples: +
                          • +To serve a link to the Jabber User Directory on jabber.org: +
                            +  {modules,
                            +   [
                            +    ...
                            +    {mod_disco, [{extra_domains, ["users.jabber.org"]}]},
                            +    ...
                            +   ]}.
                            +
                          • To serve a link to the transports on another server: +
                            +  {modules,
                            +   [
                            +    ...
                            +    {mod_disco, [{extra_domains, ["icq.example.com",
                            +                                  "msn.example.com"]}]},
                            +    ...
                            +   ]}.
                            +
                          • To serve a link to a few friendly servers: +
                            +  {modules,
                            +   [
                            +    ...
                            +    {mod_disco, [{extra_domains, ["example.org",
                            +                                  "example.com"]}]},
                            +    ...
                            +   ]}.
                            +
                          -

                          A.5  mod_echo

                          +

                          A.4  mod_echo

                          -This module acts as a service and simply returns to sender any Jabber -packet. Module may be useful for debugging.
                          + +This module simply echoes any Jabber +packet back to the sender. This mirror can be of interest for +ejabberd and Jabber client debugging.

                          Options: -
                          +
                          - host
                          Defines hostname of the service - (see A.1.2). -
                          hosts
                          Defines hostnames of the service - (see A.1.3). If neither host nor hosts - are not present, then prefix echo. is added to all ejabberd hostnames. + hosts
                          This option defines the hostnames of the + service (see section A.1.2). If neither hosts nor + the old host is present, the prefix “echo.” is added to all + ejabberd hostnames.
                          +Examples: +
                          • +Mirror, mirror, on the wall, who is the most beautiful + of them all? +
                            +  {modules,
                            +   [
                            +    ...
                            +    {mod_echo, [{hosts, ["mirror.example.org"]}]},
                            +    ...
                            +   ]}.
                            +
                          • If you still do not understand the inner workings of mod_echo, + you can find a few more examples in section A.1.2. +
                          -

                          A.6  mod_irc

                          +

                          A.5  mod_irc

                          -This module implements IRC transport.
                          + +This module is an IRC transport that can be used to join channels on IRC +servers.

                          +End user information: + +
                          • +A Jabber client with “groupchat 1.0” support or Multi-User + Chat support (JEP-0045) is necessary to join IRC channels. +
                          • An IRC channel can be joined in nearly the same way as joining a + Jabber Multi-User Chat room. The difference is that the room name will + be “channel%irc.example.org” in case irc.example.org is + the IRC server hosting “channel”. And of course the host should point + to the IRC transport instead of the Multi-User Chat service. +
                          • You can register your nickame by sending “IDENTIFY password” to
                            +nickserver!irc.example.org@irc.jabberserver.org. +
                          • Entering your password is possible by sending “LOGIN nick password”
                            +to nickserver!irc.example.org@irc.jabberserver.org. +
                          • When using a popular Jabber server, it can occur that no + connection can be achieved with some IRC servers because they limit the + number of conections from one IP. +
                          Options: -
                          +
                          - host
                          Defines hostname of the service - (see A.1.2). -
                          hosts
                          Defines hostnames of the service - (see A.1.3). If neither host nor hosts - are not present, then prefix irc. is added to all ejabberd hostnames. + hosts
                          This option defines the hostnames of the + service (see section A.1.2). If neither hosts nor + the old host is present, the prefix “irc.” is added to all + ejabberd hostnames. -
                          access
                          Specifies who is allowed to use IRC transport (default value is all). +
                          access
                          This option can be used to specify who + may use the IRC transport (default value: all).
                          -Example: -
                          +Examples:
                          +
                          • +In the first example, the IRC transport is available on (all) your + virtual host(s) with the prefix “irc.”. Furthermore, anyone is + able to use the transport. +
                               {modules,
                                [
                                 ...
                                 {mod_irc, [{access, all}]},
                                 ...
                                ]}.
                            -
                            +
                        • In next example the IRC transport is available on two virtual hosts + with different prefixes on each host. Moreover, the transport is only + accessible by paying customers registered on our domains and on other servers. +
                          +  {acl, paying_customers, {user, "customer1", "one.org"}}.
                          +  {acl, paying_customers, {user, "customer2", "two.org"}}.
                          +  {acl, paying_customers, {user, "customer3", "example.org"}}.
                          +  ...
                          +  {access, paying_customers, [{allow, paying_customers},
                          +                              {deny, all}]}.
                          +  ...
                          +  {modules,
                          +   [
                          +    ...
                          +    {mod_irc, [{access, paying_customers},
                          +               {hosts, ["irc.one.org", "irc-transport.two.org"]}]},
                          +    ...
                          +   ]}.
                          +
                        -

                        A.7  mod_last

                        +

                        A.6  mod_last

                        -This module adds support for JEP-0012 (Last Activity)
                        + +This module adds support for Last Activity (JEP-0012). It can be used to +discover when a disconnected user last accessed the server, to know when a +connected user was last active on the server, or to query the uptime of the +ejabberd server.

                        Options: -
                        -iqdisc
                        jabber:iq:last IQ queries processing -discipline (see A.1.1). +
                        +iqdisc
                        This specifies +the processing discipline for Last activity (jabber:iq:last) IQ queries +(see section A.1.1).
                        -

                        A.8  mod_muc

                        +

                        A.7  mod_muc

                        -This module implements JEP-0045 (Multi-User Chat) service.
                        + +With this module enabled, your server will support Multi-User Chat +(JEP-0045). End users will be able to join text conferences. Notice +that this module is not (yet) clusterable.

                        +Some of the features of Multi-User Chat: +
                        • +Sending private messages to room participants. +
                        • Inviting users. +
                        • Setting a conference topic. +
                        • Creating password protected rooms. +
                        • Kicking and banning participants. +
                        Options: -
                        +
                        - host
                        Defines hostname of the service - (see A.1.2). -
                        hosts
                        Defines hostnames of the service - (see A.1.3). If neither host nor hosts - are not present, then prefix conference. is added to all ejabberd hostnames. + hosts
                        This option defines the hostnames of the + service (see section A.1.2). If neither hosts nor + the old host is present, the prefix “conference.” is added to all + ejabberd hostnames. -
                        access
                        Specifies who is allowed to use MUC service (default value is all). -
                        access_create
                        Specifies who is allowed to create new rooms at - MUC service (default value is all). -
                        access_admin
                        Specifies who is allowed to administrate MUC service -(default value is none, which means that only creator may administer her room). +
                        access
                        You can specify who is allowed to use + the Multi-User Chat service (by default, everyone is allowed to use it). +
                        access_create
                        To configure who is + allowed to create new rooms at the Multi-User Chat service, this option + can be used (by default, everybody is allowed to create rooms). +
                        access_admin
                        This option specifies + who is allowed to administrate the Multi-User Chat service (the default + value is none, which means that only the room creator can + administer his room).
                        -Example: -
                        -  % Define admin ACL
                        -  {acl, admin, {user, "admin"}}
                        -
                        -  % Define MUC admin access rule
                        -  {access, muc_admin, [{allow, admin}]}
                        -
                        +Examples:
                        +
                        • +In the first example everyone is allowed to use the Multi-User Chat + service. Everyone will also be able to create new rooms but only the user + admin@example.org is allowed to administrate any room. In this + example he is also a global administrator. +
                          +  {acl, admins, {user, "admin", "example.org"}}.
                          +  ...
                          +  {access, muc_admins, [{allow, admins}]}.
                          +  ...
                             {modules,
                              [
                               ...
                               {mod_muc, [{access, all},
                                          {access_create, all},
                          -               {access_admin, muc_admin}]},
                          +               {access_admin, muc_admins}]},
                               ...
                              ]}.
                          -
                          +
                      • In the second example the Multi-User Chat service is only accessible by + paying customers registered on our domains and on other servers. Of course + the administrator is also allowed to access rooms. In addition, he is the + only authority able to create and administer rooms. +
                        +  {acl, paying_customers, {user, "customer1", "one.org"}}.
                        +  {acl, paying_customers, {user, "customer2", "two.org"}}.
                        +  {acl, paying_customers, {user, "customer3", "example.org"}}.
                        +  {acl, admins, {user, "admin", "example.org"}}.
                        +  ...
                        +  {access, muc_admins, [{allow, admins},
                        +                        {deny, all}]}.
                        +  {access, muc_access, [{allow, paying_customers},
                        +                        {allow, admins},
                        +                        {deny, all}]}.
                        +  ...
                        +  {modules,
                        +   [
                        +    ...
                        +    {mod_muc, [{access, muc_access},
                        +               {access_create, muc_admins},
                        +               {access_admin, muc_admins}]},
                        +    ...
                        +   ]}.
                        +
                      -

                      A.9  mod_offline

                      +

                      A.8  mod_offline

                      -This module implements offline message storage.
                      + +This module implements offline message storage. This means that all messages +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 3.3.2).

                      -

                      A.10  mod_privacy

                      +

                      A.9  mod_privacy

                      -This module implements Privacy Rules as defined in XMPP IM -(see http://www.jabber.org/ietf/).
                      -
                      + +This module implements Blocking Communication (also known as Privacy Rules) +as defined in section 10 from XMPP IM. If end users have support for it in +their Jabber client, they will be able to: +
                      +
                      • +Retrieving one's privacy lists. +
                      • Adding, removing, and editing one's privacy lists. +
                      • Setting, changing, or declining active lists. +
                      • Setting, changing, or declining the default list (i.e., the list that + is active by default). +
                      • Allowing or blocking messages based on JID, group, or subscription type + (or globally). +
                      • Allowing or blocking inbound presence notifications based on JID, group, + or subscription type (or globally). +
                      • Allowing or blocking outbound presence notifications based on JID, group, + or subscription type (or globally). +
                      • Allowing or blocking IQ stanzas based on JID, group, or subscription type + (or globally). +
                      • Allowing or blocking all communications based on JID, group, or + subscription type (or globally). +
                      +(from http://www.xmpp.org/specs/rfc3921.html#privacy) +
                      Options: -
                      -iqdisc
                      jabber:iq:privacy IQ queries processing -discipline (see A.1.1). +
                      +iqdisc
                      This specifies +the processing discipline for Blocking Communication (jabber:iq:privacy) IQ queries +(see section A.1.1).
                      -

                      A.11  mod_private

                      +

                      A.10  mod_private

                      -This module adds support of JEP-0049 (Private XML Storage).
                      -
                      + +This module adds support for Private XML Storage (JEP-0049): +
                      +Using this method, Jabber entities can store private data on the server and +retrieve it whenever necessary. The data stored might be anything, as long as +it is valid XML. One typical usage for this namespace is the server-side storage +of client-specific preferences; another is Bookmark Storage (JEP-0048). +
                      Options: -
                      -iqdisc
                      jabber:iq:private IQ queries processing -discipline (see A.1.1). +
                      +iqdisc
                      This specifies +the processing discipline for Private XML Storage (jabber:iq:private) IQ queries +(see section A.1.1).
                      -

                      A.12  mod_pubsub

                      +

                      A.11  mod_pubsub

                      -This module implements JEP-0060 (Publish-Subscribe Service).
                      + +This module offers a Publish-Subscribe Service (JEP-0060). +Publish-Subscribe can be used to develop (examples are taken from the JEP): +
                      +
                      • +news feeds and content syndacation, +
                      • avatar management, +
                      • shared bookmarks, +
                      • auction and trading systems, +
                      • online catalogs, +
                      • workflow systems, +
                      • network management systems, +
                      • NNTP gateways, +
                      • vCard/profile management, +
                      • and weblogs. +
                      +
                      + +Another example is J-EAI. +This is an XMPP-based Enterprise Application Integration (EAI) platform (also +known as ESB, the Enterprise Service Bus). The J-EAI project builts upon +ejabberd's codebase and has contributed several features to mod_pubsub.

                      Options: -
                      +
                      - host
                      Defines hostname of the service - (see A.1.2). -
                      hosts
                      Defines hostnames of the service - (see A.1.3). If neither host nor hosts - are not present, then prefix pubsub. is added to all ejabberd hostnames. + hosts
                      This option defines the hostnames of the + service (see section A.1.2). If neither hosts nor + the old host is present, the prefix “pubsub.” is added to all + ejabberd hostnames. -
                      served_hosts
                      Specifies which hosts are served by the service. -If absent then only main ejabberd host is served. -
                      +
                      served_hosts
                      To specify which hosts needs to + be served, you can use this option. If absent, only the main ejabberd + host is served.
                      Example: -
                      +
                         {modules,
                          [
                           ...
                      @@ -1181,131 +1731,187 @@ Example:
                       
                      -

                      A.13  mod_register

                      +

                      A.12  mod_register

                      -This module adds support for JEP-0077 (In-Band Registration).
                      -
                      + +This module adds support for In-Band Registration (JEP-0077). This protocol +enables end users to use a Jabber client to: +
                      • +Register a new account on the server. +
                      • Change the password from an existing account on the server. +
                      • Delete an existing account on the server. +
                      Options: -
                      -access
                      Specifies rule to restrict registration. -If this rule returns ``deny'' on requested user name, then -registration is not allowed for it. (default value is all, which means -no restrictions). -
                      iqdisc
                      jabber:iq:register IQ queries processing -discipline (see A.1.1). +
                      +access
                      This option can be configured to specify + rules to restrict registration. If a rule returns “deny” on the requested + user name, registration for that user name is dennied. (there are no + restrictions by default). +
                      iqdisc
                      This specifies +the processing discipline for In-Band Registration (jabber:iq:register) IQ queries +(see section A.1.1).
                      -Example: -
                      -  % Deny registration for users with too short name
                      +Examples:
                      +
                      • +Next example prohibits the registration of too short account names and of + account names with exotic characters in it: +
                           {acl, shortname, {user_glob, "?"}}.
                           {acl, shortname, {user_glob, "??"}}.
                        -  % Another variant: {acl, shortname, {user_regexp, "^..?$"}}.
                        -
                        +  {acl, strangename, {user_regexp, "^..?$"}}.
                        +  ...
                           {access, register, [{deny, shortname},
                        +                      {deny, strangename},
                                               {allow, all}]}.
                        -
                        +  ...
                           {modules,
                            [
                             ...
                             {mod_register, [{access, register}]},
                             ...
                            ]}.
                        -
                        +
                    • The in-band registration of new accounts can be prohibited by changing the + access option. If you really want to disable all In-Band Registration + functionality, that is changing passwords in-band and deleting accounts + in-band, you have to remove mod_register from the modules list. In this + example all In-Band Registration functionality is disabled: +
                      +  {access, register, [{deny, all}]}.
                      +
                      +  {modules,
                      +   [
                      +    ...
                      +%    {mod_register, [{access, register}]},
                      +    ...
                      +   ]}.
                      +
                    -

                    A.14  mod_roster

                    +

                    A.13  mod_roster

                    -This module implements roster management.
                    + +This module implements roster management as defined in RFC 3921: XMPP IM.

                    Options: -
                    -iqdisc
                    jabber:iq:roster IQ queries processing -discipline (see A.1.1). +
                    +iqdisc
                    This specifies +the processing discipline for Roster Management (jabber:iq:roster) IQ queries +(see section A.1.1).
                    -

                    A.15  mod_service_log

                    +

                    A.14  mod_service_log

                    -This module adds support for logging of user packets via any jabber service. -These packets encapsulated in <route/> element and sended to specified -services.
                    + +This module adds support for logging end user packets via a Jabber message +auditing service such as +Bandersnatch. All user +packets are encapsulated in a <route/> element and sent to the specified +service(s).

                    Options: -
                    - loggers
                    Specifies a list of services which will receive users - packets. +
                    +loggers
                    With this option a (list of) service(s) + that will receive the packets can be specified.
                    -Example: -
                    +Examples:
                    +
                    • +To log all end user packets to the Bandersnatch service running on + bandersnatch.example.com: +
                         {modules,
                          [
                           ...
                           {mod_service_log, [{loggers, ["bandersnatch.example.com"]}]},
                           ...
                          ]}.
                      -
                      +
                  • To log all end user packets to the Bandersnatch service running on + bandersnatch.example.com and the backup service on + bandersnatch.example.org: +
                    +  {modules,
                    +   [
                    +    ...
                    +    {mod_service_log, [{loggers, ["bandersnatch.example.com",
                    +                                  "bandersnatch.example.org"]}]},
                    +    ...
                    +   ]}.
                    +
                  -

                  A.16  mod_shared_roster

                  +

                  A.15  mod_shared_roster

                  -This module implements shared roster groups support.
                  + +This module enables you to create shared roster groups. This means that you can +create groups of people that can see members from (other) groups in their +rosters. The big advantages of this feature are that end users do not need to +manually add all users to their rosters, and that they cannot permanently delete +users from the shared roster groups.

                  -You can edit shared roster groups via web-interface. Each group has an unique -ID and the following parameters: -
                  -Name
                  The name of the group, which will be displayed in roster. -
                  Description
                  Textual description of this group, doesn't affect anything. -
                  Members
                  List of full JIDs of group members, entered one per line in - web-interface. -
                  Displayed groups
                  List of IDs of groups which will be in rosters of this - group members. +Shared roster groups can be edited only via the web interface. Each group +has a unique identification and the following parameters: +
                  +Name
                  The name of the group, which will be displayed in the roster. +
                  Description
                  The description of the group. This parameter doesn't affect + anything. +
                  Members
                  A list of full JIDs of group members, entered one per line in + the web interface. +
                  Displayed groups
                  A list of groups that will be in the rosters of this + group's members.
                  -For example, to have a group of users which can see each other in roster, -create a group like on table 1. -

                  +Examples: +
                  • +Take the case of a computer club that wants all its members seeing each + other in their rosters. To achieve this, they need to create a shared roster + group similar to next table: +

                    - - + + - + + + + - +
                     Group `users'
                    IdentificationGroup `club_members'
                    NameUsersClub Members
                    DescriptionMembers from the computer club
                    Members - + - + - +
                    user1@example.org
                    member1@example.org
                    user2@example.org
                    member2@example.org
                    user3@example.org
                    member3@example.org
                    Displayed groupsusersclub_members
                    -
                    -
                    Table 1: Shared group example N1

                    - - -

                    -To have 3 groups `managers', `workgroup1', and -`workgroup2', where group `managers' can see members of all -groups, and other two groups can see `managers' group and themselves, -create groups like on table 2. -

                    +

                    +
                  • In another case we have a company which has three divisions: Management, + Marketing and Sales. All group members should see all other members in their + rosters. Additonally, all managers should have all marketing and sales people + in their roster. Simultaneously, all marketeers and the whole sales team + should see all managers. This scenario can be achieved by creating shared + roster groups as shown in the following table: +

                    - - - - + + + + - - - + + + + + +
                     Group `managers'Group `workgroup1'Group `workgroup2'
                    IdentificationGroup `management'Group `marketing'Group `sales'
                    NameManagersWorkgroup1Workgroup2ManagementMarketingSales
                    Description 
                    Members @@ -1314,136 +1920,200 @@ create groups like on table 2. + +
                    manager2@example.org
                    manager3@example.org
                    manager4@example.org
                    - + - + - + + +
                    user1@example.org
                    marketeer1@example.org
                    user2@example.org
                    marketeer2@example.org
                    user3@example.org
                    marketeer3@example.org
                    marketeer4@example.org
                    - + - + - + + +
                    user4@example.org
                    saleswoman1@example.org
                    user5@example.org
                    salesman1@example.org
                    user6@example.org
                    saleswoman2@example.org
                    salesman2@example.org
                    Displayed groups - + - + - +
                    managers
                    management
                    workgroup1
                    marketing
                    workgroup2
                    sales
                    - + - +
                    managers
                    management
                    workgroup1
                    marketing
                    - + - +
                    managers
                    management
                    workgroup2
                    sales
                    -
                    -
                    Table 2: Shared group example N2

                    - - -

                    +

                  +
                -

                A.17  mod_stats

                +

                A.16  mod_stats

                -This module adds support for JEP-0039 (Statistics Gathering).
                -
                + +This module adds support for Statistics Gathering (JEP-0039). This protocol +allows you to retrieve next statistics from your ejabberd deployment: +
                • +Total number of registered users on the current virtual host (users/total). +
                • Total number of registered users on all virtual hosts (users/all-hosts/total). +
                • Total number of online users on the current virtual host (users/online). +
                • Total number of online users on all virtual hosts (users/all-hosts/online). +
                Options: -
                -iqdisc
                http://jabber.org/protocol/stats IQ queries processing -discipline (see A.1.1). +
                +iqdisc
                This specifies +the processing discipline for Statistics Gathering (http://jabber.org/protocol/stats) IQ queries +(see section A.1.1).
                +As there are only a small amount of clients (for example +Tkabber) and software libraries with +support for this JEP, a few examples are given of the XML you need to send +in order to get the statistics. Here they are: +
                • +You can request the number of online users on the current virtual host + (example.org) by sending: +
                  +<iq to='example.org' type='get'>
                  +  <query xmlns='http://jabber.org/protocol/stats'>
                  +    <stat name='users/online'/>
                  +  </query>
                  +</iq>
                  +
                • You can request the total number of registered users on all virtual hosts + by sending: +
                  +<iq to='example.org' type='get'>
                  +  <query xmlns='http://jabber.org/protocol/stats'>
                  +    <stat name='users/all-hosts/total'/>
                  +  </query>
                  +</iq>
                  +
                -

                A.18  mod_time

                +

                A.17  mod_time

                -This module answers UTC time on jabber:iq:time queries.
                + +This module features support for Entity Time (JEP-0090). By using this JEP, +you are able to discover the time at another entity's location.

                Options: -
                -iqdisc
                jabber:iq:time IQ queries processing -discipline (see A.1.1). +
                +iqdisc
                This specifies +the processing discipline for Entity Time (jabber:iq:time) IQ queries +(see section A.1.1).
                -

                A.19  mod_vcard

                +

                A.18  mod_vcard

                -This module implements simple Jabber User Directory (based on user vCards) -and answers server vCard on vcard-temp queries.
                + +This module allows end users to store and retrieve their vCard, and to retrieve +other users vCards, as defined in vcard-temp (JEP-0054). The module also +implements an uncomplicated Jabber User Directory based on the vCards of +these users. Moreover, it enables the server to send its vCard when queried.

                Options: -
                +
                - host
                Defines hostname of the service - (see A.1.2). -
                hosts
                Defines hostnames of the service - (see A.1.3). If neither host nor hosts - are not present, then prefix vjud. is added to all ejabberd hostnames. + hosts
                This option defines the hostnames of the + service (see section A.1.2). If neither hosts nor + the old host is present, the prefix “vjud.” is added to all + ejabberd hostnames. -
                iqdisc
                vcard-temp IQ queries processing -discipline (see A.1.1). -
                search
                Specifies whether search is enabled (value is true, default) or -disabled (value is false) by the service. If search is set to false, -option host is ignored and service does not appear in Jabber Discovery items. -
                matches
                Limits the number of reported search results. If value is set to -infinity then all search results are reported. Default value is 30. -
                allow_return_all
                Specifies whether search with empty input fields can -return all known users. Default is false. -
                search_all_hosts
                If set in true then search returns matched -items at all virtual hosts. Otherwise only current host items are returned. -Default is true. +
                iqdisc
                This specifies +the processing discipline for vcard-temp IQ queries +(see section A.1.1). +
                search
                This option specifies whether the search + functionality is enabled (value: true) or disabled + (value: false). If disabled, the option hosts will be + ignored and the Jabber User Directory service will not appear in the + Service Discovery item list. The default value is true. +
                matches
                With this option, the number of reported + search results can be limited. If the option's value is set to infinity, + all search results are reported. The default value is 30. +
                allow_return_all
                This option enables + you to specify if search operations with empty input fields should return + all users who added some information to their vCard. The default value is + false. +
                search_all_hosts
                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.
                -Example: -
                +Examples:
                +
                • +In this first situation, search results are limited to twenty items, + every user who added information to their vCard will be listed when people + do an empty search, and only users from the current host will be returned: +
                     {modules,
                      [
                       ...
                       {mod_vcard, [{search, true},
                                    {matches, 20},
                                    {allow_return_all, true},
                  -                 {search_all_hosts, false}]}
                  +                 {search_all_hosts, false}]},
                       ...
                      ]}.
                  -
                  +
              • The second situation differs in a way that search results are not limited, + and that all virtual hosts will be searched instead of only the current one: +
                +  {modules,
                +   [
                +    ...
                +    {mod_vcard, [{search, true},
                +                 {matches, infinity},
                +                 {allow_return_all, true}]},
                +    ...
                +   ]}.
                +
              -

              A.20  mod_version

              +

              A.19  mod_version

              -This module answers ejabberd version on jabber:iq:version queries.
              + +This module implements Software Version (JEP-0092). Consequently, it +answers ejabberd's version when queried.

              Options: -
              -iqdisc
              jabber:iq:version IQ queries processing -discipline (see A.1.1). +
              +iqdisc
              This specifies +the processing discipline for Software Version (jabber:iq:version) IQ queries +(see section A.1.1).
              - + -

              B  I18n/L10n

              +

              B  Internationalization and Localization

              -All built-in modules support xml:lang attribute inside IQ queries. -E. g. on figure 2 showed the reply on the following query: -
              +
              +All built-in modules support the xml:lang attribute inside IQ queries.
              +Figure 2, for example, shows the reply to the following query:
              +
                 <iq id='5'
                     to='example.org'
                     type='get'
              @@ -1451,35 +2121,325 @@ E. g. on figure 2 showed the reply on the
                   <query xmlns='http://jabber.org/protocol/disco#items'/>
                 </iq>
               
              -

              +


              -
              Figure 2: Discovery result when xml:lang='ru'

              +
              +
              Figure 2: Service Discovery when xml:lang='ru'

              +
              -

              -Also web-interface supports Accept-Language HTTP header (see -figure 3, compare it with figure 1) -

              +

              +The web interface also supports the Accept-Language HTTP header (compare +figure 3 with figure 1) +


              -
              Figure 3: Web-administration top page with HTTP header - ``Accept-Language: ru''

              +
              +
              Figure 3: Top page from the web interface with HTTP header + “Accept-Language: ru”

              +
              -

              +

              + + +

              C  Release Notes

              + + + + + +

              C.1  ejabberd 0.9

              + +
              +       Release notes
              +        ejabberd 0.9
              +
              +    This document describes the major new features of and changes to
              +    ejabberd 0.9, compared to latest public release ejabber 0.7.5.
              +
              +    For more detailed information, please refer to ejabberd User
              +    Guide.
              +
              +
              +Virtual Hosting
              +
              +    ejabberd now can host several domain on the same instance.
              +    This option is enabled by using:
              +
              +      {hosts, ["erlang-projects.org", "erlang-fr.org"]}.
              +
              +    instead of the previous host directive.
              +
              +    Note that you are now using a list of hosts. The main one should
              +    be the first listed. See migration section further in this release
              +    note for details.
              +      
              +
              +Shared Roster
              +
              +    Shared roster is a new feature that allow the ejabberd
              +    administrator to add jabber user that will be present in the
              +    roster of every users on the server.
              +    Shared roster are enabled by adding:
              +
              +            {mod_shared_roster, []}
              +
              +    at the end of your module list in your ejabberd.cfg file.
              +
              +
              +PostgreSQL (ODBC) support
              +
              +    This feature is experimental and not yet properly documented. This
              +    feature is released for testing purpose.
              +
              +    You need to have Erlang/OTP R10 to compile with ODBC on various
              +    flavour of *nix. You should use Erlang/OTP R10B-4, as this task
              +    has became easier with this release. It comes already build in
              +    Erlang/OTP Microsoft Windows binary.
              +
              +    PostgreSQL support is enabled by using the following module in
              +    ejabberd.cfg instead of their standard counterpart:
              +
              +     mod_last_odbc.erl
              +     mod_offline_odbc.erl
              +     mod_roster_odbc.erl
              +
              +    The database schema is located in the src/odbc/pq.sql file.
              +
              +    Look at the src/ejabberd.cfg.example file for more information on
              +    how to configure ejabberd with odbc support. You can get support
              +    on how to configure ejabberd with a relational database.
              +
              +
              +Migration from ejabberd 0.7.5
              +
              +    Migration is pretty straightforward as Mnesia database schema
              +    conversions is handled automatically. Remember however that you
              +    must backup your ejabberd database before migration.
              +
              +    Here are the following steps to proceed:
              +
              +    1. Stop your instance of ejabberd.
              +
              +    2. In ejabberd.cfg, define the host lists. Change the host
              +    directive to the hosts one:
              +    Before:
              +      {host, "erlang-projects.org"}.
              +    After:
              +      {hosts, ["erlang-projects.org", "erlang-fr.org"]}.
              +    Note that when you restart the server the existing users will be
              +    affected to the first virtual host, so the order is important. You
              +    should keep the previous hostname as the first virtual host.
              +
              +    3. Restart ejabberd.
              +
              +
              +Bugfixes
              +
              +    This release contains several bugfixes and architectural changes.
              +    Please refer to the Changelog file supplied with this release for
              +    details of all improvements in the ejabberd code.
              +
              + + +

              C.2  ejabberd 0.9.1

              + +
              +       Release notes
              +       ejabberd 0.9.1
              +
              +   This document describes the main changes from [25]ejabberd 0.9.
              +
              +   The code can be downloaded from the [26]download page.
              +
              +   For more detailed information, please refer to ejabberd [27]User Guide.
              +
              +
              +Groupchat (Multi-user chat and IRC) improvements
              +
              +   The multi-user chat code has been improved to comply with the latest version
              +   of Jabber Enhancement Proposal 0045.
              +
              +   The IRC (Internet Relay Chat) features now support WHOIS and USERINFO
              +   requests.
              +
              +
              +Web interface
              +
              +   ejabberd modules management features have been added to the web interface.
              +   They now allow to start or stop extension module without restarting the
              +   ejabberd server.
              +
              +
              +Publish and subscribe
              +
              +   It is now possible to a subscribe node with a JabberID that includes a
              +   resource.
              +
              +
              +Translations
              +
              +   A new script has been included to help translate ejabberd into new languages
              +   and maintain existing translations.
              +
              +   As a result, ejabberd is now translating into 10 languages:
              +     * Dutch
              +     * English
              +     * French
              +     * German
              +     * Polish
              +     * Portuguese
              +     * Russian
              +     * Spanish
              +     * Swedish
              +     * Ukrainian
              +
              +
              +Migration
              +
              +   No changes have been made to the database. No particular conversion steps
              +   are needed. However, you should backup your database before upgrading to a
              +   new ejabberd version.
              +
              +
              +Bugfixes
              +
              +   This release contains several bugfixes and architectural changes. Please
              +   refer to the Changelog file supplied with this release for details of all
              +   improvements in the ejabberd code.
              +
              + + +

              C.3  ejabberd 0.9.8

              + +
              +       Release notes
              +       ejabberd 0.9.8
              +         2005-08-01
              +
              +   This document describes the main changes in ejabberd 0.9.8. This
              +   version prepares the way for the release of ejabberd 1.0, which 
              +   is due later this year.
              +
              +   The code can be downloaded from the Process-one website:
              +   http://www.process-one.net/en/projects/ejabberd/
              +
              +   For more detailed information, please refer to ejabberd User Guide
              +   on the Process-one website:
              +   http://www.process-one.net/en/projects/ejabberd/docs.html
              +
              +
              +   Recent changes include....
              +
              +
              +Enhanced virtual hosting
              +
              +   Virtual hosting applies to many more setting options and
              +   features and is transparent. Virtual hosting accepts different
              +   parameters for different virtual hosts regarding the following
              +   features: authentication method, access control lists and access
              +   rules, users management, statistics, and shared roster. The web
              +   interface gives access to each virtual host's parameters.
              +
              +
              +Enhanced Publish-Subscribe module
              +
              +   ejabberd's Publish-Subscribe module integrates enhancements
              +   coming from J-EAI, an XMPP-based integration server built on
              +   ejabberd. ejabberd thus supports Publish-Subscribe node
              +   configuration. It is possible to define nodes that should be
              +   persistent, and the number of items to persist. Besides that, it
              +   is also possible to define various notification parameters, such
              +   as the delivery of the payload with the notifications, and the
              +   notification of subscribers when some changes occur on items.
              +   Other examples are: the maximum size of the items payload, the
              +   subscription approvers, the limitation of the notification to
              +   online users only, etc.
              +
              +
              +Code reorganisation and update
              +
              +   - The mod_register module has been cleaned up.
              +   - ODBC support has been updated and several bugs have been fixed.
              +
              +
              +Development API
              +
              +   To ease the work of Jabber/XMPP developers, a filter_packet hook
              +   has been added. As a result it is possible to develop plugins to
              +   filter or modify packets flowing through ejabberd.
              +
              +
              +Translations
              +
              +   - Translations have been updated to support the new Publish-Subscribe features.
              +   - A new Brazilian Portuguese translation has been contributed.
              +
              +
              +Web interface
              +
              +   - The CSS stylesheet from the web interface is W3C compliant.
              +
              +
              +Installers
              +
              +   Installers are provided for Microsoft Windows and Linux/x86. The
              +   Linux installer includes Erlang ASN.1 modules for LDAP
              +   authentication support.
              +
              +
              +Bugfixes
              +
              +   - This release contains several bugfixes and architectural
              +     changes. Among other bugfixes include improvements in LDAP
              +     authentication. Please refer to the ChangeLog file supplied 
              +     with this release regarding all improvements in ejabberd.
              +
              +
              +References
              +
              +   The ejabberd feature sheet helps comparing with other Jabber/XMPP 
              +   servers:
              +   http://www.process-one.net/en/projects/ejabberd/docs/features.pdf
              +
              +   Contributed tutorials of interest are:
              +   - Migration from Jabberd1.4 to ejabberd:
              +     http://ejabberd.jabber.ru/jabberd1-to-ejabberd
              +   - Migration from Jabberd2 to ejabberd:
              +     http://ejabberd.jabber.ru/jabberd2-to-ejabberd
              +   - Transport configuration for connecting to other networks:
              +     http://ejabberd.jabber.ru/tutorials-transports
              +
              +END
              +
              +
              + + +

              D  Acknowledgements

              + + + +Thanks to all people who contributed to this guide: + -
              -
              This document was translated from LATEX by -HEVEA. -
              - +
              This document was translated from LATEX by +HEVEA.
              diff --git a/doc/guide.tex b/doc/guide.tex index de5f8ede0..61965b82d 100644 --- a/doc/guide.tex +++ b/doc/guide.tex @@ -1,19 +1,27 @@ \documentclass[a4paper,10pt]{article} +%% Packages +\usepackage{float} \usepackage{graphics} \usepackage{hevea} +\usepackage[pdftex,colorlinks,unicode,urlcolor=blue,linkcolor=blue, + pdftitle=Ejabberd\ Installation\ and\ Operation\ Guide,pdfauthor=Alexey\ + Shchepin,pdfsubject=ejabberd,pdfkeywords=ejabberd, + pdfpagelabels=false]{hyperref} +\usepackage{makeidx} +%\usepackage{showidx} % Only for verifying the index entries. \usepackage{verbatim} +\usepackage{geometry} -\usepackage[twosideshift=0pt]{geometry} - -\usepackage[pdftex,colorlinks,unicode,urlcolor=blue,linkcolor=blue,pdftitle=Ejabberd\ - Installation\ and\ Operation\ Guide,pdfauthor=Alexey\ - Shchepin,pdfsubject=ejabberd,pdfkeywords=ejabberd]{hyperref} +%% Index +\makeindex +% Remove the index anchors from the HTML version to save size and bandwith. +\newcommand{\ind}[1]{\begin{latexonly}\index{#1}\end{latexonly}} +%% Images \newcommand{\logoscale}{0.7} \newcommand{\imgscale}{0.58} \newcommand{\insimg}[1]{\insscaleimg{\imgscale}{#1}} - \newcommand{\insscaleimg}[2]{ \imgsrc{#2}{} \begin{latexonly} @@ -21,8 +29,9 @@ \end{latexonly} } +%% Various \newcommand{\bracehack}{\def\{{\char"7B}\def\}{\char"7D}} - +\newcommand{\titem}[1]{\item[\bracehack\texttt{#1}]} \newcommand{\ns}[1]{\texttt{#1}} \newcommand{\jid}[1]{\texttt{#1}} \newcommand{\option}[1]{\texttt{#1}} @@ -33,6 +42,7 @@ \newcommand{\ejabberd}{\texttt{ejabberd}} \newcommand{\Jabber}{Jabber} +%% Modules \newcommand{\module}[1]{\texttt{#1}} \newcommand{\modannounce}{\module{mod\_announce}} \newcommand{\modconfigure}{\module{mod\_configure}} @@ -54,140 +64,128 @@ \newcommand{\modvcard}{\module{mod\_vcard}} \newcommand{\modversion}{\module{mod\_version}} -\newcommand{\titem}[1]{\item[\bracehack\texttt{#1}]} - -%\setcounter{tocdepth}{3} -\begin{latexonly} -\global\parskip=9pt plus 3pt minus 1pt -\global\parindent=0pt - -\gdef\ahrefurl#1{\href{#1}{\texttt{#1}}} -\gdef\footahref#1#2{#2\footnote{\href{#1}{\texttt{#1}}}} -\end{latexonly} - -\newcommand{\tjepref}[2]{\footahref{http://www.jabber.org/jeps/jep-#1.html}{#2}} -\newcommand{\jepref}[1]{\tjepref{#1}{JEP-#1}} - -\newcommand{\iqdiscitem}[1]{\titem{iqdisc} #1 IQ queries processing -discipline (see~\ref{sec:modiqdiscoption}).} +%% Common options +\newcommand{\iqdiscitem}[1]{\titem{iqdisc} \ind{options!iqdisc}This specifies +the processing discipline for #1 IQ queries +(see section~\ref{sec:modiqdiscoption}).} \newcommand{\hostitem}[1]{ - \titem{host} Defines hostname of the service - (see~\ref{sec:modhostoption}). - \titem{hosts} Defines hostnames of the service - (see~\ref{sec:modhostsoption}). If neither \texttt{host} nor \texttt{hosts} - are not present, then prefix \jid{#1.} is added to all \ejabberd{} hostnames. + \titem{hosts} \ind{options!hosts} This option defines the hostnames of the + service (see section~\ref{sec:modhostsoption}). If neither \texttt{hosts} nor + the old \texttt{host} is present, the prefix ``\jid{#1.}'' is added to all + \ejabberd{} hostnames. } -\title{Ejabberd Installation and Operation Guide} +%% Title page +\include{version} +\title{Ejabberd \version\ Installation and Operation Guide} \author{Alexey Shchepin \\ \ahrefurl{mailto:alexey@sevcom.net} \\ \ahrefurl{xmpp:aleksey@jabber.ru}} -\date{July 31, 2005} + +%% Options +\newcommand{\marking}[1]{#1} % Marking disabled +\newcommand{\quoting}[2][yozhik]{} % Quotes disabled +\newcommand{\new}{\begin{latexonly}\marginpar{\textsc{new}}\end{latexonly}} % Highlight new features +\newcommand{\improved}{\begin{latexonly}\marginpar{\textsc{improved}}\end{latexonly}} % Highlight improved features +\newcommand{\moreinfo}[1]{} % Hide details + +%% Footnotes +\begin{latexonly} +\global\parskip=9pt plus 3pt minus 1pt +\global\parindent=0pt +\gdef\ahrefurl#1{\href{#1}{\texttt{#1}}} +\gdef\footahref#1#2{#2\footnote{\href{#1}{\texttt{#1}}}} +\end{latexonly} +\newcommand{\tjepref}[2]{\footahref{http://www.jabber.org/jeps/jep-#1.html}{#2}} +\newcommand{\jepref}[1]{\tjepref{#1}{JEP-#1}} \begin{document} + +\label{sec:titlepage} \begin{titlepage} \maketitle{} - - {\centering - \insscaleimg{\logoscale}{logo.png} + + \begin{center} + {\insscaleimg{\logoscale}{logo.png} \par } + \end{center} + + \begin{quotation}\textit{I can thoroughly recommend ejabberd for ease of setup -- + Kevin Smith, Current maintainer of the Psi project}\end{quotation} + \end{titlepage} -%\newpage + +% Set the page counter to 2 so that the titlepage and the second page do not +% have the same page number. This fixes the PDFLaTeX warning "destination with +% the same identifier". +\begin{latexonly} +\setcounter{page}{2} +\end{latexonly} + \tableofcontents{} -\newpage -\section{Introduction} -\label{sec:intro} - -\ejabberd{} is a Free and Open Source fault-tolerant distributed \Jabber{} -server. It is written mostly in Erlang. - -The main features of \ejabberd{} are: -\begin{itemize} -\item Works on most of popular platforms: *nix (tested on Linux, FreeBSD and - NetBSD) and Win32 -\item Distributed: You can run \ejabberd{} on a cluster of machines to let all of - them serve one Jabber domain. -\item Fault-tolerance: You can setup an \ejabberd{} cluster so that all the - information required for a properly working service will be stored - permanently on more than one node. This means that if one of the nodes - crashes, then the others will continue working without disruption. - You can also add or replace nodes ``on the fly''. -\item Support for virtual hosting -\item Built-in \tjepref{0045}{Multi-User Chat} service -\item Built-in IRC transport -\item Built-in \tjepref{0060}{Publish-Subscribe} service -\item Built-in Jabber Users Directory service based on users vCards -\item Built-in web-based administration interface -\item Built-in \tjepref{0025}{HTTP Polling} service -\item SSL support -\item Support for LDAP authentication -\item Ability to interface with external components (JIT, MSN-t, Yahoo-t, etc.) -\item Migration from jabberd14 is possible -\item Mostly XMPP-compliant -\item Support for \tjepref{0030}{Service Discovery}. -\item Support for \tjepref{0039}{Statistics Gathering}. -\item Support for \ns{xml:lang} -\end{itemize} - -The misfeatures of \ejabberd{} are: -\begin{itemize} -\item No support for authentication and STARTTLS in S2S connections -\end{itemize} - +% Input introduction.tex +\input{introduction} \section{Installation from Source} \label{sec:installation} +\ind{installation} \subsection{Installation Requirements} \label{sec:installreq} -\subsubsection{Unix} +\subsubsection{``Unix-like'' operating systems} \label{sec:installrequnix} +\ind{installation!requirements for ``Unix-like'' operating systems} -To compile \ejabberd{}, you will need the following packages: +To compile \ejabberd{} on a ``Unix-like'' operating system, you need: \begin{itemize} \item GNU Make; \item GCC; -\item libexpat 1.95 or later; -\item Erlang/OTP R8B or later; -\item OpenSSL 0.9.6 or later (optional). +\item libexpat 1.95 or higher; +\item Erlang/OTP R8B or higher; +\item OpenSSL 0.9.6 or higher (optional). \end{itemize} \subsubsection{Windows} \label{sec:installreqwin} +\ind{installation!requirements for Windows} -To compile \ejabberd{} in MS Windows environment, you will need the following -packages: +To compile \ejabberd{} on a Windows flavour, you need: \begin{itemize} \item MS Visual C++ 6.0 Compiler -\item \footahref{http://erlang.org/download/otp\_win32\_R10B-1a.exe}{Erlang/OTP R10B-1a} -\item \footahref{http://prdownloads.sourceforge.net/expat/expat\_win32bin\_1\_95\_7.exe?download}{Expat 1.95.7} +\item \footahref{http://erlang.org/download.html}{Erlang/OTP R8B or higher} +\item \footahref{http://sourceforge.net/project/showfiles.php?group\_id=10127\&package\_id=11277}{Expat 1.95.7 or higher} \item -\footahref{http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.9.1.tar.gz}{Iconv 1.9.1} +\footahref{http://www.gnu.org/software/libiconv/}{Iconv 1.9.1} (optional) \item \footahref{http://www.slproweb.com/products/Win32OpenSSL.html}{Shining Light OpenSSL} (to enable SSL connections) \end{itemize} - -\subsection{Obtaining} +\subsection{Obtaining \ejabberd{}} \label{sec:obtaining} -Stable \ejabberd{} release can be obtained at +\ind{download} +Released versions of \ejabberd{} can be obtained from \\ \ahrefurl{http://www.process-one.net/en/projects/ejabberd/download.html}. -The latest alpha version can be retrieved from Subversion repository\@. +\ind{Subversion repository} +The latest development version can be retrieved from the Subversion repository\@. \begin{verbatim} - svn co svn://svn.process-one.net/opt/data/svn/ejabberd/trunk ejabberd + svn co http://svn.process-one.net/ejabberd/trunk ejabberd \end{verbatim} - \subsection{Compilation} \label{sec:compilation} -\subsubsection{Unix} +\ind{compilation} + +\subsubsection{``Unix-like'' operating systems} \label{sec:compilationunix} +\ind{compilation!on ``Unix-like'' operating systems} + +Compile \ejabberd{} on a ``Unix-like'' operating system by executing: \begin{verbatim} ./configure @@ -196,50 +194,53 @@ The latest alpha version can be retrieved from Subversion repository\@. make install \end{verbatim} -This will install \ejabberd{} to \verb|/var/lib/ejabberd| directory, -\verb|ejabberd.cfg| to \verb|/etc/ejabberd| directory and create -\verb|/var/log/ejabberd| directory for log files. +These commands will: +\begin{itemize} +\item install \ejabberd{} into the directory \verb|/var/lib/ejabberd|, +\item install the configuration file into \verb|/etc/ejabberd|, +\item create a directory called \verb|/var/log/ejabberd| to store log files. +\end{itemize} \subsubsection{Windows} \label{sec:compilationwin} +\ind{compilation!on Windows} \begin{itemize} \item Install Erlang emulator (for example, into \verb|C:\Program Files\erl5.3|). \item Install Expat library into \verb|C:\Program Files\Expat-1.95.7| directory. - + Copy file \verb|C:\Program Files\Expat-1.95.7\Libs\libexpat.dll| to your Windows system directory (for example, \verb|C:\WINNT| or \verb|C:\WINNT\System32|) -\item Build and install Iconv library into \verb|C:\Program Files\iconv-1.9.1| directory. - +\item Build and install the Iconv library into the directory + \verb|C:\Program Files\iconv-1.9.1|. + Copy file \verb|C:\Program Files\iconv-1.9.1\bin\iconv.dll| to your - Windows system directory. - - Note: Instead of copying libexpat.dll and iconv.dll to Windows - directory, you can add directories + Windows system directory (more installation instructions can be found in the + file README.woe32 in the iconv distribution). + + Note: instead of copying libexpat.dll and iconv.dll to the Windows + directory, you can add the directories \verb|C:\Program Files\Expat-1.95.7\Libs| and - \verb|C:\Program Files\iconv-1.9.1\bin| to \verb|PATH| environment + \verb|C:\Program Files\iconv-1.9.1\bin| to the \verb|PATH| environment variable. -\item Being in \verb|ejabberd\src| directory run: +\item While in the directory \verb|ejabberd\src| run: \begin{verbatim} configure.bat nmake -f Makefile.win32 \end{verbatim} -\item Edit file \verb|ejabberd\src\ejabberd.cfg| and run +\item Edit the file \verb|ejabberd\src\ejabberd.cfg| and run \begin{verbatim} werl -s ejabberd -name ejabberd \end{verbatim} \end{itemize} -%\subsection{Initial Configuration} -%\label{sec:initconfig} - - \subsection{Starting} \label{sec:starting} +\ind{starting} -To start \ejabberd{}, use the following command: +Execute the following command to start \ejabberd{}: \begin{verbatim} erl -pa /var/lib/ejabberd/ebin -name ejabberd -s ejabberd \end{verbatim} @@ -247,15 +248,16 @@ or \begin{verbatim} erl -pa /var/lib/ejabberd/ebin -sname ejabberd -s ejabberd \end{verbatim} -In the latter case Erlang node will be identified using only first part of host -name, i.\,e. other Erlang nodes outside this domain can't contact this node. +In the latter case the Erlang node will be identified using only the first part +of the host name, i.\,e. other Erlang nodes outside this domain can't contact +this node. -Note that when using above command \ejabberd{} will search for config file -in current directory and will use current directory for storing user database -and logging. +Note that when using the above command, \ejabberd{} will search for the +configuration file in the current directory and will use the current directory +for storing its user database and for logging. -To specify path to config file, log files and Mnesia database directory, -you may use the following command: +To specify the path to the configuration file, the log files and the Mnesia +database directory, you may use the following command: \begin{verbatim} erl -pa /var/lib/ejabberd/ebin \ -sname ejabberd \ @@ -266,17 +268,18 @@ you may use the following command: -mnesia dir \"/var/lib/ejabberd/spool\" \end{verbatim} -You can find other useful options in Erlang manual page (\shell{erl -man erl}). +You can find other useful options in the Erlang manual page +(\shell{erl -man erl}). -To use more than 1024 connections, you should set environment variable +To use more than 1024 connections, you should set the environment variable \verb|ERL_MAX_PORTS|: \begin{verbatim} export ERL_MAX_PORTS=32000 \end{verbatim} -Note that with this value \ejabberd{} will use more memory (approximately 6MB +Note that with this value, \ejabberd{} will use more memory (approximately 6\,MB more). -To reduce memory usage, you may set environment variable +To reduce memory usage, you may set the environment variable \verb|ERL_FULLSWEEP_AFTER|: \begin{verbatim} export ERL_FULLSWEEP_AFTER=0 @@ -289,138 +292,153 @@ But in this case \ejabberd{} can start to work slower. \subsection{Initial Configuration} \label{sec:initconfig} +\ind{configuration file} -The configuration file is initially loaded the first time \ejabberd{} is -executed, when it is parsed and stored in a database. Subsequently the -configuration is loaded from the database and any commands in the configuration -file are appended to the entries in the database. The configuration file -consists of a sequence of Erlang terms. Parts of lines after \term{`\%'} sign -are ignored. Each term is tuple, where first element is name of option, and -other are option values. E.\,g.\ if this file does not contain a ``host'' -definition, then old value stored in the database will be used. +The configuration file will be loaded the first time you start \ejabberd{}. The +content from this file will be parsed and stored in a database. Subsequently the +configuration will be loaded from the database and any commands in the +configuration file are appended to the entries in the database. The +configuration file contains a sequence of Erlang terms. Lines beginning with a +\term{`\%'} sign are ignored. Each term is a tuple of which the first element is +the name of an option, and any further elements are that option's values. If the +configuration file do not contain for instance the ``hosts'' option, the old +host name(s) stored in the database will be used. -To override old values stored in the database the following lines can be added -in config: +You can override the old values stored in the database by adding next lines to +the configuration file: \begin{verbatim} override_global. override_local. override_acls. \end{verbatim} -With this lines old global or local options or ACLs will be removed before -adding new ones. - +With these lines the old global options, local options and ACLs will be removed +before new ones are added. \subsubsection{Host Names} \label{sec:confighostname} +\ind{options!hosts}\ind{host names} -Option \option{hosts} defines a list of \Jabber{} domains that \ejabberd{} -serves. E.\,g.\ to serve \jid{example.org} and \jid{example.com} domains add -the following line in the config: -\begin{verbatim} - {hosts, ["example.org", "example.com"]}. -\end{verbatim} +The option \option{hosts} defines a list containing one or more domains that +\ejabberd{} will serve. -Option \option{host} defines one \Jabber{} domain that \ejabberd{} serves. -E.\,g.\ to serve only \jid{example.org} domain add the following line in the -config: -\begin{verbatim} - {host, "example.org"}. -\end{verbatim} -It have the same effect as -\begin{verbatim} +Examples: +\begin{itemize} +\item Serving one domain: +\begin{itemize} +\item \begin{verbatim} {hosts, ["example.org"]}. \end{verbatim} - -%This option is mandatory. +\item Backwards compatibility with older \ejabberd{} versions can be retained + with: + \begin{verbatim} + {host, "example.org"}. +\end{verbatim} +\end{itemize} +\item Serving two domains: +\begin{verbatim} + {hosts, ["one.org", "two.org"]}. +\end{verbatim} +\end{itemize} \subsubsection{Default Language} \label{sec:configlanguage} +\ind{options!language}\ind{language} -Option \option{language} defines default language of \ejabberd{} messages, sent -to users. Default value is \term{"en"}. In order to take effect there must be a -translation file \term{.msg} in \ejabberd{} \term{msgs} directory. -E.\,g.\ to use Russian as default language add the following line in the config: +The option \option{language} defines the default language of server strings that +can be seen by \Jabber{} clients. If a \Jabber{} client do not support +\option{xml:lang}, the specified language is used. The default value for the +option \option{language} is \term{"en"}. In order to take effect there must be a +translation file \term{.msg} in \ejabberd{}'s \term{msgs} directory. + +Examples: +\begin{itemize} +\item To set Russian as default language: \begin{verbatim} {language, "ru"}. \end{verbatim} - +\item To set Spanish as default language: +\begin{verbatim} + {language, "es"}. +\end{verbatim} +\end{itemize} \subsubsection{Access Rules} \label{sec:configaccess} +\ind{options!acl}\ind{access rules}\ind{ACL}\ind{Access Control List} -Access control in \ejabberd{} is performed via Access Control Lists (ACL). The -declarations of ACL in config file have following syntax: +Access control in \ejabberd{} is performed via Access Control Lists (ACLs). The +declarations of ACLs in the configuration file have the following syntax: \begin{verbatim} {acl, , {, ...}}. \end{verbatim} -\term{} can be one of following: +\term{} can be one of the following: \begin{description} -\titem{all} Matches all JIDs. Example: +\titem{all} Matches all JIDs. Example: \begin{verbatim} {acl, all, all}. \end{verbatim} -\titem{\{user, \}} Matches user with name - \term{} at the first virtual host. Example: +\titem{\{user, \}} Matches the user with the name + \term{} at the first virtual host. Example: \begin{verbatim} -{acl, admin, {user, "aleksey"}}. +{acl, admin, {user, "yozhik"}}. \end{verbatim} -\titem{\{user, , \}} Matches user with JID - \term{@} and any resource. Example: +\titem{\{user, , \}} Matches the user with the JID + \term{@} and any resource. Example: \begin{verbatim} -{acl, admin, {user, "aleksey", "jabber.ru"}}. +{acl, admin, {user, "yozhik", "example.org"}}. \end{verbatim} \titem{\{server, \}} Matches any JID from server - \term{}. Example: + \term{}. Example: \begin{verbatim} -{acl, jabberorg, {server, "jabber.org"}}. +{acl, exampleorg, {server, "example.org"}}. \end{verbatim} -\titem{\{user\_regexp, \}} Matches local user with name that - matches \term{} at the first virtual host. Example: +\titem{\{user\_regexp, \}} Matches any local user with a name that + matches \term{} at the first virtual host. Example: \begin{verbatim} {acl, tests, {user, "^test[0-9]*$"}}. \end{verbatim} %$ -\titem{\{user\_regexp, , \}} Matches user with name - that matches \term{} and from server \term{}. Example: +\titem{\{user\_regexp, , \}} Matches any user with a name + that matches \term{} at server \term{}. Example: \begin{verbatim} {acl, tests, {user, "^test", "example.org"}}. \end{verbatim} -\titem{\{server\_regexp, \}} Matches any JID from server that - matches \term{}. Example: +\titem{\{server\_regexp, \}} Matches any JID from the server that + matches \term{}. Example: \begin{verbatim} {acl, icq, {server, "^icq\\."}}. \end{verbatim} -\titem{\{node\_regexp, , \}} Matches user - with name that matches \term{} and from server that matches - \term{}. Example: +\titem{\{node\_regexp, , \}} Matches any user + with a name that matches \term{} at any server that matches + \term{}. Example: \begin{verbatim} -{acl, aleksey, {node_regexp, "^aleksey$", "^jabber.(ru|org)$"}}. +{acl, yohzik, {node_regexp, "^yohzik$", "^example.(com|org)$"}}. \end{verbatim} \titem{\{user\_glob, \}} \titem{\{user\_glob, , \}} \titem{\{server\_glob, \}} -\titem{\{node\_glob, , \}} This is same as - above, but uses shell glob patterns instead of regexp. These patterns can - have following special characters: +\titem{\{node\_glob, , \}} This is the same as + above. However, it uses shell glob patterns instead of regexp. These patterns + can have the following special characters: \begin{description} \titem{*} matches any string including the null string. \titem{?} matches any single character. - \titem{[...]} matches any of the enclosed characters. Character + \titem{[...]} matches any of the enclosed characters. Character ranges are specified by a pair of characters separated by a \term{`-'}. - If the first character after \term{`['} is a \term{`!'}, then any + If the first character after \term{`['} is a \term{`!'}, any character not enclosed is matched. \end{description} \end{description} The following ACLs are pre-defined: \begin{description} -\titem{all} Matches all JIDs. -\titem{none} Matches none JIDs. +\titem{all} Matches any JID. +\titem{none} Matches no JID. \end{description} -An entry allowing or denying access to different services would look similar to +An entry allowing or denying access to different services looks similar to this: \begin{verbatim} {access, , [{allow, }, @@ -429,9 +447,9 @@ this: ]}. \end{verbatim} When a JID is checked to have access to \term{}, the server -sequentially checks if this JID mathes one of the ACLs that are second elements -in each tuple in list. If it is matched, then the first element of matched -tuple is returned else ``\term{deny}'' is returned. +sequentially checks if that JID mathes any of the ACLs that are named in the +second elements of the tuples in the list. If it matches, the first element of +the first matched tuple is returned, otherwise ``\term{deny}'' is returned. Example: \begin{verbatim} @@ -440,118 +458,161 @@ Example: {allow, all}]}. \end{verbatim} -Following access rules pre-defined: +The following access rules are pre-defined: \begin{description} \titem{all} Always returns ``\term{allow}'' \titem{none} Always returns ``\term{deny}'' \end{description} - -\subsubsection{Shapers Configuration} +\subsubsection{Shapers} \label{sec:configshaper} +\ind{options!shaper}\ind{options!maxrate}\ind{shapers}\ind{maxrate}\ind{traffic speed} -With shapers is possible to bound connection traffic. The declarations of -shapers in config file have following syntax: +Shapers enable you to limit connection traffic. The syntax of +shapers is like this: \begin{verbatim} {shaper, , }. \end{verbatim} -Currently implemented only one kind of shaper: \term{maxrate}. It have +Currently only one kind of shaper called \term{maxrate} is available. It has the following syntax: \begin{verbatim} {maxrate, } \end{verbatim} -where \term{} means maximum allowed incomig rate in bytes/second. -E.\,g.\ to define shaper with name ``\term{normal}'' and maximum allowed rate -1000\,bytes/s, add following line in config: +where \term{} stands for the maximum allowed incomig rate in bytes per +second. + +Examples: +\begin{itemize} +\item To define a shaper named ``\term{normal}'' with traffic speed limited to +1,000\,bytes/second: \begin{verbatim} {shaper, normal, {maxrate, 1000}}. \end{verbatim} - +\item To define a shaper named ``\term{fast}'' with traffic speed limited to +50,000\,bytes/second: +\begin{verbatim} + {shaper, fast, {maxrate, 50000}}. +\end{verbatim} +\end{itemize} \subsubsection{Listened Sockets} \label{sec:configlistened} +\ind{options!listen} -Option \option{listen} defines list of listened sockets and what services -runned on them. Each element of list is a tuple with following elements: +The option \option{listen} defines for which addresses and ports \ejabberd{} +will listen and what services will be run on them. Each element of the list is a +tuple with the following elements: \begin{itemize} -\item Port number; -\item Module that serves this port; +\item Port number. +\item Module that serves this port. \item Options to this module. \end{itemize} -Currently these modules are implemented: -\begin{description} - \titem{ejabberd\_c2s} This module serves C2S connections. - - The following options are defined: - \begin{description} - \titem{\{access, \}} This option defines access of users - to this C2S port. Default value is ``\term{all}''. - \titem{\{shaper, \}} This option is like previous, but - use shapers instead of ``\term{allow}'' and ``\term{deny}''. Default - value is ``\term{none}''. - \titem{\{ip, IPAddress\}} This option specifies which network interface to - listen on. For example \verb|{ip, {192, 168, 1, 1}}|. - \titem{inet6} Set up the socket for IPv6. - \titem{starttls} This option specifies that STARTTLS extension is available - on connections to this port. You should also set ``\verb|certfile|'' - option. - \titem{tls} This option specifies that traffic on this port will be - encrypted using SSL immediately after connecting. You should also set - ``\verb|certfile|'' option. - \titem{ssl} This option specifies that traffic on this port will be - encrypted using SSL. You should also set ``\verb|certfile|'' option. It - is recommended to use \term{tls} option instead. - \titem{\{certfile, Path\}} Path to a file containing the SSL certificate. - \end{description} - \titem{ejabberd\_s2s\_in} This module serves incoming S2S connections. - \titem{ejabberd\_service} This module serves connections from \Jabber{} - services (i.\,e.\ that use the \ns{jabber:component:accept} namespace). - - The following additional options are defined for \term{ejabberd\_service} - (options \option{access}, \option{shaper}, \option{ip}, \option{inet6} are - still valid): - \begin{description} - \titem{\{host, Hostname, [HostOptions]\}} This option defines hostname of connected - service and allows to specify additional options, e.\,g.\ - \poption{\{password, Secret\}}. - \titem{\{hosts, [Hostnames], [HostOptions]\}} The same as above, but allows to - specify several hostnames. - \end{description} - \titem{ejabberd\_http} This module serves incoming HTTP connections. +\ind{modules!ejabberd\_c2s}\ind{modules!ejabberd\_s2s\_in}\ind{modules!ejabberd\_service}\ind{modules!ejabberd\_http}\ind{protocols!JEP-0114: Jabber Component Protocol} +Currently next modules are implemented: +\begin{table}[H] + \centering + \begin{tabular}{|l|l|l|l|l|} + \hline \texttt{ejabberd\_c2s}& Description& Handles c2s connections.\\ + \cline{2-3} & Options& \texttt{access}, \texttt{certfile}, \texttt{inet6}, + \texttt{ip}, \texttt{shaper}, \texttt{ssl}, \texttt{tls}, + \texttt{starttls},\\ + & &\texttt{starttls\_required}\\ + \hline \texttt{ejabberd\_s2s\_in}& Description& Handles incoming s2s + connections.\\ + \cline{2-3} & Options& \texttt{inet6}, \texttt{ip}\\ + \hline \texttt{ejabberd\_service}& Description& Interacts with external + components (*).\\ + \cline{2-3} & Options& \texttt{access}, \texttt{hosts}, \texttt{inet6}, + \texttt{ip}, \texttt{shaper}\\ + \hline \texttt{ejabberd\_http}& Description& Handles incoming HTTP + connections.\\ + \cline{2-3} & Options& \texttt{certfile}, \texttt{http\_poll}, + \texttt{inet6}, \texttt{ip}, \texttt{tls}, \texttt{web\_admin}\\ + \hline + \end{tabular} +\end{table} - The following options are defined: - \begin{description} - \titem{http\_poll} This option enables \jepref{0025} (HTTP Polling) - support. It is available then at \verb|http://server:port/http-poll/|. - - \titem{web\_admin} This option enables web-based interface for \ejabberd{} - administration which is available at \verb|http://server:port/admin/|, - login and password should be equal to username and password of one of - registered users who have permission defined in ``configure'' access rule. - \end{description} +(*) The mechanism for \footahref{http://ejabberd.jabber.ru/tutorials-transports}{external components} is defined in Jabber Component Protocol (\jepref{0114}). + +The following options are available: +\begin{description} + \titem{\{access, \}} \ind{options!access}This option defines + access to the port. The default value is ``\term{all}''. + \titem{\{certfile, Path\}} Path to a file containing the SSL certificate. + \titem{\{hosts, [Hostnames], [HostOptions]\}} \ind{options!hosts}This option + defines one or more hostnames of connected services and enables you to + specify additional options including \poption{\{password, Secret\}}. + \titem{http\_poll} \ind{options!http\_poll}\ind{protocols!JEP-0025: HTTP Polling}\ind{JWChat}\ind{web-based Jabber client} + This option enables HTTP Polling (\jepref{0025}) support. HTTP Polling + enables access via HTTP requests to \ejabberd{} from behind firewalls which + do not allow outgoing sockets on port 5222. + + If HTTP Polling is enabled, it will be available at + \verb|http://server:port/http-poll/|. Be aware that support for HTTP Polling + is also needed in the \Jabber{} client. Remark also that HTTP Polling can be + interesting to host a web-based \Jabber{} client such as + \footahref{http://jwchat.sourceforge.net/}{JWChat} (there is a tutorial to + \footahref{http://ejabberd.jabber.ru/jwchat}{install JWChat} with + instructions for \ejabberd{}). + \titem{inet6} \ind{options!inet6}\ind{IPv6}Set up the socket for IPv6. + \titem{\{ip, IPAddress\}} \ind{options!ip}This option specifies which network + interface to listen for. For example \verb|{ip, {192, 168, 1, 1}}|. + \titem{\{shaper, \}} \ind{options!shaper}This option defines a + shaper for the port (see section~\ref{sec:configshaper}). The default value + is ``\term{none}''. + \titem{ssl} \ind{options!ssl}\ind{SSL}This option specifies that traffic on + the port will be encrypted using SSL. You should also set the + \option{certfile} option. It is recommended to use the \term{tls} option + instead. + \titem{starttls} \ind{options!starttls}\ind{modules!STARTTLS}This option + specifies that STARTTLS encryption is available on connections to the port. + You should also set the \option{certfile} option. + \titem{starttls\_required} \ind{options!starttls\_required}This option + specifies that STARTTLS encryption is required on connections to the port. + No unencrypted connections will be allowed. You should also set the + \option{certfile} option. + \titem{tls} \ind{options!tls}\ind{TLS}This option specifies that traffic on + the port will be encrypted using SSL immediately after connecting. You + should also set the \option{certfile} option. + \titem{web\_admin} \ind{options!web\_admin}\ind{web interface}This option + enables the web interface for \ejabberd{} administration which is available + at \verb|http://server:port/admin/|. Login and password are the username and + password of one of the registered users who are granted access by the + ``configure'' access rule. \end{description} -For example, the following configuration defines that: +For instance, the following configuration defines that: \begin{itemize} -\item C2S connections are listened on port 5222 and 5223 (SSL) and denied for - user ``\term{bad}'' -\item S2S connections are listened on port 5269 -\item HTTP connections are listened on port 5280 and administration interface - and HTTP Polling support are enabled -\item All users except admins have traffic limit 1000\,B/s -\item AIM transport \jid{aim.example.org} is connected to port 5233 with - password ``\term{aimsecret}'' -\item JIT transports \jid{icq.example.org} and \jid{sms.example.org} are - connected to port 5234 with password ``\term{jitsecret}'' -\item MSN transport \jid{msn.example.org} is connected to port 5235 with - password ``\term{msnsecret}'' -\item Yahoo! transport \jid{yahoo.example.org} is connected to port 5236 with - password ``\term{yahoosecret}'' -\item Gadu-Gadu transport \jid{gg.example.org} is connected to port 5237 with - password ``\term{ggsecret}'' -\item ILE service \jid{ile.example.org} is connected to port 5238 with - password ``\term{ilesecret}'' +\item c2s connections are listened for on port 5222 and 5223 (SSL) and denied + for the user ``\term{bad}'' +\item s2s connections are listened for on port 5269 +\item Port 5280 is serving the web interface and the HTTP Polling service. Note + that it is also possible to serve them on different ports. The second + example in section~\ref{sec:webadm} shows how exactly this can be done. +\item All users except for the administrators have a traffic of limit + 1,000\,Bytes/second +\item \ind{transports!AIM}The + \footahref{http://ejabberd.jabber.ru/pyaimt}{AIM transport} + \jid{aim.example.org} is connected to port 5233 with password + ``\term{aimsecret}'' +\item \ind{transports!ICQ}The ICQ transport JIT (\jid{icq.example.org} and + \jid{sms.example.org}) is connected to port 5234 with password + ``\term{jitsecret}'' +\item \ind{transports!MSN}The + \footahref{http://ejabberd.jabber.ru/pymsnt}{MSN transport} + \jid{msn.example.org} is connected to port 5235 with password + ``\term{msnsecret}'' +\item \ind{transports!Yahoo}The + \footahref{http://ejabberd.jabber.ru/yahoo-transport-2}{Yahoo! transport} + \jid{yahoo.example.org} is connected to port 5236 with password + ``\term{yahoosecret}'' +\item \ind{transports!Gadu-Gadu}The \footahref{http://ejabberd.jabber.ru/jabber-gg-transport}{Gadu-Gadu transport} \jid{gg.example.org} is + connected to port 5237 with password ``\term{ggsecret}'' +\item \ind{transports!email notifier}The + \footahref{http://ejabberd.jabber.ru/jmc}{Jabber Mail Component} + \jid{jmc.example.org} is connected to port 5238 with password + ``\term{jmcsecret}'' \end{itemize} \begin{verbatim} {acl, blocked, {user, "bad"}}. @@ -576,13 +637,13 @@ For example, the following configuration defines that: [{password, "yahoosecret"}]}]}, {5237, ejabberd_service, [{host, "gg.example.org", [{password, "ggsecret"}]}]}, - {5238, ejabberd_service, [{host, "ile.example.org", - [{password, "ilesecret"}]}]} + {5238, ejabberd_service, [{host, "jmc.example.org", + [{password, "jmcsecret"}]}]} ] }. \end{verbatim} -Note, that for jabberd14- or wpjabberd-based services you have to make the -transports log and do XDB by themselves: +Note, that for \ind{jabberd 1.4}jabberd 1.4- or \ind{WPJabber}WPJabber-based +services you have to make the transports log and do \ind{XDB}XDB by themselves: \begin{verbatim} @@ -614,16 +675,17 @@ transports log and do XDB by themselves: \end{verbatim} - \subsubsection{Modules} \label{sec:configmodules} +\ind{modules} -Option \term{modules} defines the list of modules that will be loaded after -\ejabberd{} startup. Each list element is a tuple where first element is a -name of a module and second is list of options to this module. See -section~\ref{sec:modules} for detailed information on each module. +The option \term{modules} defines the list of modules that will be loaded after +\ejabberd{} startup. Each entry in the list is a tuple in which the first +element is the name of a module and the second is a list of options for that +module. Read section~\ref{sec:modules} for detailed information about each +module. -Example: +Example:\ind{modules!overview} \begin{verbatim} {modules, [{mod_register, []}, @@ -635,7 +697,7 @@ Example: {mod_vcard, []}, {mod_offline, []}, {mod_announce, [{access, announce}]}, - {mod_echo, [{host, "echo.example.org"}]}, + {mod_echo, [{hosts, ["echo.example.org"]}]}, {mod_private, []}, {mod_irc, []}, {mod_muc, []}, @@ -646,266 +708,415 @@ Example: ]}. \end{verbatim} - -\subsubsection{Virtual Host Configuration} +\subsubsection{Virtual Hosting} \label{sec:configvirtualhost} +\ind{virtual hosting}\ind{virtual hosts} -Options can be defined separately for different virtual hosts using -\term{host\_config} option. It have the have following syntax: +Options can be defined separately for every virtual host using the +\term{host\_config} option.\ind{options!host\_config} It has the following +syntax: \begin{verbatim} {host_config, , [