+2007-07-31 Alexey Shchepin <alexey@sevcom.net>
+
+ * src/ejabberd_config.erl: Added possibility for appending values
+ to config options (thanks to Badlop)
+ * doc/guide.tex: Updated
+
2007-07-30 Mickael Remond <mickael.remond@process-one.net>
* src/xml.erl: Better escaping management with CDATA. We only add
\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}
%%% Author : Alexey Shchepin <alexey@sevcom.net>
%%% Purpose : Load config file
%%% Created : 14 Dec 2002 by Alexey Shchepin <alexey@sevcom.net>
-%%% 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,
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.