From: Badlop Date: Tue, 4 Mar 2008 10:36:57 +0000 (+0000) Subject: * doc/guide.tex: Improve documentation of host_config X-Git-Tag: v2.1.0~64 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=735b34e7b7793342fcde3242196871876c4e1009;p=ejabberd * doc/guide.tex: Improve documentation of host_config add (EJAB-544) * doc/guide.html: Likewise * src/ejabberd.cfg.example: Likewise * src/ejabberd_config.erl: Likewise SVN Revision: 1219 --- diff --git a/ChangeLog b/ChangeLog index c984169b7..872380780 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,11 @@ 2008-03-04 Badlop + * doc/guide.tex: Improve documentation of host_config + add (EJAB-544) + * doc/guide.html: Likewise + * src/ejabberd.cfg.example: Likewise + * src/ejabberd_config.erl: Likewise + * doc/guide.tex: mod_announce recommends, but doesn't require mod_adhoc (thanks to Anastasia Gornostaeva) * doc/guide.html: Likewise diff --git a/doc/guide.html b/doc/guide.html index fc832fb1e..687e18b5f 100644 --- a/doc/guide.html +++ b/doc/guide.html @@ -552,18 +552,16 @@ while domain example.com is using the LDAP servers running on the domai {ldap_rootdn, "dc=localdomain"}, {ldap_rootdn, "dc=example,dc=com"}, {ldap_password, ""}]}. -

If you have several virtual hosts, -and you want to define options such as modules -with values specific for some virtual host, -instead of defining each option with the syntax +

To define specific ejabberd modules in a virtual host, +you can define the global modules option with the common modules, +and later add specific modules to certain virtual hosts. +To accomplish that, instead of defining each option in host_config with the syntax

  {<option-name>, <option-value>}
 

you must use this syntax:

  {{add, <option-name>}, <option-value>}
-

Example: -

+

3.1.3  Listening Ports

The option listen defines for which addresses and ports ejabberd diff --git a/doc/guide.tex b/doc/guide.tex index cfc0eeef8..56a2521e0 100644 --- a/doc/guide.tex +++ b/doc/guide.tex @@ -591,22 +591,20 @@ Examples: \end{verbatim} \end{itemize} -If you have several virtual hosts, -and you want to define options such as \term{modules} -with values specific for some virtual host, -instead of defining each option with the syntax +To define specific ejabberd modules in a virtual host, +you can define the global \term{modules} option with the common modules, +and later add specific modules to certain virtual hosts. +To accomplish that, instead of defining each option in \term{host\_config} with the syntax \begin{verbatim} {, } \end{verbatim} -you must use this syntax: +use this syntax: \begin{verbatim} {{add, }, } \end{verbatim} -Example: -\begin{itemize} - \item In this example three virtual hosts have some similar modules, but there are also - other different modules for some specific virtual hosts: +In this example three virtual hosts have some similar modules, but there are also +other different modules for some specific virtual hosts: \begin{verbatim} % This ejabberd server has three vhosts: {hosts, ["one.example.org", "two.example.org", "three.example.org"]}. @@ -635,7 +633,6 @@ Example: {mod_echo, [{host, "mirror.two.example.org"}]} ]}]}. \end{verbatim} -\end{itemize} \subsection{Listening Ports} \label{listened} diff --git a/src/ejabberd.cfg.example b/src/ejabberd.cfg.example index fd04c163b..575ba386b 100644 --- a/src/ejabberd.cfg.example +++ b/src/ejabberd.cfg.example @@ -341,6 +341,15 @@ %%{acl, test, {user_regexp, "^test"}}. %%{acl, test, {user_glob, "test*"}}. +%% +%% Define specific ACLs in a virtual host. +%% +%%{host_config, "localhost", +%% [ +%% {acl, admin, {user, "bob-local", "localhost"}} +%% ] +%%}. + %%% ============ %%% ACCESS RULES @@ -381,6 +390,16 @@ %% Everybody can create pubsub nodes {access, pubsub_createnode, [{allow, all}]}. +%% +%% Define specific Access rules in a virtual host. +%% +%%{host_config, "localhost", +%% [ +%% {access, c2s, [{allow, admin}, {deny, all}]}, +%% {access, register, [{deny, all}]} +%% ] +%%}. + %%% ================ %%% DEFAULT LANGUAGE @@ -390,6 +409,13 @@ %% {language, "en"}. +%% +%% Set a different language in a virtual host. +%% +%%{host_config, "localhost", +%% [{language, "ru"}] +%%}. + %%% ======= %%% MODULES @@ -448,6 +474,17 @@ {mod_version, []} ]}. +%% +%% Enable modules with custom options in a specific virtual host +%% +%%{host_config, "localhost", +%% [{{add, modules}, +%% [ +%% {mod_echo, [{host, "mirror.localhost"}]} +%% ] +%% } +%% ]}. + %%% $Id$ diff --git a/src/ejabberd_config.erl b/src/ejabberd_config.erl index e78ca3fea..0222cc367 100644 --- a/src/ejabberd_config.erl +++ b/src/ejabberd_config.erl @@ -211,11 +211,16 @@ add_option(Opt, Val, State) -> end end. -compact(Opt, Val, [], Os) -> +compact({OptName, Host} = Opt, Val, [], Os) -> + ?WARNING_MSG("The option '~p' is defined for the host ~p using host_config " + "before the global '~p' option. This host_config option may get overwritten.", [OptName, Host, OptName]), [#local_config{key = Opt, value = Val}] ++ Os; +%% Traverse the list of the options already parsed compact(Opt, Val, [O | Os1], Os2) -> - case O#local_config.key of + case catch O#local_config.key of + %% If the key of a local_config matches the Opt that wants to be added Opt -> + %% Then prepend the new value to the list of old values Os2 ++ [#local_config{key = Opt, value = Val++O#local_config.value} ] ++ Os1;