From 27a826cfe84b7c0e1afe1a86d6d3f3a66151bf9c Mon Sep 17 00:00:00 2001 From: Alexey Shchepin Date: Tue, 31 Jul 2007 04:13:29 +0000 Subject: [PATCH] * src/ejabberd_config.erl: Added possibility for appending values to config options (thanks to Badlop) * doc/guide.tex: Updated SVN Revision: 845 --- ChangeLog | 6 ++++++ doc/guide.tex | 19 +++++++++++++++++++ src/ejabberd_config.erl | 24 ++++++++++++++++++++---- 3 files changed, 45 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index 56e19a51b..b75e64aa3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2007-07-31 Alexey Shchepin + + * src/ejabberd_config.erl: Added possibility for appending values + to config options (thanks to Badlop) + * doc/guide.tex: Updated + 2007-07-30 Mickael Remond * src/xml.erl: Better escaping management with CDATA. We only add diff --git a/doc/guide.tex b/doc/guide.tex index b5175f93c..dc42f6bc8 100644 --- a/doc/guide.tex +++ b/doc/guide.tex @@ -740,6 +740,25 @@ Examples: \end{verbatim} \end{itemize} +If you want to define more \term{registration\_watchers} or \term{modules} for a virtual host and add them to the defined for all the Jabber server, instead of defining the option name simply as \term{modules} use this: \term{\{add, modules\}}. + +Examples: +\begin{itemize} + \item If you defined two global watchers but on a certain virtual host only Ann should be watcher: +\begin{verbatim} +{registration_watchers, ["tom@example.com", "moe@example.net"]}. + +{host_config, "example.org", [{registration_watchers, ["ann@example.net"]}]}. +\end{verbatim} + +\item If you prefer all three to be registration watchers on that virtual host: +\begin{verbatim} +{registration_watchers, ["tom@example.com", "moe@example.net"]}. + +{host_config, "example.org", [{{add, registration_watchers}, ["ann@example.net"]}]}. +\end{verbatim} +\end{itemize} + \subsubsection{SASL Anonymous and Anonymous Login} \label{saslanonymous} \ind{sasl anonymous}\ind{anonymous login} diff --git a/src/ejabberd_config.erl b/src/ejabberd_config.erl index a44c9378f..a06d4e2bc 100644 --- a/src/ejabberd_config.erl +++ b/src/ejabberd_config.erl @@ -3,12 +3,10 @@ %%% Author : Alexey Shchepin %%% Purpose : Load config file %%% Created : 14 Dec 2002 by Alexey Shchepin -%%% Id : $Id$ %%%---------------------------------------------------------------------- -module(ejabberd_config). -author('alexey@sevcom.net'). --vsn('$Revision$ '). -export([start/0, load_file/1, add_global_option/2, add_local_option/2, @@ -188,8 +186,26 @@ add_option(Opt, Val, State) -> State#state{opts = [#config{key = Opt, value = Val} | State#state.opts]}; local_config -> - State#state{opts = [#local_config{key = Opt, value = Val} | - State#state.opts]} + case Opt of + {{add, OptName}, Host} -> + State#state{opts = compact({OptName, Host}, Val, + State#state.opts, [])}; + _ -> + State#state{opts = [#local_config{key = Opt, value = Val} | + State#state.opts]} + end + end. + +compact(Opt, Val, [], Os) -> + [#local_config{key = Opt, value = Val}] ++ Os; +compact(Opt, Val, [O | Os1], Os2) -> + case O#local_config.key of + Opt -> + Os2 ++ [#local_config{key = Opt, + value = Val++O#local_config.value} + ] ++ Os1; + _ -> + compact(Opt, Val, Os1, Os2++[O]) end.