]> granicus.if.org Git - ejabberd/commitdiff
* doc/guide.tex: Updated
authorAlexey Shchepin <alexey@process-one.net>
Sun, 12 Oct 2003 18:21:16 +0000 (18:21 +0000)
committerAlexey Shchepin <alexey@process-one.net>
Sun, 12 Oct 2003 18:21:16 +0000 (18:21 +0000)
* src/ejabberd_s2s_out.erl: Added support for IPv6 and
"_jabber-server.tcp" lookups

* src/jlib.erl (string_to_jid1): Bugfix

* src/ejabberd_config.erl: Now possible to specify path to config
file in command line

SVN Revision: 149

ChangeLog
doc/guide.html
doc/guide.tex
src/ejabberd.cfg.example
src/ejabberd_config.erl
src/ejabberd_s2s_out.erl
src/jlib.erl

index 610b4307e954b90a5ff616d91a4f91e50995ad37..2162c330ce2fb682041ad5f7de14f514a8436324 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2003-10-12  Alexey Shchepin  <alexey@sevcom.net>
+
+       * doc/guide.tex: Updated
+
+       * src/ejabberd_s2s_out.erl: Added support for IPv6 and
+       "_jabber-server.tcp" lookups
+
+       * src/jlib.erl (string_to_jid1): Bugfix
+
+       * src/ejabberd_config.erl: Now possible to specify path to config
+       file in command line
+
 2003-10-11  Alexey Shchepin  <alexey@sevcom.net>
 
        * doc/guide.tex: Updated
index 1cd15fece99a7b9342dd20eea13751e6e7688239..9bc46851fbcb500f263dd2a16e5a9a0a4ba1e91e 100644 (file)
@@ -113,8 +113,8 @@ server. It is writen mostly in Erlang.<BR>
 <BR>
 The main features of <TT>ejabberd</TT> is:
 <UL><LI>
-Works on most of popular platforms: *nix (tested on Linux and FreeBSD)
- and Win32
+Works on most of popular platforms: *nix (tested on Linux, FreeBSD and
NetBSD) and Win32
 <LI>Distributed: You can run <TT>ejabberd</TT> on a cluster of machines and all of
  them will serve one Jabber domain.
 <LI>Fault-tolerance: You can setup an <TT>ejabberd</TT> cluster so that all the
@@ -247,16 +247,31 @@ Windows distribution of Erlang emulator.<BR>
 <H3><A NAME="htoc10">2.4</A>&nbsp;&nbsp;Starting</H3><!--SEC END -->
 
 <A NAME="sec:starting"></A>
-... To use more than 1024 connections, you will need to set environment
-variable <TT>ERL_MAX_PORTS</TT>:
+To start <TT>ejabberd</TT>, use the following command:
+<PRE>
+erl -name ejabberd -s ejabberd
+</PRE>or
+<PRE>
+erl -sname ejabberd -s ejabberd
+</PRE>In second case Erlang node will be identified using only first part of host
+name, i.&nbsp;e. other Erlang nodes not inside this domain can't contact this node.<BR>
+<BR>
+To specify path to config file, use command like this:
+<PRE>
+erl -sname ejabberd -s ejabberd -ejabberd config \"/etc/ejabberd/ejabberd.cfg\"
+</PRE>
+To use more than 1024 connections, you will need to set environment variable
+<CODE>ERL_MAX_PORTS</CODE>:
 <PRE>
 export ERL_MAX_PORTS=32000
 </PRE>Note that with this value <TT>ejabberd</TT> will use more memory (approximately 6MB
-more)...
+more).<BR>
+<BR>
+To reduce memory usage, you can set environment variable
+<CODE>ERL_FULLSWEEP_AFTER</CODE>:
 <PRE>
-erl -name ejabberd -s ejabberd
-</PRE>
-TBD<BR>
+export ERL_FULLSWEEP_AFTER=0
+</PRE>But in this case <TT>ejabberd</TT> can start to work slower.<BR>
 <BR>
 <!--TOC section Configuration-->
 
@@ -415,18 +430,21 @@ Port number;
 </UL>
 Currently three modules are implemented:
 <DL COMPACT=compact><DT>
-<B><TT>ejabberd_c2s</TT></B><DD> This module serves C2S connections.<BR>
+<CODE><B>ejabberd_c2s</B></CODE><DD> This module serves C2S connections.<BR>
 <BR>
 The following options are defined:
  <DL COMPACT=compact><DT>
- <B><TT>{access, &lt;access rule&gt;}</TT></B><DD> This option defines access of users
+ <CODE><B>{access, &lt;access rule&gt;}</B></CODE><DD> This option defines access of users
  to this C2S port. Default value is ``<TT>all</TT>''.
- <DT><B><TT>{shaper, &lt;access rule&gt;}</TT></B><DD> This option is like previous, but
+ <DT><CODE><B>{shaper, &lt;access rule&gt;}</B></CODE><DD> This option is like previous, but
  use shapers instead of ``<TT>allow</TT>'' and ``<TT>deny</TT>''. Default
  value is ``<TT>none</TT>''.
+ <DT><CODE><B>{ssl, SSLOpts}</B></CODE><DD> This option defines that traffic on this port
+ will be encrypted using SSL. SSL options are the same as described by
+ ``<CODE>erl -man ssl</CODE>'' command
  </DL>
-<DT><B><TT>ejabberd_s2s_in</TT></B><DD> This module serves incoming S2S connections.
-<DT><B><TT>ejabberd_service</TT></B><DD> This module serves connections from Jabber
+<DT><CODE><B>ejabberd_s2s_in</B></CODE><DD> This module serves incoming S2S connections.
+<DT><CODE><B>ejabberd_service</B></CODE><DD> This module serves connections from Jabber
  services (i.&nbsp;e. that use the <TT>jabber:component:accept</TT> namespace).
 </DL>
 For example, the following configuration defines that C2S connections are
index 53bbdd036e06b5c73e551e07c93089e494b5000c..703ee3ee8cba6ab14764f153ca56c6bbae465f61 100644 (file)
@@ -62,8 +62,8 @@ server.  It is writen mostly in Erlang.
 
 The main features of \ejabberd{} is:
 \begin{itemize}
-\item Works on most of popular platforms: *nix (tested on Linux and FreeBSD)
-  and Win32
+\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 and all of
   them will serve one Jabber domain.
 \item Fault-tolerance: You can setup an \ejabberd{} cluster so that all the
@@ -201,19 +201,40 @@ Windows distribution of Erlang emulator.
 \subsection{Starting}
 \label{sec:starting}
 
-\ldots{} To use more than 1024 connections, you will need to set environment
-variable \texttt{ERL\_MAX\_PORTS}:
+To start \ejabberd{}, use the following command:
+\begin{verbatim}
+erl -name ejabberd -s ejabberd
+\end{verbatim}
+or
+\begin{verbatim}
+erl -sname ejabberd -s ejabberd
+\end{verbatim}
+In second case Erlang node will be identified using only first part of host
+name, i.\,e. other Erlang nodes not inside this domain can't contact this node.
+
+To specify path to config file, use command like this:
+\begin{verbatim}
+erl -sname ejabberd -s ejabberd -ejabberd config \"/etc/ejabberd/ejabberd.cfg\"
+\end{verbatim}
+
+
+To use more than 1024 connections, you will need to set 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
-more)\ldots{}
+more).
 
+To reduce memory usage, you can set environment variable
+\verb|ERL_FULLSWEEP_AFTER|:
 \begin{verbatim}
-erl -name ejabberd -s ejabberd
+export ERL_FULLSWEEP_AFTER=0
 \end{verbatim}
+But in this case \ejabberd{} can start to work slower.
+
+
 
-TBD
 
 \section{Configuration}
 \label{sec:configuration}
@@ -395,18 +416,21 @@ runned on them.  Each element of list is a tuple with following elements:
 
 Currently three modules are implemented:
 \begin{description}
-\item[\texttt{ejabberd\_c2s}] This module serves C2S connections.
+\item[\verb|ejabberd_c2s|] This module serves C2S connections.
   
   The following options are defined:
   \begin{description}
-  \item[\texttt{\{access, <access rule>\}}] This option defines access of users
+  \item[\verb|{access, <access rule>}|] This option defines access of users
     to this C2S port.  Default value is ``\texttt{all}''.
-  \item[\texttt{\{shaper, <access rule>\}}] This option is like previous, but
+  \item[\verb|{shaper, <access rule>}|] This option is like previous, but
     use shapers instead of ``\texttt{allow}'' and ``\texttt{deny}''.  Default
     value is ``\texttt{none}''.
+  \item[\verb|{ssl, SSLOpts}|] This option defines that traffic on this port
+    will be encrypted using SSL.  SSL options are the same as described by
+    ``\verb|erl -man ssl|'' command
   \end{description}
-\item[\texttt{ejabberd\_s2s\_in}] This module serves incoming S2S connections.
-\item[\texttt{ejabberd\_service}] This module serves connections from \Jabber{}
+\item[\verb|ejabberd_s2s_in|] This module serves incoming S2S connections.
+\item[\verb|ejabberd_service|] This module serves connections from \Jabber{}
   services (i.\,e.\ that use the \texttt{jabber:component:accept} namespace).
 \end{description}
 
index 2cc561b6561f4ca7a5d2a1ef846822bb87d623e8..4474f3b68ada49e6c233db3d88fbe9168d73b7e9 100644 (file)
@@ -14,7 +14,7 @@
 % Another examples of ACLs:
 %{acl, jabberorg, {server, "jabber.org"}}.
 %{acl, aleksey, {user, "aleksey", "jabber.ru"}}.
-%{acl, test,  {user_regexp, "^test"}}.
+%{acl, test, {user_regexp, "^test"}}.
 %{acl, test, {user_glob, "test*"}}.
 
 
index 9afa704dcab8ca4b223613de94fe594c79d5f3e8..6b93c49541fe08760e2e3a03a0f20d76f70ed083 100644 (file)
@@ -34,7 +34,11 @@ start() ->
                         {local_content, true},
                         {attributes, record_info(fields, local_config)}]),
     mnesia:add_table_copy(local_config, node(), ram_copies),
-    load_file(?CONFIG_PATH).
+    Config = case application:get_env(config) of
+                {ok, Path} -> Path;
+                undefined -> ?CONFIG_PATH
+            end,
+    load_file(Config).
 
 
 load_file(File) ->
@@ -43,7 +47,7 @@ load_file(File) ->
            Res = lists:foldl(fun process_term/2, #state{}, Terms),
            set_opts(Res);
        {error, Reason} ->
-           ?ERROR_MSG("~p", [Reason]),
+           ?ERROR_MSG("Can't load config file ~p: ~p", [File, Reason]),
            exit(file:format_error(Reason))
     end.
 
index 16c76fea83bf4627e3e4692817a78719b651fb16..466f9fd0b9a1c8a0c31db0cc394f0dfc9219e941 100644 (file)
@@ -107,9 +107,16 @@ init([From, Server, Type]) ->
 open_socket(init, StateData) ->
     {Addr, Port} = get_addr_port(StateData#state.server),
     ?DEBUG("s2s_out: connecting to ~s:~p~n", [Addr, Port]),
-    case gen_tcp:connect(Addr,
-                        Port,
-                        [binary, {packet, 0}]) of
+    Res = case gen_tcp:connect(Addr, Port,
+                              [binary, {packet, 0}]) of
+             {ok, _Socket} = R -> R;
+             {error, Reason1} ->
+                 ?DEBUG("s2s_out: connect return ~p~n", [Reason1]),
+                 gen_tcp:connect(Addr, Port,
+                                 [binary, {packet, 0},
+                                  {tcp_module, inet6_tcp}])
+         end,
+    case Res of
        {ok, Socket} ->
            XMLStreamPid = xml_stream:start(self()),
            send_text(Socket, io_lib:format(?STREAM_HEADER,
@@ -120,11 +127,8 @@ open_socket(init, StateData) ->
                             streamid = new_id()},
             ?S2STIMEOUT};
        {error, Reason} ->
-           ?DEBUG("s2s_out: connect return ~p~n", [Reason]),
-           Error = case Reason of
-                       timeout -> ?ERR_REMOTE_SERVER_TIMEOUT;
-                       _ -> ?ERR_REMOTE_SERVER_NOT_FOUND
-                   end,
+           ?DEBUG("s2s_out: inet6 connect return ~p~n", [Reason]),
+           Error = ?ERR_REMOTE_SERVER_NOT_FOUND,
            bounce_messages(Error),
            {stop, normal, StateData}
     end.
@@ -439,7 +443,12 @@ is_verify_res(_) ->
 -include_lib("kernel/include/inet.hrl").
 
 get_addr_port(Server) ->
-    case inet_res:getbyname("_jabber._tcp." ++ Server, srv) of
+    Res = case inet_res:getbyname("_jabber-server._tcp." ++ Server, srv) of
+             {error, _Reason} ->
+                 inet_res:getbyname("_jabber._tcp." ++ Server, srv);
+             {ok, _HEnt} = R -> R
+         end,
+    case Res of
        {error, Reason} ->
            ?DEBUG("srv lookup of '~s' failed: ~p~n", [Server, Reason]),
            {Server, ejabberd_config:get_local_option(outgoing_s2s_port)};
index 839d6739c1e53e58113ec025258a2600343306c4..f8b4062e17c70b5f8b7e509e2c205eb38591ae88 100644 (file)
@@ -171,17 +171,6 @@ string_to_jid1([$/ | J], "") ->
     error;
 string_to_jid1([$/ | J], N) ->
     string_to_jid3(J, "", lists:reverse(N), "");
-string_to_jid1([C | J], N)
-  when (C =< 32) or
-       (C == $") or
-       (C == $&) or
-       (C == $') or
-       (C == $:) or
-       (C == $<) or
-       (C == $>) or
-       (C == 127)
-       ->
-    error;
 string_to_jid1([C | J], N) ->
     string_to_jid1(J, [C | N]);
 string_to_jid1([], "") ->