25
1
mirror of https://github.com/processone/ejabberd.git synced 2024-12-22 17:28:25 +01:00

* src/ejabberd_sm.erl: The max_user_sessions has been moved to

host configuration.
* src/ejabberd.cfg.example: Likewise.
* doc/guide.tex: Likewise.

SVN Revision: 568
This commit is contained in:
Mickaël Rémond 2006-05-22 10:17:22 +00:00
parent 043c2ccf51
commit 753e768090
5 changed files with 236 additions and 129 deletions

View File

@ -1,3 +1,10 @@
2006-05-22 Mickael Remond <mickael.remond@process-one.net>
* src/ejabberd_sm.erl: The max_user_sessions has been moved to
host configuration.
* src/ejabberd.cfg.example: Likewise.
* doc/guide.tex: Likewise.
2006-05-21 Mickael Remond <mickael.remond@process-one.net> 2006-05-21 Mickael Remond <mickael.remond@process-one.net>
* src/ejabberd_sm.erl: An option to limit the number of opened sessions * src/ejabberd_sm.erl: An option to limit the number of opened sessions

View File

@ -55,6 +55,106 @@ BLOCKQUOTE{margin-left:4ex;margin-right:4ex;text-align:left;}
<H2 CLASS="section">Contents</H2><!--SEC END --> <H2 CLASS="section">Contents</H2><!--SEC END -->
<UL CLASS="toc"><LI CLASS="li-toc">
<A HREF="#htoc1">1&nbsp;&nbsp;Introduction</A>
<UL CLASS="toc"><LI CLASS="li-toc">
<A HREF="#htoc2">1.1&nbsp;&nbsp;Key Features</A>
<LI CLASS="li-toc"><A HREF="#htoc3">1.2&nbsp;&nbsp;Additional Features</A>
</UL>
<LI CLASS="li-toc"><A HREF="#htoc4">2&nbsp;&nbsp;Installation from Source</A>
<UL CLASS="toc"><LI CLASS="li-toc">
<A HREF="#htoc5">2.1&nbsp;&nbsp;Installation Requirements</A>
<UL CLASS="toc"><LI CLASS="li-toc">
<A HREF="#htoc6">2.1.1&nbsp;&nbsp;&#8220;Unix-like&#8221; operating systems</A>
<LI CLASS="li-toc"><A HREF="#htoc7">2.1.2&nbsp;&nbsp;Windows</A>
</UL>
<LI CLASS="li-toc"><A HREF="#htoc8">2.2&nbsp;&nbsp;Obtaining <TT>ejabberd</TT></A>
<LI CLASS="li-toc"><A HREF="#htoc9">2.3&nbsp;&nbsp;Compilation</A>
<UL CLASS="toc"><LI CLASS="li-toc">
<A HREF="#htoc10">2.3.1&nbsp;&nbsp;&#8220;Unix-like&#8221; operating systems</A>
<LI CLASS="li-toc"><A HREF="#htoc11">2.3.2&nbsp;&nbsp;Windows</A>
</UL>
<LI CLASS="li-toc"><A HREF="#htoc12">2.4&nbsp;&nbsp;Starting</A>
</UL>
<LI CLASS="li-toc"><A HREF="#htoc13">3&nbsp;&nbsp;Configuration</A>
<UL CLASS="toc"><LI CLASS="li-toc">
<A HREF="#htoc14">3.1&nbsp;&nbsp;Initial Configuration</A>
<UL CLASS="toc"><LI CLASS="li-toc">
<A HREF="#htoc15">3.1.1&nbsp;&nbsp;Host Names</A>
<LI CLASS="li-toc"><A HREF="#htoc16">3.1.2&nbsp;&nbsp;Default Language</A>
<LI CLASS="li-toc"><A HREF="#htoc17">3.1.3&nbsp;&nbsp;Access Rules</A>
<LI CLASS="li-toc"><A HREF="#htoc18">3.1.4&nbsp;&nbsp;Shapers</A>
<LI CLASS="li-toc"><A HREF="#htoc19">3.1.5&nbsp;&nbsp;Limitation of the number of opened sessions</A>
<LI CLASS="li-toc"><A HREF="#htoc20">3.1.6&nbsp;&nbsp;Listened Sockets</A>
<LI CLASS="li-toc"><A HREF="#htoc21">3.1.7&nbsp;&nbsp;Modules</A>
<LI CLASS="li-toc"><A HREF="#htoc22">3.1.8&nbsp;&nbsp;Virtual Hosting</A>
<LI CLASS="li-toc"><A HREF="#htoc23">3.1.9&nbsp;&nbsp;SASL anonymous and anonymous login</A>
</UL>
<LI CLASS="li-toc"><A HREF="#htoc24">3.2&nbsp;&nbsp;Relational Database Support</A>
<UL CLASS="toc"><LI CLASS="li-toc">
<A HREF="#htoc25">3.2.1&nbsp;&nbsp;Authentication against a relational database</A>
<LI CLASS="li-toc"><A HREF="#htoc26">3.2.2&nbsp;&nbsp;Relational database for other modules</A>
</UL>
<LI CLASS="li-toc"><A HREF="#htoc27">3.3&nbsp;&nbsp;Creating an Initial Administrator</A>
<LI CLASS="li-toc"><A HREF="#htoc28">3.4&nbsp;&nbsp;Online Configuration and Monitoring</A>
<UL CLASS="toc"><LI CLASS="li-toc">
<A HREF="#htoc29">3.4.1&nbsp;&nbsp;Web Interface</A>
<LI CLASS="li-toc"><A HREF="#htoc30">3.4.2&nbsp;&nbsp;<TT>ejabberdctl</TT></A>
</UL>
</UL>
<LI CLASS="li-toc"><A HREF="#htoc31">4&nbsp;&nbsp;Firewall Settings</A>
<LI CLASS="li-toc"><A HREF="#htoc32">5&nbsp;&nbsp;SRV Records</A>
<LI CLASS="li-toc"><A HREF="#htoc33">6&nbsp;&nbsp;Clustering</A>
<UL CLASS="toc"><LI CLASS="li-toc">
<A HREF="#htoc34">6.1&nbsp;&nbsp;How it Works</A>
<UL CLASS="toc"><LI CLASS="li-toc">
<A HREF="#htoc35">6.1.1&nbsp;&nbsp;Router</A>
<LI CLASS="li-toc"><A HREF="#htoc36">6.1.2&nbsp;&nbsp;Local Router</A>
<LI CLASS="li-toc"><A HREF="#htoc37">6.1.3&nbsp;&nbsp;Session Manager</A>
<LI CLASS="li-toc"><A HREF="#htoc38">6.1.4&nbsp;&nbsp;s2s Manager</A>
</UL>
<LI CLASS="li-toc"><A HREF="#htoc39">6.2&nbsp;&nbsp;Clustering Setup</A>
</UL>
<LI CLASS="li-toc"><A HREF="#htoc40">A&nbsp;&nbsp;Built-in Modules</A>
<UL CLASS="toc"><LI CLASS="li-toc">
<A HREF="#htoc41">A.1&nbsp;&nbsp;Overview</A>
<LI CLASS="li-toc"><A HREF="#htoc42">A.2&nbsp;&nbsp;Common Options</A>
<UL CLASS="toc"><LI CLASS="li-toc">
<A HREF="#htoc43">A.2.1&nbsp;&nbsp;<TT>iqdisc</TT></A>
<LI CLASS="li-toc"><A HREF="#htoc44">A.2.2&nbsp;&nbsp;<TT>hosts</TT></A>
</UL>
<LI CLASS="li-toc"><A HREF="#htoc45">A.3&nbsp;&nbsp;<TT>mod_announce</TT></A>
<LI CLASS="li-toc"><A HREF="#htoc46">A.4&nbsp;&nbsp;<TT>mod_disco</TT></A>
<LI CLASS="li-toc"><A HREF="#htoc47">A.5&nbsp;&nbsp;<TT>mod_echo</TT></A>
<LI CLASS="li-toc"><A HREF="#htoc48">A.6&nbsp;&nbsp;<TT>mod_irc</TT></A>
<LI CLASS="li-toc"><A HREF="#htoc49">A.7&nbsp;&nbsp;<TT>mod_last</TT></A>
<LI CLASS="li-toc"><A HREF="#htoc50">A.8&nbsp;&nbsp;<TT>mod_muc</TT></A>
<LI CLASS="li-toc"><A HREF="#htoc51">A.9&nbsp;&nbsp;<TT>mod_muc_log</TT></A>
<LI CLASS="li-toc"><A HREF="#htoc52">A.10&nbsp;&nbsp;<TT>mod_offline</TT></A>
<LI CLASS="li-toc"><A HREF="#htoc53">A.11&nbsp;&nbsp;<TT>mod_privacy</TT></A>
<LI CLASS="li-toc"><A HREF="#htoc54">A.12&nbsp;&nbsp;<TT>mod_private</TT></A>
<LI CLASS="li-toc"><A HREF="#htoc55">A.13&nbsp;&nbsp;<TT>mod_pubsub</TT></A>
<LI CLASS="li-toc"><A HREF="#htoc56">A.14&nbsp;&nbsp;<TT>mod_register</TT></A>
<LI CLASS="li-toc"><A HREF="#htoc57">A.15&nbsp;&nbsp;<TT>mod_roster</TT></A>
<LI CLASS="li-toc"><A HREF="#htoc58">A.16&nbsp;&nbsp;<TT>mod_service_log</TT></A>
<LI CLASS="li-toc"><A HREF="#htoc59">A.17&nbsp;&nbsp;<TT>mod_shared_roster</TT></A>
<LI CLASS="li-toc"><A HREF="#htoc60">A.18&nbsp;&nbsp;<TT>mod_stats</TT></A>
<LI CLASS="li-toc"><A HREF="#htoc61">A.19&nbsp;&nbsp;<TT>mod_time</TT></A>
<LI CLASS="li-toc"><A HREF="#htoc62">A.20&nbsp;&nbsp;<TT>mod_vcard</TT></A>
<LI CLASS="li-toc"><A HREF="#htoc63">A.21&nbsp;&nbsp;<TT>mod_version</TT></A>
</UL>
<LI CLASS="li-toc"><A HREF="#htoc64">B&nbsp;&nbsp;Internationalization and Localization</A>
<LI CLASS="li-toc"><A HREF="#htoc65">C&nbsp;&nbsp;Release Notes</A>
<UL CLASS="toc"><LI CLASS="li-toc">
<A HREF="#htoc66">C.1&nbsp;&nbsp;ejabberd 0.9</A>
<LI CLASS="li-toc"><A HREF="#htoc67">C.2&nbsp;&nbsp;ejabberd 0.9.1</A>
<LI CLASS="li-toc"><A HREF="#htoc68">C.3&nbsp;&nbsp;ejabberd 0.9.8</A>
<LI CLASS="li-toc"><A HREF="#htoc69">C.4&nbsp;&nbsp;ejabberd 1.0.0</A>
<LI CLASS="li-toc"><A HREF="#htoc70">C.5&nbsp;&nbsp;ejabberd 1.1.0</A>
<LI CLASS="li-toc"><A HREF="#htoc71">C.6&nbsp;&nbsp;ejabberd 1.1.1</A>
</UL>
<LI CLASS="li-toc"><A HREF="#htoc72">D&nbsp;&nbsp;Acknowledgements</A>
</UL>
<!--TOC section Introduction--> <!--TOC section Introduction-->
@ -506,9 +606,24 @@ To define a shaper named &#8220;<TT>normal</TT>&#8221; with traffic speed limite
<PRE CLASS="verbatim"> <PRE CLASS="verbatim">
{shaper, fast, {maxrate, 50000}}. {shaper, fast, {maxrate, 50000}}.
</PRE></UL> </PRE></UL>
<!--TOC subsubsection Limitation of the number of opened sessions-->
<H4 CLASS="subsubsection"><A NAME="htoc19">3.1.5</A>&nbsp;&nbsp;Limitation of the number of opened sessions</H4><!--SEC END -->
<A NAME="sec:configmaxsessions"></A>
This option specifies the maximum number of sessions (authenticated
connections) per user. If a user tries to open more than the maximum number of
allowed sessions, with different resources, the first opened session will be
disconnected. The error &#8220;<TT>session replaced</TT>&#8221; is send to the
disconnected session. This value is either a number or <TT>infinity</TT>. For
example <CODE>{max\_user\_sessions, 10}</CODE>. The default value is <TT>10</TT>.<BR>
<BR>
This option can be define per virtual host. See section&nbsp;<A HREF="#sec:configvirtualhost">3.1.8</A>.<BR>
<BR>
<!--TOC subsubsection Listened Sockets--> <!--TOC subsubsection Listened Sockets-->
<H4 CLASS="subsubsection"><A NAME="htoc19">3.1.5</A>&nbsp;&nbsp;Listened Sockets</H4><!--SEC END --> <H4 CLASS="subsubsection"><A NAME="htoc20">3.1.6</A>&nbsp;&nbsp;Listened Sockets</H4><!--SEC END -->
<A NAME="sec:configlistened"></A> <A NAME="sec:configlistened"></A>
@ -532,9 +647,9 @@ Currently next modules are implemented:
<TR><TD VALIGN=top ALIGN=left NOWRAP>&nbsp;</TD> <TR><TD VALIGN=top ALIGN=left NOWRAP>&nbsp;</TD>
<TD VALIGN=top ALIGN=left NOWRAP>Options</TD> <TD VALIGN=top ALIGN=left NOWRAP>Options</TD>
<TD VALIGN=top ALIGN=left><TT>access</TT>, <TT>certfile</TT>, <TT>inet6</TT>, <TD VALIGN=top ALIGN=left><TT>access</TT>, <TT>certfile</TT>, <TT>inet6</TT>,
<TT>ip</TT>, <TT>max_stanza_size</TT>, <TT>max_user_sessions</TT>, <TT>ip</TT>, <TT>max_stanza_size</TT>, <TT>shaper</TT>, <TT>ssl</TT>,
<TT>shaper</TT>, <TT>ssl</TT>, <TT>tls</TT>, <TT>starttls</TT>, <TT>tls</TT>, <TT>starttls</TT>, <TT>starttls_required</TT>,
<TT>starttls_required</TT>, <TT>zlib</TT></TD> <TT>zlib</TT></TD>
</TR> </TR>
<TR><TD VALIGN=top ALIGN=left NOWRAP><TT>ejabberd_s2s_in</TT></TD> <TR><TD VALIGN=top ALIGN=left NOWRAP><TT>ejabberd_s2s_in</TT></TD>
<TD VALIGN=top ALIGN=left NOWRAP>Description</TD> <TD VALIGN=top ALIGN=left NOWRAP>Description</TD>
@ -595,19 +710,9 @@ If HTTP Polling is enabled, it will be available at
<DT CLASS="dt-description"><B><TT>{max_stanza_size, Size}</TT></B><DD CLASS="dd-description"> This <DT CLASS="dt-description"><B><TT>{max_stanza_size, Size}</TT></B><DD CLASS="dd-description"> This
option specifies an approximate maximal size in bytes of XML stanzas. option specifies an approximate maximal size in bytes of XML stanzas.
For example <CODE>{max\_stanza\_size, 65536}</CODE>. The default value For example <CODE>{max\_stanza\_size, 65536}</CODE>. The default value
is &#8220;<TT>infinity</TT>&#8221;.<BR> is &#8220;<TT>infinity</TT>&#8221;.
<BR> <DT CLASS="dt-description"><B><TT>{shaper, &lt;access rule&gt;}</TT></B><DD CLASS="dd-description"> This option defines a
<DT CLASS="dt-description"><B><TT>{max_user_sessions, Max}</TT></B><DD CLASS="dd-description"> This shaper for the port (see section&nbsp;<A HREF="#sec:configshaper">3.1.4</A>). The default value
option specifies the maximum number of sessions (authenticated
connections) per user. If a user tries to open more than the maximum
number of allowed sessions, with different resources, the first opened
session will be disconnected. The error &#8220;<TT>session replaced</TT>&#8221; is
send to the disconnected session. This value is either a number or
<TT>infinity</TT>. For example <CODE>{max\_user\_sessions, 10}</CODE>. The
default value is <TT>10</TT>.<BR>
<BR>
<DT CLASS="dt-description"><B><TT>{shaper, &lt;access rule&gt;}</TT></B><DD CLASS="dd-description"> This option defines a
shaper for the port (see section&nbsp;<A HREF="#sec:configshaper">??</A>). The default value
is &#8220;<TT>none</TT>&#8221;. is &#8220;<TT>none</TT>&#8221;.
<DT CLASS="dt-description"><B><TT>ssl</TT></B><DD CLASS="dd-description"> This option specifies that traffic on <DT CLASS="dt-description"><B><TT>ssl</TT></B><DD CLASS="dd-description"> This option specifies that traffic on
the port will be encrypted using SSL. You should also set the the port will be encrypted using SSL. You should also set the
@ -652,7 +757,7 @@ c2s connections are listened for on port 5222 and 5223 (SSL) and denied
traffic enabled. traffic enabled.
<LI CLASS="li-itemize">Port 5280 is serving the web interface and the HTTP Polling service. Note <LI CLASS="li-itemize">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 that it is also possible to serve them on different ports. The second
example in section&nbsp;<A HREF="#sec:webadm">??</A> shows how exactly this can be done. example in section&nbsp;<A HREF="#sec:webadm">3.4.1</A> shows how exactly this can be done.
<LI CLASS="li-itemize">All users except for the administrators have a traffic of limit <LI CLASS="li-itemize">All users except for the administrators have a traffic of limit
1,000&nbsp;Bytes/second 1,000&nbsp;Bytes/second
<LI CLASS="li-itemize">The <LI CLASS="li-itemize">The
@ -740,14 +845,14 @@ services you have to make the transports log and do XDB by themselves:
</PRE> </PRE>
<!--TOC subsubsection Modules--> <!--TOC subsubsection Modules-->
<H4 CLASS="subsubsection"><A NAME="htoc20">3.1.6</A>&nbsp;&nbsp;Modules</H4><!--SEC END --> <H4 CLASS="subsubsection"><A NAME="htoc21">3.1.7</A>&nbsp;&nbsp;Modules</H4><!--SEC END -->
<A NAME="sec:configmodules"></A> <A NAME="sec:configmodules"></A>
The option <TT>modules</TT> defines the list of modules that will be loaded after The option <TT>modules</TT> defines the list of modules that will be loaded after
<TT>ejabberd</TT>'s startup. Each entry in the list is a tuple in which the first <TT>ejabberd</TT>'s 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 element is the name of a module and the second is a list of options for that
module. Read section&nbsp;<A HREF="#sec:modules">??</A> for detailed information about modules.<BR> module. Read section&nbsp;<A HREF="#sec:modules">A</A> for detailed information about modules.<BR>
<BR> <BR>
Examples: Examples:
<UL CLASS="itemize"><LI CLASS="li-itemize"> <UL CLASS="itemize"><LI CLASS="li-itemize">
@ -769,7 +874,7 @@ In this simple example, only the module <TT>mod_echo</TT> is loaded and no
</PRE></UL> </PRE></UL>
<!--TOC subsubsection Virtual Hosting--> <!--TOC subsubsection Virtual Hosting-->
<H4 CLASS="subsubsection"><A NAME="htoc21">3.1.7</A>&nbsp;&nbsp;Virtual Hosting</H4><!--SEC END --> <H4 CLASS="subsubsection"><A NAME="htoc22">3.1.8</A>&nbsp;&nbsp;Virtual Hosting</H4><!--SEC END -->
<A NAME="sec:configvirtualhost"></A> <A NAME="sec:configvirtualhost"></A>
@ -809,7 +914,7 @@ Domain <TT>example.net</TT> is using the internal authentication method while
</PRE></UL> </PRE></UL>
<!--TOC subsubsection SASL anonymous and anonymous login--> <!--TOC subsubsection SASL anonymous and anonymous login-->
<H4 CLASS="subsubsection"><A NAME="htoc22">3.1.8</A>&nbsp;&nbsp;SASL anonymous and anonymous login</H4><!--SEC END --> <H4 CLASS="subsubsection"><A NAME="htoc23">3.1.9</A>&nbsp;&nbsp;SASL anonymous and anonymous login</H4><!--SEC END -->
<A NAME="sec:configsaslanonymous"></A> <A NAME="sec:configsaslanonymous"></A>
@ -833,7 +938,7 @@ very special cases. It defaults to false.<BR>
enabled. enabled.
</UL> </UL>
Those options are defined for each virtual host with the <TT>host_config</TT> Those options are defined for each virtual host with the <TT>host_config</TT>
parameter (see section&nbsp;<A HREF="#sec:configvirtualhost">??</A>).<BR> parameter (see section&nbsp;<A HREF="#sec:configvirtualhost">3.1.8</A>).<BR>
<BR> <BR>
Examples: Examples:
<UL CLASS="itemize"><LI CLASS="li-itemize"> <UL CLASS="itemize"><LI CLASS="li-itemize">
@ -865,12 +970,12 @@ available from:
<BR> <BR>
<!--TOC subsection Relational Database Support--> <!--TOC subsection Relational Database Support-->
<H3 CLASS="subsection"><A NAME="htoc23">3.2</A>&nbsp;&nbsp;Relational Database Support</H3><!--SEC END --> <H3 CLASS="subsection"><A NAME="htoc24">3.2</A>&nbsp;&nbsp;Relational Database Support</H3><!--SEC END -->
<A NAME="sec:relationaldatabase"></A> <A NAME="sec:relationaldatabase"></A>
<!--TOC subsubsection Authentication against a relational database--> <!--TOC subsubsection Authentication against a relational database-->
<H4 CLASS="subsubsection"><A NAME="htoc24">3.2.1</A>&nbsp;&nbsp;Authentication against a relational database</H4><!--SEC END --> <H4 CLASS="subsubsection"><A NAME="htoc25">3.2.1</A>&nbsp;&nbsp;Authentication against a relational database</H4><!--SEC END -->
<A NAME="sec:relationaldatabaseauth"></A> <A NAME="sec:relationaldatabaseauth"></A>
ejabberd use its internal Mnesia database as a default. It is however possible ejabberd use its internal Mnesia database as a default. It is however possible
@ -925,7 +1030,7 @@ available from: <A HREF="http://support.process-one.net/doc/display/MESSENGER/Us
<BR> <BR>
<!--TOC subsubsection Relational database for other modules--> <!--TOC subsubsection Relational database for other modules-->
<H4 CLASS="subsubsection"><A NAME="htoc25">3.2.2</A>&nbsp;&nbsp;Relational database for other modules</H4><!--SEC END --> <H4 CLASS="subsubsection"><A NAME="htoc26">3.2.2</A>&nbsp;&nbsp;Relational database for other modules</H4><!--SEC END -->
<A NAME="sec:relationaldatabaseextra"></A> <A NAME="sec:relationaldatabaseextra"></A>
It is possible to use a relational database to store pieces of It is possible to use a relational database to store pieces of
@ -942,7 +1047,7 @@ Last connection date and time: Use <TT>mod_last_odbc</TT> instead of
</UL> </UL>
<!--TOC subsection Creating an Initial Administrator--> <!--TOC subsection Creating an Initial Administrator-->
<H3 CLASS="subsection"><A NAME="htoc26">3.3</A>&nbsp;&nbsp;Creating an Initial Administrator</H3><!--SEC END --> <H3 CLASS="subsection"><A NAME="htoc27">3.3</A>&nbsp;&nbsp;Creating an Initial Administrator</H3><!--SEC END -->
<A NAME="sec:initialadmin"></A> <A NAME="sec:initialadmin"></A>
Before the web interface can be entered to perform administration tasks, an Before the web interface can be entered to perform administration tasks, an
@ -954,10 +1059,10 @@ Register an account on your <TT>ejabberd</TT> deployment. An account can be
created in two ways: created in two ways:
<OL CLASS="enumerate" type=a><LI CLASS="li-enumerate"> <OL CLASS="enumerate" type=a><LI CLASS="li-enumerate">
Using the tool <TT>ejabberdctl</TT> (see Using the tool <TT>ejabberdctl</TT> (see
section&nbsp;<A HREF="#sec:ejabberdctl">??</A>): section&nbsp;<A HREF="#sec:ejabberdctl">3.4.2</A>):
<PRE CLASS="verbatim"> <PRE CLASS="verbatim">
% ejabberdctl node@host register admin example.org password % ejabberdctl node@host register admin example.org password
</PRE><LI CLASS="li-enumerate">Using In-Band Registration (see section&nbsp;<A HREF="#sec:modregister">??</A>): you can </PRE><LI CLASS="li-enumerate">Using In-Band Registration (see section&nbsp;<A HREF="#sec:modregister">A.14</A>): you can
use a Jabber client to register an account. use a Jabber client to register an account.
</OL> </OL>
<LI CLASS="li-enumerate">Edit the configuration file to promote the account created in the previous <LI CLASS="li-enumerate">Edit the configuration file to promote the account created in the previous
@ -974,22 +1079,22 @@ Register an account on your <TT>ejabberd</TT> deployment. An account can be
</OL> </OL>
<!--TOC subsection Online Configuration and Monitoring--> <!--TOC subsection Online Configuration and Monitoring-->
<H3 CLASS="subsection"><A NAME="htoc27">3.4</A>&nbsp;&nbsp;Online Configuration and Monitoring</H3><!--SEC END --> <H3 CLASS="subsection"><A NAME="htoc28">3.4</A>&nbsp;&nbsp;Online Configuration and Monitoring</H3><!--SEC END -->
<A NAME="sec:onlineconfig"></A> <A NAME="sec:onlineconfig"></A>
<!--TOC subsubsection Web Interface--> <!--TOC subsubsection Web Interface-->
<H4 CLASS="subsubsection"><A NAME="htoc28">3.4.1</A>&nbsp;&nbsp;Web Interface</H4><!--SEC END --> <H4 CLASS="subsubsection"><A NAME="htoc29">3.4.1</A>&nbsp;&nbsp;Web Interface</H4><!--SEC END -->
<A NAME="sec:webadm"></A> <A NAME="sec:webadm"></A>
To perform online configuration of <TT>ejabberd</TT> you need to enable the To perform online configuration of <TT>ejabberd</TT> you need to enable the
<TT>ejabberd_http</TT> listener with the option <TT>web_admin</TT> (see <TT>ejabberd_http</TT> listener with the option <TT>web_admin</TT> (see
section&nbsp;<A HREF="#sec:configlistened">??</A>). Then you can open section&nbsp;<A HREF="#sec:configlistened">3.1.6</A>). Then you can open
<CODE>http://server:port/admin/</CODE> in your favourite web browser. You <CODE>http://server:port/admin/</CODE> in your favourite web browser. You
will be asked to enter the username (the <EM>full</EM> Jabber ID) and password will be asked to enter the username (the <EM>full</EM> Jabber ID) and password
of an <TT>ejabberd</TT> user with administrator rights. After authentication of an <TT>ejabberd</TT> user with administrator rights. After authentication
you will see a page similar to figure&nbsp;<A HREF="#fig:webadmmain">??</A>. you will see a page similar to figure&nbsp;<A HREF="#fig:webadmmain">1</A>.
<BLOCKQUOTE CLASS="figure"><DIV CLASS="center"><DIV CLASS="center"><HR WIDTH="80%" SIZE=2></DIV> <BLOCKQUOTE CLASS="figure"><DIV CLASS="center"><DIV CLASS="center"><HR WIDTH="80%" SIZE=2></DIV>
<IMG SRC="webadmmain.png"> <IMG SRC="webadmmain.png">
@ -1053,7 +1158,7 @@ You can serve the web interface on the same port as the
</PRE></UL> </PRE></UL>
<!--TOC subsubsection <TT>ejabberdctl</TT>--> <!--TOC subsubsection <TT>ejabberdctl</TT>-->
<H4 CLASS="subsubsection"><A NAME="htoc29">3.4.2</A>&nbsp;&nbsp;<TT>ejabberdctl</TT></H4><!--SEC END --> <H4 CLASS="subsubsection"><A NAME="htoc30">3.4.2</A>&nbsp;&nbsp;<TT>ejabberdctl</TT></H4><!--SEC END -->
<A NAME="sec:ejabberdctl"></A> <A NAME="sec:ejabberdctl"></A>
It is possible to do some administration operations using the command It is possible to do some administration operations using the command
@ -1099,7 +1204,7 @@ Additional information:
</DL> </DL>
<!--TOC section Firewall Settings--> <!--TOC section Firewall Settings-->
<H2 CLASS="section"><A NAME="htoc30">4</A>&nbsp;&nbsp;Firewall Settings</H2><!--SEC END --> <H2 CLASS="section"><A NAME="htoc31">4</A>&nbsp;&nbsp;Firewall Settings</H2><!--SEC END -->
<A NAME="sec:firewall"></A> <A NAME="sec:firewall"></A>
@ -1119,16 +1224,16 @@ You need to take the following TCP ports in mind when configuring your firewall:
<TD ALIGN=left NOWRAP>s2s connections.</TD> <TD ALIGN=left NOWRAP>s2s connections.</TD>
</TR> </TR>
<TR><TD ALIGN=left NOWRAP>4369</TD> <TR><TD ALIGN=left NOWRAP>4369</TD>
<TD ALIGN=left NOWRAP>Only for clustering (see&nbsp;<A HREF="#sec:clustering">??</A>).</TD> <TD ALIGN=left NOWRAP>Only for clustering (see&nbsp;<A HREF="#sec:clustering">6</A>).</TD>
</TR> </TR>
<TR><TD ALIGN=left NOWRAP>port range</TD> <TR><TD ALIGN=left NOWRAP>port range</TD>
<TD ALIGN=left NOWRAP>Only for clustring (see&nbsp;<A HREF="#sec:clustering">??</A>). This range <TD ALIGN=left NOWRAP>Only for clustring (see&nbsp;<A HREF="#sec:clustering">6</A>). This range
is configurable (see&nbsp;<A HREF="#sec:starting">??</A>).</TD> is configurable (see&nbsp;<A HREF="#sec:starting">2.4</A>).</TD>
</TR></TABLE> </TR></TABLE>
<DIV CLASS="center"><HR WIDTH="80%" SIZE=2></DIV></DIV></BLOCKQUOTE> <DIV CLASS="center"><HR WIDTH="80%" SIZE=2></DIV></DIV></BLOCKQUOTE>
<!--TOC section SRV Records--> <!--TOC section SRV Records-->
<H2 CLASS="section"><A NAME="htoc31">5</A>&nbsp;&nbsp;SRV Records</H2><!--SEC END --> <H2 CLASS="section"><A NAME="htoc32">5</A>&nbsp;&nbsp;SRV Records</H2><!--SEC END -->
<A NAME="sec:srv"></A> <A NAME="sec:srv"></A>
@ -1140,13 +1245,13 @@ General information:
</UL> </UL>
<!--TOC section Clustering--> <!--TOC section Clustering-->
<H2 CLASS="section"><A NAME="htoc32">6</A>&nbsp;&nbsp;Clustering</H2><!--SEC END --> <H2 CLASS="section"><A NAME="htoc33">6</A>&nbsp;&nbsp;Clustering</H2><!--SEC END -->
<A NAME="sec:clustering"></A> <A NAME="sec:clustering"></A>
<!--TOC subsection How it Works--> <!--TOC subsection How it Works-->
<H3 CLASS="subsection"><A NAME="htoc33">6.1</A>&nbsp;&nbsp;How it Works</H3><!--SEC END --> <H3 CLASS="subsection"><A NAME="htoc34">6.1</A>&nbsp;&nbsp;How it Works</H3><!--SEC END -->
<A NAME="sec:howitworks"></A> <A NAME="sec:howitworks"></A>
@ -1167,7 +1272,7 @@ router,
</UL> </UL>
<!--TOC subsubsection Router--> <!--TOC subsubsection Router-->
<H4 CLASS="subsubsection"><A NAME="htoc34">6.1.1</A>&nbsp;&nbsp;Router</H4><!--SEC END --> <H4 CLASS="subsubsection"><A NAME="htoc35">6.1.1</A>&nbsp;&nbsp;Router</H4><!--SEC END -->
This module is the main router of Jabber packets on each node. It This module is the main router of Jabber packets on each node. It
@ -1178,7 +1283,7 @@ appropriate process. If not, it is sent to the s2s manager.<BR>
<BR> <BR>
<!--TOC subsubsection Local Router--> <!--TOC subsubsection Local Router-->
<H4 CLASS="subsubsection"><A NAME="htoc35">6.1.2</A>&nbsp;&nbsp;Local Router</H4><!--SEC END --> <H4 CLASS="subsubsection"><A NAME="htoc36">6.1.2</A>&nbsp;&nbsp;Local Router</H4><!--SEC END -->
This module routes packets which have a destination domain equal to This module routes packets which have a destination domain equal to
@ -1188,7 +1293,7 @@ on its content.<BR>
<BR> <BR>
<!--TOC subsubsection Session Manager--> <!--TOC subsubsection Session Manager-->
<H4 CLASS="subsubsection"><A NAME="htoc36">6.1.3</A>&nbsp;&nbsp;Session Manager</H4><!--SEC END --> <H4 CLASS="subsubsection"><A NAME="htoc37">6.1.3</A>&nbsp;&nbsp;Session Manager</H4><!--SEC END -->
This module routes packets to local users. It looks up to which user This module routes packets to local users. It looks up to which user
@ -1198,7 +1303,7 @@ storage, or bounced back.<BR>
<BR> <BR>
<!--TOC subsubsection s2s Manager--> <!--TOC subsubsection s2s Manager-->
<H4 CLASS="subsubsection"><A NAME="htoc37">6.1.4</A>&nbsp;&nbsp;s2s Manager</H4><!--SEC END --> <H4 CLASS="subsubsection"><A NAME="htoc38">6.1.4</A>&nbsp;&nbsp;s2s Manager</H4><!--SEC END -->
This module routes packets to other Jabber servers. First, it This module routes packets to other Jabber servers. First, it
@ -1209,7 +1314,7 @@ serving this connection, otherwise a new connection is opened.<BR>
<BR> <BR>
<!--TOC subsection Clustering Setup--> <!--TOC subsection Clustering Setup-->
<H3 CLASS="subsection"><A NAME="htoc38">6.2</A>&nbsp;&nbsp;Clustering Setup</H3><!--SEC END --> <H3 CLASS="subsection"><A NAME="htoc39">6.2</A>&nbsp;&nbsp;Clustering Setup</H3><!--SEC END -->
<A NAME="sec:cluster"></A> <A NAME="sec:cluster"></A>
@ -1282,13 +1387,13 @@ domain.<BR>
<!--TOC section Built-in Modules--> <!--TOC section Built-in Modules-->
<H2 CLASS="section"><A NAME="htoc39">A</A>&nbsp;&nbsp;Built-in Modules</H2><!--SEC END --> <H2 CLASS="section"><A NAME="htoc40">A</A>&nbsp;&nbsp;Built-in Modules</H2><!--SEC END -->
<A NAME="sec:modules"></A> <A NAME="sec:modules"></A>
<!--TOC subsection Overview--> <!--TOC subsection Overview-->
<H3 CLASS="subsection"><A NAME="htoc40">A.1</A>&nbsp;&nbsp;Overview</H3><!--SEC END --> <H3 CLASS="subsection"><A NAME="htoc41">A.1</A>&nbsp;&nbsp;Overview</H3><!--SEC END -->
<A NAME="sec:modoverview"></A> <A NAME="sec:modoverview"></A>
@ -1500,7 +1605,7 @@ XMPP compliancy.<BR>
<BR> <BR>
<!--TOC subsection Common Options--> <!--TOC subsection Common Options-->
<H3 CLASS="subsection"><A NAME="htoc41">A.2</A>&nbsp;&nbsp;Common Options</H3><!--SEC END --> <H3 CLASS="subsection"><A NAME="htoc42">A.2</A>&nbsp;&nbsp;Common Options</H3><!--SEC END -->
<A NAME="sec:modcommonopts"></A> <A NAME="sec:modcommonopts"></A>
The following options are used by many modules. Therefore, they are described in The following options are used by many modules. Therefore, they are described in
@ -1508,7 +1613,7 @@ this separate section.<BR>
<BR> <BR>
<!--TOC subsubsection <TT>iqdisc</TT>--> <!--TOC subsubsection <TT>iqdisc</TT>-->
<H4 CLASS="subsubsection"><A NAME="htoc42">A.2.1</A>&nbsp;&nbsp;<TT>iqdisc</TT></H4><!--SEC END --> <H4 CLASS="subsubsection"><A NAME="htoc43">A.2.1</A>&nbsp;&nbsp;<TT>iqdisc</TT></H4><!--SEC END -->
<A NAME="sec:modiqdiscoption"></A> <A NAME="sec:modiqdiscoption"></A>
@ -1542,7 +1647,7 @@ Example:
</PRE> </PRE>
<!--TOC subsubsection <TT>hosts</TT>--> <!--TOC subsubsection <TT>hosts</TT>-->
<H4 CLASS="subsubsection"><A NAME="htoc43">A.2.2</A>&nbsp;&nbsp;<TT>hosts</TT></H4><!--SEC END --> <H4 CLASS="subsubsection"><A NAME="htoc44">A.2.2</A>&nbsp;&nbsp;<TT>hosts</TT></H4><!--SEC END -->
<A NAME="sec:modhostsoption"></A> <A NAME="sec:modhostsoption"></A>
@ -1581,7 +1686,7 @@ Serving the echo module on one domain:
</PRE></UL> </PRE></UL>
<!--TOC subsection <TT>mod_announce</TT>--> <!--TOC subsection <TT>mod_announce</TT>-->
<H3 CLASS="subsection"><A NAME="htoc44">A.3</A>&nbsp;&nbsp;<TT>mod_announce</TT></H3><!--SEC END --> <H3 CLASS="subsection"><A NAME="htoc45">A.3</A>&nbsp;&nbsp;<TT>mod_announce</TT></H3><!--SEC END -->
<A NAME="sec:modannounce"></A> <A NAME="sec:modannounce"></A>
@ -1597,7 +1702,7 @@ hosts:
to several resources, only the resource with the highest priority will receive 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 the message. If the registered user is not connected, the message will be
stored offline in assumption that offline storage stored offline in assumption that offline storage
(see section&nbsp;<A HREF="#sec:modoffline">??</A>) is enabled. (see section&nbsp;<A HREF="#sec:modoffline">A.10</A>) is enabled.
<DT CLASS="dt-description"><B><TT>example.org/announce/online (example.org/announce/all-hosts/online)</TT></B><DD CLASS="dd-description">The <DT CLASS="dt-description"><B><TT>example.org/announce/online (example.org/announce/all-hosts/online)</TT></B><DD CLASS="dd-description">The
message is sent to all connected users. If the user is online and connected message is sent to all connected users. If the user is online and connected
to several resources, all resources will receive the message. to several resources, all resources will receive the message.
@ -1647,7 +1752,7 @@ Only administrators can send announcements:
</PRE></UL> </PRE></UL>
<!--TOC subsection <TT>mod_disco</TT>--> <!--TOC subsection <TT>mod_disco</TT>-->
<H3 CLASS="subsection"><A NAME="htoc45">A.4</A>&nbsp;&nbsp;<TT>mod_disco</TT></H3><!--SEC END --> <H3 CLASS="subsection"><A NAME="htoc46">A.4</A>&nbsp;&nbsp;<TT>mod_disco</TT></H3><!--SEC END -->
<A NAME="sec:moddisco"></A> <A NAME="sec:moddisco"></A>
@ -1664,7 +1769,7 @@ Options:
<B><TT>iqdisc</TT></B><DD CLASS="dd-description"> This specifies <B><TT>iqdisc</TT></B><DD CLASS="dd-description"> This specifies
the processing discipline for Service Discovery (<TT>http://jabber.org/protocol/disco#items</TT> and the processing discipline for Service Discovery (<TT>http://jabber.org/protocol/disco#items</TT> and
<TT>http://jabber.org/protocol/disco#info</TT>) IQ queries <TT>http://jabber.org/protocol/disco#info</TT>) IQ queries
(see section&nbsp;<A HREF="#sec:modiqdiscoption">??</A>). (see section&nbsp;<A HREF="#sec:modiqdiscoption">A.2.1</A>).
<DT CLASS="dt-description"><B><TT>extra_domains</TT></B><DD CLASS="dd-description"> With this option, <DT CLASS="dt-description"><B><TT>extra_domains</TT></B><DD CLASS="dd-description"> With this option,
extra domains can be added to the Service Discovery item list. extra domains can be added to the Service Discovery item list.
</DL> </DL>
@ -1699,7 +1804,7 @@ To serve a link to the Jabber User Directory on <TT>jabber.org</TT>:
</PRE></UL> </PRE></UL>
<!--TOC subsection <TT>mod_echo</TT>--> <!--TOC subsection <TT>mod_echo</TT>-->
<H3 CLASS="subsection"><A NAME="htoc46">A.5</A>&nbsp;&nbsp;<TT>mod_echo</TT></H3><!--SEC END --> <H3 CLASS="subsection"><A NAME="htoc47">A.5</A>&nbsp;&nbsp;<TT>mod_echo</TT></H3><!--SEC END -->
<A NAME="sec:modecho"></A> <A NAME="sec:modecho"></A>
@ -1711,7 +1816,7 @@ Options:
<DL CLASS="description" COMPACT=compact><DT CLASS="dt-description"> <DL CLASS="description" COMPACT=compact><DT CLASS="dt-description">
<B><TT>hosts</TT></B><DD CLASS="dd-description"> This option defines the hostnames of the <B><TT>hosts</TT></B><DD CLASS="dd-description"> This option defines the hostnames of the
service (see section&nbsp;<A HREF="#sec:modhostsoption">??</A>). If neither <TT>hosts</TT> nor service (see section&nbsp;<A HREF="#sec:modhostsoption">A.2.2</A>). If neither <TT>hosts</TT> nor
the old <TT>host</TT> is present, the prefix &#8220;<TT>echo.</TT>&#8221; is added to all the old <TT>host</TT> is present, the prefix &#8220;<TT>echo.</TT>&#8221; is added to all
<TT>ejabberd</TT> hostnames. <TT>ejabberd</TT> hostnames.
@ -1728,11 +1833,11 @@ Mirror, mirror, on the wall, who is the most beautiful
... ...
]}. ]}.
</PRE><LI CLASS="li-itemize">If you still do not understand the inner workings of <TT>mod_echo</TT>, </PRE><LI CLASS="li-itemize">If you still do not understand the inner workings of <TT>mod_echo</TT>,
you can find a few more examples in section&nbsp;<A HREF="#sec:modhostsoption">??</A>. you can find a few more examples in section&nbsp;<A HREF="#sec:modhostsoption">A.2.2</A>.
</UL> </UL>
<!--TOC subsection <TT>mod_irc</TT>--> <!--TOC subsection <TT>mod_irc</TT>-->
<H3 CLASS="subsection"><A NAME="htoc47">A.6</A>&nbsp;&nbsp;<TT>mod_irc</TT></H3><!--SEC END --> <H3 CLASS="subsection"><A NAME="htoc48">A.6</A>&nbsp;&nbsp;<TT>mod_irc</TT></H3><!--SEC END -->
<A NAME="sec:modirc"></A> <A NAME="sec:modirc"></A>
@ -1761,7 +1866,7 @@ Options:
<DL CLASS="description" COMPACT=compact><DT CLASS="dt-description"> <DL CLASS="description" COMPACT=compact><DT CLASS="dt-description">
<B><TT>hosts</TT></B><DD CLASS="dd-description"> This option defines the hostnames of the <B><TT>hosts</TT></B><DD CLASS="dd-description"> This option defines the hostnames of the
service (see section&nbsp;<A HREF="#sec:modhostsoption">??</A>). If neither <TT>hosts</TT> nor service (see section&nbsp;<A HREF="#sec:modhostsoption">A.2.2</A>). If neither <TT>hosts</TT> nor
the old <TT>host</TT> is present, the prefix &#8220;<TT>irc.</TT>&#8221; is added to all the old <TT>host</TT> is present, the prefix &#8220;<TT>irc.</TT>&#8221; is added to all
<TT>ejabberd</TT> hostnames. <TT>ejabberd</TT> hostnames.
@ -1802,7 +1907,7 @@ In the first example, the IRC transport is available on (all) your
</PRE></UL> </PRE></UL>
<!--TOC subsection <TT>mod_last</TT>--> <!--TOC subsection <TT>mod_last</TT>-->
<H3 CLASS="subsection"><A NAME="htoc48">A.7</A>&nbsp;&nbsp;<TT>mod_last</TT></H3><!--SEC END --> <H3 CLASS="subsection"><A NAME="htoc49">A.7</A>&nbsp;&nbsp;<TT>mod_last</TT></H3><!--SEC END -->
<A NAME="sec:modlast"></A> <A NAME="sec:modlast"></A>
@ -1815,11 +1920,11 @@ Options:
<DL CLASS="description" COMPACT=compact><DT CLASS="dt-description"> <DL CLASS="description" COMPACT=compact><DT CLASS="dt-description">
<B><TT>iqdisc</TT></B><DD CLASS="dd-description"> This specifies <B><TT>iqdisc</TT></B><DD CLASS="dd-description"> This specifies
the processing discipline for Last activity (<TT>jabber:iq:last</TT>) IQ queries the processing discipline for Last activity (<TT>jabber:iq:last</TT>) IQ queries
(see section&nbsp;<A HREF="#sec:modiqdiscoption">??</A>). (see section&nbsp;<A HREF="#sec:modiqdiscoption">A.2.1</A>).
</DL> </DL>
<!--TOC subsection <TT>mod_muc</TT>--> <!--TOC subsection <TT>mod_muc</TT>-->
<H3 CLASS="subsection"><A NAME="htoc49">A.8</A>&nbsp;&nbsp;<TT>mod_muc</TT></H3><!--SEC END --> <H3 CLASS="subsection"><A NAME="htoc50">A.8</A>&nbsp;&nbsp;<TT>mod_muc</TT></H3><!--SEC END -->
<A NAME="sec:modmuc"></A> <A NAME="sec:modmuc"></A>
@ -1839,7 +1944,7 @@ Options:
<DL CLASS="description" COMPACT=compact><DT CLASS="dt-description"> <DL CLASS="description" COMPACT=compact><DT CLASS="dt-description">
<B><TT>hosts</TT></B><DD CLASS="dd-description"> This option defines the hostnames of the <B><TT>hosts</TT></B><DD CLASS="dd-description"> This option defines the hostnames of the
service (see section&nbsp;<A HREF="#sec:modhostsoption">??</A>). If neither <TT>hosts</TT> nor service (see section&nbsp;<A HREF="#sec:modhostsoption">A.2.2</A>). If neither <TT>hosts</TT> nor
the old <TT>host</TT> is present, the prefix &#8220;<TT>conference.</TT>&#8221; is added to all the old <TT>host</TT> is present, the prefix &#8220;<TT>conference.</TT>&#8221; is added to all
<TT>ejabberd</TT> hostnames. <TT>ejabberd</TT> hostnames.
@ -1909,7 +2014,7 @@ In the first example everyone is allowed to use the Multi-User Chat
</PRE></UL> </PRE></UL>
<!--TOC subsection <TT>mod_muc_log</TT>--> <!--TOC subsection <TT>mod_muc_log</TT>-->
<H3 CLASS="subsection"><A NAME="htoc50">A.9</A>&nbsp;&nbsp;<TT>mod_muc_log</TT></H3><!--SEC END --> <H3 CLASS="subsection"><A NAME="htoc51">A.9</A>&nbsp;&nbsp;<TT>mod_muc_log</TT></H3><!--SEC END -->
<A NAME="sec:modmuclog"></A> <A NAME="sec:modmuclog"></A>
@ -1981,7 +2086,7 @@ Example configuration:
</PRE> </PRE>
<!--TOC subsection <TT>mod_offline</TT>--> <!--TOC subsection <TT>mod_offline</TT>-->
<H3 CLASS="subsection"><A NAME="htoc51">A.10</A>&nbsp;&nbsp;<TT>mod_offline</TT></H3><!--SEC END --> <H3 CLASS="subsection"><A NAME="htoc52">A.10</A>&nbsp;&nbsp;<TT>mod_offline</TT></H3><!--SEC END -->
<A NAME="sec:modoffline"></A> <A NAME="sec:modoffline"></A>
@ -1989,11 +2094,11 @@ 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 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 online again. Thus it is very similar to how email works. Note that
<TT>ejabberdctl</TT> has a command to delete expired messages <TT>ejabberdctl</TT> has a command to delete expired messages
(see section&nbsp;<A HREF="#sec:ejabberdctl">??</A>).<BR> (see section&nbsp;<A HREF="#sec:ejabberdctl">3.4.2</A>).<BR>
<BR> <BR>
<!--TOC subsection <TT>mod_privacy</TT>--> <!--TOC subsection <TT>mod_privacy</TT>-->
<H3 CLASS="subsection"><A NAME="htoc52">A.11</A>&nbsp;&nbsp;<TT>mod_privacy</TT></H3><!--SEC END --> <H3 CLASS="subsection"><A NAME="htoc53">A.11</A>&nbsp;&nbsp;<TT>mod_privacy</TT></H3><!--SEC END -->
<A NAME="sec:modprivacy"></A> <A NAME="sec:modprivacy"></A>
@ -2024,11 +2129,11 @@ Options:
<DL CLASS="description" COMPACT=compact><DT CLASS="dt-description"> <DL CLASS="description" COMPACT=compact><DT CLASS="dt-description">
<B><TT>iqdisc</TT></B><DD CLASS="dd-description"> This specifies <B><TT>iqdisc</TT></B><DD CLASS="dd-description"> This specifies
the processing discipline for Blocking Communication (<TT>jabber:iq:privacy</TT>) IQ queries the processing discipline for Blocking Communication (<TT>jabber:iq:privacy</TT>) IQ queries
(see section&nbsp;<A HREF="#sec:modiqdiscoption">??</A>). (see section&nbsp;<A HREF="#sec:modiqdiscoption">A.2.1</A>).
</DL> </DL>
<!--TOC subsection <TT>mod_private</TT>--> <!--TOC subsection <TT>mod_private</TT>-->
<H3 CLASS="subsection"><A NAME="htoc53">A.12</A>&nbsp;&nbsp;<TT>mod_private</TT></H3><!--SEC END --> <H3 CLASS="subsection"><A NAME="htoc54">A.12</A>&nbsp;&nbsp;<TT>mod_private</TT></H3><!--SEC END -->
<A NAME="sec:modprivate"></A> <A NAME="sec:modprivate"></A>
@ -2043,11 +2148,11 @@ Options:
<DL CLASS="description" COMPACT=compact><DT CLASS="dt-description"> <DL CLASS="description" COMPACT=compact><DT CLASS="dt-description">
<B><TT>iqdisc</TT></B><DD CLASS="dd-description"> This specifies <B><TT>iqdisc</TT></B><DD CLASS="dd-description"> This specifies
the processing discipline for Private XML Storage (<TT>jabber:iq:private</TT>) IQ queries the processing discipline for Private XML Storage (<TT>jabber:iq:private</TT>) IQ queries
(see section&nbsp;<A HREF="#sec:modiqdiscoption">??</A>). (see section&nbsp;<A HREF="#sec:modiqdiscoption">A.2.1</A>).
</DL> </DL>
<!--TOC subsection <TT>mod_pubsub</TT>--> <!--TOC subsection <TT>mod_pubsub</TT>-->
<H3 CLASS="subsection"><A NAME="htoc54">A.13</A>&nbsp;&nbsp;<TT>mod_pubsub</TT></H3><!--SEC END --> <H3 CLASS="subsection"><A NAME="htoc55">A.13</A>&nbsp;&nbsp;<TT>mod_pubsub</TT></H3><!--SEC END -->
<A NAME="sec:modpubsub"></A> <A NAME="sec:modpubsub"></A>
@ -2077,7 +2182,7 @@ Options:
<DL CLASS="description" COMPACT=compact><DT CLASS="dt-description"> <DL CLASS="description" COMPACT=compact><DT CLASS="dt-description">
<B><TT>hosts</TT></B><DD CLASS="dd-description"> This option defines the hostnames of the <B><TT>hosts</TT></B><DD CLASS="dd-description"> This option defines the hostnames of the
service (see section&nbsp;<A HREF="#sec:modhostsoption">??</A>). If neither <TT>hosts</TT> nor service (see section&nbsp;<A HREF="#sec:modhostsoption">A.2.2</A>). If neither <TT>hosts</TT> nor
the old <TT>host</TT> is present, the prefix &#8220;<TT>pubsub.</TT>&#8221; is added to all the old <TT>host</TT> is present, the prefix &#8220;<TT>pubsub.</TT>&#8221; is added to all
<TT>ejabberd</TT> hostnames. <TT>ejabberd</TT> hostnames.
@ -2096,7 +2201,7 @@ Example:
</PRE> </PRE>
<!--TOC subsection <TT>mod_register</TT>--> <!--TOC subsection <TT>mod_register</TT>-->
<H3 CLASS="subsection"><A NAME="htoc55">A.14</A>&nbsp;&nbsp;<TT>mod_register</TT></H3><!--SEC END --> <H3 CLASS="subsection"><A NAME="htoc56">A.14</A>&nbsp;&nbsp;<TT>mod_register</TT></H3><!--SEC END -->
<A NAME="sec:modregister"></A> <A NAME="sec:modregister"></A>
@ -2115,7 +2220,7 @@ Options:
restrictions by default). restrictions by default).
<DT CLASS="dt-description"><B><TT>iqdisc</TT></B><DD CLASS="dd-description"> This specifies <DT CLASS="dt-description"><B><TT>iqdisc</TT></B><DD CLASS="dd-description"> This specifies
the processing discipline for In-Band Registration (<TT>jabber:iq:register</TT>) IQ queries the processing discipline for In-Band Registration (<TT>jabber:iq:register</TT>) IQ queries
(see section&nbsp;<A HREF="#sec:modiqdiscoption">??</A>). (see section&nbsp;<A HREF="#sec:modiqdiscoption">A.2.1</A>).
</DL> </DL>
Examples: Examples:
<UL CLASS="itemize"><LI CLASS="li-itemize"> <UL CLASS="itemize"><LI CLASS="li-itemize">
@ -2153,7 +2258,7 @@ Next example prohibits the registration of too short account names and of
</PRE></UL> </PRE></UL>
<!--TOC subsection <TT>mod_roster</TT>--> <!--TOC subsection <TT>mod_roster</TT>-->
<H3 CLASS="subsection"><A NAME="htoc56">A.15</A>&nbsp;&nbsp;<TT>mod_roster</TT></H3><!--SEC END --> <H3 CLASS="subsection"><A NAME="htoc57">A.15</A>&nbsp;&nbsp;<TT>mod_roster</TT></H3><!--SEC END -->
<A NAME="sec:modroster"></A> <A NAME="sec:modroster"></A>
@ -2163,11 +2268,11 @@ Options:
<DL CLASS="description" COMPACT=compact><DT CLASS="dt-description"> <DL CLASS="description" COMPACT=compact><DT CLASS="dt-description">
<B><TT>iqdisc</TT></B><DD CLASS="dd-description"> This specifies <B><TT>iqdisc</TT></B><DD CLASS="dd-description"> This specifies
the processing discipline for Roster Management (<TT>jabber:iq:roster</TT>) IQ queries the processing discipline for Roster Management (<TT>jabber:iq:roster</TT>) IQ queries
(see section&nbsp;<A HREF="#sec:modiqdiscoption">??</A>). (see section&nbsp;<A HREF="#sec:modiqdiscoption">A.2.1</A>).
</DL> </DL>
<!--TOC subsection <TT>mod_service_log</TT>--> <!--TOC subsection <TT>mod_service_log</TT>-->
<H3 CLASS="subsection"><A NAME="htoc57">A.16</A>&nbsp;&nbsp;<TT>mod_service_log</TT></H3><!--SEC END --> <H3 CLASS="subsection"><A NAME="htoc58">A.16</A>&nbsp;&nbsp;<TT>mod_service_log</TT></H3><!--SEC END -->
<A NAME="sec:modservicelog"></A> <A NAME="sec:modservicelog"></A>
@ -2207,7 +2312,7 @@ To log all end user packets to the Bandersnatch service running on
</PRE></UL> </PRE></UL>
<!--TOC subsection <TT>mod_shared_roster</TT>--> <!--TOC subsection <TT>mod_shared_roster</TT>-->
<H3 CLASS="subsection"><A NAME="htoc58">A.17</A>&nbsp;&nbsp;<TT>mod_shared_roster</TT></H3><!--SEC END --> <H3 CLASS="subsection"><A NAME="htoc59">A.17</A>&nbsp;&nbsp;<TT>mod_shared_roster</TT></H3><!--SEC END -->
<A NAME="sec:modsharedroster"></A> <A NAME="sec:modsharedroster"></A>
@ -2334,7 +2439,7 @@ Take the case of a computer club that wants all its members seeing each
</UL> </UL>
<!--TOC subsection <TT>mod_stats</TT>--> <!--TOC subsection <TT>mod_stats</TT>-->
<H3 CLASS="subsection"><A NAME="htoc59">A.18</A>&nbsp;&nbsp;<TT>mod_stats</TT></H3><!--SEC END --> <H3 CLASS="subsection"><A NAME="htoc60">A.18</A>&nbsp;&nbsp;<TT>mod_stats</TT></H3><!--SEC END -->
<A NAME="sec:modstats"></A> <A NAME="sec:modstats"></A>
@ -2350,7 +2455,7 @@ Options:
<DL CLASS="description" COMPACT=compact><DT CLASS="dt-description"> <DL CLASS="description" COMPACT=compact><DT CLASS="dt-description">
<B><TT>iqdisc</TT></B><DD CLASS="dd-description"> This specifies <B><TT>iqdisc</TT></B><DD CLASS="dd-description"> This specifies
the processing discipline for Statistics Gathering (<TT>http://jabber.org/protocol/stats</TT>) IQ queries the processing discipline for Statistics Gathering (<TT>http://jabber.org/protocol/stats</TT>) IQ queries
(see section&nbsp;<A HREF="#sec:modiqdiscoption">??</A>). (see section&nbsp;<A HREF="#sec:modiqdiscoption">A.2.1</A>).
</DL> </DL>
As there are only a small amount of clients (for example As there are only a small amount of clients (for example
<A HREF="http://tkabber.jabber.ru/">Tkabber</A>) and software libraries with <A HREF="http://tkabber.jabber.ru/">Tkabber</A>) and software libraries with
@ -2376,7 +2481,7 @@ You can request the number of online users on the current virtual host
</PRE></UL> </PRE></UL>
<!--TOC subsection <TT>mod_time</TT>--> <!--TOC subsection <TT>mod_time</TT>-->
<H3 CLASS="subsection"><A NAME="htoc60">A.19</A>&nbsp;&nbsp;<TT>mod_time</TT></H3><!--SEC END --> <H3 CLASS="subsection"><A NAME="htoc61">A.19</A>&nbsp;&nbsp;<TT>mod_time</TT></H3><!--SEC END -->
<A NAME="sec:modtime"></A> <A NAME="sec:modtime"></A>
@ -2387,11 +2492,11 @@ Options:
<DL CLASS="description" COMPACT=compact><DT CLASS="dt-description"> <DL CLASS="description" COMPACT=compact><DT CLASS="dt-description">
<B><TT>iqdisc</TT></B><DD CLASS="dd-description"> This specifies <B><TT>iqdisc</TT></B><DD CLASS="dd-description"> This specifies
the processing discipline for Entity Time (<TT>jabber:iq:time</TT>) IQ queries the processing discipline for Entity Time (<TT>jabber:iq:time</TT>) IQ queries
(see section&nbsp;<A HREF="#sec:modiqdiscoption">??</A>). (see section&nbsp;<A HREF="#sec:modiqdiscoption">A.2.1</A>).
</DL> </DL>
<!--TOC subsection <TT>mod_vcard</TT>--> <!--TOC subsection <TT>mod_vcard</TT>-->
<H3 CLASS="subsection"><A NAME="htoc61">A.20</A>&nbsp;&nbsp;<TT>mod_vcard</TT></H3><!--SEC END --> <H3 CLASS="subsection"><A NAME="htoc62">A.20</A>&nbsp;&nbsp;<TT>mod_vcard</TT></H3><!--SEC END -->
<A NAME="sec:modvcard"></A> <A NAME="sec:modvcard"></A>
@ -2404,13 +2509,13 @@ Options:
<DL CLASS="description" COMPACT=compact><DT CLASS="dt-description"> <DL CLASS="description" COMPACT=compact><DT CLASS="dt-description">
<B><TT>hosts</TT></B><DD CLASS="dd-description"> This option defines the hostnames of the <B><TT>hosts</TT></B><DD CLASS="dd-description"> This option defines the hostnames of the
service (see section&nbsp;<A HREF="#sec:modhostsoption">??</A>). If neither <TT>hosts</TT> nor service (see section&nbsp;<A HREF="#sec:modhostsoption">A.2.2</A>). If neither <TT>hosts</TT> nor
the old <TT>host</TT> is present, the prefix &#8220;<TT>vjud.</TT>&#8221; is added to all the old <TT>host</TT> is present, the prefix &#8220;<TT>vjud.</TT>&#8221; is added to all
<TT>ejabberd</TT> hostnames. <TT>ejabberd</TT> hostnames.
<DT CLASS="dt-description"><B><TT>iqdisc</TT></B><DD CLASS="dd-description"> This specifies <DT CLASS="dt-description"><B><TT>iqdisc</TT></B><DD CLASS="dd-description"> This specifies
the processing discipline for <TT>vcard-temp</TT> IQ queries the processing discipline for <TT>vcard-temp</TT> IQ queries
(see section&nbsp;<A HREF="#sec:modiqdiscoption">??</A>). (see section&nbsp;<A HREF="#sec:modiqdiscoption">A.2.1</A>).
<DT CLASS="dt-description"><B><TT>search</TT></B><DD CLASS="dd-description"> This option specifies whether the search <DT CLASS="dt-description"><B><TT>search</TT></B><DD CLASS="dd-description"> This option specifies whether the search
functionality is enabled (value: <TT>true</TT>) or disabled functionality is enabled (value: <TT>true</TT>) or disabled
(value: <TT>false</TT>). If disabled, the option <TT>hosts</TT> will be (value: <TT>false</TT>). If disabled, the option <TT>hosts</TT> will be
@ -2457,7 +2562,7 @@ In this first situation, search results are limited to twenty items,
</PRE></UL> </PRE></UL>
<!--TOC subsection <TT>mod_version</TT>--> <!--TOC subsection <TT>mod_version</TT>-->
<H3 CLASS="subsection"><A NAME="htoc62">A.21</A>&nbsp;&nbsp;<TT>mod_version</TT></H3><!--SEC END --> <H3 CLASS="subsection"><A NAME="htoc63">A.21</A>&nbsp;&nbsp;<TT>mod_version</TT></H3><!--SEC END -->
<A NAME="sec:modversion"></A> <A NAME="sec:modversion"></A>
@ -2468,16 +2573,16 @@ Options:
<DL CLASS="description" COMPACT=compact><DT CLASS="dt-description"> <DL CLASS="description" COMPACT=compact><DT CLASS="dt-description">
<B><TT>iqdisc</TT></B><DD CLASS="dd-description"> This specifies <B><TT>iqdisc</TT></B><DD CLASS="dd-description"> This specifies
the processing discipline for Software Version (<TT>jabber:iq:version</TT>) IQ queries the processing discipline for Software Version (<TT>jabber:iq:version</TT>) IQ queries
(see section&nbsp;<A HREF="#sec:modiqdiscoption">??</A>). (see section&nbsp;<A HREF="#sec:modiqdiscoption">A.2.1</A>).
</DL> </DL>
<!--TOC section Internationalization and Localization--> <!--TOC section Internationalization and Localization-->
<H2 CLASS="section"><A NAME="htoc63">B</A>&nbsp;&nbsp;Internationalization and Localization</H2><!--SEC END --> <H2 CLASS="section"><A NAME="htoc64">B</A>&nbsp;&nbsp;Internationalization and Localization</H2><!--SEC END -->
<A NAME="sec:i18nl10n"></A> <A NAME="sec:i18nl10n"></A>
All built-in modules support the <TT>xml:lang</TT> attribute inside IQ queries. All built-in modules support the <TT>xml:lang</TT> attribute inside IQ queries.
Figure&nbsp;<A HREF="#fig:discorus">??</A>, for example, shows the reply to the following query: Figure&nbsp;<A HREF="#fig:discorus">2</A>, for example, shows the reply to the following query:
<PRE CLASS="verbatim"> <PRE CLASS="verbatim">
&lt;iq id='5' &lt;iq id='5'
to='example.org' to='example.org'
@ -2499,7 +2604,7 @@ Figure&nbsp;<A HREF="#fig:discorus">??</A>, for example, shows the reply to the
<A NAME="fig:discorus"></A> <A NAME="fig:discorus"></A>
<DIV CLASS="center"><HR WIDTH="80%" SIZE=2></DIV></DIV></BLOCKQUOTE> <DIV CLASS="center"><HR WIDTH="80%" SIZE=2></DIV></DIV></BLOCKQUOTE>
The web interface also supports the <CODE>Accept-Language</CODE> HTTP header (compare The web interface also supports the <CODE>Accept-Language</CODE> HTTP header (compare
figure&nbsp;<A HREF="#fig:webadmmainru">??</A> with figure&nbsp;<A HREF="#fig:webadmmain">??</A>) figure&nbsp;<A HREF="#fig:webadmmainru">3</A> with figure&nbsp;<A HREF="#fig:webadmmain">1</A>)
<BLOCKQUOTE CLASS="figure"><DIV CLASS="center"><DIV CLASS="center"><HR WIDTH="80%" SIZE=2></DIV> <BLOCKQUOTE CLASS="figure"><DIV CLASS="center"><DIV CLASS="center"><HR WIDTH="80%" SIZE=2></DIV>
<IMG SRC="webadmmainru.png"> <IMG SRC="webadmmainru.png">
@ -2515,13 +2620,13 @@ figure&nbsp;<A HREF="#fig:webadmmainru">??</A> with figure&nbsp;<A HREF="#fig:we
<DIV CLASS="center"><HR WIDTH="80%" SIZE=2></DIV></DIV></BLOCKQUOTE> <DIV CLASS="center"><HR WIDTH="80%" SIZE=2></DIV></DIV></BLOCKQUOTE>
<!--TOC section Release Notes--> <!--TOC section Release Notes-->
<H2 CLASS="section"><A NAME="htoc64">C</A>&nbsp;&nbsp;Release Notes</H2><!--SEC END --> <H2 CLASS="section"><A NAME="htoc65">C</A>&nbsp;&nbsp;Release Notes</H2><!--SEC END -->
<A NAME="sec:releasenotes"></A> <A NAME="sec:releasenotes"></A>
<!--TOC subsection ejabberd 0.9--> <!--TOC subsection ejabberd 0.9-->
<H3 CLASS="subsection"><A NAME="htoc65">C.1</A>&nbsp;&nbsp;ejabberd 0.9</H3><!--SEC END --> <H3 CLASS="subsection"><A NAME="htoc66">C.1</A>&nbsp;&nbsp;ejabberd 0.9</H3><!--SEC END -->
<PRE CLASS="verbatim"> <PRE CLASS="verbatim">
Release notes Release notes
@ -2615,7 +2720,7 @@ Bugfixes
</PRE> </PRE>
<!--TOC subsection ejabberd 0.9.1--> <!--TOC subsection ejabberd 0.9.1-->
<H3 CLASS="subsection"><A NAME="htoc66">C.2</A>&nbsp;&nbsp;ejabberd 0.9.1</H3><!--SEC END --> <H3 CLASS="subsection"><A NAME="htoc67">C.2</A>&nbsp;&nbsp;ejabberd 0.9.1</H3><!--SEC END -->
<PRE CLASS="verbatim"> <PRE CLASS="verbatim">
Release notes Release notes
@ -2683,7 +2788,7 @@ Bugfixes
</PRE> </PRE>
<!--TOC subsection ejabberd 0.9.8--> <!--TOC subsection ejabberd 0.9.8-->
<H3 CLASS="subsection"><A NAME="htoc67">C.3</A>&nbsp;&nbsp;ejabberd 0.9.8</H3><!--SEC END --> <H3 CLASS="subsection"><A NAME="htoc68">C.3</A>&nbsp;&nbsp;ejabberd 0.9.8</H3><!--SEC END -->
<PRE CLASS="verbatim"> <PRE CLASS="verbatim">
Release notes Release notes
@ -2788,7 +2893,7 @@ END
</PRE> </PRE>
<!--TOC subsection ejabberd 1.0.0--> <!--TOC subsection ejabberd 1.0.0-->
<H3 CLASS="subsection"><A NAME="htoc68">C.4</A>&nbsp;&nbsp;ejabberd 1.0.0</H3><!--SEC END --> <H3 CLASS="subsection"><A NAME="htoc69">C.4</A>&nbsp;&nbsp;ejabberd 1.0.0</H3><!--SEC END -->
<PRE CLASS="verbatim"> <PRE CLASS="verbatim">
Release Notes Release Notes
@ -2914,7 +3019,7 @@ END
</PRE> </PRE>
<!--TOC subsection ejabberd 1.1.0--> <!--TOC subsection ejabberd 1.1.0-->
<H3 CLASS="subsection"><A NAME="htoc69">C.5</A>&nbsp;&nbsp;ejabberd 1.1.0</H3><!--SEC END --> <H3 CLASS="subsection"><A NAME="htoc70">C.5</A>&nbsp;&nbsp;ejabberd 1.1.0</H3><!--SEC END -->
<PRE CLASS="verbatim"> <PRE CLASS="verbatim">
Release Notes Release Notes
@ -3035,7 +3140,7 @@ END
</PRE> </PRE>
<!--TOC subsection ejabberd 1.1.1--> <!--TOC subsection ejabberd 1.1.1-->
<H3 CLASS="subsection"><A NAME="htoc70">C.6</A>&nbsp;&nbsp;ejabberd 1.1.1</H3><!--SEC END --> <H3 CLASS="subsection"><A NAME="htoc71">C.6</A>&nbsp;&nbsp;ejabberd 1.1.1</H3><!--SEC END -->
<PRE CLASS="verbatim"> <PRE CLASS="verbatim">
Release Notes Release Notes
@ -3160,7 +3265,7 @@ END
</PRE> </PRE>
<!--TOC section Acknowledgements--> <!--TOC section Acknowledgements-->
<H2 CLASS="section"><A NAME="htoc71">D</A>&nbsp;&nbsp;Acknowledgements</H2><!--SEC END --> <H2 CLASS="section"><A NAME="htoc72">D</A>&nbsp;&nbsp;Acknowledgements</H2><!--SEC END -->
<A NAME="sec:acknowledgements"></A> <A NAME="sec:acknowledgements"></A>

View File

@ -505,6 +505,19 @@ Examples:
\end{verbatim} \end{verbatim}
\end{itemize} \end{itemize}
\subsubsection{Limitation of the number of opened sessions}
\label{sec:configmaxsessions}
\ind{options!max\_user\_sessions}
This option specifies the maximum number of sessions (authenticated
connections) per user. If a user tries to open more than the maximum number of
allowed sessions, with different resources, the first opened session will be
disconnected. The error ``\term{session replaced}'' is send to the
disconnected session. This value is either a number or \term{infinity}. For
example \verb|{max\_user\_sessions, 10}|. The default value is \term{10}.
This option can be define per virtual host. See section~\ref{sec:configvirtualhost}.
\subsubsection{Listened Sockets} \subsubsection{Listened Sockets}
\label{sec:configlistened} \label{sec:configlistened}
\ind{options!listen} \ind{options!listen}
@ -526,9 +539,9 @@ Currently next modules are implemented:
\begin{tabular}{|l|l|p{87mm}|} \begin{tabular}{|l|l|p{87mm}|}
\hline \texttt{ejabberd\_c2s}& Description& Handles c2s connections.\\ \hline \texttt{ejabberd\_c2s}& Description& Handles c2s connections.\\
\cline{2-3} & Options& \texttt{access}, \texttt{certfile}, \texttt{inet6}, \cline{2-3} & Options& \texttt{access}, \texttt{certfile}, \texttt{inet6},
\texttt{ip}, \texttt{max\_stanza\_size}, \texttt{max\_user\_sessions}, \texttt{ip}, \texttt{max\_stanza\_size}, \texttt{shaper}, \texttt{ssl},
\texttt{shaper}, \texttt{ssl}, \texttt{tls}, \texttt{starttls}, \texttt{tls}, \texttt{starttls}, \texttt{starttls\_required},
\texttt{starttls\_required}, \texttt{zlib}\\ \texttt{zlib}\\
\hline \texttt{ejabberd\_s2s\_in}& Description& Handles incoming s2s \hline \texttt{ejabberd\_s2s\_in}& Description& Handles incoming s2s
connections.\\ connections.\\
\cline{2-3} & Options& \texttt{inet6}, \texttt{ip}, \cline{2-3} & Options& \texttt{inet6}, \texttt{ip},
@ -574,16 +587,6 @@ The following options are available:
option specifies an approximate maximal size in bytes of XML stanzas. option specifies an approximate maximal size in bytes of XML stanzas.
For example \verb|{max\_stanza\_size, 65536}|. The default value For example \verb|{max\_stanza\_size, 65536}|. The default value
is ``\term{infinity}''. is ``\term{infinity}''.
\titem{\{max\_user\_sessions, Max\}} \ind{options!max\_user\_sessions}This
option specifies the maximum number of sessions (authenticated
connections) per user. If a user tries to open more than the maximum
number of allowed sessions, with different resources, the first opened
session will be disconnected. The error ``\term{session replaced}'' is
send to the disconnected session. This value is either a number or
\term{infinity}. For example \verb|{max\_user\_sessions, 10}|. The
default value is \term{10}.
\titem{\{shaper, <access rule>\}} \ind{options!shaper}This option defines a \titem{\{shaper, <access rule>\}} \ind{options!shaper}This option defines a
shaper for the port (see section~\ref{sec:configshaper}). The default value shaper for the port (see section~\ref{sec:configshaper}). The default value
is ``\term{none}''. is ``\term{none}''.

View File

@ -97,6 +97,9 @@
% Host name: % Host name:
{hosts, ["localhost"]}. {hosts, ["localhost"]}.
%% Define the maximum number of time a single user is allowed to connect:
{max_user_sessions, 10}.
%% Anonymous login support: %% Anonymous login support:
%% auth_method: anonymous %% auth_method: anonymous
%% anonymous_protocol: sasl_anon|login_anon|both %% anonymous_protocol: sasl_anon|login_anon|both
@ -114,7 +117,6 @@
{listen, {listen,
[{5222, ejabberd_c2s, [{access, c2s}, {shaper, c2s_shaper}, [{5222, ejabberd_c2s, [{access, c2s}, {shaper, c2s_shaper},
{max_stanza_size, 65536}, {max_stanza_size, 65536},
{max_user_sessions, 10},
starttls, {certfile, "./ssl.pem"}]}, starttls, {certfile, "./ssl.pem"}]},
{5223, ejabberd_c2s, [{access, c2s}, {5223, ejabberd_c2s, [{access, c2s},
{max_stanza_size, 65536}, {max_stanza_size, 65536},

View File

@ -43,7 +43,7 @@
-record(state, {}). -record(state, {}).
%% default value for the maximum number of user connections %% default value for the maximum number of user connections
-define(MAX_USER_SESSIONS, 10). -define(MAX_USER_SESSIONS, infinity).
%%==================================================================== %%====================================================================
%% API %% API
@ -534,7 +534,7 @@ check_max_sessions(LUser, LServer) ->
SIDs = mnesia:dirty_select( SIDs = mnesia:dirty_select(
session, session,
[{#session{sid = '$1', usr = {LUser, LServer, '_'}, _ = '_'}, [], ['$1']}]), [{#session{sid = '$1', usr = {LUser, LServer, '_'}, _ = '_'}, [], ['$1']}]),
MaxSessions = get_max_user_sessions(), MaxSessions = get_max_user_sessions(LServer),
if length(SIDs) =< MaxSessions -> ok; if length(SIDs) =< MaxSessions -> ok;
true -> {_, Pid} = lists:min(SIDs), true -> {_, Pid} = lists:min(SIDs),
Pid ! replaced Pid ! replaced
@ -544,21 +544,11 @@ check_max_sessions(LUser, LServer) ->
%% Get the user_max_session setting %% Get the user_max_session setting
%% This option defines the max number of time a given users are allowed to %% This option defines the max number of time a given users are allowed to
%% log in %% log in
%% This option is only used on c2s connections %% Defaults to infinity
%% Defaults to 10 get_max_user_sessions(Host) ->
%% Can be set to infinity case ejabberd_config:get_local_option({max_user_sessions, Host}) of
get_max_user_sessions() ->
case ejabberd_config:get_local_option(listen) of
undefined -> ?MAX_USER_SESSIONS; undefined -> ?MAX_USER_SESSIONS;
Listeners -> Max -> Max
case lists:keysearch(ejabberd_c2s, 2, Listeners) of
{value, {_Port, _Method, Opts}} ->
case lists:keysearch(max_user_sessions, 1, Opts) of
{value, {_, Max}} -> Max;
_ -> ?MAX_USER_SESSIONS
end;
_ -> ?MAX_USER_SESSIONS
end
end. end.