To get release with development tools,
don't check rebar profile here.
Instead, use "./configure --enable-tools" and it will be
checked in ejabberd.app.src.script
Usage of escript to run rebar was added to Makefile.in
when support for rebar2 was added in 4d8f770 for ejabberd 13.10.
Nowadays this seems unnecessary, and configure.ac right now can
determine what binary to use: the sysmte installed or local one.
Unfortunately, newer versions of linux-pam throw compilation problems:
linux-pam 1.5.3:
tty_conv.c:9:10: fatal error: termio.h: No such file or directory
linux-pam 1.6.0:
pam_namespace.c:649:41: error: 'SIZE_MAX' undeclared (first use in this function)
Previously, preparing translations required rebar3 and:
./configure --enable-tools
make
make translations
With this change it works with rebar3 and mix, just running:
./configure
make translations
This allows to use REBAR_PROFILE to add another profile.
Right now it doesn't seem specially useful, but it's possible:
REBAR_PROFILE=dev make prod
REBAR_PROFILE=translations make dev
https://rebar3.org/docs/configuration/profiles/
This should limit number of possible node names generated by and with that
prevent atom space exhaustion in ejabberd process.
On R23+ we switch to using native dynamic node features and on older
versions we iterate over small number of possible names and skip those
already in use.
With setup-beam v1.17.2, make-binaries failed in the Container action with:
* ERROR: No usable Erlang/OTP system for the build machine found! Cannot
* cross compile without such a system.
*
* Either build a bootstrap system for the build machine, or provide
* an Erlang/OTP-26 system in the $PATH, and try again. For more
* information on cross compiling Erlang/OTP-26, see the
* $ERL_TOP/xcomp/README file.
The problematic commit is:
https://github.com/erlef/setup-beam/commit/cf854bf14995e965ed7a4f7ec68e426278929376
more concretely this change:
- core.exportVariable(installDirForVarName, cachePath)
+ core.exportVariable(installDirForVarName, catchPathBin)
Up until setup-beam@v1.17.1, the INSTALL_DIR_FOR_OTP was something like
/opt/hostedtoolcache/otp/ubuntu-22.04/OTP-26.1.1/x64
but starting in v1.17.2, the path contains /bin, for example:
/opt/hostedtoolcache/otp/ubuntu-22.04/OTP-26.1.1/x64/bin
Ignore XEP-0334 elements when checking whether a stanza is a stand-alone
XEP-0085 chat state notification. This allows for CSI-filtering chat
states with (e.g.) a no-store hint.
Thanks to Thilo Molitor for reporting the issue.
The file `src/install-sh` was added in c311ea1.
Most files from that commit were removed in 4d8f770 and install-sh was moved.
Since recent commit 7cae092, `./configure` checks for a race-free `mkdir -p`,
the `install-sh` script may be used, and it needs execution permission.
That option is required when Erlang < 26 to disable the archive feature.
The feature and the option were removed in Erlang 26, and the release
building process fails if the option is used.
https://www.erlang.org/patches/otp-26.0
When --enable-tools, include observer and runtime_tools
in the OTP releases, as they are required by "ejabberdctl etop".
With this fix, "ejabberdctl etop" works correctly when:
* rebar3 + make rel
* mix + make dev
* mix + make rel
Rebar2 could create a release, so it made sense to call it "make rel".
Nowadays, Rebar3 and Mix support creating different types of releases:
production, development, ...
In this sense, our "make rel" target is more properly named "make prod"
For backwards compatibility, "make rel" redirects to "make prod"
Use the program specified in option: --with-rebar=/path/to/bin
When none is specified, use the system mix
When Elixir not found, use the system rebar3
When Rebar3 not found, use the rebar3 binary included with ejabberd
Adding ejabberd_po to gitonly_deps isn't strictly needed,
because we request a branch in the ejabberd-po git repository,
and rebar.config.script understands that this means ejabberd_po
should be downloaded from git, not hex.pm.
Elixir is standalone since years ago. When Elixir support is required,
better simply install Elixir and use Mix as build tool.
Or install Elixir and use the experimental Rebar3 support to compile
Elixir files and dependencies.
The problem appeared when:
./configure --with-rebar=mix
make install
ejabberdctl live
=INFO REPORT==== 19-Dec-2023::21:28:36.006306 ===
application: ssl
exited: stopped
type: temporary
...
configure.ac by default enables stun and zlib, in fact ejabberd.yml
has ejabberd_stun enabled by default, so for coherence mix.exs should
enable stun too when vars.config is not found.
Looks like clients using strophejs aren't able to authenticate when we
add data required by that spec to scram packets, so at least give a way
to disable this until clients will be fixed.
If stream management is enabled, let mod_ping trigger XEP-0198
<r/>equests rather than sending XEP-0199 pings. This avoids the
overhead of the ping IQ stanzas, which, if stream management is enabled,
are accompanied by XEP-0198 elements anyway.
Thanks to MoyaApp (<https://moya.app>) for sponsoring this work.
When configured like:
listen:
-
request_handlers:
/api: mod_http_api
/apizero/v0: mod_http_api
What API version will be used depending on the URL:
- api/commandname use the latest available version
- api/commandname/v0 use version 0
- apizero/v0/commandname use version 0
- apizero/v0/commandname/v2 use version 2
This makes scram downgrade protection hash calculation work properly when
using non -plus sasl mechanism or when stream is not encrypted
This should fix issue #4123.
Remove the correct field from the c2s state when the client explicitly
disables push notifications. This fixes a regression introduced by
commit c148ab4430.
This timeout also covers in-band registration, and if user don't fill
registration form in that time leads to disconnect and aborting
registration. This will allow for more time to finish that.
Looks like originally both soft and hard worked the same way, so lets make
them do that, and we also need to add {verify, verify_none} for false case
otherwise it fails on R26.
Looks like R26 generates error when this option is used for client
connection, let's just use verify_peer/verify_none for
ldap_tls_verify hard/soft options.
This should fix issue #4110.
Make sure that logger options that we extract from config file are put in
correct places when starting erl, directly after -ejabberd, custom
EJABBERD_OPTS should be places after them.
This fixes issue #4109
The ejabberd_c2s listener for port 5223 is meant to support direct TLS
access rather than STARTTLS. Therefore, remove the 'starttls_required'
option, which had no effect.
Owner is already permitted to delete those items, so it could do that by
deleting old item, and publishing it again, so i don't see reason to not
allow that overwrite.
This makes `user_check` hook work better with authentication methods
that don't have a way to determine if user exists (like is the case for
jwt and cert based authentication), and as result will improve mod_offline
and mod_mam handling of offline messages to those users. This reuses
information stored by `mod_last` for this purpose.
Should fix issue #3377.
Registering a nick in the MUC service or in a room is mutually exclusive:
- A nick that is registered in the service cannot be registered in any
room, not even the original owner can register it.
- Similarly, a nick registered in any room cannot be registered in the
service.
We do something similar for vcard queries, this allows target server
to respond to those queries by target server, which is what we want to
do in both of those cases.
Omit the directory that contains cross compilation tools without
"$target-" prefix from the PATH. Having it in the path might lead to
problems when native tools are needed during cross compilation. For
actual cross compilation, the prefixed tools should always be used
anyway.
control+g is the correct way to enter shell break mode, as documented in
https://www.erlang.org/doc/apps/erts/tty
The ejabberdctl script included in installers use the included VT100,
and that may break when hitting control+c.
In that scenario let's explicitly recommend to not use control+c.
Thanks to Holger Weiß for the report.
When formatting the results of a command:
- If the top of the result is a list, split elements with newline as usual
- If it's a list in one of the resulting lines, split elements with ;
If the new 'notify_on' option is set to 'messages', notifications are
only triggered by actual chat messages with a body (or encrypted
payload). The default behavior remains to generate a notification on
any kind of stanzas.
Thanks to EISST International Ltd for sponsoring this work.
Recently we added new places where we call muc_filter_message to add
occupandid info to messages, but this also made them be stored in archive
as mod_mam uses that hook for getting sent messages - in case of those
messages we shouldn't be doing this.
This should fix issue #4083
When changing the room subject, store the original author JID,
so later it can be provided in the hook and mod_room_occupantid
can use it to calculate and provide the occupant id
This is noticeable when a new occupant joins an existing room,
and receives the room subject.
Don't (ab)use the gen_server timeout mechanism for pinging the systemd
watchdog. Under certain conditions (e.g., the process receiving sys
messages), the gen_server timeout might not be triggered as expected.
Fixes#4054, fixes#4058,
Check whether mod_push_keepalive is loaded for a given host before
querying the module configuration for that host. This avoids a hook
crash in the case where the module is enabled for some but not all
hosts.
Delay the 'wake_on_start' notifications until ejabberd is fully
initialized. This makes sure no s2s connections are initiated before
certificates are loaded.
Many thanks to Friedrich Altheide for reporting the issue.
Setting scram password, then disabling scram and setting plain password
again, will make us think we are still using scramed password and crash
when trying to process it as such. This makes sure that when set plain
password we don't leave parts from old scram password.
The default is to link against the most-recent musl version available
within the crosstool-ng toolchain, which is currently 1.2.2. Unlike
with glibc, there's no point in sticking to some older version.
The CT_GLIBC_KERNEL_VERSION_NONE option is about the minimum kernel
version supported by the toolchain's glibc. The default is to stick to
the version of the kernel headers, which should be just fine.
This option is read during ejabberd start or config reload.
It installs the listed modules which aren't yet installed,
as long as allow_contrib_modules is not disabled.
Edit ejabberd.yml and configure the desired ejabberd-contrib modules,
add them in the install_contrib_modules option,
finally start ejabberd (or reload config).
Since Erlang/OTP 26, Dialyzer by default reports unknown types.
ejabberd's type specs refer to the re:mp() type,
but that isn't exported in the OTP source code,
and cannot be used in any other modules.
This commit provides very dirty workarounds, and any cleaner
alternative is very welcomed.
When installing a module using ext_mod, if it has already configuration
in the modules section, copy its specific config file as an example
(copy file and rename it).
This may happen when using the new install_contrib_modules option.
Ommit the path to ejabberdctl as it is already located at the $PATH
Also, do not copy Dockerfile into the container as this may unnecessarily trigger re-compiling of ejabberd.
Rename libcap packages to improve compatibility between Alpine versions. This may be beneficial if one specifies an OTP_VSN which was built using an older Alpine base version.
The alpine package libcap has been splitted into libcap2 and libcap-utils in Alpine 3.17. 'libcap' is now an alias for libcap2 and libcap-utils. We define 'so:libcap.so.2' for the runtime stage, as we only need the libraries, not the binaries.
This one works by issuing select and then insert or update or skip depending
on what select returns. We use this on mysql 5.7.26 and 8.0.20 where
previous implementation using 'replace' or 'on conflict update' can cause
excessive deadlocks.
Only libcap2 and tini can't be auto-detected. libcap2 has been renamed in Alpine version 3.17, hence the Dockerfile is not compatible with Alpine versions <3.17
make-*: include musl build in make-binaries
Ctr actions: use github runners to provide bootstrap erlang
- adjust make-binaries script to use github runners' installed erlang
for bootstrapping
- this reduces the need to build an unnecessary toolchain for glibc
based binaries
Instead of including this file in the container with static content:
/opt/ejabberd-master/releases/COOKIE
the cookie file will be generated by erlang in
/opt/ejabberd/.erlang.cookie
or by ejabberdctl if ERLANG_COOKIE environment variable was provided.
Alpine 3.17 includes Erlang/OTP 25, and it segfaults when
used in QEMU for arm64.
Revert "Update Alpine to 3.17 to get Elixir 1.14 required by recent libraries"
This reverts commit 43cae922f3.
Copying files from deps/*/priv/*.so to the ejabberd priv/
is not possible when running ejabberd as OTP release or in a container.
Instead, let's copy the deps/*/priv/*.so maintaining the file structure,
and then using code:add_pathz for those dirs.
This partially reverts 5c1b72853f
- check that server_host column does not already exist before addding it
and making other changes to table (update_sql becomes idempotent,
yay!)
- check that indexes exist before dropping them (some are historical and
are not created in more recent deployments), elminating spurious
errors from logs
- update new_sql_schema config after migration, to allow near
zero-downtime migrations (and help with automated testing)
Support 'sql_ssl' option for MS SQL - set Encryption=required and
Encrypt=yes in ODBC connection string to require SSL using default
FreeTDS driver and Microsoft ODBC Driver for SQL Server repectively.
Allow setting full ODBC connection string in 'sql_server' for MS SQL,
allowing custom connection configuration beyond what is possible with
just 'sql_odbc_driver' option.
For columns are already included in a compound index there is no
benefit to having a separate index with a subset of the same columns in
the same order, it just wastes space.
'The ORDER BY clause is invalid in views, inline functions, derived
tables, subqueries, and common table expressions, unless TOP, OFFSET
or FOR XML is also specified.'
Omit the ORDER BY clause from subquery if the SELECT is not constrained
by TOP.
* Add missing 'mix' tables and indexes
* Fix text vs varchar issues
Various tests triggered this error:
The data types text and varchar are incompatible in the equal to operator.
Caused by incompatible 'text' columns in muc_online_room,
muc_online_users, pubsub_node_option, and pubsub_node tables.
* Fix definition of mqtt_pub table
This table incorrectly included 'server_host' column in old schema, and
had other inconsistencies.
ECMA-48 SGR sequence ESC [21m is actually 'set double underline' but was
incorrectly implemented as 'set normal intensity' in Linux prior to
4.17.
The correct sequence for 'set normal intensity' is ESC [22m, which fixes
output formatting of 'ejabberdctl' and 'ejabberdctl help' on macos.
But use old jose 1.11.1 on Erlang/OTP older than 21
Erlang older than 21 does not support
try catch _Class:_Reason:_Stacktrace ->
that is used in jose_server.erl
Update zlib to 1.2.13 to address CVE-2022-37434
Also change zlib download to use archive URL so builds do not fail
when specified version is no longer the current version
Since f9120f75b0 string literals use escape string syntax (E'...') on
pgsql, so it is no longer necessary to set standard_conforming_strings
to 'off'
Fixes#3932
In the packaged rpm the spool dir is set to:
```
: "${SPOOL_DIR:="/opt/ejabberd/database/$ERLANG_NODE"}"
```
However, `$ERLANG_NODE` is effectively set later (now in line 67), which effectively makes spool dir always in `...../ejabberd@localhost`
Wait for an hour before closing an idle s2s connection.
It's not uncommon for a connection to be idle for longer than ten
minutes but less than an hour. For example, XEP-0410 suggests a ping
interval of fifteen minutes. A longer idle timeout avoids the latency
and log entries associated with constantly re-establishing such
connections.
Co-authored-by: Paweł Chmielowski <pawel@process-one.net>
?OFFLINE_TABLE_LOCK_THRESHOLD is unused:
definition and usage added in 4103f30812
definition copied, and usage moved to mod_offline_mnesia, in 901d2e0aed
definition and usage removed in mod_offline_mnesia in d88e4d495f
this definition looks useless
?VERSION_MULTICAST is unused:
added in 0cf8d1fa6e
it was never used
?DISCO_QUERY_TIMEOUT is unused:
added in 0cf8d1fa6e
it was never used
?FEATURE/1 is unused:
added in 0cf8d1fa6e
usage removed in bc33a3873d
?DEFAULT_MAX_USERS_PRESENCE is unused:
added in f817762cc4
usage removed in ba2b650464
?CT_XML is unused:
added in 46568fb959
removed in 3dc55c6d47
* processone/pr/3905:
Adapt to change of mix_annotate type to boolean in roster_query
Adapt to renaming of 'participant-id' from mix_roster_channel record
Update xmpp module
CI:
- Update Ubuntu to 20.04, the lowest available starting in April 2023 [1]
- Don't test 19.3, as it isn't available in Ubuntu 20.04
- Use OTP 25 for Shellcheck, Coveralls, ECIL page
- Use erlef instead of ErlGang, supports better old erlangs in new ubuntus
- Remove support for rebar2 testing, as that's done in Runtime
CI-19.3:
- Add a temporary workflow for testing ejabberd with OTP 19.3
Container and Runtime:
- Update Ubuntu to latest (22.04)
[1] https://github.com/actions/runner-images/issues/6002https://github.com/ErlGang/setup-erlanghttps://github.com/erlef/setup-beam
The previous implementation always returned an empty list while testing
it. However I don't really understand why that happened. The list
comprehension based one works, although it looks equivalent to me.
The hook type was changed from #roster{} to #roster_item{} by me in the
recent MIX changes. Unfortunately I've overseen this one (and unit tests
+ dialyzer passed).
The problem with #roster{} is that every new record entry is also stored
in the mnesia roster table. Adding the mix_participant_id there makes
no sense because the normal roster items are no MIX channels. Using
\#roster_item{} for the hook and #roster{} for storing the normal items
seems to be a better idea.
* Add log_burst_limit_* options
On our ejabberd deployment we were sometimes seeing more than 500
msgs/sec of legitimate traffic, however this was getting silently
dropped. Provide config options to enable this limit to be configured
from the config file.
* Pass new logging vars in via ejabberdctl
If there are queued request when connection closes we may try to process
those requests (by trying to send them to already terminated db process,
and waiting until we hit timeout) before we see that driver is not longer
alive. This change adds check for driver exit before we process next
queued sql request, and immediately switch to connection state if we have
one.
This can be used for all upsert expressions (where REPLACE INTO used
previously were only possible to use for subset of queries), and may
potentially help with deadlocks reported by mysql when we issues multiple
querier for same key in quick succession.
Don't break the (currently nonexistent) case where a dependency's
rebar.config file specifies LDFLAGS before and after "-lstdc++", such as
"-lfoo -lstdc++ -lbar".
If the installer is invoked without superuser privileges, warn the user,
ask for the installation prefix, and perform a local installation on
confirmation.
Until now, when publishing package to hex.pm, it complained:
> The following licenses are not recognized by SPDX:
> * GPLv2
> Consider using licenses from https://spdx.org/licenses
Use tar's --skip-old-files option for the data directory (/opt/ejabberd)
only. Files in the code directory (/opt/ejabberd-$version) should be
overridden on upgrade.
Publish DEB and RPM packages as well as binary installers for each
commit that modifies source code. This allows for testing development
code, and makes sure that problems with building binary packages are
noticed early on.
The tools/make-installers script creates command line installers for
Linux/x64 and Linux/arm64 systems using the archives built by the
tools/make-binaries script.
The tools/make-packages script creates DEB and RPM packages for
Linux/x64 and Linux/arm64 systems using the archives built by the
tools/make-binaries script.
The tools/make-binaries script creates self-contained OTP releases for
Linux/x64 and Linux/arm64 systems. All optional ejabberd features are
supported. Erlang/OTP, Elixir, and all dependencies are downloaded and
built from source (using crosstool-NG). The generated binaries depend
on glibc 2.17 or later, all other external libraries are linked
statically.
The script should work on any non-ancient Linux/x64 system and requires
just a few common development tools (to bootstrap crosstool-NG).
The release is installed by creating an "ejabberd" user, extracting the
archive into /opt, and moving the systemd unit (or init script) into
place.
Until now, when stopping the ejabberd container, Erlang is not gracefully
closed, Mnesia is not properly closed... exit code is 137.
With this change, when the container is stopped, Erlang receives the
SIGTERM signal, shutsdown, Mnesia database is properly closed, ...
and exit code is 0.
The old version was:
rebar 3.15.2
and it couldn't work with Erlang/OTP 25
This new version is
rebar 3.18.0
compiled from tag 3.18.0 from
https://github.com/erlang/rebar3
using erlang:22-slim docker image
To compile ejabberd using rebar3 and ancient Erlang 19.3-21.3,
you need a rebar3 binary compiled with an old Erlang.
If your operating system doesn't provide one, you can download
the old one included in ejabberd 21.12, available at:
https://github.com/processone/ejabberd/raw/21.12/rebar3
The old version was:
rebar 2.6.4 17 20170823_084242 git 2.6.4-27-g8076675-dirty
and it couldn't work with Erlang/OTP 25
This new version is
rebar 2.6.4 22 20220426_202500 git 2.6.4-39-gb6d3094
compiled from master branch from
https://github.com/rebar/rebar
using erlang:22-slim docker image
To compile ejabberd using rebar and ancient Erlang 19.3-21.3,
you need a rebar binary compiled with an old Erlang.
If your operating system doesn't provide one, you can download
the old one included in ejabberd 21.12, available at:
https://github.com/processone/ejabberd/raw/21.12/rebar
Don't forget the push session ID if the client resumes a stream
management session. This makes sure no push notifications are generated
for a connected client with a resumed stream management session.
Thanks to Thilo Molitor for spotting the issue.
The fact that mod_push uses a timestamp as a push session ID is just an
implementation detail. Rename things accordingly to avoid confusion.
However, stick to "timestamp" in the storage modules, as it corresponds
to the database column names/types, there.
Fix the problem that no push notifications were triggered in the case
where all of the following conditions applied:
- The XEP-0198 session has been resumed at least once.
- The XEP-0198 session is pending (i.e., the client is disconnected).
- The message wasn't stored in the user's MAM archive (e.g., because it
was of type "groupchat").
The problem was introduced in cd336369a5.
Many thanks to Friedrich Altheide for reporting the issue and to Thilo
Molitor for his help with tracking it down.
Allow for specifying the 'type' of 'domain_balancing' without specifying
the 'component_number' (as per the example in the documentation). The
balancing 'type' is then applied to the dynamic number of component
instances.
Changes:
- The options can use the @HOST@ keyword
- default_domain option is @HOST@ by default, not the first defined vhost
- New conversejs_resources option to serve converse.js files (no need for web server)
- conversejs_* now support 'auto', which uses local or remote Converse files
Add the -boot and -boot_var options via ERLANG_OPTS rather than
ERL_OPTIONS. The difference is that administrators might override the
latter in the ejabberdctl.cfg file, which isn't desired as the boot
flags must be specified exactly that way in a Mix-generated release
(otherwise, ejabberd would fail to start up).
1.4 is accepted in general
1.10 is required to build OTP releases
1.11 is required to run 'make relive'
lower than 1.11.4 requires Erlang lower than 24 to build releases
This gives a clear definition of what erlang versions require each
workaround, instead of depending on the actual workaround details.
The lib module was removed in OTP 21.0,
and the formatting options were moved to erl_error.
The uri_string module was introduced in OTP 21.0.
Make sure only leading zeroes are removed while turning the ejabberd
version into SemVer format for Mix. For example, remove the zero in
"21.04", but keep the zero in "21.12.102".
Previously to check if hibernated room was old enough we had to fetch info
about all rooms from database. Now we repurpose created_at field in sql
to store that info, that allow us to have more efficient query just for it.
db_type as a compilation define was first introduced in 2006 in d0e2ac9,
but was removed in 2015 in 25791cf.
Nowadays: ./configure --enable-mssql will set {mssql, true} in vars.config;
That is read by ejabberd.app.src.script to set enabled_backends;
which is consulted by test/suite.erl to test only available backends.
Prepare with:
./autogen.sh && ./configure --with-rebar=./rebar3 && make
Or use this if you installed Elixir:
./autogen.sh && ./configure --with-rebar=mix && make
Start without installing (it recompiles when necessary):
make relive
It stores config, database and logs in _build/relive/
There's available the well-known script:
_build/relive/ejabberdctl
Please note this fails immediately:
r3:do(compile).
This crashes a few seconds later:
rebar3:run(["compile"]).
Workaround that works correctly:
ejabberd_admin:update().
For detached connection we free socket, so let's make code account for this
(and we really need it for printing debug informations).
This makes sure we call ejabberd_sm:close_session
Previously we stored only message/subject change notifications, but if user
request also change notificaitons for affiliation/config/subscribers then
i don't see reason why we shouldn't store it as well.
Let the size of the cache used for 'special' groups (such as @all@ or
@online@) depend on the number of virtual hosts, as the cache will
contain seperate entries per domain.
Thanks to Ingo Jrgensmann for reporting the issue.
run multiple event handlers
generate new events in timing event handlers
print human-readable times
output each callback time info is optional and by default is disabled
Don't forget to normalize the JID handed over from ejabberd_sm on
presence-unavailable. Without normalization, mod_shared_roster might
fail to look up the storage backend for the given host name, for
example.
Fixes#3752.
Rebar 2 expands {{erts-vsn}} to "erts-$vsn", Rebar 3 expands it to just
"$vsn". Make sure `make rel` doesn't end up with a "$vsn" directory
next to "erts-$vsn" (which happened when using Rebar 3), and make sure
that ejabberdctl expects both "erl" and "epmd" to be installed below
"erts-$vsn" (which it didn't when using Rebar 3).
That script serves a similar purpose to ejabberdctl to start ejabberd,
but we can't guarantee it is completely equivalent to ejabberdctl.
The prod profile must provide only the well-known script.
The test profile provides the Relx script so we can experiment with it.
This reverts commit 0881c5941a.
The extended start had been enabled intentionally, as some commands
(such as 'ping', 'status', or 'pid') actually do work.
Don't crash if `mod_stun_disco` is used with `offer_local_services`
and an IPv6 listener has an explicit `ip:` address configured.
Thanks to Daniel Kenzelmann for reporting the issue.
This workaround is not needed anymore, thanks to p1_pgsql 3bf645b,
included in p1_pgsql 1.1.13, and used in ejabberd 21.12.
This reverts commit 964cb3aaca.
Flock'ing /var/lock/ejabberdctl by ejabberdctl was removed with
f7d4aae64d ("Use UUID for ctl node name (#1021)"), however the
according recipies in the Makefile where never removed. This commit
does that.
While those event are wrapped in mucsub envelope they doesn't
contain regular messages that require updating 'to' attribute,
so don't process in that same way as events with wrapped
message in them.
Make it explicit that the get_max_items_node/1 function returns
?MAXITEMS if the 'max_items_node' option isn't specified. The function
didn't actually fall back to 'undefined' (but to the 'max_items_node'
default; i.e., ?MAXITEMS) anyway. This change just clarifies the
behavior and adjusts the function specification accordingly.
Support XEP-0060's pubsub#item_expire feature by adding a command for
deleting expired PubSub items.
Thanks to Ammonit Measurement GmbH for sponsoring this work.
How to update an existing database:
ALTER TABLE vcard_search DROP CONSTRAINT vcard_search_pkey;
ALTER TABLE vcard_search ADD PRIMARY KEY (server_host, lusername);
Try to spread clean-up runs for multiple hosts, rather than scheduling
them in parallel. This should reduce I/O spikes, and avoid race
conditions where multiple processes detect and then try to delete the
same old files (if multiple hosts have the same 'docroot').
Fixes#3497.
Explicitly catch invalid <before/> and <after/> timestamps specified by
clients in RSM queries, but crash on other errors, rather than silently
ignoring those.
If we use _`whatever`_ here in ejabberd man pages,
it is converted to *`whatever`* in markdown,
and docs.ejabberd.im/Makefile converts to the proper links
* processone/pr/3666:
PubSub: Add delete_old_pubsub_items command
PubSub: Optimize publishing on large nodes (SQL)
PubSub: Support unlimited number of items
PubSub: Support 'max_items=max' node configuration
Add a command for keeping only the specified number of items on each
node and removing all older items. This might be especially useful if
nodes may be configured to have no 'max_items' limit.
Thanks to Ammonit Measurement GmbH for sponsoring this work.
Avoid an unnecessary SQL query while publishing an item on a PubSub node
without 'max_items' limit. The query in question can be expensive if
the node has a large number of items.
Thanks to Ammonit Measurement GmbH for sponsoring this work.
Allow for setting the mod_pubsub option 'max_items_node' to 'unlimited'.
If clients then request a 'max_items' limit of 'max', old items aren't
deleted when publishing new ones.
Thanks to Ammonit Measurement GmbH for sponsoring this work.
Let clients request the maximum limit for the node configuration option
'max_items' by specifying the special value 'max' instead of an integer.
This was added to XEP-0060, revision 1.17.0 (and clarified in revision
1.20.0).
Thanks to Ammonit Measurement GmbH for sponsoring this work.
Problems:
- That workaround required running "make" twice
- CEAN (used to build installers) doesn't support that make && make
- Support for Elixir in rebar3 doesn't yet exist
- Preferable path for Elixir usage: install Elixir and use --with-rebar=mix
If clients don't ask for a specific 'max_items' limit, use the value of
mod_pubsub's 'max_items_node' option as default, rather than the
hard-coded ?MAXITEMS value. This makes sure clients cannot circumvent a
smaller, configured limit.
Bump the default value for mod_pubsub's 'max_items_node' option, which
hard-limits the 'max_items' value requested by clients.
These days, use cases such as microblogging or XEP-0402 may need a large
number of items per node. Bumping the limit makes sure such
functionality is properly supported with the default configuration.
Notice that Elixir 1.12.0 requires Erlang/OTP 21 or higher
BTW, this workaround works only with rebar2... unfortunately
rebar3 doesn't compile the elixir files from lib/
That's the only way to ensure that tar.gz will contain include/
of ejabberd and its dependencies, which is required to compile
ejabberd-contrib modules with "ejabberdctl module_install ..."
It supports all that was already in .travis.yml and tests.yml, plus:
- exclude paths that don't affect source code
- two very distinct scenarios, ancient a recent (OTP, Rebar, Ubuntu)
- cache binaries and dialyzer for small speedup and network usage
- separated results, to view comfortably where and what failed
- use coveralls example rebar3 code, instead of custom rebar2
- upload binaries.zip that can be used with Binary Installers
This makes us keep cache of groups that use wildcards no matter
of cache settings, and tries to not same fetch data multiple times
in roster get operations.
ejabberdctl: show list of commands
ejabberdctl some-command: if wrong number of arguments, shows command help
ejabberdctl help: show explanation of how to use "help"
ejabberdctl help tags: list tags with list of commands
ejabberdctl help commands: list tags with commands details
ejabberdctl help whatever*: filters commands and tags
Unwrap MUC/Sub messages so that our check for a message body yields the
correct result.
Many thanks to Robert Schuh for pointing out the issue and suggesting a
fix.
Closes#3565.
* New captcha.sh question/answer based
* Keep original CAPTCHA script
Rather than replacing the original CAPTCHA script, keep it next to the
new one, for the moment.
* CAPTCHA-ng script cleanup
* remove various bashisms
* replace all echos with printf
+ add quotations to many variables
Co-authored-by: Adrien Bourmault <neox@os-k.eu>
Co-authored-by: nico wellpott <nico@magicbroccoli.de>
Reported in #3527. Add hostname matching function, and specify SNI
Also, OTP 23 dropped backwards compatibility for 0, 1, 2 values for verify, so
replace with combination of verify_none/verify_peer and fail_if_no_peer_cert
as appropriate
rebar3 needs sql directory as a src dir so that tests can reference sql
files, so sql dir was added to extra_src_dirs in d9c1befb. It turns out
extra_src_dirs does unexpected unwanted extra things like copy all beam
files there too, so move sql dir to regular src_dirs
Xenial in Travis nowadays includes mysql 5.7
Reverted "Let Travis grab MySQL 5.6 from repo.mysql.com"
Reverted "Use static key for mysql repo" and related ones
* Fix specified key was too long
This adds the correct engine and sets it to utf8mb4 collate. Prevents "Specified key was too long; max key length is 1000 bytes" from happening.
* Make two import SQL files consistent
As suggested by @prefiks
Don't accept loopback addresses as TURN peers by default. This makes
sure the TURN service won't allow remote clients to access local UDP
services.
However, this will break the case where the 'turn_ipv4_address' was set
to 127.0.0.1 as fallback and TURN worked "by accident" if both clients
were using the same TURN service. The service then talked to itself on
the loopback interface.
Support systemd's watchdog feature and enable it by default in the unit
file, so that ejabberd is auto-restarted if the VM becomes unresponsive.
Also, set the systemd startup type to 'notify', so that startup of
followup units is delayed until ejabberd signals readiness. While at
it, also notify systemd of configuration reload and shutdown states.
Note: "NotifyAccess=all" is required as long as "ejabberdctl foreground"
runs the VM as a new child process, rather than "exec"ing it. This way,
systemd views the ejabberdctl process itself as the main service
process, and would discard notifications from other processes by
default.
erlang-sqlite3 versions got messed up, causing ejabberd build to regress
to 1.1.6 from Jan 2018 when using rebar3 which fails to build with OTP23.
Update to correctly tagged version 1.1.9, which also has matching hex.pm
package, fixes this.
This stop overriding store_type when anonymous is enabled with other
auth modules, we don't really need that since anonymous is not taking
passwords anyway, and this was disabling scram mechanisms.
This fixes issue #2803.
Daemons started by systemd shouldn't fork into the background if
possible, because if multiple forked processes exist, systemd has
a hard time determining the main process ID.
In a memory constrained environment, the OOM killer may cause
ejabberd to exit without any trace. Because epmd keeps running,
systemd wouldn't notice the error condition, and as a result it
won't restart the server.
With ejabberd running in foreground, systemd is able to obtain the
correct exit code (137 in this case, instead of 0) and schedules a
restart. The administrator can then see what happend by looking at
systemctl status ejabberd.
This together with last history message is used by room_unused_* command
to determine for how long room was not used, this change allow us to skip
checking history, and works even when history is disabled.
This required adding hibernation time to data stored for room to be able
determine how old was a room, rooms that aren't stored with that
information will use node start time as timestamp for that.
This caused garbled text in some places in webadmin when using language
that used characters > 128.
Thanks to chengshq for noticing this and providing preliminary patch.
By doing this check_password that returned info about mismatched password
caused user_exists checks performed after that to return wrongly that
account doesn't exist.
Previously c2s was free to generate data to send in unlimited manner, and
just generate queue of messages that are waiting to be send. This could lead to
hitting timouts in stream management ack handling (if c2s generate lot of
packages, after which <r> request was sent, client could even not receive it
before timeout was triggered on server waiting for corresponding <a>).
This changes makes c2s process wait for data being sent to tcp socket
associated with websocket connection, which should help with this problem.
Since commit de91618070, it was no longer
possible to configure mod_register so that only account removal (i.e.,
no registration) is permitted. Revert to the previous behavior which
allows admins to freely configure account registration and removal via
separate access rules.
The docker local copies of DB initialization scripts were out of sync
with the master copies. Instead of updating local copies, adjust docker
compose to reference master copies directly.
Also change docker config to use docker volumes instead of mounted
directories for all DB data.
Correct Makefile clean targets
Fix a few more include() -> include_lib() for depedency includes
Use project_app_dirs to reference elixir app from rebar3 (lib_dirs is
no longer supported)
Sometimes we can observer combinations of subscription/ask that shouldn't
happen normally, but can be generated with api calls, let's try to handle
that gracefully instead of crashing.
This adds support for building, and installing, ejabberd using rebar3
A --with-rebar=/path/to/rebar3 option is added to configure to specify
which rebar to use
rebar2 compatibility is maintained, and the bundled rebar2 is still
used by default
* rebar3 plugin to support configure-deps command
To allow running configure on dependencies prior to compilation, add a
rebar3 plugin to support the 'configure-deps' command introduced for
rebar2 in a7639fd4
* Fix compatibility with OTP < 23
binary_to_atom/1 is new to OTP 23
Add list of dependencies that should only be built from git, to support
building with rebar3 where deps do not have hex packages (or where the
package versions do not directly map to git tags).
This is required for elixir and luerl deps.
Only non-persistent rooms that we are storing are those that were hibernated
but also have mucsub subscribers in them. I don't think it makes sense to
destroy those rooms on restart/reload if we didn't destroy them in first
place when last member did leave room, let just handle those rooms like
they are persistent, and kill them only when all user unsubscribe from them
or they are destroyed from api.
- Support tls-server-end-point channel binding and sasl2 codec
- Support tls-exporter channel binding
- Support XEP-0474: SASL SCRAM Downgrade Protection
- Fix presenting features and returning results of inline bind2 elements
- [`disable_sasl_scram_downgrade_protection`](https://docs.ejabberd.im/admin/configuration/toplevel/#disable-sasl-scram-downgrade-protection): New option to disable XEP-0474
- [`negotiation_timeout`](https://docs.ejabberd.im/admin/configuration/toplevel/#negotiation-timeout): Increase default value from 30s to 2m
- mod_carboncopy: Teach how to interact with bind2 inline requests
Other:
- ejabberdctl: Fix startup problem when having set `EJABBERD_OPTS` and logger options
- ejabberdctl: Set EJABBERD_OPTS back to `""`, and use previous flags as example
- eldap: Change logic for `eldap tls_verify=soft` and `false`
- eldap: Don't set `fail_if_no_peer_cert` for eldap ssl client connections
- Ignore hints when checking for chat states
- mod_mam: Support XEP-0424 Message Retraction
- mod_mam: Fix XEP-0425: Message Moderation with SQL storage
- mod_ping: Support XEP-0198 pings when stream management is enabled
- mod_pubsub: Normalize pubsub `max_items` node options on read
- mod_pubsub: PEP nodetree: Fix reversed logic in node fixup function
- mod_pubsub: Only care about PEP bookmarks options when creating node from scratch
SQL:
- MySQL: Support `sha256_password` auth plugin
- ejabberd_sql_schema: Use the first unique index as a primary key
- Update SQL schema files for MAM's XEP-0424
- New option [`sql_flags`](https://docs.ejabberd.im/admin/configuration/toplevel/#sql-flags): right now only useful to enable `mysql_alternative_upsert`
Installers and Container:
- Container: Add ability to ignore failures in execution of `CTL_ON_*` commands
- Container: Update to Erlang/OTP 26.2, Elixir 1.16.1 and Alpine 3.19
- Container: Update this custom ejabberdctl to match the main one
- Mix: Enable stun by default when `vars.config` not found
- Mix: New option `vars_config_path` to set path to `vars.config` ([#4128](https://github.com/processone/ejabberd/issues/4128))
- Mix: Fix ejabberdctl iexlive problem locating iex in an OTP release
## Version 23.10
Compilation:
- Erlang/OTP: Raise the requirement to Erlang/OTP 20.0 as a minimum
- CI: Update tests to Erlang/OTP 26 and recent Elixir
- Move Xref and Dialyzer options from workflows to `rebar.config`
- Add sections to `rebar.config` to organize its content
- Dialyzer dirty workarounds because `re:mp()` is not an exported type
- When installing module already configured, keep config as example
- Elixir 1.15 removed support for `--app`
- Elixir: Improve support to stop external modules written in Elixir
- Elixir: Update syntax of function calls as recommended by Elixir compiler
- Elixir: When building OTP release with mix, keep `ERLANG_NODE=ejabberd@localhost`
-`ejabberdctl`: Pass `ERLANG_OPTS` when calling `erl` to parse the `INET_DIST_INTERFACE` ([#4066](https://github.com/processone/ejabberd/issues/#4066)
Commands:
-`create_room_with_opts`: Fix typo and move examples to `args_example` ([#4080](https://github.com/processone/ejabberd/issues/#4080))
-`etop`: Let `ejabberdctl etop` work in a release (if `observer` application is available)
-`get_roster`: Command now returns groups in a list instead of newlines ([#4088](https://github.com/processone/ejabberd/issues/#4088))
-`halt`: New command to halt ejabberd abruptly with an error status code
-`ejabberdctl`: Fix calling ejabberdctl command with wrong number of arguments with Erlang 26
-`ejabberdctl`: Improve printing lists in results
-`ejabberdctl`: Support `policy=user` in the help and return proper arguments
-`ejabberdctl`: Document how to stop a debug shell: control+g
Container:
- Dockerfile: Add missing dependency for mssql databases
- Dockerfile: Reorder stages and steps for consistency
- Dockerfile: Use Alpine as base for `METHOD=package`
- Dockerfile: Rename packages to improve compatibility
- Dockerfile: Provide specific OTP and elixir vsn for direct compilation
- Halt ejabberd if a command in `CTL_ON_` fails during ejabberd startup
Core:
-`auth_external_user_exists_check`: New option ([#3377](https://github.com/processone/ejabberd/issues/#3377))
-`gen_mod`: Extend `gen_mod` API to simplify hooks and IQ handlers registration
-`gen_mod`: Add shorter forms for `gen_mod` hook/`iq_handler` API
-`gen_mod`: Update modules to the new `gen_mod` API
-`install_contrib_modules`: New option to define contrib modules to install automatically
-`unix_socket`: New listener option, useful when setting unix socket files ([#4059](https://github.com/processone/ejabberd/issues/#4059))
-`ejabberd_systemd`: Add a few debug messages
-`ejabberd_systemd`: Avoid using `gen_server` timeout ([#4054](https://github.com/processone/ejabberd/issues/#4054))([#4058](https://github.com/processone/ejabberd/issues/#4058))
-`ejabberd_listener`: Increase default listen queue backlog value to 128, which is the default value on both Linux and FreeBSD ([#4025](https://github.com/processone/ejabberd/issues/#4025))
- OAuth: Handle `badpass` error message
- When sending message on behalf of user, trigger `user_send_packet` ([#3990](https://github.com/processone/ejabberd/issues/#3990))
- Web Admin: In roster page move the `AddJID` textbox to top ([#4067](https://github.com/processone/ejabberd/issues/#4067))
- Web Admin: Show a warning when visiting webadmin with non-privileged account ([#4089](https://github.com/processone/ejabberd/issues/#4089))
Docs:
- Example configuration: clarify 5223 tls options; specify s2s shaper
- Make sure that `policy=user` commands have `host` instead of `server` arg in docs
- Improve syntax of many command descriptions for the Docs site
- Move example Perl extauth script from ejabberd git to Docs site
- Remove obsolete example files, and add link in Docs to the archived copies
Installers (`make-binaries`):
- Bump Erlang/OTP version to 26.1.1, and other dependencies
- Remove outdated workaround
- Don't build Linux-PAM examples
- Fix check for current Expat version
- Apply minor simplifications
- Don't duplicate config entries
- Don't hard-code musl version
- Omit unnecessary glibc setting
- Set kernel version for all builds
- Let curl fail on HTTP errors
Modules:
-`mod_muc_log`: Add trailing backslash to URLs shown in disco info
-`mod_muc_occupantid`: New module with support for XEP-0421 Occupant Id ([#3397](https://github.com/processone/ejabberd/issues/#3397))
-`mod_muc_rtbl`: Better error handling in ([#4050](https://github.com/processone/ejabberd/issues/#4050))
-`mod_private`: Add support for XEP-0402 PEP Native Bookmarks
-`mod_privilege`: Don't fail to edit roster ([#3942](https://github.com/processone/ejabberd/issues/#3942))
-`mod_pubsub`: Fix usage of `plugins` option, which produced `default_node_config` ignore ([#4070](https://github.com/processone/ejabberd/issues/#4070))
-`mod_pubsub`: Add `pubsub_delete_item` hook
-`mod_pubsub`: Report support of `config-node-max` in pep
-`mod_pubsub`: Relay pubsub iq queries to muc members without using bare jid ([#4093](https://github.com/processone/ejabberd/issues/#4093))
-`mod_pubsub`: Allow pubsub node owner to overwrite items published by other persons
-`mod_push_keepalive`: Delay `wake_on_start`
-`mod_push_keepalive`: Don't let hook crash
-`mod_push`: Add `notify_on` option
-`mod_push`: Set `last-message-sender` to bare JID
-`mod_register_web`: Make redirect to page that end with `/` ([#3177](https://github.com/processone/ejabberd/issues/#3177))
-`mod_shared_roster_ldap`: Don't crash in `get_member_jid` on empty output ([#3614](https://github.com/processone/ejabberd/issues/#3614))
MUC:
- Add support to register nick in a room ([#3455](https://github.com/processone/ejabberd/issues/#3455))
- Convert `allow_private_message` MUC room option to `allowpm` ([#3736](https://github.com/processone/ejabberd/issues/#3736))
- Update xmpp version to send `roomconfig_changesubject` in disco#info ([#4085](https://github.com/processone/ejabberd/issues/#4085))
- Fix crash when loading room from DB older than ffa07c6, 23.04
- Fix support to retract a MUC room message
- Don't always store messages passed through `muc_filter_message` ([#4083](https://github.com/processone/ejabberd/issues/#4083))
- Pass also MUC room retract messages over the `muc_filter_message` ([#3397](https://github.com/processone/ejabberd/issues/#3397))
- Pass MUC room private messages over the `muc_filter_message` too ([#3397](https://github.com/processone/ejabberd/issues/#3397))
- Store the subject author JID, and run `muc_filter_message` when sending subject ([#3397](https://github.com/processone/ejabberd/issues/#3397))
- Remove existing role information for users that are kicked from room ([#4035](https://github.com/processone/ejabberd/issues/#4035))
- Expand rule "mucsub subscribers are members in members only rooms" to more places
SQL:
- Add ability to force alternative upsert implementation in mysql
- Properly parse mysql version even if it doesn't have type tag
- Use prepared statement with mysql
- Add alternate version of mysql upsert
-`ejabberd_auth_sql`: Reset scram fields when setting plain password
-`mod_privacy_sql`: Fix return values from `calculate_diff`
-`mod_privacy_sql`: Optimize `set_list`
-`mod_privacy_sql`: Use more efficient way to calculate changes in `set_privacy_list`
## Version 23.04
General:
- New `s2s_out_bounce_packet` hook
- Re-allow anonymous connection for connection without client certificates ([#3985](https://github.com/processone/ejabberd/issues/3985))
- Stop `ejabberd_system_monitor` before stopping node
-`captcha_url` option now accepts `auto` value, and it's the default
-`mod_mam`: Add support for XEP-0425: Message Moderation
-`mod_mam_sql`: Fix problem with results of mam queries using rsm with max and before
-`mod_muc_rtbl`: New module for Real-Time Block List for MUC rooms ([#4017](https://github.com/processone/ejabberd/issues/4017))
-`mod_roster`: Set roster name from XEP-0172, or the stored one ([#1611](https://github.com/processone/ejabberd/issues/1611))
-`mod_roster`: Preliminary support to store extra elements in subscription request ([#840](https://github.com/processone/ejabberd/issues/840))
-`mod_pubsub`: Pubsub xdata fields `max_item/item_expira/children_max` use `max` not `infinity`
-`mod_vcard_xupdate`: Invalidate `vcard_xupdate` cache on all nodes when vcard is updated
Admin:
-`ext_mod`: Improve support for loading `*.so` files from `ext_mod` dependencies
- Improve output in `gen_html_doc_for_commands` command
@@ -34,7 +34,7 @@ This Code of Conduct applies both within project spaces and in public spaces whe
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at conduct@process-one.net. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at the email address: conduct AT process-one.net. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.
[](https://github.com/processone/ejabberd/tags)
Check the [differences between `ejabberd` and `ecs` images](https://github.com/processone/docker-ejabberd/blob/master/ecs/HUB-README.md#alternative-image-in-github).
If you are using a Windows operating system, check the tutorials mentioned in
Example using environment variables (see full example [docker-compose.yml](https://github.com/processone/docker-ejabberd/issues/64#issuecomment-887741332)):
```yaml
environment:
- ERLANG_NODE_ARG=ejabberd@node7
- ERLANG_COOKIE=dummycookie123
```
Build a Container Image
-----------------------
This container image includes ejabberd as a standalone OTP release built using Elixir.
robust, scalable and extensible realtime platform built using [Erlang/OTP][erlang],
that includes [XMPP][xmpp] Server, [MQTT][mqtt] Broker and [SIP][sip] Service.
Check the features in [ejabberd.im][im], [ejabberd Docs][features],
[ejabberd at ProcessOne][p1home], and the list of [supported protocols in ProcessOne][xeps]
and [XMPP.org][xmppej].
Installation
------------
- **Cross-platform**
ejabberd runs under Microsoft Windows and Unix-derived systems such as
Linux, FreeBSD and NetBSD.
There are several ways to install ejabberd:
-**Distributed**
You can run ejabberd on a cluster of machines and all of them will serve the
same XMPP domain(s). When you need more capacity you can simply add a new
cheap node to your cluster. Accordingly, you do not need to buy an expensive
high-end machine to support tens of thousands concurrent users.
- **Fault-tolerant**
You can deploy an ejabberd cluster so that all the information required for
a properly working service will be replicated permanently on all nodes. This
means that if one of the nodes crashes, the others will continue working
without disruption. In addition, nodes also can be added or replaced ‘on
the fly’.
- **Administrator-friendly**
ejabberd is built on top of the Open Source Erlang. As a result you do not
need to install an external database, an external web server, amongst others
because everything is already included, and ready to run out of the box.
Other administrator benefits include:
- Comprehensive documentation.
- Straightforward installers for Linux.
- Docker packaging to help with deploy / development on Linux, Windows or MacOS.
- Deb and RPM packaging to support most Linux distributions.
- Web administration.
- Shared roster groups.
- Command line administration tool.
- Can integrate with existing authentication mechanisms.
- Capability to send announce messages.
- **Internationalized**
ejabberd leads in internationalization. Hence it is very well suited in a
globalized world. Related features are:
- Translated to 25 languages.
- Support for IDNA.
- **Open Standards**
ejabberd is the first Open Source Jabber server claiming to fully comply to
the XMPP standard.
- Fully XMPP-compliant.
- XML-based protocol.
- Many protocols supported.
-Source code: compile yourself, see [COMPILE](COMPILE.md)
- Installers: [ProcessOne Download][p1download] and [GitHub Releases][releases] for releases, [GitHub Actions](https://github.com/processone/ejabberd/actions/workflows/installers.yml) for master branch (run/deb/rpm for x64 and arm64)
-`ecs` container image: [Docker Hub][hubecs] and [Github Packages][packagesecs], see [ecs README][docker-ecs-readme] (for x64)
-`ejabberd` container image: [Github Packages][packages] for releases and master branch, see [CONTAINER](CONTAINER.md) (for x64 and arm64)
- Using your [Operating System package][osp]
- Using the [Homebrew][homebrew] package manager
Additional Features
-------------------
Documentation
-------------
Moreover, ejabberd comes with a wide range of other state-of-the-art features:
Please check the [ejabberd Docs][docs] website.
- **Modularity**
- Load only the modules you want.
- Extend ejabberd with your own custom modules.
When compiling from source code, you can get some help with:
- **Security**
- SASL and STARTTLS for c2s and s2s connections.
- STARTTLS and Dialback s2s connections.
- Web Admin accessible via HTTPS secure access.
./configure --help
make help
- **Databases**
- Internal database for fast deployment (Mnesia).
- Native MySQL support.
- Native PostgreSQL support.
- ODBC data storage support.
- Microsoft SQL Server support.
Once ejabberd is installed, try:
- **Authentication**
- Internal authentication.
- PAM, LDAP and ODBC.
- External authentication script.
- **Others**
- Support for virtual hosting.
- Compressing XML streams with Stream Compression (XEP-0138).
- Statistics via Statistics Gathering (XEP-0039).
- IPv6 support both for c2s and s2s connections.
- Multi-User Chat module with support for clustering and HTML logging.
- Users Directory based on users vCards.
- Publish-Subscribe component with support for Personal Eventing.
- Support for web clients: HTTP Polling and HTTP Binding (BOSH).
- Component support: interface with networks such as AIM, ICQ and MSN.
Quickstart guide
----------------
### 0. Requirements
To compile ejabberd you need:
- GNU Make.
- GCC.
- Libexpat ≥ 1.95.
- Libyaml ≥ 0.1.4.
- Erlang/OTP ≥ 19.3.
- OpenSSL ≥ 1.0.0.
- Zlib ≥ 1.2.3, for Stream Compression support (XEP-0138). Optional.
- PAM library. Optional. For Pluggable Authentication Modules (PAM).
- ImageMagick's Convert program and Ghostscript fonts. Optional. For CAPTCHA
challenges.
If your system splits packages in libraries and development headers, you must
install the development packages also.
### 1. Compile and install on *nix systems
To compile ejabberd, execute the following commands. The first one is only
necessary if your source tree didn't come with a `configure` script (In this
case you need autoconf installed).
./autogen.sh
./configure
make
To install ejabberd, run this command with system administrator rights (root
user):
sudo make install
These commands will:
- Install the configuration files in `/etc/ejabberd/`
- Install ejabberd binary, header and runtime files in `/lib/ejabberd/`
- Install the administration script: `/sbin/ejabberdctl`
- Install ejabberd documentation in `/share/doc/ejabberd/`
- Create a spool directory: `/var/lib/ejabberd/`
- Create a directory for log files: `/var/log/ejabberd/`
### 2. Start ejabberd
You can use the `ejabberdctl` command line administration script to
start and stop ejabberd. For example:
ejabberdctl start
For detailed information please refer to the ejabberd Installation and
Operation Guide available online and in the `doc` directory of the source
tarball.
ejabberdctl help
man ejabberd.yml
Development
-----------
In order to assist in the development of ejabberd, and particularly the
execution of the test suite, a Vagrant environment is available at
Documentation for developers is available in [ejabberd docs: Developers][docs-dev].
Links
-----
There are nightly builds of ejabberd, both for `master` branch and for Pull Requests:
- Installers: go to [GitHub Actions: Installers](https://github.com/processone/ejabberd/actions/workflows/installers.yml), open the most recent commit, on the bottom of that commit page, download the `ejabberd-packages.zip` artifact.
-`ejabberd` container image: go to [ejabberd Github Packages][packages]
Security reports or concerns should preferably be reported privately,
please send an email to the address: contact at process-one dot net
or some other method from [ProcessOne Contact][p1contact].
For commercial offering and support, including [ejabberd Business Edition][p1home]
and [Fluux (ejabberd in the Cloud)][fluux], please check [ProcessOne ejabberd page][p1home].
Community
---------
There are several places to get in touch with other ejabberd developers and administrators:
{name,?PROVIDER},% The 'user friendly' name of the task
{module,?MODULE},% The module implementation of the task
{bare,true},% The task can be run by the user, always true
{deps,?DEPS},% The list of dependencies
{example,"rebar3 configure-deps"},% How to use the plugin
{opts,[]},% list of options understood by the plugin
{short_desc,"Explicitly run ./configure for dependencies"},
{desc,"A rebar plugin to allow explicitly running ./configure on dependencies. Useful if dependencies might change prior to compilation when configure is run."}
<connectsleep>7</connectsleep><!-- seconds to wait if we get disconnected -->
<language>en</language>
<vCard>
<FN>I Love Email</FN>
<DESC>With this service you can receive email notifications.
Security warning: Be careful when using this. Your password will travel in clear from your client to your jabber server if you don't use SSL and it will probably travel in clear from the jabber server to your email server. Use with care. This shouldn't be an issue in your Intranet, but it is if you use an ILE installed in a foreign jabber server.</DESC>
<MAIL>EMAIL@ADDRESS.COM</MAIL>
<URL>http://ile.jabberstudio.org/</URL>
</vCard>
</jabber>
<debug>
<file>/var/log/jabber/ile.log</file>
<level>1</level><!-- man Net::Jabber::Debug -->
</debug>
<mail>
<checkinterval>10</checkinterval><!-- in minutes -->
<timeout>20</timeout><!-- timeout for IMAP/POP connection, in seconds -->
<notifyxa>Notify even when Xtended Away (XA)</notifyxa>
<notifydnd>Notify even when Do Not Disturb (DND)</notifydnd>
<webmail_url>Webmail URL</webmail_url>
<webmail_login>Login to ACCOUNT</webmail_login>
<iledesc>ILE: an email notifier component: http://ile.jabberstudio.org</iledesc>
</ro>
<nl>
<!-- Contributed by Sander Devrieze -->
<instructions>Vul volgende velden in.</instructions>
<title>ILE: Dienst voor e-mailnotificaties</title>
<email_options>Instellingen van e-mailaccount</email_options>
<user>Gebruikersnaam</user>
<pass>Wachtwoord</pass>
<host>Inkomende mailserver</host>
<type>Type verbinding</type>
<newmail>U hebt NUM berichten ontvangen sinds CHECKINTERVAL minuten geleden.</newmail>
<errorcheck>Fout tijdens controle op nieuwe e-mails bij ACCOUNT. ILE zal deze account niet meer opnieuw controleren tot u uw registratiegegevens wijzigt of opnieuw aanmeldt.</errorcheck>
@@ -14,15 +14,15 @@ defmodule Mix.Tasks.Ejabberd.Deps.Tree do
defrun(_argv)do
# First we need to start manually the store to be available
# during the compilation of the config file.
Ejabberd.Config.Store.start_link
Ejabberd.Config.Store.start_link()
Ejabberd.Config.init(:ejabberd_config.path())
Mix.shell.info"ejabberd modules"
Mix.shell().info"ejabberd modules"
Ejabberd.Config.Store.get(:modules)
|>Enum.reverse# Because of how mods are stored inside the store
|>format_mods
|>Mix.shell.info
|>Mix.shell().info
end
defpformat_mods(mods)whenis_list(mods)do
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.