mirror of
https://github.com/processone/ejabberd.git
synced 2024-11-24 16:23:40 +01:00
Merge remote-tracking branch 'processone/master' into xep-0198
Conflicts: doc/guide.tex src/ejabberd_c2s.erl
This commit is contained in:
commit
d343447cc9
5
.gitignore
vendored
5
.gitignore
vendored
@ -24,8 +24,9 @@
|
|||||||
/doc/*.toc
|
/doc/*.toc
|
||||||
/doc/contributed_modules.tex
|
/doc/contributed_modules.tex
|
||||||
/doc/version.tex
|
/doc/version.tex
|
||||||
/ebin/*.beam
|
/ebin/
|
||||||
/ebin/ejabberd.app
|
/ejabberd.init
|
||||||
|
/ejabberdctl.example
|
||||||
/include/XmppAddr.hrl
|
/include/XmppAddr.hrl
|
||||||
/src/XmppAddr.asn1db
|
/src/XmppAddr.asn1db
|
||||||
/src/XmppAddr.erl
|
/src/XmppAddr.erl
|
||||||
|
35
.travis.yml
Normal file
35
.travis.yml
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
language: erlang
|
||||||
|
|
||||||
|
otp_release:
|
||||||
|
- 17.0
|
||||||
|
- R15B01
|
||||||
|
|
||||||
|
before_install:
|
||||||
|
- sudo apt-get -qq update
|
||||||
|
|
||||||
|
install:
|
||||||
|
- sudo apt-get -qq install libexpat1-dev libyaml-dev libpam0g-dev
|
||||||
|
|
||||||
|
before_script:
|
||||||
|
- mysql -u root -e "CREATE USER 'ejabberd_test'@'localhost' IDENTIFIED BY 'ejabberd_test';"
|
||||||
|
- mysql -u root -e "CREATE DATABASE ejabberd_test;"
|
||||||
|
- mysql -u root -e "GRANT ALL ON ejabberd_test.* TO 'ejabberd_test'@'localhost';"
|
||||||
|
- psql -U postgres -c "CREATE USER ejabberd_test WITH PASSWORD 'ejabberd_test';"
|
||||||
|
- psql -U postgres -c "CREATE DATABASE ejabberd_test;"
|
||||||
|
- psql -U postgres -c "GRANT ALL PRIVILEGES ON DATABASE ejabberd_test TO ejabberd_test;"
|
||||||
|
|
||||||
|
script:
|
||||||
|
- ./autogen.sh
|
||||||
|
- ./configure --enable-transient_supervisors --enable-all --disable-http --disable-odbc
|
||||||
|
- make
|
||||||
|
- make test
|
||||||
|
- grep -q 'TEST COMPLETE, \([[:digit:]]*\) ok, .* of \1 ' logs/raw.log
|
||||||
|
|
||||||
|
after_script:
|
||||||
|
- find logs -name suite.log -exec cat '{}' ';'
|
||||||
|
|
||||||
|
after_failure:
|
||||||
|
- find logs -name ejabberd.log -exec cat '{}' ';'
|
||||||
|
|
||||||
|
notifications:
|
||||||
|
email: false
|
10
COPYING
10
COPYING
@ -4,8 +4,8 @@ with the OpenSSL library and distribute the resulting binary.
|
|||||||
GNU GENERAL PUBLIC LICENSE
|
GNU GENERAL PUBLIC LICENSE
|
||||||
Version 2, June 1991
|
Version 2, June 1991
|
||||||
|
|
||||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
|
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
|
||||||
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
Everyone is permitted to copy and distribute verbatim copies
|
Everyone is permitted to copy and distribute verbatim copies
|
||||||
of this license document, but changing it is not allowed.
|
of this license document, but changing it is not allowed.
|
||||||
|
|
||||||
@ -306,9 +306,9 @@ the "copyright" line and a pointer to where the full notice is found.
|
|||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
GNU General Public License for more details.
|
GNU General Public License for more details.
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU General Public License along
|
||||||
along with this program; if not, write to the Free Software
|
with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
|
||||||
|
|
||||||
Also add information on how to contact you by electronic and paper mail.
|
Also add information on how to contact you by electronic and paper mail.
|
||||||
|
39
README
39
README
@ -1,13 +1,18 @@
|
|||||||
ejabberd - High-Performance Enterprise Instant Messaging Server
|
ejabberd - High-Performance Enterprise Instant Messaging Server
|
||||||
|
---------------------------------------------------------------
|
||||||
|
|
||||||
Quickstart guide
|
Quickstart guide
|
||||||
|
================
|
||||||
|
|
||||||
|
|
||||||
0. Requirements
|
0. Requirements
|
||||||
|
---------------
|
||||||
|
|
||||||
To compile ejabberd you need:
|
To compile ejabberd you need:
|
||||||
|
|
||||||
- GNU Make
|
- GNU Make
|
||||||
- GCC
|
- GCC
|
||||||
|
- pkg-config
|
||||||
- Libexpat 1.95 or higher
|
- Libexpat 1.95 or higher
|
||||||
- Libyaml 1.4 or higher
|
- Libyaml 1.4 or higher
|
||||||
- Erlang/OTP R15B or higher.
|
- Erlang/OTP R15B or higher.
|
||||||
@ -18,35 +23,41 @@ To compile ejabberd you need:
|
|||||||
- GNU Iconv 1.8 or higher, for the IRC Transport
|
- GNU Iconv 1.8 or higher, for the IRC Transport
|
||||||
(mod_irc). Optional. Not needed on systems with GNU Libc.
|
(mod_irc). Optional. Not needed on systems with GNU Libc.
|
||||||
- ImageMagick's Convert program. Optional. For CAPTCHA challenges.
|
- ImageMagick's Convert program. Optional. For CAPTCHA challenges.
|
||||||
- exmpp 0.9.6 or higher. Optional. For import/export XEP-0227 files.
|
|
||||||
|
|
||||||
|
|
||||||
1. Compile and install on *nix systems
|
1. Compile and install on *nix systems
|
||||||
|
--------------------------------------
|
||||||
|
|
||||||
To compile ejabberd execute the commands:
|
To compile ejabberd execute the commands:
|
||||||
./configure
|
|
||||||
make
|
./configure
|
||||||
|
make
|
||||||
|
|
||||||
To install ejabberd, run this command with system administrator rights
|
To install ejabberd, run this command with system administrator rights
|
||||||
(root user):
|
(root user):
|
||||||
|
|
||||||
sudo make install
|
sudo make install
|
||||||
|
|
||||||
These commands will:
|
These commands will:
|
||||||
- Install the configuration files in /etc/ejabberd/
|
|
||||||
- Install ejabberd binary, header and runtime files in /lib/ejabberd/
|
- Install the configuration files in `/etc/ejabberd/`
|
||||||
- Install the administration script: /sbin/ejabberdctl
|
- Install ejabberd binary, header and runtime files in `/lib/ejabberd/`
|
||||||
- Install ejabberd documentation in /share/doc/ejabberd/
|
- Install the administration script: `/sbin/ejabberdctl`
|
||||||
- Create a spool directory: /var/lib/ejabberd/
|
- Install ejabberd documentation in `/share/doc/ejabberd/`
|
||||||
- Create a directory for log files: /var/log/ejabberd/
|
- Create a spool directory: `/var/lib/ejabberd/`
|
||||||
|
- Create a directory for log files: `/var/log/ejabberd/`
|
||||||
|
|
||||||
|
|
||||||
2. Start ejabberd
|
2. Start ejabberd
|
||||||
|
-----------------
|
||||||
|
|
||||||
You can use the ejabberdctl command line administration script to
|
You can use the `ejabberdctl` command line administration script to
|
||||||
start and stop ejabberd. For example:
|
start and stop ejabberd. For example:
|
||||||
ejabberdctl start
|
|
||||||
|
ejabberdctl start
|
||||||
|
|
||||||
|
|
||||||
For detailed information please refer to the
|
For detailed information please refer to the [ejabberd Installation and
|
||||||
ejabberd Installation and Operation Guide
|
Operation Guide][1].
|
||||||
|
|
||||||
|
[1]: http://www.process-one.net/docs/ejabberd/guide_en.html
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
# generate a new autoconf
|
# generate a new autoconf
|
||||||
aclocal -I m4
|
aclocal -I m4
|
||||||
autoconf
|
autoconf -f
|
||||||
|
28
configure
vendored
28
configure
vendored
@ -1,6 +1,6 @@
|
|||||||
#! /bin/sh
|
#! /bin/sh
|
||||||
# Guess values for system-dependent variables and create Makefiles.
|
# Guess values for system-dependent variables and create Makefiles.
|
||||||
# Generated by GNU Autoconf 2.67 for ejabberd community.
|
# Generated by GNU Autoconf 2.67 for ejabberd community 13.12-119-g47a39ce.
|
||||||
#
|
#
|
||||||
# Report bugs to <ejabberd@process-one.net>.
|
# Report bugs to <ejabberd@process-one.net>.
|
||||||
#
|
#
|
||||||
@ -552,8 +552,8 @@ MAKEFLAGS=
|
|||||||
# Identity of this package.
|
# Identity of this package.
|
||||||
PACKAGE_NAME='ejabberd'
|
PACKAGE_NAME='ejabberd'
|
||||||
PACKAGE_TARNAME='ejabberd'
|
PACKAGE_TARNAME='ejabberd'
|
||||||
PACKAGE_VERSION='community'
|
PACKAGE_VERSION='community 13.12-119-g47a39ce'
|
||||||
PACKAGE_STRING='ejabberd community'
|
PACKAGE_STRING='ejabberd community 13.12-119-g47a39ce'
|
||||||
PACKAGE_BUGREPORT='ejabberd@process-one.net'
|
PACKAGE_BUGREPORT='ejabberd@process-one.net'
|
||||||
PACKAGE_URL=''
|
PACKAGE_URL=''
|
||||||
|
|
||||||
@ -1222,7 +1222,7 @@ if test "$ac_init_help" = "long"; then
|
|||||||
# Omit some internal or obsolete options to make the list less imposing.
|
# Omit some internal or obsolete options to make the list less imposing.
|
||||||
# This message is too long to be a string in the A/UX 3.1 sh.
|
# This message is too long to be a string in the A/UX 3.1 sh.
|
||||||
cat <<_ACEOF
|
cat <<_ACEOF
|
||||||
\`configure' configures ejabberd community to adapt to many kinds of systems.
|
\`configure' configures ejabberd community 13.12-119-g47a39ce to adapt to many kinds of systems.
|
||||||
|
|
||||||
Usage: $0 [OPTION]... [VAR=VALUE]...
|
Usage: $0 [OPTION]... [VAR=VALUE]...
|
||||||
|
|
||||||
@ -1283,7 +1283,7 @@ fi
|
|||||||
|
|
||||||
if test -n "$ac_init_help"; then
|
if test -n "$ac_init_help"; then
|
||||||
case $ac_init_help in
|
case $ac_init_help in
|
||||||
short | recursive ) echo "Configuration of ejabberd community:";;
|
short | recursive ) echo "Configuration of ejabberd community 13.12-119-g47a39ce:";;
|
||||||
esac
|
esac
|
||||||
cat <<\_ACEOF
|
cat <<\_ACEOF
|
||||||
|
|
||||||
@ -1407,7 +1407,7 @@ fi
|
|||||||
test -n "$ac_init_help" && exit $ac_status
|
test -n "$ac_init_help" && exit $ac_status
|
||||||
if $ac_init_version; then
|
if $ac_init_version; then
|
||||||
cat <<\_ACEOF
|
cat <<\_ACEOF
|
||||||
ejabberd configure community
|
ejabberd configure community 13.12-119-g47a39ce
|
||||||
generated by GNU Autoconf 2.67
|
generated by GNU Autoconf 2.67
|
||||||
|
|
||||||
Copyright (C) 2010 Free Software Foundation, Inc.
|
Copyright (C) 2010 Free Software Foundation, Inc.
|
||||||
@ -1466,7 +1466,7 @@ cat >config.log <<_ACEOF
|
|||||||
This file contains any messages produced by compilers while
|
This file contains any messages produced by compilers while
|
||||||
running configure, to aid debugging if configure makes a mistake.
|
running configure, to aid debugging if configure makes a mistake.
|
||||||
|
|
||||||
It was created by ejabberd $as_me community, which was
|
It was created by ejabberd $as_me community 13.12-119-g47a39ce, which was
|
||||||
generated by GNU Autoconf 2.67. Invocation command line was
|
generated by GNU Autoconf 2.67. Invocation command line was
|
||||||
|
|
||||||
$ $0 $@
|
$ $0 $@
|
||||||
@ -2480,7 +2480,7 @@ if test "${enable_erlang_version_check+set}" = set; then :
|
|||||||
enableval=$enable_erlang_version_check;
|
enableval=$enable_erlang_version_check;
|
||||||
fi
|
fi
|
||||||
|
|
||||||
case "$enable_erlang_version_check" in
|
case "$enable_erlang_version_check" in
|
||||||
yes|'')
|
yes|'')
|
||||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking Erlang/OTP version" >&5
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking Erlang/OTP version" >&5
|
||||||
$as_echo_n "checking Erlang/OTP version... " >&6; }
|
$as_echo_n "checking Erlang/OTP version... " >&6; }
|
||||||
@ -2526,6 +2526,10 @@ parse(Version) ->
|
|||||||
|
|
||||||
less_or_equal([], []) ->
|
less_or_equal([], []) ->
|
||||||
true;
|
true;
|
||||||
|
less_or_equal([], _Any) ->
|
||||||
|
true;
|
||||||
|
less_or_equal(_Any, []) ->
|
||||||
|
false;
|
||||||
less_or_equal([Left| Rl], [Right| Rr]) ->
|
less_or_equal([Left| Rl], [Right| Rr]) ->
|
||||||
case {Left < Right, Left == Right} of
|
case {Left < Right, Left == Right} of
|
||||||
{true, _} ->
|
{true, _} ->
|
||||||
@ -2608,6 +2612,10 @@ parse(Version) ->
|
|||||||
|
|
||||||
less_or_equal([], []) ->
|
less_or_equal([], []) ->
|
||||||
true;
|
true;
|
||||||
|
less_or_equal([], _Any) ->
|
||||||
|
true;
|
||||||
|
less_or_equal(_Any, []) ->
|
||||||
|
false;
|
||||||
less_or_equal([Left| Rl], [Right| Rr]) ->
|
less_or_equal([Left| Rl], [Right| Rr]) ->
|
||||||
case {Left < Right, Left == Right} of
|
case {Left < Right, Left == Right} of
|
||||||
{true, _} ->
|
{true, _} ->
|
||||||
@ -4396,7 +4404,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
|
|||||||
# report actual input values of CONFIG_FILES etc. instead of their
|
# report actual input values of CONFIG_FILES etc. instead of their
|
||||||
# values after options handling.
|
# values after options handling.
|
||||||
ac_log="
|
ac_log="
|
||||||
This file was extended by ejabberd $as_me community, which was
|
This file was extended by ejabberd $as_me community 13.12-119-g47a39ce, which was
|
||||||
generated by GNU Autoconf 2.67. Invocation command line was
|
generated by GNU Autoconf 2.67. Invocation command line was
|
||||||
|
|
||||||
CONFIG_FILES = $CONFIG_FILES
|
CONFIG_FILES = $CONFIG_FILES
|
||||||
@ -4449,7 +4457,7 @@ _ACEOF
|
|||||||
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
|
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
|
||||||
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
|
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
|
||||||
ac_cs_version="\\
|
ac_cs_version="\\
|
||||||
ejabberd config.status community
|
ejabberd config.status community 13.12-119-g47a39ce
|
||||||
configured by $0, generated by GNU Autoconf 2.67,
|
configured by $0, generated by GNU Autoconf 2.67,
|
||||||
with options \\"\$ac_cs_config\\"
|
with options \\"\$ac_cs_config\\"
|
||||||
|
|
||||||
|
5097
doc/guide.html
5097
doc/guide.html
File diff suppressed because it is too large
Load Diff
129
doc/guide.tex
129
doc/guide.tex
@ -68,6 +68,7 @@
|
|||||||
\newcommand{\modannounce}{\module{mod\_announce}}
|
\newcommand{\modannounce}{\module{mod\_announce}}
|
||||||
\newcommand{\modblocking}{\module{mod\_blocking}}
|
\newcommand{\modblocking}{\module{mod\_blocking}}
|
||||||
\newcommand{\modcaps}{\module{mod\_caps}}
|
\newcommand{\modcaps}{\module{mod\_caps}}
|
||||||
|
\newcommand{\modcarboncopy}{\module{mod\_carboncopy}}
|
||||||
\newcommand{\modconfigure}{\module{mod\_configure}}
|
\newcommand{\modconfigure}{\module{mod\_configure}}
|
||||||
\newcommand{\moddisco}{\module{mod\_disco}}
|
\newcommand{\moddisco}{\module{mod\_disco}}
|
||||||
\newcommand{\modecho}{\module{mod\_echo}}
|
\newcommand{\modecho}{\module{mod\_echo}}
|
||||||
@ -92,6 +93,7 @@
|
|||||||
\newcommand{\modsharedroster}{\module{mod\_shared\_roster}}
|
\newcommand{\modsharedroster}{\module{mod\_shared\_roster}}
|
||||||
\newcommand{\modsharedrosterldap}{\module{mod\_shared\_roster\_ldap}}
|
\newcommand{\modsharedrosterldap}{\module{mod\_shared\_roster\_ldap}}
|
||||||
\newcommand{\modsic}{\module{mod\_sic}}
|
\newcommand{\modsic}{\module{mod\_sic}}
|
||||||
|
\newcommand{\modsip}{\module{mod\_sip}}
|
||||||
\newcommand{\modstats}{\module{mod\_stats}}
|
\newcommand{\modstats}{\module{mod\_stats}}
|
||||||
\newcommand{\modtime}{\module{mod\_time}}
|
\newcommand{\modtime}{\module{mod\_time}}
|
||||||
\newcommand{\modvcard}{\module{mod\_vcard}}
|
\newcommand{\modvcard}{\module{mod\_vcard}}
|
||||||
@ -318,6 +320,7 @@ To compile \ejabberd{} on a `Unix-like' operating system, you need:
|
|||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
\item GNU Make
|
\item GNU Make
|
||||||
\item GCC
|
\item GCC
|
||||||
|
\item pkg-config
|
||||||
\item Libexpat 1.95 or higher
|
\item Libexpat 1.95 or higher
|
||||||
\item Erlang/OTP R15B or higher.
|
\item Erlang/OTP R15B or higher.
|
||||||
\item Libyaml 1.4 or higher
|
\item Libyaml 1.4 or higher
|
||||||
@ -869,7 +872,7 @@ The available modules, their purpose and the options allowed by each one are:
|
|||||||
\begin{description}
|
\begin{description}
|
||||||
\titem{\texttt{ejabberd\_c2s}}
|
\titem{\texttt{ejabberd\_c2s}}
|
||||||
Handles c2s connections.\\
|
Handles c2s connections.\\
|
||||||
Options: \texttt{access}, \texttt{certfile}, \texttt{ciphers},
|
Options: \texttt{access}, \texttt{certfile}, \texttt{ciphers}, \texttt{protocol\_options}
|
||||||
\texttt{max\_ack\_queue}, \texttt{max\_fsm\_queue},
|
\texttt{max\_ack\_queue}, \texttt{max\_fsm\_queue},
|
||||||
\texttt{max\_stanza\_size}, \texttt{resend\_on\_timeout},
|
\texttt{max\_stanza\_size}, \texttt{resend\_on\_timeout},
|
||||||
\texttt{resume\_timeout}, \texttt{shaper},
|
\texttt{resume\_timeout}, \texttt{shaper},
|
||||||
@ -884,6 +887,10 @@ The available modules, their purpose and the options allowed by each one are:
|
|||||||
(as defined in the Jabber Component Protocol (\xepref{0114}).\\
|
(as defined in the Jabber Component Protocol (\xepref{0114}).\\
|
||||||
Options: \texttt{access}, \texttt{hosts}, \texttt{max\_fsm\_queue},
|
Options: \texttt{access}, \texttt{hosts}, \texttt{max\_fsm\_queue},
|
||||||
\texttt{service\_check\_from}, \texttt{shaper\_rule}
|
\texttt{service\_check\_from}, \texttt{shaper\_rule}
|
||||||
|
\titem{\texttt{ejabberd\_sip}}
|
||||||
|
Handles SIP requests as defined in
|
||||||
|
\footahref{http://tools.ietf.org/html/rfc3261}{RFC 3261}.\\
|
||||||
|
Options: \texttt{certfile}, \texttt{tls}
|
||||||
\titem{\texttt{ejabberd\_stun}}
|
\titem{\texttt{ejabberd\_stun}}
|
||||||
Handles STUN Binding requests as defined in
|
Handles STUN Binding requests as defined in
|
||||||
\footahref{http://tools.ietf.org/html/rfc5389}{RFC 5389}.\\
|
\footahref{http://tools.ietf.org/html/rfc5389}{RFC 5389}.\\
|
||||||
@ -919,6 +926,10 @@ This is a detailed description of each option allowed by the listening modules:
|
|||||||
To define a certificate file specific for a given domain, use the global option \term{domain\_certfile}.
|
To define a certificate file specific for a given domain, use the global option \term{domain\_certfile}.
|
||||||
\titem{ciphers: Ciphers} OpenSSL ciphers list in the same format accepted by
|
\titem{ciphers: Ciphers} OpenSSL ciphers list in the same format accepted by
|
||||||
`\verb|openssl ciphers|' command.
|
`\verb|openssl ciphers|' command.
|
||||||
|
\titem{protocol\_options: ProtocolOpts} \ind{options!protocol\_options}
|
||||||
|
List of general options relating to SSL/TLS. These map to \verb|<a href="https://www.openssl.org/docs/ssl/SSL_CTX_set_options.html">OpenSSL's set_options()</a>|.
|
||||||
|
For a full list of options available in ejabberd, \verb|<a href="https://github.com/processone/tls/blob/master/c_src/options.h">see the source</a>|.
|
||||||
|
The default entry is: \verb|"no_sslv2"|
|
||||||
\titem{default\_host: undefined|HostName\}}
|
\titem{default\_host: undefined|HostName\}}
|
||||||
If the HTTP request received by ejabberd contains the HTTP header \term{Host}
|
If the HTTP request received by ejabberd contains the HTTP header \term{Host}
|
||||||
with an ambiguous virtual host that doesn't match any one defined in ejabberd (see \ref{hostnames}),
|
with an ambiguous virtual host that doesn't match any one defined in ejabberd (see \ref{hostnames}),
|
||||||
@ -1095,6 +1106,10 @@ There are some additional global options that can be specified in the ejabberd c
|
|||||||
Full path to the file containing the SSL certificate for a specific domain.
|
Full path to the file containing the SSL certificate for a specific domain.
|
||||||
\titem{s2s\_ciphers: Ciphers} \ind{options!s2s\_ciphers} OpenSSL ciphers list
|
\titem{s2s\_ciphers: Ciphers} \ind{options!s2s\_ciphers} OpenSSL ciphers list
|
||||||
in the same format accepted by `\verb|openssl ciphers|' command.
|
in the same format accepted by `\verb|openssl ciphers|' command.
|
||||||
|
\titem{s2s\_protocol\_options: ProtocolOpts} \ind{options!s2s\_protocol\_options}
|
||||||
|
List of general options relating to SSL/TLS. These map to \verb|<a href="https://www.openssl.org/docs/ssl/SSL_CTX_set_options.html">OpenSSL's set_options()</a>|.
|
||||||
|
For a full list of options available in ejabberd, \verb|<a href="https://github.com/processone/tls/blob/protocol_options/c_src/options.h">see the source</a>|.
|
||||||
|
The default entry is: \verb|"no_sslv2"|
|
||||||
\titem{outgoing\_s2s\_families: [Family, ...]} \ind{options!outgoing\_s2s\_families}
|
\titem{outgoing\_s2s\_families: [Family, ...]} \ind{options!outgoing\_s2s\_families}
|
||||||
Specify which address families to try, in what order.
|
Specify which address families to try, in what order.
|
||||||
By default it first tries connecting with IPv4, if that fails it tries using IPv6.
|
By default it first tries connecting with IPv4, if that fails it tries using IPv6.
|
||||||
@ -1814,7 +1829,7 @@ The syntax is:
|
|||||||
|
|
||||||
When a JID is checked to have access to \term{Accessname}, the server
|
When a JID is checked to have access to \term{Accessname}, the server
|
||||||
sequentially checks if that JID matches any of the ACLs that are named in the
|
sequentially checks if that JID matches any of the ACLs that are named in the
|
||||||
second elements of the tuples in the list. If it matches, the first element of
|
first elements of the tuples in the list. If it matches, the second element of
|
||||||
the first matched tuple is returned, otherwise the value `\term{deny}' is
|
the first matched tuple is returned, otherwise the value `\term{deny}' is
|
||||||
returned.
|
returned.
|
||||||
|
|
||||||
@ -1982,7 +1997,7 @@ listen:
|
|||||||
|
|
||||||
\ejabberd{} is able to act as a stand-alone STUN server
|
\ejabberd{} is able to act as a stand-alone STUN server
|
||||||
(\footahref{http://tools.ietf.org/html/rfc5389}{RFC 5389}). Currently only Binding usage
|
(\footahref{http://tools.ietf.org/html/rfc5389}{RFC 5389}). Currently only Binding usage
|
||||||
is supported. In that role \ejabberd{} helps clients with Jingle ICE (\xepref{0176}) support to discover their external addresses and ports.
|
is supported. In that role \ejabberd{} helps clients with ICE (\footahref{http://tools.ietf.org/html/rfc5245}{RFC 5245}) or Jingle ICE (\xepref{0176}) support to discover their external addresses and ports.
|
||||||
|
|
||||||
You should configure \term{ejabberd\_stun} listening module as described in \ref{listened} section.
|
You should configure \term{ejabberd\_stun} listening module as described in \ref{listened} section.
|
||||||
If \option{certfile} option is defined, \ejabberd{} multiplexes TCP and
|
If \option{certfile} option is defined, \ejabberd{} multiplexes TCP and
|
||||||
@ -2022,6 +2037,61 @@ _stun._tcp IN SRV 0 0 3478 stun.example.com.
|
|||||||
_stuns._tcp IN SRV 0 0 5349 stun.example.com.
|
_stuns._tcp IN SRV 0 0 5349 stun.example.com.
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
|
||||||
|
\makesubsection{sip}{SIP}
|
||||||
|
\ind{options!sip}\ind{sip}
|
||||||
|
|
||||||
|
\ejabberd{} has built-in SIP support. In order to activate it you need to add
|
||||||
|
listeners for it, configure DNS properly and enable \modsip{} for
|
||||||
|
the desired virtual host.
|
||||||
|
|
||||||
|
To add a listener you should configure \term{ejabberd\_sip} listening module as
|
||||||
|
described in \ref{listened} section. If option \option{tls} is specified, option
|
||||||
|
\option{certfile} must be specified as well, otherwise incoming TLS connections would fail.
|
||||||
|
|
||||||
|
Example configuration with standard ports
|
||||||
|
(as per \footahref{http://tools.ietf.org/html/rfc3261}{RFC 3261}):
|
||||||
|
\begin{verbatim}
|
||||||
|
listen:
|
||||||
|
...
|
||||||
|
-
|
||||||
|
port: 5060
|
||||||
|
transport: udp
|
||||||
|
module: ejabberd_sip
|
||||||
|
-
|
||||||
|
port: 5060
|
||||||
|
module: ejabberd_sip
|
||||||
|
-
|
||||||
|
port: 5061
|
||||||
|
module: ejabberd_sip
|
||||||
|
tls: true
|
||||||
|
certfile: "/etc/ejabberd/server.pem"
|
||||||
|
...
|
||||||
|
\end{verbatim}
|
||||||
|
|
||||||
|
Note that there is no StartTLS support in SIP and \footahref{http://en.wikipedia.org/wiki/Server\_Name\_Indication}{SNI} support is somewhat tricky, so for TLS you have to configure
|
||||||
|
different virtual hosts on different ports if you have different certificate files for them.
|
||||||
|
|
||||||
|
Next you need to configure DNS SIP records for your virtual domains.
|
||||||
|
Refer to \footahref{http://tools.ietf.org/html/rfc3263}{RFC 3263} for the detailed explanation.
|
||||||
|
Simply put, you should add NAPTR and SRV records for your domains.
|
||||||
|
Skip NAPTR configuration if your DNS provider doesn't support this type of records.
|
||||||
|
It's not fatal, however, highly recommended.
|
||||||
|
|
||||||
|
Example configuration of NAPTR records:
|
||||||
|
\begin{verbatim}
|
||||||
|
example.com IN NAPTR 10 0 "s" "SIPS+D2T" "" _sips._tcp.example.com.
|
||||||
|
example.com IN NAPTR 20 0 "s" "SIP+D2T" "" _sip._tcp.example.com.
|
||||||
|
example.com IN NAPTR 30 0 "s" "SIP+D2U" "" _sip._udp.example.com.
|
||||||
|
\end{verbatim}
|
||||||
|
|
||||||
|
Example configuration of SRV records with standard ports
|
||||||
|
(as per \footahref{http://tools.ietf.org/html/rfc3261}{RFC 3261}):
|
||||||
|
\begin{verbatim}
|
||||||
|
_sip._udp IN SRV 0 0 5060 sip.example.com.
|
||||||
|
_sip._tcp IN SRV 0 0 5060 sip.example.com.
|
||||||
|
_sips._tcp IN SRV 0 0 5061 sip.example.com.
|
||||||
|
\end{verbatim}
|
||||||
|
|
||||||
\makesubsection{includeconfigfile}{Include Additional Configuration Files}
|
\makesubsection{includeconfigfile}{Include Additional Configuration Files}
|
||||||
\ind{options!includeconfigfile}\ind{includeconfigfile}
|
\ind{options!includeconfigfile}\ind{includeconfigfile}
|
||||||
|
|
||||||
@ -2551,8 +2621,7 @@ modules:
|
|||||||
mod_echo: {}
|
mod_echo: {}
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
\item In the second example the modules \modecho{}, \modtime{}, and
|
\item In the second example the modules \modecho{}, \modtime{}, and
|
||||||
\modversion{} are loaded without options. Remark that, besides the last entry,
|
\modversion{} are loaded without options.
|
||||||
all entries end with a comma:
|
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
modules:
|
modules:
|
||||||
mod_echo: {}
|
mod_echo: {}
|
||||||
@ -2575,6 +2644,7 @@ The following table lists all modules included in \ejabberd{}.
|
|||||||
\hline \ahrefloc{modannounce}{\modannounce{}} & Manage announcements & recommends \modadhoc{} \\
|
\hline \ahrefloc{modannounce}{\modannounce{}} & Manage announcements & recommends \modadhoc{} \\
|
||||||
\hline \modblocking{} & Simple Communications Blocking (\xepref{0191}) & \modprivacy{} \\
|
\hline \modblocking{} & Simple Communications Blocking (\xepref{0191}) & \modprivacy{} \\
|
||||||
\hline \modcaps{} & Entity Capabilities (\xepref{0115}) & \\
|
\hline \modcaps{} & Entity Capabilities (\xepref{0115}) & \\
|
||||||
|
\hline \modcarboncopy{} & Message Carbons (\xepref{0280}) & \\
|
||||||
\hline \modconfigure{} & Server configuration using Ad-Hoc & \modadhoc{} \\
|
\hline \modconfigure{} & Server configuration using Ad-Hoc & \modadhoc{} \\
|
||||||
\hline \ahrefloc{moddisco}{\moddisco{}} & Service Discovery (\xepref{0030}) & \\
|
\hline \ahrefloc{moddisco}{\moddisco{}} & Service Discovery (\xepref{0030}) & \\
|
||||||
\hline \ahrefloc{modecho}{\modecho{}} & Echoes XMPP stanzas & \\
|
\hline \ahrefloc{modecho}{\modecho{}} & Echoes XMPP stanzas & \\
|
||||||
@ -2599,6 +2669,7 @@ The following table lists all modules included in \ejabberd{}.
|
|||||||
\hline \ahrefloc{modsharedroster}{\modsharedroster{}} & Shared roster management & \modroster{} \\
|
\hline \ahrefloc{modsharedroster}{\modsharedroster{}} & Shared roster management & \modroster{} \\
|
||||||
\hline \ahrefloc{modsharedrosterldap}{\modsharedrosterldap{}} & LDAP Shared roster management & \modroster{} \\
|
\hline \ahrefloc{modsharedrosterldap}{\modsharedrosterldap{}} & LDAP Shared roster management & \modroster{} \\
|
||||||
\hline \ahrefloc{modsic}{\modsic{}} & Server IP Check (\xepref{0279}) & \\
|
\hline \ahrefloc{modsic}{\modsic{}} & Server IP Check (\xepref{0279}) & \\
|
||||||
|
\hline \ahrefloc{modsip}{\modsip{}} & SIP Registrar/Proxy (\footahref{http://tools.ietf.org/html/rfc3261}{RFC 3261}) & \term{ejabberd\_sip} \\
|
||||||
\hline \ahrefloc{modstats}{\modstats{}} & Statistics Gathering (\xepref{0039}) & \\
|
\hline \ahrefloc{modstats}{\modstats{}} & Statistics Gathering (\xepref{0039}) & \\
|
||||||
\hline \ahrefloc{modtime}{\modtime{}} & Entity Time (\xepref{0202}) & \\
|
\hline \ahrefloc{modtime}{\modtime{}} & Entity Time (\xepref{0202}) & \\
|
||||||
\hline \ahrefloc{modvcard}{\modvcard{}} & vcard-temp (\xepref{0054}) & \\
|
\hline \ahrefloc{modvcard}{\modvcard{}} & vcard-temp (\xepref{0054}) & \\
|
||||||
@ -4639,6 +4710,49 @@ Options:
|
|||||||
\iqdiscitem{\ns{urn:xmpp:sic:0}}
|
\iqdiscitem{\ns{urn:xmpp:sic:0}}
|
||||||
\end{description}
|
\end{description}
|
||||||
|
|
||||||
|
\makesubsection{modsip}{\modsip{}}
|
||||||
|
\ind{modules!\modsip{}}
|
||||||
|
This module adds SIP proxy/registrar support for the corresponding virtual host.
|
||||||
|
Note that it is not enough to just load this module only. You should also configure
|
||||||
|
listeners and DNS records properly. See section \ref{sip} for the full explanation.
|
||||||
|
|
||||||
|
Example configuration:
|
||||||
|
\begin{verbatim}
|
||||||
|
modules:
|
||||||
|
...
|
||||||
|
mod_sip: {}
|
||||||
|
...
|
||||||
|
\end{verbatim}
|
||||||
|
|
||||||
|
Options:
|
||||||
|
\begin{description}
|
||||||
|
\titem{via: [\{type: Type, host: Host, port: Port\}]}\ind{options!via}With
|
||||||
|
this option for every \term{Type} you can specify \term{Host} and \term{Port}
|
||||||
|
to set in \term{Via} header of outgoing SIP messages, where \term{Type} can be
|
||||||
|
\term{udp}, \term{tcp} or \term{tls}. \term{Host} is a string and \term{Port} is
|
||||||
|
a non negative integer. This is useful if you're running your server in a non-standard
|
||||||
|
network topology. Example configuration:
|
||||||
|
\begin{verbatim}
|
||||||
|
modules:
|
||||||
|
...
|
||||||
|
mod_sip:
|
||||||
|
via:
|
||||||
|
-
|
||||||
|
type: tls
|
||||||
|
host: "sip-tls.example.com"
|
||||||
|
port: 5061
|
||||||
|
-
|
||||||
|
type: tcp
|
||||||
|
host: "sip-tcp.example.com"
|
||||||
|
port: 5060
|
||||||
|
-
|
||||||
|
type: udp
|
||||||
|
host: "sip-udp.example.com"
|
||||||
|
port: 5060
|
||||||
|
...
|
||||||
|
\end{verbatim}
|
||||||
|
\end{description}
|
||||||
|
|
||||||
\makesubsection{modstats}{\modstats{}}
|
\makesubsection{modstats}{\modstats{}}
|
||||||
\ind{modules!\modstats{}}\ind{protocols!XEP-0039: Statistics Gathering}\ind{statistics}
|
\ind{modules!\modstats{}}\ind{protocols!XEP-0039: Statistics Gathering}\ind{statistics}
|
||||||
|
|
||||||
@ -5031,6 +5145,9 @@ This can be used by other scripts to determine automatically
|
|||||||
if a command succeeded or failed,
|
if a command succeeded or failed,
|
||||||
for example using: \term{echo \$?}
|
for example using: \term{echo \$?}
|
||||||
|
|
||||||
|
If you use Bash, you can get Bash completion by copying the file \term{tools/ejabberdctl.bc}
|
||||||
|
to the directory \term{/etc/bash\_completion.d/} (in Debian, Ubuntu, Fedora and maybe others).
|
||||||
|
|
||||||
\makesubsection{ectl-commands}{ejabberdctl Commands}
|
\makesubsection{ectl-commands}{ejabberdctl Commands}
|
||||||
|
|
||||||
When \term{ejabberdctl} is executed without any parameter,
|
When \term{ejabberdctl} is executed without any parameter,
|
||||||
@ -5992,7 +6109,7 @@ Thanks to all people who contributed to this guide:
|
|||||||
\makechapter{copyright}{Copyright Information}
|
\makechapter{copyright}{Copyright Information}
|
||||||
|
|
||||||
Ejabberd Installation and Operation Guide.\\
|
Ejabberd Installation and Operation Guide.\\
|
||||||
Copyright \copyright{} 2003 --- 2013 ProcessOne
|
Copyright \copyright{} 2003 --- 2014 ProcessOne
|
||||||
|
|
||||||
This document is free software; you can redistribute it and/or
|
This document is free software; you can redistribute it and/or
|
||||||
modify it under the terms of the GNU General Public License
|
modify it under the terms of the GNU General Public License
|
||||||
|
@ -128,6 +128,7 @@ Moreover, \ejabberd{} comes with a wide range of other state-of-the-art features
|
|||||||
\item \txepref{0060}{Publish-Subscribe} component with support for \txepref{0163}{Personal Eventing via Pubsub}.
|
\item \txepref{0060}{Publish-Subscribe} component with support for \txepref{0163}{Personal Eventing via Pubsub}.
|
||||||
\item Support for web clients: \txepref{0025}{HTTP Polling} and \txepref{0206}{HTTP Binding (BOSH)} services.
|
\item Support for web clients: \txepref{0025}{HTTP Polling} and \txepref{0206}{HTTP Binding (BOSH)} services.
|
||||||
\item IRC transport.
|
\item IRC transport.
|
||||||
|
\item SIP support.
|
||||||
\item Component support: interface with networks such as AIM, ICQ and MSN installing special tranports.
|
\item Component support: interface with networks such as AIM, ICQ and MSN installing special tranports.
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
|
@ -86,6 +86,12 @@ listen:
|
|||||||
##
|
##
|
||||||
## certfile: "/path/to/ssl.pem"
|
## certfile: "/path/to/ssl.pem"
|
||||||
## starttls: true
|
## starttls: true
|
||||||
|
##
|
||||||
|
## Custom OpenSSL options
|
||||||
|
##
|
||||||
|
## protocol_options:
|
||||||
|
## - "no_sslv3"
|
||||||
|
## - "no_tlsv1"
|
||||||
max_stanza_size: 65536
|
max_stanza_size: 65536
|
||||||
shaper: c2s_shaper
|
shaper: c2s_shaper
|
||||||
access: c2s
|
access: c2s
|
||||||
@ -144,6 +150,12 @@ listen:
|
|||||||
##
|
##
|
||||||
## s2s_certfile: "/path/to/ssl.pem"
|
## s2s_certfile: "/path/to/ssl.pem"
|
||||||
|
|
||||||
|
## Custom OpenSSL options
|
||||||
|
##
|
||||||
|
## s2s_protocol_options:
|
||||||
|
## - "no_sslv3"
|
||||||
|
## - "no_tlsv1"
|
||||||
|
|
||||||
##
|
##
|
||||||
## domain_certfile: Specify a different certificate for each served hostname.
|
## domain_certfile: Specify a different certificate for each served hostname.
|
||||||
##
|
##
|
||||||
@ -514,6 +526,7 @@ modules:
|
|||||||
access: announce
|
access: announce
|
||||||
mod_blocking: {} # requires mod_privacy
|
mod_blocking: {} # requires mod_privacy
|
||||||
mod_caps: {}
|
mod_caps: {}
|
||||||
|
mod_carboncopy: {}
|
||||||
mod_configure: {} # requires mod_adhoc
|
mod_configure: {} # requires mod_adhoc
|
||||||
mod_disco: {}
|
mod_disco: {}
|
||||||
## mod_echo: {}
|
## mod_echo: {}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
%%%
|
%%%
|
||||||
%%% ejabberd, Copyright (C) 2002-2013 ProcessOne
|
%%% ejabberd, Copyright (C) 2002-2014 ProcessOne
|
||||||
%%%
|
%%%
|
||||||
%%% This program is free software; you can redistribute it and/or
|
%%% This program is free software; you can redistribute it and/or
|
||||||
%%% modify it under the terms of the GNU General Public License as
|
%%% modify it under the terms of the GNU General Public License as
|
||||||
@ -12,10 +12,9 @@
|
|||||||
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
%%% General Public License for more details.
|
%%% General Public License for more details.
|
||||||
%%%
|
%%%
|
||||||
%%% You should have received a copy of the GNU General Public License
|
%%% You should have received a copy of the GNU General Public License along
|
||||||
%%% along with this program; if not, write to the Free Software
|
%%% with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
%%% 02111-1307 USA
|
|
||||||
%%%
|
%%%
|
||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
%%%
|
%%%
|
||||||
%%% ejabberd, Copyright (C) 2002-2013 ProcessOne
|
%%% ejabberd, Copyright (C) 2002-2014 ProcessOne
|
||||||
%%%
|
%%%
|
||||||
%%% This program is free software; you can redistribute it and/or
|
%%% This program is free software; you can redistribute it and/or
|
||||||
%%% modify it under the terms of the GNU General Public License as
|
%%% modify it under the terms of the GNU General Public License as
|
||||||
@ -12,10 +12,9 @@
|
|||||||
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
%%% General Public License for more details.
|
%%% General Public License for more details.
|
||||||
%%%
|
%%%
|
||||||
%%% You should have received a copy of the GNU General Public License
|
%%% You should have received a copy of the GNU General Public License along
|
||||||
%%% along with this program; if not, write to the Free Software
|
%%% with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
%%% 02111-1307 USA
|
|
||||||
%%%
|
%%%
|
||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
%%%
|
%%%
|
||||||
%%% ejabberd, Copyright (C) 2002-2013 ProcessOne
|
%%% ejabberd, Copyright (C) 2002-2014 ProcessOne
|
||||||
%%%
|
%%%
|
||||||
%%% This program is free software; you can redistribute it and/or
|
%%% This program is free software; you can redistribute it and/or
|
||||||
%%% modify it under the terms of the GNU General Public License as
|
%%% modify it under the terms of the GNU General Public License as
|
||||||
@ -12,10 +12,9 @@
|
|||||||
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
%%% General Public License for more details.
|
%%% General Public License for more details.
|
||||||
%%%
|
%%%
|
||||||
%%% You should have received a copy of the GNU General Public License
|
%%% You should have received a copy of the GNU General Public License along
|
||||||
%%% along with this program; if not, write to the Free Software
|
%%% with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
%%% 02111-1307 USA
|
|
||||||
%%%
|
%%%
|
||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
%%%
|
%%%
|
||||||
%%% ejabberd, Copyright (C) 2002-2013 ProcessOne
|
%%% ejabberd, Copyright (C) 2002-2014 ProcessOne
|
||||||
%%%
|
%%%
|
||||||
%%% This program is free software; you can redistribute it and/or
|
%%% This program is free software; you can redistribute it and/or
|
||||||
%%% modify it under the terms of the GNU General Public License as
|
%%% modify it under the terms of the GNU General Public License as
|
||||||
@ -12,10 +12,9 @@
|
|||||||
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
%%% General Public License for more details.
|
%%% General Public License for more details.
|
||||||
%%%
|
%%%
|
||||||
%%% You should have received a copy of the GNU General Public License
|
%%% You should have received a copy of the GNU General Public License along
|
||||||
%%% along with this program; if not, write to the Free Software
|
%%% with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
%%% 02111-1307 USA
|
|
||||||
%%%
|
%%%
|
||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
%%%
|
%%%
|
||||||
%%% ejabberd, Copyright (C) 2002-2013 ProcessOne
|
%%% ejabberd, Copyright (C) 2002-2014 ProcessOne
|
||||||
%%%
|
%%%
|
||||||
%%% This program is free software; you can redistribute it and/or
|
%%% This program is free software; you can redistribute it and/or
|
||||||
%%% modify it under the terms of the GNU General Public License as
|
%%% modify it under the terms of the GNU General Public License as
|
||||||
@ -12,10 +12,9 @@
|
|||||||
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
%%% General Public License for more details.
|
%%% General Public License for more details.
|
||||||
%%%
|
%%%
|
||||||
%%% You should have received a copy of the GNU General Public License
|
%%% You should have received a copy of the GNU General Public License along
|
||||||
%%% along with this program; if not, write to the Free Software
|
%%% with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
%%% 02111-1307 USA
|
|
||||||
%%%
|
%%%
|
||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
%%%
|
%%%
|
||||||
%%% ejabberd, Copyright (C) 2002-2013 ProcessOne
|
%%% ejabberd, Copyright (C) 2002-2014 ProcessOne
|
||||||
%%%
|
%%%
|
||||||
%%% This program is free software; you can redistribute it and/or
|
%%% This program is free software; you can redistribute it and/or
|
||||||
%%% modify it under the terms of the GNU General Public License as
|
%%% modify it under the terms of the GNU General Public License as
|
||||||
@ -12,10 +12,9 @@
|
|||||||
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
%%% General Public License for more details.
|
%%% General Public License for more details.
|
||||||
%%%
|
%%%
|
||||||
%%% You should have received a copy of the GNU General Public License
|
%%% You should have received a copy of the GNU General Public License along
|
||||||
%%% along with this program; if not, write to the Free Software
|
%%% with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
%%% 02111-1307 USA
|
|
||||||
%%%
|
%%%
|
||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
%%%
|
%%%
|
||||||
%%% ejabberd, Copyright (C) 2002-2013 ProcessOne
|
%%% ejabberd, Copyright (C) 2002-2014 ProcessOne
|
||||||
%%%
|
%%%
|
||||||
%%% This program is free software; you can redistribute it and/or
|
%%% This program is free software; you can redistribute it and/or
|
||||||
%%% modify it under the terms of the GNU General Public License as
|
%%% modify it under the terms of the GNU General Public License as
|
||||||
@ -12,10 +12,9 @@
|
|||||||
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
%%% General Public License for more details.
|
%%% General Public License for more details.
|
||||||
%%%
|
%%%
|
||||||
%%% You should have received a copy of the GNU General Public License
|
%%% You should have received a copy of the GNU General Public License along
|
||||||
%%% along with this program; if not, write to the Free Software
|
%%% with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
%%% 02111-1307 USA
|
|
||||||
%%%
|
%%%
|
||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
%%%
|
%%%
|
||||||
%%% ejabberd, Copyright (C) 2002-2013 ProcessOne
|
%%% ejabberd, Copyright (C) 2002-2014 ProcessOne
|
||||||
%%%
|
%%%
|
||||||
%%% This program is free software; you can redistribute it and/or
|
%%% This program is free software; you can redistribute it and/or
|
||||||
%%% modify it under the terms of the GNU General Public License as
|
%%% modify it under the terms of the GNU General Public License as
|
||||||
@ -12,10 +12,9 @@
|
|||||||
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
%%% General Public License for more details.
|
%%% General Public License for more details.
|
||||||
%%%
|
%%%
|
||||||
%%% You should have received a copy of the GNU General Public License
|
%%% You should have received a copy of the GNU General Public License along
|
||||||
%%% along with this program; if not, write to the Free Software
|
%%% with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
%%% 02111-1307 USA
|
|
||||||
%%%
|
%%%
|
||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
%%%
|
%%%
|
||||||
%%% ejabberd, Copyright (C) 2002-2013 ProcessOne
|
%%% ejabberd, Copyright (C) 2002-2014 ProcessOne
|
||||||
%%%
|
%%%
|
||||||
%%% This program is free software; you can redistribute it and/or
|
%%% This program is free software; you can redistribute it and/or
|
||||||
%%% modify it under the terms of the GNU General Public License as
|
%%% modify it under the terms of the GNU General Public License as
|
||||||
@ -12,10 +12,9 @@
|
|||||||
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
%%% General Public License for more details.
|
%%% General Public License for more details.
|
||||||
%%%
|
%%%
|
||||||
%%% You should have received a copy of the GNU General Public License
|
%%% You should have received a copy of the GNU General Public License along
|
||||||
%%% along with this program; if not, write to the Free Software
|
%%% with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
%%% 02111-1307 USA
|
|
||||||
%%%
|
%%%
|
||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
%%%
|
%%%
|
||||||
%%% ejabberd, Copyright (C) 2002-2013 ProcessOne
|
%%% ejabberd, Copyright (C) 2002-2014 ProcessOne
|
||||||
%%%
|
%%%
|
||||||
%%% This program is free software; you can redistribute it and/or
|
%%% This program is free software; you can redistribute it and/or
|
||||||
%%% modify it under the terms of the GNU General Public License as
|
%%% modify it under the terms of the GNU General Public License as
|
||||||
@ -12,10 +12,9 @@
|
|||||||
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
%%% General Public License for more details.
|
%%% General Public License for more details.
|
||||||
%%%
|
%%%
|
||||||
%%% You should have received a copy of the GNU General Public License
|
%%% You should have received a copy of the GNU General Public License along
|
||||||
%%% along with this program; if not, write to the Free Software
|
%%% with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
%%% 02111-1307 USA
|
|
||||||
%%%
|
%%%
|
||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
%%%
|
%%%
|
||||||
%%% ejabberd, Copyright (C) 2002-2013 ProcessOne
|
%%% ejabberd, Copyright (C) 2002-2014 ProcessOne
|
||||||
%%%
|
%%%
|
||||||
%%% This program is free software; you can redistribute it and/or
|
%%% This program is free software; you can redistribute it and/or
|
||||||
%%% modify it under the terms of the GNU General Public License as
|
%%% modify it under the terms of the GNU General Public License as
|
||||||
@ -12,10 +12,9 @@
|
|||||||
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
%%% General Public License for more details.
|
%%% General Public License for more details.
|
||||||
%%%
|
%%%
|
||||||
%%% You should have received a copy of the GNU General Public License
|
%%% You should have received a copy of the GNU General Public License along
|
||||||
%%% along with this program; if not, write to the Free Software
|
%%% with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
%%% 02111-1307 USA
|
|
||||||
%%%
|
%%%
|
||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
-define(PRINT(Format, Args), io:format(Format, Args)).
|
-define(PRINT(Format, Args), io:format(Format, Args)).
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
%%%
|
%%%
|
||||||
%%% ejabberd, Copyright (C) 2002-2013 ProcessOne
|
%%% ejabberd, Copyright (C) 2002-2014 ProcessOne
|
||||||
%%%
|
%%%
|
||||||
%%% This program is free software; you can redistribute it and/or
|
%%% This program is free software; you can redistribute it and/or
|
||||||
%%% modify it under the terms of the GNU General Public License as
|
%%% modify it under the terms of the GNU General Public License as
|
||||||
@ -12,10 +12,9 @@
|
|||||||
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
%%% General Public License for more details.
|
%%% General Public License for more details.
|
||||||
%%%
|
%%%
|
||||||
%%% You should have received a copy of the GNU General Public License
|
%%% You should have received a copy of the GNU General Public License along
|
||||||
%%% along with this program; if not, write to the Free Software
|
%%% with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
%%% 02111-1307 USA
|
|
||||||
%%%
|
%%%
|
||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
|
|
||||||
@ -59,6 +58,7 @@
|
|||||||
voice_request_min_interval = 1800 :: non_neg_integer(),
|
voice_request_min_interval = 1800 :: non_neg_integer(),
|
||||||
max_users = ?MAX_USERS_DEFAULT :: non_neg_integer() | none,
|
max_users = ?MAX_USERS_DEFAULT :: non_neg_integer() | none,
|
||||||
logging = false :: boolean(),
|
logging = false :: boolean(),
|
||||||
|
vcard = <<"">> :: boolean(),
|
||||||
captcha_whitelist = (?SETS):empty() :: gb_set()
|
captcha_whitelist = (?SETS):empty() :: gb_set()
|
||||||
}).
|
}).
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
%%%
|
%%%
|
||||||
%%% ejabberd, Copyright (C) 2002-2013 ProcessOne
|
%%% ejabberd, Copyright (C) 2002-2014 ProcessOne
|
||||||
%%%
|
%%%
|
||||||
%%% This program is free software; you can redistribute it and/or
|
%%% This program is free software; you can redistribute it and/or
|
||||||
%%% modify it under the terms of the GNU General Public License as
|
%%% modify it under the terms of the GNU General Public License as
|
||||||
@ -12,10 +12,9 @@
|
|||||||
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
%%% General Public License for more details.
|
%%% General Public License for more details.
|
||||||
%%%
|
%%%
|
||||||
%%% You should have received a copy of the GNU General Public License
|
%%% You should have received a copy of the GNU General Public License along
|
||||||
%%% along with this program; if not, write to the Free Software
|
%%% with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
%%% 02111-1307 USA
|
|
||||||
%%%
|
%%%
|
||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
%%% RFC 1928 constants.
|
%%% RFC 1928 constants.
|
||||||
%%%
|
%%%
|
||||||
%%%
|
%%%
|
||||||
%%% ejabberd, Copyright (C) 2002-2013 ProcessOne
|
%%% ejabberd, Copyright (C) 2002-2014 ProcessOne
|
||||||
%%%
|
%%%
|
||||||
%%% This program is free software; you can redistribute it and/or
|
%%% This program is free software; you can redistribute it and/or
|
||||||
%%% modify it under the terms of the GNU General Public License as
|
%%% modify it under the terms of the GNU General Public License as
|
||||||
@ -14,10 +14,9 @@
|
|||||||
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
%%% General Public License for more details.
|
%%% General Public License for more details.
|
||||||
%%%
|
%%%
|
||||||
%%% You should have received a copy of the GNU General Public License
|
%%% You should have received a copy of the GNU General Public License along
|
||||||
%%% along with this program; if not, write to the Free Software
|
%%% with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
%%% 02111-1307 USA
|
|
||||||
%%%
|
%%%
|
||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
%%%
|
%%%
|
||||||
%%% ejabberd, Copyright (C) 2002-2013 ProcessOne
|
%%% ejabberd, Copyright (C) 2002-2014 ProcessOne
|
||||||
%%%
|
%%%
|
||||||
%%% This program is free software; you can redistribute it and/or
|
%%% This program is free software; you can redistribute it and/or
|
||||||
%%% modify it under the terms of the GNU General Public License as
|
%%% modify it under the terms of the GNU General Public License as
|
||||||
@ -12,10 +12,9 @@
|
|||||||
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
%%% General Public License for more details.
|
%%% General Public License for more details.
|
||||||
%%%
|
%%%
|
||||||
%%% You should have received a copy of the GNU General Public License
|
%%% You should have received a copy of the GNU General Public License along
|
||||||
%%% along with this program; if not, write to the Free Software
|
%%% with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
%%% 02111-1307 USA
|
|
||||||
%%%
|
%%%
|
||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
%%%
|
%%%
|
||||||
%%% ejabberd, Copyright (C) 2002-2013 ProcessOne
|
%%% ejabberd, Copyright (C) 2002-2014 ProcessOne
|
||||||
%%%
|
%%%
|
||||||
%%% This program is free software; you can redistribute it and/or
|
%%% This program is free software; you can redistribute it and/or
|
||||||
%%% modify it under the terms of the GNU General Public License as
|
%%% modify it under the terms of the GNU General Public License as
|
||||||
@ -12,10 +12,9 @@
|
|||||||
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
%%% General Public License for more details.
|
%%% General Public License for more details.
|
||||||
%%%
|
%%%
|
||||||
%%% You should have received a copy of the GNU General Public License
|
%%% You should have received a copy of the GNU General Public License along
|
||||||
%%% along with this program; if not, write to the Free Software
|
%%% with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
%%% 02111-1307 USA
|
|
||||||
%%%
|
%%%
|
||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -13,12 +13,12 @@
|
|||||||
%%%
|
%%%
|
||||||
%%%
|
%%%
|
||||||
%%% The Initial Developer of the Original Code is ProcessOne.
|
%%% The Initial Developer of the Original Code is ProcessOne.
|
||||||
%%% Portions created by ProcessOne are Copyright 2006-2013, ProcessOne
|
%%% Portions created by ProcessOne are Copyright 2006-2014, ProcessOne
|
||||||
%%% All Rights Reserved.''
|
%%% All Rights Reserved.''
|
||||||
%%% This software is copyright 2006-2013, ProcessOne.
|
%%% This software is copyright 2006-2014, ProcessOne.
|
||||||
%%%
|
%%%
|
||||||
%%%
|
%%%
|
||||||
%%% copyright 2006-2013 ProcessOne
|
%%% copyright 2006-2014 ProcessOne
|
||||||
%%%
|
%%%
|
||||||
%%% This file contains pubsub types definition.
|
%%% This file contains pubsub types definition.
|
||||||
%%% ====================================================================
|
%%% ====================================================================
|
||||||
|
682
priv/msgs/he.po
682
priv/msgs/he.po
File diff suppressed because it is too large
Load Diff
@ -43,6 +43,7 @@ HiPE = case lists:keysearch(hipe, 1, Cfg) of
|
|||||||
end,
|
end,
|
||||||
|
|
||||||
Includes = [{i, "include"},
|
Includes = [{i, "include"},
|
||||||
|
{i, filename:join(["deps", "esip", "include"])},
|
||||||
{i, filename:join(["deps", "p1_xml", "include"])}],
|
{i, filename:join(["deps", "p1_xml", "include"])}],
|
||||||
|
|
||||||
SrcDirs = lists:foldl(
|
SrcDirs = lists:foldl(
|
||||||
@ -56,6 +57,7 @@ Deps = [{p1_cache_tab, ".*", {git, "git://github.com/processone/cache_tab"}},
|
|||||||
{p1_tls, ".*", {git, "git://github.com/processone/tls"}},
|
{p1_tls, ".*", {git, "git://github.com/processone/tls"}},
|
||||||
{p1_stringprep, ".*", {git, "git://github.com/processone/stringprep"}},
|
{p1_stringprep, ".*", {git, "git://github.com/processone/stringprep"}},
|
||||||
{p1_xml, ".*", {git, "git://github.com/processone/xml"}},
|
{p1_xml, ".*", {git, "git://github.com/processone/xml"}},
|
||||||
|
{esip, ".*", {git, "git://github.com/processone/p1_sip"}},
|
||||||
{p1_yaml, ".*", {git, "git://github.com/processone/p1_yaml"}},
|
{p1_yaml, ".*", {git, "git://github.com/processone/p1_yaml"}},
|
||||||
{xmlrpc, ".*", {git, "git://github.com/rds13/xmlrpc"}}],
|
{xmlrpc, ".*", {git, "git://github.com/rds13/xmlrpc"}}],
|
||||||
|
|
||||||
@ -77,6 +79,7 @@ XMLFlags = lists:foldl(
|
|||||||
PostHooks = [ConfigureCmd("p1_tls", ""),
|
PostHooks = [ConfigureCmd("p1_tls", ""),
|
||||||
ConfigureCmd("p1_stringprep", ""),
|
ConfigureCmd("p1_stringprep", ""),
|
||||||
ConfigureCmd("p1_yaml", ""),
|
ConfigureCmd("p1_yaml", ""),
|
||||||
|
ConfigureCmd("esip", ""),
|
||||||
ConfigureCmd("p1_xml", XMLFlags)],
|
ConfigureCmd("p1_xml", XMLFlags)],
|
||||||
|
|
||||||
CfgDeps = lists:flatmap(
|
CfgDeps = lists:flatmap(
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* ejabberd, Copyright (C) 2002-2013 ProcessOne
|
* ejabberd, Copyright (C) 2002-2014 ProcessOne
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or
|
* This program is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU General Public License as
|
* modify it under the terms of the GNU General Public License as
|
||||||
@ -11,10 +11,9 @@
|
|||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
* General Public License for more details.
|
* General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License along
|
||||||
* along with this program; if not, write to the Free Software
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
* 02111-1307 USA
|
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* ejabberd, Copyright (C) 2002-2013 ProcessOne
|
* ejabberd, Copyright (C) 2002-2014 ProcessOne
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or
|
* This program is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU General Public License as
|
* modify it under the terms of the GNU General Public License as
|
||||||
@ -11,10 +11,9 @@
|
|||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
* General Public License for more details.
|
* General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License along
|
||||||
* along with this program; if not, write to the Free Software
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
* 02111-1307 USA
|
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* ejabberd, Copyright (C) 2002-2013 ProcessOne
|
* ejabberd, Copyright (C) 2002-2014 ProcessOne
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or
|
* This program is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU General Public License as
|
* modify it under the terms of the GNU General Public License as
|
||||||
@ -11,10 +11,9 @@
|
|||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
* General Public License for more details.
|
* General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License along
|
||||||
* along with this program; if not, write to the Free Software
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
* 02111-1307 USA
|
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
--
|
--
|
||||||
-- ejabberd, Copyright (C) 2002-2013 ProcessOne
|
-- ejabberd, Copyright (C) 2002-2014 ProcessOne
|
||||||
--
|
--
|
||||||
-- This program is free software; you can redistribute it and/or
|
-- This program is free software; you can redistribute it and/or
|
||||||
-- modify it under the terms of the GNU General Public License as
|
-- modify it under the terms of the GNU General Public License as
|
||||||
@ -11,10 +11,9 @@
|
|||||||
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
-- General Public License for more details.
|
-- General Public License for more details.
|
||||||
--
|
--
|
||||||
-- You should have received a copy of the GNU General Public License
|
-- You should have received a copy of the GNU General Public License along
|
||||||
-- along with this program; if not, write to the Free Software
|
-- with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
-- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
-- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
-- 02111-1307 USA
|
|
||||||
--
|
--
|
||||||
|
|
||||||
CREATE TABLE users (
|
CREATE TABLE users (
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
--
|
--
|
||||||
-- ejabberd, Copyright (C) 2002-2013 ProcessOne
|
-- ejabberd, Copyright (C) 2002-2014 ProcessOne
|
||||||
--
|
--
|
||||||
-- This program is free software; you can redistribute it and/or
|
-- This program is free software; you can redistribute it and/or
|
||||||
-- modify it under the terms of the GNU General Public License as
|
-- modify it under the terms of the GNU General Public License as
|
||||||
@ -11,10 +11,9 @@
|
|||||||
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
-- General Public License for more details.
|
-- General Public License for more details.
|
||||||
--
|
--
|
||||||
-- You should have received a copy of the GNU General Public License
|
-- You should have received a copy of the GNU General Public License along
|
||||||
-- along with this program; if not, write to the Free Software
|
-- with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
-- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
-- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
-- 02111-1307 USA
|
|
||||||
--
|
--
|
||||||
|
|
||||||
CREATE TABLE users (
|
CREATE TABLE users (
|
||||||
|
14
src/acl.erl
14
src/acl.erl
@ -5,7 +5,7 @@
|
|||||||
%%% Created : 18 Jan 2003 by Alexey Shchepin <alexey@process-one.net>
|
%%% Created : 18 Jan 2003 by Alexey Shchepin <alexey@process-one.net>
|
||||||
%%%
|
%%%
|
||||||
%%%
|
%%%
|
||||||
%%% ejabberd, Copyright (C) 2002-2013 ProcessOne
|
%%% ejabberd, Copyright (C) 2002-2014 ProcessOne
|
||||||
%%%
|
%%%
|
||||||
%%% This program is free software; you can redistribute it and/or
|
%%% This program is free software; you can redistribute it and/or
|
||||||
%%% modify it under the terms of the GNU General Public License as
|
%%% modify it under the terms of the GNU General Public License as
|
||||||
@ -17,10 +17,9 @@
|
|||||||
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
%%% General Public License for more details.
|
%%% General Public License for more details.
|
||||||
%%%
|
%%%
|
||||||
%%% You should have received a copy of the GNU General Public License
|
%%% You should have received a copy of the GNU General Public License along
|
||||||
%%% along with this program; if not, write to the Free Software
|
%%% with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
%%% 02111-1307 USA
|
|
||||||
%%%
|
%%%
|
||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
|
|
||||||
@ -237,6 +236,8 @@ normalize_spec(Spec) ->
|
|||||||
{server_regexp, SR} -> {server_regexp, b(SR)};
|
{server_regexp, SR} -> {server_regexp, b(SR)};
|
||||||
{server_glob, S} -> {server_glob, b(S)};
|
{server_glob, S} -> {server_glob, b(S)};
|
||||||
{resource_glob, R} -> {resource_glob, b(R)};
|
{resource_glob, R} -> {resource_glob, b(R)};
|
||||||
|
{ip, {Net, Mask}} ->
|
||||||
|
{ip, {Net, Mask}};
|
||||||
{ip, S} ->
|
{ip, S} ->
|
||||||
case parse_ip_netmask(b(S)) of
|
case parse_ip_netmask(b(S)) of
|
||||||
{ok, Net, Mask} ->
|
{ok, Net, Mask} ->
|
||||||
@ -263,9 +264,6 @@ match_rule(Host, Access, JID) ->
|
|||||||
end,
|
end,
|
||||||
case GAccess ++ LAccess of
|
case GAccess ++ LAccess of
|
||||||
[] ->
|
[] ->
|
||||||
?WARNING_MSG("Attempt to match against unspecified "
|
|
||||||
"access rule '~s' (scope: ~s)",
|
|
||||||
[Access, Host]),
|
|
||||||
deny;
|
deny;
|
||||||
AccessList ->
|
AccessList ->
|
||||||
Rules = lists:flatmap(
|
Rules = lists:flatmap(
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
%%% Created : 31 Oct 2005 by Magnus Henoch <henoch@dtek.chalmers.se>
|
%%% Created : 31 Oct 2005 by Magnus Henoch <henoch@dtek.chalmers.se>
|
||||||
%%%
|
%%%
|
||||||
%%%
|
%%%
|
||||||
%%% ejabberd, Copyright (C) 2002-2013 ProcessOne
|
%%% ejabberd, Copyright (C) 2002-2014 ProcessOne
|
||||||
%%%
|
%%%
|
||||||
%%% This program is free software; you can redistribute it and/or
|
%%% This program is free software; you can redistribute it and/or
|
||||||
%%% modify it under the terms of the GNU General Public License as
|
%%% modify it under the terms of the GNU General Public License as
|
||||||
@ -17,10 +17,9 @@
|
|||||||
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
%%% General Public License for more details.
|
%%% General Public License for more details.
|
||||||
%%%
|
%%%
|
||||||
%%% You should have received a copy of the GNU General Public License
|
%%% You should have received a copy of the GNU General Public License along
|
||||||
%%% along with this program; if not, write to the Free Software
|
%%% with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
%%% 02111-1307 USA
|
|
||||||
%%%
|
%%%
|
||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
%%% Created : 8 Mar 2003 by Alexey Shchepin <alexey@process-one.net>
|
%%% Created : 8 Mar 2003 by Alexey Shchepin <alexey@process-one.net>
|
||||||
%%%
|
%%%
|
||||||
%%%
|
%%%
|
||||||
%%% ejabberd, Copyright (C) 2002-2013 ProcessOne
|
%%% ejabberd, Copyright (C) 2002-2014 ProcessOne
|
||||||
%%%
|
%%%
|
||||||
%%% This program is free software; you can redistribute it and/or
|
%%% This program is free software; you can redistribute it and/or
|
||||||
%%% modify it under the terms of the GNU General Public License as
|
%%% modify it under the terms of the GNU General Public License as
|
||||||
@ -17,10 +17,9 @@
|
|||||||
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
%%% General Public License for more details.
|
%%% General Public License for more details.
|
||||||
%%%
|
%%%
|
||||||
%%% You should have received a copy of the GNU General Public License
|
%%% You should have received a copy of the GNU General Public License along
|
||||||
%%% along with this program; if not, write to the Free Software
|
%%% with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
%%% 02111-1307 USA
|
|
||||||
%%%
|
%%%
|
||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
%%% Created : 23 Aug 2005 by Magnus Henoch <henoch@dtek.chalmers.se>
|
%%% Created : 23 Aug 2005 by Magnus Henoch <henoch@dtek.chalmers.se>
|
||||||
%%%
|
%%%
|
||||||
%%%
|
%%%
|
||||||
%%% ejabberd, Copyright (C) 2002-2013 ProcessOne
|
%%% ejabberd, Copyright (C) 2002-2014 ProcessOne
|
||||||
%%%
|
%%%
|
||||||
%%% This program is free software; you can redistribute it and/or
|
%%% This program is free software; you can redistribute it and/or
|
||||||
%%% modify it under the terms of the GNU General Public License as
|
%%% modify it under the terms of the GNU General Public License as
|
||||||
@ -18,10 +18,9 @@
|
|||||||
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
%%% General Public License for more details.
|
%%% General Public License for more details.
|
||||||
%%%
|
%%%
|
||||||
%%% You should have received a copy of the GNU General Public License
|
%%% You should have received a copy of the GNU General Public License along
|
||||||
%%% along with this program; if not, write to the Free Software
|
%%% with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
%%% 02111-1307 USA
|
|
||||||
%%%
|
%%%
|
||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
%%% Created : 11 Mar 2003 by Alexey Shchepin <alexey@sevcom.net>
|
%%% Created : 11 Mar 2003 by Alexey Shchepin <alexey@sevcom.net>
|
||||||
%%%
|
%%%
|
||||||
%%%
|
%%%
|
||||||
%%% ejabberd, Copyright (C) 2002-2013 ProcessOne
|
%%% ejabberd, Copyright (C) 2002-2014 ProcessOne
|
||||||
%%%
|
%%%
|
||||||
%%% This program is free software; you can redistribute it and/or
|
%%% This program is free software; you can redistribute it and/or
|
||||||
%%% modify it under the terms of the GNU General Public License as
|
%%% modify it under the terms of the GNU General Public License as
|
||||||
@ -17,10 +17,9 @@
|
|||||||
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
%%% General Public License for more details.
|
%%% General Public License for more details.
|
||||||
%%%
|
%%%
|
||||||
%%% You should have received a copy of the GNU General Public License
|
%%% You should have received a copy of the GNU General Public License along
|
||||||
%%% along with this program; if not, write to the Free Software
|
%%% with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
%%% 02111-1307 USA
|
|
||||||
%%%
|
%%%
|
||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
%%% Created : 8 Mar 2003 by Alexey Shchepin <alexey@process-one.net>
|
%%% Created : 8 Mar 2003 by Alexey Shchepin <alexey@process-one.net>
|
||||||
%%%
|
%%%
|
||||||
%%%
|
%%%
|
||||||
%%% ejabberd, Copyright (C) 2002-2013 ProcessOne
|
%%% ejabberd, Copyright (C) 2002-2014 ProcessOne
|
||||||
%%%
|
%%%
|
||||||
%%% This program is free software; you can redistribute it and/or
|
%%% This program is free software; you can redistribute it and/or
|
||||||
%%% modify it under the terms of the GNU General Public License as
|
%%% modify it under the terms of the GNU General Public License as
|
||||||
@ -17,10 +17,9 @@
|
|||||||
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
%%% General Public License for more details.
|
%%% General Public License for more details.
|
||||||
%%%
|
%%%
|
||||||
%%% You should have received a copy of the GNU General Public License
|
%%% You should have received a copy of the GNU General Public License along
|
||||||
%%% along with this program; if not, write to the Free Software
|
%%% with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
%%% 02111-1307 USA
|
|
||||||
%%%
|
%%%
|
||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
%%% Created : 7 Aug 2011 by Stephen Röttger <stephen.roettger@googlemail.com>
|
%%% Created : 7 Aug 2011 by Stephen Röttger <stephen.roettger@googlemail.com>
|
||||||
%%%
|
%%%
|
||||||
%%%
|
%%%
|
||||||
%%% ejabberd, Copyright (C) 2002-2013 ProcessOne
|
%%% ejabberd, Copyright (C) 2002-2014 ProcessOne
|
||||||
%%%
|
%%%
|
||||||
%%% This program is free software; you can redistribute it and/or
|
%%% This program is free software; you can redistribute it and/or
|
||||||
%%% modify it under the terms of the GNU General Public License as
|
%%% modify it under the terms of the GNU General Public License as
|
||||||
@ -17,10 +17,9 @@
|
|||||||
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
%%% General Public License for more details.
|
%%% General Public License for more details.
|
||||||
%%%
|
%%%
|
||||||
%%% You should have received a copy of the GNU General Public License
|
%%% You should have received a copy of the GNU General Public License along
|
||||||
%%% along with this program; if not, write to the Free Software
|
%%% with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
%%% 02111-1307 USA
|
|
||||||
%%%
|
%%%
|
||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
%%% Created : 16 Nov 2002 by Alexey Shchepin <alexey@process-one.net>
|
%%% Created : 16 Nov 2002 by Alexey Shchepin <alexey@process-one.net>
|
||||||
%%%
|
%%%
|
||||||
%%%
|
%%%
|
||||||
%%% ejabberd, Copyright (C) 2002-2013 ProcessOne
|
%%% ejabberd, Copyright (C) 2002-2014 ProcessOne
|
||||||
%%%
|
%%%
|
||||||
%%% This program is free software; you can redistribute it and/or
|
%%% This program is free software; you can redistribute it and/or
|
||||||
%%% modify it under the terms of the GNU General Public License as
|
%%% modify it under the terms of the GNU General Public License as
|
||||||
@ -17,10 +17,9 @@
|
|||||||
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
%%% General Public License for more details.
|
%%% General Public License for more details.
|
||||||
%%%
|
%%%
|
||||||
%%% You should have received a copy of the GNU General Public License
|
%%% You should have received a copy of the GNU General Public License along
|
||||||
%%% along with this program; if not, write to the Free Software
|
%%% with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
%%% 02111-1307 USA
|
|
||||||
%%%
|
%%%
|
||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
%%% Created : 7 May 2006 by Mickael Remond <mremond@process-one.net>
|
%%% Created : 7 May 2006 by Mickael Remond <mremond@process-one.net>
|
||||||
%%%
|
%%%
|
||||||
%%%
|
%%%
|
||||||
%%% ejabberd, Copyright (C) 2002-2013 ProcessOne
|
%%% ejabberd, Copyright (C) 2002-2014 ProcessOne
|
||||||
%%%
|
%%%
|
||||||
%%% This program is free software; you can redistribute it and/or
|
%%% This program is free software; you can redistribute it and/or
|
||||||
%%% modify it under the terms of the GNU General Public License as
|
%%% modify it under the terms of the GNU General Public License as
|
||||||
@ -17,10 +17,9 @@
|
|||||||
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
%%% General Public License for more details.
|
%%% General Public License for more details.
|
||||||
%%%
|
%%%
|
||||||
%%% You should have received a copy of the GNU General Public License
|
%%% You should have received a copy of the GNU General Public License along
|
||||||
%%% along with this program; if not, write to the Free Software
|
%%% with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
%%% 02111-1307 USA
|
|
||||||
%%%
|
%%%
|
||||||
%%%-------------------------------------------------------------------
|
%%%-------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
%%% Created : 31 Jan 2003 by Alexey Shchepin <alexey@process-one.net>
|
%%% Created : 31 Jan 2003 by Alexey Shchepin <alexey@process-one.net>
|
||||||
%%%
|
%%%
|
||||||
%%%
|
%%%
|
||||||
%%% ejabberd, Copyright (C) 2002-2013 ProcessOne
|
%%% ejabberd, Copyright (C) 2002-2014 ProcessOne
|
||||||
%%%
|
%%%
|
||||||
%%% This program is free software; you can redistribute it and/or
|
%%% This program is free software; you can redistribute it and/or
|
||||||
%%% modify it under the terms of the GNU General Public License as
|
%%% modify it under the terms of the GNU General Public License as
|
||||||
@ -17,10 +17,9 @@
|
|||||||
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
%%% General Public License for more details.
|
%%% General Public License for more details.
|
||||||
%%%
|
%%%
|
||||||
%%% You should have received a copy of the GNU General Public License
|
%%% You should have received a copy of the GNU General Public License along
|
||||||
%%% along with this program; if not, write to the Free Software
|
%%% with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
%%% 02111-1307 USA
|
|
||||||
%%%
|
%%%
|
||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
%%% Created : 23 Nov 2002 by Alexey Shchepin <alexey@process-one.net>
|
%%% Created : 23 Nov 2002 by Alexey Shchepin <alexey@process-one.net>
|
||||||
%%%
|
%%%
|
||||||
%%%
|
%%%
|
||||||
%%% ejabberd, Copyright (C) 2002-2013 ProcessOne
|
%%% ejabberd, Copyright (C) 2002-2014 ProcessOne
|
||||||
%%%
|
%%%
|
||||||
%%% This program is free software; you can redistribute it and/or
|
%%% This program is free software; you can redistribute it and/or
|
||||||
%%% modify it under the terms of the GNU General Public License as
|
%%% modify it under the terms of the GNU General Public License as
|
||||||
@ -17,10 +17,9 @@
|
|||||||
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
%%% General Public License for more details.
|
%%% General Public License for more details.
|
||||||
%%%
|
%%%
|
||||||
%%% You should have received a copy of the GNU General Public License
|
%%% You should have received a copy of the GNU General Public License along
|
||||||
%%% along with this program; if not, write to the Free Software
|
%%% with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
%%% 02111-1307 USA
|
|
||||||
%%%
|
%%%
|
||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
%%% Created : 17 Feb 2006 by Mickael Remond <mremond@process-one.net>
|
%%% Created : 17 Feb 2006 by Mickael Remond <mremond@process-one.net>
|
||||||
%%%
|
%%%
|
||||||
%%%
|
%%%
|
||||||
%%% ejabberd, Copyright (C) 2002-2013 ProcessOne
|
%%% ejabberd, Copyright (C) 2002-2014 ProcessOne
|
||||||
%%%
|
%%%
|
||||||
%%% This program is free software; you can redistribute it and/or
|
%%% This program is free software; you can redistribute it and/or
|
||||||
%%% modify it under the terms of the GNU General Public License as
|
%%% modify it under the terms of the GNU General Public License as
|
||||||
@ -17,10 +17,9 @@
|
|||||||
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
%%% General Public License for more details.
|
%%% General Public License for more details.
|
||||||
%%%
|
%%%
|
||||||
%%% You should have received a copy of the GNU General Public License
|
%%% You should have received a copy of the GNU General Public License along
|
||||||
%%% along with this program; if not, write to the Free Software
|
%%% with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
%%% 02111-1307 USA
|
|
||||||
%%%
|
%%%
|
||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
%%% Created : 12 Dec 2004 by Alexey Shchepin <alexey@process-one.net>
|
%%% Created : 12 Dec 2004 by Alexey Shchepin <alexey@process-one.net>
|
||||||
%%%
|
%%%
|
||||||
%%%
|
%%%
|
||||||
%%% ejabberd, Copyright (C) 2002-2013 ProcessOne
|
%%% ejabberd, Copyright (C) 2002-2014 ProcessOne
|
||||||
%%%
|
%%%
|
||||||
%%% This program is free software; you can redistribute it and/or
|
%%% This program is free software; you can redistribute it and/or
|
||||||
%%% modify it under the terms of the GNU General Public License as
|
%%% modify it under the terms of the GNU General Public License as
|
||||||
@ -17,10 +17,9 @@
|
|||||||
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
%%% General Public License for more details.
|
%%% General Public License for more details.
|
||||||
%%%
|
%%%
|
||||||
%%% You should have received a copy of the GNU General Public License
|
%%% You should have received a copy of the GNU General Public License along
|
||||||
%%% along with this program; if not, write to the Free Software
|
%%% with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
%%% 02111-1307 USA
|
|
||||||
%%%
|
%%%
|
||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
|
|
||||||
@ -173,7 +172,9 @@ remove_user(User, Server, Password) ->
|
|||||||
get_cache_option(Host) ->
|
get_cache_option(Host) ->
|
||||||
case ejabberd_config:get_option(
|
case ejabberd_config:get_option(
|
||||||
{extauth_cache, Host},
|
{extauth_cache, Host},
|
||||||
fun(I) when is_integer(I), I > 0 -> I end) of
|
fun(false) -> undefined;
|
||||||
|
(I) when is_integer(I), I >= 0 -> I
|
||||||
|
end) of
|
||||||
undefined -> false;
|
undefined -> false;
|
||||||
CacheTime -> {true, CacheTime}
|
CacheTime -> {true, CacheTime}
|
||||||
end.
|
end.
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
%%% Created : 12 Dec 2004 by Alexey Shchepin <alexey@process-one.net>
|
%%% Created : 12 Dec 2004 by Alexey Shchepin <alexey@process-one.net>
|
||||||
%%%
|
%%%
|
||||||
%%%
|
%%%
|
||||||
%%% ejabberd, Copyright (C) 2002-2013 ProcessOne
|
%%% ejabberd, Copyright (C) 2002-2014 ProcessOne
|
||||||
%%%
|
%%%
|
||||||
%%% This program is free software; you can redistribute it and/or
|
%%% This program is free software; you can redistribute it and/or
|
||||||
%%% modify it under the terms of the GNU General Public License as
|
%%% modify it under the terms of the GNU General Public License as
|
||||||
@ -17,10 +17,9 @@
|
|||||||
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
%%% General Public License for more details.
|
%%% General Public License for more details.
|
||||||
%%%
|
%%%
|
||||||
%%% You should have received a copy of the GNU General Public License
|
%%% You should have received a copy of the GNU General Public License along
|
||||||
%%% along with this program; if not, write to the Free Software
|
%%% with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
%%% 02111-1307 USA
|
|
||||||
%%%
|
%%%
|
||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
%%% Created : 12 Dec 2004 by Alexey Shchepin <alexey@process-one.net>
|
%%% Created : 12 Dec 2004 by Alexey Shchepin <alexey@process-one.net>
|
||||||
%%%
|
%%%
|
||||||
%%%
|
%%%
|
||||||
%%% ejabberd, Copyright (C) 2002-2013 ProcessOne
|
%%% ejabberd, Copyright (C) 2002-2014 ProcessOne
|
||||||
%%%
|
%%%
|
||||||
%%% This program is free software; you can redistribute it and/or
|
%%% This program is free software; you can redistribute it and/or
|
||||||
%%% modify it under the terms of the GNU General Public License as
|
%%% modify it under the terms of the GNU General Public License as
|
||||||
@ -17,10 +17,9 @@
|
|||||||
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
%%% General Public License for more details.
|
%%% General Public License for more details.
|
||||||
%%%
|
%%%
|
||||||
%%% You should have received a copy of the GNU General Public License
|
%%% You should have received a copy of the GNU General Public License along
|
||||||
%%% along with this program; if not, write to the Free Software
|
%%% with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
%%% 02111-1307 USA
|
|
||||||
%%%
|
%%%
|
||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
%%% Created : 12 Dec 2004 by Alexey Shchepin <alexey@process-one.net>
|
%%% Created : 12 Dec 2004 by Alexey Shchepin <alexey@process-one.net>
|
||||||
%%%
|
%%%
|
||||||
%%%
|
%%%
|
||||||
%%% ejabberd, Copyright (C) 2002-2013 ProcessOne
|
%%% ejabberd, Copyright (C) 2002-2014 ProcessOne
|
||||||
%%%
|
%%%
|
||||||
%%% This program is free software; you can redistribute it and/or
|
%%% This program is free software; you can redistribute it and/or
|
||||||
%%% modify it under the terms of the GNU General Public License as
|
%%% modify it under the terms of the GNU General Public License as
|
||||||
@ -17,10 +17,9 @@
|
|||||||
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
%%% General Public License for more details.
|
%%% General Public License for more details.
|
||||||
%%%
|
%%%
|
||||||
%%% You should have received a copy of the GNU General Public License
|
%%% You should have received a copy of the GNU General Public License along
|
||||||
%%% along with this program; if not, write to the Free Software
|
%%% with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
%%% 02111-1307 USA
|
|
||||||
%%%
|
%%%
|
||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
|
|
||||||
@ -213,6 +212,7 @@ is_user_exists(User, Server) ->
|
|||||||
true; %% Account exists
|
true; %% Account exists
|
||||||
{selected, [<<"password">>], []} ->
|
{selected, [<<"password">>], []} ->
|
||||||
false; %% Account does not exist
|
false; %% Account does not exist
|
||||||
|
{error, unknownhost} -> false;
|
||||||
{error, Error} -> {error, Error}
|
{error, Error} -> {error, Error}
|
||||||
catch
|
catch
|
||||||
_:B -> {error, B}
|
_:B -> {error, B}
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
%%% Created : 5 Jul 2007 by Evgeniy Khramtsov <xram@jabber.ru>
|
%%% Created : 5 Jul 2007 by Evgeniy Khramtsov <xram@jabber.ru>
|
||||||
%%%
|
%%%
|
||||||
%%%
|
%%%
|
||||||
%%% ejabberd, Copyright (C) 2002-2013 ProcessOne
|
%%% ejabberd, Copyright (C) 2002-2014 ProcessOne
|
||||||
%%%
|
%%%
|
||||||
%%% This program is free software; you can redistribute it and/or
|
%%% This program is free software; you can redistribute it and/or
|
||||||
%%% modify it under the terms of the GNU General Public License as
|
%%% modify it under the terms of the GNU General Public License as
|
||||||
@ -17,10 +17,9 @@
|
|||||||
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
%%% General Public License for more details.
|
%%% General Public License for more details.
|
||||||
%%%
|
%%%
|
||||||
%%% You should have received a copy of the GNU General Public License
|
%%% You should have received a copy of the GNU General Public License along
|
||||||
%%% along with this program; if not, write to the Free Software
|
%%% with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
%%% 02111-1307 USA
|
|
||||||
%%%
|
%%%
|
||||||
%%%-------------------------------------------------------------------
|
%%%-------------------------------------------------------------------
|
||||||
-module(ejabberd_auth_pam).
|
-module(ejabberd_auth_pam).
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
%%% Created : 16 Nov 2002 by Alexey Shchepin <alexey@process-one.net>
|
%%% Created : 16 Nov 2002 by Alexey Shchepin <alexey@process-one.net>
|
||||||
%%%
|
%%%
|
||||||
%%%
|
%%%
|
||||||
%%% ejabberd, Copyright (C) 2002-2013 ProcessOne
|
%%% ejabberd, Copyright (C) 2002-2014 ProcessOne
|
||||||
%%%
|
%%%
|
||||||
%%% This program is free software; you can redistribute it and/or
|
%%% This program is free software; you can redistribute it and/or
|
||||||
%%% modify it under the terms of the GNU General Public License as
|
%%% modify it under the terms of the GNU General Public License as
|
||||||
@ -17,10 +17,9 @@
|
|||||||
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
%%% General Public License for more details.
|
%%% General Public License for more details.
|
||||||
%%%
|
%%%
|
||||||
%%% You should have received a copy of the GNU General Public License
|
%%% You should have received a copy of the GNU General Public License along
|
||||||
%%% along with this program; if not, write to the Free Software
|
%%% with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
%%% 02111-1307 USA
|
|
||||||
%%%
|
%%%
|
||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
|
|
||||||
@ -118,7 +117,7 @@
|
|||||||
mgmt_resend,
|
mgmt_resend,
|
||||||
mgmt_stanzas_in = 0,
|
mgmt_stanzas_in = 0,
|
||||||
mgmt_stanzas_out = 0,
|
mgmt_stanzas_out = 0,
|
||||||
lang}).
|
lang = <<"">>}).
|
||||||
|
|
||||||
%-define(DBGFSM, true).
|
%-define(DBGFSM, true).
|
||||||
|
|
||||||
@ -288,11 +287,20 @@ init([{SockMod, Socket}, Opts]) ->
|
|||||||
(_) -> false
|
(_) -> false
|
||||||
end,
|
end,
|
||||||
Opts),
|
Opts),
|
||||||
TLSOpts2 = case proplists:get_bool(tls_compression, Opts) of
|
TLSOpts2 = case lists:keysearch(protocol_options, 1, Opts) of
|
||||||
false -> [compression_none | TLSOpts1];
|
{value, {_, O}} ->
|
||||||
true -> TLSOpts1
|
[_|ProtocolOptions] = lists:foldl(
|
||||||
|
fun(X, Acc) -> X ++ Acc end, [],
|
||||||
|
[["|" | binary_to_list(Opt)] || Opt <- O, is_binary(Opt)]
|
||||||
|
),
|
||||||
|
[{protocol_options, iolist_to_binary(ProtocolOptions)} | TLSOpts1];
|
||||||
|
_ -> TLSOpts1
|
||||||
end,
|
end,
|
||||||
TLSOpts = [verify_none | TLSOpts2],
|
TLSOpts3 = case proplists:get_bool(tls_compression, Opts) of
|
||||||
|
false -> [compression_none | TLSOpts2];
|
||||||
|
true -> TLSOpts2
|
||||||
|
end,
|
||||||
|
TLSOpts = [verify_none | TLSOpts3],
|
||||||
StreamMgmtEnabled = proplists:get_value(stream_management, Opts, true),
|
StreamMgmtEnabled = proplists:get_value(stream_management, Opts, true),
|
||||||
StreamMgmtState = if StreamMgmtEnabled -> inactive;
|
StreamMgmtState = if StreamMgmtEnabled -> inactive;
|
||||||
true -> disabled
|
true -> disabled
|
||||||
@ -617,8 +625,7 @@ wait_for_auth({xmlstreamelement, El}, StateData) ->
|
|||||||
?INFO_MSG("(~w) Accepted legacy authentication for ~s by ~p",
|
?INFO_MSG("(~w) Accepted legacy authentication for ~s by ~p",
|
||||||
[StateData#state.socket,
|
[StateData#state.socket,
|
||||||
jlib:jid_to_string(JID), AuthModule]),
|
jlib:jid_to_string(JID), AuthModule]),
|
||||||
Conn = (StateData#state.sockmod):get_conn_type(
|
Conn = get_conn_type(StateData),
|
||||||
StateData#state.socket),
|
|
||||||
Info = [{ip, StateData#state.ip}, {conn, Conn},
|
Info = [{ip, StateData#state.ip}, {conn, Conn},
|
||||||
{auth_module, AuthModule}],
|
{auth_module, AuthModule}],
|
||||||
Res = jlib:make_result_iq_reply(
|
Res = jlib:make_result_iq_reply(
|
||||||
@ -1353,14 +1360,19 @@ handle_info({send_text, Text}, StateName, StateData) ->
|
|||||||
send_text(StateData, Text),
|
send_text(StateData, Text),
|
||||||
ejabberd_hooks:run(c2s_loop_debug, [Text]),
|
ejabberd_hooks:run(c2s_loop_debug, [Text]),
|
||||||
fsm_next_state(StateName, StateData);
|
fsm_next_state(StateName, StateData);
|
||||||
handle_info(replaced, _StateName, StateData) ->
|
handle_info(replaced, StateName, StateData) ->
|
||||||
Lang = StateData#state.lang,
|
Lang = StateData#state.lang,
|
||||||
send_element(StateData,
|
Xmlelement = ?SERRT_CONFLICT(Lang, <<"Replaced by new connection">>),
|
||||||
?SERRT_CONFLICT(Lang,
|
handle_info({kick, replaced, Xmlelement}, StateName, StateData);
|
||||||
<<"Replaced by new connection">>)),
|
handle_info(disconnect, StateName, StateData) ->
|
||||||
|
Lang = StateData#state.lang,
|
||||||
|
Xmlelement = ?SERRT_POLICY_VIOLATION(Lang, <<"has been kicked">>),
|
||||||
|
handle_info({kick, kicked_by_admin, Xmlelement}, StateName, StateData);
|
||||||
|
handle_info({kick, Reason, Xmlelement}, _StateName, StateData) ->
|
||||||
|
send_element(StateData, Xmlelement),
|
||||||
send_trailer(StateData),
|
send_trailer(StateData),
|
||||||
{stop, normal,
|
{stop, normal,
|
||||||
StateData#state{authenticated = replaced}};
|
StateData#state{authenticated = Reason}};
|
||||||
handle_info({route, _From, _To, {broadcast, Data}},
|
handle_info({route, _From, _To, {broadcast, Data}},
|
||||||
StateName, StateData) ->
|
StateName, StateData) ->
|
||||||
?DEBUG("broadcast~n~p~n", [Data]),
|
?DEBUG("broadcast~n~p~n", [Data]),
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
%%% Created : 2 Nov 2007 by Mickael Remond <mremond@process-one.net>
|
%%% Created : 2 Nov 2007 by Mickael Remond <mremond@process-one.net>
|
||||||
%%%
|
%%%
|
||||||
%%%
|
%%%
|
||||||
%%% ejabberd, Copyright (C) 2002-2013 ProcessOne
|
%%% ejabberd, Copyright (C) 2002-2014 ProcessOne
|
||||||
%%%
|
%%%
|
||||||
%%% This program is free software; you can redistribute it and/or
|
%%% This program is free software; you can redistribute it and/or
|
||||||
%%% modify it under the terms of the GNU General Public License as
|
%%% modify it under the terms of the GNU General Public License as
|
||||||
@ -18,10 +18,9 @@
|
|||||||
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
%%% General Public License for more details.
|
%%% General Public License for more details.
|
||||||
%%%
|
%%%
|
||||||
%%% You should have received a copy of the GNU General Public License
|
%%% You should have received a copy of the GNU General Public License along
|
||||||
%%% along with this program; if not, write to the Free Software
|
%%% with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
%%% 02111-1307 USA
|
|
||||||
%%%
|
%%%
|
||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
%%% Created : 26 Apr 2008 by Evgeniy Khramtsov <xramtsov@gmail.com>
|
%%% Created : 26 Apr 2008 by Evgeniy Khramtsov <xramtsov@gmail.com>
|
||||||
%%%
|
%%%
|
||||||
%%%
|
%%%
|
||||||
%%% ejabberd, Copyright (C) 2002-2013 ProcessOne
|
%%% ejabberd, Copyright (C) 2002-2014 ProcessOne
|
||||||
%%%
|
%%%
|
||||||
%%% This program is free software; you can redistribute it and/or
|
%%% This program is free software; you can redistribute it and/or
|
||||||
%%% modify it under the terms of the GNU General Public License as
|
%%% modify it under the terms of the GNU General Public License as
|
||||||
@ -17,10 +17,9 @@
|
|||||||
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
%%% General Public License for more details.
|
%%% General Public License for more details.
|
||||||
%%%
|
%%%
|
||||||
%%% You should have received a copy of the GNU General Public License
|
%%% You should have received a copy of the GNU General Public License along
|
||||||
%%% along with this program; if not, write to the Free Software
|
%%% with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
%%% 02111-1307 USA
|
|
||||||
%%%
|
%%%
|
||||||
%%%-------------------------------------------------------------------
|
%%%-------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
%%% Created : 20 May 2008 by Badlop <badlop@process-one.net>
|
%%% Created : 20 May 2008 by Badlop <badlop@process-one.net>
|
||||||
%%%
|
%%%
|
||||||
%%%
|
%%%
|
||||||
%%% ejabberd, Copyright (C) 2002-2013 ProcessOne
|
%%% ejabberd, Copyright (C) 2002-2014 ProcessOne
|
||||||
%%%
|
%%%
|
||||||
%%% This program is free software; you can redistribute it and/or
|
%%% This program is free software; you can redistribute it and/or
|
||||||
%%% modify it under the terms of the GNU General Public License as
|
%%% modify it under the terms of the GNU General Public License as
|
||||||
@ -17,10 +17,9 @@
|
|||||||
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
%%% General Public License for more details.
|
%%% General Public License for more details.
|
||||||
%%%
|
%%%
|
||||||
%%% You should have received a copy of the GNU General Public License
|
%%% You should have received a copy of the GNU General Public License along
|
||||||
%%% along with this program; if not, write to the Free Software
|
%%% with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
%%% 02111-1307 USA
|
|
||||||
%%%
|
%%%
|
||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
%%% Created : 14 Dec 2002 by Alexey Shchepin <alexey@process-one.net>
|
%%% Created : 14 Dec 2002 by Alexey Shchepin <alexey@process-one.net>
|
||||||
%%%
|
%%%
|
||||||
%%%
|
%%%
|
||||||
%%% ejabberd, Copyright (C) 2002-2013 ProcessOne
|
%%% ejabberd, Copyright (C) 2002-2014 ProcessOne
|
||||||
%%%
|
%%%
|
||||||
%%% This program is free software; you can redistribute it and/or
|
%%% This program is free software; you can redistribute it and/or
|
||||||
%%% modify it under the terms of the GNU General Public License as
|
%%% modify it under the terms of the GNU General Public License as
|
||||||
@ -17,10 +17,9 @@
|
|||||||
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
%%% General Public License for more details.
|
%%% General Public License for more details.
|
||||||
%%%
|
%%%
|
||||||
%%% You should have received a copy of the GNU General Public License
|
%%% You should have received a copy of the GNU General Public License along
|
||||||
%%% along with this program; if not, write to the Free Software
|
%%% with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
%%% 02111-1307 USA
|
|
||||||
%%%
|
%%%
|
||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
%%% Created : 11 Jan 2004 by Alexey Shchepin <alexey@process-one.net>
|
%%% Created : 11 Jan 2004 by Alexey Shchepin <alexey@process-one.net>
|
||||||
%%%
|
%%%
|
||||||
%%%
|
%%%
|
||||||
%%% ejabberd, Copyright (C) 2002-2013 ProcessOne
|
%%% ejabberd, Copyright (C) 2002-2014 ProcessOne
|
||||||
%%%
|
%%%
|
||||||
%%% This program is free software; you can redistribute it and/or
|
%%% This program is free software; you can redistribute it and/or
|
||||||
%%% modify it under the terms of the GNU General Public License as
|
%%% modify it under the terms of the GNU General Public License as
|
||||||
@ -17,10 +17,9 @@
|
|||||||
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
%%% General Public License for more details.
|
%%% General Public License for more details.
|
||||||
%%%
|
%%%
|
||||||
%%% You should have received a copy of the GNU General Public License
|
%%% You should have received a copy of the GNU General Public License along
|
||||||
%%% along with this program; if not, write to the Free Software
|
%%% with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
%%% 02111-1307 USA
|
|
||||||
%%%
|
%%%
|
||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
|
|
||||||
@ -419,6 +418,7 @@ is_supported_args(Args) ->
|
|||||||
fun({_Name, Format}) ->
|
fun({_Name, Format}) ->
|
||||||
(Format == integer)
|
(Format == integer)
|
||||||
or (Format == string)
|
or (Format == string)
|
||||||
|
or (Format == binary)
|
||||||
end,
|
end,
|
||||||
Args).
|
Args).
|
||||||
|
|
||||||
@ -565,7 +565,7 @@ format_command_lines(CALD, MaxCmdLen, MaxC, ShCode, dual) ->
|
|||||||
lists:map(
|
lists:map(
|
||||||
fun({Cmd, Args, CmdArgsL, Desc}) ->
|
fun({Cmd, Args, CmdArgsL, Desc}) ->
|
||||||
DescFmt = prepare_description(MaxCmdLen+4, MaxC, Desc),
|
DescFmt = prepare_description(MaxCmdLen+4, MaxC, Desc),
|
||||||
[" ", ?B(Cmd), " ", [[?U(Arg), " "] || Arg <- Args],
|
[" ", ?B(Cmd), " ", [[?U(Arg), " "] || Arg <- Args],
|
||||||
string:chars($\s, MaxCmdLen - CmdArgsL + 1),
|
string:chars($\s, MaxCmdLen - CmdArgsL + 1),
|
||||||
DescFmt, "\n"]
|
DescFmt, "\n"]
|
||||||
end, CALD);
|
end, CALD);
|
||||||
@ -574,7 +574,7 @@ format_command_lines(CALD, _MaxCmdLen, MaxC, ShCode, long) ->
|
|||||||
lists:map(
|
lists:map(
|
||||||
fun({Cmd, Args, _CmdArgsL, Desc}) ->
|
fun({Cmd, Args, _CmdArgsL, Desc}) ->
|
||||||
DescFmt = prepare_description(8, MaxC, Desc),
|
DescFmt = prepare_description(8, MaxC, Desc),
|
||||||
["\n ", ?B(Cmd), " ", [[?U(Arg), " "] || Arg <- Args], "\n", " ",
|
["\n ", ?B(Cmd), " ", [[?U(Arg), " "] || Arg <- Args], "\n", " ",
|
||||||
DescFmt, "\n"]
|
DescFmt, "\n"]
|
||||||
end, CALD).
|
end, CALD).
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
%%% Created : 23 Aug 2006 by Alexey Shchepin <alexey@process-one.net>
|
%%% Created : 23 Aug 2006 by Alexey Shchepin <alexey@process-one.net>
|
||||||
%%%
|
%%%
|
||||||
%%%
|
%%%
|
||||||
%%% ejabberd, Copyright (C) 2002-2013 ProcessOne
|
%%% ejabberd, Copyright (C) 2002-2014 ProcessOne
|
||||||
%%%
|
%%%
|
||||||
%%% This program is free software; you can redistribute it and/or
|
%%% This program is free software; you can redistribute it and/or
|
||||||
%%% modify it under the terms of the GNU General Public License as
|
%%% modify it under the terms of the GNU General Public License as
|
||||||
@ -17,10 +17,9 @@
|
|||||||
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
%%% General Public License for more details.
|
%%% General Public License for more details.
|
||||||
%%%
|
%%%
|
||||||
%%% You should have received a copy of the GNU General Public License
|
%%% You should have received a copy of the GNU General Public License along
|
||||||
%%% along with this program; if not, write to the Free Software
|
%%% with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
%%% 02111-1307 USA
|
|
||||||
%%%
|
%%%
|
||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
%%% Created : 8 Aug 2004 by Alexey Shchepin <alexey@process-one.net>
|
%%% Created : 8 Aug 2004 by Alexey Shchepin <alexey@process-one.net>
|
||||||
%%%
|
%%%
|
||||||
%%%
|
%%%
|
||||||
%%% ejabberd, Copyright (C) 2002-2013 ProcessOne
|
%%% ejabberd, Copyright (C) 2002-2014 ProcessOne
|
||||||
%%%
|
%%%
|
||||||
%%% This program is free software; you can redistribute it and/or
|
%%% This program is free software; you can redistribute it and/or
|
||||||
%%% modify it under the terms of the GNU General Public License as
|
%%% modify it under the terms of the GNU General Public License as
|
||||||
@ -17,10 +17,9 @@
|
|||||||
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
%%% General Public License for more details.
|
%%% General Public License for more details.
|
||||||
%%%
|
%%%
|
||||||
%%% You should have received a copy of the GNU General Public License
|
%%% You should have received a copy of the GNU General Public License along
|
||||||
%%% along with this program; if not, write to the Free Software
|
%%% with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
%%% 02111-1307 USA
|
|
||||||
%%%
|
%%%
|
||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
%%% Created : 27 Feb 2004 by Alexey Shchepin <alexey@process-one.net>
|
%%% Created : 27 Feb 2004 by Alexey Shchepin <alexey@process-one.net>
|
||||||
%%%
|
%%%
|
||||||
%%%
|
%%%
|
||||||
%%% ejabberd, Copyright (C) 2002-2013 ProcessOne
|
%%% ejabberd, Copyright (C) 2002-2014 ProcessOne
|
||||||
%%%
|
%%%
|
||||||
%%% This program is free software; you can redistribute it and/or
|
%%% This program is free software; you can redistribute it and/or
|
||||||
%%% modify it under the terms of the GNU General Public License as
|
%%% modify it under the terms of the GNU General Public License as
|
||||||
@ -17,10 +17,9 @@
|
|||||||
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
%%% General Public License for more details.
|
%%% General Public License for more details.
|
||||||
%%%
|
%%%
|
||||||
%%% You should have received a copy of the GNU General Public License
|
%%% You should have received a copy of the GNU General Public License along
|
||||||
%%% along with this program; if not, write to the Free Software
|
%%% with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
%%% 02111-1307 USA
|
|
||||||
%%%
|
%%%
|
||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
|
|
||||||
@ -51,7 +50,7 @@
|
|||||||
request_auth,
|
request_auth,
|
||||||
request_keepalive,
|
request_keepalive,
|
||||||
request_content_length,
|
request_content_length,
|
||||||
request_lang = "en",
|
request_lang = <<"en">>,
|
||||||
%% XXX bard: request handlers are configured in
|
%% XXX bard: request handlers are configured in
|
||||||
%% ejabberd.cfg under the HTTP service. For example,
|
%% ejabberd.cfg under the HTTP service. For example,
|
||||||
%% to have the module test_web handle requests with
|
%% to have the module test_web handle requests with
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
%%% Created : 4 Mar 2004 by Alexey Shchepin <alexey@process-one.net>
|
%%% Created : 4 Mar 2004 by Alexey Shchepin <alexey@process-one.net>
|
||||||
%%%
|
%%%
|
||||||
%%%
|
%%%
|
||||||
%%% ejabberd, Copyright (C) 2002-2013 ProcessOne
|
%%% ejabberd, Copyright (C) 2002-2014 ProcessOne
|
||||||
%%%
|
%%%
|
||||||
%%% This program is free software; you can redistribute it and/or
|
%%% This program is free software; you can redistribute it and/or
|
||||||
%%% modify it under the terms of the GNU General Public License as
|
%%% modify it under the terms of the GNU General Public License as
|
||||||
@ -17,10 +17,9 @@
|
|||||||
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
%%% General Public License for more details.
|
%%% General Public License for more details.
|
||||||
%%%
|
%%%
|
||||||
%%% You should have received a copy of the GNU General Public License
|
%%% You should have received a copy of the GNU General Public License along
|
||||||
%%% along with this program; if not, write to the Free Software
|
%%% with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
%%% 02111-1307 USA
|
|
||||||
%%%
|
%%%
|
||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
%%% Created : 16 Nov 2002 by Alexey Shchepin <alexey@process-one.net>
|
%%% Created : 16 Nov 2002 by Alexey Shchepin <alexey@process-one.net>
|
||||||
%%%
|
%%%
|
||||||
%%%
|
%%%
|
||||||
%%% ejabberd, Copyright (C) 2002-2013 ProcessOne
|
%%% ejabberd, Copyright (C) 2002-2014 ProcessOne
|
||||||
%%%
|
%%%
|
||||||
%%% This program is free software; you can redistribute it and/or
|
%%% This program is free software; you can redistribute it and/or
|
||||||
%%% modify it under the terms of the GNU General Public License as
|
%%% modify it under the terms of the GNU General Public License as
|
||||||
@ -17,10 +17,9 @@
|
|||||||
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
%%% General Public License for more details.
|
%%% General Public License for more details.
|
||||||
%%%
|
%%%
|
||||||
%%% You should have received a copy of the GNU General Public License
|
%%% You should have received a copy of the GNU General Public License along
|
||||||
%%% along with this program; if not, write to the Free Software
|
%%% with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
%%% 02111-1307 USA
|
|
||||||
%%%
|
%%%
|
||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
|
|
||||||
@ -152,7 +151,20 @@ init_udp(PortIP, Module, Opts, SockOpts, Port, IPS) ->
|
|||||||
{ok, Socket} ->
|
{ok, Socket} ->
|
||||||
%% Inform my parent that this port was opened succesfully
|
%% Inform my parent that this port was opened succesfully
|
||||||
proc_lib:init_ack({ok, self()}),
|
proc_lib:init_ack({ok, self()}),
|
||||||
udp_recv(Socket, Module, Opts);
|
case erlang:function_exported(Module, udp_init, 2) of
|
||||||
|
false ->
|
||||||
|
udp_recv(Socket, Module, Opts);
|
||||||
|
true ->
|
||||||
|
case catch Module:udp_init(Socket, Opts) of
|
||||||
|
{'EXIT', _} = Err ->
|
||||||
|
?ERROR_MSG("failed to process callback function "
|
||||||
|
"~p:~s(~p, ~p): ~p",
|
||||||
|
[Module, udp_init, Socket, Opts, Err]),
|
||||||
|
udp_recv(Socket, Module, Opts);
|
||||||
|
NewOpts ->
|
||||||
|
udp_recv(Socket, Module, NewOpts)
|
||||||
|
end
|
||||||
|
end;
|
||||||
{error, Reason} ->
|
{error, Reason} ->
|
||||||
socket_error(Reason, PortIP, Module, SockOpts, Port, IPS)
|
socket_error(Reason, PortIP, Module, SockOpts, Port, IPS)
|
||||||
end.
|
end.
|
||||||
@ -161,8 +173,20 @@ init_tcp(PortIP, Module, Opts, SockOpts, Port, IPS) ->
|
|||||||
ListenSocket = listen_tcp(PortIP, Module, SockOpts, Port, IPS),
|
ListenSocket = listen_tcp(PortIP, Module, SockOpts, Port, IPS),
|
||||||
%% Inform my parent that this port was opened succesfully
|
%% Inform my parent that this port was opened succesfully
|
||||||
proc_lib:init_ack({ok, self()}),
|
proc_lib:init_ack({ok, self()}),
|
||||||
%% And now start accepting connection attempts
|
case erlang:function_exported(Module, tcp_init, 2) of
|
||||||
accept(ListenSocket, Module, Opts).
|
false ->
|
||||||
|
accept(ListenSocket, Module, Opts);
|
||||||
|
true ->
|
||||||
|
case catch Module:tcp_init(ListenSocket, Opts) of
|
||||||
|
{'EXIT', _} = Err ->
|
||||||
|
?ERROR_MSG("failed to process callback function "
|
||||||
|
"~p:~s(~p, ~p): ~p",
|
||||||
|
[Module, tcp_init, ListenSocket, Opts, Err]),
|
||||||
|
accept(ListenSocket, Module, Opts);
|
||||||
|
NewOpts ->
|
||||||
|
accept(ListenSocket, Module, NewOpts)
|
||||||
|
end
|
||||||
|
end.
|
||||||
|
|
||||||
listen_tcp(PortIP, Module, SockOpts, Port, IPS) ->
|
listen_tcp(PortIP, Module, SockOpts, Port, IPS) ->
|
||||||
case ets:lookup(listen_sockets, PortIP) of
|
case ets:lookup(listen_sockets, PortIP) of
|
||||||
@ -285,9 +309,10 @@ accept(ListenSocket, Module, Opts) ->
|
|||||||
case gen_tcp:accept(ListenSocket) of
|
case gen_tcp:accept(ListenSocket) of
|
||||||
{ok, Socket} ->
|
{ok, Socket} ->
|
||||||
case {inet:sockname(Socket), inet:peername(Socket)} of
|
case {inet:sockname(Socket), inet:peername(Socket)} of
|
||||||
{{ok, Addr}, {ok, PAddr}} ->
|
{{ok, {Addr, Port}}, {ok, {PAddr, PPort}}} ->
|
||||||
?INFO_MSG("(~w) Accepted connection ~w -> ~w",
|
?INFO_MSG("(~w) Accepted connection ~s:~p -> ~s:~p",
|
||||||
[Socket, PAddr, Addr]);
|
[Socket, inet_parse:ntoa(PAddr), PPort,
|
||||||
|
inet_parse:ntoa(Addr), Port]);
|
||||||
_ ->
|
_ ->
|
||||||
ok
|
ok
|
||||||
end,
|
end,
|
||||||
@ -311,11 +336,11 @@ udp_recv(Socket, Module, Opts) ->
|
|||||||
?ERROR_MSG("failed to process UDP packet:~n"
|
?ERROR_MSG("failed to process UDP packet:~n"
|
||||||
"** Source: {~p, ~p}~n"
|
"** Source: {~p, ~p}~n"
|
||||||
"** Reason: ~p~n** Packet: ~p",
|
"** Reason: ~p~n** Packet: ~p",
|
||||||
[Addr, Port, Reason, Packet]);
|
[Addr, Port, Reason, Packet]),
|
||||||
_ ->
|
udp_recv(Socket, Module, Opts);
|
||||||
ok
|
NewOpts ->
|
||||||
end,
|
udp_recv(Socket, Module, NewOpts)
|
||||||
udp_recv(Socket, Module, Opts);
|
end;
|
||||||
{error, Reason} ->
|
{error, Reason} ->
|
||||||
?ERROR_MSG("unexpected UDP error: ~s", [format_error(Reason)]),
|
?ERROR_MSG("unexpected UDP error: ~s", [format_error(Reason)]),
|
||||||
throw({error, Reason})
|
throw({error, Reason})
|
||||||
@ -342,6 +367,7 @@ start_listener2(Port, Module, Opts) ->
|
|||||||
%% But it doesn't hurt to attempt to start it for any listener.
|
%% But it doesn't hurt to attempt to start it for any listener.
|
||||||
%% So, it's normal (and harmless) that in most cases this call returns: {error, {already_started, pid()}}
|
%% So, it's normal (and harmless) that in most cases this call returns: {error, {already_started, pid()}}
|
||||||
maybe_start_stun(Module),
|
maybe_start_stun(Module),
|
||||||
|
maybe_start_sip(Module),
|
||||||
start_module_sup(Port, Module),
|
start_module_sup(Port, Module),
|
||||||
start_listener_sup(Port, Module, Opts).
|
start_listener_sup(Port, Module, Opts).
|
||||||
|
|
||||||
@ -463,6 +489,11 @@ maybe_start_stun(ejabberd_stun) ->
|
|||||||
maybe_start_stun(_) ->
|
maybe_start_stun(_) ->
|
||||||
ok.
|
ok.
|
||||||
|
|
||||||
|
maybe_start_sip(esip_socket) ->
|
||||||
|
ejabberd:start_app(esip);
|
||||||
|
maybe_start_sip(_) ->
|
||||||
|
ok.
|
||||||
|
|
||||||
%%%
|
%%%
|
||||||
%%% Check options
|
%%% Check options
|
||||||
%%%
|
%%%
|
||||||
@ -642,7 +673,11 @@ prepare_ip(IP) when is_binary(IP) ->
|
|||||||
|
|
||||||
prepare_mod(ejabberd_stun) ->
|
prepare_mod(ejabberd_stun) ->
|
||||||
prepare_mod(stun);
|
prepare_mod(stun);
|
||||||
|
prepare_mod(ejabberd_sip) ->
|
||||||
|
prepare_mod(sip);
|
||||||
prepare_mod(stun) ->
|
prepare_mod(stun) ->
|
||||||
stun;
|
stun;
|
||||||
|
prepare_mod(sip) ->
|
||||||
|
esip_socket;
|
||||||
prepare_mod(Mod) when is_atom(Mod) ->
|
prepare_mod(Mod) when is_atom(Mod) ->
|
||||||
Mod.
|
Mod.
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
%%% Created : 30 Nov 2002 by Alexey Shchepin <alexey@process-one.net>
|
%%% Created : 30 Nov 2002 by Alexey Shchepin <alexey@process-one.net>
|
||||||
%%%
|
%%%
|
||||||
%%%
|
%%%
|
||||||
%%% ejabberd, Copyright (C) 2002-2013 ProcessOne
|
%%% ejabberd, Copyright (C) 2002-2014 ProcessOne
|
||||||
%%%
|
%%%
|
||||||
%%% This program is free software; you can redistribute it and/or
|
%%% This program is free software; you can redistribute it and/or
|
||||||
%%% modify it under the terms of the GNU General Public License as
|
%%% modify it under the terms of the GNU General Public License as
|
||||||
@ -17,10 +17,9 @@
|
|||||||
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
%%% General Public License for more details.
|
%%% General Public License for more details.
|
||||||
%%%
|
%%%
|
||||||
%%% You should have received a copy of the GNU General Public License
|
%%% You should have received a copy of the GNU General Public License along
|
||||||
%%% along with this program; if not, write to the Free Software
|
%%% with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
%%% 02111-1307 USA
|
|
||||||
%%%
|
%%%
|
||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -18,10 +18,9 @@
|
|||||||
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
%%% General Public License for more details.
|
%%% General Public License for more details.
|
||||||
%%%
|
%%%
|
||||||
%%% You should have received a copy of the GNU General Public License
|
%%% You should have received a copy of the GNU General Public License along
|
||||||
%%% along with this program; if not, write to the Free Software
|
%%% with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
%%% 02111-1307 USA
|
|
||||||
|
|
||||||
%%%-------------------------------------------------------------------
|
%%%-------------------------------------------------------------------
|
||||||
-module(ejabberd_logger).
|
-module(ejabberd_logger).
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
%%% Created : 1 Nov 2006 by Alexey Shchepin <alexey@process-one.net>
|
%%% Created : 1 Nov 2006 by Alexey Shchepin <alexey@process-one.net>
|
||||||
%%%
|
%%%
|
||||||
%%%
|
%%%
|
||||||
%%% ejabberd, Copyright (C) 2002-2013 ProcessOne
|
%%% ejabberd, Copyright (C) 2002-2014 ProcessOne
|
||||||
%%%
|
%%%
|
||||||
%%% This program is free software; you can redistribute it and/or
|
%%% This program is free software; you can redistribute it and/or
|
||||||
%%% modify it under the terms of the GNU General Public License as
|
%%% modify it under the terms of the GNU General Public License as
|
||||||
@ -17,10 +17,9 @@
|
|||||||
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
%%% General Public License for more details.
|
%%% General Public License for more details.
|
||||||
%%%
|
%%%
|
||||||
%%% You should have received a copy of the GNU General Public License
|
%%% You should have received a copy of the GNU General Public License along
|
||||||
%%% along with this program; if not, write to the Free Software
|
%%% with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
%%% 02111-1307 USA
|
|
||||||
%%%
|
%%%
|
||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
%%% Created : 8 Dec 2004 by Alexey Shchepin <alexey@process-one.net>
|
%%% Created : 8 Dec 2004 by Alexey Shchepin <alexey@process-one.net>
|
||||||
%%%
|
%%%
|
||||||
%%%
|
%%%
|
||||||
%%% ejabberd, Copyright (C) 2002-2013 ProcessOne
|
%%% ejabberd, Copyright (C) 2002-2014 ProcessOne
|
||||||
%%%
|
%%%
|
||||||
%%% This program is free software; you can redistribute it and/or
|
%%% This program is free software; you can redistribute it and/or
|
||||||
%%% modify it under the terms of the GNU General Public License as
|
%%% modify it under the terms of the GNU General Public License as
|
||||||
@ -17,10 +17,9 @@
|
|||||||
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
%%% General Public License for more details.
|
%%% General Public License for more details.
|
||||||
%%%
|
%%%
|
||||||
%%% You should have received a copy of the GNU General Public License
|
%%% You should have received a copy of the GNU General Public License along
|
||||||
%%% along with this program; if not, write to the Free Software
|
%%% with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
%%% 02111-1307 USA
|
|
||||||
%%%
|
%%%
|
||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
|
|
||||||
@ -141,9 +140,12 @@ sql_bloc(Host, F) -> sql_call(Host, {sql_bloc, F}).
|
|||||||
sql_call(Host, Msg) ->
|
sql_call(Host, Msg) ->
|
||||||
case get(?STATE_KEY) of
|
case get(?STATE_KEY) of
|
||||||
undefined ->
|
undefined ->
|
||||||
(?GEN_FSM):sync_send_event(ejabberd_odbc_sup:get_random_pid(Host),
|
case ejabberd_odbc_sup:get_random_pid(Host) of
|
||||||
{sql_cmd, Msg, now()},
|
none -> {error, unknownhost};
|
||||||
?TRANSACTION_TIMEOUT);
|
Pid ->
|
||||||
|
(?GEN_FSM):sync_send_event(Pid,{sql_cmd, Msg, now()},
|
||||||
|
?TRANSACTION_TIMEOUT)
|
||||||
|
end;
|
||||||
_State -> nested_op(Msg)
|
_State -> nested_op(Msg)
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
%%% Created : 22 Dec 2004 by Alexey Shchepin <alexey@process-one.net>
|
%%% Created : 22 Dec 2004 by Alexey Shchepin <alexey@process-one.net>
|
||||||
%%%
|
%%%
|
||||||
%%%
|
%%%
|
||||||
%%% ejabberd, Copyright (C) 2002-2013 ProcessOne
|
%%% ejabberd, Copyright (C) 2002-2014 ProcessOne
|
||||||
%%%
|
%%%
|
||||||
%%% This program is free software; you can redistribute it and/or
|
%%% This program is free software; you can redistribute it and/or
|
||||||
%%% modify it under the terms of the GNU General Public License as
|
%%% modify it under the terms of the GNU General Public License as
|
||||||
@ -17,10 +17,9 @@
|
|||||||
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
%%% General Public License for more details.
|
%%% General Public License for more details.
|
||||||
%%%
|
%%%
|
||||||
%%% You should have received a copy of the GNU General Public License
|
%%% You should have received a copy of the GNU General Public License along
|
||||||
%%% along with this program; if not, write to the Free Software
|
%%% with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
%%% 02111-1307 USA
|
|
||||||
%%%
|
%%%
|
||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
|
|
||||||
@ -83,8 +82,10 @@ get_pids(Host) ->
|
|||||||
[R#sql_pool.pid || R <- Rs].
|
[R#sql_pool.pid || R <- Rs].
|
||||||
|
|
||||||
get_random_pid(Host) ->
|
get_random_pid(Host) ->
|
||||||
Pids = get_pids(Host),
|
case get_pids(Host) of
|
||||||
lists:nth(erlang:phash(now(), length(Pids)), Pids).
|
[] -> none;
|
||||||
|
Pids -> lists:nth(erlang:phash(now(), length(Pids)), Pids)
|
||||||
|
end.
|
||||||
|
|
||||||
add_pid(Host, Pid) ->
|
add_pid(Host, Pid) ->
|
||||||
F = fun () ->
|
F = fun () ->
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
%%% @doc
|
%%% @doc
|
||||||
%%%
|
%%%
|
||||||
%%%
|
%%%
|
||||||
%%% ejabberd, Copyright (C) 2002-2013 ProcessOne
|
%%% ejabberd, Copyright (C) 2002-2014 ProcessOne
|
||||||
%%%
|
%%%
|
||||||
%%% This program is free software; you can redistribute it and/or
|
%%% This program is free software; you can redistribute it and/or
|
||||||
%%% modify it under the terms of the GNU General Public License as
|
%%% modify it under the terms of the GNU General Public License as
|
||||||
@ -21,10 +21,9 @@
|
|||||||
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
%%% General Public License for more details.
|
%%% General Public License for more details.
|
||||||
%%%
|
%%%
|
||||||
%%% You should have received a copy of the GNU General Public License
|
%%% You should have received a copy of the GNU General Public License along
|
||||||
%%% along with this program; if not, write to the Free Software
|
%%% with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
%%% 02111-1307 USA
|
|
||||||
%%%
|
%%%
|
||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
%%% Created : 31 Jan 2003 by Alexey Shchepin <alexey@process-one.net>
|
%%% Created : 31 Jan 2003 by Alexey Shchepin <alexey@process-one.net>
|
||||||
%%%
|
%%%
|
||||||
%%%
|
%%%
|
||||||
%%% ejabberd, Copyright (C) 2002-2013 ProcessOne
|
%%% ejabberd, Copyright (C) 2002-2014 ProcessOne
|
||||||
%%%
|
%%%
|
||||||
%%% This program is free software; you can redistribute it and/or
|
%%% This program is free software; you can redistribute it and/or
|
||||||
%%% modify it under the terms of the GNU General Public License as
|
%%% modify it under the terms of the GNU General Public License as
|
||||||
@ -17,10 +17,9 @@
|
|||||||
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
%%% General Public License for more details.
|
%%% General Public License for more details.
|
||||||
%%%
|
%%%
|
||||||
%%% You should have received a copy of the GNU General Public License
|
%%% You should have received a copy of the GNU General Public License along
|
||||||
%%% along with this program; if not, write to the Free Software
|
%%% with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
%%% 02111-1307 USA
|
|
||||||
%%%
|
%%%
|
||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
%%% Created : 10 Nov 2003 by Alexey Shchepin <alexey@process-one.net>
|
%%% Created : 10 Nov 2003 by Alexey Shchepin <alexey@process-one.net>
|
||||||
%%%
|
%%%
|
||||||
%%%
|
%%%
|
||||||
%%% ejabberd, Copyright (C) 2002-2013 ProcessOne
|
%%% ejabberd, Copyright (C) 2002-2014 ProcessOne
|
||||||
%%%
|
%%%
|
||||||
%%% This program is free software; you can redistribute it and/or
|
%%% This program is free software; you can redistribute it and/or
|
||||||
%%% modify it under the terms of the GNU General Public License as
|
%%% modify it under the terms of the GNU General Public License as
|
||||||
@ -17,10 +17,9 @@
|
|||||||
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
%%% General Public License for more details.
|
%%% General Public License for more details.
|
||||||
%%%
|
%%%
|
||||||
%%% You should have received a copy of the GNU General Public License
|
%%% You should have received a copy of the GNU General Public License along
|
||||||
%%% along with this program; if not, write to the Free Software
|
%%% with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
%%% 02111-1307 USA
|
|
||||||
%%%
|
%%%
|
||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
%%% Created : 8 Dec 2011 by Badlop
|
%%% Created : 8 Dec 2011 by Badlop
|
||||||
%%%
|
%%%
|
||||||
%%%
|
%%%
|
||||||
%%% ejabberd, Copyright (C) 2002-2013 ProcessOne
|
%%% ejabberd, Copyright (C) 2002-2014 ProcessOne
|
||||||
%%%
|
%%%
|
||||||
%%% This program is free software; you can redistribute it and/or
|
%%% This program is free software; you can redistribute it and/or
|
||||||
%%% modify it under the terms of the GNU General Public License as
|
%%% modify it under the terms of the GNU General Public License as
|
||||||
@ -17,10 +17,9 @@
|
|||||||
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
%%% General Public License for more details.
|
%%% General Public License for more details.
|
||||||
%%%
|
%%%
|
||||||
%%% You should have received a copy of the GNU General Public License
|
%%% You should have received a copy of the GNU General Public License along
|
||||||
%%% along with this program; if not, write to the Free Software
|
%%% with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
%%% 02111-1307 USA
|
|
||||||
%%%
|
%%%
|
||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
%%% Created : 27 Nov 2002 by Alexey Shchepin <alexey@process-one.net>
|
%%% Created : 27 Nov 2002 by Alexey Shchepin <alexey@process-one.net>
|
||||||
%%%
|
%%%
|
||||||
%%%
|
%%%
|
||||||
%%% ejabberd, Copyright (C) 2002-2013 ProcessOne
|
%%% ejabberd, Copyright (C) 2002-2014 ProcessOne
|
||||||
%%%
|
%%%
|
||||||
%%% This program is free software; you can redistribute it and/or
|
%%% This program is free software; you can redistribute it and/or
|
||||||
%%% modify it under the terms of the GNU General Public License as
|
%%% modify it under the terms of the GNU General Public License as
|
||||||
@ -17,10 +17,9 @@
|
|||||||
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
%%% General Public License for more details.
|
%%% General Public License for more details.
|
||||||
%%%
|
%%%
|
||||||
%%% You should have received a copy of the GNU General Public License
|
%%% You should have received a copy of the GNU General Public License along
|
||||||
%%% along with this program; if not, write to the Free Software
|
%%% with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
%%% 02111-1307 USA
|
|
||||||
%%%
|
%%%
|
||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
|
|
||||||
@ -397,6 +396,7 @@ update_tables() ->
|
|||||||
[domain, node, pid] -> mnesia:delete_table(route);
|
[domain, node, pid] -> mnesia:delete_table(route);
|
||||||
[domain, pid] -> mnesia:delete_table(route);
|
[domain, pid] -> mnesia:delete_table(route);
|
||||||
[domain, pid, local_hint] -> ok;
|
[domain, pid, local_hint] -> ok;
|
||||||
|
[domain, pid, local_hint|_] -> mnesia:delete_table(route);
|
||||||
{'EXIT', _} -> ok
|
{'EXIT', _} -> ok
|
||||||
end,
|
end,
|
||||||
case lists:member(local_route,
|
case lists:member(local_route,
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
%%% Created : 7 Dec 2002 by Alexey Shchepin <alexey@process-one.net>
|
%%% Created : 7 Dec 2002 by Alexey Shchepin <alexey@process-one.net>
|
||||||
%%%
|
%%%
|
||||||
%%%
|
%%%
|
||||||
%%% ejabberd, Copyright (C) 2002-2013 ProcessOne
|
%%% ejabberd, Copyright (C) 2002-2014 ProcessOne
|
||||||
%%%
|
%%%
|
||||||
%%% This program is free software; you can redistribute it and/or
|
%%% This program is free software; you can redistribute it and/or
|
||||||
%%% modify it under the terms of the GNU General Public License as
|
%%% modify it under the terms of the GNU General Public License as
|
||||||
@ -17,10 +17,9 @@
|
|||||||
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
%%% General Public License for more details.
|
%%% General Public License for more details.
|
||||||
%%%
|
%%%
|
||||||
%%% You should have received a copy of the GNU General Public License
|
%%% You should have received a copy of the GNU General Public License along
|
||||||
%%% along with this program; if not, write to the Free Software
|
%%% with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
%%% 02111-1307 USA
|
|
||||||
%%%
|
%%%
|
||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
|
|
||||||
@ -38,7 +37,8 @@
|
|||||||
incoming_s2s_number/0, outgoing_s2s_number/0,
|
incoming_s2s_number/0, outgoing_s2s_number/0,
|
||||||
clean_temporarily_blocked_table/0,
|
clean_temporarily_blocked_table/0,
|
||||||
list_temporarily_blocked_hosts/0,
|
list_temporarily_blocked_hosts/0,
|
||||||
external_host_overloaded/1, is_temporarly_blocked/1]).
|
external_host_overloaded/1, is_temporarly_blocked/1,
|
||||||
|
check_peer_certificate/3]).
|
||||||
|
|
||||||
%% gen_server callbacks
|
%% gen_server callbacks
|
||||||
-export([init/1, handle_call/3, handle_cast/2,
|
-export([init/1, handle_call/3, handle_cast/2,
|
||||||
@ -54,6 +54,14 @@
|
|||||||
|
|
||||||
-include("ejabberd_commands.hrl").
|
-include("ejabberd_commands.hrl").
|
||||||
|
|
||||||
|
-include_lib("public_key/include/public_key.hrl").
|
||||||
|
|
||||||
|
-define(PKIXEXPLICIT, 'OTP-PUB-KEY').
|
||||||
|
|
||||||
|
-define(PKIXIMPLICIT, 'OTP-PUB-KEY').
|
||||||
|
|
||||||
|
-include("XmppAddr.hrl").
|
||||||
|
|
||||||
-define(DEFAULT_MAX_S2S_CONNECTIONS_NUMBER, 1).
|
-define(DEFAULT_MAX_S2S_CONNECTIONS_NUMBER, 1).
|
||||||
|
|
||||||
-define(DEFAULT_MAX_S2S_CONNECTIONS_NUMBER_PER_NODE, 1).
|
-define(DEFAULT_MAX_S2S_CONNECTIONS_NUMBER_PER_NODE, 1).
|
||||||
@ -208,6 +216,31 @@ try_register(FromTo) ->
|
|||||||
dirty_get_connections() ->
|
dirty_get_connections() ->
|
||||||
mnesia:dirty_all_keys(s2s).
|
mnesia:dirty_all_keys(s2s).
|
||||||
|
|
||||||
|
check_peer_certificate(SockMod, Sock, Peer) ->
|
||||||
|
case SockMod:get_peer_certificate(Sock) of
|
||||||
|
{ok, Cert} ->
|
||||||
|
case SockMod:get_verify_result(Sock) of
|
||||||
|
0 ->
|
||||||
|
case idna:domain_utf8_to_ascii(Peer) of
|
||||||
|
false ->
|
||||||
|
{error, <<"Cannot decode remote server name">>};
|
||||||
|
AsciiPeer ->
|
||||||
|
case
|
||||||
|
lists:any(fun(D) -> match_domain(AsciiPeer, D) end,
|
||||||
|
get_cert_domains(Cert)) of
|
||||||
|
true ->
|
||||||
|
{ok, <<"Verification successful">>};
|
||||||
|
false ->
|
||||||
|
{error, <<"Certificate host name mismatch">>}
|
||||||
|
end
|
||||||
|
end;
|
||||||
|
VerifyRes ->
|
||||||
|
{error, p1_tls:get_cert_verify_string(VerifyRes, Cert)}
|
||||||
|
end;
|
||||||
|
error ->
|
||||||
|
{error, <<"Cannot get peer certificate">>}
|
||||||
|
end.
|
||||||
|
|
||||||
%%====================================================================
|
%%====================================================================
|
||||||
%% gen_server callbacks
|
%% gen_server callbacks
|
||||||
%%====================================================================
|
%%====================================================================
|
||||||
@ -620,3 +653,121 @@ get_s2s_state(S2sPid) ->
|
|||||||
{badrpc, _} -> [{status, error}]
|
{badrpc, _} -> [{status, error}]
|
||||||
end,
|
end,
|
||||||
[{s2s_pid, S2sPid} | Infos].
|
[{s2s_pid, S2sPid} | Infos].
|
||||||
|
|
||||||
|
get_cert_domains(Cert) ->
|
||||||
|
{rdnSequence, Subject} =
|
||||||
|
(Cert#'Certificate'.tbsCertificate)#'TBSCertificate'.subject,
|
||||||
|
Extensions =
|
||||||
|
(Cert#'Certificate'.tbsCertificate)#'TBSCertificate'.extensions,
|
||||||
|
lists:flatmap(fun (#'AttributeTypeAndValue'{type =
|
||||||
|
?'id-at-commonName',
|
||||||
|
value = Val}) ->
|
||||||
|
case 'OTP-PUB-KEY':decode('X520CommonName', Val) of
|
||||||
|
{ok, {_, D1}} ->
|
||||||
|
D = if is_binary(D1) -> D1;
|
||||||
|
is_list(D1) -> list_to_binary(D1);
|
||||||
|
true -> error
|
||||||
|
end,
|
||||||
|
if D /= error ->
|
||||||
|
case jlib:string_to_jid(D) of
|
||||||
|
#jid{luser = <<"">>, lserver = LD,
|
||||||
|
lresource = <<"">>} ->
|
||||||
|
[LD];
|
||||||
|
_ -> []
|
||||||
|
end;
|
||||||
|
true -> []
|
||||||
|
end;
|
||||||
|
_ -> []
|
||||||
|
end;
|
||||||
|
(_) -> []
|
||||||
|
end,
|
||||||
|
lists:flatten(Subject))
|
||||||
|
++
|
||||||
|
lists:flatmap(fun (#'Extension'{extnID =
|
||||||
|
?'id-ce-subjectAltName',
|
||||||
|
extnValue = Val}) ->
|
||||||
|
BVal = if is_list(Val) -> list_to_binary(Val);
|
||||||
|
true -> Val
|
||||||
|
end,
|
||||||
|
case 'OTP-PUB-KEY':decode('SubjectAltName', BVal)
|
||||||
|
of
|
||||||
|
{ok, SANs} ->
|
||||||
|
lists:flatmap(fun ({otherName,
|
||||||
|
#'AnotherName'{'type-id' =
|
||||||
|
?'id-on-xmppAddr',
|
||||||
|
value =
|
||||||
|
XmppAddr}}) ->
|
||||||
|
case
|
||||||
|
'XmppAddr':decode('XmppAddr',
|
||||||
|
XmppAddr)
|
||||||
|
of
|
||||||
|
{ok, D}
|
||||||
|
when
|
||||||
|
is_binary(D) ->
|
||||||
|
case
|
||||||
|
jlib:string_to_jid((D))
|
||||||
|
of
|
||||||
|
#jid{luser =
|
||||||
|
<<"">>,
|
||||||
|
lserver =
|
||||||
|
LD,
|
||||||
|
lresource =
|
||||||
|
<<"">>} ->
|
||||||
|
case
|
||||||
|
idna:domain_utf8_to_ascii(LD)
|
||||||
|
of
|
||||||
|
false ->
|
||||||
|
[];
|
||||||
|
PCLD ->
|
||||||
|
[PCLD]
|
||||||
|
end;
|
||||||
|
_ -> []
|
||||||
|
end;
|
||||||
|
_ -> []
|
||||||
|
end;
|
||||||
|
({dNSName, D})
|
||||||
|
when is_list(D) ->
|
||||||
|
case
|
||||||
|
jlib:string_to_jid(list_to_binary(D))
|
||||||
|
of
|
||||||
|
#jid{luser = <<"">>,
|
||||||
|
lserver = LD,
|
||||||
|
lresource =
|
||||||
|
<<"">>} ->
|
||||||
|
[LD];
|
||||||
|
_ -> []
|
||||||
|
end;
|
||||||
|
(_) -> []
|
||||||
|
end,
|
||||||
|
SANs);
|
||||||
|
_ -> []
|
||||||
|
end;
|
||||||
|
(_) -> []
|
||||||
|
end,
|
||||||
|
Extensions).
|
||||||
|
|
||||||
|
match_domain(Domain, Domain) -> true;
|
||||||
|
match_domain(Domain, Pattern) ->
|
||||||
|
DLabels = str:tokens(Domain, <<".">>),
|
||||||
|
PLabels = str:tokens(Pattern, <<".">>),
|
||||||
|
match_labels(DLabels, PLabels).
|
||||||
|
|
||||||
|
match_labels([], []) -> true;
|
||||||
|
match_labels([], [_ | _]) -> false;
|
||||||
|
match_labels([_ | _], []) -> false;
|
||||||
|
match_labels([DL | DLabels], [PL | PLabels]) ->
|
||||||
|
case lists:all(fun (C) ->
|
||||||
|
$a =< C andalso C =< $z orelse
|
||||||
|
$0 =< C andalso C =< $9 orelse
|
||||||
|
C == $- orelse C == $*
|
||||||
|
end,
|
||||||
|
binary_to_list(PL))
|
||||||
|
of
|
||||||
|
true ->
|
||||||
|
Regexp = ejabberd_regexp:sh_to_awk(PL),
|
||||||
|
case ejabberd_regexp:run(DL, Regexp) of
|
||||||
|
match -> match_labels(DLabels, PLabels);
|
||||||
|
nomatch -> false
|
||||||
|
end;
|
||||||
|
false -> false
|
||||||
|
end.
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
%%% Created : 6 Dec 2002 by Alexey Shchepin <alexey@process-one.net>
|
%%% Created : 6 Dec 2002 by Alexey Shchepin <alexey@process-one.net>
|
||||||
%%%
|
%%%
|
||||||
%%%
|
%%%
|
||||||
%%% ejabberd, Copyright (C) 2002-2013 ProcessOne
|
%%% ejabberd, Copyright (C) 2002-2014 ProcessOne
|
||||||
%%%
|
%%%
|
||||||
%%% This program is free software; you can redistribute it and/or
|
%%% This program is free software; you can redistribute it and/or
|
||||||
%%% modify it under the terms of the GNU General Public License as
|
%%% modify it under the terms of the GNU General Public License as
|
||||||
@ -17,10 +17,9 @@
|
|||||||
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
%%% General Public License for more details.
|
%%% General Public License for more details.
|
||||||
%%%
|
%%%
|
||||||
%%% You should have received a copy of the GNU General Public License
|
%%% You should have received a copy of the GNU General Public License along
|
||||||
%%% along with this program; if not, write to the Free Software
|
%%% with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
%%% 02111-1307 USA
|
|
||||||
%%%
|
%%%
|
||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
|
|
||||||
@ -31,8 +30,7 @@
|
|||||||
-behaviour(p1_fsm).
|
-behaviour(p1_fsm).
|
||||||
|
|
||||||
%% External exports
|
%% External exports
|
||||||
-export([start/2, start_link/2, match_domain/2,
|
-export([start/2, start_link/2, socket_type/0]).
|
||||||
socket_type/0]).
|
|
||||||
|
|
||||||
%% gen_fsm callbacks
|
%% gen_fsm callbacks
|
||||||
-export([init/1, wait_for_stream/2,
|
-export([init/1, wait_for_stream/2,
|
||||||
@ -45,14 +43,6 @@
|
|||||||
|
|
||||||
-include("jlib.hrl").
|
-include("jlib.hrl").
|
||||||
|
|
||||||
-include_lib("public_key/include/public_key.hrl").
|
|
||||||
|
|
||||||
-define(PKIXEXPLICIT, 'OTP-PUB-KEY').
|
|
||||||
|
|
||||||
-define(PKIXIMPLICIT, 'OTP-PUB-KEY').
|
|
||||||
|
|
||||||
-include("XmppAddr.hrl").
|
|
||||||
|
|
||||||
-define(DICT, dict).
|
-define(DICT, dict).
|
||||||
|
|
||||||
-record(state,
|
-record(state,
|
||||||
@ -182,9 +172,21 @@ init([{SockMod, Socket}, Opts]) ->
|
|||||||
undefined -> TLSOpts1;
|
undefined -> TLSOpts1;
|
||||||
Ciphers -> [{ciphers, Ciphers} | TLSOpts1]
|
Ciphers -> [{ciphers, Ciphers} | TLSOpts1]
|
||||||
end,
|
end,
|
||||||
|
TLSOpts3 = case ejabberd_config:get_option(
|
||||||
|
s2s_protocol_options,
|
||||||
|
fun (Options) ->
|
||||||
|
[_|O] = lists:foldl(
|
||||||
|
fun(X, Acc) -> X ++ Acc end, [],
|
||||||
|
[["|" | binary_to_list(Opt)] || Opt <- Options, is_binary(Opt)]
|
||||||
|
),
|
||||||
|
iolist_to_binary(O)
|
||||||
|
end) of
|
||||||
|
undefined -> TLSOpts2;
|
||||||
|
ProtocolOpts -> [{protocol_options, ProtocolOpts} | TLSOpts2]
|
||||||
|
end,
|
||||||
TLSOpts = case proplists:get_bool(tls_compression, Opts) of
|
TLSOpts = case proplists:get_bool(tls_compression, Opts) of
|
||||||
false -> [compression_none | TLSOpts2];
|
false -> [compression_none | TLSOpts3];
|
||||||
true -> TLSOpts2
|
true -> TLSOpts3
|
||||||
end,
|
end,
|
||||||
Timer = erlang:start_timer(?S2STIMEOUT, self(), []),
|
Timer = erlang:start_timer(?S2STIMEOUT, self(), []),
|
||||||
{ok, wait_for_stream,
|
{ok, wait_for_stream,
|
||||||
@ -213,34 +215,21 @@ wait_for_stream({xmlstreamstart, _Name, Attrs},
|
|||||||
not StateData#state.authenticated ->
|
not StateData#state.authenticated ->
|
||||||
send_text(StateData,
|
send_text(StateData,
|
||||||
?STREAM_HEADER(<<" version='1.0'">>)),
|
?STREAM_HEADER(<<" version='1.0'">>)),
|
||||||
SASL = if StateData#state.tls_enabled ->
|
Auth = if StateData#state.tls_enabled ->
|
||||||
case
|
case jlib:nameprep(xml:get_attr_s(<<"from">>, Attrs)) of
|
||||||
(StateData#state.sockmod):get_peer_certificate(StateData#state.socket)
|
From when From /= <<"">>, From /= error ->
|
||||||
of
|
{Result, Message} =
|
||||||
{ok, Cert} ->
|
ejabberd_s2s:check_peer_certificate(StateData#state.sockmod,
|
||||||
case
|
StateData#state.socket,
|
||||||
(StateData#state.sockmod):get_verify_result(StateData#state.socket)
|
From),
|
||||||
of
|
{Result, From, Message};
|
||||||
0 ->
|
_ ->
|
||||||
[#xmlel{name = <<"mechanisms">>,
|
{error, <<"(unknown)">>,
|
||||||
attrs = [{<<"xmlns">>, ?NS_SASL}],
|
<<"Got no valid 'from' attribute">>}
|
||||||
children =
|
|
||||||
[#xmlel{name = <<"mechanism">>,
|
|
||||||
attrs = [],
|
|
||||||
children =
|
|
||||||
[{xmlcdata,
|
|
||||||
<<"EXTERNAL">>}]}]}];
|
|
||||||
CertVerifyRes ->
|
|
||||||
case StateData#state.tls_certverify of
|
|
||||||
true ->
|
|
||||||
{error_cert_verif, CertVerifyRes,
|
|
||||||
Cert};
|
|
||||||
false -> []
|
|
||||||
end
|
|
||||||
end;
|
|
||||||
error -> []
|
|
||||||
end;
|
end;
|
||||||
true -> []
|
true ->
|
||||||
|
{no_verify, <<"(unknown)">>,
|
||||||
|
<<"TLS not (yet) enabled">>}
|
||||||
end,
|
end,
|
||||||
StartTLS = if StateData#state.tls_enabled -> [];
|
StartTLS = if StateData#state.tls_enabled -> [];
|
||||||
not StateData#state.tls_enabled and
|
not StateData#state.tls_enabled and
|
||||||
@ -256,26 +245,36 @@ wait_for_stream({xmlstreamstart, _Name, Attrs},
|
|||||||
[#xmlel{name = <<"required">>,
|
[#xmlel{name = <<"required">>,
|
||||||
attrs = [], children = []}]}]
|
attrs = [], children = []}]}]
|
||||||
end,
|
end,
|
||||||
case SASL of
|
case Auth of
|
||||||
{error_cert_verif, CertVerifyResult, Certificate} ->
|
{error, RemoteServer, CertError}
|
||||||
CertError = p1_tls:get_cert_verify_string(CertVerifyResult,
|
when StateData#state.tls_certverify ->
|
||||||
Certificate),
|
|
||||||
RemoteServer = xml:get_attr_s(<<"from">>, Attrs),
|
|
||||||
?INFO_MSG("Closing s2s connection: ~s <--> ~s (~s)",
|
?INFO_MSG("Closing s2s connection: ~s <--> ~s (~s)",
|
||||||
[StateData#state.server, RemoteServer, CertError]),
|
[StateData#state.server, RemoteServer, CertError]),
|
||||||
send_text(StateData,
|
send_text(StateData,
|
||||||
xml:element_to_binary(?SERRT_POLICY_VIOLATION(<<"en">>,
|
<<(xml:element_to_binary(?SERRT_POLICY_VIOLATION(<<"en">>,
|
||||||
CertError))),
|
CertError)))/binary,
|
||||||
{atomic, Pid} =
|
(?STREAM_TRAILER)/binary>>),
|
||||||
ejabberd_s2s:find_connection(jlib:make_jid(<<"">>,
|
|
||||||
Server, <<"">>),
|
|
||||||
jlib:make_jid(<<"">>,
|
|
||||||
RemoteServer,
|
|
||||||
<<"">>)),
|
|
||||||
ejabberd_s2s_out:stop_connection(Pid),
|
|
||||||
{stop, normal, StateData};
|
{stop, normal, StateData};
|
||||||
_ ->
|
{VerifyResult, RemoteServer, Msg} ->
|
||||||
send_element(StateData,
|
{SASL, NewStateData} = case VerifyResult of
|
||||||
|
ok ->
|
||||||
|
{[#xmlel{name = <<"mechanisms">>,
|
||||||
|
attrs = [{<<"xmlns">>, ?NS_SASL}],
|
||||||
|
children =
|
||||||
|
[#xmlel{name = <<"mechanism">>,
|
||||||
|
attrs = [],
|
||||||
|
children =
|
||||||
|
[{xmlcdata,
|
||||||
|
<<"EXTERNAL">>}]}]}],
|
||||||
|
StateData#state{auth_domain = RemoteServer}};
|
||||||
|
error ->
|
||||||
|
?DEBUG("Won't accept certificate of ~s: ~s",
|
||||||
|
[RemoteServer, Msg]),
|
||||||
|
{[], StateData};
|
||||||
|
no_verify ->
|
||||||
|
{[], StateData}
|
||||||
|
end,
|
||||||
|
send_element(NewStateData,
|
||||||
#xmlel{name = <<"stream:features">>, attrs = [],
|
#xmlel{name = <<"stream:features">>, attrs = [],
|
||||||
children =
|
children =
|
||||||
SASL ++
|
SASL ++
|
||||||
@ -284,7 +283,7 @@ wait_for_stream({xmlstreamstart, _Name, Attrs},
|
|||||||
Server, [],
|
Server, [],
|
||||||
[Server])}),
|
[Server])}),
|
||||||
{next_state, wait_for_feature_request,
|
{next_state, wait_for_feature_request,
|
||||||
StateData#state{server = Server}}
|
NewStateData#state{server = Server}}
|
||||||
end;
|
end;
|
||||||
{<<"jabber:server">>, _, Server, true}
|
{<<"jabber:server">>, _, Server, true}
|
||||||
when StateData#state.authenticated ->
|
when StateData#state.authenticated ->
|
||||||
@ -319,7 +318,7 @@ wait_for_stream(closed, StateData) ->
|
|||||||
|
|
||||||
wait_for_feature_request({xmlstreamelement, El},
|
wait_for_feature_request({xmlstreamelement, El},
|
||||||
StateData) ->
|
StateData) ->
|
||||||
#xmlel{name = Name, attrs = Attrs, children = Els} = El,
|
#xmlel{name = Name, attrs = Attrs} = El,
|
||||||
TLS = StateData#state.tls,
|
TLS = StateData#state.tls,
|
||||||
TLSEnabled = StateData#state.tls_enabled,
|
TLSEnabled = StateData#state.tls_enabled,
|
||||||
SockMod =
|
SockMod =
|
||||||
@ -365,39 +364,11 @@ wait_for_feature_request({xmlstreamelement, El},
|
|||||||
{?NS_SASL, <<"auth">>} when TLSEnabled ->
|
{?NS_SASL, <<"auth">>} when TLSEnabled ->
|
||||||
Mech = xml:get_attr_s(<<"mechanism">>, Attrs),
|
Mech = xml:get_attr_s(<<"mechanism">>, Attrs),
|
||||||
case Mech of
|
case Mech of
|
||||||
<<"EXTERNAL">> ->
|
<<"EXTERNAL">> when StateData#state.auth_domain /= <<"">> ->
|
||||||
Auth = jlib:decode_base64(xml:get_cdata(Els)),
|
AuthDomain = StateData#state.auth_domain,
|
||||||
AuthDomain = jlib:nameprep(Auth),
|
|
||||||
AuthRes = case
|
|
||||||
(StateData#state.sockmod):get_peer_certificate(StateData#state.socket)
|
|
||||||
of
|
|
||||||
{ok, Cert} ->
|
|
||||||
case
|
|
||||||
(StateData#state.sockmod):get_verify_result(StateData#state.socket)
|
|
||||||
of
|
|
||||||
0 ->
|
|
||||||
case AuthDomain of
|
|
||||||
error -> false;
|
|
||||||
_ ->
|
|
||||||
case
|
|
||||||
idna:domain_utf8_to_ascii(AuthDomain)
|
|
||||||
of
|
|
||||||
false -> false;
|
|
||||||
PCAuthDomain ->
|
|
||||||
lists:any(fun (D) ->
|
|
||||||
match_domain(PCAuthDomain,
|
|
||||||
D)
|
|
||||||
end,
|
|
||||||
get_cert_domains(Cert))
|
|
||||||
end
|
|
||||||
end;
|
|
||||||
_ -> false
|
|
||||||
end;
|
|
||||||
error -> false
|
|
||||||
end,
|
|
||||||
AllowRemoteHost = ejabberd_s2s:allow_host(<<"">>,
|
AllowRemoteHost = ejabberd_s2s:allow_host(<<"">>,
|
||||||
AuthDomain),
|
AuthDomain),
|
||||||
if AuthRes andalso AllowRemoteHost ->
|
if AllowRemoteHost ->
|
||||||
(StateData#state.sockmod):reset_stream(StateData#state.socket),
|
(StateData#state.sockmod):reset_stream(StateData#state.socket),
|
||||||
send_element(StateData,
|
send_element(StateData,
|
||||||
#xmlel{name = <<"success">>,
|
#xmlel{name = <<"success">>,
|
||||||
@ -409,8 +380,7 @@ wait_for_feature_request({xmlstreamelement, El},
|
|||||||
jlib:make_jid(<<"">>, AuthDomain, <<"">>)),
|
jlib:make_jid(<<"">>, AuthDomain, <<"">>)),
|
||||||
{next_state, wait_for_stream,
|
{next_state, wait_for_stream,
|
||||||
StateData#state{streamid = new_id(),
|
StateData#state{streamid = new_id(),
|
||||||
authenticated = true,
|
authenticated = true}};
|
||||||
auth_domain = AuthDomain}};
|
|
||||||
true ->
|
true ->
|
||||||
send_element(StateData,
|
send_element(StateData,
|
||||||
#xmlel{name = <<"failure">>,
|
#xmlel{name = <<"failure">>,
|
||||||
@ -727,125 +697,6 @@ is_key_packet(#xmlel{name = Name, attrs = Attrs,
|
|||||||
xml:get_attr_s(<<"id">>, Attrs), xml:get_cdata(Els)};
|
xml:get_attr_s(<<"id">>, Attrs), xml:get_cdata(Els)};
|
||||||
is_key_packet(_) -> false.
|
is_key_packet(_) -> false.
|
||||||
|
|
||||||
get_cert_domains(Cert) ->
|
|
||||||
{rdnSequence, Subject} =
|
|
||||||
(Cert#'Certificate'.tbsCertificate)#'TBSCertificate'.subject,
|
|
||||||
Extensions =
|
|
||||||
(Cert#'Certificate'.tbsCertificate)#'TBSCertificate'.extensions,
|
|
||||||
lists:flatmap(fun (#'AttributeTypeAndValue'{type =
|
|
||||||
?'id-at-commonName',
|
|
||||||
value = Val}) ->
|
|
||||||
case 'OTP-PUB-KEY':decode('X520CommonName', Val) of
|
|
||||||
{ok, {_, D1}} ->
|
|
||||||
D = if is_binary(D1) -> D1;
|
|
||||||
is_binary(D1) -> (D1);
|
|
||||||
true -> error
|
|
||||||
end,
|
|
||||||
if D /= error ->
|
|
||||||
case jlib:string_to_jid(D) of
|
|
||||||
#jid{luser = <<"">>, lserver = LD,
|
|
||||||
lresource = <<"">>} ->
|
|
||||||
[LD];
|
|
||||||
_ -> []
|
|
||||||
end;
|
|
||||||
true -> []
|
|
||||||
end;
|
|
||||||
_ -> []
|
|
||||||
end;
|
|
||||||
(_) -> []
|
|
||||||
end,
|
|
||||||
lists:flatten(Subject))
|
|
||||||
++
|
|
||||||
lists:flatmap(fun (#'Extension'{extnID =
|
|
||||||
?'id-ce-subjectAltName',
|
|
||||||
extnValue = Val}) ->
|
|
||||||
BVal = if is_binary(Val) -> iolist_to_binary(Val);
|
|
||||||
is_binary(Val) -> Val;
|
|
||||||
true -> Val
|
|
||||||
end,
|
|
||||||
case 'OTP-PUB-KEY':decode('SubjectAltName', BVal)
|
|
||||||
of
|
|
||||||
{ok, SANs} ->
|
|
||||||
lists:flatmap(fun ({otherName,
|
|
||||||
#'AnotherName'{'type-id' =
|
|
||||||
?'id-on-xmppAddr',
|
|
||||||
value =
|
|
||||||
XmppAddr}}) ->
|
|
||||||
case
|
|
||||||
'XmppAddr':decode('XmppAddr',
|
|
||||||
XmppAddr)
|
|
||||||
of
|
|
||||||
{ok, D}
|
|
||||||
when
|
|
||||||
is_binary(D) ->
|
|
||||||
case
|
|
||||||
jlib:string_to_jid((D))
|
|
||||||
of
|
|
||||||
#jid{luser =
|
|
||||||
<<"">>,
|
|
||||||
lserver =
|
|
||||||
LD,
|
|
||||||
lresource =
|
|
||||||
<<"">>} ->
|
|
||||||
case
|
|
||||||
idna:domain_utf8_to_ascii(LD)
|
|
||||||
of
|
|
||||||
false ->
|
|
||||||
[];
|
|
||||||
PCLD ->
|
|
||||||
[PCLD]
|
|
||||||
end;
|
|
||||||
_ -> []
|
|
||||||
end;
|
|
||||||
_ -> []
|
|
||||||
end;
|
|
||||||
({dNSName, D})
|
|
||||||
when is_binary(D) ->
|
|
||||||
case
|
|
||||||
jlib:string_to_jid(D)
|
|
||||||
of
|
|
||||||
#jid{luser = <<"">>,
|
|
||||||
lserver = LD,
|
|
||||||
lresource =
|
|
||||||
<<"">>} ->
|
|
||||||
[LD];
|
|
||||||
_ -> []
|
|
||||||
end;
|
|
||||||
(_) -> []
|
|
||||||
end,
|
|
||||||
SANs);
|
|
||||||
_ -> []
|
|
||||||
end;
|
|
||||||
(_) -> []
|
|
||||||
end,
|
|
||||||
Extensions).
|
|
||||||
|
|
||||||
match_domain(Domain, Domain) -> true;
|
|
||||||
match_domain(Domain, Pattern) ->
|
|
||||||
DLabels = str:tokens(Domain, <<".">>),
|
|
||||||
PLabels = str:tokens(Pattern, <<".">>),
|
|
||||||
match_labels(DLabels, PLabels).
|
|
||||||
|
|
||||||
match_labels([], []) -> true;
|
|
||||||
match_labels([], [_ | _]) -> false;
|
|
||||||
match_labels([_ | _], []) -> false;
|
|
||||||
match_labels([DL | DLabels], [PL | PLabels]) ->
|
|
||||||
case lists:all(fun (C) ->
|
|
||||||
$a =< C andalso C =< $z orelse
|
|
||||||
$0 =< C andalso C =< $9 orelse
|
|
||||||
C == $- orelse C == $*
|
|
||||||
end,
|
|
||||||
binary_to_list(PL))
|
|
||||||
of
|
|
||||||
true ->
|
|
||||||
Regexp = ejabberd_regexp:sh_to_awk(PL),
|
|
||||||
case ejabberd_regexp:run(DL, Regexp) of
|
|
||||||
match -> match_labels(DLabels, PLabels);
|
|
||||||
nomatch -> false
|
|
||||||
end;
|
|
||||||
false -> false
|
|
||||||
end.
|
|
||||||
|
|
||||||
fsm_limit_opts(Opts) ->
|
fsm_limit_opts(Opts) ->
|
||||||
case lists:keysearch(max_fsm_queue, 1, Opts) of
|
case lists:keysearch(max_fsm_queue, 1, Opts) of
|
||||||
{value, {_, N}} when is_integer(N) -> [{max_queue, N}];
|
{value, {_, N}} when is_integer(N) -> [{max_queue, N}];
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
%%% Created : 6 Dec 2002 by Alexey Shchepin <alexey@process-one.net>
|
%%% Created : 6 Dec 2002 by Alexey Shchepin <alexey@process-one.net>
|
||||||
%%%
|
%%%
|
||||||
%%%
|
%%%
|
||||||
%%% ejabberd, Copyright (C) 2002-2013 ProcessOne
|
%%% ejabberd, Copyright (C) 2002-2014 ProcessOne
|
||||||
%%%
|
%%%
|
||||||
%%% This program is free software; you can redistribute it and/or
|
%%% This program is free software; you can redistribute it and/or
|
||||||
%%% modify it under the terms of the GNU General Public License as
|
%%% modify it under the terms of the GNU General Public License as
|
||||||
@ -17,10 +17,9 @@
|
|||||||
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
%%% General Public License for more details.
|
%%% General Public License for more details.
|
||||||
%%%
|
%%%
|
||||||
%%% You should have received a copy of the GNU General Public License
|
%%% You should have received a copy of the GNU General Public License along
|
||||||
%%% along with this program; if not, write to the Free Software
|
%%% with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
%%% 02111-1307 USA
|
|
||||||
%%%
|
%%%
|
||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
|
|
||||||
@ -70,6 +69,7 @@
|
|||||||
use_v10 = true :: boolean(),
|
use_v10 = true :: boolean(),
|
||||||
tls = false :: boolean(),
|
tls = false :: boolean(),
|
||||||
tls_required = false :: boolean(),
|
tls_required = false :: boolean(),
|
||||||
|
tls_certverify = false :: boolean(),
|
||||||
tls_enabled = false :: boolean(),
|
tls_enabled = false :: boolean(),
|
||||||
tls_options = [connect] :: list(),
|
tls_options = [connect] :: list(),
|
||||||
authenticated = false :: boolean(),
|
authenticated = false :: boolean(),
|
||||||
@ -161,28 +161,27 @@ stop_connection(Pid) -> p1_fsm:send_event(Pid, closed).
|
|||||||
init([From, Server, Type]) ->
|
init([From, Server, Type]) ->
|
||||||
process_flag(trap_exit, true),
|
process_flag(trap_exit, true),
|
||||||
?DEBUG("started: ~p", [{From, Server, Type}]),
|
?DEBUG("started: ~p", [{From, Server, Type}]),
|
||||||
{TLS, TLSRequired} = case
|
{TLS, TLSRequired, TLSCertverify} =
|
||||||
ejabberd_config:get_option(
|
case ejabberd_config:get_option(
|
||||||
s2s_use_starttls,
|
s2s_use_starttls,
|
||||||
fun(true) -> true;
|
fun(true) -> true;
|
||||||
(false) -> false;
|
(false) -> false;
|
||||||
(optional) -> optional;
|
(optional) -> optional;
|
||||||
(required) -> required;
|
(required) -> required;
|
||||||
(required_trusted) -> required_trusted
|
(required_trusted) -> required_trusted
|
||||||
end)
|
end)
|
||||||
of
|
of
|
||||||
UseTls
|
UseTls
|
||||||
when (UseTls == undefined) or
|
when (UseTls == undefined) or (UseTls == false) ->
|
||||||
(UseTls == false) ->
|
{false, false, false};
|
||||||
{false, false};
|
UseTls
|
||||||
UseTls
|
when (UseTls == true) or (UseTls == optional) ->
|
||||||
when (UseTls == true) or (UseTls == optional) ->
|
{true, false, false};
|
||||||
{true, false};
|
required ->
|
||||||
UseTls
|
{true, true, false};
|
||||||
when (UseTls == required) or
|
required_trusted ->
|
||||||
(UseTls == required_trusted) ->
|
{true, true, true}
|
||||||
{true, true}
|
end,
|
||||||
end,
|
|
||||||
UseV10 = TLS,
|
UseV10 = TLS,
|
||||||
TLSOpts1 = case
|
TLSOpts1 = case
|
||||||
ejabberd_config:get_option(
|
ejabberd_config:get_option(
|
||||||
@ -196,13 +195,25 @@ init([From, Server, Type]) ->
|
|||||||
undefined -> TLSOpts1;
|
undefined -> TLSOpts1;
|
||||||
Ciphers -> [{ciphers, Ciphers} | TLSOpts1]
|
Ciphers -> [{ciphers, Ciphers} | TLSOpts1]
|
||||||
end,
|
end,
|
||||||
|
TLSOpts3 = case ejabberd_config:get_option(
|
||||||
|
s2s_protocol_options,
|
||||||
|
fun (Options) ->
|
||||||
|
[_|O] = lists:foldl(
|
||||||
|
fun(X, Acc) -> X ++ Acc end, [],
|
||||||
|
[["|" | binary_to_list(Opt)] || Opt <- Options, is_binary(Opt)]
|
||||||
|
),
|
||||||
|
iolist_to_binary(O)
|
||||||
|
end) of
|
||||||
|
undefined -> TLSOpts2;
|
||||||
|
ProtocolOpts -> [{protocol_options, ProtocolOpts} | TLSOpts2]
|
||||||
|
end,
|
||||||
TLSOpts = case ejabberd_config:get_option(
|
TLSOpts = case ejabberd_config:get_option(
|
||||||
{s2s_tls_compression, From},
|
{s2s_tls_compression, From},
|
||||||
fun(true) -> true;
|
fun(true) -> true;
|
||||||
(false) -> false
|
(false) -> false
|
||||||
end, true) of
|
end, true) of
|
||||||
false -> [compression_none | TLSOpts2];
|
false -> [compression_none | TLSOpts3];
|
||||||
true -> TLSOpts2
|
true -> TLSOpts3
|
||||||
end,
|
end,
|
||||||
{New, Verify} = case Type of
|
{New, Verify} = case Type of
|
||||||
{new, Key} -> {Key, false};
|
{new, Key} -> {Key, false};
|
||||||
@ -212,9 +223,9 @@ init([From, Server, Type]) ->
|
|||||||
Timer = erlang:start_timer(?S2STIMEOUT, self(), []),
|
Timer = erlang:start_timer(?S2STIMEOUT, self(), []),
|
||||||
{ok, open_socket,
|
{ok, open_socket,
|
||||||
#state{use_v10 = UseV10, tls = TLS,
|
#state{use_v10 = UseV10, tls = TLS,
|
||||||
tls_required = TLSRequired, tls_options = TLSOpts,
|
tls_required = TLSRequired, tls_certverify = TLSCertverify,
|
||||||
queue = queue:new(), myname = From, server = Server,
|
tls_options = TLSOpts, queue = queue:new(), myname = From,
|
||||||
new = New, verify = Verify, timer = Timer}}.
|
server = Server, new = New, verify = Verify, timer = Timer}}.
|
||||||
|
|
||||||
%%----------------------------------------------------------------------
|
%%----------------------------------------------------------------------
|
||||||
%% Func: StateName/2
|
%% Func: StateName/2
|
||||||
@ -334,35 +345,57 @@ open_socket2(Type, Addr, Port) ->
|
|||||||
|
|
||||||
wait_for_stream({xmlstreamstart, _Name, Attrs},
|
wait_for_stream({xmlstreamstart, _Name, Attrs},
|
||||||
StateData) ->
|
StateData) ->
|
||||||
|
{CertCheckRes, CertCheckMsg, NewStateData} =
|
||||||
|
if StateData#state.tls_certverify, StateData#state.tls_enabled ->
|
||||||
|
{Res, Msg} =
|
||||||
|
ejabberd_s2s:check_peer_certificate(ejabberd_socket,
|
||||||
|
StateData#state.socket,
|
||||||
|
StateData#state.server),
|
||||||
|
?DEBUG("Certificate verification result for ~s: ~s",
|
||||||
|
[StateData#state.server, Msg]),
|
||||||
|
{Res, Msg, StateData#state{tls_certverify = false}};
|
||||||
|
true ->
|
||||||
|
{no_verify, <<"Not verified">>, StateData}
|
||||||
|
end,
|
||||||
case {xml:get_attr_s(<<"xmlns">>, Attrs),
|
case {xml:get_attr_s(<<"xmlns">>, Attrs),
|
||||||
xml:get_attr_s(<<"xmlns:db">>, Attrs),
|
xml:get_attr_s(<<"xmlns:db">>, Attrs),
|
||||||
xml:get_attr_s(<<"version">>, Attrs) == <<"1.0">>}
|
xml:get_attr_s(<<"version">>, Attrs) == <<"1.0">>}
|
||||||
of
|
of
|
||||||
|
_ when CertCheckRes == error ->
|
||||||
|
send_text(NewStateData,
|
||||||
|
<<(xml:element_to_binary(?SERRT_POLICY_VIOLATION(<<"en">>,
|
||||||
|
CertCheckMsg)))/binary,
|
||||||
|
(?STREAM_TRAILER)/binary>>),
|
||||||
|
?INFO_MSG("Closing s2s connection: ~s -> ~s (~s)",
|
||||||
|
[NewStateData#state.myname,
|
||||||
|
NewStateData#state.server,
|
||||||
|
CertCheckMsg]),
|
||||||
|
{stop, normal, NewStateData};
|
||||||
{<<"jabber:server">>, <<"jabber:server:dialback">>,
|
{<<"jabber:server">>, <<"jabber:server:dialback">>,
|
||||||
false} ->
|
false} ->
|
||||||
send_db_request(StateData);
|
send_db_request(NewStateData);
|
||||||
{<<"jabber:server">>, <<"jabber:server:dialback">>,
|
{<<"jabber:server">>, <<"jabber:server:dialback">>,
|
||||||
true}
|
true}
|
||||||
when StateData#state.use_v10 ->
|
when NewStateData#state.use_v10 ->
|
||||||
{next_state, wait_for_features, StateData, ?FSMTIMEOUT};
|
{next_state, wait_for_features, NewStateData, ?FSMTIMEOUT};
|
||||||
%% Clause added to handle Tigase's workaround for an old ejabberd bug:
|
%% Clause added to handle Tigase's workaround for an old ejabberd bug:
|
||||||
{<<"jabber:server">>, <<"jabber:server:dialback">>,
|
{<<"jabber:server">>, <<"jabber:server:dialback">>,
|
||||||
true}
|
true}
|
||||||
when not StateData#state.use_v10 ->
|
when not NewStateData#state.use_v10 ->
|
||||||
send_db_request(StateData);
|
send_db_request(NewStateData);
|
||||||
{<<"jabber:server">>, <<"">>, true}
|
{<<"jabber:server">>, <<"">>, true}
|
||||||
when StateData#state.use_v10 ->
|
when NewStateData#state.use_v10 ->
|
||||||
{next_state, wait_for_features,
|
{next_state, wait_for_features,
|
||||||
StateData#state{db_enabled = false}, ?FSMTIMEOUT};
|
NewStateData#state{db_enabled = false}, ?FSMTIMEOUT};
|
||||||
{NSProvided, DB, _} ->
|
{NSProvided, DB, _} ->
|
||||||
send_text(StateData, ?INVALID_NAMESPACE_ERR),
|
send_text(NewStateData, ?INVALID_NAMESPACE_ERR),
|
||||||
?INFO_MSG("Closing s2s connection: ~s -> ~s (invalid "
|
?INFO_MSG("Closing s2s connection: ~s -> ~s (invalid "
|
||||||
"namespace).~nNamespace provided: ~p~nNamespac"
|
"namespace).~nNamespace provided: ~p~nNamespac"
|
||||||
"e expected: \"jabber:server\"~nxmlns:db "
|
"e expected: \"jabber:server\"~nxmlns:db "
|
||||||
"provided: ~p~nAll attributes: ~p",
|
"provided: ~p~nAll attributes: ~p",
|
||||||
[StateData#state.myname, StateData#state.server,
|
[NewStateData#state.myname, NewStateData#state.server,
|
||||||
NSProvided, DB, Attrs]),
|
NSProvided, DB, Attrs]),
|
||||||
{stop, normal, StateData}
|
{stop, normal, NewStateData}
|
||||||
end;
|
end;
|
||||||
wait_for_stream({xmlstreamerror, _}, StateData) ->
|
wait_for_stream({xmlstreamerror, _}, StateData) ->
|
||||||
send_text(StateData,
|
send_text(StateData,
|
||||||
@ -559,15 +592,19 @@ wait_for_features({xmlstreamelement, El}, StateData) ->
|
|||||||
if not SASLEXT and not StartTLS and
|
if not SASLEXT and not StartTLS and
|
||||||
StateData#state.authenticated ->
|
StateData#state.authenticated ->
|
||||||
send_queue(StateData, StateData#state.queue),
|
send_queue(StateData, StateData#state.queue),
|
||||||
?INFO_MSG("Connection established: ~s -> ~s",
|
?INFO_MSG("Connection established: ~s -> ~s with "
|
||||||
[StateData#state.myname, StateData#state.server]),
|
"SASL EXTERNAL and TLS=~p",
|
||||||
|
[StateData#state.myname, StateData#state.server,
|
||||||
|
StateData#state.tls_enabled]),
|
||||||
ejabberd_hooks:run(s2s_connect_hook,
|
ejabberd_hooks:run(s2s_connect_hook,
|
||||||
[StateData#state.myname,
|
[StateData#state.myname,
|
||||||
StateData#state.server]),
|
StateData#state.server]),
|
||||||
{next_state, stream_established,
|
{next_state, stream_established,
|
||||||
StateData#state{queue = queue:new()}};
|
StateData#state{queue = queue:new()}};
|
||||||
SASLEXT and StateData#state.try_auth and
|
SASLEXT and StateData#state.try_auth and
|
||||||
(StateData#state.new /= false) ->
|
(StateData#state.new /= false) and
|
||||||
|
(StateData#state.tls_enabled or
|
||||||
|
not StateData#state.tls_required) ->
|
||||||
send_element(StateData,
|
send_element(StateData,
|
||||||
#xmlel{name = <<"auth">>,
|
#xmlel{name = <<"auth">>,
|
||||||
attrs =
|
attrs =
|
||||||
@ -725,8 +762,8 @@ wait_for_starttls_proceed({xmlstreamelement, El},
|
|||||||
tls_options = TLSOpts},
|
tls_options = TLSOpts},
|
||||||
send_text(NewStateData,
|
send_text(NewStateData,
|
||||||
io_lib:format(?STREAM_HEADER,
|
io_lib:format(?STREAM_HEADER,
|
||||||
[StateData#state.myname,
|
[NewStateData#state.myname,
|
||||||
StateData#state.server,
|
NewStateData#state.server,
|
||||||
<<" version='1.0'">>])),
|
<<" version='1.0'">>])),
|
||||||
{next_state, wait_for_stream, NewStateData,
|
{next_state, wait_for_stream, NewStateData,
|
||||||
?FSMTIMEOUT};
|
?FSMTIMEOUT};
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
%%% Created : 6 Dec 2002 by Alexey Shchepin <alexey@process-one.net>
|
%%% Created : 6 Dec 2002 by Alexey Shchepin <alexey@process-one.net>
|
||||||
%%%
|
%%%
|
||||||
%%%
|
%%%
|
||||||
%%% ejabberd, Copyright (C) 2002-2013 ProcessOne
|
%%% ejabberd, Copyright (C) 2002-2014 ProcessOne
|
||||||
%%%
|
%%%
|
||||||
%%% This program is free software; you can redistribute it and/or
|
%%% This program is free software; you can redistribute it and/or
|
||||||
%%% modify it under the terms of the GNU General Public License as
|
%%% modify it under the terms of the GNU General Public License as
|
||||||
@ -17,10 +17,9 @@
|
|||||||
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
%%% General Public License for more details.
|
%%% General Public License for more details.
|
||||||
%%%
|
%%%
|
||||||
%%% You should have received a copy of the GNU General Public License
|
%%% You should have received a copy of the GNU General Public License along
|
||||||
%%% along with this program; if not, write to the Free Software
|
%%% with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
%%% 02111-1307 USA
|
|
||||||
%%%
|
%%%
|
||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
%%% Created : 24 Nov 2002 by Alexey Shchepin <alexey@process-one.net>
|
%%% Created : 24 Nov 2002 by Alexey Shchepin <alexey@process-one.net>
|
||||||
%%%
|
%%%
|
||||||
%%%
|
%%%
|
||||||
%%% ejabberd, Copyright (C) 2002-2013 ProcessOne
|
%%% ejabberd, Copyright (C) 2002-2014 ProcessOne
|
||||||
%%%
|
%%%
|
||||||
%%% This program is free software; you can redistribute it and/or
|
%%% This program is free software; you can redistribute it and/or
|
||||||
%%% modify it under the terms of the GNU General Public License as
|
%%% modify it under the terms of the GNU General Public License as
|
||||||
@ -17,10 +17,9 @@
|
|||||||
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
%%% General Public License for more details.
|
%%% General Public License for more details.
|
||||||
%%%
|
%%%
|
||||||
%%% You should have received a copy of the GNU General Public License
|
%%% You should have received a copy of the GNU General Public License along
|
||||||
%%% along with this program; if not, write to the Free Software
|
%%% with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
%%% 02111-1307 USA
|
|
||||||
%%%
|
%%%
|
||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
|
|
||||||
@ -40,6 +39,7 @@
|
|||||||
bounce_offline_message/3,
|
bounce_offline_message/3,
|
||||||
disconnect_removed_user/2,
|
disconnect_removed_user/2,
|
||||||
get_user_resources/2,
|
get_user_resources/2,
|
||||||
|
get_user_present_resources/2,
|
||||||
set_presence/7,
|
set_presence/7,
|
||||||
unset_presence/6,
|
unset_presence/6,
|
||||||
close_session_unset_presence/5,
|
close_session_unset_presence/5,
|
||||||
@ -54,9 +54,11 @@
|
|||||||
connected_users/0,
|
connected_users/0,
|
||||||
connected_users_number/0,
|
connected_users_number/0,
|
||||||
user_resources/2,
|
user_resources/2,
|
||||||
|
disconnect_user/2,
|
||||||
get_session_pid/3,
|
get_session_pid/3,
|
||||||
get_user_info/3,
|
get_user_info/3,
|
||||||
get_user_ip/3,
|
get_user_ip/3,
|
||||||
|
get_max_user_sessions/2,
|
||||||
is_existing_resource/3
|
is_existing_resource/3
|
||||||
]).
|
]).
|
||||||
|
|
||||||
@ -174,6 +176,20 @@ get_user_resources(User, Server) ->
|
|||||||
[element(3, S#session.usr) || S <- clean_session_list(Ss)]
|
[element(3, S#session.usr) || S <- clean_session_list(Ss)]
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
-spec get_user_present_resources(binary(), binary()) -> [tuple()].
|
||||||
|
|
||||||
|
get_user_present_resources(LUser, LServer) ->
|
||||||
|
US = {LUser, LServer},
|
||||||
|
case catch mnesia:dirty_index_read(session, US,
|
||||||
|
#session.us)
|
||||||
|
of
|
||||||
|
{'EXIT', _Reason} -> [];
|
||||||
|
Ss ->
|
||||||
|
[{S#session.priority, element(3, S#session.usr)}
|
||||||
|
|| S <- clean_session_list(Ss),
|
||||||
|
is_integer(S#session.priority)]
|
||||||
|
end.
|
||||||
|
|
||||||
-spec get_user_ip(binary(), binary(), binary()) -> ip().
|
-spec get_user_ip(binary(), binary(), binary()) -> ip().
|
||||||
|
|
||||||
get_user_ip(User, Server, Resource) ->
|
get_user_ip(User, Server, Resource) ->
|
||||||
@ -677,20 +693,6 @@ clean_session_list([S1, S2 | Rest], Res) ->
|
|||||||
|
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
|
||||||
get_user_present_resources(LUser, LServer) ->
|
|
||||||
US = {LUser, LServer},
|
|
||||||
case catch mnesia:dirty_index_read(session, US,
|
|
||||||
#session.us)
|
|
||||||
of
|
|
||||||
{'EXIT', _Reason} -> [];
|
|
||||||
Ss ->
|
|
||||||
[{S#session.priority, element(3, S#session.usr)}
|
|
||||||
|| S <- clean_session_list(Ss),
|
|
||||||
is_integer(S#session.priority)]
|
|
||||||
end.
|
|
||||||
|
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
||||||
|
|
||||||
%% On new session, check if some existing connections need to be replace
|
%% On new session, check if some existing connections need to be replace
|
||||||
check_for_sessions_to_replace(User, Server, Resource) ->
|
check_for_sessions_to_replace(User, Server, Resource) ->
|
||||||
LUser = jlib:nodeprep(User),
|
LUser = jlib:nodeprep(User),
|
||||||
@ -807,8 +809,14 @@ commands() ->
|
|||||||
tags = [session],
|
tags = [session],
|
||||||
desc = "List user's connected resources",
|
desc = "List user's connected resources",
|
||||||
module = ?MODULE, function = user_resources,
|
module = ?MODULE, function = user_resources,
|
||||||
args = [{user, string}, {host, string}],
|
args = [{user, binary}, {host, binary}],
|
||||||
result = {resources, {list, {resource, string}}}}].
|
result = {resources, {list, {resource, string}}}},
|
||||||
|
#ejabberd_commands{name = disconnect_user,
|
||||||
|
tags = [session],
|
||||||
|
desc = "Disconnect user's active sessions",
|
||||||
|
module = ?MODULE, function = disconnect_user,
|
||||||
|
args = [{user, binary}, {host, binary}],
|
||||||
|
result = {num_resources, integer}}].
|
||||||
|
|
||||||
-spec connected_users() -> [binary()].
|
-spec connected_users() -> [binary()].
|
||||||
|
|
||||||
@ -825,6 +833,14 @@ user_resources(User, Server) ->
|
|||||||
Resources = get_user_resources(User, Server),
|
Resources = get_user_resources(User, Server),
|
||||||
lists:sort(Resources).
|
lists:sort(Resources).
|
||||||
|
|
||||||
|
disconnect_user(User, Server) ->
|
||||||
|
Resources = get_user_resources(User, Server),
|
||||||
|
lists:foreach(
|
||||||
|
fun(Resource) ->
|
||||||
|
PID = get_session_pid(User, Server, Resource),
|
||||||
|
PID ! disconnect
|
||||||
|
end, Resources),
|
||||||
|
length(Resources).
|
||||||
|
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
%%% Update Mnesia tables
|
%%% Update Mnesia tables
|
||||||
@ -834,6 +850,7 @@ update_tables() ->
|
|||||||
[ur, user, node] -> mnesia:delete_table(session);
|
[ur, user, node] -> mnesia:delete_table(session);
|
||||||
[ur, user, pid] -> mnesia:delete_table(session);
|
[ur, user, pid] -> mnesia:delete_table(session);
|
||||||
[usr, us, pid] -> mnesia:delete_table(session);
|
[usr, us, pid] -> mnesia:delete_table(session);
|
||||||
|
[usr, us, sid, priority, info] -> mnesia:delete_table(session);
|
||||||
[sid, usr, us, priority] ->
|
[sid, usr, us, priority] ->
|
||||||
mnesia:delete_table(session);
|
mnesia:delete_table(session);
|
||||||
[sid, usr, us, priority, info] -> ok;
|
[sid, usr, us, priority, info] -> ok;
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
%%% Created : 23 Aug 2006 by Alexey Shchepin <alexey@process-one.net>
|
%%% Created : 23 Aug 2006 by Alexey Shchepin <alexey@process-one.net>
|
||||||
%%%
|
%%%
|
||||||
%%%
|
%%%
|
||||||
%%% ejabberd, Copyright (C) 2002-2013 ProcessOne
|
%%% ejabberd, Copyright (C) 2002-2014 ProcessOne
|
||||||
%%%
|
%%%
|
||||||
%%% This program is free software; you can redistribute it and/or
|
%%% This program is free software; you can redistribute it and/or
|
||||||
%%% modify it under the terms of the GNU General Public License as
|
%%% modify it under the terms of the GNU General Public License as
|
||||||
@ -17,10 +17,9 @@
|
|||||||
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
%%% General Public License for more details.
|
%%% General Public License for more details.
|
||||||
%%%
|
%%%
|
||||||
%%% You should have received a copy of the GNU General Public License
|
%%% You should have received a copy of the GNU General Public License along
|
||||||
%%% along with this program; if not, write to the Free Software
|
%%% with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
%%% 02111-1307 USA
|
|
||||||
%%%
|
%%%
|
||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
%%% Created : 31 Jan 2003 by Alexey Shchepin <alexey@process-one.net>
|
%%% Created : 31 Jan 2003 by Alexey Shchepin <alexey@process-one.net>
|
||||||
%%%
|
%%%
|
||||||
%%%
|
%%%
|
||||||
%%% ejabberd, Copyright (C) 2002-2013 ProcessOne
|
%%% ejabberd, Copyright (C) 2002-2014 ProcessOne
|
||||||
%%%
|
%%%
|
||||||
%%% This program is free software; you can redistribute it and/or
|
%%% This program is free software; you can redistribute it and/or
|
||||||
%%% modify it under the terms of the GNU General Public License as
|
%%% modify it under the terms of the GNU General Public License as
|
||||||
@ -17,10 +17,9 @@
|
|||||||
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
%%% General Public License for more details.
|
%%% General Public License for more details.
|
||||||
%%%
|
%%%
|
||||||
%%% You should have received a copy of the GNU General Public License
|
%%% You should have received a copy of the GNU General Public License along
|
||||||
%%% along with this program; if not, write to the Free Software
|
%%% with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
%%% 02111-1307 USA
|
|
||||||
%%%
|
%%%
|
||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
%%% Created : 21 Mar 2007 by Alexey Shchepin <alexey@process-one.net>
|
%%% Created : 21 Mar 2007 by Alexey Shchepin <alexey@process-one.net>
|
||||||
%%%
|
%%%
|
||||||
%%%
|
%%%
|
||||||
%%% ejabberd, Copyright (C) 2002-2013 ProcessOne
|
%%% ejabberd, Copyright (C) 2002-2014 ProcessOne
|
||||||
%%%
|
%%%
|
||||||
%%% This program is free software; you can redistribute it and/or
|
%%% This program is free software; you can redistribute it and/or
|
||||||
%%% modify it under the terms of the GNU General Public License as
|
%%% modify it under the terms of the GNU General Public License as
|
||||||
@ -17,10 +17,9 @@
|
|||||||
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
%%% General Public License for more details.
|
%%% General Public License for more details.
|
||||||
%%%
|
%%%
|
||||||
%%% You should have received a copy of the GNU General Public License
|
%%% You should have received a copy of the GNU General Public License along
|
||||||
%%% along with this program; if not, write to the Free Software
|
%%% with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
%%% 02111-1307 USA
|
|
||||||
%%%
|
%%%
|
||||||
%%%-------------------------------------------------------------------
|
%%%-------------------------------------------------------------------
|
||||||
|
|
||||||
@ -245,9 +244,8 @@ s2s_out_info(Pid) ->
|
|||||||
[<<"Process type: s2s_out">>,
|
[<<"Process type: s2s_out">>,
|
||||||
case FromTo of
|
case FromTo of
|
||||||
[{From, To}] ->
|
[{From, To}] ->
|
||||||
<<"\n",
|
list_to_binary(io_lib:format("\nS2S connection: from ~s to ~s",
|
||||||
(io_lib:format("S2S connection: from ~s to ~s",
|
[From, To]));
|
||||||
[From, To]))/binary>>;
|
|
||||||
_ -> <<"">>
|
_ -> <<"">>
|
||||||
end,
|
end,
|
||||||
check_send_queue(Pid), <<"\n">>,
|
check_send_queue(Pid), <<"\n">>,
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
%%% Created : 18 Jul 2003 by Alexey Shchepin <alexey@process-one.net>
|
%%% Created : 18 Jul 2003 by Alexey Shchepin <alexey@process-one.net>
|
||||||
%%%
|
%%%
|
||||||
%%%
|
%%%
|
||||||
%%% ejabberd, Copyright (C) 2002-2013 ProcessOne
|
%%% ejabberd, Copyright (C) 2002-2014 ProcessOne
|
||||||
%%%
|
%%%
|
||||||
%%% This program is free software; you can redistribute it and/or
|
%%% This program is free software; you can redistribute it and/or
|
||||||
%%% modify it under the terms of the GNU General Public License as
|
%%% modify it under the terms of the GNU General Public License as
|
||||||
@ -17,10 +17,9 @@
|
|||||||
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
%%% General Public License for more details.
|
%%% General Public License for more details.
|
||||||
%%%
|
%%%
|
||||||
%%% You should have received a copy of the GNU General Public License
|
%%% You should have received a copy of the GNU General Public License along
|
||||||
%%% along with this program; if not, write to the Free Software
|
%%% with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
%%% 02111-1307 USA
|
|
||||||
%%%
|
%%%
|
||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
%%% Created : 27 Jan 2006 by Alexey Shchepin <alexey@process-one.net>
|
%%% Created : 27 Jan 2006 by Alexey Shchepin <alexey@process-one.net>
|
||||||
%%%
|
%%%
|
||||||
%%%
|
%%%
|
||||||
%%% ejabberd, Copyright (C) 2002-2013 ProcessOne
|
%%% ejabberd, Copyright (C) 2002-2014 ProcessOne
|
||||||
%%%
|
%%%
|
||||||
%%% This program is free software; you can redistribute it and/or
|
%%% This program is free software; you can redistribute it and/or
|
||||||
%%% modify it under the terms of the GNU General Public License as
|
%%% modify it under the terms of the GNU General Public License as
|
||||||
@ -17,10 +17,9 @@
|
|||||||
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
%%% General Public License for more details.
|
%%% General Public License for more details.
|
||||||
%%%
|
%%%
|
||||||
%%% You should have received a copy of the GNU General Public License
|
%%% You should have received a copy of the GNU General Public License along
|
||||||
%%% along with this program; if not, write to the Free Software
|
%%% with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
%%% 02111-1307 USA
|
|
||||||
%%%
|
%%%
|
||||||
%%%-------------------------------------------------------------------
|
%%%-------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
%%% Created : 28 Feb 2004 by Alexey Shchepin <alexey@process-one.net>
|
%%% Created : 28 Feb 2004 by Alexey Shchepin <alexey@process-one.net>
|
||||||
%%%
|
%%%
|
||||||
%%%
|
%%%
|
||||||
%%% ejabberd, Copyright (C) 2002-2013 ProcessOne
|
%%% ejabberd, Copyright (C) 2002-2014 ProcessOne
|
||||||
%%%
|
%%%
|
||||||
%%% This program is free software; you can redistribute it and/or
|
%%% This program is free software; you can redistribute it and/or
|
||||||
%%% modify it under the terms of the GNU General Public License as
|
%%% modify it under the terms of the GNU General Public License as
|
||||||
@ -18,10 +18,9 @@
|
|||||||
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
%%% General Public License for more details.
|
%%% General Public License for more details.
|
||||||
%%%
|
%%%
|
||||||
%%% You should have received a copy of the GNU General Public License
|
%%% You should have received a copy of the GNU General Public License along
|
||||||
%%% along with this program; if not, write to the Free Software
|
%%% with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
%%% 02111-1307 USA
|
|
||||||
%%%
|
%%%
|
||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
%%% Created : 9 Apr 2004 by Alexey Shchepin <alexey@process-one.net>
|
%%% Created : 9 Apr 2004 by Alexey Shchepin <alexey@process-one.net>
|
||||||
%%%
|
%%%
|
||||||
%%%
|
%%%
|
||||||
%%% ejabberd, Copyright (C) 2002-2013 ProcessOne
|
%%% ejabberd, Copyright (C) 2002-2014 ProcessOne
|
||||||
%%%
|
%%%
|
||||||
%%% This program is free software; you can redistribute it and/or
|
%%% This program is free software; you can redistribute it and/or
|
||||||
%%% modify it under the terms of the GNU General Public License as
|
%%% modify it under the terms of the GNU General Public License as
|
||||||
@ -17,10 +17,9 @@
|
|||||||
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
%%% General Public License for more details.
|
%%% General Public License for more details.
|
||||||
%%%
|
%%%
|
||||||
%%% You should have received a copy of the GNU General Public License
|
%%% You should have received a copy of the GNU General Public License along
|
||||||
%%% along with this program; if not, write to the Free Software
|
%%% with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
%%% 02111-1307 USA
|
|
||||||
%%%
|
%%%
|
||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
|
|
||||||
@ -341,7 +340,7 @@ make_xhtml(Els, Host, Node, Lang, JID) ->
|
|||||||
?XAE(<<"div">>, [{<<"id">>, <<"copyrightouter">>}],
|
?XAE(<<"div">>, [{<<"id">>, <<"copyrightouter">>}],
|
||||||
[?XAE(<<"div">>, [{<<"id">>, <<"copyright">>}],
|
[?XAE(<<"div">>, [{<<"id">>, <<"copyright">>}],
|
||||||
[?XC(<<"p">>,
|
[?XC(<<"p">>,
|
||||||
<<"ejabberd (c) 2002-2013 ProcessOne">>)])])])]}}.
|
<<"ejabberd (c) 2002-2014 ProcessOne">>)])])])]}}.
|
||||||
|
|
||||||
get_base_path(global, cluster) -> <<"/admin/">>;
|
get_base_path(global, cluster) -> <<"/admin/">>;
|
||||||
get_base_path(Host, cluster) ->
|
get_base_path(Host, cluster) ->
|
||||||
@ -1138,7 +1137,7 @@ string_to_spec2(ACLName, Val) ->
|
|||||||
jlib:string_to_jid(Val),
|
jlib:string_to_jid(Val),
|
||||||
case U of
|
case U of
|
||||||
<<"">> -> {ACLName, S};
|
<<"">> -> {ACLName, S};
|
||||||
_ -> {ACLName, U, S}
|
_ -> {ACLName, {U, S}}
|
||||||
end.
|
end.
|
||||||
|
|
||||||
acl_parse_delete(ACLs, Query) ->
|
acl_parse_delete(ACLs, Query) ->
|
||||||
@ -2183,7 +2182,7 @@ get_node(global, Node, [<<"update">>], Query, Lang) ->
|
|||||||
?XCT(<<"h3">>, <<"Update script">>), FmtScript,
|
?XCT(<<"h3">>, <<"Update script">>), FmtScript,
|
||||||
?XCT(<<"h3">>, <<"Low level update script">>),
|
?XCT(<<"h3">>, <<"Low level update script">>),
|
||||||
FmtLowLevelScript, ?XCT(<<"h3">>, <<"Script check">>),
|
FmtLowLevelScript, ?XCT(<<"h3">>, <<"Script check">>),
|
||||||
?XC(<<"pre">>, (iolist_to_binary(Check))),
|
?XC(<<"pre">>, (jlib:atom_to_binary(Check))),
|
||||||
?BR,
|
?BR,
|
||||||
?INPUTT(<<"submit">>, <<"update">>, <<"Update">>)])];
|
?INPUTT(<<"submit">>, <<"update">>, <<"Update">>)])];
|
||||||
get_node(Host, Node, NPath, Query, Lang) ->
|
get_node(Host, Node, NPath, Query, Lang) ->
|
||||||
|
@ -345,14 +345,18 @@ build_fault_response(Code, ParseString, ParseArgs) ->
|
|||||||
do_command(AccessCommands, Auth, Command, AttrL, ArgsF,
|
do_command(AccessCommands, Auth, Command, AttrL, ArgsF,
|
||||||
ResultF) ->
|
ResultF) ->
|
||||||
ArgsFormatted = format_args(AttrL, ArgsF),
|
ArgsFormatted = format_args(AttrL, ArgsF),
|
||||||
{UserT, ServerT, PasswordT} = Auth,
|
AuthBin = convert_auth(Auth),
|
||||||
AuthBin = {list_to_binary(UserT), list_to_binary(ServerT), list_to_binary(PasswordT)},
|
|
||||||
Result =
|
Result =
|
||||||
ejabberd_commands:execute_command(AccessCommands, AuthBin,
|
ejabberd_commands:execute_command(AccessCommands, AuthBin,
|
||||||
Command, ArgsFormatted),
|
Command, ArgsFormatted),
|
||||||
ResultFormatted = format_result(Result, ResultF),
|
ResultFormatted = format_result(Result, ResultF),
|
||||||
{command_result, ResultFormatted}.
|
{command_result, ResultFormatted}.
|
||||||
|
|
||||||
|
convert_auth(noauth) ->
|
||||||
|
noauth;
|
||||||
|
convert_auth({UserT, ServerT, PasswordT}) ->
|
||||||
|
{list_to_binary(UserT), list_to_binary(ServerT), list_to_binary(PasswordT)}.
|
||||||
|
|
||||||
%%-----------------------------
|
%%-----------------------------
|
||||||
%% Format arguments
|
%% Format arguments
|
||||||
%%-----------------------------
|
%%-----------------------------
|
||||||
@ -424,7 +428,11 @@ format_arg({array, Elements}, {list, ElementsDef})
|
|||||||
format_arg(Arg, integer) when is_integer(Arg) -> Arg;
|
format_arg(Arg, integer) when is_integer(Arg) -> Arg;
|
||||||
format_arg(Arg, binary) when is_list(Arg) -> list_to_binary(Arg);
|
format_arg(Arg, binary) when is_list(Arg) -> list_to_binary(Arg);
|
||||||
format_arg(Arg, binary) when is_binary(Arg) -> Arg;
|
format_arg(Arg, binary) when is_binary(Arg) -> Arg;
|
||||||
format_arg(Arg, string) when is_binary(Arg) -> Arg.
|
format_arg(Arg, string) when is_list(Arg) -> list_to_binary(Arg);
|
||||||
|
format_arg(Arg, string) when is_binary(Arg) -> Arg;
|
||||||
|
format_arg(Arg, Format) ->
|
||||||
|
?ERROR_MSG("don't know how to format Arg ~p for format ~p", [Arg, Format]),
|
||||||
|
throw({error_formatting_argument, Arg, Format}).
|
||||||
|
|
||||||
%% -----------------------------
|
%% -----------------------------
|
||||||
%% Result
|
%% Result
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
%%% Created : 22 Aug 2005 by Alexey Shchepin <alexey@process-one.net>
|
%%% Created : 22 Aug 2005 by Alexey Shchepin <alexey@process-one.net>
|
||||||
%%%
|
%%%
|
||||||
%%%
|
%%%
|
||||||
%%% ejabberd, Copyright (C) 2002-2013 ProcessOne
|
%%% ejabberd, Copyright (C) 2002-2014 ProcessOne
|
||||||
%%%
|
%%%
|
||||||
%%% This program is free software; you can redistribute it and/or
|
%%% This program is free software; you can redistribute it and/or
|
||||||
%%% modify it under the terms of the GNU General Public License as
|
%%% modify it under the terms of the GNU General Public License as
|
||||||
@ -17,10 +17,9 @@
|
|||||||
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
%%% General Public License for more details.
|
%%% General Public License for more details.
|
||||||
%%%
|
%%%
|
||||||
%%% You should have received a copy of the GNU General Public License
|
%%% You should have received a copy of the GNU General Public License along
|
||||||
%%% along with this program; if not, write to the Free Software
|
%%% with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
%%% 02111-1307 USA
|
|
||||||
%%%
|
%%%
|
||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -18,9 +18,9 @@
|
|||||||
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
%%% GNU General Public License for more details.
|
%%% GNU General Public License for more details.
|
||||||
%%%
|
%%%
|
||||||
%%% You should have received a copy of the GNU General Public License
|
%%% You should have received a copy of the GNU General Public License along
|
||||||
%%% along with this program; if not, write to the Free Software
|
%%% with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
|
||||||
%%% Modified by Sean Hinde <shinde@iee.org> 7th Dec 2000
|
%%% Modified by Sean Hinde <shinde@iee.org> 7th Dec 2000
|
||||||
%%% Turned into gen_fsm, made non-blocking, added timers etc to support this.
|
%%% Turned into gen_fsm, made non-blocking, added timers etc to support this.
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
%%% Author: Evgeniy Khramtsov <ekhramtsov@process-one.net>
|
%%% Author: Evgeniy Khramtsov <ekhramtsov@process-one.net>
|
||||||
%%%
|
%%%
|
||||||
%%%
|
%%%
|
||||||
%%% ejabberd, Copyright (C) 2002-2013 ProcessOne
|
%%% ejabberd, Copyright (C) 2002-2014 ProcessOne
|
||||||
%%%
|
%%%
|
||||||
%%% This program is free software; you can redistribute it and/or
|
%%% This program is free software; you can redistribute it and/or
|
||||||
%%% modify it under the terms of the GNU General Public License as
|
%%% modify it under the terms of the GNU General Public License as
|
||||||
@ -18,10 +18,9 @@
|
|||||||
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
%%% General Public License for more details.
|
%%% General Public License for more details.
|
||||||
%%%
|
%%%
|
||||||
%%% You should have received a copy of the GNU General Public License
|
%%% You should have received a copy of the GNU General Public License along
|
||||||
%%% along with this program; if not, write to the Free Software
|
%%% with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
%%% 02111-1307 USA
|
|
||||||
%%%
|
%%%
|
||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
-module(eldap_filter).
|
-module(eldap_filter).
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
%%% Created : 12 Nov 2006 by Evgeniy Khramtsov <xram@jabber.ru>
|
%%% Created : 12 Nov 2006 by Evgeniy Khramtsov <xram@jabber.ru>
|
||||||
%%%
|
%%%
|
||||||
%%%
|
%%%
|
||||||
%%% ejabberd, Copyright (C) 2002-2013 ProcessOne
|
%%% ejabberd, Copyright (C) 2002-2014 ProcessOne
|
||||||
%%%
|
%%%
|
||||||
%%% This program is free software; you can redistribute it and/or
|
%%% This program is free software; you can redistribute it and/or
|
||||||
%%% modify it under the terms of the GNU General Public License as
|
%%% modify it under the terms of the GNU General Public License as
|
||||||
@ -17,10 +17,9 @@
|
|||||||
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
%%% General Public License for more details.
|
%%% General Public License for more details.
|
||||||
%%%
|
%%%
|
||||||
%%% You should have received a copy of the GNU General Public License
|
%%% You should have received a copy of the GNU General Public License along
|
||||||
%%% along with this program; if not, write to the Free Software
|
%%% with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
%%% 02111-1307 USA
|
|
||||||
%%%
|
%%%
|
||||||
%%%-------------------------------------------------------------------
|
%%%-------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
%%% Created : 12 Oct 2006 by Mickael Remond <mremond@process-one.net>
|
%%% Created : 12 Oct 2006 by Mickael Remond <mremond@process-one.net>
|
||||||
%%%
|
%%%
|
||||||
%%%
|
%%%
|
||||||
%%% ejabberd, Copyright (C) 2002-2013 ProcessOne
|
%%% ejabberd, Copyright (C) 2002-2014 ProcessOne
|
||||||
%%%
|
%%%
|
||||||
%%% This program is free software; you can redistribute it and/or
|
%%% This program is free software; you can redistribute it and/or
|
||||||
%%% modify it under the terms of the GNU General Public License as
|
%%% modify it under the terms of the GNU General Public License as
|
||||||
@ -17,10 +17,9 @@
|
|||||||
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
%%% General Public License for more details.
|
%%% General Public License for more details.
|
||||||
%%%
|
%%%
|
||||||
%%% You should have received a copy of the GNU General Public License
|
%%% You should have received a copy of the GNU General Public License along
|
||||||
%%% along with this program; if not, write to the Free Software
|
%%% with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
%%% 02111-1307 USA
|
|
||||||
%%%
|
%%%
|
||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
%%% Created : 30 Jul 2004 by Leif Johansson <leifj@it.su.se>
|
%%% Created : 30 Jul 2004 by Leif Johansson <leifj@it.su.se>
|
||||||
%%%
|
%%%
|
||||||
%%%
|
%%%
|
||||||
%%% ejabberd, Copyright (C) 2002-2013 ProcessOne
|
%%% ejabberd, Copyright (C) 2002-2014 ProcessOne
|
||||||
%%%
|
%%%
|
||||||
%%% This program is free software; you can redistribute it and/or
|
%%% This program is free software; you can redistribute it and/or
|
||||||
%%% modify it under the terms of the GNU General Public License as
|
%%% modify it under the terms of the GNU General Public License as
|
||||||
@ -17,10 +17,9 @@
|
|||||||
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
%%% General Public License for more details.
|
%%% General Public License for more details.
|
||||||
%%%
|
%%%
|
||||||
%%% You should have received a copy of the GNU General Public License
|
%%% You should have received a copy of the GNU General Public License along
|
||||||
%%% along with this program; if not, write to the Free Software
|
%%% with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
%%% 02111-1307 USA
|
|
||||||
%%%
|
%%%
|
||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
%%% Created : 22 Jan 2003 by Alexey Shchepin <alexey@process-one.net>
|
%%% Created : 22 Jan 2003 by Alexey Shchepin <alexey@process-one.net>
|
||||||
%%%
|
%%%
|
||||||
%%%
|
%%%
|
||||||
%%% ejabberd, Copyright (C) 2002-2013 ProcessOne
|
%%% ejabberd, Copyright (C) 2002-2014 ProcessOne
|
||||||
%%%
|
%%%
|
||||||
%%% This program is free software; you can redistribute it and/or
|
%%% This program is free software; you can redistribute it and/or
|
||||||
%%% modify it under the terms of the GNU General Public License as
|
%%% modify it under the terms of the GNU General Public License as
|
||||||
@ -17,10 +17,9 @@
|
|||||||
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
%%% General Public License for more details.
|
%%% General Public License for more details.
|
||||||
%%%
|
%%%
|
||||||
%%% You should have received a copy of the GNU General Public License
|
%%% You should have received a copy of the GNU General Public License along
|
||||||
%%% along with this program; if not, write to the Free Software
|
%%% with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
%%% 02111-1307 USA
|
|
||||||
%%%
|
%%%
|
||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
%%% Created : 24 Jan 2003 by Alexey Shchepin <alexey@process-one.net>
|
%%% Created : 24 Jan 2003 by Alexey Shchepin <alexey@process-one.net>
|
||||||
%%%
|
%%%
|
||||||
%%%
|
%%%
|
||||||
%%% ejabberd, Copyright (C) 2002-2013 ProcessOne
|
%%% ejabberd, Copyright (C) 2002-2014 ProcessOne
|
||||||
%%%
|
%%%
|
||||||
%%% This program is free software; you can redistribute it and/or
|
%%% This program is free software; you can redistribute it and/or
|
||||||
%%% modify it under the terms of the GNU General Public License as
|
%%% modify it under the terms of the GNU General Public License as
|
||||||
@ -18,10 +18,9 @@
|
|||||||
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
%%% General Public License for more details.
|
%%% General Public License for more details.
|
||||||
%%%
|
%%%
|
||||||
%%% You should have received a copy of the GNU General Public License
|
%%% You should have received a copy of the GNU General Public License along
|
||||||
%%% along with this program; if not, write to the Free Software
|
%%% with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
%%% 02111-1307 USA
|
|
||||||
%%%
|
%%%
|
||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -11,12 +11,12 @@
|
|||||||
%%% under the License.
|
%%% under the License.
|
||||||
%%%
|
%%%
|
||||||
%%% The Initial Developer of the Original Code is ProcessOne.
|
%%% The Initial Developer of the Original Code is ProcessOne.
|
||||||
%%% Portions created by ProcessOne are Copyright 2006-2013, ProcessOne
|
%%% Portions created by ProcessOne are Copyright 2006-2014, ProcessOne
|
||||||
%%% All Rights Reserved.''
|
%%% All Rights Reserved.''
|
||||||
%%% This software is copyright 2006-2013, ProcessOne.
|
%%% This software is copyright 2006-2014, ProcessOne.
|
||||||
%%%
|
%%%
|
||||||
%%%
|
%%%
|
||||||
%%% @copyright 2006-2013 ProcessOne
|
%%% @copyright 2006-2014 ProcessOne
|
||||||
%%% @author Christophe Romain <christophe.romain@process-one.net>
|
%%% @author Christophe Romain <christophe.romain@process-one.net>
|
||||||
%%% [http://www.process-one.net/]
|
%%% [http://www.process-one.net/]
|
||||||
%%% @version {@vsn}, {@date} {@time}
|
%%% @version {@vsn}, {@date} {@time}
|
||||||
|
@ -11,12 +11,12 @@
|
|||||||
%%% under the License.
|
%%% under the License.
|
||||||
%%%
|
%%%
|
||||||
%%% The Initial Developer of the Original Code is ProcessOne.
|
%%% The Initial Developer of the Original Code is ProcessOne.
|
||||||
%%% Portions created by ProcessOne are Copyright 2006-2013, ProcessOne
|
%%% Portions created by ProcessOne are Copyright 2006-2014, ProcessOne
|
||||||
%%% All Rights Reserved.''
|
%%% All Rights Reserved.''
|
||||||
%%% This software is copyright 2006-2013, ProcessOne.
|
%%% This software is copyright 2006-2014, ProcessOne.
|
||||||
%%%
|
%%%
|
||||||
%%%
|
%%%
|
||||||
%%% @copyright 2006-2013 ProcessOne
|
%%% @copyright 2006-2014 ProcessOne
|
||||||
%%% @author Christophe Romain <christophe.romain@process-one.net>
|
%%% @author Christophe Romain <christophe.romain@process-one.net>
|
||||||
%%% [http://www.process-one.net/]
|
%%% [http://www.process-one.net/]
|
||||||
%%% @version {@vsn}, {@date} {@time}
|
%%% @version {@vsn}, {@date} {@time}
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
%%% Created : 10 Apr 2004 by Alexey Shchepin <alexey@process-one.net>
|
%%% Created : 10 Apr 2004 by Alexey Shchepin <alexey@process-one.net>
|
||||||
%%%
|
%%%
|
||||||
%%%
|
%%%
|
||||||
%%% ejabberd, Copyright (C) 2002-2013 ProcessOne
|
%%% ejabberd, Copyright (C) 2002-2014 ProcessOne
|
||||||
%%%
|
%%%
|
||||||
%%% This program is free software; you can redistribute it and/or
|
%%% This program is free software; you can redistribute it and/or
|
||||||
%%% modify it under the terms of the GNU General Public License as
|
%%% modify it under the terms of the GNU General Public License as
|
||||||
@ -17,10 +17,9 @@
|
|||||||
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
%%% General Public License for more details.
|
%%% General Public License for more details.
|
||||||
%%%
|
%%%
|
||||||
%%% You should have received a copy of the GNU General Public License
|
%%% You should have received a copy of the GNU General Public License along
|
||||||
%%% along with this program; if not, write to the Free Software
|
%%% with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
%%% 02111-1307 USA
|
|
||||||
%%%
|
%%%
|
||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
%%% Created : 2 Feb 2003 by Alexey Shchepin <alexey@process-one.net>
|
%%% Created : 2 Feb 2003 by Alexey Shchepin <alexey@process-one.net>
|
||||||
%%%
|
%%%
|
||||||
%%%
|
%%%
|
||||||
%%% ejabberd, Copyright (C) 2002-2013 ProcessOne
|
%%% ejabberd, Copyright (C) 2002-2014 ProcessOne
|
||||||
%%%
|
%%%
|
||||||
%%% This program is free software; you can redistribute it and/or
|
%%% This program is free software; you can redistribute it and/or
|
||||||
%%% modify it under the terms of the GNU General Public License as
|
%%% modify it under the terms of the GNU General Public License as
|
||||||
@ -17,10 +17,9 @@
|
|||||||
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
%%% General Public License for more details.
|
%%% General Public License for more details.
|
||||||
%%%
|
%%%
|
||||||
%%% You should have received a copy of the GNU General Public License
|
%%% You should have received a copy of the GNU General Public License along
|
||||||
%%% along with this program; if not, write to the Free Software
|
%%% with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
%%% 02111-1307 USA
|
|
||||||
%%%
|
%%%
|
||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
%%% Created : 23 Nov 2002 by Alexey Shchepin <alexey@process-one.net>
|
%%% Created : 23 Nov 2002 by Alexey Shchepin <alexey@process-one.net>
|
||||||
%%%
|
%%%
|
||||||
%%%
|
%%%
|
||||||
%%% ejabberd, Copyright (C) 2002-2013 ProcessOne
|
%%% ejabberd, Copyright (C) 2002-2014 ProcessOne
|
||||||
%%%
|
%%%
|
||||||
%%% This program is free software; you can redistribute it and/or
|
%%% This program is free software; you can redistribute it and/or
|
||||||
%%% modify it under the terms of the GNU General Public License as
|
%%% modify it under the terms of the GNU General Public License as
|
||||||
@ -17,10 +17,9 @@
|
|||||||
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
%%% General Public License for more details.
|
%%% General Public License for more details.
|
||||||
%%%
|
%%%
|
||||||
%%% You should have received a copy of the GNU General Public License
|
%%% You should have received a copy of the GNU General Public License along
|
||||||
%%% along with this program; if not, write to the Free Software
|
%%% with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
%%% 02111-1307 USA
|
|
||||||
%%%
|
%%%
|
||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
%%% Created : 15 Nov 2005 by Magnus Henoch <henoch@dtek.chalmers.se>
|
%%% Created : 15 Nov 2005 by Magnus Henoch <henoch@dtek.chalmers.se>
|
||||||
%%%
|
%%%
|
||||||
%%%
|
%%%
|
||||||
%%% ejabberd, Copyright (C) 2002-2013 ProcessOne
|
%%% ejabberd, Copyright (C) 2002-2014 ProcessOne
|
||||||
%%%
|
%%%
|
||||||
%%% This program is free software; you can redistribute it and/or
|
%%% This program is free software; you can redistribute it and/or
|
||||||
%%% modify it under the terms of the GNU General Public License as
|
%%% modify it under the terms of the GNU General Public License as
|
||||||
@ -17,10 +17,9 @@
|
|||||||
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
%%% General Public License for more details.
|
%%% General Public License for more details.
|
||||||
%%%
|
%%%
|
||||||
%%% You should have received a copy of the GNU General Public License
|
%%% You should have received a copy of the GNU General Public License along
|
||||||
%%% along with this program; if not, write to the Free Software
|
%%% with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
%%% 02111-1307 USA
|
|
||||||
%%%
|
%%%
|
||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
|
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user