diff --git a/ChangeLog b/ChangeLog deleted file mode 100644 index eaa088613..000000000 --- a/ChangeLog +++ /dev/null @@ -1,5812 +0,0 @@ -2008-04-02 Badlop - - * src/ejabberd_config.erl: Add support to include additional - configuration files. Add support for macro definition and - usage. (EJAB-593) - * doc/guide.tex: Likewise - * doc/guide.html: Likewise - -2008-04-02 Christophe Romain - - * src/mod_pubsub/mod_pubsub.erl: add condition inclusion of pep in - disco identity (EJAB-564) - - * src/Makefile.in: Do not ignore values passed from configure - (thanks to Justin Boffemmyer)(EJAB-592) - -2008-04-01 Badlop - - * doc/guide.tex: Updated command line parameters, epmd section - * doc/guide.html: Likewise - - * doc/api/Makefile: Report the correct ejabberd version. When - cleaning, remove also erlang.png - - * src/mod_muc/mod_muc_room.erl: Update source code to prevent - warning messages from EDoc - * src/mod_pubsub/mod_pubsub.erl: Likewise - * src/mod_pubsub/node_default.erl: Likewise - * src/mod_pubsub/nodetree_default.erl: Likewise - * src/mod_pubsub/nodetree_virtual.erl: Likewise - * src/mod_pubsub/pubsub.hrl: Likewise - -2008-04-01 Christophe Romain - - * src/ejabberdctl.template: Add firewalling port range definition - * src/ejabberdctl.cfg.example: Likewise - -2008-03-31 Badlop - - * src/ejabberd_listener.erl: Remove code of the unused listening - socket option 'ssl' (EJAB-159) - * src/ejabberd_app.erl: Likewise - - * doc/webadmmain.png: Updated to ejabberd 2.0.0 - * doc/webadmmainru.png: Likewise - - * doc/disco.png: Removed because not used - - * doc/guide.tex: Fix Latex reference to webadmin section. Update - explanation of screenshots. Update xmpp addresses of Mickael - Remond and Sander Devrieze. - * doc/guide.html: Likewise - - * doc/Makefile: Remove the Hevea deprecated option -noiso - * doc/guide.html: Likewise - * doc/dev.html: Likewise - * doc/features.html: Likewise - - * src/ejabberd_listener.erl (start_listener): Start also the - supervisor of the module - -2008-03-27 Badlop - - * doc/guide.tex: Fix epam location (thanks to Evgeniy Khramtsov) - * doc/guide.html: Likewise - -2008-03-26 Badlop - - * src/Makefile.in: Support for parallel compilation with 'make -j' - in multi core CPUs: fix compilation dependencies; compile - behaviors before other source code. (thanks to Jonathan Schleifer) - * src/mod_pubsub/Makefile.in: Likewise - * src/eldap/Makefile.in: Likewise - -2008-03-26 Alexey Shchepin - - * src/ejabberd_local.erl: The iq_response table wasn't cloned - automatically on all nodes which resulted in a single point of - failure - -2008-03-25 Badlop - - * src/Makefile.in: Failure to install epam is not - critical (EJAB-573). Only try to install epam if pam was enabled - in configure script (thanks to Etan Reisner)(EJAB-586) - -2008-03-24 Badlop - - * doc/guide.tex: mod_vcard_ldap replace NICK with NICKNAME (thanks - to Andreas Ntaflos) - * doc/guide.html: Likewise - - * src/msgs/de.msg: Fix irc typo (thanks to Jonathan Schleifer) - * src/msgs/cs.msg: Likewise - * src/msgs/pl.msg: Likewise - * src/msgs/sk.msg: Likewise - -2008-03-22 Mickael Remond - - * src/eldap/Makefile.in: Generate ELDAPv3.beam during first Makefile - pass (EJAB-583). - -2008-03-22 Badlop - - * doc/guide.tex: Document service_check_from (EJAB-576) - * doc/guide.html: Likewise - -2008-03-21 Badlop - - * src/mod_caps.erl: Move two log calls ERROR_MSG to DEBUG - * src/shaper.erl: Move log call INFO_MSG to DEBUG - - * doc/guide.tex: Document s2s_default_policy and - s2s_host (EJAB-575) - * doc/guide.html: Likewise - -2008-03-21 Christophe Romain - - * src/pam/epam.erl: Seek epam binary into priv/bin (EJAB-573) - * src/ejabberd.erl: Likewise - * src/Makefile.in: Likewise - * src/ejabberdctl.template: Likewise - * tools/ejabberdctl: Likewise - - * src/mod_pubsub/mod_pubsub.erl: Pubsub subscription is now wrapped in - pubsub tags (EJAB-580) - -2008-03-21 Badlop - - * src/cyrsasl_digest.erl: Rewrite io:format calls to loglevel - macros (EJAB-555) - * src/ejabberd_auth.erl: Likewise - * src/ejabberd_ctl.erl: Likewise - * src/ejabberd_loglevel.erl: Likewise - * src/ejabberd_s2s.erl: Likewise - * src/ejabberd_sm.erl: Likewise - * src/ejabberd_update.erl: Likewise - * src/extauth.erl: Likewise - * src/mod_irc/mod_irc.erl: Likewise - * src/shaper.erl: Likewise - * src/tls/tls.erl: Likewise - * src/web/ejabberd_http_poll.erl: Likewise - - * src/ejabberd.hrl: New macro ?PRINT(Format, Args) to print in - standard output - -2008-03-20 Badlop - - * doc/guide.tex: Improve explanation of how to start ejabberd when - binary installer. Don't recommend R12 in Windows compilation. - Describe what happens if maxrate shaper is exceeded. - * doc/guide.html: Likewise - -2008-03-20 Mickael Remond - - * src/eldap.erl: Improved logging. We now use ejabberd logging - framework (EJAB-582). - - * src/eldap.erl: Faster LDAP reconnection (Thanks to Christophe - Romain) (EJAB-581) - -2008-03-17 Mickael Remond - - * src/ejabberd_s2s.erl: Only trigger s2s_connect_hook on - successful connection (EJAB-566) - * src/ejabberd_s2s_out.erl: Likewise - -2008-03-15 Mickael Remond - - * src/ejabberd_ctl.erl: API improvement: Added - reopen_log_hook (EJAB-565) - - * src/ejabberd_s2s.erl: API improvement: Added s2s_connect_hook - (EJAB-566). - -2008-03-13 Badlop - - * src/odbc/ejabberd_odbc.erl: Start ODBC explicitely because - Erlang R12 doesn't start automatically like in R11 and - older (thanks to Sergei Golovan)(EJAB-541) - - * src/ejabberd.hrl: Removed unused ejabberd_debug and - PRIVACY_SUPPORT. Reordered the remaining options - - * doc/guide.tex: Describe option Matches in mod_vcard_ldap (thanks - to Evgeniy Khramtsov)(EJAB-530). Fix typo in the description of - ldap_server option. - * doc/guide.html: Likewise - - * src/mod_echo.erl: Small change to avoid a compilation warning of - unused function - -2008-03-12 Badlop - - * src/web/ejabberd_web_admin.erl (term_to_string): Show Erlang - terms in one line in Erlang R12 (EJAB-503) - -2008-03-11 Badlop - - * src/ejabberd_s2s_in.erl (get_cert_domains): When compiling with - Erlang R12, replace the calls to deprecated module PKIX1Explicit88 - with OTP-PKIX (EJAB-556) - -2008-03-10 Badlop - - * src/ejabberd_update.erl: Fix crash when browsing the Update - page in Erlang R12 (EJAB-552) - -2008-03-09 Alexey Shchepin - - * src/web/ejabberd_http_poll.erl: Fixed HTTP headers when a - requested session doesn't exist - -2008-03-09 Badlop - - * src/mod_proxy65/mod_proxy65_service.erl: Implement alternative - to the deprecated function inet:ip_to_bytes (thanks to Evgeniy - Khramtsov)(EJAB-542) - -2008-03-07 Mickael Remond - - * src/eldap/eldap_pool.erl: Improved logging - -2008-03-04 Badlop - - * doc/guide.tex: Improve documentation of host_config - add (EJAB-544) - * doc/guide.html: Likewise - * src/ejabberd.cfg.example: Likewise - * src/ejabberd_config.erl: Likewise - - * doc/guide.tex: mod_announce recommends, but doesn't require - mod_adhoc (thanks to Anastasia Gornostaeva) - * doc/guide.html: Likewise - * src/ejabberd.cfg.example: Likewise - -2008-03-03 Alexey Shchepin - - * src/tls/tls.erl: recv_data/2 doesn't throw exceptions now - * src/ejabberd_zlib/ejabberd_zlib.erl: Likewise - -2008-02-29 Alexey Shchepin - - * src/mod_roster.erl: Fixed "from" attribute in roster pushes - * src/mod_roster_odbc.erl: Likewise - -2008-02-28 Badlop - - * src/ejabberd_app.erl (prep_stop): Stop modules when stopping - ejabberd (EJAB-536) - * src/mod_caps.erl (stop): Probably not needed to stop supervisor - child (EJAB-536) - * src/mod_muc/mod_muc.erl (room_destroyed): Catch message - sending (EJAB-536) - * src/mod_muc/mod_muc_room.erl (init): Ensure rooms are called - when the process dies due to a linked die (EJAB-536) - -2008-02-27 Mickael Remond - - * src/ejabberd_check.erl: Separate config loading from - configuration sanity checks (EJAB-533) - * src/src/ejabberd_app.erl: Likewise - * src/ejabberd_app.erl: Likewise - -2008-02-26 Badlop - - * src/msgs/it.msg: Updated (thanks to Smart2128) - -2008-02-21 Badlop - - * doc/release_notes_2.0.0.txt: Small fixes and update date - -2008-02-20 Badlop - - * README: Updated to match the content of the ejabberd Guide - - * doc/release_notes_2.0.0.txt: Updated version number and date - - * doc/guide.tex: Mentioned the problems about Windows service - * doc/guide.html: Likewise - - * src/msgs/ru.msg: Updated (thanks to Konstantin Khomoutov) - * src/msgs/zh.msg: Updated (thanks to Mike Wang and Zhan Caibao) - -2008-02-19 Badlop - - * src/msgs/ca.msg: Updated (thanks to Vicent Alberola Canet) - * src/msgs/cs.msg: Updated (thanks to Lukas Polivka) - * src/msgs/de.msg: Updated (thanks to Cord Beermann and Nikolaus - Polak) - * src/msgs/eo.msg: Updated (thanks to Andreas van Cranenburgh) - * src/msgs/es.msg: Updated - * src/msgs/fr.msg: Updated (thanks to Christophe Romain) - * src/msgs/gl.msg: Updated (thanks to Carlos E. Lopez) - * src/msgs/nl.msg: Updated (thanks to Andreas van Cranenburgh) - * src/msgs/no.msg: Updated (thanks to Stian B. Barmen) - * src/msgs/pt-br.msg: Updated (thanks to Otavio Fernandes) - * src/msgs/uk.msg: Updated (thanks to Stoune and Ruslan Rakhmanin) - -2008-02-19 Christophe Romain - - * src/odbc/ejabberd_odbc.erl: add pgsql driver monitoring - -2008-02-19 Mickael Remond - - * src/ejabberd_config.erl: dirty_get_registered_users now - correctly returns all users for all vhosts no matter which - back-end is used (EJAB-527) - * src/ejabberd_auth_odbc.erl: Likewise - * src/ejabberd_auth_internal.erl: Likewise - * src/ejabberd_auth.erl: Likewise - * src/ejabberd_auth_external.erl: Likewise - * src/ejabberd_auth_ldap.erl: Likewise - -2008-02-18 Christophe Romain - - * src/ejabberd_c2s.erl: Bug in get_conn_type since SVN r1194 crashes - http-bind and http-poll (thanks to Brian Cully) (EJAB-526) - -2008-02-15 Badlop - - * doc/release_notes_2.0.0.txt: Describe in the Release Notes the - upgrade instructions (EJAB-522) - -2008-02-15 Christophe Romain - - * src/ejabberd_sm.erl: Retreive connection type in - sm_register_connection_hook - * src/ejabberd_c2s.erl: Likewise - * src/ejabberd_auth_anonymous.erl: Likewise - -2008-02-14 Badlop - - * src/mod_muc/mod_muc_room.erl: Allow unmoderated rooms (EJAB-437) - * src/msgs/*: Recover old translations to several languages from - ejabberd 1.1.4 - -2008-02-14 Alexey Shchepin - - * src/cyrsasl_digest.erl: Unquote backslash in DIGEST-MD5 quoted - strings (EJAB-304) - - * src/mod_roster.erl: Removed the ancient Psi roster workaround - * src/mod_roster_odbc.erl: Likewise - -2008-02-12 Badlop - - * src/web/ejabberd_web_admin.erl: Fixed native support for all the - ACL types (EJAB-253) - - * src/acl.erl: Normalize ACL before adding to the configuration - tables (EJAB-521) - -2008-02-11 Mickael Remond - - * src/ejabberd_auth.erl: Do not allow empty password at - creation. On authent, check in all cases that password is not - empty. - * src/ejabberd_auth_odbc.erl: Likewise - * src/ejabberd_auth_internal.erl: Likewise - * src/ejabberd_auth_external.erl: Likewise - - * src/ejabberd_receiver.erl: Avoid crash to appear in log, when - trying to close a stream with an undefined state. - -2008-02-11 Christophe Romain - - * src/mod_pubsub/mod_pubsub.erl: Bugfix: event used in place of x when - xmlns is pubsub#event (EJAB-518) - -2008-02-11 Badlop - - * src/mod_muc/mod_muc_room.erl: Bugfix: local message stanza may - not have an attribute From (EJAB-515) - -2008-02-08 Badlop - - * src/mod_muc/mod_muc_room.erl: Include the error condition in the - presence status when kicking a participant due to an error - stanza (EJAB-496) - - * src/ejabberd.cfg.example: Document options to SQL keep alive - interval and pool size (EJAB-206) - * doc/guide.tex: Likewise - * doc/guide.html: Likewise - -2008-02-06 Badlop - - * src/mod_muc/mod_muc_room.erl: Support for decline of invitation - to MUC room (EJAB-515) - -2008-02-06 Mickael Remond - - * src/mod_pubsub/node_buddy.erl: Fixed typo - * src/mod_pubsub/node_club.erl: Likewise - * src/mod_pubsub/node_dispatch.erl: Likewise - * src/mod_pubsub/node_pep.erl: Likewise - * src/mod_pubsub/node_private.erl: Likewise - * src/mod_pubsub/node.template: Likewise - - * src/mod_pubsub/gen_pubsub_node.erl: API improvement: Added a way - to generate custom item name - * src/mod_pubsub/node_dispatch.erl: Likewise - * src/mod_pubsub/node_buddy.erl: Likewise - * src/mod_pubsub/node_private.erl: Likewise - * src/mod_pubsub/node_club.erl: Likewise - * src/mod_pubsub/node_public.erl: Likewise - * src/mod_pubsub/node_default.erl: Likewise - * src/mod_pubsub/node_pep.erl: Likewise - * src/mod_pubsub/mod_pubsub.erl: Small API improvements and - refactoring - -2008-02-04 Badlop - - * src/ejabberd.hrl: Updated version to 2.1.0-alpha - * doc/dev.html: Likewise - * doc/features.html: Likewise - * doc/guide.html: Likewise - * doc/version.tex: Likewise - -2008-02-04 Alexey Shchepin - - * src/mod_muc/mod_muc_room.erl: Append "(n/a)" to disco room - descriptions when a number of occupants is not available - -2008-02-02 Mickael Remond - - * src/mod_pubsub/nodetree_virtual.erl: Fixed error report at startup. - - * src/mod_pubsub/mod_pubsub.erl: Added the from field in the - get_subnodes pubsub plugin API function. This is usefull to write - plugins to generate the pubsub hierarchy dynamically, based on who - is doing the browsing request. - * src/mod_pubsub/gen_pubsub_nodetree.erl: Likewise - * src/mod_pubsub/nodetree_default.erl: Likewise - * src/mod_pubsub/nodetree_virtual.erl: Likewise - -2008-01-30 Badlop - - * doc/guide.tex: Removed the option served_hosts in mod_pubsub - because it does not work correctly yet (EJAB-504) - * doc/guide.html: Likewise - - * src/mod_echo.erl: Put in comments the call to the educational - function do_client_version - -2008-01-29 Badlop - - * src/mod_muc/mod_muc_room.erl: MUC kicks a participant if sends a - private message with type=error (EJAB-496) - -2008-01-25 Badlop - - * doc/introduction.tex: Updated list of languages - * doc/release_notes_2.0.0.txt: Likewise - - * src/msgs/eo.msg: New Esperanto translation (thanks to Andreas - van Cranenburgh) - - * src/msgs/no.msg: New Norwegian translation (thanks to Stian - B. Barmen) - - * doc/Makefile: Fixed small problem with contributed_modules.tex - -2008-01-25 Christophe Romain - - * src/mod_pubsub/mod_pubsub.erl: Setting boolean node configuration - fixed (EJAB-509) - * src/mod_pubsub/node_default.erl: Use roster_groups_allowed instead - of access_roster_groups (EJAB-508) - * src/mod_pubsub/node_pep.erl: Likewise - * src/mod_pubsub/node_buddy.erl: Likewise - * src/mod_pubsub/node_club.erl: Likewise - * src/mod_pubsub/node_dispatch.erl: Likewise - * src/mod_pubsub/node_private.erl: Likewise - * src/mod_pubsub/node_public.erl: Likewise - -2008-01-16 Badlop - - * doc/guide.tex: Updated the names of log files. - * doc/guide.html: Likewise - - * src/mod_muc/mod_muc_room.erl: Added log messages for room - destroy - - * src/mod_caps.erl: Small beautify of log error messages - -2008-01-15 Badlop - - * doc/guide.tex: Improved the documentation of Binary - installer. Updated the requirements, specifically: Erlang R10B-9 - is required as minimum, and R12 is not yet supported. Added - section Upgrading ejabberd. Improved documentation about Erlang - runtime system environment variables and command-line parameters. - * doc/guide.html: Likewise - - * doc/release_notes_2.0.0.txt: Updated to RC1 - * doc/version.tex: Likewise - * src/ejabberd.hrl: Likewise - - * doc/introduction.tex: Updated to 22 languages - - * doc/Makefile: Ensure that Bash is used - - * doc/guide.tex: Updated copyright dates to 2008. - * src/*: Likewise - -2008-01-15 Jerome Sautret - - * src/Makefile.in: Allow compilation with Erlang R12 (EJAB-446) - (thanks to Sergei Golovan and Maxim Treskin). Erlang R12 version is - not supported and not recommended for production servers. - * src/aclocal.m4: Likewise - * src/configure.ac: Likewise - * src/configure: Likewise - * src/ejabberd_s2s_in.erl: Likewise - -2008-01-13 Badlop - - * src/ejabberdctl.template: Instead of using the Erlang kernel - variable 'inetrc', use the ERL_INETRC environment variable that is - available since Erlang/OTP R10B-5. - -2008-01-12 Christophe Romain - - * src/mod_pubsub/mod_pubsub.erl: set_subscription fix (EJAB-494) - -2008-01-11 Christophe Romain - - * src/mod_caps.erl: don't ask capabilities to MUC room participants - (EJAB-478) - -2008-01-10 Christophe Romain - - * src/mod_pubsub/nodetree_default: Force PEP parent node to be [] - - * src/mod_pubsub/mod_pubsub.erl: Send last published PEP event now checks - the correct peer caps (EJAB-491) - * src/ejabberd_c2s.erl: Likewise - -2008-01-09 Badlop - - * src/mod_muc/mod_muc_room.erl: MUC kicks a participant if sends a - private message with type=error (EJAB-496) - -2008-01-08 Badlop - - * src/ejabberdctl.template: Removed the option ERL_FULLSWEEP_AFTER - because it is almost useless regarding ejabberd's performance. - * src/ejabberdctl.cfg.example: Likewise - -2008-01-08 Christophe Romain - - * doc/Makefile: fix version.tex generation bug - -2008-01-01 Badlop - - * src/web/ejabberd_web_admin.erl: Uniformize the name of - ejabberd's web admin to: 'Web Admin' (EJAB-472) - * doc/guide.tex: Likewise - * doc/introduction.tex: Likewise - - * src/web/ejabberd_web_admin.erl: Uniformize ejabberd name in the - text using the Latex command - - * src/mod_muc/mod_muc_room.erl: Resend 'continue' elements in muc - room invitations (EJAB-490) - - * src/ejabberdctl.template: Create logs_dir if doesn't exist. New - parameters --config, --ctl-config, --logs, --spool. Crash dump - renamed to erl_crash_DATETIME.dump. - - * src/ejabberdctl.template: Backport improvements from binary - installer (EJAB-488): options are simple values; enable Kernel - Poll by default, set SMP to auto, set max ports to 32000, max - processes to 250000. - * src/ejabberdctl.cfg.example: Likewise - - * src/ejabberd.inetrc: Renamed ejabberd.inetrc to inetrc - * src/inetrc: Likewise - * src/Makefile.in: Likewise - * doc/guide.tex: Likewise - -2007-12-31 Badlop - - * src/msgs/ca.msg: Updated (thanks to Vicent Alberola Canet) - -2007-12-29 Alexey Shchepin - - * src/ejabberd_s2s_out.erl: Fixed behavior when outgoing_s2s_port - option is not defined (EJAB-487) - -2007-12-27 Badlop - - * src/mod_vcard_ldap.erl: Fix some field names (EJAB-483) - -2007-12-26 Badlop - - * src/web/ejabberd_web_admin.erl: Translate menu items of webadmin - hooks in each module (EJAB-485) - * src/mod_shared_roster.erl: Likewise - - * src/web/ejabberd_web_admin.erl: max_user_sessions access rule - contains an integer, but webadmin always expects atoms (EJAB-482) - -2007-12-25 Badlop - - * src/mod_configure.erl: Bugfix, update to match changes in - mod_announce SVN r1099 - -2007-12-24 Christophe Romain - - * src/mod_pubsub/mod_pubsub.erl: remove useless get_roster_info call in - presence_probe handling when access rule is presence - -2007-12-24 Mickael Remond - - * doc/release_notes_2.0.0.txt: ejabberd 2.0.0 beta 1 release - notes. - -2007-12-23 Badlop - - * src/msgs/vi.msg: New Vietnamese translation (thanks to EQHO - Communications) - - * src/msgs/th.msg: New Thai translation (thanks to EQHO - Communications) - - * src/msgs/gl.msg: Updated (thanks to Carlos E. Lopez) - - * src/mod_muc/mod_muc_room.erl: Log room creation and - destruction. Ensure JID of owners of MUC room are user, not - server (EJAB-435) - -2007-12-22 Badlop - - * src/ejabberd.app: Update ejabberd.app: add new erlang - modules (EJAB-466) - - * doc/introduction.tex: Small updates - - * doc/guide.tex: Small fixes in Install. Added http_bind to - Listening Ports. - - * src/web/ejabberd_http.erl: Add 'http_bind' option for easy - configuration of HTTP-Binding - - * src/mod_announce.erl: Fixed unnoticeable bug related to Node - matching. Renamed some nonstandard node names according to - XEP-0133. Small reordering of clauses. When editing MOTD, display - current value (EJAB-475) - -2007-12-22 Christophe Romain - - * src/ejabberd_sm.erl: change incoming_presence_hook to - presence_probe_hook - * src/ejabberd_c2s.erl: Likewise - - * src/mod_pubsub/mod_pubsub.erl: send last pep item bugfix and - broadcast optimization (EJAB-468) (EJAB-467) (EJAB-460) (EJAB-469) - * src/mod_pubsub/pubsub.hrl: Likewise - * src/mod_pubsub/node_default.erl: Likewise - -2007-12-22 Badlop - - * src/mod_caps.erl: Bugfix in timeout checking. Check for timeout - when an error response is received, and also before querying - -2007-12-21 Badlop - - * src/ejabberd_ctl.erl: Added new command: mnesia (thanks to - Tsukasa Hamano) - -2007-12-21 Mickael Remond - - * src/msgs/fr.msg: Updated French translation (EJAB-295) - -2007-12-21 Christophe Romain - - * src/mod_pubsub/mod_pubsub.erl: disco#items bugfix (EJAB-465) - -2007-12-21 Badlop - - * src/msgs/uk.msg: Updated (thanks to Ruslan Rakhmanin) - - * src/msgs/de.msg: Updated (thanks to Nikolaus Polak and Cord - Beermann) - - * contrib/extract_translations/prepare-translation.sh: Small fix - -2007-12-20 Badlop - - * src/mod_caps.erl: Don't include the Node attribute from C - element in the disco#info query - -2007-12-20 Christophe Romain - - * doc/guide.tex: Explain how to launch installer and improve - ejabberdctl usage example (EJAB-420) - * doc/guide.html: Likewise - - * src/mod_pubsub/mod_pubsub.erl: PEP notification bugfix - - * src/odbc/odbc_queries.erl: User count performance improvements - (EJAB-239) - -2007-12-20 Badlop - - * src/msgs/zh.msg: Small update (thanks to Shelley Shyan) - - * src/msgs/ru.msg: Small update (thanks to Konstantin Khomoutov) - -2007-12-19 Badlop - - * src/msgs/pl.msg: Updated (thanks to Andrzej Smyk)(EJAB-463) - - * src/msgs/de.msg: Updated (thanks to Cord Beermann) - - * src/msgs/es.msg: Small update (thanks to Badlop) - - * src/msgs/cs.msg: Small update (thanks to Lukas Polivka alias - Spike411) - - * src/web/ejabberd_web_admin.erl: No need to translate copyright - notice - -2007-12-18 Badlop - - * src/mod_muc/mod_muc_log.erl: Add handling of kicks 321, 322, 332 - - * doc/guide.tex: Document mod_privacy_odbc - - * doc/Makefile: Support for conditional inclusion of documentation - from contributed modules - * doc/guide.tex: Likewise - -2007-12-18 Christophe Romain - - * src/mod_pubsub/mod_pubsub.erl: Purge related pep nodes at remove_user - * src/mod_pubsub/node_pep.erl: Likewise - -2007-12-17 Badlop - - * src/ejabberd_zlib/Makefile.in: Compile all erl files found in - the directory, so it isn't needed to provide an explicit list of - target files - * src/eldap/Makefile.in: Likewise - * src/mod_irc/Makefile.in: Likewise - * src/mod_muc/Makefile.in: Likewise - * src/mod_proxy65/Makefile.in: Likewise - * src/mod_pubsub/Makefile.in: Likewise - * src/odbc/Makefile.in: Likewise - * src/pam/Makefile.in: Likewise - * src/stringprep/Makefile.in: Likewise - * src/tls/Makefile.in: Likewise - * src/web/Makefile.in: Likewise - * src/ejabberd_zlib/Makefile.win32: Likewise - * src/eldap/Makefile.win32: Likewise - * src/mod_irc/Makefile.win32: Likewise - * src/mod_muc/Makefile.win32: Likewise - * src/mod_proxy65/Makefile.win32: Likewise - * src/mod_pubsub/Makefile.win32: Likewise - * src/odbc/Makefile.win32: Likewise - * src/stringprep/Makefile.win32: Likewise - * src/tls/Makefile.win32: Likewise - * src/web/Makefile.win32: Likewise - - * doc/guide.tex: Remove 'ssl' option from documentation and - configuration load (EJAB-461) - * src/ejabberd_listener.erl: Likewise - - * src/msgs/cs.msg: Small typo (thanks to Lukas Polivka alias - Spike411) - - * src/ejabberd.cfg.example: Small change in order of options - -2007-12-15 Badlop - - * src/mod_irc/iconv.erl: Changed order of handle_info - clause (EJAB-290) - * src/stringprep/stringprep.erl: Likewise - - * src/eldap/eldap.erl: Removed handle_sync_event clause because it - is never called (EJAB-290) - - * src/mod_irc/mod_irc.erl: No need to translate copyright notice - * src/mod_muc/mod_muc.erl: Likewise - * src/mod_proxy65/mod_proxy65_service.erl: Likewise - * src/mod_pubsub/mod_pubsub.erl: Likewise - * src/mod_vcard.erl: Likewise - * src/mod_vcard_ldap.erl: Likewise - * src/mod_vcard_odbc.erl: Likewise - * src/msgs/*.msg: Likewise - - * contrib/extract_translations/prepare-translation.sh: Bugfix - -2007-12-14 Badlop - - * src/msgs/*: Unified file format: First line is SVN Id - tag. Second is Language name. Next lines are authors, adding the - new ones on top. Each string must be in a single line (to - facilitate the automatic removal of unused strings). Last four - lines report file format for Emacs and Vim. - - * contrib/extract_translations/prepare-translation.sh: New - features: extract all translations, include explanation for - translators in the file, remove unused strings from file, include - unused strings in a section for reference, provide information - about current translation and number of missing strings, compress - the files to a zip - - * contrib/extract_translations/extract_translations.erl: Reverted - to the original version - -2007-12-14 Alexey Shchepin - - * src/ejabberd_s2s_out.erl: Bugfix - -2007-12-12 Christophe Romain - - * src/mod_pubsub/mod_pubsub.erl: presence handler bugfix - * src/mod_pubsub/node_default.erl: Allow send last item on presence - -2007-12-12 Badlop - - * src/msgs/it.msg: Updated (thanks to Luca Brivio) - -2007-12-11 Christophe Romain - - * src/mod_pubsub/mod_pubsub.erl: notification broadcast bugfix - - * src/jlib.hrl: add pubsub namespace - -2007-12-11 Badlop - - * src/msgs/tr.msg: New translation (thanks to Doruk Fisek) - - * src/msgs/zh.msg: Updated (thanks to Shelley Shyan) - -2007-12-10 Badlop - - * src/msgs/ja.msg: Updated (thanks to Tsukasa Hamano) - - * doc/guide.tex: Small improvement in mod_shared_roster - - * src/mod_irc/mod_irc.erl: Bugfix in ACL check (thanks to Sergei - Golovan) - -2007-12-10 Christophe Romain - - * src/mod_pubsub/mod_pubsub.erl: database upgrade and auto-create - pep node bugfix - -2007-12-09 Mickael Remond - - * src/web/ejabberd_http.erl: Fixed URL decoding code (EJAB-450) - - * src/msg/fr.msg: Added missing space. - -2007-12-09 Badlop - - * src/msgs/ru.msg: Updated (thanks to Konstantin Khomoutov) - -2007-12-08 Badlop - - * src/msgs/ja.msg: New translation (thanks to Tsukasa Hamano) - - * src/msgs/nl.msg: Updated (thanks to Andreas van Cranenburgh) - - * src/ejabberd_config.erl: Report human-readable message when - Mnesia spool files are not readable. - -2007-12-08 Mickael Remond - - * src/ejabberd_s2s_out.erl: Increase dialback timeout as dialback can - sometimes take longer than expected. - -2007-12-08 Christophe Romain - - * src/mod_pubsub/mod_pubsub.erl: disco_sm_items bugfix - -2007-12-07 Alexey Shchepin - - * src/ejabberd_sm.erl: Bugfix - -2007-12-07 Badlop - - * src/Makefile.in: Fix compilation warnings: Part 5: To fix a - warning about behaviour undefined, the erlang module that - implements the behaviour must be compiled before the module that - uses such behaviour (EJAB-290) - - * src/eldap/eldap.erl: Fix compilation warnings: Part 4 (EJAB-290) - * src/web/ejabberd_web_admin.erl: Likewise - - * src/mod_irc/iconv.erl: Fix compilation warnings: 3 (EJAB-290) - * src/mod_irc/mod_irc.erl: Likewise - * src/mod_irc/mod_irc_connection.erl: Likewise - * src/mod_pubsub/mod_pubsub.erl: Likewise - * src/stringprep/stringprep.erl: Likewise - * src/web/ejabberd_http.erl: Likewise - * src/web/ejabberd_http_poll.erl: Likewise - - * src/mod_caps.erl: Fix compilation warnings: Part 2 (EJAB-290) - * src/mod_configure.erl: Likewise - * src/mod_configure2.erl: Likewise - * src/mod_offline_odbc.erl: Likewise - * src/mod_shared_roster.erl: Likewise - * src/mod_stats.erl: Likewise - * src/mod_version.erl: Likewise - - * src/cyrsasl.erl: Fix compilation warnings: Part 1 (EJAB-290) - * src/ejabberd_auth_odbc.erl: Likewise - * src/ejabberd_config.erl: Likewise - * src/ejabberd_hooks.erl: Likewise - * src/ejabberd_s2s_out.erl: Likewise - * src/ejabberd_sm.erl: Likewise - * src/idna.erl: Likewise - * src/jd2ejd.erl: Likewise - -2007-12-06 Badlop - - * src/**/*.erl: Remove Erlang module attribute 'vsn' because it - doesn't provide any worth feature, and it difficults hot code - update (EJAB-440) - - * src/ejabberdctl.cfg.example: Explain that each connection uses - two or three ports (thanks to Max Loparyev) - - * src/configure: Regenerated - * doc/dev.html: Likewise - * doc/features.html: Likewise - * doc/guide.html: Likewise - * doc/version.tex: Likewise - - * doc/introduction.tex: Updated number of translated languages - - * src/web/ejabberd_web_admin.erl: Support more native acl_type on - web interface (EJAB-253) - - * src/ejabberd_c2s.erl: Increase the timeout of open socket - without authentication to 60 seconds because many Jabber clients - are not yet capable of handling this correctly (EJAB-355) - - * src/Makefile.in: Allow compilation with HiPE, disabled by - default, undocumented and unrecommended because it is experimental - and doesn't seem to provide meaningful gains currently (thanks to - Samuel Tardieu) (EJAB-412) - * src/configure.ac: Likewise - - * src/msgs/cs.msg: Updated (thanks to Lukas Polivka alias - Spike411) - - * src/mod_muc/mod_muc.erl: Catch creation of table - muc_online_users: it may be already created by other mod_muc - instance - - * doc/Makefile: Remove bashism - - * doc/guide.tex: Document how to change computer - hostname (EJAB-320) - - * src/web/ejabberd_http.erl: Change loglevel for http - queries (EJAB-363) - * src/web/ejabberd_web_admin.erl: Likewise - - * doc/guide.tex: Add mod_caps and improve mod_pubsub documentation - * src/ejabberd.cfg.example: Added mod_caps enabled by default - -2007-12-06 Christophe Romain - - * src/mod_pubsub/node_dispatch.erl: Correct syntax issue - * src/mod_pubsub/Makefile.in: include example plugins - * src/mod_pubsub/Makefile.win32: likewise - * src/ejabberd.cfg.example: use default and pep pubsub plugins - * doc/guide.tex: add nodetree and plugins pubsub option - * doc/guite.html: likewise - -2007-12-06 Badlop - - * doc/guide.tex: Document the Debug Console (EJAB-395) - - * src/ejabberdctl.template: The parameter 'kernel inetrc' is used - even with -sname to guarantee the same behaviour that when using - -name (EJAB-317) - - * doc/guide.tex: Improvements in sections: Start, Creating Initial - Account, Module Overview, Managing an ejabberd server, and - Debugging - -2007-12-05 Badlop - - * doc/guide.tex: Added explanations about epmd, cookie and node - name (EJAB-251) - - * src/msgs/zh.msg: Updated (thanks to Shelley Shyan) - - * src/mod_muc/mod_muc_room.erl: Rephrase the invitation sentence - to make more natural - - * src/msgs/es.msg: Updated - - * src/ejabberd.hrl: Set more proper version number - - * contrib/extract_translations/extract_translations.erl: Don't - report [] to be translated. Identify unusued strings. - -2007-12-04 Badlop - - * .gitignore: Removed (EJAB-441) - * src/.cvsignore: Likewise - - * src/mod_pubsub/mod_pubsub.erl: Bugfix: don't report the Jabber - server as a pubsub service. Fixed URI. - -2007-12-03 Mickael Remond - - * src/mod_muc.erl: Added option to limit the number of room a user is - allowed to connect to (EJAB-445). - * src/mod_muc_room.erl: Likewise. - * doc/guide.tex: Likewise.:ChangeLog - -2007-12-02 Badlop - - * src/ejabberdctl.cfg.example: Bugfix in kernel poll. Added SMP - option. Reorganization of options - * src/ejabberdctl.template: Added SMP option - - * src/Makefile.in: New options make uninstall and - uninstall-all (EJAB-293) - -2007-12-01 Mickael Remond - - * doc/Makefile: echo seems to interpret \n and \v under MacOSX - Leopard. I fixed the problem but let me know if it breaks build - chain in other contexts. - - * Doc/guide.tex: Updated Windows compilation instructions. - * src/configure.erl: Likewise. - - * doc/ejabberd.hrl: Preparing ejabberd 2.0.0 beta release. - * doc/version.tex: Likewise. - - * src/tls/Makefile.win32: Updated for latest Win32 OpenSSL library. - - * src/odbc_queries.erl: Added a default define value so that we - can recompile the file manually with a simple erlc command (with - the default generic value). - -2007-12-01 Alexey Shchepin - - * src/mod_pubsub/Makefile.in: Removed mod_pubsub_old mentioning - * src/mod_pubsub/Makefile.win32: Likewise - - * src/odbc/odbc_queries.erl: Reverted the previous patch because - it produces "redefining macro 'generic'" compilation error - - * src/mod_caps.erl: CAPS support (thanks to Magnus Henoch) - * src/ejabberd_local.erl: Support for IQ responses - * src/jlib.erl: Added iq_query_or_response_info/1 function - * src/jlib.hrl: Added NS_PUBSUB_ERRORS and NS_CAPS - - * src/mod_pubsub/Makefile.in: New pubsub+pep implementation - (thanks to Christophe Romain and Magnus Henoch) - * src/ejabberd_sm.erl: Added get_session_pid/3 function - * src/ejabberd_c2s.erl: Added get_subscribed_and_online/1 function - -2007-11-30 Mickael Remond - - * src/odbc_queries.erl: Added a default define value so that we - can recompile the file manually with a simple erlc command. - -2007-11-29 Badlop - - * src/mod_vcard.erl: Add type of x:data field to search results - (thanks to Robin Redeker) (EJAB-327) - * src/mod_vcard_ldap.erl: Likewise - * src/mod_vcard_odbc.erl: Likewise - - * src/aclocal.m4: Fix autoconf caching for SSL libraries (thanks - to Michael Shields) (EJAB-439) - - * src/configure.ac: Don't hardcode gcc and gcc options in - Makefiles (thanks to Etan Reisner) (EJAB-436) - * src/Makefile.in: Likewise - * src/ejabberd_zlib/Makefile.in: Likewise - * src/eldap/Makefile.in: Likewise - * src/mod_irc/Makefile.in: Likewise - * src/mod_muc/Makefile.in: Likewise - * src/mod_proxy65/Makefile.in: Likewise - * src/mod_pubsub/Makefile.in: Likewise - * src/odbc/Makefile.in: Likewise - * src/pam/Makefile.in: Likewise - * src/stringprep/Makefile.in: Likewise - * src/tls/Makefile.in: Likewise - * src/web/Makefile.in: Likewise - - * src/mod_muc/mod_muc_room.erl: Hide the option 'Make room - moderated' because it isn't implemented, and set the default value - of 'moderated' to true because that is the behaviour - implemented (EJAB-419) - -2007-11-28 Badlop - - * doc/guide.tex: It should be made more clear that domain_certfile - works for both s2s and c2s connections (EJAB-212). Added another - example of listening ports. - - * doc/guide.tex: Update URI of ejabberd official home page, URI - of ejabberd.jabber.ru, and copyright dates (EJAB-366) - * doc/introduction.tex: Likewise - * src/ejabberd.hrl: Likewise - * src/ejabberd_admin.erl: Likewise - * src/mod_irc/mod_irc.erl: Likewise - * src/mod_irc/mod_irc_connection.erl: Likewise - * src/mod_muc/mod_muc.erl: Likewise - * src/mod_muc/mod_muc_log.erl: Likewise - * src/mod_proxy65/mod_proxy65_service.erl: Likewise - * src/mod_pubsub/mod_pubsub.erl: Likewise - * src/mod_vcard.erl: Likewise - * src/mod_vcard_ldap.erl: Likewise - * src/mod_vcard_odbc.erl: Likewise - * src/msgs/*.msg: Updated - * src/web/ejabberd_web_admin.erl: Likewise - -2007-11-27 Badlop - - * src/gen_mod.erl: Update in database the configuration changes in - modules (EJAB-330) - - * src/mod_configure.erl: The command get-user-lastlogin is now - compatible with both Mnesia and ODBC (EJAB-383) - * src/mod_last.erl: Likewise - * src/mod_last_odbc.erl: Likewise - - * doc/guide.tex: Document ejabberd_http's - request_handlers (EJAB-372). Fixed small Latex problems. - Sort options of listening sockets. - -2007-11-27 Alexey Shchepin - - * src/mod_announce.erl: Bugfix (thanks to Christophe Romain) - -2007-11-27 Badlop - - * doc/guide.tex: Added clarification about LDAP default port - (thanks to Christophe Romain). - - * src/mod_vcard.erl: Ensure mod_vcard to respect FORM_TYPE - registry (EJAB-328). - * src/mod_vcard_ldap.erl: Likewise. - * src/mod_vcard_odbc.erl: Likewise. - * doc/guide.tex: Updated documentation. - - * src/mod_muc/mod_muc_room.erl: Don't show the room name as the - room description (EJAB-382). - -2007-11-26 Badlop - - * src/ejabberd.cfg.example: Added example configuration of - databases. - - * doc/guide.tex: Fixed several typos. - - * src/ejabberd_config.erl: Print error when the configuration - requires ODBC, MySQL or PostgreSQL libraries but are not installed - (EJAB-210). - - * src/web/ejabberd_web_admin.erl: Added a favicon (EJAB-379). - - * src/msgs/wa.msg: New Walon translation (thanks to Pablo - Saratxaga) (EJAB-374). - - * doc/guide.tex: Describe how ejabberd treats ejabberd.cfg file - (EJAB-384). - - * src/ejabberd.cfg.example: Huge reorganization and grouping of - options (EJAB-392). - - * doc/guide.tex: Describe in mod_muc: nick register and service - admin message (EJAB-400). - - * src/mod_echo.erl: Example function that demonstrates how to - receive XMPP packets using Erlang's message passing mechanism - (EJAB-247). - - * src/ejabberdctl.template: Removed bashisms (EJAB-399). Set - environment variables instead of passing parameters when calling - erl (EJAB-421). Write erl_crash.dump in the log/ directory, with - unique filename (EJAB-433). - - * src/ejabberd_ctl.erl: Improvements in the help messages - (EJAB-399). - - * doc/guide.tex: Improvements in sections ejabberdctl, and Install - from Source (EJAB-399). - -2007-11-25 Alexey Shchepin - - * src/ejabberd_router.erl: Bugfix - - * src/ejabberd_s2s_out.erl: Bugfix - - * src/ejabberd_sm.erl: Optimized check_max_sessions (thanks to - Christophe Romain) - -2007-11-22 Mickael Remond - - * src/ejabberd_config.erl: Improved error message when ejabberd - config file is not found. - -2007-11-16 Christophe Romain - - * src/ejabberd_auth_internal.erl: Better count management and - batch users retrieval internal database - -2007-11-14 Mickael Remond - - * examples/extauth/check_pass_null.pl: Fixed external - authentication example script (EJAB-404) - -2007-11-05 Mickael Remond - - * src/ejabberd_config.erl: Refactoring: Move internal data - structure to an include file. - * src/ejabberd_config.hrl: Likewise. - -2007-11-03 Mickael Remond - - * src/ejabberd_auth.erl: Better count management and batch users - retrieval for relational database (Thanks to Massimiliano Mirra). - * src/ejabberd_auth_odbc.erl: Likewise. - * src/odbc/odbc_queries.erl: Likewise. - -2007-11-02 Mickael Remond - - * src/web/ejabberd_http_poll.erl: Refactoring. Moved c2s limits - acquisition to a separate module. - * src/ejabberd_c2s_config.erl: Likewise. - -2007-11-01 Mickael Remond - - * src/web/ejabberd_http_poll.erl: Support for c2s ACL access, - max_stanza and shaper on http_poll connections (EJAB-243, - EJAB-415, EJAB-416) - -2007-10-30 Jerome Sautret - - * src/ejabberd_s2s.erl: don't use the resource of the sender to choose - a s2s connection to ensure that a muc room always uses the same - connection (EJAB-360) - -2007-10-23 Christophe Romain - - * doc/dev.tex: Added extauth script details (EJAB-334) - -2007-10-17 Christophe Romain - - * src/ejabberdctl.template: Bugfix on previous change (EJAB-380) - -2007-10-17 Alexey Shchepin - - * src/ejabberdctl.template: Several improvements (EJAB-380) - (thanks to Sander Devrieze, Sergei Golovan, Torsten Werner and - Badlop) - * src/ejabberdctl.cfg.example: Likewise - * src/ejabberd.inetrc: Likewise - * src/Makefile.in: Likewise - - * src/mod_privacy.erl: Bugfix - -2007-10-07 Alexey Shchepin - - * src/mod_vcard_odbc.erl: Reverted previous change - -2007-10-06 Alexey Shchepin - - * src/mod_vcard_odbc.erl: Bugfix - - * src/mod_offline_odbc.erl: Bugfix - -2007-10-01 Alexey Shchepin - - * src/ejabberd_auth_pam.erl: Support for PAM authentication (EJAB-307) - (thanks to Evgeniy Khramtsov) - * src/ejabberd.cfg.example: Likewise - * src/configure.ac: Likewise - * src/aclocal.m4: Likewise - * src/Makefile.in: Likewise - * examples/ejabberd.pam: Likewise - * doc/guide.tex: Likewise - -2007-09-28 Christophe Romain - - * src/odbc/mysql.sql: Added some missing NOT NULL restrictions - * src/odbc/mssql.sql: Likewise - * src/odbc/pg.sql: Likewise - -2007-09-27 Christophe Romain - - * src/ejabberdctl.template: apply rootdir patch from Badlop (EJAB-385) - * tools/ejabberdctl: define EJABBERD_EBIN as from ejabberdctl.template - -2007-09-25 Alexey Shchepin - - * src/ejabberd_s2s.erl: Max number of connections and max number - of connections per node now can be specified via - max_s2s_connections and max_s2s_connections_per_node acl rules - -2007-09-14 Mickael Remond - - * src/ejabberd_s2s_out.erl: Changed to actual p1_fsm behaviour. It - was working correctly as the API of p1_fsm and gen_fsm is strictly - the same. - - * src/ejabberd_s2s_in.erl: Added debug hook for s2s loop (EJAB-358). - - * src/ejabberd_c2s.erl: Added debug hook for c2s loop (EJAB-358). - - * src/ejabberd_s2s.erl: open all missing connections if - needed (Jerome Sautret). - - * src/ejabberd_s2s.erl: don't check blacklist for services (Jerome - Sautret). - - * src/ejabberd_s2s.erl: Try to open all s2s connections at the - same time, to guarantee the right order of the packets (Jerome - Sautret). - - * src/ejabberd_s2s.erl: max_s2s_connexions_number local parameter - added (Jerome Sautret). - - * src/ejabberd_s2s_out.erl: Implements s2s negociation timeouts - and s2s connection retrial interval (EJAB-357, EJAB-294). - - * src/ejabberd_c2s.erl: Implements timeouts during session opening - negociation (EJAB-355). - - * doc/guide.tex: Documentation for new configure option - --disable-transient-supersisors (EJAB-354). - - * src/ejabberd_c2s.erl: Option to prevent the use of Erlang OTP - supervisor for transient processes (EJAB-354). - * src/ejabberd_s2s_in.erl: Likewise. - * src/ejabberd_s2s_out.erl: Likewise. - * src/mod_muc/mod_muc_room.erl: Likewise. - * src/configure.ac: Likewise. - * src/configure: Likewise. - * src/Makefile.in: Likewise. - * src/mod_muc/Makefile.in: Likewise. - - * src/ejabberd_s2s_out.erl: Moved s2s connexion information from - INFO level to DEBUG level and more human readable information - explai - - * src/ejabberd_s2s_in.erl: Moved s2s connexion information from - INFO level to DEBUG level (EJAB-353). - - * src/ejabberd_s2s_out.erl: open up to 3 s2s outgoing connection - per domain pair (Jerome Sautret). - * src/ejabberd_s2s.erl: Likewise. - -2007-09-11 Alexey Shchepin - - * src/gen_mod.erl: Added get_module_opt_host/3 (thanks to Badlop) - -2007-09-10 Mickael Remond - - * src/guide.tex: Fix: user_regexp acls are valid for all local - users (all vhosts). - -2007-09-06 Mickael Remond - - * src/guide.tex: Improved documentation for adding a vhost - specific option (EJAB-297). - - * src/mod_configure.erl: Virtual host support for - mod_configure (Thanks to Badlop) (EJAB-285). - -2007-09-05 Alexey Shchepin - - * src/mod_offline_odbc.erl: Bugfix - -2007-09-04 Mickael Remond - - * src/mod_register.erl: update ejabberd commands to support - XEP-0133 (initial patch by Badlop) (EJAB-325). - * src/mod_configure.erl: Likewise. - * src/mod_announce.erl: Likewise. - * src/jlib.hrl: Likewise. - * src/ejabberd.cfg.example: Likewise. - * doc/guide.tex: Likewise. - -2007-09-03 Mickael Remond - - * examples/extauth/check_pass_null.pl: Perl is generally available - as a default in most Linux distributions. - -2007-09-02 Alexey Shchepin - - * src/jlib.erl: Removed http_base_64:decode call - - * src/mod_muc/mod_muc_room.erl: Added logging of MUC admin/owner - queries - -2007-09-01 Alexey Shchepin - - * src/mod_muc/mod_muc_room.erl: Added user_message_shaper and - room_shaper options - * src/mod_muc/mod_muc.erl: Likewise - -2007-08-31 Mickael Remond - - * doc/guide.tex: Minor examples improvement in LDAP - example (Thanks to Badlop) (EJAB-272). - - * doc/guide.tex: Documentation for mod_muc option for server-wide - limitation of the maximum number of users per room (EJAB-344). - - * doc/guide.tex: Documentation for mod_muc option to allow admin - to enter room even if the maximum number of users - reached (EJAB-345). - - * src/web/ejabberd_web_admin.erl: Make the web interface pages - "translatable" (Thanks to Badlop) (EJAB-11). - -2007-08-29 Alexey Shchepin - - * src/ejabberd.cfg.example: Updated mod_muc 'host' option default - value (thanks to Badlop) - - * src/mod_muc/mod_muc_room.erl: The mod_muc option max_users now - limits max number of users in rooms and max_users_admin_threshold - sets a number of admin or owner accounts allowd to join after - max_users occupants - -2007-08-29 Mickael Remond - - * doc/guide.tex: Documentation for XML based optimisation build - time option (EJAB-298) - -2007-08-29 Alexey Shchepin - - * src/mod_muc/mod_muc_log.erl: Added missed HTMLization in a - nickname change logging (thanks to Badlop) - -2007-08-28 Mickael Remond - - * src/mod_muc/mod_muc_room.erl: Changed default max number of user - in a room to 200 (EJAB-248) - - * src/mod_offline_odbc.erl: Implements quota for offline messages - in relational database (EJAB-314) - * src/odbc/odbc_queries.erl: Likewise - -2007-08-28 Alexey Shchepin - - * doc/guide.tex: Described @HOST@ feature (thanks to Badlop) - -2007-08-26 Mickael Remond - - * src/mod_muc/mod_muc_room.erl: Implements muc max users option - from XEP-0045 (Thanks to Jerome Sautret) (EJAB-248). - -2007-08-26 Alexey Shchepin - - * doc/guide.tex: Removed mentions of unexistent 'hosts' modules - option (thanks to Badlop) - -2007-08-25 Alexey Shchepin - - * src/gen_mod.erl: Substitute @HOST@ with hostname in the 'host' - option (thanks to Badlop) - * src/mod_vcard.erl: Likewise - * src/mod_vcard_ldap.erl: Likewise - * src/mod_vcard_odbc.erl: Likewise - * src/mod_muc/mod_muc.erl: Likewise - * src/mod_irc/mod_irc.erl: Likewise - * src/mod_echo.erl: Likewise - * src/mod_pubsub/mod_pubsub.erl: Likewise - * src/mod_proxy65/mod_proxy65_service.erl: Likewise - -2007-08-24 Alexey Shchepin - - * src/web/ejabberd_web_admin.erl: Moved roster stuff to mod_roster* - * src/mod_roster.erl: Likewise - * src/mod_roster_odbc.erl: Likewise - -2007-08-23 Alexey Shchepin - - * src/ejabberd_sm.erl: Removed check which denies resource to - receive its own presence - - * src/web/ejabberd_web_admin.erl: Added hooks to allow plugins to - add their pages without modifying ejabberd_web_admin.erl (thanks - to Badlop) - * src/web/ejabberd_web_admin.hrl: Macro definitions moved here - * src/mod_shared_roster.erl: Updated - * src/mod_offline.erl: Likewise - * src/mod_offline_odbc.erl: Likewise - -2007-08-22 Alexey Shchepin - - * src/jlib.erl: Use http_base_64:decode if available - -2007-08-20 Alexey Shchepin - - * src/mod_roster.erl: Don't send roster push when unsubscribing in - "None + Pending In" state - * src/mod_roster_odbc.erl: Likewise - - * src/mod_offline.erl: Renamed MAX_OFFLINE_MSGS to MaxOfflineMsgs - -2007-08-16 Jerome Sautret - - * src/odbc/ejabberd_odbc_sup.erl: Add an odbc_pool_size config - file option to choose the number of SQL connection in each - pool (EJAB-58). - * src/odbc/ejabberd_odbc.erl: Add an odbc_keepalive_interval - config file option to perform a keep alive query at given - interval (EJAB-206). - -2007-08-13 Mickael Remond - - * src/mod_offline.erl: Added a config option to define the maximum - number of offline messages per user (EJAB-314). - - * doc/guide.tex: Added documentation for the mod_offline quota - (EJAB-314). - - * doc/guide.tex: Remove release notes (EJAB-323). - - * src/mod_offline.erl: Returns an error message to sender when - message is discarded due to quota (EJAB-314). - -2007-08-12 Mickael Remond - - * src/odbc/ejabberd_odbc.erl: UTF-8 support for MySQL5 (EJAB-318). - -2007-08-09 Alexey Shchepin - - * doc/guide.tex: Minor update (thanks to Sergei Golovan) - -2007-08-08 Mickael Remond - - * src/mod_offline.erl: Only count messages if a quota has been - actually set (EJAB-314). - * src/p1_mnesia.erl: Minor coding style change. - -2007-08-07 Mickael Remond - - * src/mod_offline.erl: Started implementation of mod_offline - quota. For now, it require change in code. Will be turn into a - config file parameter soon. (EJAB-314). - * src/p1_mnesia.erl: Added memory efficient record count in - Mnesia. - -2007-08-03 Mickael Remond - - * src/mod_announce.erl: Added support to all the announce features - described in documentation. Access to all announce features - through command line, adhoc commands and disco (Thanks to - Badlop) (EJAB-18). - * src/gen_mod.erl: Likewise. - * doc/guide.tex: Likewise. - -2007-08-02 Alexey Shchepin - - * src/mod_muc/mod_muc.erl: Added default_room_options option - (thanks to Etan Reisner and Badlop) - * src/mod_muc/mod_muc_room.erl: Likewise - * doc/guide.tex: Updated - -2007-08-01 Mickael Remond - - * doc/guide.tex: Front page table formatting that render correctly - in HTML and update mentionning CEAN as a way to install - ejabberd (Thanks to Badlop) (EJAB-272). - - * src/ejabberd_s2s_out.erl: Avoid bouncing messages twice if - terminate happens during open_socket. - - * src/ejabberd_s2s_out.erl: On terminate, bounce internal process - queue and Erlang message queue. - - * src/mod_private.erl: Reduce memory consumption on user private - storage removal (EJAB-299). - -2007-07-31 Mickael Remond - - * src/xml.erl: Making use of CDATA escaping optional through with - a compile time option (EJAB-298). - * src/Makefile.in: Likewise. - * src/configure.ac: Likewise. - -2007-07-31 Alexey Shchepin - - * src/mod_version.erl: Added option to hide OS version (thanks to - Badlop) - * doc/guide.tex: Updated - - * src/msgs/zh.msg: Updated (thanks to Shelley Shyan) - - * src/msgs/es.msg: Updated (thanks to Badlop) - - * src/msgs/gl.msg: New galician translation (thanks to - Carlos E. Lopez) - - * src/ejabberd_config.erl: Added possibility for appending values - to config options (thanks to Badlop) - * doc/guide.tex: Updated - -2007-07-30 Mickael Remond - - * src/xml.erl: Better escaping management with CDATA. We only add - CDATA enclosure when needed. CDATA end token is properly escaped. - - * src/xml.erl: Only wrap xmldata nodes in xml cdata "tag" if - bigger than 50 bytes. Shorter xmlcdata nodes will be escaped. - - * src/tls/tls_drv.c: Sends the entire certificate chain (EJAB-209). - - * src/acl.erl: Remove compilation warnings (EJAB-290). - - * src/xml_stream.erl: Group CDATA on a single xmlcdata - node (splitting is not relevant as dependant on TCP/IP packet - fragmentation) (EJAB-292). - - * src/xml.erl: Remove compilation warnings (EJAB-290). - - * src/xml.erl: Do not crypt binary CData, but enclose the value in - XML CDATA "tag". - - * src/xml.erl: Code clean-up: removed old code in comments. - -2007-07-28 Mickael Remond - - * src/mod_roster_odbc.erl: Better error management when bad JID in - roster table (EJAB-289). - -2007-07-26 Mickael Remond - - * src/web/ejabberd_web_admin.erl: Code clean-up. - - * src/mod_offline.erl: Code clean-up. - - * src/gen_mod.erl: Throw error more cleanly. - - * src/mod_configure.erl: One ACL call was not virtual host - compliant. - - * src/ejabberd_auth_odbc.erl: Fixed wrong call preventing user - removal with relational databases. - - * src/mod_last_odbc.erl: Adapted to mod_privacy changes. - * src/mod_privacy_odbc.erl: Refactoring to extract records in - include file. - - * src/mod_last.erl: Adapted to mod_privacy changes. - * src/mod_privacy.erl: Refactoring to extract records in include - file. - * src/mod_privacy.hrl: Likewise. - - * src/mod_roster_odbc.erl: Fixed wrong call. - -2007-07-24 Mickael Remond - - * doc/guide.tex: Added recommandations on max_stanza options - usage. - - * src/ejabberd_s2s_out.erl: Autodisconnect s2s connections which - are overloaded (EJAB-287). - * src/p1_fsm.erl: Likewise. - -2007-07-19 Mickael Remond - - * src/ejabberd_s2s_in.erl: Add s2s whitelist / blacklist support - on incoming s2s connections (EJAB-283) - * src/ejabberd_s2s.erl: Likewise - -2007-07-18 Mickael Remond - - * src/ejabberd_s2s.erl: Fixed typos. - - * src/ejabberd_s2s.erl: Implements s2s hosts whitelist / blacklist - * src/ejabberd.cfg.example: Likewise - - * src/ejabberd_s2s_out.erl: Make s2s connections more robust - * src/ejabberd_s2s.erl: Likewise - -2007-07-17 Mickael Remond - - * src/mod_configure.erl: Bugfix: Show only virtual host users - on admin disco for all users (EJAB-268) (Thanks to Badlop). - - * src/mod_muc/mod_muc_log.erl: Recognise more URI schemes in - logged HTML (EJAB-279) (Thanks to qu1j0t3). - - * src/ejabberd_s2s_out.erl: Improved place of the INFO / - DEBUG printout. - - * src/odbc/ejabberd_odbc.erl: Better error handling for MySQL - native driver (EJAB-224). - -2007-07-15 Alexey Shchepin - - * src/ejabberd_s2s.erl: Added remove_connection/3 - * src/ejabberd_s2s_out.erl: Bugfix: remove only own s2s record - -2007-07-11 Alexey Shchepin - - * src/ejabberd_s2s_out.erl: Bounce packets after unregistering s2s - connection, not before - -2007-07-11 Mickael Remond - - * src/mod_echo.erl: mod_echo does not reply to other - components. This is to make sure that a component will not - discover its own capabilities (Thanks to Badlop) (EJAB-281). - * src/ejabberd.cfg.example: disable mod_echo in the example config - file. mod_echo is mainly a development/test module. - -2007-07-09 Mickael Remond - - * src/odbc/mssql.sql: Nickname cannot be null in rosterusers table - (MSSQL) - * src/odbc/mysql.sql: Likewise - * src/odbc/pg.sql: Likewise - -2007-06-29 Mickael Remond - - * src/ejabberd_config.erl: Normalize hostnames in config file. If mixed - case is used, the hostname will be now useable (EJAB-277). - * src/stringprep/stringprep_sup.erl: Likewise - * src/stringprep/Makefile.in: Likewise - * src/stringprep/Makefile.win32: Likewise - * src/ejabberd_app.erl: Likewise - -2007-06-28 Mickael Remond - - * src/ejabberd_auth_anonymous.erl: Do not purge non anonymous accounts - when using anonymous authentication with another type of auth. - - * src/ejabberd_service.erl: Added an option to disable from attribute - checks in packets coming from an external component (EJAB-275) - * doc/guide.tex: Likewise - - * doc/guide.tex: Documentation rework started (EJAB-272) - * doc/introduction.tex: Likewise - -2007-06-28 Christophe Romain - - * src/web/ejabberd_web_admin.erl: corrects (EJAB-273), - remove obsolete OnlineUsers calculation - -2007-06-26 Alexey Shchepin - - * src/mod_muc/mod_muc_room.erl: Include in MUC invitations - for older clients (thanks to Michael Scherer) - -2007-06-25 Mickael Remond - - * doc/guide.tex: Typos - - * src/mod_muc/mod_muc_room.erl: New anti-abuse options: - min_presence_interval and min_message_interval - * doc/guide.tex: Likewise - - * doc/guide.tex: Documentation improvements on watchdog - - * doc/guide.tex: No need to escape underscore in Latex verbatim - sections - - * doc/guide.tex: Watchdog alert documentation - * src/ejabberd.cfg.example: Likewise - -2007-06-22 Alexey Shchepin - - * src/mod_irc/mod_irc.erl: Added an option for default IRC - encoding (thanks to Badlop) (EJAB-452) - * doc/guide.tex: Updated - - * src/mod_disco.erl: Don't override accumulated value in - get_local_identity/5 (thanks to Magnus Henoch and Badlop) - - * src/web/ejabberd_web_admin.erl: Added links to server and - virtual host homes (thanks to Badlop) - -2007-06-20 Mickael Remond - - * src/mod_muc/mod_muc_room.erl: It is now possible to limit who is - allowed to create persistent MUC rooms (Thanks to Badlop) (EJAB-257) - * src/mod_muc/mod_muc.erl: Likewise - * doc/guide.tex: Likewise - * src/ejabberd.cfg.example: Likewise - -2007-06-18 Mickael Remond - - * src/odbc/odbc_queries.erl: Added missing users_number/1 for MSSQL - (EJAB-239). - -2007-06-12 Alexey Shchepin - - * src/mod_roster_odbc.erl: Fixed typo - -2007-06-10 Alexey Shchepin - - * src/web/ejabberd_web_admin.erl: Show IP address of connected - resources on user info page (thanks to Oleg Palij) - -2007-06-07 Alexey Shchepin - - * src/ejabberd_config.erl: Fixed "language" option processing - (thanks to Badlop) - - * src/msgs/zh.msg: Updated (thanks to Shelley Shyan) - - * src/msgs/ca.msg: New Catalan translation (thanks to Vicent - Alberola) - -2007-06-05 Mickael Remond - - * src/xml.erl: Add new helper function get_subtag_cdata/2. - -2007-05-31 Alexey Shchepin - - * src/mod_vcard_odbc.erl: Fix for previous commit (thanks to - Badlop) - -2007-05-29 Mickael Remond - - * src/mod_vcard_odbc.erl: Make service description translatable in - discovery (EJAB-236) - * src/mod_vcard_ldap.erl: Likewise - - * src/Makefile.in: Added Dialyzer target (EJAB-189 - Thanks - to Geoff Cant) - * src/Makefile.in: Build XmppAddr.beam in a single pass - * src/mod_muc/Makefile.in: +debug_info directive support - * src/stringprep/Makefile.in: Likewise - * src/mod_irc/Makefile.in: Likewise - * src/web/Makefile.in: Likewise - * src/eldap/Makefile.in: Likewise - * src/mod_pubsub/Makefile.in: Likewise - * src/ejabberd_zlib/Makefile.in: Likewise - * src/mod_proxy65/Makefile.in: Likewise - * src/tls/Makefile.in: Likewise - * src/odbc/Makefile.in: Likewise - - * src/mod_vcard.erl: Make services description translatable in - discovery (EJAB-236 - thanks to Badlop) - * src/mod_muc/mod_muc.erl: Likewise - * src/mod_irc/mod_irc.erl: Likewise - * src/mod_pubsub/mod_pubsub.erl: Likewise - * src/mod_proxy65/mod_proxy65_service.erl: Likewise - * src/msgs/fr.msg: Added service description translation - -2007-05-21 Alexey Shchepin - - * src/ejabberdctl.template: Updated version of ejabberdctl (thanks - to Christophe Romain) - * tools/ejabberdctl: Likewise - * src/Makefile.in: Updated - - * src/ejabberd_sm.erl: Updated the session table to store - additional session info - * src/ejabberd_c2s.erl: Report IP address to ejabberd_sm (thanks - to Christophe Romain) - -2007-05-18 Alexey Shchepin - - * src/msgs/zh.msg: New chinese translation (thanks to Shelley - Shyan) - -2007-05-16 Alexey Shchepin - - * src/mod_muc/mod_muc_room.erl: Corrected error messages when - trying to join members-only room (thanks to Badlop) - - * src/ejabberd_c2s.erl: Added c2s_update_presence hook - -2007-05-14 Alexey Shchepin - - * src/ejd2odbc.erl: Bugfix (thanks to Badlop) - -2007-05-12 Alexey Shchepin - - * src/ejabberd_auth.erl: Added get_vh_registered_users_number/1 - function - * src/ejabberd_auth_odbc.erl: Likewise - * src/odbc/odbc_queries.erl: Added users_number/1 function - * src/ejabberd.cfg.example: Added an example for - pgsql_users_number_estimate option - * src/mod_stats.erl: Updated - * src/web/ejabberd_web_admin.erl: Likewise - - * src/ejabberd_auth_anonymous.erl: Added anonymous_purge_hook - (thanks to Christophe Romain and Mickael Remond) - * src/mod_offline.erl: Likewise - * src/mod_offline_odbc.erl: Likewise - * src/mod_roster.erl: Likewise - * src/mod_roster_odbc.erl: Likewise - -2007-05-09 Alexey Shchepin - - * src/mod_muc/mod_muc.erl: Bugfix - -2007-05-07 Alexey Shchepin - - * src/ejabberd_receiver.erl: Workaround for inet_drv bug - - * src/web/ejabberd_http_poll.erl: Added sockname/1 and peername/1 - stubs - - * src/web/ejabberd_http.hrl: Added "ip" field in the "request" - record (thanks to Jerome Sautret and Mickael Remond) - * src/web/ejabberd_http.erl: Likewise - -2007-05-03 Alexey Shchepin - - * src/ejabberd_sm.erl: Added set_presence_hook - * src/ejabberd_c2s.erl: Likewise - - * src/ejabberd_sm.erl: Added check for existence of incoming - subscription destination - - * src/msgs/it.msg: Added italian translation (thanks to Luca - Brivio) - - * src/mod_muc/mod_muc_room.erl: More accurate invitation errors - (thanks to Magnus Henoch) - -2007-04-26 Alexey Shchepin - - * src/mod_roster_odbc.erl: Don't deliver roster items in "None + - Pending In" state - * src/mod_roster.erl: Likewise - -2007-04-12 Alexey Shchepin - - * src/ejabberd_socket.erl: Added API for monitoring socket - processes - * src/ejabberd_frontend_socket.erl: Likewise - * src/ejabberd_c2s.erl: Added socket monitoring - - * src/mod_muc/mod_muc_room.erl: Fixed the stop reason for the - destroy event - -2007-04-09 Alexey Shchepin - - * src/ejabberd_sm.erl: Minor optimisation - - * src/ejabberd_system_monitor.erl: Experimental watchdog - * src/ejabberd_sup.erl: Likewise - * src/ejabberd_config.erl: Likewise - -2007-03-22 Mickael Remond - - * src/guide.tex: Fixed typo. - -2007-03-22 Alexey Shchepin - - * src/mod_muc/mod_muc.erl: Better behaviour under high load - -2007-03-18 Alexey Shchepin - - * src/ejabberd_s2s.erl: Don't bounce packets with "error" and - "result" type - - * src/ejabberd_s2s.erl: Fixed spelling - - * src/ejabberd_s2s.erl: Don't start s2s process for existing - connection in case of race condition - -2007-03-13 Alexey Shchepin - - * src/ejabberd_service.erl: Added shaper_rule option, changed - service connection log message - -2007-03-13 Mickael Remond - - * src/ejabberd_service.erl: Add extra info in the log about which - components is connected and which Erlang process is handling - it. This is usefull in context where many types of components are - used (Thanks to Jerome Sautret) (EJAB-211). - -2007-03-10 Mickael Remond - - * src/web/ejabberd_http.erl: Support for binaries in ejabberd HTTP - server (Thanks to Massimiliano Mirra) (EJAB-197). - - * src/configure.ac: autoconf improvements (thanks to Tony Finch) - (EJAB-204). - * src/aclocal.m4: Likewise. - - * src/odbc/ejabberd_odbc.erl: ejabberd admin can now choose the - relational database port to use from ejabberd configuration file - (EJAB-195). - * src/doc/guide.tex: Likewise. - -2007-03-02 Mickael Remond - - * src/mod_muc/mod_muc_log.erl: Fix wrong return on check access - log. - -2007-03-01 Alexey Shchepin - - * src/msgs/ru.msg: Updated (thanks to Sergei Golovan) - * src/msgs/uk.msg: Likewise - -2007-02-22 Alexey Shchepin - - * src/mod_pubsub/mod_pubsub.erl: Bugfix - - * src/mod_proxy65/mod_proxy65_sm.erl: Cluster support (thanks to - Evgeniy Khramtsov) - - * src/mod_proxy65/mod_proxy65_stream.erl: Code cleanup (thanks to - Evgeniy Khramtsov) - - * src/mod_proxy65/mod_proxy65.hrl: Fixed typo (thanks to Evgeniy - Khramtsov) - -2007-02-20 Alexey Shchepin - - * src/ejabberd_c2s.erl: Init shaper with a default value first - after stream opening - - * src/ejabberd_c2s.erl: Log failed SASL login attempts - * src/cyrsasl.erl: Updated API - * src/cyrsasl_plain.erl: Likewise - * src/cyrsasl_digest.erl: Likewise - -2007-02-19 Mickael Remond - - * src/mod_muc/mod_muc_room.erl: Added an option set affiliations. - - * doc/api/*: Added Erlang documentation generation script - (EJAB-188). - * doc/version.tex: Updated. - * src/ejabberd.app: Updated. - - * src/odbc/pg.sql: last table, state column cannot be NULL - (EJAB-191). - * src/odbc/mysql.sql: likewise. - * src/odbc/mssql.sql: likewise. - - * src/ejabberd_auth_ldap.erl: prevent anonymous bind on LDAP - servers as ejabberd is providing other anonymous authentication - mechanism (EJAB-190). - - * src/cyrsasl_plain.erl: bad-auth error code replaced by - not-authorized (EJAB-187). - - * src/aclocal.m4: configure --with-erlang option is now working - (Thanks to Jerome Sautret) (EJAB-186). - - * src/mod_muc/mod_muc_log.erl: Spam prevention: The default - behaviour is now to use the nofollow rel attributes for links that - are submitted by users (EJAB-185). - * doc/guide.tex: Likewise. - - * src/mod_muc/mod_muc_room.erl: API improvement: Implementation of - an event to destroy MUC room from an external application (Thanks - to Massimiliano Mirra) (EJAB-184). - -2007-02-18 Alexey Shchepin - - * src/ejabberd_s2s.erl: Confirm to RFC3920 section 10.3 (thanks to - Jerome Sautret) - -2007-02-18 Mickael Remond - - * src/mod_muc/mod_muc.erl: Node now try to clean its own online room - when restarting (EJAB-182). - -2007-02-13 Alexey Shchepin - - * src/mod_muc/mod_muc.erl: Clean online room table on cluster node - restart - -2007-02-13 Mickael Remond - - * src/ejabberd_auth_ldap.erl: Added ldap_local_filter option. This - option provide an optimisation to reduce LDAP directory load when - using attribute-based filters. - -2007-02-04 Alexey Shchepin - - * src/web/ejabberd_http.erl: Added separate version of - element_to_string for HTML encoding - * src/xml.erl: Reverted previous change - -2007-02-04 Mickael Remond - - * src/xml.erl: ' entity replaced by ' Should work more - universaly (in HTML and XML). - -2007-01-30 Alexey Shchepin - - * src/mod_roster_odbc.erl: Bugfix (thanks to asdx - ) - * src/ejd2odbc.erl: Likewise - -2007-01-27 Mickael Remond - - * src/mod_vcard_ldap.erl: LDAP server pool support (thanks to Evgeniy - Khramtsov) - * src/eldap/Makefile.in: Likewise - * src/ejabberd_auth_ldap.erl: Likewise - * src/eldap_pool.erl: Likewise - - * src/eldap/eldap_utils.erl: Implemented LDAP domain substitution - - * src/eldap/eldap.erl: Implemented queue to avoid bind deadlock under - heavy load (thanks to Evgeniy Khramtsov) - * src/eldap/eldap.hrl: Likewise - -2007-01-26 Mickael Remond - - * doc/guide.tex: Fixed typos in labels. - -2007-01-25 Mickael Remond - - * src/eldap/Makefile.win32: fix build error on Windows. - -2007-01-25 Alexey Shchepin - - * src/web/*: Plugin architecture for HTTP modules (thanks to - Massimiliano Mirra) - -2007-01-24 Mickael Remond - - * doc/guide.tex: Documentation for the - domain_balancing_component_number option. - - * doc/guide.tex: Documentation for domain balancing. - - * doc/guide.tex: mod_muc now supports cluster. - - * doc/guide.tex: Updated the max_user_sessions section. - -2007-01-19 Alexey Shchepin - - * src/mod_muc/mod_muc.erl: Now mod_muc can be distributed on - several nodes - * src/mod_muc/mod_muc_room.erl: Likewise - - * src/ejabberd_router.erl: Added bare_source and bare_destination - service balancing options and domain_balancing_component_number - option for specifying the number of connected components for the - domain - * src/ejabberd_config.erl: Likewise - -2007-01-11 Mickael Remond - - * doc/guide.tex: Latex / Hevea related improvements for - documentation generation (thanks to Sander Devrieze). - * doc/introduction.tex: Likewise. - * doc/dev.tex: Likewise. - * doc/features.tex: Likewise. - -2007-01-08 Christophe Romain - - * src/mod_pubsub/mod_pubsub.erl: add presence_based_delivery - cluster support - -2007-01-05 Alexey Shchepin - - * src/mod_muc/mod_muc_log.erl: Remove 'right-to-left override' - unicode character (thanks to Badlop) - -2006-12-31 Alexey Shchepin - - * src/ejabberd_s2s_out.erl: Bugfix - -2006-12-21 Mickael Remond - - * src/mod_private_odbc: Bugfix: an internal error was returned - instead of the actual private data. This is now working as expected. - -2006-12-21 Alexey Shchepin - - * src/ejd2odbc.erl: Bugfix - -2006-12-16 Mickael Remond - - * README: Added this file as a quickstart guide. - -2006-12-15 Mickael Remond - - * src/mod_echo.erl: The mod_echo can now be stopped without errors. - This is not a major issue, but can mislead other developers learning - from this example and test module (Thanks to Magnus Henoch). - - * TODO: Removed. The roadmap is managed on: - http://support.process-one.net/browse/EJAB - - * src/ejabberd_ctl.erl: Bugfix: Now display all register commands for a - vhost and not only one (Thanks to Badlop). - * src/ejabberd.cfg.example: Fixed typo. - -2006-12-14 Mickael Remond - - * src/ejabberd_config.erl: Added loglevel option. It is now possible to - configure ejabberd dynamic loglevel from the config file. - -2006-12-08 Alexey Shchepin - - * src/ejabberd_receiver.erl: Bugfix - - * src/ejabberd_c2s.erl: Bugfix - -2006-12-05 Alexey Shchepin - - * src/mod_roster_odbc.erl: Better error handling - - * src/web/ejabberd_http_poll.erl: Minor fix - -2006-12-04 Mickael Remond - - * src/ejabberd_loglevel.erl: Preliminary dynamic loglevel support. - Debug can be enabled with the command "ejabberd_loglevel:set(5)". - * src/ejabberd_app.erl: Likewise. - * src/ejabberd.hrl: Likewise (More log levels are now supported). - * src/ram_file_io_server.erl: Likewise (Needed to dynamically - recompile the error logger). - -2006-12-01 Alexey Shchepin - - * src/ejabberd_receiver.erl: Bugfix - -2006-11-30 Mickael Remond - - * src/mod_proxy65/mod_proxy65_services.erl: We now try to get the - address of the component (if registered in DNS) or otherwise get the - IP of the XMPP domain. - -2006-11-29 Mickael Remond - - * src/ejabberd_logger_h.erl: Removed useless comments. - -2006-11-28 Mickael Remond - - * src/mod_proxy65/mod_proxy65_services.erl: Now using all interfaces as - default value for proxy listen parameter. - - * src/ejabberd_c2s.erl: User login in with negative priority must not - receive offline messages (Thanks to Badlop). - -2006-11-24 Mickael Remond - - * doc/guide.tex: Fixed regexp ACL configuration examples - (Thanks to Massimiliano Mirra). - - * src/muc/mod_muc_room.erl: API improvement. It is now possible - to read and write a room config from a developer module (Thanks - to Massimiliano Mirra). - -2006-11-23 Alexey Shchepin - - * src/eldap/eldap.erl: Bugfix (thanks to Evgeniy Khramtsov) - - * src/ejabberd_sm.erl: The max_user_sessions option is now - configured via access rule - * src/ejabberd.cfg.example: Likewise - -2006-11-20 Mickael Remond - - * src/ejd2odbc.erl: Copy mod_private data from Mnesia to - relational database. - * src/odbc/odbc_queries.erl: Refactoring. - * src/odbc/mssql.sql: Likewise. - * doc/guide.tex: Doc updated to mention mod_private_odbc. - - * src/odbc/mysql.sql: Started integration of mod_privacy_odbc for - MySQL and MSSQL. - * src/odbc/mssql.sql: Likewise. - -2006-11-15 Mickael Remond - - * src/mod_muc/mod_muc_room.erl: API improvement: It is now easier to - extract data from the MUC room process. - -2006-11-07 Alexey Shchepin - - * src/ejabberd_node_groups.erl: Support for node tagging - * src/ejabberd_sup.erl: Likewise - * src/ejabberd_frontend_socket.erl: Use node tags to determine - backend nodes - * src/ejabberd_config.erl: Added node_type and cluster_nodes - options - * src/ejabberd_app.erl: Establish connections to the nodes from - the cluster_nodes option - - * src/ejabberd_router.erl: Added balancing method option - * src/ejabberd_config.erl: Likewise - -2006-11-05 Mickael Remond - - * src/mod_private_odbc.erl: Support for MySQL and MSSQL. - * src/odbc/odbc_queries.erl: Likewise. - * src/odbc/mysql.sql: Likewise. - * src/odbc/mssql.sql: Likewise. - -2006-11-04 Mickael Remond - - * src/eldap_utils.erl: Fixed missing export. - - * src/odbc/pg.sql: Database scripts consistency. - * src/odbc/mysql.sql: Likewise. - * src/odbc/mssql.sql: Likewise. - - * src/odbc/mysql: Database creation script should now be compliant - with MySQL 4.0.x. - -2006-10-29 Mickael Remond - - * doc/guide.tex: XEP-0065 proxy documentation (thanks to Evgeniy - Khramtsov). - -2006-10-28 Mickael Remond - - * src/ejabberd.cfg.example: Changed the anonymous example a bit to - work in most cases. - * doc/guide.tex: Likewise. - -2006-10-28 Alexey Shchepin - - * src/mod_proxy65/: XEP-0065 proxy (thanks to Evgeniy Khramtsov) - * src/Makefile.win32: Likewise - * src/Makefile.in: Likewise - * src/configure.ac: Likewise - * src/jlib.hrl: Likewise - * src/ejabberd.hrl: Added the ejabberd URL - -2006-10-27 Mickael Remond - - * src/guide.tex: Fixed typos. - -2006-10-25 Mickael Remond - - * src/ejabberd_rdbms.erl: It is now possible to use ldap or internal - authentication with some other modules using relationnal database - storage. Refactored relational databases connections initialisation. - * src/ejabberd_auth_odbc.erl: Likewise. odbc supervisor startup is now - delegated to the ejabberd rdbms module. - * src/ejabberd_app.erl: Likewise. - -2006-10-17 Alexey Shchepin - - * src/ejabberd_socket.erl: Added sockname/1 and peername/1 - functions - * src/ejabberd_frontend_socket.erl: Likewise - * src/tls/tls.erl: Likewise - * src/ejabberd_zlib/ejabberd_zlib.erl: Likewise - - * src/mod_private_odbc.erl: Private storage support using odbc - * src/odbc/pg.sql: Likewise - -1999-11-30 Mickael Remond - - * src/ejabberd_auth_ldap.erl: LDAP authentication now allows to - match on several alternative attributes (thanks to Evgeniy - Khramtsov). - * src/mod_vcard_ldap.erl: Likewise. - * doc/guide.tex: Updated. - * eldap_utils.erl: Refactoring. - * src/eldap/Makefile.in: Likewise. - -2006-10-09 Alexey Shchepin - - * src/mod_privacy_odbc.erl: Privacy rules support using odbc - * src/odbc/pg.sql: Likewise - -2006-10-06 Alexey Shchepin - - * src/web/ejabberd_http_poll.erl: Bugfix - -2006-10-05 Alexey Shchepin - - * src/mod_privacy.erl: Use hooks instead of direct function calls - * src/ejabberd_c2s.erl: Updated - -2006-10-01 Alexey Shchepin - - * src/shaper.erl: Bugfix - * src/ejabberd_config.erl: Likewise - - * src/ejabberd_frontend_socket.erl: Support for frontend - connection manager - * src/ejabberd_c2s.erl: Likewise - * src/ejabberd_listener.erl: Likewise - * src/ejabberd_s2s_in.erl: Likewise - * src/ejabberd_service.erl: Likewise - * src/ejabberd_socket.erl: Likewise - * src/web/ejabberd_http_poll.erl: Likewise - -2006-09-27 Mickael Remond - - * doc/release_notes_1.1.2.txt: Minor fixes. - - * doc/guide.tex: Fixed Latexish typos. - -2006-09-26 Mickael Remond - - * doc/release_notes_1.1.2.txt: Draft release notes. - - * src/msgs/pl.msg: Updated (thanks to Andrzej Smyk). - - * src/ejabberd_s2s.erl: More precise message for the new s2s - statistic command. - - * src/mod_muc/mod_muc_room.erl: Minor english update. - * src/msgs/pl.msg: Likewise. - * src/msgs/uk.msg: Likewise. - * src/msgs/pt-br.msg: Likewise. - * src/msgs/cs.msg: Likewise. - * src/msgs/ru.msg: Likewise. - * src/msgs/es.msg: Likewise. - * src/msgs/fr.msg: Likewise. - * src/msgs/de.msg: Likewise. - * src/msgs/nl.msg: Likewise. - - * src/msgs/pt-br.msg: Updated Brazilian translation (thanks to - Renato Botelho) and clean-up. - -2006-09-25 Mickael Remond - - * src/msgs/de.msg: Updated German translation (thanks to Nikolaus - Polak). - - * src/ejabberd.app: Version update for ejabberd 1.1.2. - - * src/msgs/pl.msg: Updated Polish translation (thanks to Zbyszek - Zolkiewski). - - * src/msgs/de.msg: Updated German translation (thanks to Marvin - Preuss). - - * src/msgs/nl.msg: Updated Dutch translation (thanks to Sander - Devrieze). - - * src/msgs/cs.msg: Updated Czech translation and removed unused - strings. - - * doc/introduction.tex: Minor doc updates for release 1.1.2. - -2006-09-25 Alexey Shchepin - - * src/ejabberd_s2s.erl: Added incoming-s2s-number and - outgoing-s2s-number ejabberdctl commands - - * src/ejabberd_socket.erl: Support for non-xml sockets - * src/ejabberd_c2s.erl: Likewise - * src/ejabberd_s2s_in.erl: Likewise - * src/ejabberd_service.erl: Likewise - * src/web/ejabberd_http.erl: Likewise - -2006-09-24 Mickael Remond - - * src/msgs/es.msg: Updated Spanish translation (thanks to Badlop). - - * src/mod_muc/mod_muc_room.erl: Strings update (thanks to Sergei - Golovan). - * src/msgs/ru.msg: Updated Russian translation (thanks to Sergei - Golovan). - * src/msgs/uk.msg: Updated Ukrainian translation (thanks to Sergei - Golovan). - * src/msgs/fr.msg: Update French translation. - - * src/doc/guide.html: Minor W3C compliance fix in an Hevea - generated URL. - - * src/doc/features.html: Added to be consistent (guide.html is in - the repository to make Latex optional, but still allow access to - the doc). - -2006-09-23 Mickael Remond - - * src/ejabberd.hrl: Updated to version 1.1.2 - -2006-09-23 Alexey Shchepin - - * src/eldap/eldap.erl: Enable the keepalive socket option (thanks - to Evgeniy Khramtsov) - - * src/ejabberd_auth_ldap.erl: Now uses two LDAP connections - (thanks to Evgeniy Khramtsov) - - * src/eldap/eldap_filter.erl: Bugfix (thanks to Evgeniy Khramtsov) - * src/mod_vcard_ldap.erl: Likewise - -2006-09-22 Mickael Remond - - * src/msgs/cs.msg: Added Czech translation (thanks to Milos Svasek). - - * src/mod_muc/mod_muc.erl: Component name is now more user friendly - (thanks to Badlop). - * src/mod_irc/mod_irc.erl: Likewise. - * src/mod_pubsub/mod_pubsub.erl: Likewise. - - * src/msgs/fr.msg: updated French translation. - - * doc/guide.tex: Large improvements for ejabberd 1.1.2 (thanks to - Sander Devrieze) - * doc/version.tex: Likewise. - * doc/features.tex: Likewise. - * doc/Makefile: Likewise. - * doc/dev.tex: Likewise. - -2006-09-14 Mickael Remond - - * doc/guide.tex: Minor fix on index generation. - -2006-09-14 Alexey Shchepin - - * doc/guide.tex: Updated (thanks to Evgeniy Khramtsov) - - * src/ejabberd_auth_ldap.erl: Better LDAP support (thanks to - Evgeniy Khramtsov) - * src/mod_vcard_ldap.erl: Likewise - * src/eldap/eldap_filter.erl: Likewise - -2006-09-11 Mickael Remond - - * src/odbc/mssql.sql: Removed unused fields. - -2006-09-10 Alexey Shchepin - - * src/ejd2odbc.erl: Updated - - * src/mod_muc/mod_muc_log.erl: Fixed html special characters - escaping, added new image buttons, chatroom titles now point to - xmpp: URIs (thanks to Badlop) - - * src/ejabberd_listener.erl: Bugfix - -2006-09-05 Mickael Remond - - * src/mod_muc/mod_muc.erl: It is now possible to configure the MUC room - history feature. A new option has been added in ejabberd muc module - configuration (history_size) to define the size of the history. 0 is - used to disable the feature. - * src/mod_muc/mod_muc_room.erl: Likewise. - * doc/guide.tex: Likewise. - -2006-09-05 Alexey Shchepin - - * src/ejabberd_socket.erl: All XML socket operations moved here - * src/ejabberd_listener.erl: Updated - * src/ejabberd_receiver.erl: Likewise - * src/ejabberd_c2s.erl: Likewise - * src/ejabberd_s2s_in.erl: Likewise - * src/ejabberd_s2s_out.erl: Likewise - * src/ejabberd_service.erl: Likewise - - * src/mod_shared_roster.erl: Bugfix - - * src/mod_roster_odbc.erl: Bugfix - -2006-09-03 Mickael Remond - - * src/odbc/odbc_queries.erl: Support for Microsoft SQL Server as a - database backend (via ODBC). - * src/odbc/ejabberd_odbc.erl: Likewise. - * src/odbc/mssql.sql: Likewise. - * src/odbc/Makefile.in: Likewise. - * src/ejabberd_auth_odbc.erl: Likewise. - * src/mod_offline_odbc.erl: Likewise. - * src/mod_roster_odbc.erl: Likewise. - * src/mod_last_odbc.erl: Likewise. - * src/configure.ac: Likewise - * doc/guide.tex: Likewise. - * doc/introduction.tex: Likewise. - * src/odbc/pg.sql: Minor fix. - -2006-08-28 Mickael Remond - - * Makefile.in: Fix for MacOSX compilation. - * ejabberd_zlib/Makefile.in: Likewise. - * mod_irc/Makefile.in: Likewise. - * stringprep/Makefile.in: Likewise. - * tls/Makefile.in: Likewise. - - * src/ejabberd.app: Updated to the current version. - -2006-08-27 Alexey Shchepin - - * src/mod_muc/mod_muc_room.erl: Fixed logging configuring - permission check - -2006-08-14 Alexey Shchepin - - * src/ejabberd_router.erl: Now filter_packet hook works in - 'global' context - -2006-08-04 Alexey Shchepin - - * src/tls/tls_drv.c: Report OpenSSL error messages (thanks to - Magnus Henoch) - - * src/mod_muc/mod_muc_room.erl: Use standardized MUC room - configuration fields (thanks to Magnus Henoch and Andy Turner) - -2006-08-02 Alexey Shchepin - - * src/mod_roster_odbc.erl: Bugfix - -2006-07-28 Mickael Remond - - * src/ejabberd_c2s.erl: Bugfix: added a missing catch and fixed the - error code used on unknown namespace. - * src/ejabberd_s2s_out.erl: Improved s2s connection negociation - (dialback namespace usage) when using tls. - * src/ejabberd_sm.erl: Fixed the error code used on unknown namespace. - * src/mod_register.erl: ejabberd now sends iq result and stream end on - user remove. - -2006-07-16 Mickael Remond - - * src/acl.erl: The server does not crash anymore on wrong acl rule. Add - rule error message in log file. - -2006-07-07 Mickael Remond - - * src/web/ejabberd_web_admin.erl: User creation form now creates the - user for the current virual host only and does not require to type - the hostname. - * src/jlib.erl: String to JID conversion now returns an error if the - JID string contains two arobases. - -2006-07-06 Mickael Remond - - * src/mod_shared_roster.erl: Shared roster entries can now be moved or - rename from a client without breaking current presence status. - * src/mod_roster.erl: Likewise. - * src/mod_roster_odbc.erl: Likewise. - - * src/mod_muc/mod_muc_room.erl: Fixed the order in which room presence - packets are sent (First existing presence to new occupant, then new - occupant presence to existing users. - -2006-07-05 Mickael Remond - - * src/web/ejabberd_web_admin.erl: More flexible parsing the shared - roster members list from the configuration form. - * src/mod_shared_roster.erl: Deletng a shared roster group now - correctly deletes its user entries. - - * src/mod_shared_roster.erl: The logged user (self) is now removed from - the shared roster list. - * src/ejabberd_auth.erl: Better handling of errors when the server for - authentication is unknown. - -2006-06-19 Alexey Shchepin - - * src/ejabberd_s2s_in.erl: Removed needless check for xmlns:db - when starttls is enabled - -2006-06-15 Mickael Remond - - * src/web/ejabberd_http_poll.erl: Bugfix: using tuple instead of a Pid - to send Erlang messages in a rarely used case. - -2006-06-13 Mickael Remond - - * src/ejabberd_auth.erl: Fixed broken multiple connection with - anonymous login problem. - * src/ejabberd_auth_anonymous.erl: Likewise. - -2006-06-07 Mickael Remond - - * src/mod_pubsub/mod_pubsub.erl: Support for pubsub node creation - ACL. It is now possible to limit the node creation rights using an - ACL from ejabberd config file (Thanks to Christophe Romain). - * doc/guide.tex: Likewise. - * src/ejabberd.cfg.example. - - * src/mod_pubsub/mod_pubsub.erl: Discovery query on an item does - no more return an "item not found error". Discovery stop correctly - at the item level (Thanks to Christophe Romain). - -2006-06-02 Mickael Remond - - * src/web/ejabberd_http_poll.erl: Messages polled between the - the last client request and the polling timeout were lost. Those - messages are now resent using ejabberd routing mechanisms. - - * src/web/ejabberd_http.erl: The web module now accepts HTTP - absolute URL (used behind a proxy). This apply to HTTP polling and - to the web interface (Thanks to Jean-Sebastien Pedron). - -2006-05-29 Mickael Remond - - * src/mod_roster.erl: According to RFC3921 section 9.2, outbound - subscribe presence packets must be sent, even if the user has already - asked for subcription previously (subscription: none and pending: out). - The mod_roster now conforms to this behaviour. - * src/mod_roster_odbc.erl: Likewise. - -2006-05-27 Mickael Remond - - * src/configure.ac: Added an optional check for krb5.h in - configure. ejabberd can now be build directly on RedHat and - OpenBSD. - -2006-05-27 Alexey Shchepin - - * src/msgs/sk.msg: Slovak translation (thanks to Juraj Michalek - and SkLUG) - -2006-05-26 Alexey Shchepin - - * src/odbc/pg.sql: Updated - - * src/mod_shared_roster.erl: Updated - - * src/ejabberd_sm.erl: Bugfix - - * src/mod_roster.erl: Bugfix - * src/mod_roster_odbc.erl: Likewise - -2006-05-23 Mickael Remond - - * src/mod_roster.erl: The subscribe request are now resend at login as - long as they have not been answered. mod_roster do no more depends on - mod_offline. - * src/ejabberd_sm.erl: Likewise. - * src/ejabberd_c2s.erl: Likewise. - * src/mod_roster_odbc.erl: Likewise (The ODBC/relational support has - not yet been tested). - * src/mod_roster.hrl: Likewise. - * src/mod_offline.erl: Likewise. - * src/mod_offline_odbc.erl: Likewise. - * odbc/pg.sql: Likewise. - * odbc/mysql.sql: Likewise. - -2006-05-22 Mickael Remond - - * src/ejabberd_sm.erl: The max_user_sessions has been moved to - host configuration. - * src/ejabberd.cfg.example: Likewise. - * doc/guide.tex: Likewise. - -2006-05-21 Mickael Remond - - * src/ejabberd_sm.erl: An option to limit the number of opened sessions - for a given user have been added. As a default, a given user can only - log in 10 times with different resources. After that, new connections - replace the older ones. - * src/ejabberd.cfg.example: Likewise. - * doc/guide.tex: Likewise. - -2006-05-15 Mickael Remond - - * src/web/ejabberd_http_poll.erl: Timeout disconnection were not - properly handled after "active once" migration. This is now fixed. - -2006-05-07 Mickael Remond - - * src/mod_configure.erl: Unknown tables or tables from now unused - modules are ignored during restore. The restore can now be performed in - such case. - * src/web/ejabberd_web_admin.erl: Likewise. - * src/ejabberd_admin.erl: Code refactoring. Common Mnesia database - restore function. - - * src/ejabberd_ctl.erl: Now prints a user-friendly when trying to - restore a backup from a non-existent file. - - * src/ejabberd_ctl.erl: Added a way to delete the older message - from the offline message table. This function is only available if - offline message queue is stored in Mnesia internal database. The - function delete_old_messages is not available in mod_offline_odbc. - -2006-05-01 Mickael Remond - - * src/ejabberd_ctl.erl: Unknown tables or tables from now unused - modules are ignored during restore. The restore can now be performed in - such case. - -2006-04-28 Mickael Remond - - * src/ejabberd.hrl: release 1.1.1 - * doc/version.tex: Likewise - * doc/guide.tex: Likewise - -2006-04-28 Alexey Shchepin - - * src/cyrsasl.erl: Bugfix: anonymous authentication was always - enabled - -2006-04-27 Mickael Remond - - * src/ejabberd_ctl.erl: The status now only returns "started" if - ejabberd is started and ready to accept requests. - -2006-04-24 Alexey Shchepin - - * doc/guide.tex: Added a documentation for max_stanza_size option - -2006-04-24 Mickael Remond - - * src/ejabberd.hrl: Updated for version 1.1.0. - -2006-04-23 Alexey Shchepin - - * src/configure: Removed '==' bashism (thanks to Magnus Henoch) - * src/aclocal.m4: Likewise - - * src/ejabberd_c2s.erl: Resend messages when leaving negative - presence state (thanks to Magnus Henoch) - -2006-04-23 Mickael Remond - - * src/msgs/fr.msg: Updated - * src/msgs/de.msg: Updated (thanks to Nikolaus Polak) - * src/ejabberd_sm.erl: Now delivering messages to all resources with - max equal priority when this priority is non-negative. - - * src/guide.tex: Added documentation for native database configuration. - -2006-04-22 Alexey Shchepin - - * src/msgs/pt-br.msg: Updated (thanks to Lucius Curado) - - * src/xml_stream.erl: Support for stanza size limit (thanks to - Igor Goryachev) - * src/ejabberd_receiver.erl: Likewise - * src/ejabberd_c2s.erl: Likewise - * src/ejabberd_s2s_in.erl: Likewise - * src/ejabberd.cfg.example: Updated - - * src/ejabberd_auth.erl: Fixed try_register/3 behaviour - -2006-04-20 Mickael Remond - - * src/ejabberd.cfg.example: Update of the example for anonymous. - Removed unnecessary parameter. - * src/ejabberd_auth_anonymous.erl: Removed unnecessary parameter / - bugfix. - * src/ejabberd_auth.erl: Bugfix: We now are forced to check is an - anonymous user is log under a given user name before trying to - register it. - * doc/guide.tex: Updated (SASL anonymous and anonymous login). - -2006-04-19 Alexey Shchepin - - * src/msgs/pl.msg: Updated (thanks to Andrzej Smyk) - -2006-04-13 Alexey Shchepin - - * src/xml_stream.erl: Cleanup - - * src/ejabberd_service.erl: Updated to use ejabberd_receiver - -2006-04-12 Alexey Shchepin - - * src/ejabberd_c2s.erl: Minor fix - - * src/ejabberd_c2s.erl: Bugfix (thanks to Sergei Golovan) - - * doc/guide.tex: Updated (thanks to Sergei Golovan) - - * src/msgs/nl.msg: Updated (thanks to Sander Devrieze) - -2006-04-11 Alexey Shchepin - - * src/msgs/es.msg: Updated (thanks to Badlop) - - * src/ejabberd.cfg.example: Updated (thanks to Badlop) - - * doc/guide.tex: Updated (thanks to Badlop) - -2006-04-07 Mickael Remond - - * src/mod_pubsub/mod_pubsub.erl: Fixed pubsub root node creation - (conflict error was send on node creation) - -2006-04-07 Alexey Shchepin - - * src/ejabberd_sm.erl: SASL Anonymous + Anonymous login support - (thanks to Mickael Remond and Magnus Henoch) - * src/ejabberd_c2s.erl: Likewise - * src/ejabberd_auth.erl: Likewise - * src/ejabberd_auth_anonymous.erl: Likewise - * src/cyrsasl.erl: Likewise - * src/cyrsasl_anonymous.erl: Likewise - * src/ejabberd.cfg.example: Likewise - -2006-04-06 Alexey Shchepin - - * src/expat_erl.c: Use binaries for CDATA - * src/xml.erl: Likewise - -2006-04-02 Alexey Shchepin - - * src/msgs/ru.msg: Updated (thanks to Sergei Golovan) - * src/msgs/uk.msg: Likewise - - * src/mod_configure.erl: Updated translation strings (thanks to - Sergei Golovan) - * src/web/ejabberd_web_admin.erl: Likewise - - * src/ejabberd_s2s_in.erl: Changed a path to PKIX includes (thanks - to Sergei Golovan) - -2006-04-01 Mickael Remond - - * src/Makefile.in: Added an option to compile ejabberd with debug - print-out (make ejabberd_debug=true). - * src/ejabberd_c2s.erl: Added a new debug printout: We can now print - the XML packets send by the server. - -2006-03-31 Alexey Shchepin - - * src/ejabberd_c2s.erl: Bugfix - -2006-03-25 Alexey Shchepin - - * src/ejabberd_c2s.erl: Enable zlib only over TCP - -2006-03-18 Alexey Shchepin - - * src/ejabberd_c2s.erl: Bugfix (thanks to Sergei Golovan) - -2006-03-17 Alexey Shchepin - - * src/mod_privacy.erl: Fixed privacy list pushing (thanks to - Sergei Golovan) - * src/ejabberd_c2s.erl: Likewise - -2006-03-16 Mickael Remond - - * src/ejabberd_sm.erl: Remove unnecessary use delete_object, which can, - in some context break indexes, when used on non bag table. - -2006-03-16 Alexey Shchepin - - * src/ejabberd_c2s.erl: Bugfix - -2006-03-14 Alexey Shchepin - - * src/xml_stream.erl: Added catching of gen_fsm:send_event errors - - * src/ejabberd_s2s_out.erl: Better support for multiple SRV - records (thanks to Sergei Golovan) - - * src/mod_muc/mod_muc_log.erl: Support for chatroom logging - (thanks to Badlop) - * src/mod_muc/mod_muc_room.erl: Likewise - * src/mod_muc/Makefile.in: Likewise - * src/mod_muc/Makefile.win32: Likewise - -2006-03-11 Alexey Shchepin - - * src/gen_iq_handler.erl: Added support for {queues, N} IQ handler - type - -2006-03-06 Alexey Shchepin - - * src/mod_muc/mod_muc_room.erl: Bugfix - -2006-03-05 Alexey Shchepin - - * src/ejabberd_c2s.erl: Bugfix - - * src/ejabberd_auth_odbc.erl: Bugfix - -2006-03-04 Mickael Remond - - * src/ejabberd_logger_h.erl: reopen-log function now rename the log - file if it has not been already renamed by a logrotate process. This - change allow ejabberd administrators to rotate log files on Windows - (EJAB-52). - -2006-02-27 Alexey Shchepin - - * src/web/ejabberd_web_admin.erl: Added a interface for node - updating - * src/ejabberd_update.erl: Added function update_info/0 - -2006-02-25 Alexey Shchepin - - * src/msgs/ru.msg: Updated (thanks to Sergei Golovan) - * src/msgs/uk.msg: Likewise - - * contrib/extract_translations/extract_translations.erl: Minor - update (thanks to Sergei Golovan) - - * src/ejabberd_zlib/Makefile.win32: Zlib support for Windows build - (thanks to Sergei Golovan) - * src/Makefile.win32: Likewise - * src/configure.erl: Likewise - -2006-02-20 Alexey Shchepin - - * src/ejabberd_ctl.erl: Added API for virtual host specific - commands, removed registered-users command - * src/ejabberd_auth.erl: Added processing of registered-users - command - * src/ejabberd_auth_internal.erl: Likewise - * src/ejabberd_auth_ldap.erl: Likewise - * src/ejabberd_auth_odbc.erl: Likewise - * src/ejabberd_app.erl: Added inititalization of ejabberd_ctl - * src/ejabberd_sm.erl: Minor update - -2006-02-18 Alexey Shchepin - - * src/mod_irc/mod_irc_connection.erl: Added handling for "%", "&" - and "~" prefixes in IRC nicknames (thanks to Vladimir Kulev) - - * src/mod_irc/mod_irc_connection.erl: Added /msg and /ctcp - commands, improved handling of channel topic and kick, mirc colors - now filtered, other minor improvements (thanks to Oleg V. Motienko - and Magnus Henoch) - - * src/mod_configure.erl: Improved strings (thanks to Sander - Devrieze) - * src/mod_vcard.erl: Likewise - * src/mod_vcard_ldap.erl: Likewise - * src/mod_vcard_odbc.erl: Likewise - * src/web/ejabberd_web_admin.erl: Likewise - -2006-02-15 Alexey Shchepin - - * src/mod_service_log.erl: Bugfix (thanks to Badlop) - - * src/jd2ejd.erl: Use mod_vcard_odbc if it is loaded (thanks to - Tomasz Sterna) - -2006-02-14 Alexey Shchepin - - * src/ejabberd_sm.erl: Added a few ejabberdctl commands - - * src/ejabberd_ctl.erl: New interface for command registration - -2006-02-13 Alexey Shchepin - - * src/ejabberd_ctl.erl: Partially rewritten - * src/ejabberd_ctl.hrl: Definitions of exit status codes moved - here - -2006-02-12 Alexey Shchepin - - * src/mod_roster_odbc.erl: Bugfix - -2006-02-08 Alexey Shchepin - - * src/odbc/ejabberd_odbc.erl: Reconnect on ODBC connection closing - -2006-02-07 Mickael Remond - - * src/ejabberd_auth.erl: plugin authentication modules can now - be used in the configuration file: {auth_method, module} will now - use the module ejabberd_auth_module.erl for authentication. - -2006-02-05 Alexey Shchepin - - * src/mod_muc/mod_muc_room.erl: Kick non-members when room - reconfigured to be member-only or when membership is revoked in - member-only room, allowed "true" and "false" in x:data forms - (thanks to Sergei Golovan) - - * src/mod_configure.erl: Added "Host" parameter to get_form and - set_form functions (thanks to Sergei Golovan) - - * src/ejabberd_s2s_out.erl: Bugfix - - * src/msgs/es.msg: Updated (thanks to Badlop) - - * src/web/ejabberd_web.erl: Bugfix (thanks to Badlop) - - * src/mod_irc/mod_irc.erl: Updated copyright dates - * src/mod_muc/mod_muc.erl: Likewise - * src/mod_pubsub/mod_pubsub.erl: Likewise - * src/mod_vcard.erl: Likewise - * src/mod_vcard_ldap.erl: Likewise - * src/mod_vcard_odbc.erl: Likewise - * src/web/ejabberd_web_admin.erl: Likewise - -2006-02-03 Alexey Shchepin - - * src/ejabberd_auth_odbc.erl: Added ejabberd_odbc_sup to ejabberd - supervision tree - - * src/web/ejabberd_http.erl: Authentication check moved to - ejabberd_web.erl - * src/web/ejabberd_web.erl: Likewise - - * src/web/Makefile.in: Added ejabberd_http.hrl dependency - - * src/web/ejabberd_http_poll.erl: Updated to use {active, once} - socket mode - - * src/mod_irc/mod_irc.erl: Updated to use gen_server behaviour and - ejabberd supervision tree - * src/mod_irc/mod_irc_connection.erl: Likewise - -2006-02-02 Mickael Remond - - * src/configure.ac: --prefix option can now override the default - install dir - * src/configure: Likewise - * src/Makefile.in: Likewise - -2006-02-02 Alexey Shchepin - - * src/mod_pubsub/mod_pubsub.erl: Updated to use gen_server - behaviour and ejabberd supervision tree - * src/mod_echo.erl: Likewise - -2006-02-01 Alexey Shchepin - - * src/mod_muc/mod_muc.erl: Added a supervisor for conference room - processes - * src/mod_muc/mod_muc_room.erl: Likewise - -2006-01-29 Alexey Shchepin - - * src/odbc/pg.sql: Fixed syntax error - -2006-01-28 Alexey Shchepin - - * src/ejabberd_router.erl: Updated to use gen_server behaviour - * src/ejabberd_sm.erl: Likewise - * src/ejabberd_s2s.erl: Likewise - * src/gen_iq_handler.erl: Likewise - - * src/ejabberd_sup.erl: Added supervisor for ejabberd_receiver - * src/ejabberd_receiver.erl: Updated - -2006-01-27 Alexey Shchepin - - * src/ejabberd_update.erl: Support for run-time ejabberd updating - (not completed) - * src/ejabberd_c2s.erl: Added 'update_info' module attribute for - testing ejabberd_update - -2006-01-25 Alexey Shchepin - - * src/ejabberd_c2s.erl: Remove top-level xmlns from incoming - stanzas - * src/ejabberd_s2s_in.erl: Likewise - * src/ejabberd_service.erl: Likewise - - * src/ejabberd_c2s.erl: Better error handling for stream - compression support (thanks to Sergei Golovan) - -2006-01-24 Alexey Shchepin - - * src/mod_roster_odbc.erl: Bugfix - -2006-01-23 Alexey Shchepin - - * src/ejabberd_sm.erl: Partially rewritten to work more - efficiently and avoid race conditions - * src/ejabberd_c2s.erl: Likewise - -2006-01-21 Alexey Shchepin - - * src/mod_irc/mod_irc_connection.erl: Cleanup - -2006-01-20 Mickael Remond - - * src/ejabberd_receiver.erl: Added new debugging trace: It is now - possible to dump the XML stream received from a client (usefull for - client debugging). - -2006-01-19 Alexey Shchepin - - * src/aclocal.m4: Updated for zlib support - * src/configure.ac: Likewise - - * src/mod_muc/mod_muc_room.erl: Weakened presence filtering, added - warning in non-anonymous rooms, room destroying updated to latest - JEP-0045, added a number of occupants and room name in room's - disco#info reply, miscellaneous internal changes (thanks to Sergei - Golovan) - - * src/mod_muc/mod_muc.erl: Better support for nick unregistration - (thanks to Sergei Golovan) - - * src/ejabberd_zlib/ejabberd_zlib.erl: Zlib support (thanks to - Sergei Golovan) - * src/ejabberd_zlib/ejabberd_zlib_drv.c: Likewise - * src/ejabberd_zlib/Makefile.in: Likewise - * src/ejabberd_c2s.erl: Stream compression support (JEP-0138) - * src/ejabberd_receiver.erl: Likewise - - * src/mod_disco.erl: Don't split node name before calling hooks - (thanks to Sergei Golovan) - - * src/mod_configure.erl: Support for configuration using ad-hoc - commands (thanks to Sergei Golovan) - - * src/mod_announce.erl: Support for sending announce messages - using ad-hoc commands (thanks to Sergei Golovan) - - * src/mod_adhoc.erl: Ad-hoc support (JEP-0050) (thanks to Magnus - Henoch) - * src/adhoc.erl: Likewise - * src/adhoc.hrl: Likewise - - * src/jlib.hrl: Updated (thanks to Sergei Golovan) - - * src/gen_mod.erl: Added function is_loaded/2 (thanks to Sergei - Golovan) - - * src/ejabberd_service.erl: Changed error message on handshake - error (thanks to Sergei Golovan) - - * src/ejabberd.cfg.example: Updated (thanks to Sergei Golovan) - -2006-01-13 Mickael Remond - - * src/odbc/ejabberd_odbc.erl: underscore and percent are now only - escaped in like queries. MySQL where not escaping those escaped - characters in other context. - * src/mod_vcard_odbc.erl: likewise. - * src/odbc/mysql.sql: Fixed MySQL database creation script: Was - not properly working with all MySQL version. - * src/odbc/ejabberd_odbc.erl: Added a way to retry database - connection connect for 5 minutes when the connection is lost. No - further connection is retry after. - * src/odbc/ejabberd_odbc_sup.erl: likewise. - -2006-01-13 Alexey Shchepin - - * src/ejabberd_service.erl: Bugfix - - * src/ejabberd_receiver.erl: Rewritten to use {active, once} mode - for socket - * src/ejabberd_c2s.erl: Update - * src/ejabberd_listener.erl: Likewise - * src/ejabberd_s2s_in.erl: Likewise - * src/ejabberd_s2s_out.erl: Likewise - * src/ejabberd_service.erl: Likewise - * src/shaper.erl: Likewise - * src/tls/tls.erl: Likewise - * src/web/ejabberd_http.erl: Likewise - -2006-01-02 Mickael Remond - - * src/odbc/ejabberd_odbc.erl: Native MySQL support - -2005-12-24 Alexey Shchepin - - * src/ejabberd_logger_h.erl: Speed optimizations - -2005-12-22 Alexey Shchepin - - * src/Makefile.in: Clean results of ASN.1 compiler (thanks to - Sergei Golovan) - - * src/win32/ejabberd.nsh: Removed (thanks to Sergei Golovan) - -2005-12-22 Mickael Remond - - * src/odbc/ejabberd_odbc.erl: Added error message on ODBC - connection to help ODBC configuration troubleshooting. - -2005-12-22 Alexey Shchepin - - * src/Makefile.win32: Updated (thanks to Sergei Golovan) - * src/configure.erl: Likewise - * src/win32/CheckReqs.ini: Likewise - * src/win32/CheckReqs1.ini: Likewise - * src/win32/CheckReqs1H.ini: Likewise - * src/win32/ejabberd.nsh: Likewise - * src/win32/ejabberd.nsi: Likewise - - * src/odbc/ejabberd_odbc.erl: Bugfix - -2005-12-21 Mickael Remond - - * src/odbc/mysql.sql: Database description for MySQL Database 4.1 - (Max version, with Innodb) - * src/ejabberd_auth_odbc.erl: MySQL ODBC support - * src/mod_offline_odbc.erl: Likewise - * src/mod_vcard_odbc.erl: Likewsie - * src/mod_roster_odbc.erl: Likewise - * src/odbc/ejabberd_odbc.erl: Likewise - * src/mod_last_odbc.erl: Likewise - -2005-12-16 Mickael Remond - - * doc/Makefile: Added helper to generate the docs (Thanks to Sander - Devrieze) - * doc/guide.tex: Added ejabberd 1.0.0 release notes. - * doc/dev.tex: Code clean-up (Thanks to Sander Devrieze) - -2005-12-16 Alexey Shchepin - - * doc/features.tex: Added feature sheet (Thanks to Sander - Devrieze) - -2005-12-14 Alexey Shchepin - - * src/mod_irc/iconv_erl.c: Bugfix (thanks to Tomas Janousek) - -2005-12-13 Alexey Shchepin - - * src/win32/ejabberd.nsi: Updated (thanks to Maxim Ryazanov) - - * src/ejabberd.hrl: Updated version - * src/ejabberd.app: Likewise - * doc/version.tex: Likewise - -2005-12-13 Mickael Remond - - * doc/release_notes_1.0.0.txt: Added preliminary version of ejabberd - 1.0.0 release notes. - * doc/guide.html: Generated the updated HTML version of the documentation. - -2005-12-11 Alexey Shchepin - - * src/mod_roster.erl: Workaround for gateway subscriptions now - should be enabled with --enable-roster-gateway-workaround - * src/mod_roster_odbc.erl: Likewise - * src/configure.ac: Likewise - * src/Makefile.in: Likewise - -2005-12-10 Alexey Shchepin - - * src/ejabberd_service.erl: Added logging of termination - - * src/msgs/ru.msg: Updated (thanks to Sergei Golovan) - * src/msgs/uk.msg: Likewise - - * src/msgs/*.msg: Updated (thanks to Badlop) - -2005-12-08 Mickael Remond - - * contribs/contrib/extract_translations/prepare-translation.sh: - Small improvements. - * src/msgs/fr.msg: Updated - -2005-12-07 Alexey Shchepin - - * src/msgs/pl.msg: Fixed syntax error - - * src/mod_offline.erl: Don't store headline messages - * src/mod_offline_odbc.erl: Likewise - -2005-12-06 Alexey Shchepin - - * doc/guide.tex: Updated - -2005-12-06 Mickael Remond - - * src/ejabberd.cfg.example: Updated - - * src/Makefile.*: Can now be build when the Erlang environment is - not Erlang/OTP but the Erlang REPOS CDROM. Still compatible with - standard Erlang/OTP install - * aclocal.m4: Likewise - * src/Makefile.*: Can now be build with Erlang debug_info with - 'make debug=true' - -2005-12-06 Alexey Shchepin - - * src/msgs/pt-br.msg: Updated (thanks to Victor Hugo dos Santos) - - * src/msgs/pl.msg: Updated (thanks to Andrzej Smyk) - - * src/msgs/sv.msg: Updated (thanks to Magnus Henoch) - - * src/msgs/de.msg: Updated (thanks to Patrick Dreker) - -2005-11-30 Mickael Remond - - * doc/yozhikheader.png: Added feature sheet header (Thanks to Sander - Devrieze) - -2005-11-28 Mickael Remond - - * doc/guide.tex: Improved and updated documentation (Thanks to Sander - Devrieze) - * doc/guide.html: Likewise - * doc/features.tex: Likewise - * doc/introduction.tex: Likewise - * doc/version.tex: Likewise - * doc/logo.png: New logo for ejabberd doc (Thanks to Sander Devrieze) - -2005-11-26 Alexey Shchepin - - * src/web/ejabberd_http.erl: Now web interface is compliant to - XHTML 1.0 Transitional (thanks to Sander Devrieze) - * src/web/ejabberd_web_admin.erl: Likewise - -2005-11-25 Alexey Shchepin - - * doc/Makefile: Now really added - -2005-11-22 Alexey Shchepin - - * src/mod_roster.erl: The "id" attribute of roster push packet was - missed (thanks to Maxim Ryazanov) - * src/mod_roster_odbc.erl: Likewise - - * src/web/ejabberd_web_admin.erl: Fixed encoding of user names in - URLs - - * src/web/ejabberd_http.erl: Added url_encode function from yaws - - * src/ejabberd_c2s.erl: Send stream error when connection is - replaced (thanks to Maxim Ryazanov) - -2005-11-19 Mickael Remond - - * contrib/extract_translations/prepare-translation.sh: Added - wrapper to extract_translation.erl (thanks to Badlop) - -2005-11-19 Alexey Shchepin - - * src/mod_vcard.erl: Fixed xmlns in disco items replies (thanks to - Maxim Ryazanov) - * src/mod_vcard_ldap.erl: Likewise - * src/mod_vcard_odbc.erl: Likewise - - * src/tls/Makefile.in: Use CPPFLAGS (thanks to Magnus Henoch) - -2005-11-17 Alexey Shchepin - - * src/ejabberd_s2s_in.erl: Support for dNSName certificate field - and DNS name matching - * src/XmppAddr.asn1: Moved here from src/tls/XmppAddr.asn1 - * src/tls/XmppAddr.asn1: Likewise - * src/Makefile.in: Updated - * src/tls/Makefile.in: Updated - -2005-11-16 Alexey Shchepin - - * src/odbc/ejabberd_odbc.erl: Support for mnesia-like transaction - interface - * src/mod_roster_odbc.erl: Updated to use - ejabberd_odbc:sql_transaction/2 - -2005-11-12 Alexey Shchepin - - * src/ejabberd_s2s_out.erl: Fixed invalid behaviour upon - connecting to host with invalid domain - * src/ejabberd_s2s.erl: Likewise - -2005-11-05 Alexey Shchepin - - * src/ejabberd_config.erl: Support for per host certificates - * src/ejabberd_c2s.erl: Likewise - * src/ejabberd_s2s_out.erl: Likewise - * src/ejabberd.cfg.example: Updated - - * src/ejabberd_s2s_in.erl: Fixed id-on-xmppAddr processing - -2005-11-03 Alexey Shchepin - - * src/mod_disco.erl: Fixed extra_domains option processing - - * src/ejabberd_s2s_out.erl: Support for STARTTLS+SASL EXTERNAL - (not well-tested yet) - * src/ejabberd_s2s_in.erl: Likewise - * src/tls/tls.erl: Likewise - * src/tls/tls_drv.c: Likewise - * src/tls/XmppAddr.asn1: Likewise - * src/tls/Makefile.in: Likewise - -2005-10-30 Alexey Shchepin - - * src/mod_disco.erl: Minor fix - -2005-10-29 Alexey Shchepin - - * src/mod_roster_odbc.erl: Bugfix - -2005-10-25 Alexey Shchepin - - * src/tls/tls.erl: Accept {error,already_loaded} from - erl_ddll:load_driver/2 - * src/stringprep/stringprep.erl: Likewise - * src/mod_irc/iconv.erl: Likewise - * src/ejabberd_app.erl: Likewise - - * src/tls/tls_drv.c: Support for "connect" method - * src/tls/tls.erl: Likewise - - * src/ejabberd_s2s_in.erl: Support for STARTTLS+Dialback - * src/ejabberd_s2s_out.erl: Likewise - * src/ejabberd_receiver.erl: Added a few hacks ({active,once} mode - should be used instead of recv/3 call to avoid them) - * src/ejabberd_config.erl: Added s2s_use_starttls and s2s_certfile - options - * src/ejabberd.cfg.example: Likewise - -2005-10-22 Alexey Shchepin - - * src/ejabberd_app.erl: Try to load tls_drv at startup to avoid - unloading of libssl (thanks to Brian Campbell) - -2005-10-20 Alexey Shchepin - - * src/odbc/pg.sql: Added spool.seq field for offline messages - sorting - * src/mod_offline_odbc.erl: Likewise - -2005-10-18 Alexey Shchepin - - * src/mod_roster_odbc.erl: Bugfix - -2005-10-16 Alexey Shchepin - - * src/gen_iq_handler.erl: Bugfix - -2005-10-15 Alexey Shchepin - - * src/ejabberd_auth_odbc.erl: Minor fix - - * src/odbc/ejabberd_odbc.erl: Updated pgsql support - - * src/mod_roster_odbc.erl: Bugfix - - * src/ejabberd_c2s.erl: Updated to work correctly with - mod_vcard_odbc - -2005-10-13 Alexey Shchepin - - * src/odbc/ejabberd_odbc.erl: Experimental support for pgsql - library - - * src/ejabberd_auth_odbc.erl: Bugfix - - * src/mod_roster_odbc.erl: Bugfix - -2005-10-07 Alexey Shchepin - - * src/ejd2odbc.erl: Added vCard converter - - * src/mod_vcard_odbc.erl: vCard support via ODBC - - * src/odbc/pg.sql: Updated - -2005-09-18 Alexey Shchepin - - * src/web/ejabberd_web_admin.erl: Updated API for better - integration with J-EAI web interface - - * src/mod_shared_roster.erl: Now possible to specify all users on - virtual host in group - * src/web/ejabberd_web_admin.erl: Likewise - -2005-09-15 Alexey Shchepin - - * src/jlib.erl: Bugfix - -2005-09-10 Alexey Shchepin - - * src/ejd2odbc.erl: Updated - -2005-09-04 Alexey Shchepin - - * src/mod_disco.erl: Disco publishing support (thanks to Magnus - Henoch) - - * src/mod_disco.erl: Functions register_sm_feature and - register_sm_node replaced with hooks (thanks to Sergei Golovan) - * src/mod_vcard.erl: Updated - * src/mod_vcard_ldap.erl: Likewise - - * src/mod_disco.erl: Now mod_disco doesn't depend on mod_configure - (thanks to Sergei Golovan) - * src/mod_configure.erl: Likewise - -2005-08-29 Alexey Shchepin - - * src/ejd2odbc.erl: Converter from mnesia to ODBC - - * src/mod_offline_odbc.erl: Minor fix - -2005-08-25 Alexey Shchepin - - * src/mod_vcard_ldap.erl: Bugfix - - * src/mod_vcard.erl: Bugfix - -2005-08-23 Alexey Shchepin - - * src/ejabberd_auth_odbc.erl: Bugfix - -2005-08-21 Alexey Shchepin - - * doc/dev.tex: Updated - -2005-08-11 Alexey Shchepin - - * src/cyrsasl_digest.erl: Fixed challenge/response parsing (thanks - to Martin Pokorny) - -2005-08-07 Alexey Shchepin - - * src/msgs/pl.msg: Updated (thanks to Andrew Smyk) - - * src/web/ejabberd_web_admin.erl: Bugfix (thanks to Badlop) - -2005-08-05 Alexey Shchepin - - * src/win32/inetrc: Added (thanks to Sergei Golovan) - - * src/Makefile.win32: Updated (thanks to Sergei Golovan) - * src/win32/ejabberd.cfg: Likewise - * src/win32/ejabberd.nsi: Likewise - - * doc/guide.tex: Updated - - * src/ejabberd.hrl: Updated version - -2005-08-01 Alexey Shchepin - - * src/msgs/ru.msg: Updated (thanks to Sergei Golovan) - * src/msgs/uk.msg: Likewise - - * src/msgs/es.msg: Updated (thanks to Badlop) - - * src/msgs/nl.msg: Updated (thanks to Sander Devrieze) - -2005-08-01 Mickael Remond - - * (all): ejabberd-0.9.8 released - - * src/msgs/fr.msg: Updated - -2005-07-31 Alexey Shchepin - - * src/ejabberd_config.erl: Added host_config option - * doc/guide.tex: Updated - - * src/ejabberd_auth_ldap.erl: Bugfix - - * src/msgs/ru.msg: Updated (thanks to Sergei Golovan) - * src/msgs/uk.msg: Likewise - - * src/msgs/de.msg: Updated (thanks to Torsten Werner) - - * src/web/ejabberd_web_admin.erl: Fixed CSS style sheet to be - standards compliant (thanks to Sander Devrieze) - -2005-07-29 Alexey Shchepin - - * src/web/ejabberd_web_admin.erl: Added "Virtual Hosts" page - -2005-07-27 Alexey Shchepin - - * src/ejabberd_router.erl: Added filter_packet hook - -2005-07-26 Alexey Shchepin - - * src/jd2ejd.erl: Updated to work with ODBC - - * src/mod_roster_odbc.erl: Updated - -2005-07-22 Alexey Shchepin - - * src/mod_offline_odbc.erl: Bugfix - - * src/mod_last_odbc.erl: Bugfix - -2005-07-20 Alexey Shchepin - - * src/mod_pubsub/mod_pubsub.erl: Updated to J-EAI version - -2005-07-15 Alexey Shchepin - - * src/acl.erl: Slightly changed "access" option processing - - * src/mod_disco.erl: Fixed processing of host features and - extra_domains option - - * src/ejabberd_c2s.erl: Processing of jabber:iq:register totally - moved to mod_register.erl (thanks to Sergei Golovan) - * src/mod_register.erl: Likewise - - * src/win32/ejabberd.nsi: Added two pictures in installer (thanks - to Maxim Ryazanov) - * src/win32/ejabberd_header.bmp: Likewise - * src/win32/ejabberd_intro.bmp: Likewise - - * src/web/ejabberd_web_admin.erl: Fixed spelling of word - "authentication" - * src/ejabberd_c2s.erl: Likewise - -2005-07-13 Alexey Shchepin - - * src/mod_register.erl: Bugfix - - * src/mod_vcard.erl: Bugfix - - * src/ejabberd_app.erl: Updated to allow different authentication - methods for different virtual hosts - * src/ejabberd_auth.erl: Likewise - * src/ejabberd_auth_external.erl: Likewise - * src/ejabberd_auth_internal.erl: Likewise - * src/ejabberd_auth_ldap.erl: Likewise - * src/ejabberd_auth_odbc.erl: Likewise - * src/cyrsasl.erl: Likewise - * src/cyrsasl_digest.erl: Likewise - * src/cyrsasl_plain.erl: Likewise - * src/ejabberd_c2s.erl: Likewise - * src/ejabberd_config.erl: Likewise - * src/extauth.erl: Likewise - * src/mod_last_odbc.erl: Likewise - * src/mod_offline_odbc.erl: Likewise - * src/mod_roster_odbc.erl: Likewise - * src/odbc/ejabberd_odbc.erl: Likewise - * src/odbc/ejabberd_odbc_sup.erl: Likewise - -2005-07-03 Alexey Shchepin - - * src/ejabberd_app.erl: Bugfix - - * src/ejabberd_config.erl: Bugfix - -2005-06-30 Alexey Shchepin - - * src/mod_offline.erl: Bugfix - -2005-06-20 Alexey Shchepin - - * (all): Enhanced virtual hosting support - -2005-05-28 Alexey Shchepin - - * src/web/ejabberd_web_admin.erl: Bugfix - -2005-05-25 Alexey Shchepin - - * src/msgs/pt-br.msg: New Brazilian Portuguese translation (thanks - to Felipe Brito Vasconcellos) - -2005-05-23 Alexey Shchepin - - * (all): ejabberd-0.9.1 released - - * src/msgs/fr.msg: Updated (thanks to Mickael Remond) - - * src/odbc/Makefile.in: Added - - * src/configure.ac: Updated for odbc support - * src/Makefile.in: Likewise - - * src/aclocal.m4: Bugfix - - * src/mod_last_odbc.erl: Added store_last_info/4 function (thanks - to Sergei Golovan) - * src/mod_last.erl: Likewise - - * src/jd2ejd.erl: Support for exporting iq:last information, - better error handling (thanks to Sergei Golovan) - - * src/ejabberd_ctl.erl: Added "import-file" and "import-dir" - commands (thanks to Sergei Golovan) - - * doc/guide.tex: Updated (thanks to Sergei Golovan) - * doc/dev.tex: Likewise - * doc/disco.png: Likewise - * doc/discorus.png: Likewise - * doc/webadmin.png: Likewise - * doc/webadminru.png: Likewise - - * src/msgs/ru.msg: Updated (thanks to Sergei Golovan) - * src/msgs/uk.msg: Likewise - - * src/web/ejabberd_web_admin.erl: Updated CSS, added modules - management, fixed bug with configuring of listened ports on - different nodes (thanks to Sergei Golovan) - - * src/gen_mod.erl: Added function loaded_modules_with_opts/0, new - API for module stopping (thanks to Sergei Golovan) - * src/mod_muc/mod_muc.erl: Moved a process name to a macros, - updated module stopping (thanks to Sergei Golovan) - * src/mod_irc/mod_irc.erl: Likewise - * src/mod_pubsub/mod_pubsub.erl: Likewise - * src/mod_announce.erl: Updated module stopping (thanks to Sergei - Golovan) - * src/mod_echo.erl: Likewise - * src/mod_offline.erl: Likewise - - * src/web/ejabberd_http.erl: "Connection:" header value now - matched case-insensitive, and returned to client, replaced - duplicate is_space($\r) with is_space($\t) (thanks to Maxim - Ryazanov) - -2005-05-21 Alexey Shchepin - - * src/mod_pubsub/mod_pubsub.erl: Fixed XML element name for - pubsub#event namespace (thanks to Magnus Henoch) - - * src/msgs/ru.msg: Updated (thanks to Sergei Golovan) - * src/msgs/uk.msg: Likewise - - * src/msgs/es.msg: Updated (thanks to Badlop) - -2005-05-19 Alexey Shchepin - - * src/mod_pubsub/mod_pubsub.erl: Now possible to subscribe to a - pubsub node with a JID that includes a resource (thanks to Martijn - van Beers) - - * src/stringprep/uni_parse2.tcl: Bugfix - * src/stringprep/stringprep_drv.c: Likewise - * src/stringprep/uni_norm.c: Regenerated - -2005-05-18 Alexey Shchepin - - * src/mod_irc/mod_irc_connection.erl: Added support for WHOIS - requests and reply to USERINFO (thanks to Oleg V. Motienko) - -2005-05-17 Alexey Shchepin - - * src/stringprep/stringprep_drv.c: Bugfix - -2005-05-16 Alexey Shchepin - - * src/win32/ejabberd.cfg: Updated (thanks to Sergei Golovan) - - * src/odbc/Makefile.win32: Added (thanks to Sergei Golovan) - - * src/Makefile.win32: Updated (thanks to Sergei Golovan) - -2005-05-15 Alexey Shchepin - - * src/jd2ejd.erl: Fixed private xml setting - - * src/mod_last.erl: Bugfix - * src/mod_last_odbc.erl: Likewise - - * src/mod_pubsub/mod_pubsub.erl: Fixed service stopping - -2005-05-09 Alexey Shchepin - - * src/mod_muc/mod_muc_room.erl: Fixed bug with storing - affiliations of invited users in members-only room (thanks to - Sergei Golovan) - - * src/ejabberd_c2s.erl: Fixed starttls_required behaviour for - legacy connections (thanks to Brian Campbell) - - * src/web/ejabberd_web_admin.erl: Images now specified via CSS, - design slightly updated, added last activity statistics (thanks to - Sergei Golovan) - -2005-05-07 Alexey Shchepin - - * src/stringprep/stringprep_drv.c: Added check for bidi - - * src/stringprep/uni_parse.tcl: Now handle all Unicode code points - up to U+10FFFF - * src/stringprep/uni_parse2.tcl: Likewise - * src/stringprep/uni_data.c: Regenerated - * src/stringprep/uni_norm.c: Likewise - -2005-05-06 Alexey Shchepin - - * src/stringprep/uni_norm.c: Regenerated with Unicode 3.2 tables - as required by RFC3454 - - * src/stringprep/uni_parse2.tcl: Bugfixes - - * src/stringprep/stringprep_drv.c: Bugfixes, added hangul - composition - -2005-05-05 Mickael Remond - - * src/msgs/fr.msg: Added missing version 0.9 fields and removed unused - ones. - -2005-05-04 Alexey Shchepin - - * src/mod_muc/mod_muc_room.erl: Store ban reasons for outcast - items, updated affiliation matching rules to latest JEP-0045 - -2005-05-02 Alexey Shchepin - - * src/mod_muc/mod_muc_room.erl: Updated changing roles and - affiliations tables to latest JEP-0045 - -2005-05-01 Mickael Remond - - * src/msgs/fr.msg: Updated - -2005-05-01 Alexey Shchepin - - * src/msgs/sw.msg: Renamed to sv.msg - * src/msgs/sv.msg: Likewise - - * src/msgs/pl.msg: Updated (thanks to Andrew Smyk) - - * contrib/extract_translations/README: Better phrasing (thanks to - Sergei Golovan) - - * contrib/extract_translations/extract_translations.erl: Fix to - avoid duplication of lines (thanks to Sergei Golovan) - - * src/msgs/sw.msg: New Swedish translation (thanks to Magnus - Henoch) - - * src/msgs/pt.msg: New Portuguese translation (thanks to iceburn) - - * src/msgs/es.msg: Updated (thanks to Badlop) - - * src/msgs/nl.msg: Updated (thanks to Sander Devrieze) - -2005-04-27 Alexey Shchepin - - * src/ejabberd_auth_ldap.erl: Added listing of users support - - * src/ejabberd.cfg.example: Updated LDAP options - - * src/ejabberd_ctl.erl: Better spelling, now prints full file - paths, fixed checking of mnesia:install_fallback result, now - "dump" command dumps only persistent tables - - * contrib/extract_translations/: A tool for extracting of - translation strings from ejabberd code (thanks to Sergei Golovan) - -2005-04-26 Alexey Shchepin - - * src/mod_vcard_ldap.erl: Bugfix (thanks to Mickael Remond) - -2005-04-24 Alexey Shchepin - - * src/web/ejabberd_web_admin.erl: Added translation to submit - button and "shared roster groups" header (thanks to iceburn and - Sergei Golovan) - - * src/msgs/ru.msg: Updated (thanks to Sergei Golovan) - * src/msgs/uk.msg: Likewise - - * src/mod_muc/mod_muc_room.erl: Minor update to simplify - translation (thanks to Sergei Golovan) - - * src/tls/tls_drv.c: Reverted previous patch - -2005-04-22 Alexey Shchepin - - * doc/guide.tex: Added mod_shared_roster documentation - - * src/ejabberd.hrl: Updated version - -2005-04-21 Alexey Shchepin - - * src/jd2ejd.erl: Bugfix - -2005-04-20 Alexey Shchepin - - * src/ejabberd_auth.erl: Added check for domain of registered user - - * src/web/ejabberd_web_admin.erl: Fixed user registration via web - interface, fixed path to user's offline messages (thanks to - Mickael Remond) - - * src/mod_disco.erl: Fixed domain listing when one virtual host is - a subdomain of another - -2005-04-18 Alexey Shchepin - - * (all): ejabberd-0.9 released - - * src/web/ejabberd_web_admin.erl: Added link to shared roster page - - * src/odbc/ejabberd_odbc.erl: ODBC connection string can be - specified via odbc_server option now - * src/ejabberd.cfg.example: Added ODBC usage example - - * doc/guide.tex: Updated - - * src/msgs/pl.msg: New Polish translation (thanks to Andrew Smyk) - -2005-04-17 Alexey Shchepin - - * (all): Merged virtual hosting support - -2005-04-09 Alexey Shchepin - - * src/ejabberd_c2s.erl: Send new id for each new stream inside one - session (thanks to Maxim Ryazanov) - - * src/tls/tls_drv.c: Now reads all certificates from certificate - file instead of reading only first one (thanks to Karl-Johan - Karlsson) - -2005-04-06 Alexey Shchepin - - * examples/transport-configs/init-scripts/jabber-gg-transport: - Fixed typo (thanks to Sander Devrieze) - -2005-04-05 Alexey Shchepin - - * examples/transport-configs/configs/msn-transport.xml: Fixed typo - (thanks to Sander Devrieze) - -2005-04-02 Alexey Shchepin - - * examples/transport-configs/: Updated (thanks to Sander Devrieze) - -2005-03-31 Alexey Shchepin - - * src/ejabberd_ctl.erl: Bugfix - -2005-03-17 Alexey Shchepin - - * src/mod_muc/mod_muc_room.erl: Bugfix - -2005-03-15 Alexey Shchepin - - * src/ejabberd_sm.erl: Bugfix - -2005-03-12 Alexey Shchepin - - * src/ejabberd_router.erl: Bugfix - -2005-01-14 Alexey Shchepin - - * src/mod_irc/mod_irc_connection.erl: Added filtering of quit - status - -2005-01-04 Alexey Shchepin - - * src/web/ejabberd_web_admin.erl: Copyright update - * src/mod_vcard_ldap.erl: Likewise - * src/mod_vcard.erl: Likewise - * src/mod_pubsub/mod_pubsub.erl: Likewise - * src/mod_muc/mod_muc.erl: Likewise - * src/mod_irc/mod_irc.erl: Likewise - -2004-12-30 Alexey Shchepin - - * src/odbc/ejabberd_odbc.erl: Load-balance ODBC requests between - several connections - - * src/odbc/ejabberd_odbc_sup.erl: Supervisor for ODBC connections - - * src/mod_muc/mod_muc_room.erl: Added missed type='form' attribute - in room configuration response (thanks to Badlop) - -2004-12-19 Alexey Shchepin - - * src/mod_roster_odbc.erl: Roster support via ODBC (not completed) - - * src/ejabberd_auth_internal.erl: Added remove_user hook - * src/ejabberd_auth_odbc.erl: Likewise - * src/mod_roster.erl: Use remove_user hook - * src/mod_offline.erl: Likewise - * src/mod_offline_odbc.erl: Likewise - * src/mod_last.erl: Likewise - * src/mod_last_odbc.erl: Likewise - * src/mod_vcard.erl: Likewise - * src/mod_private.erl: Likewise - - * src/mod_roster.erl: Added hooks for functions exported by - mod_roster - * src/ejabberd_c2s.erl: Likewise - * src/ejabberd_sm.erl: Likewise - * src/mod_privacy.erl: Likewise - * src/mod_last.erl: Likewise - * src/mod_last_odbc.erl: Likewise - -2004-12-14 Alexey Shchepin - - * src/ejabberd_sm.erl: Updated missed message passing from - previous patch - -2004-12-13 Alexey Shchepin - - * src/odbc/pg.sql: DB creation script for postgres - - * src/odbc/ejabberd_odbc.erl: Experimental support for ODBC - * src/mod_last_odbc.erl: Likewise - * src/mod_offline_odbc.erl: Likewise - * src/ejabberd_auth_odbc.erl: Likewise - * src/ejabberd_auth.erl: Likewise - -2004-12-12 Alexey Shchepin - - * src/mod_stats.erl: Minor optimizations - - * src/ejabberd_sm.erl: Added unset_presence_hook - * src/mod_last.erl: Use unset_presence_hook instead of direct call - - * src/ejabberd_auth.erl: Splitted into ejabberd_auth_internal.erl, - ejabberd_auth_ldap.erl, and ejabberd_auth_external.erl, - * src/ejabberd_auth_internal.erl: Likewise - * src/ejabberd_auth_ldap.erl: Likewise - * src/ejabberd_auth_external.erl: Likewise - -2004-12-05 Alexey Shchepin - - * src/web/ejabberd_web_admin.erl: Changed type of password field - to "password" - - * src/jlib.hrl: More stream error defines (thanks to Sergei - Golovan) - - * src/ejabberd_c2s.erl: Support for starttls_required option - (thanks to Sergei Golovan) - - * src/mod_muc/mod_muc_room.erl: Fixed mistake in case condition - (thanks to Sergei Golovan) - - * src/xml_stream.erl: Added function parse_element/1 - - * src/expat_erl.c: Added PARSE_FINAL_COMMAND - -2004-12-03 Alexey Shchepin - - * src/ejabberd_listener.erl: Enable keepalive option - - * src/xml_stream.erl: Added API for managing xml streams without - creating process - * src/ejabberd_receiver.erl: Use this API, now 2 processes are - created per C2S connection - -2004-12-01 Alexey Shchepin - - * src/expat_erl.c: Now uses port control instead of port output - * src/xml_stream.erl: Likewise - -2004-11-30 Alexey Shchepin - - * src/stringprep/stringprep.erl: Now register port instead of - storing it in ets table - -2004-11-28 Alexey Shchepin - - * doc/guide.tex: Updated URLs to R10C release - -2004-11-20 Alexey Shchepin - - * src/mod_vcard.erl: Added missed index - -2004-11-08 Alexey Shchepin - - * doc/guide.tex: Updated (thanks to Sander Devrieze) - -2004-11-05 Alexey Shchepin - - * src/aclocal.m4: Fixed headers detecting in AM_WITH_OPENSSL - (thanks to Leif Johansson) - - * src/ejabberd_auth.erl: Added support for ldap_rootdn and - ldap_password options (thanks to Stefan de Konink) - * src/mod_vcard_ldap.erl: Likewise - - * src/ejabberd_router.erl: Now possible to route packet via - function call instead of message sending - * src/ejabberd_sm.erl: Added function route/3, use it in route - table - * src/ejabberd_local.erl: Likewise - * src/ejabberd_s2s.erl: Likewise - -2004-10-23 Alexey Shchepin - - * (all): Fixed spelling of word "authentication" - - * src/*/Makefile.in: Replaced erlc with @ERLC@ - -2004-10-15 Alexey Shchepin - - * src/ejabberd_s2s.erl: Added remove_connection/1 - * src/ejabberd_s2s_out.erl: Use ejabberd_s2s:remove_connection/1 - - * src/ejabberd_s2s_in.erl: Minor cleanup - - * examples/transport-configs/: Transport config examples (thanks - to Sander Devrieze) - - * src/msgs/de.msg: German translation (thanks to Marina Hahn) - -2004-10-12 Alexey Shchepin - - * src/win32/: Updated (thanks to Sergei Golovan) - - * src/msgs/es.msg: Updated (thanks to Badlop) - - * src/mod_irc/iconv_erl.c: Bugfix (thanks to Jacek Konieczny) - -2004-10-10 Alexey Shchepin - - * (all): ejabberd-0.7.5 released - - * src/tls/Makefile.win32: Added (thanks to Sergei Golovan) - - * src/win32/: Updated (thanks to Sergei Golovan) - -2004-10-09 Alexey Shchepin - - * src/web/ejabberd_web_admin.erl: Fixed user listing - - * src/msgs/uk.msg: Updated (thanks to Sergei Golovan) - - * src/msgs/nl.msg: Updated (thanks to Sander Devrieze) - - * src/msgs/ua.msg: Renamed to uk.msg - - * COPYING: Added permission to link with OpenSSL - -2004-10-08 Alexey Shchepin - - * src/msgs/ua.msg: Updated (thanks to Sergei Golovan) - - * src/mod_muc/mod_muc_room.erl: Fixed room destroying - - * src/ejabberd.cfg.example: Updated - - * src/ejabberd_sm.erl: Fixed message routing when all resources - have negative priority - - * src/msgs/*.msg: Updated (thanks to Sergei Golovan) - - * src/web/ejabberd_web_admin.erl: Table titles now bold (thanks to - Sergei Golovan) - -2004-10-06 Alexey Shchepin - - * doc/guide.tex: Updated - - * src/ejabberd_s2s_out.erl: Fixed socket closing condition - -2004-10-05 Alexey Shchepin - - * src/web/ejabberd_http_poll.erl: Properly handle bad requests - - * src/web/ejabberd_web_admin.erl: Ported features from J-EAI - -2004-09-30 Alexey Shchepin - - * src/web/ejabberd_http.erl: Fixed processing of POST body for - HTTP Polling - - * src/web/ejabberd_http.erl: Support for "Connection" HTTP header - (thanks to Sergei Golovan) - - * src/translate.erl: Much better handling of xml:lang (thanks to - Sergei Golovan) - -2004-09-29 Alexey Shchepin - - * src/ejabberd_listener.erl: Check result of controlling_process - - * src/web/ejabberd_http.erl: Bugfix - -2004-09-27 Alexey Shchepin - - * src/Makefile.in: Updated (thanks to Badlop) - -2004-09-26 Alexey Shchepin - - * src/aclocal.m4: Better expat and openssl detection (thanks to - Anton Vanin) - - * src/**/Makefile.in: Updated (thanks to Anton Vanin) - * src/configure.ac: Likewise - -2004-09-25 Alexey Shchepin - - * src/jlib.hrl: Added namespace for iq-register stream feature - * src/ejabberd_c2s.erl: Send iq-register feature - - * src/ejabberd_config.erl: Config file can be configured via - environment variable (thanks to Mickael Remond) - - * src/web/ejabberd_http.erl: Added SSL support (thanks to Sergei - Golovan) - - * src/msgs/*.msg: Updated (thanks to Sergei Golovan) - - * src/jlib.hrl: Updated error codes (thanks to Sergei Golovan) - * src/ejabberd_c2s.erl: Likewise - -2004-09-17 Alexey Shchepin - - * src/mod_muc/mod_muc_room.erl: Send password in room invitation - (thanks to Sergei Golovan) - - * src/mod_disco.erl: Added registration of sm features and nodes - (thanks to Sergei Golovan) - * src/mod_vcard.erl: Register vcard-temp feature (thanks to Sergei - Golovan) - - * src/jlib.erl: Added functions now_to_utc_string/1, - now_to_local_string/1, and datetime_string_to_timestamp/1 (thanks - to Sergei Golovan) - * src/mod_muc/mod_muc_room.erl: Use time parsing functions from - jlib (thanks to Sergei Golovan) - -2004-09-16 Alexey Shchepin - - * ejabberd/src/mod_pubsub/mod_pubsub.erl: Bugfix (thanks to - Mickael Remond) - -2004-09-15 Alexey Shchepin - - * src/mod_pubsub/mod_pubsub.erl: Bugfix - -2004-09-10 Alexey Shchepin - - * tools/ejabberdctl: Added call to "exec" (thanks to Sergei - Golovan) - - * src/msgs/ru.msg: Updated (thanks to Sergei Golovan) - - * src/mod_vcard.erl: Support for searching of prefix substring and - limiting of result items (thanks to Sergei Golovan) - - * src/mod_offline.erl: Support for message expiration (JEP-0023) - (thanks to Sergei Golovan) - * src/jlib.hrl: Added NS_EXPIRE macros (thanks to Sergei Golovan) - - * src/ejabberd_logger_h.erl: Added reopen_log/0 (thanks to Sergei - Golovan) - - * src/ejabberd_ctl.erl: Added return codes, updated "reopen-log" - command, added "delete-expired-messages" and "status" commands - (thanks to Sergei Golovan) - - * doc/guide.tex: Updated (thanks to Sergei Golovan) - -2004-09-04 Alexey Shchepin - - * src/mod_roster.erl: Removed useless transactions - -2004-08-28 Alexey Shchepin - - * doc/guide.tex: Fix (thanks to Sander Devrieze) - -2004-08-27 Alexey Shchepin - - * src/xml_stream.erl: Few optimizations - -2004-08-24 Alexey Shchepin - - * src/mod_service_log.erl: Support for logging of user packets via - external service (e.g. bandersnatch) - * doc/guide.tex: Updated - -2004-08-23 Alexey Shchepin - - * src/mod_offline.erl: Added entire table locking on large message - queue - - * src/ejabberd_sm.erl: Added offline_subscription_hook - * src/mod_offline.erl: Use offline_subscription_hook - - * src/configure.erl: Updated (thanks to Sergei Golovan) - * src/Makefile.win32: Likewise - * src/tls/Makefile.win32: Likewise - * src/win32/: Likewise - - * src/mod_announce.erl: Added announce to all users (thanks to - Sergei Golovan) - * doc/guide.tex: Updated (thanks to Sergei Golovan) - -2004-08-14 Alexey Shchepin - - * src/msgs/nl.msg: Updated (thanks to Sander Devrieze) - - * src/web/ejabberd_http_poll.erl: Fixed sending of Set-Cookie - header - -2004-08-12 Alexey Shchepin - - * src/ejabberd_c2s.erl: Bugfix in resend_offline_messages/1 - - * src/mod_announce.erl: New module to manage announce messages - (thanks to Sergei Golovan) - - * src/ejabberd_local.erl: Moved processing of announce messages to - mod_announce (thanks to Sergei Golovan) - - * src/ejabberd_c2s.erl: Added several hooks - - * src/ejabberd_hooks.erl: Fixed run_fold (thanks to Sergei - Golovan) - - * src/ejabberd.cfg.example: Updated (thanks to Sergei Golovan) - - * doc/guide.tex: Updated (thanks to Sergei Golovan) - -2004-08-08 Alexey Shchepin - - * src/ejabberd_c2s.erl: Use resend_offline_messages_hook to fetch - offline messages - * src/mod_offline.erl: Likewise - - * src/mod_offline.erl: Added table locking in - remove_old_messages/1 - - * src/ejabberd_sm.erl: Use offline_message_hook to store offline - messages - * src/mod_offline.erl: Likewise - - * src/ejabberd_hooks.erl: Hooks support - * src/ejabberd_sup.erl: Added ejabberd_hooks - - * doc/guide.tex: Updated - - * src/ejabberd.cfg.example: Updated - - * src/ejabberd_c2s.erl: Changed TLS options (thanks to Sergei - Golovan) - -2004-08-05 Alexey Shchepin - - * src/aclocal.m4: Updated to check for openssl library (thanks to - AV) - * src/configure.ac: Likewise - * src/configure: Likewise - * src/Makefile.in: Likewise - * src/tls/Makefile.in: Likewise - -2004-08-03 Alexey Shchepin - - * src/web/ejabberd_web_admin.erl: Added user's roster page - - * src/mod_irc/mod_irc_connection.erl: Bugfix - -2004-08-01 Alexey Shchepin - - * src/tls/tls.erl: Added recv_data/2 function - - * src/jlib.erl: Added NS_TLS macro - - * src/ejabberd_receiver.erl: Support for STARTTLS - * src/ejabberd_c2s.erl: Likewise - -2004-07-30 Alexey Shchepin - - * examples/extauth/check_pass_null.pl: A reference "null" - implementation of external authentication script (thanks to Leif - Johansson) - - * src/extauth.erl: Support for external authentication - (thanks to Leif Johansson) - * src/ejabberd_auth.erl: Likewise - - * src/mod_vcard_ldap.erl: A drop-in replacement for mod_vcard.erl - which uses ldap for JUD and vCard (thanks to Leif Johansson) - -2004-07-28 Alexey Shchepin - - * src/tls/tls_drv.c: Added freeing of SSL stuff - - * src/xml_stream.erl: Added start/2 function - * src/ejabberd_receiver.erl: Now using xml_stream:start/2 - -2004-07-27 Alexey Shchepin - - * src/ejabberd_c2s.erl: Support for TLS library (not completed) - - * src/tls/tls_drv.c: Updated to return binaries instead of lists - * src/tls/tls.erl: Likewise - -2004-07-26 Alexey Shchepin - - * src/tls/tls.erl: Updated - -2004-07-25 Alexey Shchepin - - * src/tls/: Library for TLS support (not completed) - - * src/ejabberd_auth.erl: Now uses two LDAP connections - - * src/ejabberd_c2s.erl: Return resource on get_presence request - (thanks to Mickael Remond) - - * src/mod_configure2.erl: Bugfix (thanks to Sergei Golovan) - - * src/msgs/ua.msg: New Ukrainian translation (thanks to usercard) - - * src/msgs/nl.msg: Updated (thanks to Sander Devrieze) - -2004-07-23 Alexey Shchepin - - * src/eldap/eldap.erl: Bugfix - -2004-07-13 Alexey Shchepin - - * (all): ejabberd-0.7 released - - * src/web/ejabberd_web_admin.erl: Better i18n support (thanks to - Sergei Golovan) - - * src/msgs/ru.msg: Updated (thanks to Sergei Golovan) - - * src/msgs/fr.msg: Added missed entries (thanks to Sergei Golovan) - * src/msgs/nl.msg: Likewise - - * src/msgs/es.msg: New spanish translation (thanks to Badlop) - -2004-07-11 Alexey Shchepin - - * src/mod_last.erl: Supprot for storing status from latest - unavailable presence (thanks to Sergei Golovan) - * src/ejabberd_sm.erl: Likewise - * src/ejabberd_c2s.erl: Likewise - - * src/mod_vcard.erl: Minor update (thanks to Sergei Golovan) - - * src/mod_register.erl: Added "access" option (thanks to Sergei - Golovan) - * src/mod_irc/mod_irc.erl: Likewise - * src/ejabberd.cfg.example: Updated - * src/win32/ejabberd.cfg: Likewise - - * src/mod_privacy.erl: Fixed module stopping (thanks to Sergei - Golovan) - * src/mod_private.erl: Likewise - - * src/gen_mod.erl: Added function get_module_opt/3 (thanks to - Sergei Golovan) - - * src/ejabberd_local.erl: Minor fix (thanks to Sergei Golovan) - - * doc/guide.tex: Updated (thanks to Sergei Golovan) - -2004-07-10 Alexey Shchepin - - * src/mod_roster.erl: Removed superfluous include_lib line - - * doc/guide.tex: Updated - - * src/msgs/fr.msg: Updated (thanks to Sergei Golovan) - - * src/mod_irc/mod_irc.erl: Added handler for disco items requests - (thanks to Sergei Golovan) - - * src/mod_vcard.erl: Added option for JUD disabling (thanks to - Sergei Golovan) - - * src/mod_configure2.erl: Fixed module stopping (thanks to Sergei - Golovan) - * src/mod_last.erl: Likewise - * src/mod_privacy.erl: Likewise - * src/mod_register.erl: Likewise - * src/mod_roster.erl: Likewise - * src/mod_vcard.erl: Likewise - - * src/jd2ejd.erl: Added emergency catches (thanks to Sergei - Golovan) - * src/mod_last.erl: Likewise - - * src/ejabberd_sm.erl: Removed needless call to - mod_disco:unregister_feature (thanks to Sergei Golovan) - - * src/ejabberd_local.erl: Better support for mod_disco (thanks to - Sergei Golovan) - * src/mod_disco.erl: Likewise - - * src/translate.erl: Suport for "default language" option (thanks - to Sergei Golovan) - * src/ejabberd_config.erl: Likewise - * src/ejabberd_c2s.erl: Likewise - * src/ejabberd.hrl: Added 'MYLANG' macros - - * src/ejabberd.cfg.example: Updated (thanks to Sergei Golovan) - - * doc/guide.tex: Updated (thanks to Sergei Golovan) - -2004-07-09 Alexey Shchepin - - * src/win32/ejabberd.cfg: Updated (thanks to Sergei Golovan) - -2004-07-07 Alexey Shchepin - - * src/Makefile.win32: Updated (thanks to Sergei Golovan) - - * src/Makefile.in: Added installation of ejabberd.cfg (thanks to - Sergei Golovan) - - * src/web/ejabberd_http.erl: Fixed support for HTTP/1.0 clients - -2004-07-06 Alexey Shchepin - - * doc/guide.tex: Updated (thanks to Sergei Golovan) - - * src/ejabberd_auth.erl: Minor fix - - * src/ejabberd_c2s.erl: Fixed sending of presence to own resources - -2004-06-18 Alexey Shchepin - - * src/web/ejabberd_web_admin.erl: Added configuration of listened - ports - * src/ejabberd_listener.erl: Added API for configuration of port - listeners - - * src/web/ejabberd_web_admin.erl: Fixed "Stop" button on node - management page - -2004-05-22 Alexey Shchepin - - * src/msgs/nl.msg: Dutch translation (thanks to Sander Devrieze) - - * src/web/ejabberd_http.erl: Added options for enabling HTTP - polling and admin interface - * src/web/ejabberd_web.erl: Likewise - * src/ejabberd.cfg.example: Updated - - * src/web/ejabberd_web_admin.erl: Updated - - * doc/guide.tex: Updated - -2004-05-17 Alexey Shchepin - - * src/mod_muc/mod_muc.erl: Added access rules for using serveice - and creating rooms (thanks to Sergei Golovan) - - * src/win32/ejabberd.nsi: Updated (thanks to Sergei Golovan) - * src/win32/CheckUserH.ini: Likewise - - * src/translate.erl: Search translations in priv_dir instead of - lib_dir (thanks to Sergei Golovan) - - * src/msgs/ru.msg: Updated (thanks to Sergei Golovan) - - * src/ejabberd.cfg.example: Updated (thanks to Sergei Golovan) - - * src/**/Makefile.in: Updated (thanks to Sergei Golovan) - * src/**/Makefile.win32: Likewise - -2004-05-16 Alexey Shchepin - - * src/web/ejabberd_web_admin.erl: Updated - -2004-05-14 Alexey Shchepin - - * src/web/ejabberd_web_admin.erl: Updated - -2004-05-09 Alexey Shchepin - - * src/web/ejabberd_web_admin.erl: Updated - - * src/ejabberd_listener.erl: Added API for adding/removing - listeners - -2004-05-08 Alexey Shchepin - - * doc/guide.tex: Updated - - * src/ejabberd_listener.erl: Now possible to specify interface on - which one socket will be listened, also added another way to - specify SSL options - * src/ejabberd.cfg.example: Updated - -2004-05-07 Alexey Shchepin - - * src/web/ejabberd_web_admin.erl: Updated (thanks to Andrey - Zamaraev) - -2004-05-05 Alexey Shchepin - - * src/ejabberd_ctl.erl: Added command for listing all registered - users - - * src/ejabberd_ctl.erl: Bugfix, support for text-load and restore - (thanks to Leif Johansson) - -2004-05-04 Alexey Shchepin - - * src/web/ejabberd_web_admin.erl: Updated - -2004-05-01 Alexey Shchepin - - * src/web/ejabberd_http.erl: 'Accept-Language' header support - * src/web/ejabberd_web_admin.erl: Likewise - * src/msgs/ru.msg: Updated - - * src/mod_muc/mod_muc_room.erl: Send status code "201" on room - creation - -2004-04-27 Alexey Shchepin - - * src/translate.erl: Search translations directory in priv_dir - instead of lib_dir (thanks to Sergei Golovan) - - * src/**/Makefile.in: Updated (thanks to Sergei Golovan) - - * src/win32/: Win32 installer stuff (thanks to Sergei Golovan) - - * src/**/Makefile.win32: Updated (thanks to Sergei Golovan) - * src/configure.bat: Likewise - * src/configure.erl: Likewise - - * doc/guide.tex: Updated (thanks to Sergei Golovan) - -2004-04-26 Alexey Shchepin - - * src/web/ejabberd_web_admin.erl: Better design for administration - interface (not completed) (thanks to Andrey Zamaraev) - * src/web/ejabberd_http.erl: Updated - * src/web/ejabberd_web.erl: Likewise - -2004-04-17 Alexey Shchepin - - * src/web/ejabberd_http.erl: Increased receive buffer - - * src/mod_irc/mod_irc_connection.erl: Support for "/quote" command - -2004-04-15 Alexey Shchepin - - * src/ejabberd.erl: Added searching of files in code:priv_lib - (thanks to Sergei Golovan) - * src/translate.erl: Likewise - - * src/ejabberd_app.erl: Added "log_path" configuration parameter - (thanks to Sergei Golovan) - - * src/**/Makefile.win32: Updated (thanks to Sergei Golovan) - - * src/**/*.c: Updated (thanks to Sergei Golovan) - - * src/configure.erl: Added writing of version to Makefile.inc - (thanks to Sergei Golovan) - - * doc/guide.tex: Updated link to expat (thanks to Sergei Golovan) - -2004-04-10 Alexey Shchepin - - * src/idna.erl: Support for IDNA (RFC3490) - * src/ejabberd_s2s_out.erl: Likewise - -2004-04-03 Alexey Shchepin - - * src/xml.erl: element_to_string/1 and crypt/1 now returns deep - list - * src/mod_muc/mod_muc_room.erl (add_message_to_history): Replaced - string:len with lists:flatlength - -2004-03-21 Alexey Shchepin - - * (all): Updated win32 stuff (thanks to Sergei Golovan) - - * src/web/ejabberd_web.erl: Added interface for access rules - configuration - -2004-03-20 Alexey Shchepin - - * doc/guide.tex: Updated - - * src/web/ejabberd_web.erl: Updated - - * src/web/ejabberd_http.erl: Bugfix - -2004-03-16 Alexey Shchepin - - * src/mod_roster.erl: Bugfix - - * src/ejabberd_s2s.erl: More verbose error handling - -2004-03-15 Alexey Shchepin - - * src/web/ejabberd_web.erl: Minor update - -2004-03-14 Alexey Shchepin - - * src/web/ejabberd_web.erl: Added interface for users listsing and - statistics - -2004-03-13 Alexey Shchepin - - * src/web/ejabberd_web.erl: New interface for ACLs editing - - * src/web/ejabberd_http_poll.erl: Fixed "Content-Type" header, - "Set-Cookie" is included only in first response in session, added - missed behaviour definition - - * src/web/ejabberd_http.erl: "Content-Type" header now can be - changed - -2004-03-12 Alexey Shchepin - - * src/web/ejabberd_web.erl: Experiments with web-interface - - * src/configure.ac: Updated - * src/Makefile.in: Likewise - -2004-03-10 Alexey Shchepin - - * src/web/ejabberd_http.erl: Removed debugging output - - * src/ejabberd_c2s.erl: Fixed processing of get_presence request - (thanks to Mickael Remond) - -2004-03-08 Alexey Shchepin - - * src/msgs/ru.msg: Updated (thanks to Sergei Golovan) - - * src/mod_muc/mod_muc_room.erl: Now private conferences are - visible to admins and owners of this conference (thanks to Sergei - Golovan) - - * src/mod_muc/mod_muc.erl: More xml:lang support (thanks to Sergei - Golovan) - - * src/mod_vcard.erl: Better processing of EMAIL tag (thanks to - Sergei Golovan) - - * src/ejabberd_s2s_out.erl: Added "catch" to "open_socket" (thanks - to Sergei Golovan) - -2004-03-07 Alexey Shchepin - - * src/web/ejabberd_http_poll.erl: Completed - -2004-03-06 Alexey Shchepin - - * src/web/: Support for HTTP Polling (JEP-0025) (almost complete) - -2004-03-04 Alexey Shchepin - - * src/web/: Updated - -2004-03-03 Alexey Shchepin - - * src/web/: Minor update - -2004-03-02 Alexey Shchepin - - * src/web/: Small HTTP server and admin web-interface to ejabberd - (not completed yet) - * src/ejabberd_sup.erl: Added HTTP processes supervisor - - * src/ejabberd_c2s.erl: Added API to ask presence (thanks to - Mickael Remond) - - * src/msgs/ru.msg: Updated (thanks to Sergei Golovan) - - * src/mod_muc/mod_muc_room.erl: Updated date parser (thanks to - Sergei Golovan) - - * src/mod_muc/mod_muc.erl: Added error descriptions (thanks to - Sergei Golovan) - * src/mod_muc/mod_muc_room.erl: Likewise - - * src/mod_vcard.erl: Fixed vCard tag (thanks to Sergei Golovan) - * src/mod_irc/mod_irc.erl: Likewise - * src/mod_pubsub/mod_pubsub.erl: Likewise - - * src/jlib.hrl: Added macros for errors with (thanks to - Sergei Golovan) - -2004-02-26 Alexey Shchepin - - * src/msgs/ru.msg: Updated (thanks to Sergei Golovan) - - * src/mod_muc/mod_muc_room.erl: Updated error codes, removed - trailing "-" in history. updated subject sending, added - in configuration form (thanks to Sergei Golovan) - - * src/mod_irc/mod_irc.erl: Added vCard, ejabberd:configure - replaced with jabber:iq:register (thanks to Sergei Golovan) - - * src/mod_configure.erl: Updated "xml:lang" usage, updated some - messages (thanks to Sergei Golovan) - * src/mod_configure2.erl: Likewise - * src/mod_disco.erl: Likewise - * src/mod_register.erl: Likewise - * src/mod_vcard.erl: Likewise - * src/mod_irc/mod_irc.erl: Likewise - * src/mod_muc/mod_muc.erl: Likewise - * src/mod_muc/mod_muc_room.erl: Likewise - * src/mod_pubsub/mod_pubsub.erl: Likewise - - * src/jlib.hrl: Added "lang" field in "iq" record (thanks to - Sergei Golovan) - * src/jlib.erl: Likewise - - * src/ejabberd_c2s.erl: Updated to latest JEP-0078 (thanks to - Sergei Golovan) - -2004-02-18 Alexey Shchepin <alexey@sevcom.net> - - * src/ejabberd_sm.erl: Bugfix - -2004-02-15 Alexey Shchepin <alexey@sevcom.net> - - * src/mod_muc/mod_muc_room.erl: Support for history management - (thanks to Sergei Golovan) - - * src/mod_stats.erl: Updated error codes (thanks to Sergei - Golovan) - * src/mod_irc/mod_irc.erl: Likewise - - * src/mod_configure.erl: "jabber:iq:data" replaced with - "ejabberd:config" namespace (thanks to Sergei Golovan) - * src/mod_disco.erl: Likewise - -2004-02-12 Alexey Shchepin <alexey@sevcom.net> - - * src/ejabberd_c2s.erl: Added <session/> to stream features - -2004-02-10 Alexey Shchepin <alexey@sevcom.net> - - * src/msgs/ru.msg: Updated (thanks to Sergei Golovan) - - * src/mod_irc/mod_irc.erl: Now uses "ejabberd:config" namespace - (thanks to Sergei Golovan) - - * src/mod_disco.erl: Fixed disco category and type (thanks to - Sergei Golovan) - * src/mod_pubsub/mod_pubsub.erl: Likewise - - * src/jlib.hrl: Added "ejabberd:config" namespace (thanks to - Sergei Golovan) - -2004-01-27 Alexey Shchepin <alexey@sevcom.net> - - * src/ejabberd_ctl.erl: Added command for log reopening - -2004-01-18 Alexey Shchepin <alexey@sevcom.net> - - * src/ejabberd_ctl.erl: Added commands for backup processing - - * src/ejabberd_c2s.erl: Added processing of xml:lang according to - latest XMPP-IM draft - - * src/xml.erl: Added replace_tag_attr/3 function - - * src/mod_roster.erl: Added auto-reply on incoming subscription - request according to latest XMPP-IM draft - - * src/mod_offline.erl: Added pop_offline_messages/1 function - * src/ejabberd_c2s.erl: Updated sending of offline messages - -2004-01-17 Alexey Shchepin <alexey@sevcom.net> - - * src/mod_muc/mod_muc_room.erl: Bugfix, updated error codes - (thanks to Sergei Golovan) - - * src/jlib.hrl: Updated error codes (thanks to Sergei Golovan) - -2004-01-11 Alexey Shchepin <alexey@sevcom.net> - - * src/ejabberd_c2s.erl: Fixed bind namespace - - * src/ejabberd_ctl.erl: New module for ejabberd administration - * tools/ejabberdctl: Shell script for ejabberd administration - - * src/mod_vcard.erl: Copyright update - - * src/ejabberd_service.erl: Now possible to specify access rules - for service - * src/ejabberd.cfg.example: Updated - -2004-01-06 Alexey Shchepin <alexey@sevcom.net> - - * src/ejabberd_router.erl: Added monitoring of processess that - serve domains - - * src/ejabberd_app.erl: Bugfix - -2004-01-03 Alexey Shchepin <alexey@sevcom.net> - - * src/ejabberd_router.erl (do_route/3): Slightly changed behaviour - -2004-01-01 Alexey Shchepin <alexey@sevcom.net> - - * src/ejabberd_sm.erl (do_route/3): Minor fix - - * src/ejabberd_sm.erl (route_message/3): Minor changes - -2003-12-28 Alexey Shchepin <alexey@sevcom.net> - - * src/ejabberd_app.erl: Now possible to specify path to log file - via "EJABBERD_LOG_PATH" environment variable - - * src/translate.erl: Now possible to specify path to "msgs" - directory via "EJABBERD_MSGS_PATH" environment variable - - * src/ejabberd.erl: Added get_so_path/0 function - * src/ejabberd_app.erl: Use ejabberd:get_so_path/0 to load .so - * src/mod_irc/iconv.erl: Likewise - * src/stringprep/stringprep.erl: Likewise - -2003-12-24 Alexey Shchepin <alexey@sevcom.net> - - * src/ejabberd_c2s.erl: Presence probe now sended from full JID - - * src/mod_roster.erl: Bugfix - -2003-12-23 Alexey Shchepin <alexey@sevcom.net> - - * src/ejabberd_c2s.erl: Bugfix - -2003-12-21 Alexey Shchepin <alexey@sevcom.net> - - * src/mod_roster.erl: Added workaround for legacy gateways - (passing of "subscribed" presence) - - * src/ejabberd_sm.erl: Minor fix in subscription processing - -2003-12-17 Alexey Shchepin <alexey@sevcom.net> - - * src/jlib.hrl: Added declaration of "iq" record - * (all): Updated to use "iq" record - -2003-12-14 Alexey Shchepin <alexey@sevcom.net> - - * src/ejabberd_local.erl: Replaced register_local_route to - register_route - * src/ejabberd_service.erl: Likewise - * src/mod_echo.erl: Likewise - * src/mod_vcard.erl: Likewise - - * src/ejabberd_router.erl: Partially rewrited - * src/ejabberd_sm.erl: Likewise - -2003-12-13 Alexey Shchepin <alexey@sevcom.net> - - * src/ejabberd_s2s.erl: Partially rewrited - - * src/mod_roster.erl: Removed debugging code - -2003-12-12 Alexey Shchepin <alexey@sevcom.net> - - * src/ejabberd_s2s_out.erl: Bugfix - -2003-12-11 Alexey Shchepin <alexey@sevcom.net> - - * src/mod_roster.erl: Updated subscription handling to latest - XMPP-IM draft - -2003-12-06 Alexey Shchepin <alexey@sevcom.net> - - * src/ejabberd_s2s_in.erl: Changed timeout processing, bugfix - - * src/ejabberd_s2s_out.erl: Changed timeout processing - - * src/msgs/ru.msg: Updated (thanks to Sergei Golovan) - - * src/mod_muc/mod_muc.erl: Better i18n support, added support for - <registered/> field in iq:register replies (thanks to Sergei - Golovan) - - * src/mod_register.erl: More i18n support (thanks to Sergei - Golovan) - -2003-12-02 Alexey Shchepin <alexey@sevcom.net> - - * src/ejabberd_c2s.erl: Bugfix in processing of connection - replacement - -2003-11-28 Alexey Shchepin <alexey@sevcom.net> - - * src/ejabberd_c2s.erl: Added workaround for some Java clients - -2003-11-27 Alexey Shchepin <alexey@sevcom.net> - - * examples/mtr/ejabberd.cfg: Updated (thanks to Marshall T. Rose) - - * src/ejabberd_auth.erl: LDAP attribute that holds user ID now - configurable - * src/ejabberd.cfg.example: Updated - -2003-11-26 Alexey Shchepin <alexey@sevcom.net> - - * src/ejabberd_c2s.erl: Fixed processing of presence probe from - client - -2003-11-23 Alexey Shchepin <alexey@sevcom.net> - - * src/cyrsasl_digest.erl: Bugfix (thanks to Sergei Golovan) - - * src/ejabberd.cfg.example: Updated - - * src/ejabberd_auth.erl: Support for LDAP authentication - * src/cyrsasl_digest.erl: Likewise - * src/mod_register.erl: Likewise - * src/ejabberd_c2s.erl: Likewise - - * src/eldap/: Imported "eldap" package - - * src/ejabberd_sm.erl: Bugfix - -2003-11-16 Alexey Shchepin <alexey@sevcom.net> - - * src/mod_muc/mod_muc_room.erl: Bugfixes - - * (all): Version 0.5 released - -2003-11-13 Alexey Shchepin <alexey@sevcom.net> - - * examples/mtr/ejabberd: Updated (thanks to Marshall T. Rose) - - * src/Makefile.in: Added installation of msgs/ directory - -2003-11-11 Alexey Shchepin <alexey@sevcom.net> - - * doc/dev.tex: Developers documentation (not completed) - - * src/ejabberd_c2s.erl: Better handling of malformed JIDs - - * src/mod_register.erl (try_register/2): Now returns "jid - malformed" error if user name is invalid - -2003-11-10 Alexey Shchepin <alexey@sevcom.net> - - * src/ejabberd.cfg.example: Updated - - * src/ejabberd_s2s_in.erl: Added support for shapers - - * src/ejabberd_c2s.erl: Moved receiver functions to - ejabberd_receiver module - * src/ejabberd_s2s_in.erl: Likewise - * src/ejabberd_receiver.erl: Likewise - - * src/mod_muc/mod_muc_room.erl: Bugfix - - * src/ejabberd_sm.erl (route_message/3): Bugfix - -2003-11-09 Alexey Shchepin <alexey@sevcom.net> - - * src/ejabberd_sm.erl: Bugfix for previous resource handling - change - - * src/mod_configure.erl: Password changing now implemented - -2003-11-07 Alexey Shchepin <alexey@sevcom.net> - - * src/cyrsasl.erl: Updated SASL authentication - * src/ejabberd_c2s.erl: Likewise - - * src/ejabberd_sm.erl: Better resource handling - - * src/jlib.hrl: Added NS_BIND macros - -2003-11-06 Alexey Shchepin <alexey@sevcom.net> - - * src/mod_configure2.erl: Added reporting of outgoing S2S - connections number - - * src/mod_disco.erl (get_outgoing_s2s): Minor fix - -2003-11-02 Alexey Shchepin <alexey@sevcom.net> - - * src/mod_configure2.erl: Yet another configure interface (not - completed yet) - -2003-11-01 Alexey Shchepin <alexey@sevcom.net> - - * src/mod_last.erl: Added remove_user/1 function - - * src/mod_configure.erl: Removing of user's stuff moved to - ejabberd_auth - * src/ejabberd_auth.erl: Likewise - -2003-10-31 Alexey Shchepin <alexey@sevcom.net> - - * src/mod_irc/mod_irc_connection.erl: Updated to work more - correctly with latest jlib - -2003-10-30 Alexey Shchepin <alexey@sevcom.net> - - * src/ejabberd_c2s.erl: More strong check for authenticated JID - - * src/mod_roster.erl: Bugfix - -2003-10-29 Alexey Shchepin <alexey@sevcom.net> - - * src/ejabberd_listener.erl: Fixed starting of SSL connection - - * src/ejabberd_s2s_in.erl: Partially rewriten - - * src/ejabberd_router.erl: More verbose error report - * src/ejabberd_local.erl: Likewise - * src/ejabberd_sm.erl: Likewise - - * src/ejabberd_s2s_out.erl: Updated to be compatible with R9C - - * src/ejabberd_c2s.erl: Minor fix - -2003-10-28 Alexey Shchepin <alexey@sevcom.net> - - * src/ejabberd_listener.erl: Added handling of accept errors, - added timeout value to ssl:accept - - * src/mod_vcard.erl: Added checks for all empty input fields - - * src/mod_offline.erl: More strong checks for stored packets - - * src/ejabberd_sm.erl: Bugfix - -2003-10-27 Alexey Shchepin <alexey@sevcom.net> - - * src/ejabberd_auth.erl: Minor change in check_password/4 - - * src/mod_roster.erl: Workaround for PSI bug with roster - - * src/ejabberd_logger_h.erl: Added support for log rotation - -2003-10-24 Alexey Shchepin <alexey@sevcom.net> - - * src/mod_offline.erl: Added function remove_old_messages/1 - - * src/mod_last.erl: jabber:iq:last support (JEP-0012) - * src/ejabberd_sm.erl: Likewise - - * src/jlib.hrl: Added NS_LAST macros - -2003-10-23 Alexey Shchepin <alexey@sevcom.net> - - * src/ejabberd_logger_h.erl: New error_logger handler - * src/ejabberd_app.erl: Now uses ejabberd_logger_h.erl - -2003-10-21 Alexey Shchepin <alexey@sevcom.net> - - * src/Makefile.in: Added install rule - - * src/jlib.erl: Added checks for JID parts length - -2003-10-20 Alexey Shchepin <alexey@sevcom.net> - - * src/mod_vcard.erl: Added checks for stringprep results - - * src/expat_erl.c: Workaround for EI encode_string bug - - * src/xml_stream.erl: Slightly changed protocol to expat driver - * src/expat_erl.c: Likewise - - * src/mod_configure.erl: Minor fix - -2003-10-19 Alexey Shchepin <alexey@sevcom.net> - - * doc/guide.tex: Fixed typo - - * src/ejabberd_local.erl: Added support for announce/online - messages - - * src/ejabberd.cfg.example: Updated - - * src/mod_register.erl: Added support for sending registration - notifications - -2003-10-18 Alexey Shchepin <alexey@sevcom.net> - - * src/ejabberd_service.erl: Added supports for multiple hosts per - service - - * src/Makefile.in: Minor fix - -2003-10-17 Alexey Shchepin <alexey@sevcom.net> - - * src/configure.ac: Build system now done using autoconf (thanks - to Balabanov Dmitry) - * src/aclocal.m4: Likewise - * src/**/Makefile.in: Likewise - - * src/mod_roster.erl (process_item_set_t): Slightly improved - performance - - * src/jd2ejd.erl: Added missed closing of XML stream process, - removed timeout value from import_file/1 - - * src/ejabberd_auth.erl: Added checks for invalid user name - -2003-10-16 Alexey Shchepin <alexey@sevcom.net> - - * src/mod_configure.erl: Fixed some error codes - - * src/cyrsasl_digest.erl: Bugfix (thanks to Justin Karneges) - -2003-10-14 Alexey Shchepin <alexey@sevcom.net> - - * src/ejabberd_local.erl: Bugfix - - * src/mod_register.erl: Added support for sending of "welcome" - message - * src/ejabberd.cfg.example: Updated - - * src/ejabberd_s2s_out.erl: Replaced "_jabber-server" with - "_xmpp-server" - -2003-10-12 Alexey Shchepin <alexey@sevcom.net> - - * doc/guide.tex: Updated - - * src/ejabberd_s2s_out.erl: Added support for IPv6 and - "_jabber-server.tcp" lookups - - * src/jlib.erl (string_to_jid1): Bugfix - - * src/ejabberd_config.erl: Now possible to specify path to config - file in command line - -2003-10-11 Alexey Shchepin <alexey@sevcom.net> - - * doc/guide.tex: Updated - - * src/ejabberd.cfg: Added "register" rule, added some comments, - this file renamed to ejabberd.cfg.example - - * src/mod_register.erl (try_register): Fixed error reply, added - check for "register" access rule - -2003-10-10 Alexey Shchepin <alexey@sevcom.net> - - * src/stringprep/Makefile.win32: Added Makefile for Win32 (thanks - to Sergei Golovan) - - * src/stringprep/stringprep_drv.c: Removed needless iconv.h - include - - * src/ejabberd_c2s.erl: Added filtering of presence packets with - privacy rules - - * src/mod_roster.erl (get_jid_info): Bugfix - - * src/ejabberd_app.erl: Removed periodical dumping of opened ports - -2003-10-09 Alexey Shchepin <alexey@sevcom.net> - - * src/ejabberd_c2s.erl: Added authentication logging - - * src/ejabberd_listener.erl: Added logging of accepted connections - - * src/stringprep/stringprep_drv.c: Cleanup - - * src/jd2ejd.erl: Added support for iq:private importing - - * src/mod_configure.erl: Fixed user removal - - * src/mod_private.erl: Added remove_user/1 - - * doc/guide.tex: Updated - - * src/mod_disco.erl: Added "extra_domains" option - -2003-10-08 Alexey Shchepin <alexey@sevcom.net> - - * src/ejabberd_c2s.erl: Added support for "jid-malformed" error - - * src/stringprep/stringprep_drv.c: Bugfix - -2003-10-07 Alexey Shchepin <alexey@sevcom.net> - - * (all): Changed JID storage format, added support for stringprep - - * src/stringprep/: Added support for Unicode normalization form KC - -2003-10-05 Alexey Shchepin <alexey@sevcom.net> - - * src/stringprep/: Added support for case convertion to multiple - characters - - * src/cyrsasl_digest.erl: Temporary removed "auth-int" QOP - -2003-09-28 Alexey Shchepin <alexey@sevcom.net> - - * src/stringprep/stringprep_drv.c: Added support for nameprep, - nodeprep and resourceprep - * src/stringprep/stringprep.erl: Likewise - - * src/ejabberd_sup.erl: Added loading of stringprep - - * src/ejabberd_sm.erl: Cleanup - -2003-09-26 Alexey Shchepin <alexey@sevcom.net> - - * src/stringprep/: Support for stringprep (not completed yet) - -2003-09-24 Alexey Shchepin <alexey@sevcom.net> - - * src/mod_muc/mod_muc.erl: Replaced io:format calls to ?DEBUG ones - -2003-09-19 Alexey Shchepin <alexey@sevcom.net> - - * src/mod_muc/mod_muc_room.erl: Debug output switched off - - * src/mod_disco.erl: Server identity changed to "service/im" - - * src/mod_register.erl: Fixed jabber:iq:register handler - registration, fixed registration removal processing - -2003-09-16 Alexey Shchepin <alexey@sevcom.net> - - * src/mod_disco.erl: Now only admin can discovery some nodes, - fixed "node" attribute in replies - -2003-09-10 Alexey Shchepin <alexey@sevcom.net> - - * examples/mtr/ejabberd.cfg: Updated (thanks to Marshall T. Rose) - * examples/mtr/ejabberd: Likewise - -2003-09-06 Alexey Shchepin <alexey@sevcom.net> - - * examples/mtr/ejabberd.cfg: Updated (thanks to Marshall T. Rose) - -2003-09-04 Alexey Shchepin <alexey@sevcom.net> - - * examples/mtr/*: Example config and scripts for NetBSD (thanks to - Marshall T. Rose) - -2003-09-03 Alexey Shchepin <alexey@sevcom.net> - - * src/ejabberd_s2s_in.erl: Fixed "id" attribute processing - * src/ejabberd_s2s_out.erl: Likewise - - * src/ejabberd_c2s.erl: Added sending of empty <stream:features/> - element after opening of authenticated stream - -2003-09-02 Alexey Shchepin <alexey@sevcom.net> - - * src/ejabberd_s2s_in.erl: Temporary hack for "id" attribute - processing - * src/ejabberd_s2s_out.erl: Likewise - -2003-08-30 Alexey Shchepin <alexey@sevcom.net> - - * src/ejabberd_listener.erl: Fixed SSL options - -2003-08-18 Alexey Shchepin <alexey@sevcom.net> - - * src/ejabberd_c2s.erl: Support for filtering of incoming messages - and IQs, presence filtering will be after some xmpp-im - clarifications - -2003-08-15 Alexey Shchepin <alexey@sevcom.net> - - * src/mod_muc/mod_muc.erl: Fixed handling of room names with - uppercase letters - - * src/mod_muc/mod_muc_room.erl: Added support for - password-protected rooms - -2003-08-12 Alexey Shchepin <alexey@sevcom.net> - - * src/mod_irc/mod_irc_connection.erl: Added handling for - jabber:iq:version and jabber:iq:time requests, participant address - now added to presence status - -2003-08-03 Alexey Shchepin <alexey@sevcom.net> - - * src/mod_privacy.erl: Privacy rules support (not completed yet) - * src/ejabberd_c2s.erl: Likewise - * src/mod_roster.erl: Likewise - -2003-07-27 Alexey Shchepin <alexey@sevcom.net> - - * src/mod_pubsub/mod_pubsub.erl (create_new_node): Bugfix - -2003-07-21 Alexey Shchepin <alexey@sevcom.net> - - * src/mod_vcard.erl: Bugfix - - * src/mod_roster.erl: Bugfix - - * src/jlib.hrl: Added iq:privacy namespace - - * src/mod_irc/mod_irc_connection.erl: Added support for NOTICE and - CODEPAGE commands, better support for QUIT and PART commands - (thanks to Oleg V. Motienko) - -2003-07-20 Alexey Shchepin <alexey@sevcom.net> - - * (all): Reorganized supervision tree - -2003-07-19 Alexey Shchepin <alexey@sevcom.net> - - * src/mod_register.erl: Bugfix - -2003-07-14 Alexey Shchepin <alexey@sevcom.net> - - * src/ejabberd_s2s_out.erl: Close connection after key - verification - - * src/ejabberd_c2s.erl: start replaced with start_link - * src/ejabberd_s2s_in.erl: Likewise - * src/ejabberd_s2s_out.erl: Likewise - * src/ejabberd_service.erl: Likewise - - * src/ejabberd_listener.erl: Now uses proc_lib to spawn listeners, - removed 3rd parameter in listener configuration (assumed to equal - start_link) - - * src/ejabberd.rel: Updated - - * doc/guide.tex: Small changes - - * doc/Makefile: Added implicit charset specification to hevea - -2003-07-12 Alexey Shchepin <alexey@sevcom.net> - - * doc/guide.tex: Updated (thanks to Sergei Golovan) - - * src/expat_erl.c: Added #ifdef for WIN32 (thanks to Sergei - Golovan) - * src/mod_irc/iconv_erl.c: Likewise - - * src/configure.erl: Defines ERLANG_DIR variable (thanks to Sergei - Golovan) - * **/Makefile: Use ERLANG_DIR (thanks to Sergei Golovan) - - * **/Makefile.win32: Makefiles for windows build (thanks to Sergei - Golovan) - * src/configure.bat: Configuration script for windows (thanks to - Sergei Golovan) - -2003-07-09 Alexey Shchepin <alexey@sevcom.net> - - * src/mod_pubsub/mod_pubsub.erl: Added suport for meta-node - "pubsub/nodes" - -2003-07-08 Alexey Shchepin <alexey@sevcom.net> - - * src/mod_pubsub/mod_pubsub.erl: Most of functions now works - -2003-07-07 Alexey Shchepin <alexey@sevcom.net> - - * src/mod_pubsub/mod_pubsub.erl: Pub/sub implementation (not - completed yet) - -2003-07-05 Alexey Shchepin <alexey@sevcom.net> - - * src/jlib.hrl: Added pub/sub namespaces - -2003-07-03 Alexey Shchepin <alexey@sevcom.net> - - * src/mod_irc/iconv_erl.c (iconv_erl_control): Bugfix - -2003-06-30 Alexey Shchepin <alexey@sevcom.net> - - * src/mod_muc/mod_muc_room.erl: Fixed room destroying - * src/mod_muc/mod_muc.erl: Likewise - -2003-06-29 Alexey Shchepin <alexey@sevcom.net> - - * src/jlib.hrl: Error stanzas updated to confirm latest xmpp-core - -2003-06-20 Alexey Shchepin <alexey@sevcom.net> - - * src/ejabberd_c2s.erl: Returned stream restarting - -2003-06-10 Alexey Shchepin <alexey@sevcom.net> - - * src/ejabberd_c2s.erl: Removed stream restarting - -2003-06-07 Alexey Shchepin <alexey@sevcom.net> - - * src/ejabberd_c2s.erl: SASL support updated to xmpp-core-13 - -2003-06-06 Alexey Shchepin <alexey@sevcom.net> - - * src/cyrsasl*.erl: Support for authzid - -2003-06-03 Alexey Shchepin <alexey@sevcom.net> - - * src/msgs/fr.msg: New french translation (thanks to Vincent Ricard) - -2003-05-31 Alexey Shchepin <alexey@sevcom.net> - - * src/jlib.hrl: Updated SASL namespace - -2003-05-29 Alexey Shchepin <alexey@sevcom.net> - - * src/ejabberd_service.erl: Proper handling of bad XML - - * src/mod_muc/mod_muc_room.erl: Append number of participants in - disco replies if requester allowed to see participant list - - * src/mod_muc/mod_muc.erl (iq_disco_items): Pass requester JID to - room process - - * src/mod_irc/mod_irc_connection.erl: Exit on receiving of - presence or message error - - * src/mod_irc/mod_irc_connection.erl (handle_info): Return - "feature not implemented" on iq request with unknown namespace - -2003-05-18 Alexey Shchepin <alexey@sevcom.net> - - * src/mod_muc/mod_muc.erl: Now body of message from admin to MUC - service is broadcasted to all conferences - * src/mod_muc/mod_muc_room.erl: Likewise - -2003-05-15 Alexey Shchepin <alexey@sevcom.net> - - * src/ejabberd_s2s.erl: Added error catching for do_route/3 - * src/ejabberd_local.erl: Likewise for do_route/4 - - * src/msgs/ru.msg: Updated - - * src/mod_muc/mod_muc_room.erl: New option to allow to view list - of participants for non-ones via disco#items - - * src/mod_muc/mod_muc_room.erl: Store room subject with - configuration options - -2003-05-14 Alexey Shchepin <alexey@sevcom.net> - - * src/mod_muc/mod_muc_room.erl: Remove user from room on receiving - of message or presence error from him - -2003-05-12 Alexey Shchepin <alexey@sevcom.net> - - * src/ejabberd_s2s_out.erl: Fixed error replies, added timeouts - * src/ejabberd_s2s_in.erl: Likewise - -2003-05-09 Alexey Shchepin <alexey@sevcom.net> - - * src/ejabberd_local.erl: Updated missed errors to new style - * src/mod_register.erl: Likewise - * src/mod_version.erl: Likewise - * src/mod_time.erl: Likewise - * src/mod_stats.erl: Likewise - * src/mod_register.erl: Likewise - * src/mod_private.erl: Likewise - * src/mod_configure.erl: Likewise - * src/ejabberd_sm.erl: Likewise - * src/ejabberd_service.erl: Likewise - * src/ejabberd_c2s.erl: Likewise - * src/ejabberd_s2s_out.erl: Likewise - * src/mod_vcard.erl: Likewise - * src/mod_roster.erl: Likewise - - * src/mod_muc/mod_muc.erl: Added vcard to mod_muc module - - * src/ejabberd_app.erl: Dump list of opened ports every hour - - * src/ejabberd.hrl: Added INFO_MSG macros, ERROR_LOG_PATH renamed - to LOG_PATH - -2003-05-08 Alexey Shchepin <alexey@sevcom.net> - - * src/mod_muc/mod_muc.erl: Denied usage of empty nick - -2003-05-07 Alexey Shchepin <alexey@sevcom.net> - - * src/mod_muc/mod_muc.erl: Return bad-request if no x:data form - submited with nick registration - - * src/mod_muc/mod_muc_room.erl: Don't check permissions on disco - info query processing - -2003-04-29 Alexey Shchepin <alexey@sevcom.net> - - * src/ejabberd_c2s.erl: Workaround to make SSL work properly - -2003-04-28 Alexey Shchepin <alexey@sevcom.net> - - * src/mod_irc/mod_irc_connection.erl: Fixed URL to ejabberd - -2003-04-17 Alexey Shchepin <alexey@sevcom.net> - - * src/mod_muc/mod_muc.erl: Support for nick registration - -2003-04-15 Alexey Shchepin <alexey@sevcom.net> - - * src/ejabberd_c2s.erl: Some fixes in work with socket - -2003-04-13 Alexey Shchepin <alexey@sevcom.net> - - * src/mod_muc/mod_muc_room.erl: Support for members-only - conferences, invitations. Bugfix in affiliation change processing - - * src/jlib.hrl: Added jabber:x:conference namespace definition - -2003-04-07 Alexey Shchepin <alexey@sevcom.net> - - * src/jlib.hrl: Added jaber:iq:auth:error namespace and - appropriate errors - * src/ejabberd_c2s.erl: Use auth:error in appropriate places - - * src/jlib.hrl: Changed stream error and stanza error namespace - names due to last XMPP Core changes - -2003-03-28 Alexey Shchepin <alexey@sevcom.net> - - * src/mod_muc/mod_muc_room.erl: Added support for grant/revoke - administrative/owner priveledges, fixed work with affiliations - -2003-03-27 Alexey Shchepin <alexey@sevcom.net> - - * src/ejabberd.cfg: Updated - - * src/mod_muc/mod_muc_room.erl: Support for service admin, - kick/ban reasons, more options - - * src/msgs/ru.msg: Added translations for MUC messages - - * src/ejabberd_s2s_in.erl: Bugfix - - * src/mod_muc/: Small fixes in discovering - -2003-03-26 Alexey Shchepin <alexey@sevcom.net> - - * src/mod_muc/: Support for discovering service and more - configuration options - -2003-03-25 Alexey Shchepin <alexey@sevcom.net> - - * src/mod_muc/: Support for more configuration options and - persistent rooms - -2003-03-23 Alexey Shchepin <alexey@sevcom.net> - - * src/mod_muc/: MUC support (not completed yet) - -2003-03-15 Alexey Shchepin <alexey@sevcom.net> - - * src/xml_stream.erl: Removed "link" which cause not improper - closing of xml connections - -2003-03-14 Alexey Shchepin <alexey@sevcom.net> - - * src/jlib.hrl: Added "invalid-namespace" error - * src/ejabberd_c2s.erl: Likewise - -2003-03-12 Alexey Shchepin <alexey@sevcom.net> - - * src/ejabberd_s2s_out.erl: Fixed ports leak - * src/ejabberd_listener.erl: Likewise - - * src/ejabberd_c2s.erl: Fixes for SASL support - - * src/cyrsasl.erl: Fixes - - * src/cyrsasl_digest.erl: DIGEST-MD5 SASL mechanism support - -2003-03-09 Alexey Shchepin <alexey@sevcom.net> - - * src/cyrsasl*.erl: SASL support (currently support only PLAIN - mechanism) - * src/ejabberd_c2s.erl: Likewise - - (all): Support for new-style error elements (except old errors - "Not Acceptable", "Not Found", "Invalid Namespace" and "Server - Connect Failed", so ejabberd may work unstable) - -2003-03-02 Alexey Shchepin <alexey@sevcom.net> - - * src/ejabberd_c2s.erl: More correct stream closing - -2003-02-27 Alexey Shchepin <alexey@sevcom.net> - - * src/mod_irc/mod_irc_connection.erl: Support for topic changes - -2003-02-24 Alexey Shchepin <alexey@sevcom.net> - - * src/mod_irc/mod_irc_connection.erl: /kick support - -2003-02-23 Alexey Shchepin <alexey@sevcom.net> - - * src/mod_irc/: Added configuration interface - - * src/mod_configure.erl: Use jabber:iq:data instead of - jabber:x:data - * src/mod_disco.erl: Likewise - -2003-02-22 Alexey Shchepin <alexey@sevcom.net> - - * src/mod_configure.erl: Backup management support - * src/mod_disco.erl: Likewise - -2003-02-21 Alexey Shchepin <alexey@sevcom.net> - - * src/mod_offline.erl: Now possible to unload this module - * src/ejabberd_sm.erl: Added checks to work correctly when - mod_offline not loaded - * src/ejabberd_c2s.erl: Likewise - - * src/mod_register.erl: Added support for users removal - - * src/ejabberd_auth.erl: Added function to remove user only if - specified password correct - - * src/mod_irc/mod_irc_connection.erl: Fixed bug with changing - availability status, added processing of "QUIT" message - -2003-02-20 Alexey Shchepin <alexey@sevcom.net> - - * src/mod_roster.erl: Fixed bug with handling of roster set - stanzas which contains CDATA - - * src/mod_irc/mod_irc_connection.erl (handle_info/3): Fixed - parsing of string that have "\n" line separators (not "\r\n") - -2003-02-18 Alexey Shchepin <alexey@sevcom.net> - - * src/mod_irc/: Added support for private chats, nicks changes and - error handling - -2003-02-17 Alexey Shchepin <alexey@sevcom.net> - - * src/mod_irc/: Still not completed... - -2003-02-16 Alexey Shchepin <alexey@sevcom.net> - - * src/mod_irc/: New IRC transport (not completed yet) - -2003-02-14 Alexey Shchepin <alexey@sevcom.net> - - * src/ejabberd_service.erl: Answer "Bad Request" on unknown tags - -2003-02-13 Alexey Shchepin <alexey@sevcom.net> - - * src/ejabberd_c2s.erl: Bugfix: close socket when stream is closed - - * src/mod_offline.erl: Now all offline packets processed in - separate queue to avoid delaying of other packets transmission. - Also all packets in queue processed in one transaction. - -2003-02-11 Alexey Shchepin <alexey@sevcom.net> - - * (all): Version 0.1-alpha released diff --git a/README b/README index e4940246f..f452bb184 100644 --- a/README +++ b/README @@ -8,16 +8,20 @@ Quickstart guide To compile ejabberd you need: - GNU Make - GCC - - libexpat 1.95 or higher - - Erlang/OTP R10B-9 up to R11B-5. Erlang R12 releases are not yet - officially supported, and are not recommended for production - servers + - Libexpat 1.95 or higher + - Erlang/OTP R10B-9 or higher. The recommended version is R12B-5. + Support for R13 is experimental. - OpenSSL 0.9.6 or higher, for STARTTLS, SASL and SSL encryption. Optional, highly recommended. - Zlib 1.2.3 or higher, for Stream Compression support (XEP-0138). Optional. + - Erlang mysql library. Optional. MySQL authentication/storage. + - Erlang pgsql library. Optional. PostgreSQL authentication/storage. + - PAM library. Optional. For Pluggable Authentication Modules (PAM). - GNU Iconv 1.8 or higher, for the IRC Transport (mod_irc). Optional. Not needed on systems with GNU Libc. + - ImageMagick’s Convert program. Optional. For CAPTCHA challenges. + - exmpp 0.9.1 or higher. Optional. For import/export XEP-0227 files. 1. Compile and install on *nix systems @@ -32,9 +36,11 @@ To install ejabberd, run this command with system administrator rights sudo make install These commands will: - - Install a startup script: /sbin/ejabberdctl - - Install ejabberd in /var/lib/ejabberd/ - 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/ diff --git a/contrib/ejabberd-modules.repo b/contrib/ejabberd-modules.repo index d25d350e0..dfd4a1d17 100644 --- a/contrib/ejabberd-modules.repo +++ b/contrib/ejabberd-modules.repo @@ -1,5 +1,5 @@ % List of ejabberd-modules to add for ejabberd packaging (source archive and installer) % % HTTP-binding: -https://svn.process-one.net/ejabberd-modules/http_bind/tags/ejabberd-2.0.0-beta1 -https://svn.process-one.net/ejabberd-modules/mod_http_fileserver/tags/ejabberd-2.0.0-beta1 +%https://svn.process-one.net/ejabberd-modules/http_bind/trunk +%https://svn.process-one.net/ejabberd-modules/mod_http_fileserver/trunk diff --git a/contrib/extract_translations/extract_translations.erl b/contrib/extract_translations/extract_translations.erl index 5c727e785..488357ba6 100644 --- a/contrib/extract_translations/extract_translations.erl +++ b/contrib/extract_translations/extract_translations.erl @@ -20,9 +20,14 @@ start() -> ets:new(translations, [named_table, public]), + ets:new(translations_obsolete, [named_table, public]), ets:new(files, [named_table, public]), ets:new(vars, [named_table, public]), case init:get_plain_arguments() of + ["-srcmsg2po", Dir, File] -> + print_po_header(File), + Status = process(Dir, File, srcmsg2po), + halt(Status); ["-unused", Dir, File] -> Status = process(Dir, File, unused), halt(Status); @@ -50,7 +55,11 @@ process(Dir, File, Used) -> unused -> ets:foldl(fun({Key, _}, _) -> io:format("~p~n", [Key]) - end, ok, translations); + end, ok, translations); + srcmsg2po -> + ets:foldl(fun({Key, Trans}, _) -> + print_translation_obsolete(Key, Trans) + end, ok, translations_obsolete); _ -> ok end, @@ -59,7 +68,7 @@ process(Dir, File, Used) -> parse_file(Dir, File, Used) -> ets:delete_all_objects(vars), - case epp:parse_file(File, [Dir, filename:dirname(File)], []) of + case epp:parse_file(File, [Dir, filename:dirname(File) | code:get_path()], []) of {ok, Forms} -> lists:foreach( fun(F) -> @@ -71,49 +80,57 @@ parse_file(Dir, File, Used) -> parse_form(Dir, File, Form, Used) -> case Form of + %%{undefined, Something} -> + %% io:format("Undefined: ~p~n", [Something]); {call, _, {remote, _, {atom, _, translate}, {atom, _, translate}}, - [_, {string, _, Str}] + [_, {string, Line, Str}] } -> - process_string(Dir, File, Str, Used); + process_string(Dir, File, Line, Str, Used); {call, _, {remote, _, {atom, _, translate}, {atom, _, translate}}, [_, {var, _, Name}] } -> case ets:lookup(vars, Name) of - [{_Name, Value}] -> - process_string(Dir, File, Value, Used); + [{_Name, Value, Line}] -> + process_string(Dir, File, Line, Value, Used); _ -> ok end; {match, _, {var, _, Name}, - {string, _, Value} + {string, Line, Value} } -> - ets:insert(vars, {Name, Value}); + ets:insert(vars, {Name, Value, Line}); L when is_list(L) -> lists:foreach( fun(F) -> - parse_form(Dir, File, F, Used) + parse_form(Dir, File, F, Used) end, L); T when is_tuple(T) -> lists:foreach( fun(F) -> - parse_form(Dir, File, F, Used) + parse_form(Dir, File, F, Used) end, tuple_to_list(T)); _ -> ok end. -process_string(_Dir, File, Str, Used) -> +process_string(_Dir, _File, _Line, "", _Used) -> + ok; + +process_string(_Dir, File, Line, Str, Used) -> case {ets:lookup(translations, Str), Used} of {[{_Key, _Trans}], unused} -> ets:delete(translations, Str); {[{_Key, _Trans}], used} -> ok; + {[{_Key, Trans}], srcmsg2po} -> + ets:delete(translations_obsolete, Str), + print_translation(File, Line, Str, Trans); {_, used} -> case ets:lookup(files, File) of [{_}] -> @@ -127,6 +144,15 @@ process_string(_Dir, File, Str, Used) -> _ -> io:format("{~p, \"\"}.~n", [Str]) end, ets:insert(translations, {Str, ""}); + {_, srcmsg2po} -> + case ets:lookup(files, File) of + [{_}] -> + ok; + _ -> + ets:insert(files, {File}) + end, + ets:insert(translations, {Str, ""}), + print_translation(File, Line, Str, ""); _ -> ok end. @@ -140,7 +166,8 @@ load_file(File) -> "" -> ok; _ -> - ets:insert(translations, {Orig, Trans}) + ets:insert(translations, {Orig, Trans}), + ets:insert(translations_obsolete, {Orig, Trans}) end end, Terms); Err -> @@ -191,3 +218,77 @@ print_usage() -> " extract_translations . ./msgs/ru.msg~n" ). + +%%% +%%% Gettext +%%% + +print_po_header(File) -> + MsgProps = get_msg_header_props(File), + {Language, [LastT | AddT]} = prepare_props(MsgProps), + application:load(ejabberd), + {ok, Version} = application:get_key(ejabberd, vsn), + print_po_header(Version, Language, LastT, AddT). + +get_msg_header_props(File) -> + {ok, F} = file:open(File, [read]), + Lines = get_msg_header_props(F, []), + file:close(F), + Lines. + +get_msg_header_props(F, Lines) -> + String = io:get_line(F, ""), + case io_lib:fread("% ", String) of + {ok, [], RemString} -> + case io_lib:fread("~s", RemString) of + {ok, [Key], Value} when Value /= "\n" -> + %% The first character in Value is a blankspace: + %% And the last characters are 'slash n' + ValueClean = string:substr(Value, 2, string:len(Value)-2), + get_msg_header_props(F, Lines ++ [{Key, ValueClean}]); + _ -> + get_msg_header_props(F, Lines) + end; + _ -> + Lines + end. + +prepare_props(MsgProps) -> + Language = proplists:get_value("Language:", MsgProps), + Authors = proplists:get_all_values("Author:", MsgProps), + {Language, Authors}. + +print_po_header(Version, Language, LastTranslator, AdditionalTranslatorsList) -> + AdditionalTranslatorsString = build_additional_translators(AdditionalTranslatorsList), + HeaderString = + "msgid \"\"\n" + "msgstr \"\"\n" + "\"Project-Id-Version: " ++ Version ++ "\\n\"\n" + ++ "\"X-Language: " ++ Language ++ "\\n\"\n" + "\"Last-Translator: " ++ LastTranslator ++ "\\n\"\n" + ++ AdditionalTranslatorsString ++ + "\"MIME-Version: 1.0\\n\"\n" + "\"Content-Type: text/plain; charset=UTF-8\\n\"\n" + "\"Content-Transfer-Encoding: 8bit\\n\"\n", + io:format("~s~n", [HeaderString]). + +build_additional_translators(List) -> + lists:foldl( + fun(T, Str) -> + Str ++ "\"X-Additional-Translator: " ++ T ++ "\\n\"\n" + end, + "", + List). + +print_translation(File, Line, Str, StrT) -> + {ok, StrQ, _} = regexp:gsub(Str, "\"", "\\\""), + {ok, StrTQ, _} = regexp:gsub(StrT, "\"", "\\\""), + io:format("#: ~s:~p~nmsgid \"~s\"~nmsgstr \"~s\"~n~n", [File, Line, StrQ, StrTQ]). + +print_translation_obsolete(Str, StrT) -> + File = "unknown.erl", + Line = 1, + {ok, StrQ, _} = regexp:gsub(Str, "\"", "\\\""), + {ok, StrTQ, _} = regexp:gsub(StrT, "\"", "\\\""), + io:format("#: ~s:~p~n#~~ msgid \"~s\"~n#~~ msgstr \"~s\"~n~n", [File, Line, StrQ, StrTQ]). + diff --git a/contrib/extract_translations/prepare-translation.sh b/contrib/extract_translations/prepare-translation.sh index 2fd895bf5..0ecb61139 100755 --- a/contrib/extract_translations/prepare-translation.sh +++ b/contrib/extract_translations/prepare-translation.sh @@ -3,16 +3,24 @@ # Frontend for ejabberd's extract_translations.erl # by Badlop +# How to create template files for a new language: +# NEWLANG=zh +# cp msgs/ejabberd.pot msgs/$NEWLANG.po +# echo \{\"\",\"\"\}. > msgs/$NEWLANG.msg +# ../../extract_translations/prepare-translation.sh -updateall + prepare_dirs () { # Where is Erlang binary ERL=`which erl` - EJA_DIR=`pwd`/../.. + EJA_SRC_DIR=$EJA_DIR/src/ + EJA_MSGS_DIR=$EJA_SRC_DIR/msgs/ EXTRACT_DIR=$EJA_DIR/contrib/extract_translations/ - EXTRACT_ERL=extract_translations.erl - EXTRACT_BEAM=extract_translations.beam - SRC_DIR=$EJA_DIR/src + EXTRACT_ERL=$EXTRACT_DIR/extract_translations.erl + EXTRACT_BEAM=$EXTRACT_DIR/extract_translations.beam + + SRC_DIR=$RUN_DIR/src MSGS_DIR=$SRC_DIR/msgs if !([[ -n $EJA_DIR ]]) @@ -22,9 +30,7 @@ prepare_dirs () if !([[ -x $EXTRACT_BEAM ]]) then - echo -n "Compiling extract_translations.erl: " sh -c "cd $EXTRACT_DIR; $ERL -compile $EXTRACT_ERL" - echo "ok" fi } @@ -76,14 +82,14 @@ extract_lang () extract_lang_all () { cd $MSGS_DIR - for i in *.msg; do + for i in $( ls *.msg ) ; do extract_lang $i; done echo -e "File\tMissing\tLanguage\t\tLast translator" echo -e "----\t-------\t--------\t\t---------------" cd $MSGS_DIR - for i in *.msg; do + for i in $( ls *.msg ) ; do MISSING=`cat $i.translate | grep "\", \"\"}." | wc -l` LANGUAGE=`grep "Language:" $i.translate | sed 's/% Language: //g'` LASTAUTH=`grep "Author:" $i.translate | head -n 1 | sed 's/% Author: //g'` @@ -140,6 +146,130 @@ find_unused_full () cd .. } +extract_lang_srcmsg2po () +{ + LANG=$1 + LANG_CODE=$LANG.$PROJECT + MSGS_PATH=$MSGS_DIR/$LANG_CODE.msg + PO_PATH=$MSGS_DIR/$LANG_CODE.po + + echo $MSGS_PATH + + $ERL -pa $EXTRACT_DIR -pa $SRC_DIR -pa $EJA_SRC_DIR -pa /lib/ejabberd/include -noinput -noshell -s extract_translations -s init stop -extra -srcmsg2po . $MSGS_PATH >$PO_PATH.1 + sed -e 's/ \[\]$/ \"\"/g;' $PO_PATH.1 > $PO_PATH.2 + msguniq --sort-by-file $PO_PATH.2 --output-file=$PO_PATH + + rm $PO_PATH.* +} + +extract_lang_src2pot () +{ + LANG_CODE=$PROJECT + MSGS_PATH=$MSGS_DIR/$LANG_CODE.msg + POT_PATH=$MSGS_DIR/$LANG_CODE.pot + + echo -n "" >$MSGS_PATH + echo "% Language: Language Name" >>$MSGS_PATH + echo "% Author: Translator name and contact method" >>$MSGS_PATH + echo "" >>$MSGS_PATH + + cd $SRC_DIR + $ERL -pa $EXTRACT_DIR -pa $SRC_DIR -pa $EJA_SRC_DIR -pa /lib/ejabberd/include -noinput -noshell -s extract_translations -s init stop -extra -srcmsg2po . $MSGS_PATH >$POT_PATH.1 + sed -e 's/ \[\]$/ \"\"/g;' $POT_PATH.1 > $POT_PATH.2 + + #msguniq --sort-by-file $POT_PATH.2 $EJA_MSGS_DIR --output-file=$POT_PATH + msguniq --sort-by-file $POT_PATH.2 --output-file=$POT_PATH + + rm $POT_PATH.* + rm $MSGS_PATH + + # If the project is a specific module, not the main ejabberd + if [[ $PROJECT != ejabberd ]] ; then + # Remove from project.pot the strings that are already present in the general ejabberd + EJABBERD_MSG_FILE=$EJA_MSGS_DIR/es.po # This is just some file with translated strings + POT_PATH_TEMP=$POT_PATH.temp + msgattrib --set-obsolete --only-file=$EJABBERD_MSG_FILE -o $POT_PATH_TEMP $POT_PATH + mv $POT_PATH_TEMP $POT_PATH + fi +} + +extract_lang_popot2po () +{ + LANG_CODE=$1 + PO_PATH=$MSGS_DIR/$LANG_CODE.po + POT_PATH=$MSGS_DIR/$PROJECT.pot + + msgmerge $PO_PATH $POT_PATH >$PO_PATH.translate 2>/dev/null + mv $PO_PATH.translate $PO_PATH +} + +extract_lang_po2msg () +{ + LANG_CODE=$1 + PO_PATH=$LANG_CODE.po + MS_PATH=$PO_PATH.ms + MSGID_PATH=$PO_PATH.msgid + MSGSTR_PATH=$PO_PATH.msgstr + MSGS_PATH=$LANG_CODE.msg + + cd $MSGS_DIR + + # Check PO has correct ~ + # Let's convert to C format so we can use msgfmt + PO_TEMP=$LANG_CODE.po.temp + cat $PO_PATH | sed 's/%/perc/g' | sed 's/~/%/g' | sed 's/#:.*/#, c-format/g' >$PO_TEMP + msgfmt $PO_TEMP --check-format + result=$? + rm $PO_TEMP + if [ $result -ne 0 ] ; then + exit 1 + fi + + msgattrib $PO_PATH --translated --no-fuzzy --no-obsolete --no-location --no-wrap | grep "^msg" | tail --lines=+3 >$MS_PATH + grep "^msgid" $PO_PATH.ms | sed 's/^msgid //g' >$MSGID_PATH + grep "^msgstr" $PO_PATH.ms | sed 's/^msgstr //g' >$MSGSTR_PATH + paste $MSGID_PATH $MSGSTR_PATH --delimiter=, | awk '{print "{" $0 "}."}' | sort -g >$MSGS_PATH + + rm $MS_PATH + rm $MSGID_PATH + rm $MSGSTR_PATH +} + +extract_lang_updateall () +{ + echo "Generating POT" + extract_lang_src2pot + + cd $MSGS_DIR + echo "" + echo -e "File Missing Language Last translator" + echo -e "---- ------- -------- ---------------" + for i in $( ls *.msg ) ; do + LANG_CODE=${i%.msg} + echo -n $LANG_CODE | awk '{printf "%-6s", $1 }' + + # Convert old MSG file to PO + PO=$LANG_CODE.po + [ -f $PO ] || extract_lang_srcmsg2po $LANG_CODE + + extract_lang_popot2po $LANG_CODE + extract_lang_po2msg $LANG_CODE + + MISSING=`msgfmt --statistics $PO 2>&1 | awk '{printf "%5s", $4 }'` + echo -n " $MISSING" + + LANGUAGE=`grep "Language:" $PO | sed 's/\"X-Language: //g' | sed 's/\\\\n\"//g' | awk '{printf "%-12s", $1}'` + echo -n " $LANGUAGE" + + LASTAUTH=`grep "Last-Translator" $PO | sed 's/\"Last-Translator: //g' | sed 's/\\\\n\"//g'` + echo " $LASTAUTH" + done + echo "" + rm messages.mo + + cd .. +} + translation_instructions () { echo "" @@ -158,34 +288,76 @@ translation_instructions () echo " $MSGS_PATH" } -case "$1" in - -help) - echo "Options:" - echo " -langall" - echo " -lang LANGUAGE_FILE" - echo "" - echo "Example:" - echo " ./prepare-translation.sh -lang es.msg" - exit 0 +EJA_DIR=`pwd`/.. +RUN_DIR=`pwd`/.. +PROJECT=ejabberd + +while [ $# -ne 0 ] ; do + PARAM=$1 + shift + case $PARAM in + --) break ;; + -project) + PROJECT=$1 + shift + ;; + -ejadir) + EJA_DIR=$1 + shift + ;; + -rundir) + RUN_DIR=$1 + shift ;; -lang) - LANGU=$2 + LANGU=$1 prepare_dirs extract_lang $LANGU shift - shift ;; -langall) prepare_dirs extract_lang_all + ;; + -srcmsg2po) + LANG_CODE=$1 + prepare_dirs + extract_lang_srcmsg2po $LANG_CODE shift ;; + -popot2po) + LANG_CODE=$1 + prepare_dirs + extract_lang_popot2po $LANG_CODE + shift + ;; + -src2pot) + prepare_dirs + extract_lang_src2pot + ;; + -po2msg) + LANG_CODE=$1 + prepare_dirs + extract_lang_po2msg $LANG_CODE + shift + ;; + -updateall) + prepare_dirs + extract_lang_updateall + ;; *) - echo "unknown option: '$1 $2'" - shift - shift + echo "Options:" + echo " -langall" + echo " -lang LANGUAGE_FILE" + echo " -srcmsg2po LANGUAGE Construct .msg file using source code to PO file" + echo " -src2pot Generate template POT file from source code" + echo " -popot2po LANGUAGE Update PO file with template POT file" + echo " -po2msg LANGUAGE Export PO file to MSG file" + echo " -updateall Generate POT and update all PO" + echo "" + echo "Example:" + echo " ./prepare-translation.sh -lang es.msg" + exit 0 ;; -esac - -echo "" -echo "End." + esac +done diff --git a/doc/Makefile b/doc/Makefile index bab623dcf..e0dec3789 100644 --- a/doc/Makefile +++ b/doc/Makefile @@ -3,12 +3,9 @@ SHELL = /bin/bash CONTRIBUTED_MODULES = "" -ifeq ($(shell ls mod_http_bind.tex),mod_http_bind.tex) - CONTRIBUTED_MODULES += "\\n\\setboolean{modhttpbind}{true}" -endif -ifeq ($(shell ls mod_http_fileserver.tex),mod_http_fileserver.tex) - CONTRIBUTED_MODULES += "\\n\\setboolean{modhttpfileserver}{true}" -endif +#ifeq ($(shell ls mod_http_bind.tex),mod_http_bind.tex) +# CONTRIBUTED_MODULES += "\\n\\setboolean{modhttpbind}{true}" +#endif all: release pdf html @@ -16,12 +13,12 @@ all: release pdf html release: @echo "Notes for the releaser:" @echo "* Do not forget to add a link to the release notes in guide.tex" - @echo "* Do not forget to update the version number in src/ejabberd.hrl!" + @echo "* Do not forget to update the version number in src/ejabberd.app!" @echo "* Do not forget to update the features in introduction.tex (including \new{} and \improved{} tags)." @echo "Press any key to continue" @read foo @echo "% ejabberd version (automatically generated)." > version.tex - @echo "\newcommand{\version}{"`sed '/VERSION/!d;s/\(.*\)"\(.*\)"\(.*\)/\2/' ../src/ejabberd.hrl`"}" >> version.tex + @echo "\newcommand{\version}{"`sed '/vsn/!d;s/\(.*\)"\(.*\)"\(.*\)/\2/' ../src/ejabberd.app`"}" >> version.tex @echo -n "% Contributed modules (automatically generated)." > contributed_modules.tex @echo -e "$(CONTRIBUTED_MODULES)" >> contributed_modules.tex @@ -32,7 +29,6 @@ pdf: guide.pdf features.pdf clean: rm -f *.aux rm -f *.haux - rm -f *.html rm -f *.htoc rm -f *.idx rm -f *.ilg @@ -41,6 +37,10 @@ clean: rm -f *.out rm -f *.pdf rm -f *.toc + [ ! -f contributed_modules.tex ] || rm contributed_modules.tex + +distclean: clean + rm -f *.html guide.html: guide.tex hevea -fix -pedantic guide.tex diff --git a/doc/api/Makefile b/doc/api/Makefile index a4c8dbb7c..de356ef20 100644 --- a/doc/api/Makefile +++ b/doc/api/Makefile @@ -1,5 +1,5 @@ APPNAME = ejabberd -VSN = $(shell sed '/VERSION/!d;s/\(.*\)"\(.*\)"\(.*\)/\2/' ../../src/ejabberd.hrl) +VSN = $(shell sed '/vsn/!d;s/\(.*\)"\(.*\)"\(.*\)/\2/' ../../src/ejabberd.app) DOCDIR=. SRCDIR=../../src diff --git a/doc/api/overview.edoc b/doc/api/overview.edoc index 55f7b1f68..89815c8c0 100644 --- a/doc/api/overview.edoc +++ b/doc/api/overview.edoc @@ -1,6 +1,6 @@ @author Mickael Remond <mickael.remond@process-one.net> [http://www.process-one.net/] -@copyright 2007 Process-one +@copyright 2007 ProcessOne @version {@vsn}, {@date} {@time} @title ejabberd Development API Documentation diff --git a/doc/api/process-one.css b/doc/api/process-one.css index 793d717aa..5cd371e10 100644 --- a/doc/api/process-one.css +++ b/doc/api/process-one.css @@ -71,10 +71,22 @@ pre, tt, code { } pre { - margin-left: 1em; + margin:1ex 2ex; + border:1px dashed lightgrey; + background-color:#f9f9f9; + padding:0.5ex; } pre em { font-style: normal; font-weight: bold; } + +dt { + margin:0ex 2ex; + font-weight:bold; +} + +dd { + margin:0ex 0ex 1ex 4ex; +} diff --git a/doc/dev.html b/doc/dev.html index a979f874e..78b7cb092 100644 --- a/doc/dev.html +++ b/doc/dev.html @@ -2,7 +2,7 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> <HTML> <HEAD> -<TITLE>Ejabberd 2.1.0-alpha Developers Guide +<TITLE>Ejabberd 2.1.0 Developers Guide @@ -49,7 +49,7 @@ TD P{margin:0px;}

-

+

Ejabberd 2.1.0-alpha Developers Guide

Alexey Shchepin
+

Ejabberd 2.1.0 Developers Guide

Alexey Shchepin
mailto:alexey@sevcom.net
xmpp:aleksey@jabber.ru

@@ -84,7 +84,7 @@ Kevin Smith, Current maintainer of the Psi project +

ejabberd is a free and open source instant messaging server written in Erlang/OTP.

ejabberd is cross-platform, distributed, fault-tolerant, and based on open standards to achieve real-time communication.

ejabberd is designed to be a rock-solid and feature rich XMPP server.

ejabberd is suitable for small deployments, whether they need to be scalable or not, as well as extremely big deployments.

1  Key Features

ejabberd is: @@ -98,7 +98,7 @@ Comprehensive documentation.

  • 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 24 languages.
    • Support for IDNA. +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.
  • 3  How it Works

    -

    A Jabber domain is served by one or more ejabberd nodes. These nodes can +

    A XMPP domain is served by one or more ejabberd nodes. These nodes can be run on different machines that are connected via a network. They all must have the ability to connect to port 4369 of all another nodes, and must have the same magic cookie (see Erlang/OTP documentation, in other words the file @@ -159,7 +159,7 @@ router;

  • session manager;
  • S2S manager;
  • -

    3.1  Router

    This module is the main router of Jabber packets on each node. It routes +

    3.1  Router

    This module is the main router of XMPP packets on each node. It routes them based on their destinations domains. It has two tables: local and global routes. First, domain of packet destination searched in local table, and if it found, then the packet is routed to appropriate process. If no, then it @@ -173,7 +173,7 @@ session manager, else it is processed depending on it’s content.

    -

    3.4  S2S Manager

    This module routes packets to other Jabber servers. First, it checks if an +

    3.4  S2S Manager

    This module routes packets to other XMPP servers. First, it checks if an open S2S connection from the domain of the packet source to the domain of packet destination already exists. If it is open on another node, then it routes the packet to S2S manager on that node, if it is open on this node, then diff --git a/doc/dev.tex b/doc/dev.tex index e94c6b708..f597d591e 100644 --- a/doc/dev.tex +++ b/doc/dev.tex @@ -26,6 +26,7 @@ \newcommand{\ns}[1]{\texttt{#1}} \newcommand{\ejabberd}{\texttt{ejabberd}} \newcommand{\Jabber}{Jabber} +\newcommand{\XMPP}{XMPP} %% Modules \newcommand{\module}[1]{\texttt{#1}} @@ -100,7 +101,7 @@ \label{howitworks} -A \Jabber{} domain is served by one or more \ejabberd{} nodes. These nodes can +A \XMPP{} domain is served by one or more \ejabberd{} nodes. These nodes can be run on different machines that are connected via a network. They all must have the ability to connect to port 4369 of all another nodes, and must have the same magic cookie (see Erlang/OTP documentation, in other words the file @@ -121,7 +122,7 @@ Each \ejabberd{} node have following modules: \subsection{Router} -This module is the main router of \Jabber{} packets on each node. It routes +This module is the main router of \XMPP{} packets on each node. It routes them based on their destinations domains. It has two tables: local and global routes. First, domain of packet destination searched in local table, and if it found, then the packet is routed to appropriate process. If no, then it @@ -147,7 +148,7 @@ the packet is sent to session manager on that node. \subsection{S2S Manager} -This module routes packets to other \Jabber{} servers. First, it checks if an +This module routes packets to other \XMPP{} servers. First, it checks if an open S2S connection from the domain of the packet source to the domain of packet destination already exists. If it is open on another node, then it routes the packet to S2S manager on that node, if it is open on this node, then diff --git a/doc/features.html b/doc/features.html index f549848df..36f8087d4 100644 --- a/doc/features.html +++ b/doc/features.html @@ -2,7 +2,7 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> -Ejabberd 2.1.0-alpha Feature Sheet +<TITLE>Ejabberd 2.1.0 Feature Sheet @@ -50,7 +50,7 @@ SPAN{width:20%; float:right; text-align:left; margin-left:auto;}

    -

    -

    Ejabberd 2.1.0-alpha Feature Sheet

    Sander Devrieze
    +

    Ejabberd 2.1.0 Feature Sheet

    Sander Devrieze
    mailto:s.devrieze@pandora.be
    xmpp:sander@devrieze.dyndns.org

    @@ -61,7 +61,7 @@ SPAN{width:20%; float:right; text-align:left; margin-left:auto;}
    I can thoroughly recommend ejabberd for ease of setup – Kevin Smith, Current maintainer of the Psi project

    Introduction

    I just tried out ejabberd and was impressed both by ejabberd itself and the language it is written in, Erlang. — -Joeri

    ejabberd is a free and open source instant messaging server written in Erlang.

    ejabberd is cross-platform, distributed, fault-tolerant, and based on open standards to achieve real-time communication.

    ejabberd is designed to be a rock-solid and feature rich XMPP server.

    ejabberd is suitable for small deployments, whether they need to be scalable or not, as well as extremely big deployments.

    +Joeri

    ejabberd is a free and open source instant messaging server written in Erlang/OTP.

    ejabberd is cross-platform, distributed, fault-tolerant, and based on open standards to achieve real-time communication.

    ejabberd is designed to be a rock-solid and feature rich XMPP server.

    ejabberd is suitable for small deployments, whether they need to be scalable or not, as well as extremely big deployments.

    Key Features

    Erlang seems to be tailor-made for writing stable, robust servers. — @@ -76,7 +76,7 @@ Comprehensive documentation.
  • 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 24 languages.
    • Support for IDNA. +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. @@ -118,7 +118,7 @@ Support for virtual hosting.
    • 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 via Pubsub. +
    • Publish-Subscribe component with support for Personal Eventing via Pubsub.
    • Support for web clients: HTTP Polling and HTTP Binding (BOSH) services.
    • IRC transport.
    • Component support: interface with networks such as AIM, ICQ and MSN installing special tranports. diff --git a/doc/features.tex b/doc/features.tex index 8b677a81f..1a512571f 100644 --- a/doc/features.tex +++ b/doc/features.tex @@ -70,7 +70,7 @@ %% Fancy header \fancyhf{} \pagestyle{fancy} -\rhead{\textcolor{ejblue}{The Expandable Jabber Daemon.}} +\rhead{\textcolor{ejblue}{The Expandable Jabber/XMPP Daemon.}} \renewcommand{\headrule}{{\color{ejblue}% \hrule width\headwidth height\headrulewidth \vskip-\headrulewidth}} \lhead{\setlength{\unitlength}{-6mm} @@ -133,4 +133,4 @@ % "What I find interesting is that *no* XMPP servers truly provide clustering. This includes all the commercial % servers. The one partial exception appears to be ejabberd, which can cluster certain data such as sessions, % but not all services such as MUC." -% * try it today: links to migration tutorials \ No newline at end of file +% * try it today: links to migration tutorials diff --git a/doc/guide.html b/doc/guide.html index 24e50c649..08f8bb14a 100644 --- a/doc/guide.html +++ b/doc/guide.html @@ -6,30 +6,13 @@ - ejabberd 2.1.0-alpha + ejabberd 2.1.0 Installation and Operation Guide - - - - - - - - - - - - - - - - - @@ -72,7 +55,17 @@ TD P{margin:0px;} .marginparright{float:right; margin-left:1ex; margin-right:0ex;} .theorem{text-align:left;margin:1ex auto 1ex 0ex;} .part{margin:2ex auto;text-align:center} -SPAN{width:20%; float:right; text-align:left; margin-left:auto;} +.SPAN{width:20%; float:right; text-align:left; margin-left:auto;} +H1.titlemain HR{display:none;} +TABLE.title{border-top:1px solid grey;border-bottom:1px solid grey; background: #efefef} +H1.chapter A, H2.section A, H3.subsection A, H4.subsubsection A, H5.paragraph A{color:#000000; text-decoration:none;} +H1.chapter, H2.section, H3.subsection, H4.subsubsection, H5.paragraph{border-top: 1px solid grey; background: #efefef; padding: 0.5ex} +pre.verbatim{margin:1ex 2ex;border:1px dashed lightgrey;background-color:#f9f9f9;padding:0.5ex;} +.dt-description{margin:0ex 2ex;} +table[border="1"]{border-collapse:collapse;margin-bottom:1em;} +table[border="1"] td{border:1px solid #aaa;padding:2px} +BLOCKQUOTE.table DIV.center DIV.center HR{display:none;} +BLOCKQUOTE.figure DIV.center DIV.center HR{display:none;} @@ -83,34 +76,17 @@ SPAN{width:20%; float:right; text-align:left; margin-left:auto;}


      - +
      ejabberd 2.1.0-alpha
      ejabberd 2.1.0
       
      Installation and Operation Guide



      -


      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -

      -
      ejabberd Development Team

  • +

    +

    Contents

    -
  • Chapter 7  Debugging +
  • 6.2  Clustering Setup +
  • 6.3  Service Load-Balancing -
  • Appendix A  Internationalization and Localization -
  • Appendix B  Release Notes -
  • Appendix C  Acknowledgements -
  • Appendix D  Copyright Information +
  • +
  • Chapter 7  Debugging + +
  • Appendix A  Internationalization and Localization +
  • Appendix B  Release Notes +
  • Appendix C  Acknowledgements +
  • Appendix D  Copyright Information
  • Chapter 1  Introduction

    -

    ejabberd is a free and open source instant messaging server written in Erlang.

    ejabberd is cross-platform, distributed, fault-tolerant, and based on open standards to achieve real-time communication.

    ejabberd is designed to be a rock-solid and feature rich XMPP server.

    ejabberd is suitable for small deployments, whether they need to be scalable or not, as well as extremely big deployments.

    +

    ejabberd is a free and open source instant messaging server written in Erlang/OTP.

    ejabberd is cross-platform, distributed, fault-tolerant, and based on open standards to achieve real-time communication.

    ejabberd is designed to be a rock-solid and feature rich XMPP server.

    ejabberd is suitable for small deployments, whether they need to be scalable or not, as well as extremely big deployments.

    1.1  Key Features

    ejabberd is: @@ -245,7 +234,7 @@ Comprehensive documentation.

  • 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 24 languages.
    • Support for IDNA. +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. -

    Chapter 2  Installing ejabberd

    -

    2.1  Installing ejabberd with Binary Installer

    Probably the easiest way to install an ejabberd instant messaging server -is using the binary installer published by Process-one. -The binary installers of released ejabberd versions -are available in the Process-one ejabberd downloads page: +

  • +

    Chapter 2  Installing ejabberd

    +

    2.1  Installing ejabberd with Binary Installer

    Probably the easiest way to install an ejabberd instant messaging server +is using the binary installer published by ProcessOne. +The binary installers of released ejabberd versions +are available in the ProcessOne ejabberd downloads page: http://www.process-one.net/en/ejabberd/downloads

    The installer will deploy and configure a full featured ejabberd server and does not require any extra dependencies.

    In *nix systems, remember to set executable the binary installer before starting it. For example: -

      chmod +x ejabberd-2.0.0_1-linux-x86-installer.bin
    -  ./ejabberd-2.0.0_1-linux-x86-installer.bin
    +

    chmod +x ejabberd-2.0.0_1-linux-x86-installer.bin
    +./ejabberd-2.0.0_1-linux-x86-installer.bin
     

    ejabberd can be started manually at any time, or automatically by the operating system at system boot time.

    To start and stop ejabberd manually, use the desktop shortcuts created by the installer. -If the machine doesn’t have a graphical system, use the scripts ’start’ +If the machine doesn’t have a graphical system, use the scripts ’start’ and ’stop’ in the ’bin’ directory where ejabberd is installed.

    The Windows installer also adds ejabberd as a system service, and a shortcut to a debug console for experienced administrators. -If you want ejabberd to be started automatically at boot time, +If you want ejabberd to be started automatically at boot time, go to the Windows service settings and set ejabberd to be automatically started. -Note that the Windows service is a feature still in development, -and for example it doesn’t read the file ejabberdctl.cfg.

    On a *nix system, if you want ejabberd to be started as daemon at boot time, +Note that the Windows service is a feature still in development, +and for example it doesn’t read the file ejabberdctl.cfg.

    On a *nix system, if you want ejabberd to be started as daemon at boot time, copy ejabberd.init from the ’bin’ directory to something like /etc/init.d/ejabberd -(depending on your distribution) and call /etc/inid.d/ejabberd start to start it.

    The ejabberdctl administration script is included in the bin directory. +(depending on your distribution). +Create a system user called ejabberd; +it will be used by the script to start the server. +Then you can call /etc/inid.d/ejabberd start as root to start the server.

    If ejabberd doesn’t start correctly in Windows, +try to start it using the shortcut in desktop or start menu. +If the window shows error 14001, the solution is to install: +"Microsoft Visual C++ 2005 SP1 Redistributable Package". +You can download it from +www.microsoft.com. +Then uninstall ejabberd and install it again.

    If ejabberd doesn’t start correctly and a crash dump is generated, +there was a severe problem. +You can try starting ejabberd with +the script bin/live.bat in Windows, +or with the command bin/ejabberdctl live in other Operating Systems. +This way you see the error message provided by Erlang +and can identify what is exactly the problem.

    The ejabberdctl administration script is included in the bin directory. Please refer to the section 4.1 for details about ejabberdctl, -and configurable options to fine tune the Erlang runtime system.

    -

    2.2  Installing ejabberd with Operating System specific packages

    Some Operating Systems provide a specific ejabberd package adapted to +and configurable options to fine tune the Erlang runtime system.

    +

    2.2  Installing ejabberd with Operating System Specific Packages

    Some Operating Systems provide a specific ejabberd package adapted to the system architecture and libraries. -It usually also checks dependencies +It usually also checks dependencies and performs basic configuration tasks like creating the initial administrator account. Some examples are Debian and Gentoo. Consult the resources provided by your Operating System for more information.

    Usually those packages create a script like /etc/init.d/ejabberd -to start and stop ejabberd as a service at boot time.

    -

    2.3  Installing ejabberd with CEAN

    CEAN +to start and stop ejabberd as a service at boot time.

    +

    2.3  Installing ejabberd with CEAN

    CEAN (Comprehensive Erlang Archive Network) is a repository that hosts binary packages from many Erlang programs, including ejabberd and all its dependencies. The binaries are available for many different system architectures, so this is an alternative to the binary installer and Operating System’s ejabberd packages.

    You will have to create your own ejabberd start -script depending of how you handle your CEAN installation. +script depending of how you handle your CEAN installation. The default ejabberdctl script is located -into ejabberd’s priv directory and can be used as an example.

    -

    2.4  Installing ejabberd from Source Code

    - +into ejabberd’s priv directory and can be used as an example.

    +

    2.4  Installing ejabberd from Source Code

    The canonical form for distribution of ejabberd stable releases is the source code package. -Compiling ejabberd from source code is quite easy in *nix systems, -as long as your system have all the dependencies.

    -

    2.4.1  Requirements

    - +Compiling ejabberd from source code is quite easy in *nix systems, +as long as your system have all the dependencies.

    +

    2.4.1  Requirements

    To compile ejabberd on a ‘Unix-like’ operating system, you need:

    • GNU Make
    • GCC
    • Libexpat 1.95 or higher -
    • Erlang/OTP R10B-9 up to R11B-5. Erlang R12 releases are not yet officially supported, and are not recommended for production servers. +
    • Erlang/OTP R10B-9 or higher. The recommended version is R12B-5. Support for R13 is experimental.
    • OpenSSL 0.9.6 or higher, for STARTTLS, SASL and SSL encryption. Optional, highly recommended. -
    • Zlib 1.2.3 or higher, for Stream Compression support (XEP-0138). Optional. -
    • GNU Iconv 1.8 or higher, for the IRC Transport (mod_irc). Optional. Not needed on systems with GNU Libc. -
    -

    2.4.2  Download Source Code

    - -

    Released versions of ejabberd are available in the Process-one ejabberd downloads page: +

  • Zlib 1.2.3 or higher, for Stream Compression support (XEP-0138). Optional. +
  • Erlang mysql library. Optional. For MySQL authentication or storage. See section 3.2.1. +
  • Erlang pgsql library. Optional. For PostgreSQL authentication or storage. See section 3.2.3. +
  • PAM library. Optional. For Pluggable Authentication Modules (PAM). See section 3.1.4. +
  • GNU Iconv 1.8 or higher, for the IRC Transport (mod_irc). Optional. Not needed on systems with GNU Libc. See section 3.3.8. +
  • ImageMagick’s Convert program. Optional. For CAPTCHA challenges. See section 3.1.8. +
  • exmpp 0.9.1 or higher. Optional. For import/export user data with XEP-0227 XML files. +
  • +

    2.4.2  Download Source Code

    +

    Released versions of ejabberd are available in the ProcessOne ejabberd downloads page: http://www.process-one.net/en/ejabberd/downloads

    Alternatively, the latest development version can be retrieved from the Subversion repository using this command: -

      svn co http://svn.process-one.net/ejabberd/trunk ejabberd
    -
    -

    2.4.3  Compile

    - +

    svn co http://svn.process-one.net/ejabberd/trunk ejabberd
    +

    +

    2.4.3  Compile

    To compile ejabberd execute the commands: -

      ./configure
    -  make
    -

    The build configuration script provides several parameters. +

    ./configure
    +make
    +

    The build configuration script allows several options. To get the full list run the command: -

      ./configure --help
    +

    ./configure --help
     

    Some options that you may be interested in modifying:

    - --prefix=/
    - Specify the path prefix where the files will be copied when running the make install command.

    --enable-pam
    - Enable the PAM authentication method.

    --enable-odbc or --enable-mssql
    + --prefix=/
    + Specify the path prefix where the files will be copied when running + the make install command.

    --enable-user[=USER]
    + Allow this normal system user to execute the ejabberdctl script + (see section 4.1), + read the configuration files, + read and write in the spool directory, + read and write in the log directory. + The account user and group must exist in the machine + before running make install. + This account doesn’t need an explicit HOME directory, because + /var/lib/ejabberd/ will be used by default.

    --enable-pam
    + Enable the PAM authentication method (see section 3.1.4).

    --enable-odbc or --enable-mssql
    Required if you want to use an external database. - See section 3.2 for more information.

    --enable-full-xml
    + See section 3.2 for more information.

    --enable-full-xml
    Enable the use of XML based optimisations. - It will for example use CDATA to escape characters in the XMPP stream. - Use this option only if you are sure your Jabber clients include a fully compliant XML parser.

    --disable-transient-supervisors
    - Disable the use of Erlang/OTP supervision for transient processes. -
    -

    2.4.4  Install

    - + It will for example use CDATA to escape characters in the XMPP stream. + Use this option only if you are sure your XMPP clients include a fully compliant XML parser.

    --disable-transient-supervisors
    + Disable the use of Erlang/OTP supervision for transient processes. +

    +

    2.4.4  Compiling ejabberd under Snow Leopard with Erlang R13B

    +

    Erl Interface, the library to link Erlang with C code, is compiled as +32-bits code in Erlang R13B-2. Mac OS X Snow Leopard is a 64-bits +system and will try compiling ejabberd C code in 64-bits as a default.

    To compile ejabberd on Mac OS X Snow Leopard with Erlang R13B-2, you +need to force C code to be compiled with 32-bits. This is done with +the following configure command:

    CC='gcc -m32' CFLAGS=-m32 LDFLAGS=-m32 ./configure
    +

    +

    2.4.5  Install

    To install ejabberd in the destination directories, run the command: -

      make install
    -

    Note that you may need to have administrative privileges in the system.

    The files and directories created are, by default: +

    make install
    +

    Note that you probably need administrative privileges in the system +to install ejabberd.

    The files and directories created are, by default:

    - /etc/ejabberd/
    Configuration files: + /etc/ejabberd/
    Configuration directory:
    ejabberd.cfg
    ejabberd configuration file
    ejabberdctl.cfg
    Configuration file of the administration script -
    inetrc
    Network DNS configuration +
    inetrc
    Network DNS configuration file
    -
    /sbin/ejabberdctl
    Administration script -
    /var/lib/ejabberd/
    +
    /lib/ejabberd/
    - .erlang.cookie
    Erlang cookie file -
    db
    Mnesia database spool files -
    ebin
    Binary Erlang files (*.beam) -
    priv
    + ebin/
    Erlang binary files (*.beam) +
    include/
    Erlang header files (*.hrl) +
    priv/
    Additional files required at runtime
    - lib
    Binary system libraries (*.so) -
    msgs
    Translated strings (*.msgs) + bin/
    Executable programs +
    lib/
    Binary system libraries (*.so) +
    msgs/
    Translation files (*.msgs)
    -
    /var/log/ejabberd/
    Log files (see section 7.2): +
    /sbin/ejabberdctl
    Administration script (see section 4.1) +
    /share/doc/ejabberd/
    Documentation of ejabberd +
    /var/lib/ejabberd/
    Spool directory: +
    + .erlang.cookie
    Erlang cookie file (see section 5.3) +
    acl.DCD, ...
    Mnesia database spool files (*.DCD, *.DCL, *.DAT) +
    +
    /var/log/ejabberd/
    Log directory (see section 7.1):
    ejabberd.log
    ejabberd service log -
    sasl.log
    Erlang/OTP system log +
    erlang.log
    Erlang/OTP system log
    -
    -

    2.4.5  Start

    - -

    You can use the ejabberdctl command line administration script to start and stop ejabberd.

    Usage example: -

    $ ejabberdctl start
    +

    +

    2.4.6  Start

    +

    You can use the ejabberdctl command line administration script to start and stop ejabberd. +If you provided the configure option --enable-user=USER (see 2.4.3), +you can execute ejabberdctl with either that system account or root.

    Usage example: +

    ejabberdctl start
     
    -$ ejabberdctl status
    -Node ejabberd@localhost is started. Status: started
    -ejabberd is running
    +ejabberdctl status
    +The node ejabberd@localhost is started with status: started
    +ejabberd is running in that node
     
    -$ ejabberdctl stop
    -

    Please refer to the section 4.1 for details about ejabberdctl, -and configurable options to fine tune the Erlang runtime system.

    -

    2.4.6  Specific Notes for BSD

    - +ejabberdctl stop +

    If ejabberd doesn’t start correctly and a crash dump is generated, +there was a severe problem. +You can try starting ejabberd with +the command ejabberdctl live +to see the error message provided by Erlang +and can identify what is exactly the problem.

    Please refer to the section 4.1 for details about ejabberdctl, +and configurable options to fine tune the Erlang runtime system.

    If you want ejabberd to be started as daemon at boot time, +copy ejabberd.init to something like /etc/init.d/ejabberd +(depending on your distribution). +Create a system user called ejabberd; +it will be used by the script to start the server. +Then you can call /etc/inid.d/ejabberd start as root to start the server.

    +

    2.4.7  Specific Notes for BSD

    The command to compile ejabberd in BSD systems is: -

      gmake
    -
    -

    2.4.7  Specific Notes for Microsoft Windows

    - -

    -

    Requirements

    -

    To compile ejabberd on a Microsoft Windows system, you need: +

    gmake
    +

    +

    2.4.8  Specific Notes for Sun Solaris

    +

    You need to have GNU install, +but it isn’t included in Solaris. +It can be easily installed if your Solaris system +is set up for blastwave.org +package repository. +Make sure /opt/csw/bin is in your PATH and run: +

    pkg-get -i fileutils
    +

    If that program is called ginstall, +modify the ejabberd Makefile script to suit your system, +for example: +

    cat Makefile | sed s/install/ginstall/ > Makefile.gi
    +

    And finally install ejabberd with: +

    gmake -f Makefile.gi ginstall
    +

    +

    2.4.9  Specific Notes for Microsoft Windows

    +

    +

    Requirements

    To compile ejabberd on a Microsoft Windows system, you need:

    -

    Compilation

    -

    We assume that we will try to put as much library as possible into C:\sdk\ to make it easier to track what is install for ejabberd.

    1. +
    2. +

      Compilation

      We assume that we will try to put as much library as possible into C:\sdk\ to make it easier to track what is install for ejabberd.

      1. Install Erlang emulator (for example, into C:\sdk\erl5.5.5).
      2. Install Expat library into C:\sdk\Expat-2.0.0 directory.

        Copy file C:\sdk\Expat-2.0.0\Libs\libexpat.dll @@ -452,52 +502,50 @@ directory, you can add the directories C:\sdk\GnuWin32\bin to the PATH environment variable.

      3. Install OpenSSL in C:\sdk\OpenSSL and add C:\sdk\OpenSSL\lib\VC to your path or copy the binaries to your system directory. -
      4. Install ZLib in C:\sdk\gnuWin32. Copy -C:\sdk\GnuWin32\bin\zlib1.dll to your system directory. If you change your path it should already be set after libiconv install. -
      5. Make sure the you can access Erlang binaries from your path. For example: set PATH=%PATH%;"C:\sdk\erl5.5.5\bin" +
      6. Install ZLib in C:\sdk\gnuWin32. Copy +C:\sdk\GnuWin32\bin\zlib1.dll to your system directory. If you change your path it should already be set after libiconv install. +
      7. Make sure the you can access Erlang binaries from your path. For example: set PATH=%PATH%;"C:\sdk\erl5.6.5\bin"
      8. Depending on how you end up actually installing the library you might need to check and tweak the paths in the file configure.erl.
      9. While in the directory ejabberd\src run:
        configure.bat
         nmake -f Makefile.win32
         
      10. Edit the file ejabberd\src\ejabberd.cfg and run
        werl -s ejabberd -name ejabberd
        -
      -

      2.5  Create a Jabber Account for Administration

      -

      You need a Jabber account and grant him administrative privileges +

    +

    2.5  Create a XMPP Account for Administration

    You need a XMPP account and grant him administrative privileges to enter the ejabberd Web Admin:

    1. -Register a Jabber account on your ejabberd server, for example admin1@example.org. -There are two ways to register a Jabber account: +Register a XMPP account on your ejabberd server, for example admin1@example.org. +There are two ways to register a XMPP account:
      1. Using ejabberdctl (see section 4.1): -
        % ejabberdctl register admin1 example.org FgT5bk3
        -
      2. Using a Jabber client and In-Band Registration (see section 3.3.15). +
        ejabberdctl register admin1 example.org FgT5bk3
        +
      3. Using a XMPP client and In-Band Registration (see section 3.3.18).
      -
    2. Edit the ejabberd configuration file to give administration rights to the Jabber account you created: -
        {acl, admins, {user, "admin1", "example.org"}}.
      -  {access, configure, [{allow, admins}]}.
      -
      You can grant administrative privileges to many Jabber accounts, -and also to accounts in other Jabber servers. +
    3. Edit the ejabberd configuration file to give administration rights to the XMPP account you created: +
      {acl, admins, {user, "admin1", "example.org"}}.
      +{access, configure, [{allow, admins}]}.
      +
      You can grant administrative privileges to many XMPP accounts, +and also to accounts in other XMPP servers.
    4. Restart ejabberd to load the new configuration.
    5. Open the Web Admin (http://server:port/admin/) in your favourite browser. Make sure to enter the full JID as username (in this example: admin1@example.org. The reason that you also need to enter the suffix, is because ejabberd’s virtual hosting support. -
    -

    2.6  Upgrading ejabberd

    To upgrade an ejabberd installation to a new version, +

    +

    2.6  Upgrading ejabberd

    To upgrade an ejabberd installation to a new version, simply uninstall the old version, and then install the new one. -Of course, it is important that the configuration file +Of course, it is important that the configuration file and Mnesia database spool directory are not removed.

    ejabberd automatically updates the Mnesia table definitions at startup when needed. If you also use an external database for storage of some modules, check if the release notes of the new ejabberd version -indicates you need to also update those tables.

    -

    Chapter 3  Configuring ejabberd

    -

    3.1  Basic Configuration

    - -

    The configuration file will be loaded the first time you start ejabberd. The +indicates you need to also update those tables.

    +

    Chapter 3  Configuring ejabberd

    +

    +

    3.1  Basic Configuration

    The configuration file will be loaded the first time you start ejabberd. The content from this file will be parsed and stored in the internal ejabberd database. Subsequently the configuration will be loaded from the database and any commands in the -configuration file are appended to the entries in the database.

    Note that ejabberd never edits the configuration file. +configuration file are appended to the entries in the database.

    Note that ejabberd never edits the configuration file. So, the configuration changes done using the Web Admin are stored in the database, but are not reflected in the configuration file. If you want those changes to be use after ejabberd restart, you can either @@ -506,44 +554,38 @@ edit the configuration file, or remove all its content.

    The configuration the name of an option, and any further elements are that option’s values. If the configuration file do not contain for instance the ‘hosts’ option, the old host name(s) stored in the database will be used.

    You can override the old values stored in the database by adding next lines to -the configuration file: -

      override_global.
    -  override_local.
    -  override_acls.
    +the beginning of the configuration file:
    +

    override_global.
    +override_local.
    +override_acls.
     

    With these lines the old global options (shared between all ejabberd nodes in a cluster), local options (which are specific for this particular ejabberd node) -and ACLs will be removed before new ones are added.

    -

    3.1.1  Host Names

    - +and ACLs will be removed before new ones are added.

    +

    3.1.1  Host Names

    The option hosts defines a list containing one or more domains that -ejabberd will serve.

    Examples: +ejabberd will serve.

    The syntax is: +

    {hosts, [HostName, ...]}.

    Examples:

    • Serving one domain: -
        {hosts, ["example.org"]}.
      -
    • Serving one domain, and backwards compatible with older ejabberd -versions: -
        {host, "example.org"}.
      -
    • Serving two domains: -
        {hosts, ["example.net", "example.com"]}.
      -
    -

    3.1.2  Virtual Hosting

    - +

    {hosts, ["example.org"]}.
    +
  • Serving three domains: +
    {hosts, ["example.net", "example.com", "jabber.somesite.org"]}.
    +
  • +

    3.1.2  Virtual Hosting

    Options can be defined separately for every virtual host using the -host_config option. It has the following -syntax: -

      {host_config, <hostname>, [<option>, <option>, ...]}.
    -

    Examples: +host_config option.

    The syntax is: +

    {host_config, HostName, [Option, ...]}

    Examples:

    • Domain example.net is using the internal authentication method while domain example.com is using the LDAP server running on the domain localhost to perform authentication: -
      {host_config, "example.net", [{auth_method, internal}]}.
      +
      {host_config, "example.net", [{auth_method,   internal}]}.
       
      -{host_config, "example.com", [{auth_method, ldap},
      -                              {ldap_servers, ["localhost"]},
      -                              {ldap_uids, [{"uid"}]},
      -                              {ldap_rootdn, "dc=localdomain"},
      -                              {ldap_rootdn, "dc=example,dc=com"},
      +{host_config, "example.com", [{auth_method,   ldap},
      +                              {ldap_servers,  ["localhost"]},
      +                              {ldap_uids,     [{"uid"}]},
      +                              {ldap_rootdn,   "dc=localdomain"},
      +                              {ldap_rootdn,   "dc=example,dc=com"},
                                     {ldap_password, ""}]}.
       
    • Domain example.net is using ODBC to perform authentication while domain example.com is using the LDAP servers running on the domains @@ -551,25 +593,24 @@ while domain example.com is using the LDAP servers running on the domai
      {host_config, "example.net", [{auth_method, odbc},
                                     {odbc_server, "DSN=ejabberd;UID=ejabberd;PWD=ejabberd"}]}.
       
      -{host_config, "example.com", [{auth_method, ldap},
      -                              {ldap_servers, ["localhost", "otherhost"]},
      -                              {ldap_uids, [{"uid"}]},
      -                              {ldap_rootdn, "dc=localdomain"},
      -                              {ldap_rootdn, "dc=example,dc=com"},
      +{host_config, "example.com", [{auth_method,   ldap},
      +                              {ldap_servers,  ["localhost", "otherhost"]},
      +                              {ldap_uids,     [{"uid"}]},
      +                              {ldap_rootdn,   "dc=localdomain"},
      +                              {ldap_rootdn,   "dc=example,dc=com"},
                                     {ldap_password, ""}]}.
       

    To define specific ejabberd modules in a virtual host, you can define the global modules option with the common modules, and later add specific modules to certain virtual hosts. -To accomplish that, instead of defining each option in host_config with the syntax -

      {<option-name>, <option-value>}
    -

    use this syntax: -

      {{add, <option-name>}, <option-value>}
    -

    In this example three virtual hosts have some similar modules, but there are also +To accomplish that, instead of defining each option in host_config with the general syntax +

    {OptionName, OptionValue}

    +use this syntax: +

    {{add, OptionName}, OptionValue}

    In this example three virtual hosts have some similar modules, but there are also other different modules for some specific virtual hosts: -

    % This ejabberd server has three vhosts:
    +

    %% This ejabberd server has three vhosts:
     {hosts, ["one.example.org", "two.example.org", "three.example.org"]}.
     
    -% Configuration of modules that are common to all vhosts
    +%% Configuration of modules that are common to all vhosts
     {modules,
      [
       {mod_roster,     []},
    @@ -581,87 +622,139 @@ other different modules for some specific virtual hosts:
       {mod_version,    []}
      ]}.
     
    -% Add some modules to vhost one:
    -{host_config, "one.example.org", [{{add, modules}, [
    -  {mod_echo,       [{host, "echo-service.one.example.org"}]}
    -  {mod_http_bind,  []},
    -  {mod_logxml,     []}
    -]}]}.
    +%% Add some modules to vhost one:
    +{host_config, "one.example.org",
    + [{{add, modules}, [
    +                    {mod_echo,       [{host, "echo-service.one.example.org"}]}
    +                    {mod_http_bind,  []},
    +                    {mod_logxml,     []}
    +                   ]
    +  }
    + ]}.
     
    -% Add a module just to vhost two:
    -{host_config, "two.example.org", [{{add, modules}, [
    -  {mod_echo,       [{host, "mirror.two.example.org"}]}
    -]}]}.
    -
    -

    3.1.3  Listening Ports

    - -

    The option listen defines for which addresses and ports ejabberd +%% Add a module just to vhost two: +{host_config, "two.example.org", + [{{add, modules}, [ + {mod_echo, [{host, "mirror.two.example.org"}]} + ] + } + ]}. +

    +

    3.1.3  Listening Ports

    +

    The option listen defines for which ports, addresses and network protocols ejabberd will listen and what services will be run on them. Each element of the list is a tuple with the following elements:

    • -Port number. -
    • Module that serves this port. -
    • Options to this module. -

    +Port number. Optionally also the IP address and/or a transport protocol. +

  • Listening module that serves this port. +
  • Options for the TCP socket and for the listening module. +
  • The option syntax is: +

    {listen, [Listener, ...]}.

    To define a listener there are several syntax. +

    {PortNumber, Module, [Option, ...]}
    {{PortNumber, IPaddress}, Module, [Option, ...]}
    {{PortNumber, TransportProtocol}, Module, [Option, ...]}
    {{PortNumber, IPaddress, TransportProtocol}, Module, [Option, ...]}

    +

    Port Number, IP Address and Transport Protocol

    The port number defines which port to listen for incoming connections. +It can be a Jabber/XMPP standard port +(see section 5.1) or any other valid port number.

    The IP address can be represented with a string +or an Erlang tuple with decimal or hexadecimal numbers. +The socket will listen only in that network interface. +It is possible to specify a generic address, +so ejabberd will listen in all addresses. +Depending in the type of the IP address, IPv4 or IPv6 will be used. +When not specified the IP address, it will listen on all IPv4 network addresses.

    Some example values for IP address: +

    • +"0.0.0.0" to listen in all IPv4 network interfaces. This is the default value when no IP is specified. +
    • "::" to listen in all IPv6 network interfaces +
    • "10.11.12.13" is the IPv4 address 10.11.12.13 +
    • "::FFFF:127.0.0.1" is the IPv6 address ::FFFF:127.0.0.1/128 +
    • {10, 11, 12, 13} is the IPv4 address 10.11.12.13 +
    • {0, 0, 0, 0, 0, 65535, 32512, 1} is the IPv6 address ::FFFF:127.0.0.1/128 +
    • {16#fdca, 16#8ab6, 16#a243, 16#75ef, 0, 0, 0, 1} is the IPv6 address FDCA:8AB6:A243:75EF::1/128 +

    The transport protocol can be tcp or udp. +Default is tcp.

    +

    Listening Module

    The available modules, their purpose and the options allowed by each one are: -


    - - - - - - - - - -
    ejabberd_c2sDescriptionHandles c2s connections.
     Optionsaccess, certfile, inet6, -ip, max_stanza_size, shaper, -starttls, starttls_required, tls, -zlib
    ejabberd_s2s_inDescriptionHandles incoming s2s -connections.
     Optionsinet6, ip, -max_stanza_size
    ejabberd_serviceDescriptionInteracts with -external components -(as defined in the Jabber Component Protocol (XEP-0114).
     Optionsaccess, hosts, inet6, -ip, shaper, service_check_from
    ejabberd_httpDescriptionHandles incoming HTTP -connections.
     Optionscertfile, http_bind, http_poll, -inet6, ip, request_handlers, tls, web_admin
    -

    This is a detailed description of each option allowed by the listening modules:

    -{access, <access rule>}
    This option defines +ejabberd_c2s
    +Handles c2s connections.
    + Options: access, certfile, +max_stanza_size, shaper, +starttls, starttls_required, tls, +zlib +
    ejabberd_s2s_in
    +Handles incoming s2s connections.
    + Options: max_stanza_size +
    ejabberd_service
    +Interacts with an external component +(as defined in the Jabber Component Protocol (XEP-0114).
    + Options: access, hosts, max_fsm_queue, +shaper, service_check_from +
    ejabberd_stun
    +Handles STUN Binding requests as defined in +RFC 5389.
    + Options: certfile +
    ejabberd_http
    +Handles incoming HTTP connections.
    + Options: captcha, certfile, http_bind, http_poll, +request_handlers, tls, web_admin
    +

    +

    Options

    This is a detailed description of each option allowed by the listening modules: +

    +{access, AccessName}
    This option defines access to the port. The default value is all. +
    {backlog, Value}
    The backlog value +defines the maximum length that the queue of pending connections may +grow to. This should be increased if the server is going to handle +lots of new incoming connections as they may be dropped if there is +no space in the queue (and ejabberd was not able to accept them +immediately). Default value is 5.
    {certfile, Path}
    Full path to a file containing the default SSL certificate. To define a certificate file specific for a given domain, use the global option domain_certfile. -
    component_check_from
    +
    {service_check_from, true|false}
    This option can be used with ejabberd_service only. It is used to disable control on the from field on packets send by an external components. The option can be either true or -false. The default value is true which conforms to XEP-0114. -
    {hosts, [Hostnames], [HostOptions]}
    This option -defines one or more hostnames of connected services and enables you to -specify additional options including {password, Secret}. +false. The default value is true which conforms to XEP-0114. +
    {hosts, [Hostname, ...], [HostOption, ...]}
    +The external Jabber component that connects to this ejabberd_service +can serve one or more hostnames. +As HostOption you can define options for the component; +currently the only allowed option is the password required to the component +when attempt to connect to ejabberd: {password, Secret}. +Note that you cannot define in a single ejabberd_service components of +different services: add an ejabberd_service for each service, +as seen in an example below. +
    captcha
    +Simple web page that allows a user to fill a CAPTCHA challenge (see section 3.1.8).
    http_bind
    -This option enables HTTP Binding (XEP-0124 and XEP-0206) support. HTTP Bind +This option enables HTTP Binding (XEP-0124 and XEP-0206) support. HTTP Bind enables access via HTTP requests to ejabberd from behind firewalls which do not allow outgoing sockets on port 5222.

    Remember that you must also install and enable the module mod_http_bind.

    If HTTP Bind is enabled, it will be available at http://server:port/http-bind/. Be aware that support for HTTP Bind -is also needed in the Jabber client. Remark also that HTTP Bind can be -interesting to host a web-based Jabber client such as -JWChat (there is a tutorial to -install JWChat with -instructions for ejabberd). +is also needed in the XMPP client. Remark also that HTTP Bind can be +interesting to host a web-based XMPP client such as +JWChat +(check the tutorials to install JWChat with ejabberd and an +embedded local web server +or Apache).

    http_poll
    -This option enables HTTP Polling (XEP-0025) support. HTTP Polling +This option enables HTTP Polling (XEP-0025) support. HTTP Polling enables access via HTTP requests to ejabberd from behind firewalls which do not allow outgoing sockets on port 5222.

    If HTTP Polling is enabled, it will be available at http://server:port/http-poll/. Be aware that support for HTTP Polling -is also needed in the Jabber client. Remark also that HTTP Polling can be -interesting to host a web-based Jabber client such as -JWChat (there is a tutorial to -install JWChat with -instructions for ejabberd). -

    inet6
    Set up the socket for IPv6. -
    {ip, IPAddress}
    This option specifies which network -interface to listen for. For example {ip, {192, 168, 1, 1}}. +is also needed in the XMPP client. Remark also that HTTP Polling can be +interesting to host a web-based XMPP client such as +JWChat.

    The maximum period of time to keep a client session active without +an incoming POST request can be configured with the global option +http_poll_timeout. The default value is five minutes. +The option can be defined in ejabberd.cfg, expressing the time +in seconds: {http_poll_timeout, 300}. +

    {max_fsm_queue, Size}
    +This option specifies the maximum number of elements in the queue of the FSM. +This option can be specified for an ejabberd_service listener, +or also globally for ejabberd_s2s_out. +If the option is not specified for an ejabberd_service listener, +the globally configured value is used. +The allowed values are integers and ’undefined’. +Default value: ’undefined’.
    {max_stanza_size, Size}
    This option specifies an approximate maximum size in bytes of XML stanzas. Approximate, @@ -671,17 +764,17 @@ value is infinity. Recommended values are 65536 for c2s connections and 131072 for s2s connections. s2s max stanza size must always much higher than c2s limit. Change this value with extreme care as it can cause unwanted disconnect if set too low. -
    {request_handlers, [{Path, Module}]}
    To define one or several handlers that will serve HTTP requests. +
    {request_handlers, [ {Path, Module}, ...]}
    To define one or several handlers that will serve HTTP requests. The Path is a list of strings; so the URIs that start with that Path will be served by Module. For example, if you want mod_foo to serve the URIs that start with /a/b/, and you also want mod_http_bind to serve the URIs /http-bind/, use this option: {request_handlers, [{["a", "b"], mod_foo}, {["http-bind"], mod_http_bind}]}
    {service_check_from, true|false}
    By enabling this option, ejabberd allows the component to send packets with any arbitrary domain in the ’from’ attribute. -Note that XEP-0114 requires that the domain must match the hostname of the component. +Note that XEP-0114 requires that the domain must match the hostname of the component. Only enable this option if you are completely sure you need to enable it. Default value: false. -
    {shaper, <access rule>}
    This option defines a +
    {shaper, none|ShaperName}
    This option defines a shaper for the port (see section 3.1.6). The default value is none.
    starttls
    This option @@ -690,24 +783,27 @@ You should also set the certfile option. You can define a certificate file for a specific domain using the global option domain_certfile.
    starttls_required
    This option specifies that STARTTLS encryption is required on connections to the port. -No unencrypted connections will be allowed. +No unencrypted connections will be allowed. You should also set the certfile option. You can define a certificate file for a specific domain using the global option domain_certfile.
    tls
    This option specifies that traffic on -the port will be encrypted using SSL immediately after connecting. You -should also set the certfile option. +the port will be encrypted using SSL immediately after connecting. +This was the traditional encryption method in the early Jabber software, +commonly on port 5223 for client-to-server communications. +But this method is nowadays deprecated and not recommended. +The preferable encryption method is STARTTLS on port 5222, as defined +RFC 3920: XMPP Core, +which can be enabled in ejabberd with the option starttls. +If this option is set, you should also set the certfile option.
    web_admin
    This option enables the Web Admin for ejabberd administration which is available at http://server:port/admin/. Login and password are the username and password of one of the registered users who are granted access by the ‘configure’ access rule.
    zlib
    This -option specifies that Zlib stream compression (as defined in XEP-0138) -is available on connections to the port. Client connections cannot use -stream compression and stream encryption simultaneously. Hence, if you -specify both tls (or ssl) and zlib, the latter -option will not affect connections (there will be no stream compression). -

    There are some additional global options: +option specifies that Zlib stream compression (as defined in XEP-0138) +is available on connections to the port. +

    There are some additional global options that can be specified in the ejabberd configuration file (outside listen):

    {s2s_use_starttls, true|false}
    This option defines whether to @@ -716,29 +812,50 @@ use STARTTLS for s2s connections. file containing a SSL certificate.
    {domain_certfile, Domain, Path}
    Full path to the file containing the SSL certificate for a specific domain. +
    {outgoing_s2s_options, Methods, Timeout}
    +Specify which address families to try, in what order, and connect timeout in milliseconds. +By default it first tries connecting with IPv4, if that fails it tries using IPv6, +with a timeout of 10000 milliseconds. +
    {s2s_dns_options, [ {Property, Value}, ...]}
    +Define properties to use for DNS resolving. +Allowed Properties are: timeout in seconds which default value is 10 +and retries which default value is 2.
    {s2s_default_policy, allow|deny}
    -The default policy for incoming and outgoing s2s connections to other Jabber servers. +The default policy for incoming and outgoing s2s connections to other XMPP servers. The default value is allow.
    {{s2s_host, Host}, allow|deny}
    Defines if incoming and outgoing s2s connections with a specific remote host are allowed or denied. -This allows to restrict ejabberd to only stablish s2s connections +This allows to restrict ejabberd to only establish s2s connections with a small list of trusted servers, or to block some specific servers. -

    For example, the following simple configuration defines: +

    {s2s_max_retry_delay, Seconds}
    +The maximum allowed delay for retry to connect after a failed connection attempt. +Specified in seconds. The default value is 300 seconds (5 minutes). +
    {max_fsm_queue, Size}
    +This option specifies the maximum number of elements in the queue of the FSM. +This option can be specified for an ejabberd_service listener, +or also globally for ejabberd_s2s_out. +If the option is not specified for an ejabberd_service listener, +the globally configured value is used. +The allowed values are integers and ’undefined’. +Default value: ’undefined’. +

    +

    Examples

    For example, the following simple configuration defines:

    • There are three domains. The default certificate file is server.pem. However, the c2s and s2s connections to the domain example.com use the file example_com.pem. -
    • Port 5222 listens for c2s connections with STARTTLS, +
    • Port 5222 listens for c2s connections with STARTTLS, and also allows plain connections for old clients.
    • Port 5223 listens for c2s connections with the old SSL. -
    • Port 5269 listens for s2s connections with STARTTLS. +
    • Port 5269 listens for s2s connections with STARTTLS. The socket is set for IPv6 instead of IPv4. +
    • Port 3478 listens for STUN requests over UDP.
    • Port 5280 listens for HTTP requests, and serves the HTTP Poll service.
    • Port 5281 listens for HTTP requests, and serves the Web Admin using HTTPS as explained in -section 4.2. +section 4.3. The socket only listens connections to the IP address 127.0.0.1.
    {hosts, ["example.com", "example.org", "example.net"]}.
     {listen,
      [
       {5222, ejabberd_c2s, [
    -                        {access, c2s}, 
    +                        {access, c2s},
                             {shaper, c2s_shaper},
                             starttls, {certfile, "/etc/ejabberd/server.pem"},
                             {max_stanza_size, 65536}
    @@ -749,17 +866,18 @@ section 4.2.
                             tls, {certfile, "/etc/ejabberd/server.pem"},
                             {max_stanza_size, 65536}
                            ]},
    -  {5269, ejabberd_s2s_in, [
    -                           {shaper, s2s_shaper},
    -                           {max_stanza_size, 131072}
    -                          ]},
    +  {{5269, "::"}, ejabberd_s2s_in, [
    +                                   {shaper, s2s_shaper},
    +                                   {max_stanza_size, 131072}
    +                                  ]},
    +  {{3478, udp}, ejabberd_stun, []},
       {5280, ejabberd_http, [
                              http_poll
                             ]},
    -  {5281, ejabberd_http, [
    -                         web_admin,
    -                         tls, {certfile, "/etc/ejabberd/server.pem"},
    -                        ]}
    +  {{5281, "127.0.0.1"}, ejabberd_http, [
    +                                        web_admin,
    +                                        tls, {certfile, "/etc/ejabberd/server.pem"},
    +                                       ]}
      ]
     }.
     {s2s_use_starttls, true}.
    @@ -767,21 +885,23 @@ section 4.2.
     {domain_certfile, "example.com", "/etc/ejabberd/example_com.pem"}.
     

    In this example, the following configuration defines that:

    • -c2s connections are listened for on port 5222 and 5223 (SSL) and denied +c2s connections are listened for on port 5222 (all IPv4 addresses) and +on port 5223 (SSL, IP 192.168.0.1 and fdca:8ab6:a243:75ef::1) and denied for the user called ‘bad’. -
    • s2s connections are listened for on port 5269 with STARTTLS for secured -traffic enabled. -Incoming and outgoing connections of remote Jabber servers are denied, +
    • s2s connections are listened for on port 5269 (all IPv4 addresses) +with STARTTLS for secured traffic enabled. +Incoming and outgoing connections of remote XMPP servers are denied, only two servers can connect: "jabber.example.org" and "example.com". -
    • Port 5280 is serving the Web Admin and the HTTP Polling service. Note +
    • Port 5280 is serving the Web Admin and the HTTP Polling service +in all the IPv4 addresses. Note that it is also possible to serve them on different ports. The second -example in section 4.2 shows how exactly this can be done. +example in section 4.3 shows how exactly this can be done.
    • All users except for the administrators have a traffic of limit 1,000 Bytes/second
    • The AIM transport -aim.example.org is connected to port 5233 with password -‘aimsecret’. +aim.example.org is connected to port 5233 on localhost IP addresses +(127.0.0.1 and ::1) with password ‘aimsecret’.
    • The ICQ transport JIT (icq.example.org and sms.example.org) is connected to port 5234 with password ‘jitsecret’. @@ -800,42 +920,61 @@ connected to port 5237 with password ‘ggsecret’. jmc.example.org is connected to port 5238 with password ‘jmcsecret’.
    • The service custom has enabled the special option to avoiding checking the from attribute in the packets send by this component. The component can send packets in behalf of any users from the server, or even on behalf of any server. -
      {acl, blocked, {user, "bad"}}.
    -  {access, c2s, [{deny, blocked},
    -                 {allow, all}]}.
    -  {shaper, normal, {maxrate, 1000}}.
    -  {access, c2s_shaper, [{none, admin},
    -                        {normal, all}]}.
    -  {listen,
    -   [{5222, ejabberd_c2s,     [{access, c2s}, {shaper, c2s_shaper}]},
    -    {5223, ejabberd_c2s,     [{access, c2s},
    -                              ssl, {certfile, "/path/to/ssl.pem"}]},
    -    {5269, ejabberd_s2s_in,  []},
    -    {5280, ejabberd_http,    [http_poll, web_admin]},
    -    {5233, ejabberd_service, [{host, "aim.example.org",
    -                               [{password, "aimsecret"}]}]},
    -    {5234, ejabberd_service, [{hosts, ["icq.example.org", "sms.example.org"],
    -                               [{password, "jitsecret"}]}]},
    -    {5235, ejabberd_service, [{host, "msn.example.org",
    -                               [{password, "msnsecret"}]}]},
    -    {5236, ejabberd_service, [{host, "yahoo.example.org",
    -                               [{password, "yahoosecret"}]}]},
    -    {5237, ejabberd_service, [{host, "gg.example.org",
    -                               [{password, "ggsecret"}]}]},
    -    {5238, ejabberd_service, [{host, "jmc.example.org",
    -                               [{password, "jmcsecret"}]}]},
    -    {5239, ejabberd_service, [{host, "custom.example.org",
    -                               [{password, "customsecret"}]},
    -                              {service_check_from, false}]}
    -   ]
    -  }.
    -  {s2s_use_starttls, true}.
    -  {s2s_certfile, "/path/to/ssl.pem"}.
    -  {s2s_default_policy, deny}.
    -  {{s2s_host,"jabber.example.org"}, allow}.
    -  {{s2s_host,"example.com"}, allow}.
    -

    Note, that for jabberd 1.4- or WPJabber-based -services you have to make the transports log and do XDB by themselves: +

    {acl, blocked, {user, "bad"}}.
    +{access, c2s, [{deny, blocked},
    +               {allow, all}]}.
    +{shaper, normal, {maxrate, 1000}}.
    +{access, c2s_shaper, [{none, admin},
    +                      {normal, all}]}.
    +{listen,
    + [{5222, ejabberd_c2s, [
    +                        {access, c2s},
    +                        {shaper, c2s_shaper}
    +                       ]},
    +  {{5223, {192, 168, 0, 1}}, ejabberd_c2s, [
    +                                            {access, c2s},
    +                                            ssl, {certfile, "/path/to/ssl.pem"}
    +                                           ]},
    +  {{5223, {16#fdca, 16#8ab6, 16#a243, 16#75ef, 0, 0, 0, 1}},
    +   ejabberd_c2s, [
    +                  {access, c2s},
    +                  ssl, {certfile, "/path/to/ssl.pem"}
    +                 ]},
    +  {5269, ejabberd_s2s_in, []},
    +  {{5280, {0, 0, 0, 0}}, ejabberd_http, [
    +                                         http_poll,
    +                                         web_admin
    +                                        ]},
    +  {{5233, {127, 0, 0, 1}}, ejabberd_service, [
    +                                              {hosts, ["aim.example.org"],
    +                                                 [{password, "aimsecret"}]}
    +                                             ]},
    +  {{5233, "::1"}, ejabberd_service, [
    +                                     {hosts, ["aim.example.org"],
    +                                        [{password, "aimsecret"}]}
    +                                    ]},
    +  {5234, ejabberd_service, [{hosts, ["icq.example.org", "sms.example.org"],
    +                             [{password, "jitsecret"}]}]},
    +  {5235, ejabberd_service, [{hosts, ["msn.example.org"],
    +                             [{password, "msnsecret"}]}]},
    +  {5236, ejabberd_service, [{hosts, ["yahoo.example.org"],
    +                             [{password, "yahoosecret"}]}]},
    +  {5237, ejabberd_service, [{hosts, ["gg.example.org"],
    +                             [{password, "ggsecret"}]}]},
    +  {5238, ejabberd_service, [{hosts, ["jmc.example.org"],
    +                             [{password, "jmcsecret"}]}]},
    +  {5239, ejabberd_service, [{hosts, ["custom.example.org"],
    +                             [{password, "customsecret"}]},
    +                            {service_check_from, false}]}
    + ]
    +}.
    +{s2s_use_starttls, true}.
    +{s2s_certfile, "/path/to/ssl.pem"}.
    +{s2s_default_policy, deny}.
    +{{s2s_host,"jabber.example.org"}, allow}.
    +{{s2s_host,"example.com"}, allow}.
    +

    Note, that for services based in jabberd14 or WPJabber +you have to make the transports log and do XDB by themselves:

      <!--
          You have to add elogger and rlogger entries here when using ejabberd.
          In this case the transport will do the logging.
    @@ -849,7 +988,7 @@ services you have to make the transports log and do XDB by themselves:
       </log>
     
       <!--
    -     Some Jabber server implementations do not provide
    +     Some XMPP server implementations do not provide
          XDB services (for example, jabberd2 and ejabberd).
          xdb_file.so is loaded in to handle all XDB requests.
       -->
    @@ -857,20 +996,18 @@ services you have to make the transports log and do XDB by themselves:
       <xdb id="xdb">
         <host/>
         <load>
    -      <!-- this is a lib of wpjabber or jabberd -->
    +      <!-- this is a lib of wpjabber or jabberd14 -->
           <xdb_file>/usr/lib/jabber/xdb_file.so</xdb_file>
           </load>
         <xdb_file xmlns="jabber:config:xdb_file">
           <spool><jabberd:cmdline flag='s'>/var/spool/jabber</jabberd:cmdline></spool>
         </xdb_file>
       </xdb>
    -
    -

    3.1.4  Authentication

    - -

    The option auth_method defines the authentication method that is used -for user authentication: -

      {auth_method, [<method>]}.
    -

    The following authentication methods are supported by ejabberd: +

    +

    3.1.4  Authentication

    +

    The option auth_method defines the authentication methods that are used +for user authentication. The syntax is: +

    {auth_method, [Method, ...]}.

    The following authentication methods are supported by ejabberd:

    -

    Internal

    - -

    ejabberd uses its internal Mnesia database as the default authentication method.

    • -auth_method: The value internal will enable the internal -authentication method. -

    Examples: +

    Account creation is only supported by internal and odbc methods.

    +

    Internal

    +

    ejabberd uses its internal Mnesia database as the default authentication method. +The value internal will enable the internal authentication method.

    Examples:

    • To use internal authentication on example.org and LDAP authentication on example.net: @@ -894,34 +1028,31 @@ authentication on example.net: {host_config, "example.net", [{auth_method, [ldap]}]}.
  • To use internal authentication on all virtual hosts:
    {auth_method, internal}.
    -
  • -

    SASL Anonymous and Anonymous Login

    - -

    The anonymous authentication method can be configured with the following +

    +

    SASL Anonymous and Anonymous Login

    +

    The value anonymous will enable the internal authentication method.

    The anonymous authentication method can be configured with the following options. Remember that you can use the host_config option to set virtual host specific options (see section 3.1.2). Note that there also is a detailed tutorial regarding SASL -Anonymous and anonymous login configuration.

    • -auth_method: The value anonymous will enable the anonymous -authentication method. -
    • allow_multiple_connections: This value for this option can be -either true or false and is only used when the anonymous mode is +Anonymous and anonymous login configuration.

      +{allow_multiple_connections, false|true}
      This option is only used +when the anonymous mode is enabled. Setting it to true means that the same username can be taken multiple times in anonymous login mode if different resource are used to connect. This option is only useful in very special occasions. The default value is false. -
    • anonymous_protocol: This option can take three values: -sasl_anon, login_anon or both. sasl_anon means +
      {anonymous_protocol, sasl_anon | login_anon | both}
      +sasl_anon means that the SASL Anonymous method will be used. login_anon means that the anonymous login method will be used. both means that SASL Anonymous and login anonymous are both enabled. -

    Those options are defined for each virtual host with the host_config +

    Those options are defined for each virtual host with the host_config parameter (see section 3.1.2).

    Examples:

    • To enable anonymous login on all virtual hosts:
      {auth_method, [anonymous]}.
       {anonymous_protocol, login_anon}.
      -  
    • Similar as previous example, but limited to public.example.org: +
    • Similar as previous example, but limited to public.example.org:
      {host_config, "public.example.org", [{auth_method, [anonymous]},
                                            {anonymous_protocol, login_anon}]}.
       
    • To enable anonymous login and internal authentication on a virtual host: @@ -937,9 +1068,8 @@ To enable anonymous login on all virtual hosts: a virtual host:
      {host_config, "public.example.org", [{auth_method, [internal,anonymous]},
                                            {anonymous_protocol, both}]}.
      -
    -

    PAM Authentication

    - +

    +

    PAM Authentication

    ejabberd supports authentication via Pluggable Authentication Modules (PAM). PAM is currently supported in AIX, FreeBSD, HP-UX, Linux, Mac OS X, NetBSD and Solaris. PAM authentication is disabled by default, so you have to configure and compile @@ -947,74 +1077,89 @@ PAM authentication is disabled by default, so you have to configure and compile

    ./configure --enable-pam && make install
     

    Options:

    -pam_service
    This option defines the PAM service name. +{pam_service, Name}
    This option defines the PAM service name. Default is "ejabberd". Refer to the PAM documentation of your operation system for more information.

    Example: -

      {auth_method, [pam]}.
    -  {pam_service, "ejabberd"}.
    +

    {auth_method, [pam]}.
    +{pam_service, "ejabberd"}.
     

    Though it is quite easy to set up PAM support in ejabberd, PAM itself introduces some security issues:

    • To perform PAM authentication ejabberd uses external C-program called -epam. By default, it is located in /var/lib/ejabberd/priv/lib/ +epam. By default, it is located in /var/lib/ejabberd/priv/bin/ directory. You have to set it root on execution in the case when your PAM module requires root privileges (pam_unix.so for example). Also you have to grant access -for ejabberd to this file and remove all other permissions from it: -
      # chown root:ejabberd /var/lib/ejabberd/priv/bin/epam
      -# chmod 4750 /var/lib/ejabberd/priv/bin/epam
      +for ejabberd to this file and remove all other permissions from it.
      +Execute with root privileges:
      +
      chown root:ejabberd /var/lib/ejabberd/priv/bin/epam
      +chmod 4750 /var/lib/ejabberd/priv/bin/epam
       
    • Make sure you have the latest version of PAM installed on your system. Some old versions of PAM modules cause memory leaks. If you are not able to use the latest version, you can kill(1) epam process periodically to reduce its memory consumption: ejabberd will restart this process immediately.
    • epam program tries to turn off delays on authentication failures. However, some PAM modules ignore this behavior and rely on their own configuration options. -The example configuration file ejabberd.pam shows how to turn off delays in -pam_unix.so module. It is not a ready to use configuration file: you must use it +You can create a configuration file ejabberd.pam. +This example shows how to turn off delays in pam_unix.so module: +
      #%PAM-1.0
      +auth        sufficient  pam_unix.so likeauth nullok nodelay
      +account     sufficient  pam_unix.so
      +
      That is not a ready to use configuration file: you must use it as a hint when building your own PAM configuration instead. Note that if you want to disable delays on authentication failures in the PAM configuration file, you have to restrict access to this file, so a malicious user can’t use your configuration to perform brute-force attacks.
    • You may want to allow login access only for certain users. pam_listfile.so module provides such functionality. -
    -

    3.1.5  Access Rules

    - -

    -

    ACL Definition

    - +

  • If you use pam_winbind to authorise against a Windows Active Directory, +then /etc/nssswitch.conf must be configured to use winbind as well. +
  • +

    3.1.5  Access Rules

    +

    +

    ACL Definition

    Access control in ejabberd is performed via Access Control Lists (ACLs). The declarations of ACLs in the configuration file have the following syntax: -

      {acl, <aclname>, {<acltype>, ...}}.
    -

    <acltype> can be one of the following: +

    {acl, ACLName, ACLValue}.

    ACLValue can be one of the following:

    all
    Matches all JIDs. Example:
    {acl, all, all}.
    -
    {user, <username>}
    Matches the user with the name -<username> at the first virtual host. Example: +
    {user, Username}
    Matches the user with the name +Username at the first virtual host. Example:
    {acl, admin, {user, "yozhik"}}.
    -
    {user, <username>, <server>}
    Matches the user with the JID -<username>@<server> and any resource. Example: +
    {user, Username, Server}
    Matches the user with the JID +Username@Server and any resource. Example:
    {acl, admin, {user, "yozhik", "example.org"}}.
    -
    {server, <server>}
    Matches any JID from server -<server>. Example: +
    {server, Server}
    Matches any JID from server +Server. Example:
    {acl, exampleorg, {server, "example.org"}}.
    -
    {user_regexp, <regexp>}
    Matches any local user with a name that -matches <regexp> on local virtual hosts. Example: +
    {resource, Resource}
    Matches any JID with a resource +Resource. Example: +
    {acl, mucklres, {resource, "muckl"}}.
    +
    {shared_group, Groupname}
    Matches any member of a Shared Roster Group with name Groupname in the virtual host. Example: +
    {acl, techgroupmembers, {shared_group, "techteam"}}.
    +
    {shared_group, Groupname, Server}
    Matches any member of a Shared Roster Group with name Groupname in the virtual host Server. Example: +
    {acl, techgroupmembers, {shared_group, "techteam", "example.org"}}.
    +
    {user_regexp, Regexp}
    Matches any local user with a name that +matches Regexp on local virtual hosts. Example:
    {acl, tests, {user_regexp, "^test[0-9]*$"}}.
    -
    {user_regexp, <regexp>, <server>}
    Matches any user with a name -that matches <regexp> at server <server>. Example: -
    {acl, tests, {user_regexp, "^test", "example.org"}}.
    -
    {server_regexp, <regexp>}
    Matches any JID from the server that -matches <regexp>. Example: +
    {user_regexp, UserRegexp, Server}
    Matches any user with a name +that matches Regexp at server Server. Example: +
    {acl, tests, {user_Userregexp, "^test", "example.org"}}.
    +
    {server_regexp, Regexp}
    Matches any JID from the server that +matches Regexp. Example:
    {acl, icq, {server_regexp, "^icq\\."}}.
    -
    {node_regexp, <user_regexp>, <server_regexp>}
    Matches any user -with a name that matches <user_regexp> at any server that matches -<server_regexp>. Example: +
    {resource_regexp, Regexp}
    Matches any JID with a resource that +matches Regexp. Example: +
    {acl, icq, {resource_regexp, "^laptop\\."}}.
    +
    {node_regexp, UserRegexp, ServerRegexp}
    Matches any user +with a name that matches UserRegexp at any server that matches +ServerRegexp. Example:
    {acl, yohzik, {node_regexp, "^yohzik$", "^example.(com|org)$"}}.
    -
    {user_glob, <glob>}
    -
    {user_glob, <glob>, <server>}
    -
    {server_glob, <glob>}
    -
    {node_glob, <user_glob>, <server_glob>}
    This is the same as +
    {user_glob, Glob}
    +
    {user_glob, Glob, Server}
    +
    {server_glob, Glob}
    +
    {resource_glob, Glob}
    +
    {node_glob, UserGlob, ServerGlob}
    This is the same as above. However, it uses shell glob patterns instead of regexp. These patterns can have the following special characters:
    @@ -1025,34 +1170,28 @@ ranges are specified by a pair of characters separated by a ‘-’ If the first character after ‘[’ is a ‘!’, any character not enclosed is matched.
    -

    The following ACLs are pre-defined: +

    The following ACLName are pre-defined:

    all
    Matches any JID.
    none
    Matches no JID. -
    -

    Access Rights

    - -

    An entry allowing or denying access to different services looks similar to -this: -

      {access, <accessname>, [{allow, <aclname>},
    -                          {deny, <aclname>},
    -                          ...
    -                         ]}.
    -

    When a JID is checked to have access to <accessname>, the server +

    +

    Access Rights

    +

    An entry allowing or denying access to different services. +The syntax is: +

    {access, AccessName, [ {allow|deny, ACLName}, ...]}.

    When a JID is checked to have access to Accessname, the server 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 the first matched tuple is returned, otherwise the value ‘deny’ is returned.

    Example: -

      {access, configure, [{allow, admin}]}.
    -  {access, something, [{deny, badmans},
    -                       {allow, all}]}.
    -

    The following access rules are pre-defined: +

    {access, configure, [{allow, admin}]}.
    +{access, something, [{deny, badmans},
    +                     {allow, all}]}.
    +

    The following AccessName are pre-defined:

    all
    Always returns the value ‘allow’.
    none
    Always returns the value ‘deny’. -
    -

    Limiting Opened Sessions with ACL

    - +

    +

    Limiting Opened Sessions with ACL

    The special access max_user_sessions specifies the maximum number of sessions (authenticated connections) per user. If a user tries to open more sessions by using different resources, the first @@ -1060,109 +1199,166 @@ opened session will be disconnected. The error session replaced will be sent to the disconnected session. The value for this option can be either a number, or infinity. The default value is infinity.

    The syntax is: -

      {access, max_user_sessions, [{<maxnumber>, <aclname>},
    -                               ...
    -                              ]}.
    -

    Examples: +

    {access, max_user_sessions, [ {MaxNumber, ACLName}, ...]}.

    This example limits the number of sessions per user to 5 for all users, and to 10 for admins: +

    {access, max_user_sessions, [{10, admin}, {5, all}]}.
    +

    +

    Several connections to a remote XMPP server with ACL

    +

    The special access max_s2s_connections specifies how many +simultaneus S2S connections can be established to a specific remote XMPP server. +The default value is 1. +There’s also available the access max_s2s_connections_per_node.

    The syntax is: +

    {access, max_s2s_connections, [ {MaxNumber, ACLName}, ...]}.

    Examples:

    • -To limit the number of sessions per user to 10 for all users: -
        {access, max_user_sessions, [{10, all}]}.
      -
    -

    3.1.6  Shapers

    - -

    Shapers enable you to limit connection traffic. The syntax of -shapers is like this: -

      {shaper, <shapername>, <kind>}.
    -

    Currently only one kind of shaper called maxrate is available. It has the +Allow up to 3 connections with each remote server: +

    {access, max_s2s_connections, [{3, all}]}.
    +

    +

    3.1.6  Shapers

    +

    Shapers enable you to limit connection traffic. +The syntax is: +

    {shaper, ShaperName, Kind}.

    +Currently only one kind of shaper called maxrate is available. It has the following syntax: -

      {maxrate, <rate>}
    -

    where <rate> stands for the maximum allowed incoming rate in bytes per +

    {maxrate, Rate}

    +where Rate stands for the maximum allowed incoming rate in bytes per second. -When a connection exceeds this limit, ejabberd stops reading from the socket +When a connection exceeds this limit, ejabberd stops reading from the socket until the average rate is again below the allowed maximum.

    Examples:

    • To define a shaper named ‘normal’ with traffic speed limited to 1,000 bytes/second: -
        {shaper, normal, {maxrate, 1000}}.
      +
      {shaper, normal, {maxrate, 1000}}.
       
    • To define a shaper named ‘fast’ with traffic speed limited to 50,000 bytes/second: -
        {shaper, fast, {maxrate, 50000}}.
      -
    -

    3.1.7  Default Language

    - +

    {shaper, fast, {maxrate, 50000}}.
    +

    +

    3.1.7  Default Language

    The option language defines the default language of server strings that -can be seen by Jabber clients. If a Jabber client do not support -xml:lang, the specified language is used. The default value is -en. In order to take effect there must be a translation file -<language>.msg in ejabberd’s msgs directory.

    Examples: -

    • -To set Russian as default language: -
        {language, "ru"}.
      -
    • To set Spanish as default language: -
        {language, "es"}.
      -
    -

    3.1.8  Include Additional Configuration Files

    - -

    The option include_config_file in a configuration file instructs ejabberd to include other configuration files immediately.

    The basic usage is: -

      {include_config_file, <filename>}.
    -

    It is also possible to specify suboptions: -

      {include_config_file, <filename>, [<suboption>, <suboption>, ...]}.
    -

    The filename can be indicated either as an absolute path, +can be seen by XMPP clients. If a XMPP client does not support +xml:lang, the specified language is used.

    The option syntax is: +

    {language, Language}.

    The default value is en. +In order to take effect there must be a translation file +Language.msg in ejabberd’s msgs directory.

    For example, to set Russian as default language: +

    {language, "ru"}.
    +

    Appendix A provides more details about internationalization and localization.

    +

    3.1.8  CAPTCHA

    +

    Some ejabberd modules can be configured to require a CAPTCHA challenge on certain actions. +If the client does not support CAPTCHA Forms (XEP-0158), +a web link is provided so the user can fill the challenge in a web browser.

    An example script is provided that generates the image +using ImageMagick’s Convert program.

    The configurable options are: +

    +{captcha_cmd, Path}
    +Full path to a script that generates the image. +The default value is an empty string: "" +
    {captcha_host, Host}
    +Host part of the URL sent to the user. +You can include the port number. +The URL sent to the user is formed by: http://Host/captcha/ +The default value is the first hostname configured. +

    Additionally, an ejabberd_http listener must be enabled with the captcha option. +See section 3.1.3.

    Example configuration: +

    {hosts, ["example.org"]}.
    +
    +{captcha_cmd, "/lib/ejabberd/priv/bin/captcha.sh"}.
    +{captcha_host, "example.org:5280"}.
    +
    +{listen,
    + [
    +  ...
    +  {5280, ejabberd_http, [
    +                         captcha,
    +                         ...
    +                        ]
    +  }
    +
    +]}.
    +

    +

    3.1.9  STUN

    +

    ejabberd is able to act as a stand-alone STUN server +(RFC 5389). Currently only Binding usage +is supported. In that role ejabberd helps clients with Jingle ICE (XEP-0176) support to discover their external addresses and ports.

    You should configure ejabberd_stun listening module as described in 3.1.3 section. +If certfile option is defined, ejabberd multiplexes TCP and +TLS over TCP connections on the same port. Obviously, certfile option +is defined for tcp only. Note however that TCP or TLS over TCP +support is not required for Binding usage and is reserved for +TURN +functionality. Feel free to configure udp transport only.

    Example configuration: +

    {listen,
    + [
    +  ...
    +  {{3478, udp}, ejabberd_stun, []},
    +  {3478, ejabberd_stun, []},
    +  {5349, ejabberd_stun, [{certfile, "/etc/ejabberd/server.pem"}]},
    +  ...
    + ]
    +}.
    +

    You also need to configure DNS SRV records properly so clients can easily discover a +STUN server serving your XMPP domain. Refer to section +DNS Discovery of a Server +of RFC 5389 for details.

    Example DNS SRV configuration: +

    _stun._udp   IN SRV  0 0 3478 stun.example.com.
    +_stun._tcp   IN SRV  0 0 3478 stun.example.com.
    +_stuns._tcp  IN SRV  0 0 5349 stun.example.com.
    +

    +

    3.1.10  Include Additional Configuration Files

    +

    The option include_config_file in a configuration file instructs ejabberd to include other configuration files immediately.

    The basic syntax is: +

    {include_config_file, Filename}.

    +It is possible to specify suboptions using the full syntax: +

    {include_config_file, Filename, [Suboption, ...]}.

    The filename can be indicated either as an absolute path, or relative to the main ejabberd configuration file. It isn’t possible to use wildcards. The file must exist and be readable.

    The allowed suboptions are:

    -{disallow, [<option>, <option>, ...]}
    Disallows the usage of those options in the included configuration file. +{disallow, [Optionname, ...]}
    Disallows the usage of those options in the included configuration file. The options that match this criteria are not accepted. The default value is an empty list: [] -
    {allow_only, [<option>, <option>, ...]}
    Allows only the usage of those options in the included configuration file. +
    {allow_only, [Optionname, ...]}
    Allows only the usage of those options in the included configuration file. The options that do not match this criteria are not accepted. The default value is: all

    This is a basic example: -

      {include_config_file, "/etc/ejabberd/additional.cfg"}.
    +

    {include_config_file, "/etc/ejabberd/additional.cfg"}.
     

    In this example, the included file is not allowed to contain a listen option. If such an option is present, the option will not be accepted. The file is in a subdirectory from where the main configuration file is. -

      {include_config_file, "./example.org/additional_not_listen.cfg", [{disallow, [listen]}]}.
    -

    In this example, ejabberd.cfg defines some ACL and Access rules, +

    {include_config_file, "./example.org/additional_not_listen.cfg", [{disallow, [listen]}]}.
    +

    In this example, ejabberd.cfg defines some ACL and Access rules, and later includes another file with additional rules: -

      {acl, admin, {user, "admin", "localhost"}}.
    -  {access, announce, [{allow, admin}]}.
    -  {include_config_file, "/etc/ejabberd/acl_and_access.cfg", [{allow_only, [acl, access]}]}.
    +

    {acl, admin, {user, "admin", "localhost"}}.
    +{access, announce, [{allow, admin}]}.
    +{include_config_file, "/etc/ejabberd/acl_and_access.cfg", [{allow_only, [acl, access]}]}.
     

    and content of the file acl_and_access.cfg can be, for example: -

      {acl, admin, {user, "bob", "localhost"}}.
    -  {acl, admin, {user, "jan", "localhost"}}.
    -
    -

    3.1.9  Option Macros in Configuration File

    - +

    {acl, admin, {user, "bob", "localhost"}}.
    +{acl, admin, {user, "jan", "localhost"}}.
    +

    +

    3.1.11  Option Macros in Configuration File

    In the ejabberd configuration file, it is possible to define a macro for a value and later use this macro when defining an option.

    A macro is defined with this syntax: -

      {define_macro, '<MACRO>', <value>}.
    -

    The MACRO must be surrounded by commas, and all in uppercase. +

    {define_macro, ’MACRO’, Value}.

    +The MACRO must be surrounded by single quotation marks, +and all letters in uppercase; check the examples bellow. The value can be any valid arbitrary Erlang term.

    The first definition of a macro is preserved, and additional definitions of the same macro are forgotten.

    Macros are processed after additional configuration files have been included, so it is possible to use macros that are defined in configuration files included before the usage.

    It isn’t possible to use a macro in the definition of another macro.

    There are two ways to use a macro: -

    ’<MACRO>’
    +

    ’MACRO’
    You can put this instead of a value in an ejabberd option, and will be replaced with the value previously defined. If the macro is not defined previously, -the program will crash and report an error.
    {use_macro, ’<MACRO>’, <defaultvalue>}
    +the program will crash and report an error.
    {use_macro, ’MACRO’, Defaultvalue}
    Use a macro even if it may not be defined. If the macro is not defined previously, the provided defaultvalue is used. This usage behaves as if it were defined and used this way: -
        {define_macro, '<MACRO>', <defaultvalue>}.
    -    '<MACRO>'
    -  

    This example shows the basic usage of a macro: -

      {define_macro, 'LOG_LEVEL_NUMBER', 5}.
    -  {loglevel, 'LOG_LEVEL_NUMBER'}.
    +
    {define_macro, 'MACRO', Defaultvalue}.
    +'MACRO'
    +

    This example shows the basic usage of a macro: +

    {define_macro, 'LOG_LEVEL_NUMBER', 5}.
    +{loglevel, 'LOG_LEVEL_NUMBER'}.
     

    The resulting option interpreted by ejabberd is: {loglevel, 5}.

    This example shows that values can be any arbitrary Erlang term: -

      {define_macro, 'USERBOB', {user, "bob", "localhost"}}.
    -  {acl, admin, 'USERBOB'}.
    +

    {define_macro, 'USERBOB', {user, "bob", "localhost"}}.
    +{acl, admin, 'USERBOB'}.
     

    The resulting option interpreted by ejabberd is: {acl, admin, {user, "bob", "localhost"}}.

    This complex example:

    {define_macro, 'NUMBER_PORT_C2S', 5222}.
     {define_macro, 'PORT_S2S_IN', {5269, ejabberd_s2s_in, []}}.
    @@ -1181,9 +1377,8 @@ This usage behaves as if it were defined and used this way:
       {5280, ejabberd_http, []}
      ]
     }.
    -
    -

    3.2  Database and LDAP Configuration

    - +

    +

    3.2  Database and LDAP Configuration

    ejabberd uses its internal Mnesia database by default. However, it is possible to use a relational database or an LDAP server to store persistent, @@ -1193,8 +1388,8 @@ authentication mechanisms for the same virtual host (fallback), you can set different storage systems for modules, and so forth.

    The following databases are supported by ejabberd:

    The following LDAP servers are tested with ejabberd: @@ -1204,26 +1399,27 @@ different storage systems for modules, and so forth.

    The following databas

  • OpenLDAP
  • Normally any LDAP compatible server should work; inform us about your success with a not-listed server so that we can list it here. -
  • -

    3.2.1  MySQL

    - +

    Important note about virtual hosting: +if you define several domains in ejabberd.cfg (see section 3.1.1), +you probably want that each virtual host uses a different configuration of database, authentication and storage, +so that usernames do not conflict and mix between different virtual hosts. +For that purpose, the options described in the next sections +must be set inside a host_config for each vhost (see section 3.1.2). +For example: +

    {host_config, "public.example.org", [
    +  {odbc_server, {pgsql, "localhost", "database-public-example-org", "ejabberd", "password"}},
    +  {auth_method, [odbc]}
    +]}.
    +

    +

    3.2.1  MySQL

    Although this section will describe ejabberd’s configuration when you want to use the native MySQL driver, it does not describe MySQL’s installation and database creation. Check the MySQL documentation and the tutorial Using ejabberd with MySQL native driver for information regarding these topics. Note that the tutorial contains information about ejabberd’s configuration which is duplicate to this section.

    Moreover, the file mysql.sql in the directory src/odbc might be interesting for you. This file contains the ejabberd schema for MySQL. At the end of the file -you can find information to update your database schema.

    By default ejabberd opens 10 connections to the database for each virtual host. -Use this option to modify the value: -

    {odbc_pool_size, 10}.
    -

    You can configure an interval to make a dummy SQL request -to keep alive the connections to the database. -The default value is ’undefined’, so no keepalive requests are made. -Specify in seconds: for example 28800 means 8 hours. -

    {odbc_keepalive_interval, undefined}.
    -
    -

    Driver Compilation

    - +you can find information to update your database schema.

    +

    Driver Compilation

    You can skip this step if you installed ejabberd using a binary installer or if the binary packages of ejabberd you are using include support for MySQL.

    1. First, install the Erlang @@ -1233,40 +1429,46 @@ put them for example in the same directory as your ejabberd .beam files also needed for native MySQL support!). This can be done, by using next commands:
      ./configure --enable-odbc && make install
      -
    -

    Authentication

    - +

    +

    Database Connection

    +

    The actual database access is defined in the option odbc_server. Its +value is used to define if we want to use ODBC, or one of the two native +interface available, PostgreSQL or MySQL.

    To use the native MySQL interface, you can pass a tuple of the following form as +parameter: +

    {mysql, "Server", "Database", "Username", "Password"}

    mysql is a keyword that should be kept as is. For example: +

    {odbc_server, {mysql, "localhost", "test", "root", "password"}}.

    Optionally, it is possible to define the MySQL port to use. This +option is only useful, in very rare cases, when you are not running +MySQL with the default port setting. The mysql parameter +can thus take the following form: +

    {mysql, "Server", Port, "Database", "Username", "Password"}

    The Port value should be an integer, without quotes. For example: +

    {odbc_server, {mysql, "localhost", Port, "test", "root", "password"}}.

    By default ejabberd opens 10 connections to the database for each virtual host. +Use this option to modify the value: +

    {odbc_pool_size, 10}.
    +

    You can configure an interval to make a dummy SQL request +to keep alive the connections to the database. +The default value is ’undefined’, so no keepalive requests are made. +Specify in seconds: for example 28800 means 8 hours. +

    {odbc_keepalive_interval, undefined}.
    +

    If the connection to the database fails, ejabberd waits 30 seconds before retrying. +You can modify this interval with this option: +

    {odbc_start_interval, 30}.
    +

    +

    Authentication

    The option value name may be misleading, as the auth_method name is used for access to a relational database through ODBC, as well as through the native MySQL interface. Anyway, the first configuration step is to define the odbc auth_method. For example: -

    {host_config, "public.example.org", [{auth_method, [odbc]}]}.
    -

    The actual database access is defined in the option odbc_server. Its -value is used to define if we want to use ODBC, or one of the two native -interface available, PostgreSQL or MySQL.

    To use the native MySQL interface, you can pass a tuple of the following form as -parameter: -

    {mysql, "Server", "Database", "Username", "Password"}
    -

    mysql is a keyword that should be kept as is. For example: -

    {odbc_server, {mysql, "localhost", "test", "root", "password"}}.
    -

    Optionally, it is possible to define the MySQL port to use. This -option is only useful, in very rare cases, when you are not running -MySQL with the default port setting. The mysql parameter -can thus take the following form: -

    {mysql, "Server", Port, "Database", "Username", "Password"}
    -

    The Port value should be an integer, without quotes. For example: -

    {odbc_server, {mysql, "localhost", Port, "test", "root", "password"}}.
    -
    -

    Storage

    - +

    {auth_method, [odbc]}.
    +

    +

    Storage

    MySQL also can be used to store information into from several ejabberd modules. See section 3.3.1 to see which modules have a version with the ‘_odbc’. This suffix indicates that the module can be used with relational databases like MySQL. To enable storage to your database, just make sure that your database is running well (see previous sections), and replace the suffix-less or ldap module variant with the odbc module variant. Keep in mind -that you cannot have several variants of the same module loaded!

    -

    3.2.2  Microsoft SQL Server

    - +that you cannot have several variants of the same module loaded!

    +

    3.2.2  Microsoft SQL Server

    Although this section will describe ejabberd’s configuration when you want to use Microsoft SQL Server, it does not describe Microsoft SQL Server’s installation and database creation. Check the MySQL documentation and the @@ -1274,29 +1476,28 @@ tutorial {odbc_pool_size, 10}. -

    You can configure an interval to make a dummy SQL request -to keep alive the connections to the database. -The default value is ’undefined’, so no keepalive requests are made. -Specify in seconds: for example 28800 means 8 hours. -

    {odbc_keepalive_interval, undefined}.
    -
    -

    Driver Compilation

    - +of the file you can find information to update your database schema.

    +

    Driver Compilation

    You can skip this step if you installed ejabberd using a binary installer or if the binary packages of ejabberd you are using include support for ODBC.

    If you want to use Microsoft SQL Server with ODBC, you need to configure, compile and install ejabberd with support for ODBC and Microsoft SQL Server enabled. This can be done, by using next commands:

    ./configure --enable-odbc --enable-mssql && make install
    -
    -

    Authentication

    - +

    +

    Database Connection

    +

    By default ejabberd opens 10 connections to the database for each virtual host. +Use this option to modify the value: +

    {odbc_pool_size, 10}.
    +

    You can configure an interval to make a dummy SQL request +to keep alive the connections to the database. +The default value is ’undefined’, so no keepalive requests are made. +Specify in seconds: for example 28800 means 8 hours. +

    {odbc_keepalive_interval, undefined}.
    +

    +

    Authentication

    The configuration of Microsoft SQL Server is the same as the configuration of -ODBC compatible servers (see section 3.2.4).

    -

    Storage

    - +ODBC compatible servers (see section 3.2.4).

    +

    Storage

    Microsoft SQL Server also can be used to store information into from several ejabberd modules. See section 3.3.1 to see which modules have a version with the ‘_odbc’. This suffix indicates that the module can be used @@ -1304,31 +1505,21 @@ with relational databases like Microsoft SQL Server. To enable storage to your database, just make sure that your database is running well (see previous sections), and replace the suffix-less or ldap module variant with the odbc module variant. Keep in mind that you cannot have several variants of the same -module loaded!

    -

    3.2.3  PostgreSQL

    - +module loaded!

    +

    3.2.3  PostgreSQL

    Although this section will describe ejabberd’s configuration when you want to use the native PostgreSQL driver, it does not describe PostgreSQL’s installation and database creation. Check the PostgreSQL documentation and the tutorial Using ejabberd with MySQL native driver for information regarding these topics. Note that the tutorial contains information about ejabberd’s configuration which is duplicate to this section.

    Also the file pg.sql in the directory src/odbc might be interesting for you. This file contains the ejabberd schema for PostgreSQL. At the end of the file -you can find information to update your database schema.

    By default ejabberd opens 10 connections to the database for each virtual host. -Use this option to modify the value: -

    {odbc_pool_size, 10}.
    -

    You can configure an interval to make a dummy SQL request -to keep alive the connections to the database. -The default value is ’undefined’, so no keepalive requests are made. -Specify in seconds: for example 28800 means 8 hours. -

    {odbc_keepalive_interval, undefined}.
    -
    -

    Driver Compilation

    - +you can find information to update your database schema.

    +

    Driver Compilation

    You can skip this step if you installed ejabberd using a binary installer or if the binary packages of ejabberd you are using include support for PostgreSQL.

    1. First, install the Erlang pgsql library from -ejabberd-modules SVN repository. +ejabberd-modules SVN repository. Make sure the compiled files are in your Erlang path; you can put them for example in the same directory as your ejabberd .beam files. @@ -1336,55 +1527,49 @@ directory as your ejabberd .beam files. (this is also needed for native PostgreSQL support!). This can be done, by using next commands:
      ./configure --enable-odbc && make install
      -
    -

    Authentication

    - +

    +

    Database Connection

    +

    The actual database access is defined in the option odbc_server. Its +value is used to define if we want to use ODBC, or one of the two native +interface available, PostgreSQL or MySQL.

    To use the native PostgreSQL interface, you can pass a tuple of the following +form as parameter: +

    {pgsql, "Server", "Database", "Username", "Password"}

    pgsql is a keyword that should be kept as is. For example: +

    {odbc_server, {pgsql, "localhost", "database", "ejabberd", "password"}}.

    Optionally, it is possible to define the PostgreSQL port to use. This +option is only useful, in very rare cases, when you are not running +PostgreSQL with the default port setting. The pgsql parameter +can thus take the following form: +

    {pgsql, "Server", Port, "Database", "Username", "Password"}

    The Port value should be an integer, without quotes. For example: +

    {odbc_server, {pgsql, "localhost", 5432, "database", "ejabberd", "password"}}.

    By default ejabberd opens 10 connections to the database for each virtual host. +Use this option to modify the value: +

    {odbc_pool_size, 10}.
    +

    You can configure an interval to make a dummy SQL request +to keep alive the connections to the database. +The default value is ’undefined’, so no keepalive requests are made. +Specify in seconds: for example 28800 means 8 hours. +

    {odbc_keepalive_interval, undefined}.
    +

    +

    Authentication

    The option value name may be misleading, as the auth_method name is used for access to a relational database through ODBC, as well as through the native PostgreSQL interface. Anyway, the first configuration step is to define the odbc auth_method. For example: -

    {host_config, "public.example.org", [{auth_method, [odbc]}]}.
    -

    The actual database access is defined in the option odbc_server. Its -value is used to define if we want to use ODBC, or one of the two native -interface available, PostgreSQL or MySQL.

    To use the native PostgreSQL interface, you can pass a tuple of the following -form as parameter: -

    {pgsql, "Server", "Database", "Username", "Password"}
    -

    pgsql is a keyword that should be kept as is. For example: -

    {odbc_server, {pgsql, "localhost", "database", "ejabberd", "password"}}.
    -

    Optionally, it is possible to define the PostgreSQL port to use. This -option is only useful, in very rare cases, when you are not running -PostgreSQL with the default port setting. The pgsql parameter -can thus take the following form: -

    {pgsql, "Server", Port, "Database", "Username", "Password"}
    -

    The Port value should be an integer, without quotes. For example: -

    {odbc_server, {pgsql, "localhost", 5432, "database", "ejabberd", "password"}}.
    -
    -

    Storage

    - +

    {auth_method, [odbc]}.
    +

    +

    Storage

    PostgreSQL also can be used to store information into from several ejabberd modules. See section 3.3.1 to see which modules have a version with the ‘_odbc’. This suffix indicates that the module can be used with relational databases like PostgreSQL. To enable storage to your database, just make sure that your database is running well (see previous sections), and replace the suffix-less or ldap module variant with the odbc module variant. -Keep in mind that you cannot have several variants of the same module loaded!

    -

    3.2.4  ODBC Compatible

    - +Keep in mind that you cannot have several variants of the same module loaded!

    +

    3.2.4  ODBC Compatible

    Although this section will describe ejabberd’s configuration when you want to use the ODBC driver, it does not describe the installation and database creation of your database. Check the documentation of your database. The tutorial Using ejabberd with MySQL native driver also can help you. Note that the tutorial contains information about ejabberd’s configuration which is duplicate to -this section.

    By default ejabberd opens 10 connections to the database for each virtual host. -Use this option to modify the value: -

    {odbc_pool_size, 10}.
    -

    You can configure an interval to make a dummy SQL request -to keep alive the connections to the database. -The default value is ’undefined’, so no keepalive requests are made. -Specify in seconds: for example 28800 means 8 hours. -

    {odbc_keepalive_interval, undefined}.
    -
    -

    Driver Compilation

    -

    You can skip this step if you installed ejabberd using a binary installer or +this section.

    +

    Driver Compilation

    You can skip this step if you installed ejabberd using a binary installer or if the binary packages of ejabberd you are using include support for ODBC.

    1. First, install the Erlang @@ -1393,20 +1578,28 @@ put them for example in the same directory as your ejabberd .beam files
    2. Then, configure, compile and install ejabberd with ODBC support enabled. This can be done, by using next commands:
      ./configure --enable-odbc && make install
      -
    -

    Authentication

    - -

    The first configuration step is to define the odbc auth_method. For -example: -

    {host_config, "public.example.org", [{auth_method, [odbc]}]}.
    -

    The actual database access is defined in the option odbc_server. Its +

    +

    Database Connection

    +

    The actual database access is defined in the option odbc_server. Its value is used to defined if we want to use ODBC, or one of the two native interface available, PostgreSQL or MySQL.

    To use a relational database through ODBC, you can pass the ODBC connection string as odbc_server parameter. For example:

    {odbc_server, "DSN=database;UID=ejabberd;PWD=password"}.
    -
    -

    Storage

    - +

    By default ejabberd opens 10 connections to the database for each virtual host. +Use this option to modify the value: +

    {odbc_pool_size, 10}.
    +

    You can configure an interval to make a dummy SQL request +to keep alive the connections to the database. +The default value is ’undefined’, so no keepalive requests are made. +Specify in seconds: for example 28800 means 8 hours. +

    {odbc_keepalive_interval, undefined}.
    +

    +

    Authentication

    +

    The first configuration step is to define the odbc auth_method. For +example: +

    {auth_method, [odbc]}.
    +

    +

    Storage

    An ODBC compatible database also can be used to store information into from several ejabberd modules. See section 3.3.1 to see which modules have a version with the ‘_odbc’. This suffix indicates that the module @@ -1414,46 +1607,48 @@ can be used with ODBC compatible relational databases. To enable storage to your database, just make sure that your database is running well (see previous sections), and replace the suffix-less or ldap module variant with the odbc module variant. Keep in mind that you cannot have several variants of the same -module loaded!

    -

    3.2.5  LDAP

    - +module loaded!

    +

    3.2.5  LDAP

    ejabberd has built-in LDAP support. You can authenticate users against LDAP server and use LDAP directory as vCard storage. Shared rosters are not supported -yet.

    -

    Connection

    -

    Parameters: +yet.

    Note that ejabberd treats LDAP as a read-only storage: +it is possible to consult data, but not possible to +create accounts, change password or edit vCard that is stored in LDAP.

    +

    Connection

    Parameters:

    -ldap_servers
    List of IP addresses or DNS names of your +{ldap_servers, [Servers, ...]}
    List of IP addresses or DNS names of your LDAP servers. This option is required. -
    ldap_port
    Port to connect to your LDAP server. -The initial default value is 389, so it is used when nothing is set into the -configuration file. -If you configure a value, it is stored in ejabberd’s database. -Then, if you remove that value from the configuration file, -the value previously stored in the database will be used instead of the default 389. -
    ldap_rootdn
    Bind DN. The default value +
    {ldap_encrypt, none|tls}
    Type of connection encryption to the LDAP server. +Allowed values are: none, tls. +Note that STARTTLS is not supported. +The default value is: none. +
    {ldap_port, Number}
    Port to connect to your LDAP server. +The default port is 389 if encryption is disabled; and 636 if encryption is enabled. +If you configure a value, it is stored in ejabberd’s database. +Then, if you remove that value from the configuration file, +the value previously stored in the database will be used instead of the default port. +
    {ldap_rootdn, RootDN}
    Bind DN. The default value is "" which means ‘anonymous connection’. -
    ldap_password
    Bind password. The default +
    {ldap_password, Password}
    Bind password. The default value is "".

    Example: -

      {auth_method, ldap}.
    -  {ldap_servers, ["ldap.example.org"]}.
    -  {ldap_port, 389}.
    -  {ldap_rootdn, "cn=Manager,dc=domain,dc=org"}.
    -  {ldap_password, "secret"}.
    +

    {auth_method, ldap}.
    +{ldap_servers, ["ldap.example.org"]}.
    +{ldap_port, 389}.
    +{ldap_rootdn, "cn=Manager,dc=domain,dc=org"}.
    +{ldap_password, "secret"}.
     

    Note that current LDAP implementation does not support SSL secured communication -and SASL authentication.

    -

    Authentication

    -

    You can authenticate users against an LDAP directory. Available options are:

    -ldap_base
    LDAP base directory which stores +and SASL authentication.

    +

    Authentication

    You can authenticate users against an LDAP directory. Available options are:

    +{ldap_base, Base}
    LDAP base directory which stores users accounts. This option is required. -
    ldap_uids
    LDAP attribute which holds a list -of attributes to use as alternatives for getting the JID. The value is of -the form: [{ldap_uidattr}] or [{ldap_uidattr, -ldap_uidattr_format}]. You can use as many comma separated tuples -{ldap_uidattr, ldap_uidattr_format} that is needed. The default -value is [{"uid", "%u"}]. The defaut ldap_uidattr_format -is "%u". The values for ldap_uidattr and +
    {ldap_uids, [ {ldap_uidattr} | {ldap_uidattr, ldap_uidattr_format}, ...]}
    +LDAP attribute which holds a list of attributes to use as alternatives for getting the JID. +The default attributes are [{"uid", "%u"}]. +The attributes are of the form: +[{ldap_uidattr}] or [{ldap_uidattr, ldap_uidattr_format}]. +You can use as many comma separated attributes as needed. +The values for ldap_uidattr and ldap_uidattr_format are described as follow:
    ldap_uidattr
    LDAP attribute which holds @@ -1464,188 +1659,203 @@ only one pattern variable "%u" which will be replaced by the user’s part of a JID. For example, "%u@example.org". The default value is "%u".
    -
    ldap_filter
    -RFC 2254 LDAP filter. The +
    {ldap_filter, Filter}
    +RFC 4515 LDAP filter. The default is none. Example: "(&(objectClass=shadowAccount)(memberOf=Jabber Users))". Please, do not forget to close brackets and do not use superfluous whitespaces. Also you must not use ldap_uidattr attribute in filter because this -attribute will be substituted in LDAP filter automatically. -
    -

    Examples

    -

    -
    Common example

    Let’s say ldap.example.org is the name of our LDAP server. We have +attribute will be substituted in LDAP filter automatically.

    {ldap_local_filter, Filter}
    +If you can’t use ldap_filter due to performance reasons +(the LDAP server has many users registered), +you can use this local filter. +The local filter checks an attribute in ejabberd, +not in LDAP, so this limits the load on the LDAP directory. +The default filter is: undefined. +Example values: +
    {ldap_local_filter, {notequal, {"accountStatus",["disabled"]}}}.
    +{ldap_local_filter, {equal, {"accountStatus",["enabled"]}}}.
    +{ldap_local_filter, undefined}.
    +

    +

    Examples

    +
    Common example

    Let’s say ldap.example.org is the name of our LDAP server. We have users with their passwords in "ou=Users,dc=example,dc=org" directory. Also we have addressbook, which contains users emails and their additional -infos in "ou=AddressBook,dc=example,dc=org" directory. Corresponding -authentication section should looks like this:

      %% authentication method
    -  {auth_method, ldap}.
    -  %% DNS name of our LDAP server
    -  {ldap_servers, ["ldap.example.org"]}.
    -  %% Bind to LDAP server as "cn=Manager,dc=example,dc=org" with password "secret"
    -  {ldap_rootdn, "cn=Manager,dc=example,dc=org"}.
    -  {ldap_password, "secret"}.
    -  %% define the user's base
    -  {ldap_base, "ou=Users,dc=example,dc=org"}.
    -  %% We want to authorize users from 'shadowAccount' object class only
    -  {ldap_filter, "(objectClass=shadowAccount)"}.
    +infos in "ou=AddressBook,dc=example,dc=org" directory.
    +The connection to the LDAP server is encrypted using TLS,
    +and using the custom port 6123.
    +Corresponding authentication section should looks like this:

    %% Authentication method
    +{auth_method, ldap}.
    +%% DNS name of our LDAP server
    +{ldap_servers, ["ldap.example.org"]}.
    +%% Bind to LDAP server as "cn=Manager,dc=example,dc=org" with password "secret"
    +{ldap_rootdn, "cn=Manager,dc=example,dc=org"}.
    +{ldap_password, "secret"}.
    +{ldap_encrypt, tls}.
    +{ldap_port, 6123}.
    +%% Define the user's base
    +{ldap_base, "ou=Users,dc=example,dc=org"}.
    +%% We want to authorize users from 'shadowAccount' object class only
    +{ldap_filter, "(objectClass=shadowAccount)"}.
     

    Now we want to use users LDAP-info as their vCards. We have four attributes defined in our LDAP schema: "mail" — email address, "givenName" — first name, "sn" — second name, "birthDay" — birthday. -Also we want users to search each other. Let’s see how we can set it up:

      {modules,
    -    ...
    -    {mod_vcard_ldap,
    -     [
    -      %% We use the same server and port, but want to bind anonymously because
    -      %% our LDAP server accepts anonymous requests to
    -      %% "ou=AddressBook,dc=example,dc=org" subtree.
    -      {ldap_rootdn, ""},
    -      {ldap_password, ""},
    -      %% define the addressbook's base
    -      {ldap_base, "ou=AddressBook,dc=example,dc=org"},
    -      %% uidattr: user's part of JID is located in the "mail" attribute
    -      %% uidattr_format: common format for our emails
    -      {ldap_uids, [{"mail", "%u@mail.example.org"}]},
    -      %% We have to define empty filter here, because entries in addressbook does not
    -      %% belong to shadowAccount object class
    -      {ldap_filter, ""},
    -      %% Now we want to define vCard pattern
    -      {ldap_vcard_map,
    -       [{"NICKNAME", "%u", []}, % just use user's part of JID as his nickname
    -        {"GIVEN", "%s", ["givenName"]},
    -        {"FAMILY", "%s", ["sn"]},
    -        {"FN", "%s, %s", ["sn", "givenName"]}, % example: "Smith, John"
    -        {"EMAIL", "%s", ["mail"]},
    -        {"BDAY", "%s", ["birthDay"]}]},
    -      %% Search form
    -      {ldap_search_fields,
    -       [{"User", "%u"},
    -        {"Name", "givenName"},
    -        {"Family Name", "sn"},
    -        {"Email", "mail"},
    -        {"Birthday", "birthDay"}]},
    -      %% vCard fields to be reported
    -      %% Note that JID is always returned with search results
    -      {ldap_search_reported,
    -       [{"Full Name", "FN"},
    -        {"Nickname", "NICKNAME"},
    -        {"Birthday", "BDAY"}]}
    -    ]},
    -    ...
    -  }.
    +Also we want users to search each other. Let’s see how we can set it up:

    {modules,
    + [
    +  ...
    +  {mod_vcard_ldap,
    +   [
    +    %% We use the same server and port, but want to bind anonymously because
    +    %% our LDAP server accepts anonymous requests to
    +    %% "ou=AddressBook,dc=example,dc=org" subtree.
    +    {ldap_rootdn, ""},
    +    {ldap_password, ""},
    +    %% define the addressbook's base
    +    {ldap_base, "ou=AddressBook,dc=example,dc=org"},
    +    %% uidattr: user's part of JID is located in the "mail" attribute
    +    %% uidattr_format: common format for our emails
    +    {ldap_uids, [{"mail", "%u@mail.example.org"}]},
    +    %% We have to define empty filter here, because entries in addressbook does not
    +    %% belong to shadowAccount object class
    +    {ldap_filter, ""},
    +    %% Now we want to define vCard pattern
    +    {ldap_vcard_map,
    +     [{"NICKNAME", "%u", []}, % just use user's part of JID as his nickname
    +      {"GIVEN", "%s", ["givenName"]},
    +      {"FAMILY", "%s", ["sn"]},
    +      {"FN", "%s, %s", ["sn", "givenName"]}, % example: "Smith, John"
    +      {"EMAIL", "%s", ["mail"]},
    +      {"BDAY", "%s", ["birthDay"]}]},
    +    %% Search form
    +    {ldap_search_fields,
    +     [{"User", "%u"},
    +      {"Name", "givenName"},
    +      {"Family Name", "sn"},
    +      {"Email", "mail"},
    +      {"Birthday", "birthDay"}]},
    +    %% vCard fields to be reported
    +    %% Note that JID is always returned with search results
    +    {ldap_search_reported,
    +     [{"Full Name", "FN"},
    +      {"Nickname", "NICKNAME"},
    +      {"Birthday", "BDAY"}]}
    +  ]},
    +  ...
    + ]}.
     

    Note that mod_vcard_ldap module checks for the existence of the user before -searching in his information in LDAP.

    -
    Active Directory

    - +searching in his information in LDAP.

    +
    Active Directory

    Active Directory is just an LDAP-server with predefined attributes. A sample -configuration is shown below:

      {auth_method, ldap}.
    -  {ldap_servers, ["office.org"]}.    % List of LDAP servers
    -  {ldap_base, "DC=office,DC=org"}. % Search base of LDAP directory
    -  {ldap_rootdn, "CN=Administrator,CN=Users,DC=office,DC=org"}. % LDAP manager
    -  {ldap_password, "*******"}. % Password to LDAP manager
    -  {ldap_uids, [{"sAMAccountName"}]}.
    -  {ldap_filter, "(memberOf=*)"}.
    +configuration is shown below:

    {auth_method, ldap}.
    +{ldap_servers, ["office.org"]}.    % List of LDAP servers
    +{ldap_base, "DC=office,DC=org"}. % Search base of LDAP directory
    +{ldap_rootdn, "CN=Administrator,CN=Users,DC=office,DC=org"}. % LDAP manager
    +{ldap_password, "*******"}. % Password to LDAP manager
    +{ldap_uids, [{"sAMAccountName"}]}.
    +{ldap_filter, "(memberOf=*)"}.
     
    -  {modules,
    -    ...
    -    {mod_vcard_ldap,
    -     [{ldap_vcard_map,
    -       [{"NICKNAME", "%u", []},
    -        {"GIVEN", "%s", ["givenName"]},
    -        {"MIDDLE", "%s", ["initials"]},
    -        {"FAMILY", "%s", ["sn"]},
    -        {"FN", "%s", ["displayName"]},
    -        {"EMAIL", "%s", ["mail"]},
    -        {"ORGNAME", "%s", ["company"]},
    -        {"ORGUNIT", "%s", ["department"]},
    -        {"CTRY", "%s", ["c"]},
    -        {"LOCALITY", "%s", ["l"]},
    -        {"STREET", "%s", ["streetAddress"]},
    -        {"REGION", "%s", ["st"]},
    -        {"PCODE", "%s", ["postalCode"]},
    -        {"TITLE", "%s", ["title"]},
    -        {"URL", "%s", ["wWWHomePage"]},
    -        {"DESC", "%s", ["description"]},
    -        {"TEL", "%s", ["telephoneNumber"]}]},
    -      {ldap_search_fields,
    -       [{"User", "%u"},
    -        {"Name", "givenName"},
    -        {"Family Name", "sn"},
    -        {"Email", "mail"},
    -        {"Company", "company"},
    -        {"Department", "department"},
    -        {"Role", "title"},
    -        {"Description", "description"},
    -        {"Phone", "telephoneNumber"}]},
    -      {ldap_search_reported,
    -       [{"Full Name", "FN"},
    -        {"Nickname", "NICKNAME"},
    -        {"Email", "EMAIL"}]}
    -    ]},
    -    ...
    -  }.
    -
    -

    3.3  Modules Configuration

    - +{modules, + [ + ... + {mod_vcard_ldap, + [{ldap_vcard_map, + [{"NICKNAME", "%u", []}, + {"GIVEN", "%s", ["givenName"]}, + {"MIDDLE", "%s", ["initials"]}, + {"FAMILY", "%s", ["sn"]}, + {"FN", "%s", ["displayName"]}, + {"EMAIL", "%s", ["mail"]}, + {"ORGNAME", "%s", ["company"]}, + {"ORGUNIT", "%s", ["department"]}, + {"CTRY", "%s", ["c"]}, + {"LOCALITY", "%s", ["l"]}, + {"STREET", "%s", ["streetAddress"]}, + {"REGION", "%s", ["st"]}, + {"PCODE", "%s", ["postalCode"]}, + {"TITLE", "%s", ["title"]}, + {"URL", "%s", ["wWWHomePage"]}, + {"DESC", "%s", ["description"]}, + {"TEL", "%s", ["telephoneNumber"]}]}, + {ldap_search_fields, + [{"User", "%u"}, + {"Name", "givenName"}, + {"Family Name", "sn"}, + {"Email", "mail"}, + {"Company", "company"}, + {"Department", "department"}, + {"Role", "title"}, + {"Description", "description"}, + {"Phone", "telephoneNumber"}]}, + {ldap_search_reported, + [{"Full Name", "FN"}, + {"Nickname", "NICKNAME"}, + {"Email", "EMAIL"}]} + ]}, + ... + ]}. +

    +

    3.3  Modules Configuration

    The option modules defines the list of modules that will be loaded after ejabberd’s startup. Each entry in the list is a tuple in which the first element is the name of a module and the second is a list of options for that -module.

    Examples: +module.

    The syntax is: +

    {modules, [ {ModuleName, ModuleOptions}, ...]}.

    Examples:

    • In this example only the module mod_echo is loaded and no module options are specified between the square brackets: -
        {modules,
      -   [{mod_echo,      []}
      -   ]}.
      +
      {modules,
      + [
      +  {mod_echo,      []}
      + ]}.
       
    • In the second example the modules mod_echo, mod_time, and mod_version are loaded without options. Remark that, besides the last entry, all entries end with a comma: -
        {modules,
      -   [{mod_echo,      []},
      -    {mod_time,      []},
      -    {mod_version,   []}
      -   ]}.
      -
    -

    3.3.1  Overview

    - +

    {modules,
    + [
    +  {mod_echo,      []},
    +  {mod_time,      []},
    +  {mod_version,   []}
    + ]}.
    +

    +

    3.3.1  Modules Overview

    The following table lists all modules included in ejabberd.


    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
    ModuleFeatureDependenciesNeeded for XMPP?
    mod_adhocAd-Hoc Commands (XEP-0050) No
    mod_announceManage announcementsrecommends mod_adhocNo
    mod_capsRequest and cache Entity Capabilities (XEP-0115) No
    mod_configureServer configuration using Ad-Hocmod_adhocNo
    mod_discoService Discovery (XEP-0030) No
    mod_echoEchoes Jabber packets No
    mod_ircIRC transport No
    mod_lastLast Activity (XEP-0012) No
    mod_last_odbcLast Activity (XEP-0012)supported database (*)No
    mod_mucMulti-User Chat (XEP-0045) No
    mod_muc_logMulti-User Chat room loggingmod_mucNo
    mod_offlineOffline message storage No
    mod_offline_odbcOffline message storagesupported database (*)No
    mod_privacyBlocking Communications Yes
    mod_privacy_odbcBlocking Communicationssupported database (*)Yes
    mod_privatePrivate XML Storage (XEP-0049) No
    mod_private_odbcPrivate XML Storage (XEP-0049)supported database (*)No
    mod_proxy65SOCKS5 Bytestreams (XEP-0065) No
    mod_pubsubPublish-Subscribe (XEP-0060) and PEP (XEP-0163)mod_capsNo
    mod_registerIn-Band Registration (XEP-0077) No
    mod_rosterRoster management Yes (**)
    mod_roster_odbcRoster managementsupported database (*)Yes (**)
    mod_service_logCopy user messages to logger service No
    mod_shared_rosterShared roster managementmod_roster orNo
      mod_roster_odbc 
    mod_statsStatistics Gathering (XEP-0039) No
    mod_timeEntity Time (XEP-0090) No
    mod_vcardvcard-temp (XEP-0054) No
    mod_vcard_ldapvcard-temp (XEP-0054)LDAP serverNo
    mod_vcard_odbcvcard-temp (XEP-0054)supported database (*)No
    mod_versionSoftware Version (XEP-0092) No
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ModuleFeatureDependencies
    mod_adhocAd-Hoc Commands (XEP-0050) 
    mod_announceManage announcementsrecommends mod_adhoc
    mod_capsEntity Capabilities (XEP-0115) 
    mod_configureServer configuration using Ad-Hocmod_adhoc
    mod_discoService Discovery (XEP-0030) 
    mod_echoEchoes XMPP stanzas 
    mod_ircIRC transport 
    mod_lastLast Activity (XEP-0012) 
    mod_last_odbcLast Activity (XEP-0012)supported DB (*)
    mod_mucMulti-User Chat (XEP-0045) 
    mod_muc_logMulti-User Chat room loggingmod_muc
    mod_offlineOffline message storage (XEP-0160) 
    mod_offline_odbcOffline message storage (XEP-0160)supported DB (*)
    mod_pingXMPP Ping and periodic keepalives (XEP-0199) 
    mod_privacyBlocking Communication (XMPP IM) 
    mod_privacy_odbcBlocking Communication (XMPP IM)supported DB (*)
    mod_privatePrivate XML Storage (XEP-0049) 
    mod_private_odbcPrivate XML Storage (XEP-0049)supported DB (*)
    mod_proxy65SOCKS5 Bytestreams (XEP-0065) 
    mod_pubsubPub-Sub (XEP-0060), PEP (XEP-0163)mod_caps
    mod_pubsub_odbcPub-Sub (XEP-0060), PEP (XEP-0163)supported DB (*) and mod_caps
    mod_registerIn-Band Registration (XEP-0077) 
    mod_rosterRoster management (XMPP IM) 
    mod_roster_odbcRoster management (XMPP IM)supported DB (*)
    mod_service_logCopy user messages to logger service 
    mod_shared_rosterShared roster managementmod_roster or
      mod_roster_odbc
    mod_statsStatistics Gathering (XEP-0039) 
    mod_timeEntity Time (XEP-0202) 
    mod_vcardvcard-temp (XEP-0054) 
    mod_vcard_ldapvcard-temp (XEP-0054)LDAP server
    mod_vcard_odbcvcard-temp (XEP-0054)supported DB (*)
    mod_versionSoftware Version (XEP-0092) 

    • -(*) For a list of supported databases, see section 3.2. -
    • (**) This module or a similar one with another database backend is needed for -XMPP compliancy. +(*) This module requires a supported database. For a list of supported databases, see section 3.2.

    You can see which database backend each module needs by looking at the suffix:

    • No suffix, this means that the modules uses Erlang’s built-in database @@ -1670,16 +1880,15 @@ Last connection date and time: Use mod_last_odbc instead of contributed modules on the ejabberd website. Please remember that these contributions might not work or that they can contain severe bugs and security leaks. Therefore, use them at -your own risk!

      -

      3.3.2  Common Options

      -

      The following options are used by many modules. Therefore, they are described in -this separate section.

      -

      iqdisc

      - +your own risk!

      +

      3.3.2  Common Options

      The following options are used by many modules. Therefore, they are described in +this separate section.

      +

      iqdisc

      Many modules define handlers for processing IQ queries of different namespaces to this server or to a user (e. g. to example.org or to user@example.org). This option defines processing discipline for -these queries. Possible values are: +these queries.

      The syntax is: +

      {iqdisc, Value}

      Possible Value are:

      no_queue
      All queries of a namespace with this processing discipline are processed immediately. This also means that no other packets can be processed @@ -1689,46 +1898,48 @@ recommended if the processing of a query can take a relatively long time. of IQ queries of a namespace with this discipline. In addition, the processing of this queue is done in parallel with that of other packets. This discipline is most recommended. +
      {queues, N}
      N separate queues are created to process the +queries. The queries are thus process in parallel, but in a +controlled way.
      parallel
      For every packet with this discipline a separate Erlang process is spawned. Consequently, all these packets are processed in parallel. Although spawning of Erlang process has a relatively low cost, this can break the server’s normal work, because the Erlang emulator has a limit on the number of processes (32000 by default).

      Example: -

        {modules,
      -   [
      -    ...
      -    {mod_time, [{iqdisc, no_queue}]},
      -    ...
      -   ]}.
      -
      -

      host

      - -

      This option defines the Jabber ID of a service provided by an ejabberd module. -The keyword "@HOST@" is replaced at start time with the real virtual host string.

      This example configures -the echo module to provide its echoing service +

      {modules,
      + [
      +  ...
      +  {mod_time, [{iqdisc, no_queue}]},
      +  ...
      + ]}.
      +

      +

      host

      +

      This option defines the Jabber ID of a service provided by an ejabberd module.

      The syntax is: +

      {host, HostName}

      If you include the keyword "@HOST@" in the HostName, +it is replaced at start time with the real virtual host string.

      This example configures +the echo module to provide its echoing service in the Jabber ID mirror.example.org: -

        {modules,
      -   [
      -    ...
      -    {mod_echo, [{host, "mirror.example.org"}]},
      -    ...
      -   ]}.
      +

      {modules,
      + [
      +  ...
      +  {mod_echo, [{host, "mirror.example.org"}]},
      +  ...
      + ]}.
       

      However, if there are several virtual hosts and this module is enabled in all of them, the "@HOST@" keyword must be used: -

        {modules,
      -   [
      -    ...
      -    {mod_echo, [{host, "mirror.@HOST@"}]},
      -    ...
      -   ]}.
      -
      -

      3.3.3  mod_announce

      - +

      {modules,
      + [
      +  ...
      +  {mod_echo, [{host, "mirror.@HOST@"}]},
      +  ...
      + ]}.
      +

      +

      3.3.3  mod_announce

      This module enables configured users to broadcast announcements and to set -the message of the day (MOTD). +the message of the day (MOTD). Configured users can perform these actions with a -Jabber client either using Ad-hoc commands +XMPP client either using Ad-hoc commands or sending messages to specific JIDs.

      The Ad-hoc commands are listed in the Server Discovery. For this feature to work, mod_adhoc must be enabled.

      The specific JIDs where messages can be sent are listed bellow. The first JID in each entry will apply only to the specified virtual host @@ -1740,7 +1951,7 @@ message is sent to all registered users. If the user is online and connected to several resources, only the resource with the highest priority will receive the message. If the registered user is not connected, the message will be stored offline in assumption that offline storage -(see section 3.3.10) is enabled. +(see section 3.3.12) is enabled.

      example.org/announce/online (example.org/announce/all-hosts/online)
      The message is sent to all connected users. If the user is online and connected to several resources, all resources will receive the message. @@ -1755,111 +1966,255 @@ login. The message is not sent to any currently connected user. Any message sent to this JID removes the existing message of the day (MOTD).

      Options:

      -access
      This option specifies who is allowed to +{access, AccessName}
      This option specifies who is allowed to send announcements and to set the message of the day (by default, nobody is able to send such messages).

      Examples:

      • Only administrators can send announcements: -
          {access, announce, [{allow, admins}]}.
        +
        {access, announce, [{allow, admins}]}.
         
        -  {modules,
        -   [
        -    ...
        -    {mod_adhoc, []},
        -    {mod_announce, [{access, announce}]},
        -    ...
        -   ]}.
        +{modules,
        + [
        +  ...
        +  {mod_adhoc, []},
        +  {mod_announce, [{access, announce}]},
        +  ...
        + ]}.
         
      • Administrators as well as the direction can send announcements: -
          {acl, direction, {user, "big_boss", "example.org"}}.
        -  {acl, direction, {user, "assistant", "example.org"}}.
        -  {acl, admins, {user, "admin", "example.org"}}.
        +
        {acl, direction, {user, "big_boss", "example.org"}}.
        +{acl, direction, {user, "assistant", "example.org"}}.
        +{acl, admins, {user, "admin", "example.org"}}.
        +
        +{access, announce, [{allow, admins},
        +                    {allow, direction}]}.
        +
        +{modules,
        + [
           ...
        -  {access, announce, [{allow, admins},
        -                      {allow, direction}]}.
        +  {mod_adhoc, []},
        +  {mod_announce, [{access, announce}]},
           ...
        -  {modules,
        -   [
        -    ...
        -    {mod_adhoc, []},
        -    {mod_announce, [{access, announce}]},
        -    ...
        -   ]}.
        + ]}.
         

      Note that mod_announce can be resource intensive on large deployments as it can broadcast lot of messages. This module should be -disabled for instances of ejabberd with hundreds of thousands users.

      -

      3.3.4  mod_disco

      - -

      This module adds support for Service Discovery (XEP-0030). With +disabled for instances of ejabberd with hundreds of thousands users.

      +

      3.3.4  mod_disco

      + + + + +

      This module adds support for Service Discovery (XEP-0030). With this module enabled, services on your server can be discovered by -Jabber clients. Note that ejabberd has no modules with support -for the superseded Jabber Browsing (XEP-0011) and Agent Information -(XEP-0094). Accordingly, Jabber clients need to have support for +XMPP clients. Note that ejabberd has no modules with support +for the superseded Jabber Browsing (XEP-0011) and Agent Information +(XEP-0094). Accordingly, XMPP clients need to have support for the newer Service Discovery protocol if you want them be able to discover the services you offer.

      Options:

      -iqdisc
      This specifies +{iqdisc, Discipline}
      This specifies the processing discipline for Service Discovery (http://jabber.org/protocol/disco#items and http://jabber.org/protocol/disco#info) IQ queries (see section 3.3.2). -
      extra_domains
      With this option, -extra domains can be added to the Service Discovery item list. +
      {extra_domains, [Domain, ...]}
      With this option, +you can specify a list of extra domains that are added to the Service Discovery item list. +
      {server_info, [ {Modules, Field, [Value, ...]}, ... ]}
      +Specify additional information about the server, +as described in Contact Addresses for XMPP Services (XEP-0157). +Modules can be the keyword ‘all’, +in which case the information is reported in all the services; +or a list of ejabberd modules, +in which case the information is only specified for the services provided by those modules. +Any arbitrary Field and Value can be specified, not only contact addresses.

      Examples:

      • To serve a link to the Jabber User Directory on jabber.org: -
          {modules,
        -   [
        -    ...
        -    {mod_disco, [{extra_domains, ["users.jabber.org"]}]},
        -    ...
        -   ]}.
        +
        {modules,
        + [
        +  ...
        +  {mod_disco, [{extra_domains, ["users.jabber.org"]}]},
        +  ...
        + ]}.
         
      • To serve a link to the transports on another server: -
          {modules,
        -   [
        -    ...
        -    {mod_disco, [{extra_domains, ["icq.example.com",
        -                                  "msn.example.com"]}]},
        -    ...
        -   ]}.
        +
        {modules,
        + [
        +  ...
        +  {mod_disco, [{extra_domains, ["icq.example.com",
        +                                "msn.example.com"]}]},
        +  ...
        + ]}.
         
      • To serve a link to a few friendly servers: -
          {modules,
        -   [
        -    ...
        -    {mod_disco, [{extra_domains, ["example.org",
        -                                  "example.com"]}]},
        -    ...
        -   ]}.
        -
      -

      3.3.5  mod_echo

      - -

      This module simply echoes any Jabber +

      {modules,
      + [
      +  ...
      +  {mod_disco, [{extra_domains, ["example.org",
      +                                "example.com"]}]},
      +  ...
      + ]}.
      +
    • With this configuration, all services show abuse addresses, +feedback address on the main server, +and admin addresses for both the main server and the vJUD service: +
      {modules,
      + [
      +  ...
      +  {mod_disco, [{server_info, [
      +      {all,
      +       "abuse-addresses",
      +       ["mailto:abuse@shakespeare.lit"]},
      +      {[mod_muc],
      +       "Web chatroom logs",
      +       ["http://www.example.org/muc-logs"]},
      +      {[mod_disco],
      +       "feedback-addresses",
      +       ["http://shakespeare.lit/feedback.php", "mailto:feedback@shakespeare.lit", "xmpp:feedback@shakespeare.lit"]},
      +      {[mod_disco, mod_vcard],
      +       "admin-addresses",
      +       ["mailto:xmpp@shakespeare.lit", "xmpp:admins@shakespeare.lit"]}
      +  ]}]},
      +  ...
      + ]}.
      +

    +

    3.3.5  mod_echo

    +

    This module simply echoes any XMPP packet back to the sender. This mirror can be of interest for -ejabberd and Jabber client debugging.

    Options: +ejabberd and XMPP client debugging.

    Options:

    -host
    This option defines the Jabber ID of the +{host, HostName}
    This option defines the Jabber ID of the service. If the host option is not specified, the Jabber ID will be the hostname of the virtual host with the prefix ‘echo.’. The keyword "@HOST@" is replaced at start time with the real virtual host name.

    Example: Mirror, mirror, on the wall, who is the most beautiful of them all? -

      {modules,
    -   [
    -    ...
    -    {mod_echo, [{host, "mirror.example.org"}]},
    -    ...
    -   ]}.
    -
    -

    3.3.6  mod_irc

    - +

    {modules,
    + [
    +  ...
    +  {mod_echo, [{host, "mirror.example.org"}]},
    +  ...
    + ]}.
    +

    +

    3.3.6  mod_http_bind

    +

    This module implements XMPP over Bosh (formerly known as HTTP Binding) +as defined in XEP-0124 and XEP-0206. +It extends ejabberd’s built in HTTP service with a configurable +resource at which this service will be hosted.

    To use HTTP-Binding, enable the module: +

    {modules,
    + [
    +  ...
    +  {mod_http_bind, []},
    +  ...
    +]}.
    +

    and add http_bind in the HTTP service. For example: +

    {listen, 
    + [
    +  ...
    +  {5280, ejabberd_http, [
    +                         http_bind,
    +                         http_poll,
    +                         web_admin
    +                        ]
    +  },
    +  ...
    +]}.
    +

    With this configuration, the module will serve the requests sent to +http://example.org:5280/http-bind/ +Remember that this page is not designed to be used by web browsers, +it is used by XMPP clients that support XMPP over Bosh.

    If you want to set the service in a different URI path or use a different module, +you can configure it manually using the option request_handlers. +For example: +

    {listen, 
    + [
    +  ...
    +  {5280, ejabberd_http, [
    +                         {request_handlers, [{["http-bind"], mod_http_bind}]},
    +                         http_poll,
    +                         web_admin
    +                        ]
    +  },
    +  ...
    +]}.
    +

    Options: +

    +{max_inactivity, Seconds}
    +Define the maximum inactivity period in seconds. +Default value is 30 seconds. +For example, to set 50 seconds: +
    {modules,
    + [
    +  ...
    +  {mod_http_bind, [ {max_inactivity, 50} ]},
    +  ...
    +]}.
    +

    +

    3.3.7  mod_http_fileserver

    +

    This simple module serves files from the local disk over HTTP.

    Options: +

    +{docroot, Path}
    +Directory to serve the files. +
    {accesslog, Path}
    +File to log accesses using an Apache-like format. +No log will be recorded if this option is not specified. +
    {directory_indices, [Index, ...]}
    +Indicate one or more directory index files, similarly to Apache’s +DirectoryIndex variable. When a web request hits a directory +instead of a regular file, those directory indices are looked in +order, and the first one found is returned. +Specify a mapping of extensions to content types. +There are several content types already defined, +with this option you can add new definitions, modify or delete existing ones. +To delete an existing definition, simply define it with a value: ‘undefined’. +
    {default_content_type, Type}
    +Specify the content type to use for unknown extensions. +Default value is ‘application/octet-stream’. +

    This example configuration will serve the files from +the local directory /var/www +in the address http://example.org:5280/pub/archive/. +In this example a new content type ogg is defined, +png is redefined, and jpg definition is deleted. +To use this module you must enable it: +

    {modules,
    + [
    +  ...
    +  {mod_http_fileserver, [
    +                         {docroot, "/var/www"}, 
    +                         {accesslog, "/var/log/ejabberd/access.log"},
    +                         {directory_indices, ["index.html", "main.htm"]},
    +                         {content_types, [{".ogg", "audio/ogg"},
    +                                          {".png", "image/png"},
    +                                          {".jpg", undefined}
    +                                         ]},
    +                         {default_content_type, "text/html"}
    +                        ]
    +  },
    +  ...
    +]}.
    +

    And define it as a handler in the HTTP service: +

    {listen, 
    + [
    +  ...
    +  {5280, ejabberd_http, [
    +                         ...
    +                         {request_handlers, [
    +                                             ...
    +                                             {["pub", "archive"], mod_http_fileserver},
    +                                             ...
    +                                            ]
    +                         },
    +                         ...
    +                        ]
    +  },
    +  ...
    +]}.
    +

    +

    3.3.8  mod_irc

    This module is an IRC transport that can be used to join channels on IRC servers.

    End user information:

    • -A Jabber client with ‘groupchat 1.0’ support or Multi-User -Chat support (XEP-0045) is necessary to join IRC channels. +A XMPP client with ‘groupchat 1.0’ support or Multi-User +Chat support (XEP-0045) is necessary to join IRC channels.
    • An IRC channel can be joined in nearly the same way as joining a -Jabber Multi-User Chat room. The difference is that the room name will +XMPP Multi-User Chat room. The difference is that the room name will be ‘channel%irc.example.org’ in case irc.example.org is the IRC server hosting ‘channel’. And of course the host should point to the IRC transport instead of the Multi-User Chat service. @@ -1867,178 +2222,219 @@ to the IRC transport instead of the Multi-User Chat service. nickserver!irc.example.org@irc.jabberserver.org.
    • Entering your password is possible by sending ‘LOGIN nick password’
      to nickserver!irc.example.org@irc.jabberserver.org. -
    • When using a popular Jabber server, it can occur that no +
    • The IRC transport provides Ad-Hoc Commands (XEP-0050) +to join a channel, and to set custom IRC username and encoding. +
    • When using a popular XMPP server, it can occur that no connection can be achieved with some IRC servers because they limit the number of conections from one IP.

    Options:

    -host
    This option defines the Jabber ID of the +{host, HostName}
    This option defines the Jabber ID of the service. If the host option is not specified, the Jabber ID will be the hostname of the virtual host with the prefix ‘irc.’. The keyword "@HOST@" is replaced at start time with the real virtual host name. -
    access
    This option can be used to specify who +
    {access, AccessName}
    This option can be used to specify who may use the IRC transport (default value: all). -
    default_encoding
    Set the default IRC encoding (default value: "koi8-r"). +
    {default_encoding, Encoding}
    Set the default IRC encoding. +Default value: "koi8-r"

    Examples:

    • In the first example, the IRC transport is available on (all) your virtual host(s) with the prefix ‘irc.’. Furthermore, anyone is able to use the transport. The default encoding is set to "iso8859-15". -
        {modules,
      -   [
      -    ...
      -    {mod_irc, [{access, all}, {default_encoding, "iso8859-15"}]},
      -    ...
      -   ]}.
      +
      {modules,
      + [
      +  ...
      +  {mod_irc, [{access, all}, {default_encoding, "iso8859-15"}]},
      +  ...
      + ]}.
       
    • In next example the IRC transport is available with JIDs with prefix irc-t.net. -Moreover, the transport is only accessible by paying customers registered on -our domains and on other servers. -
        {acl, paying_customers, {user, "customer1", "example.net"}}.
      -  {acl, paying_customers, {user, "customer2", "example.com"}}.
      -  {acl, paying_customers, {user, "customer3", "example.org"}}.
      +Moreover, the transport is only accessible to two users 
      +of example.org, and any user of example.com:
      +
      {acl, paying_customers, {user, "customer1", "example.org"}}.
      +{acl, paying_customers, {user, "customer2", "example.org"}}.
      +{acl, paying_customers, {server, "example.com"}}.
      +
      +{access, irc_users, [{allow, paying_customers}, {deny, all}]}.
      +
      +{modules,
      + [
         ...
      -  {access, paying_customers, [{allow, paying_customers},
      -                              {deny, all}]}.
      +  {mod_irc, [{access, irc_users},
      +             {host, "irc.example.net"}]},
         ...
      -  {modules,
      -   [
      -    ...
      -    {mod_irc, [{access, paying_customers},
      -               {host, "irc.example.net"}]},
      -    ...
      -   ]}.
      -
    -

    3.3.7  mod_last

    - -

    This module adds support for Last Activity (XEP-0012). It can be used to + ]}. +

    +

    3.3.9  mod_last

    +

    This module adds support for Last Activity (XEP-0012). It can be used to discover when a disconnected user last accessed the server, to know when a connected user was last active on the server, or to query the uptime of the ejabberd server.

    Options:

    -iqdisc
    This specifies +{iqdisc, Discipline}
    This specifies the processing discipline for Last activity (jabber:iq:last) IQ queries (see section 3.3.2). -
    -

    3.3.8  mod_muc

    - -

    With this module enabled, your server will support Multi-User Chat -(XEP-0045). End users will be able to join text conferences.

    Some of the features of Multi-User Chat: +

    +

    3.3.10  mod_muc

    +

    This module provides a Multi-User Chat (XEP-0045) service. +Users can discover existing rooms, join or create them. +Occupants of a room can chat in public or have private chats.

    Some of the features of Multi-User Chat:

    • -Sending private messages to room participants. -
    • Inviting users. -
    • Setting a conference topic. +Sending public and private messages to room occupants. +
    • Inviting other users to a room. +
    • Setting a room subject.
    • Creating password protected rooms. -
    • Kicking and banning participants. +
    • Kicking and banning occupants.

    The MUC service allows any Jabber ID to register a nickname, so nobody else can use that nickname in any room in the MUC service. -To register a nickname, open the Service Discovery in your -Jabber client and Register in the MUC service.

    The MUC service allows the service administrator to send a message -to all existing chatrooms. -To do so, send the message to the Jabber ID of the MUC service.

    This module supports clustering and load +To register a nickname, open the Service Discovery in your +XMPP client and register in the MUC service.

    This module supports clustering and load balancing. One module can be started per cluster node. Rooms are distributed at creation time on all available MUC module -instances. The multi-user chat module is clustered but the room +instances. The multi-user chat module is clustered but the rooms themselves are not clustered nor fault-tolerant: if the node managing a set of rooms goes down, the rooms disappear and they will be recreated -on an available node on first connection attempt.

    Options: +on an available node on first connection attempt.

    Module options:

    -host
    This option defines the Jabber ID of the +{host, HostName}
    This option defines the Jabber ID of the service. If the host option is not specified, the Jabber ID will be the hostname of the virtual host with the prefix ‘conference.’. The keyword "@HOST@" is replaced at start time with the real virtual host name. -
    access
    You can specify who is allowed to use -the Multi-User Chat service (by default, everyone is allowed to use it). -
    access_create
    To configure who is -allowed to create new rooms at the Multi-User Chat service, this option -can be used (by default, everybody is allowed to create rooms). -
    access_persistent
    To configure who is -allowed to modify the ’persistent’ chatroom option -(by default, everybody is allowed to modify that option). -
    access_admin
    This option specifies -who is allowed to administrate the Multi-User Chat service (the default +
    {access, AccessName}
    You can specify who is allowed to use +the Multi-User Chat service. By default everyone is allowed to use it. +
    {access_create, AccessName}
    To configure who is +allowed to create new rooms at the Multi-User Chat service, this option can be used. +By default any account in the local ejabberd server is allowed to create rooms. +
    {access_persistent, AccessName}
    To configure who is +allowed to modify the ’persistent’ room option. +By default any account in the local ejabberd server is allowed to modify that option. +
    {access_admin, AccessName}
    This option specifies +who is allowed to administrate the Multi-User Chat service. The default value is none, which means that only the room creator can -administer his room). By sending a message to the service JID, -administrators can send service messages that will be displayed in every -active room.
    history_size
    A small history of +administer his room. +The administrators can send a normal message to the service JID, +and it will be shown in all active rooms as a service message. +The administrators can send a groupchat message to the JID of an active room, +and the message will be shown in the room as a service message. +
    {history_size, Size}
    A small history of the current discussion is sent to users when they enter the room. With this option you can define the number of history messages to keep and send to users joining the room. The value is an integer. Setting the value to 0 disables the history feature and, as a result, nothing is kept in memory. The default value is 20. This value is global and thus affects all rooms on the -server.
    max_users
    This option defines at -the server level, the maximum number of users allowed per MUC +service. +
    {max_users, Number}
    This option defines at +the service level, the maximum number of users allowed per room. It can be lowered in each room configuration but cannot be -increased in individual MUC room configuration. The default value is -200.
    max_users_admin_threshold
    +increased in individual room configuration. The default value is +200. +
    {max_users_admin_threshold, Number}
    This option defines the -number of MUC admins or owners to allow to enter the room even if -the maximum number of allowed users is reached. The default limits -is 5. In most cases this default value is the best setting.
    max_user_conferences
    - This option define the maximum -number of chat room any given user will be able to join. The default +number of service admins or room owners allowed to enter the room when +the maximum number of allowed occupants was reached. The default limit +is 5. +
    {max_user_conferences, Number}
    + This option defines the maximum +number of rooms that any given user can join. The default value is 10. This option is used to prevent possible abuses. Note that -this is a soft limits: Some users can sometime join more conferences -in cluster configurations.
    min_message_interval
    +this is a soft limit: some users can sometimes join more conferences +in cluster configurations. +
    {max_room_id, Number}
    +This option defines the maximum number of characters that Room ID +can have when creating a new room. +The default value is to not limit: infinite. +
    {max_room_name, Number}
    +This option defines the maximum number of characters that Room Name +can have when configuring the room. +The default value is to not limit: infinite. +
    {max_room_desc, Number}
    +This option defines the maximum number of characters that Room Description +can have when configuring the room. +The default value is to not limit: infinite. +
    {min_message_interval, Number}
    This option defines the minimum interval between two messages send -by a user in seconds. This option is global and valid for all chat +by an occupant in seconds. This option is global and valid for all rooms. A decimal value can be used. When this option is not defined, message rate is not limited. This feature can be used to protect a -MUC service from users abuses and limit number of messages that will +MUC service from occupant abuses and limit number of messages that will be broadcasted by the service. A good value for this minimum message -interval is 0.4 second. If a user tries to send messages faster, an -error is send back explaining that the message have been discarded -and describing the reason why the message is not acceptable.
    min_presence_interval
    +interval is 0.4 second. If an occupant tries to send messages faster, an +error is send back explaining that the message has been discarded +and describing the reason why the message is not acceptable. +
    {min_presence_interval, Number}
    This option defines the -minimum of time between presence changes coming from a given user in -seconds. This option is global and valid for all chat rooms. A +minimum of time between presence changes coming from a given occupant in +seconds. This option is global and valid for all rooms. A decimal value can be used. When this option is not defined, no restriction is applied. This option can be used to protect a MUC -service for users abuses, as fastly changing a user presence will -result in possible large presence packet broadcast. If a user tries +service for occupants abuses. If an occupant tries to change its presence more often than the specified interval, the presence is cached by ejabberd and only the last presence is -broadcasted to all users in the room after expiration of the +broadcasted to all occupants in the room after expiration of the interval delay. Intermediate presence packets are silently -discarded. A good value for this option is 4 seconds.
    default_room_opts
    This -option allow to define the desired default room options. Obviously, -the room creator can modify the room options at any time. The -available room options are: allow_change_subj, -allow_private_messages, allow_query_users, -allow_user_invites, anonymous, logging, -members_by_default, members_only, -moderated, password, password_protected, -persistent, public, public_list, -title. All of them can be set to true or -false, except password and title which -are strings. +discarded. A good value for this option is 4 seconds. +
    {default_room_options, [ {OptionName, OptionValue}, ...]}
    +This module option allows to define the desired default room options. +Note that the creator of a room can modify the options of his room +at any time using a XMPP client with MUC capability. +The available room options and the default values are: +
    +{allow_change_subj, true|false}
    Allow occupants to change the subject. +
    {allow_private_messages, true|false}
    Occupants can send private messages to other occupants. +
    {allow_query_users, true|false}
    Occupants can send IQ queries to other occupants. +
    {allow_user_invites, false|true}
    Allow occupants to send invitations. +
    {allow_visitor_nickchange, true|false}
    Allow visitors to +change nickname. +
    {allow_visitor_status, true|false}
    Allow visitors to send +status text in presence updates. If disallowed, the status +text is stripped before broadcasting the presence update to all +the room occupants. +
    {anonymous, true|false}
    The room is anonymous: +occupants don’t see the real JIDs of other occupants. +Note that the room moderators can always see the real JIDs of the occupants. +
    {logging, false|true}
    The public messages are logged using mod_muc_log. +
    {max_users, 200}
    Maximum number of occupants in the room. +
    {members_by_default, true|false}
    The occupants that enter the room are participants by default, so they have ’voice’. +
    {members_only, false|true}
    Only members of the room can enter. +
    {moderated, true|false}
    Only occupants with ’voice’ can send public messages. +
    {password, "roompass123"}
    Password of the room. You may want to enable the next option too. +
    {password_protected, false|true}
    The password is required to enter the room. +
    {persistent, false|true}
    The room persists even if the last participant leaves. +
    {public, true|false}
    The room is public in the list of the MUC service, so it can be discovered. +
    {public_list, true|false}
    The list of participants is public, without requiring to enter the room. +
    {title, "Room Title"}
    A human-readable title of the room. +
    +All of those room options can be set to true or false, +except password and title which are strings, +and max_users that is integer.

    Examples:

    • In the first example everyone is allowed to use the Multi-User Chat service. Everyone will also be able to create new rooms but only the user admin@example.org is allowed to administrate any room. In this example he is also a global administrator. When admin@example.org -sends a message such as ‘Tomorrow, the Jabber server will be moved +sends a message such as ‘Tomorrow, the XMPP server will be moved to new hardware. This will involve service breakdowns around 23:00 UMT. We apologise for this inconvenience.’ to conference.example.org, it will be displayed in all active rooms. In this example the history feature is disabled. -
        {acl, admins, {user, "admin", "example.org"}}.
      +
      {acl, admin, {user, "admin", "example.org"}}.
      +
      +{access, muc_admin, [{allow, admin}]}.
      +
      +{modules,
      + [
         ...
      -  {access, muc_admins, [{allow, admins}]}.
      +  {mod_muc, [{access, all},
      +             {access_create, all},
      +             {access_admin, muc_admin},
      +             {history_size, 0}]},
         ...
      -  {modules,
      -   [
      -    ...
      -    {mod_muc, [{access, all},
      -               {access_create, all},
      -               {access_admin, muc_admins},
      -               {history_size, 0}]},
      -    ...
      -   ]}.
      + ]}.
       
    • In the second example the Multi-User Chat service is only accessible by paying customers registered on our domains and on other servers. Of course the administrator is also allowed to access rooms. In addition, he is the @@ -2049,68 +2445,72 @@ around 23:00 UMT. We apologise for this inconvenience.’ to conference.example.org, it will be displayed in all active rooms. No history_size option is used, this means that the feature is enabled and the default value of 20 history messages will be send to the users. -
        {acl, paying_customers, {user, "customer1", "example.net"}}.
      -  {acl, paying_customers, {user, "customer2", "example.com"}}.
      -  {acl, paying_customers, {user, "customer3", "example.org"}}.
      -  {acl, admins, {user, "admin", "example.org"}}.
      +
      {acl, paying_customers, {user, "customer1", "example.net"}}.
      +{acl, paying_customers, {user, "customer2", "example.com"}}.
      +{acl, paying_customers, {user, "customer3", "example.org"}}.
      +{acl, admin, {user, "admin", "example.org"}}.
      +
      +{access, muc_admin, [{allow, admin},
      +                      {deny, all}]}.
      +{access, muc_access, [{allow, paying_customers},
      +                      {allow, admin},
      +                      {deny, all}]}.
      +
      +{modules,
      + [
         ...
      -  {access, muc_admins, [{allow, admins},
      -                        {deny, all}]}.
      -  {access, muc_access, [{allow, paying_customers},
      -                        {allow, admins},
      -                        {deny, all}]}.
      +  {mod_muc, [{access, muc_access},
      +             {access_create, muc_admin},
      +             {access_admin, muc_admin}]},
         ...
      -  {modules,
      -   [
      -    ...
      -    {mod_muc, [{access, muc_access},
      -               {access_create, muc_admins},
      -               {access_admin, muc_admins}]},
      -    ...
      -   ]}.
      -
    • In the following example, MUC anti abuse options are used. A -user cannot send more than one message every 0.4 seconds and cannot -change its presence more than once every 4 seconds. No ACLs are -defined, but some user restriction could be added as well:
        ...
      -  {modules,
      -   [
      -    ...
      -    {mod_muc, [{min_message_interval, 0.4},
      -               {min_presence_interval, 4}]},
      -    ...
      -   ]}.
      -
    • This example shows how to use default_room_opts to make sure -newly created chatrooms have by default those options. -
        {modules,
      -   [
      -    ...
      -    {mod_muc, [{access, muc_access},
      -               {access_create, muc_admins},
      -               {default_room_options, [
      -                 {allow_change_subj, false},
      -                 {allow_query_users, true},
      -                 {allow_private_messages, true},
      -                 {members_by_default, false},
      -                 {title, "New chatroom"},
      -                 {anonymous, false}
      -               ]},
      -               {access_admin, muc_admins}]},
      -    ...
      -   ]}.
      -
    -

    3.3.9  mod_muc_log

    - -

    This module enables optional logging of Multi-User Chat (MUC) conversations to -HTML. Once you enable this module, users can join a chatroom using a MUC capable -Jabber client, and if they have enough privileges, they can request the -configuration form in which they can set the option to enable chatroom logging.

    Features: + ]}. +

  • In the following example, MUC anti abuse options are used. An +occupant cannot send more than one message every 0.4 seconds and cannot +change its presence more than once every 4 seconds. +The length of Room IDs and Room Names are limited to 20 characters, +and Room Description to 300 characters. No ACLs are +defined, but some user restriction could be added as well:
    {modules,
    + [
    +  ...
    +  {mod_muc, [{min_message_interval, 0.4},
    +             {min_presence_interval, 4},
    +             {max_room_id, 20},
    +             {max_room_name, 20},
    +             {max_room_desc, 300}]},
    +  ...
    + ]}.
    +
  • This example shows how to use default_room_options to make sure +the newly created rooms have by default those options. +
    {modules,
    + [
    +  ...
    +  {mod_muc, [{access, muc_access},
    +             {access_create, muc_admin},
    +             {default_room_options,
    +              [
    +               {allow_change_subj, false},
    +               {allow_query_users, true},
    +               {allow_private_messages, true},
    +               {members_by_default, false},
    +               {title, "New chatroom"},
    +               {anonymous, false}
    +              ]},
    +             {access_admin, muc_admin}]},
    +  ...
    + ]}.
    +
  • +

    3.3.11  mod_muc_log

    +

    This module enables optional logging of Multi-User Chat (MUC) public conversations to +HTML. Once you enable this module, users can join a room using a MUC capable +XMPP client, and if they have enough privileges, they can request the +configuration form in which they can set the option to enable room logging.

    Features:

    • -Chatroom details are added on top of each page: room title, JID, +Room details are added on top of each page: room title, JID, author, subject and configuration.
    • -Room title and JID are links to join the chatroom (using -XMPP URIs). -
    • Subject and chatroom configuration changes are tracked and displayed. +The room JID in the generated HTML is a link to join the room (using +XMPP URI). +
    • Subject and room configuration changes are tracked and displayed.
    • Joins, leaves, nick changes, kicks, bans and ‘/me’ are tracked and displayed, including the reason if available.
    • Generated HTML files are XHTML 1.0 Transitional and CSS compliant. @@ -2122,107 +2522,166 @@ displayed, including the reason if available.
    • A custom link can be added on top of each page.

    Options:

    -access_log
    -This option restricts which users are allowed to enable or disable chatroom +{access_log, AccessName}
    +This option restricts which occupants are allowed to enable or disable room logging. The default value is muc_admin. Note for this default setting you need to have an access rule for muc_admin in order to take effect. -
    cssfile
    +
    {cssfile, false|URL}
    With this option you can set whether the HTML files should have a custom CSS file or if they need to use the embedded CSS file. Allowed values are false and an URL to a CSS file. With the first value, HTML files will include the embedded CSS code. With the latter, you can specify the URL of the -custom CSS file (for example: ‘http://example.com/my.css’). The default value +custom CSS file (for example: "http://example.com/my.css"). The default value is false. -
    dirtype
    +
    {dirname, room_jid|room_name}
    +Allows to configure the name of the room directory. +Allowed values are room_jid and room_name. +With the first value, the room directory name will be the full room JID. +With the latter, the room directory name will be only the room name, +not including the MUC service name. +The default value is room_jid. +
    {dirtype, subdirs|plain}
    The type of the created directories can be specified with this option. Allowed values are subdirs and plain. With the first value, subdirectories are created for each year and month. With the latter, the names of the log files contain the full date, and there are no subdirectories. The default value is subdirs. -
    outdir
    +
    {file_format, html|plaintext}
    +Define the format of the log files: +html stores in HTML format, +plaintext stores in plain text. +The default value is html. +
    {outdir, Path}
    This option sets the full path to the directory in which the HTML files should be stored. Make sure the ejabberd daemon user has write access on that directory. The default value is "www/muc". -
    timezone
    +
    {spam_prevention true|false}
    +To prevent spam, the spam_prevention option adds a special attribute +to links that prevent their indexation by search engines. The default value +is true, which mean that nofollow attributes will be added to user +submitted links. +
    {timezone, local|universal}
    The time zone for the logs is configurable with this option. Allowed values are local and universal. With the first value, the local time, as reported to Erlang by the operating system, will be used. With the latter, GMT/UTC time will be used. The default value is local. -
    spam_prevention
    -To prevent spam, the spam_prevention option adds a special attribute -to links that prevent their indexation by search engines. The default value -is true, which mean that nofollow attributes will be added to user -submitted links. -
    top_link
    +
    {top_link, {URL, Text}}
    With this option you can customize the link on the top right corner of each -log file. The syntax of this option is {"URL", "Text"}. The default -value is {"/", "Home"}. +log file. The default value is {"/", "Home"}.

    Examples:

    • -In the first example any chatroom owner can enable logging, and a -custom CSS file will be used (http://example.com/my.css). Further, the names +In the first example any room owner can enable logging, and a +custom CSS file will be used (http://example.com/my.css). The names of the log files will contain the full date, and there will be no subdirectories. The log files will be stored in /var/www/muclogs, and the time zone will be GMT/UTC. Finally, the top link will be -<a href="http://www.jabber.ru">Jabber.ru</a>. -
        {access, muc, [{allow, all}]}.
      +<a href="http://www.jabber.ru/">Jabber.ru</a>.
      +
      {access, muc, [{allow, all}]}.
      +
      +{modules,
      + [
         ...
      -  {modules,
      -   [
      -    ...
      -    {mod_muc_log, [
      -               {access_log, muc},
      -               {cssfile, "http://example.com/my.css"},
      -               {dirtype, plain},
      -               {outdir, "/var/www/muclogs"},
      -               {timezone, universal},
      -               {spam_prevention, true},
      -               {top_link, {"http://www.jabber.ru", "Jabber.ru"}}
      -    ]},
      -    ...
      -   ]}.
      +  {mod_muc_log, [
      +                 {access_log, muc},
      +                 {cssfile, "http://example.com/my.css"},
      +                 {dirtype, plain},
      +                 {dirname, room_jid},
      +                 {outdir, "/var/www/muclogs"},
      +                 {timezone, universal},
      +                 {spam_prevention, true},
      +                 {top_link, {"http://www.jabber.ru/", "Jabber.ru"}}
      +                ]},
      +  ...
      + ]}.
       
    • In the second example only admin1@example.org and admin2@example.net can enable logging, and the embedded CSS file will be -used. Further, the names of the log files will only contain the day (number), +used. The names of the log files will only contain the day (number), and there will be subdirectories for each year and month. The log files will be stored in /var/www/muclogs, and the local time will be used. Finally, the top link will be the default <a href="/">Home</a>. -
        {acl, admins, {user, "admin1", "example.org"}}.
      -  {acl, admins, {user, "admin2", "example.net"}}.
      +
      {acl, admins, {user, "admin1", "example.org"}}.
      +{acl, admins, {user, "admin2", "example.net"}}.
      +
      +{access, muc_log, [{allow, admins},
      +                   {deny, all}]}.
      +
      +{modules,
      + [
         ...
      -  {access, muc_log, [{allow, admins},
      -                     {deny, all}]}.
      +  {mod_muc_log, [
      +                 {access_log, muc_log},
      +                 {cssfile, false},
      +                 {dirtype, subdirs},
      +                 {outdir, "/var/www/muclogs"},
      +                 {timezone, local}
      +                ]},
         ...
      -  {modules,
      -   [
      -    ...
      -    {mod_muc_log, [
      -               {access_log, muc_log},
      -               {cssfile, false},
      -               {dirtype, subdirs},
      -               {outdir, "/var/www/muclogs"},
      -               {timezone, local}
      -    ]},
      -    ...
      -   ]}.
      -
    -

    3.3.10  mod_offline

    - -

    This module implements offline message storage. This means that all messages + ]}. +

    +

    3.3.12  mod_offline

    +

    This module implements offline message storage (XEP-0160). +This means that all messages sent to an offline user will be stored on the server until that user comes online again. Thus it is very similar to how email works. Note that ejabberdctl has a command to delete expired messages (see section 4.1).

    -user_max_messages
    This option -is use to set a max number of offline messages per user (quota). Its -value can be either infinity or a strictly positive -integer. The default value is infinity. -
    -

    3.3.11  mod_privacy

    - +{access_max_user_messages, Number}

    +This option defines which access rule will be enforced to limit +the maximum number of offline messages that a user can have (quota). +When a user has too many offline messages, any new messages that he receive are discarded, +and a resource-constraint error is returned to the sender. +The default value is max_user_offline_messages. +Then you can define an access rule with a syntax similar to +max_user_sessions (see 3.1.5). +

    This example allows power users to have as much as 5000 offline messages, +administrators up to 2000, +and all the other users up to 100. +

    {acl, admin, {user, "admin1", "localhost"}}.
    +{acl, admin, {user, "admin2", "example.org"}}.
    +{acl, poweruser, {user, "bob", "example.org"}}.
    +{acl, poweruser, {user, "jane", "example.org"}}.
    +
    +{access, max_user_offline_messages, [ {5000, poweruser}, {2000, admin}, {100, all} ]}.
    +
    +{modules,
    + [
    +  ...
    +  {mod_offline,  [ {access_max_user_messages, max_user_offline_messages} ]},
    +  ...
    + ]}.
    +

    +

    3.3.13  mod_ping

    +

    This module implements support for XMPP Ping (XEP-0199) and periodic keepalives. +When this module is enabled ejabberd responds correctly to +ping requests, as defined in the protocol.

    Configuration options: +

    +{send_pings, true|false}
    +If this option is set to true, the server sends pings to connected clients +that are not active in a given interval ping_interval. +This is useful to keep client connections alive or checking availability. +By default this option is disabled. +
    {ping_interval, Seconds}
    +How often to send pings to connected clients, if the previous option is enabled. +If a client connection does not send or receive any stanza in this interval, +a ping request is sent to the client. +The default value is 60 seconds. +
    {timeout_action, none|kill}
    +What to do when a client does not answer to a server ping request in less than 32 seconds. +The default is to do nothing. +

    This example enables Ping responses, configures the module to send pings +to client connections that are inactive for 4 minutes, +and if a client does not answer to the ping in less than 32 seconds, its connection is closed: +

    {modules,
    + [
    +  ...
    +  {mod_ping,  [{send_pings, true}, {ping_interval, 240}, {timeout_action, kill}]},
    +  ...
    + ]}.
    +

    +

    3.3.14  mod_privacy

    This module implements Blocking Communication (also known as Privacy Rules) as defined in section 10 from XMPP IM. If end users have support for it in -their Jabber client, they will be able to: +their XMPP client, they will be able to:

    • Retrieving one’s privacy lists. @@ -2241,221 +2700,301 @@ or subscription type (or globally).
    • Allowing or blocking all communications based on JID, group, or subscription type (or globally).
    -(from http://www.xmpp.org/specs/rfc3921.html#privacy) +(from http://xmpp.org/specs/rfc3921.html#privacy)

    Options:

    -iqdisc
    This specifies +{iqdisc, Discipline}
    This specifies the processing discipline for Blocking Communication (jabber:iq:privacy) IQ queries (see section 3.3.2). -
    -

    3.3.12  mod_private

    - -

    This module adds support for Private XML Storage (XEP-0049): +

    +

    3.3.15  mod_private

    +

    This module adds support for Private XML Storage (XEP-0049):

    -Using this method, Jabber entities can store private data on the server and +Using this method, XMPP entities can store private data on the server and retrieve it whenever necessary. The data stored might be anything, as long as it is valid XML. One typical usage for this namespace is the server-side storage -of client-specific preferences; another is Bookmark Storage (XEP-0048). +of client-specific preferences; another is Bookmark Storage (XEP-0048).

    Options:

    -iqdisc
    This specifies +{iqdisc, Discipline}
    This specifies the processing discipline for Private XML Storage (jabber:iq:private) IQ queries (see section 3.3.2). -
    -

    3.3.13  mod_proxy65

    - -

    This module implements SOCKS5 Bytestreams (XEP-0065). +

    +

    3.3.16  mod_proxy65

    +

    This module implements SOCKS5 Bytestreams (XEP-0065). It allows ejabberd to act as a file transfer proxy between two XMPP clients.

    Options:

    -host
    This option defines the hostname of the service. -If this option is not set, the prefix ‘proxy.’ is added to ejabberd -hostname. -
    name
    Defines Service Discovery name of the service. + +{host, HostName}
    This option defines the Jabber ID of the +service. If the host option is not specified, the Jabber ID will be the +hostname of the virtual host with the prefix ‘proxy.’. The keyword "@HOST@" +is replaced at start time with the real virtual host name. + +
    {name, Text}
    Defines Service Discovery name of the service. Default is "SOCKS5 Bytestreams". -
    ip
    This option specifies which network interface +
    {ip, IPTuple}
    This option specifies which network interface to listen for. Default is an IP address of the service’s DNS name, or, if fails, {127,0,0,1}. -
    port
    This option defines port to listen for +
    {port, Number}
    This option defines port to listen for incoming connections. Default is 7777. -
    auth_type
    SOCKS5 authentication type. +
    {auth_type, anonymous|plain}
    SOCKS5 authentication type. Possible values are anonymous and plain. Default is anonymous. -
    access
    Defines ACL for file transfer initiators. +
    {access, AccessName}
    Defines ACL for file transfer initiators. Default is all. -
    max_connections
    Maximum number of +
    {max_connections, Number}
    Maximum number of active connections per file transfer initiator. No limit by default. -
    shaper
    This option defines shaper for +
    {shaper, none|ShaperName}
    This option defines shaper for the file transfer peers. Shaper with the maximum bandwidth will be selected. Default is none.

    Examples:

    • The simpliest configuration of the module: -
        {modules,
      -   [
      -    ...
      -    {mod_proxy65, []},
      -    ...
      -  ]}.
      +
      {modules,
      + [
      +  ...
      +  {mod_proxy65, []},
      +  ...
      + ]}.
       
    • More complicated configuration. -
        {acl, proxy_users, {server, "example.org"}}.
      -  {access, proxy65_access, [{allow, proxy_users}, {deny, all}]}.
      +
      {acl, proxy_users, {server, "example.org"}}.
      +{access, proxy65_access, [{allow, proxy_users}, {deny, all}]}.
      +
      +{acl, admin, {user, "admin", "example.org"}}.
      +{shaper, proxyrate, {maxrate, 10240}}. %% 10 Kbytes/sec
      +{access, proxy65_shaper, [{none, admin}, {proxyrate, proxy_users}]}.
      +
      +{modules,
      + [
         ...
      -  {acl, admin, {user, "admin", "example.org"}}.
      -  {shaper, normal, {maxrate, 10240}}. %% 10 Kbytes/sec
      -  {access, proxy65_shaper, [{none, admin}, {normal, all}]}.
      +  {mod_proxy65, [{host, "proxy1.example.org"},
      +                 {name, "File Transfer Proxy"},
      +                 {ip, {200,150,100,1}},
      +                 {port, 7778},
      +                 {max_connections, 5},
      +                 {access, proxy65_access},
      +                 {shaper, proxy65_shaper}]},
         ...
      -  {modules,
      -   [
      -    ...
      -    {mod_proxy65, [{host, "proxy1.example.org"},
      -                   {name, "File Transfer Proxy"},
      -                   {ip, {200,150,100,1}},
      -                   {port, 7778},
      -                   {max_connections, 5},
      -                   {access, proxy65_access},
      -                   {shaper, proxy65_shaper}]},
      -    ...
      -  ]}.
      -
    -

    3.3.14  mod_pubsub

    - -

    This module offers a Publish-Subscribe Service (XEP-0060). + ]}. +

    +

    3.3.17  mod_pubsub

    +

    This module offers a Publish-Subscribe Service (XEP-0060). The functionality in mod_pubsub can be extended using plugins. -The plugin that implements PEP (Personal Eventing via Pubsub) (XEP-0163) -is enabled by default, and requires mod_caps.

    Options: +The plugin that implements PEP (Personal Eventing via Pubsub) (XEP-0163) +is enabled in the default ejabberd configuration file, +and it requires mod_caps.

    Options:

    -host
    This option defines the Jabber ID of the +{host, HostName}
    This option defines the Jabber ID of the service. If the host option is not specified, the Jabber ID will be the hostname of the virtual host with the prefix ‘pubsub.’. The keyword "@HOST@" is replaced at start time with the real virtual host name. -
    access_createnode
    +
    {access_createnode, AccessName}
    This option restricts which users are allowed to create pubsub nodes using -ACL and ACCESS. The default value is pubsub_createnode.
    plugins
    To specify which pubsub node plugins to use. If not defined, the default -pubsub plugin is always used. -
    nodetree
    To specify which nodetree to use. If not defined, the default pubsub -nodetree is used. Nodetrees are default and virtual. Only one nodetree can be used -and is shared by all node plugins. -

    Example: -

      {modules,
    -   [
    -    ...
    -    {mod_pubsub, [
    -                  {access_createnode, pubsub_createnode},
    -                  {plugins, ["default", "pep"]}
    -                 ]}
    -    ...
    -   ]}.
    -
    -

    3.3.15  mod_register

    - -

    This module adds support for In-Band Registration (XEP-0077). This protocol -enables end users to use a Jabber client to: +ACL and ACCESS. +By default any account in the local ejabberd server is allowed to create pubsub nodes. +

    {max_items_node, MaxItems}
    +Define the maximum number of items that can be stored in a node. +Default value is 10. +
    {plugins, [ Plugin, ...]}
    +To specify which pubsub node plugins to use. +The first one in the list is used by default. +If this option is not defined, the default plugins list is: ["flat"]. +PubSub clients can define which plugin to use when creating a node: +add type=’plugin-name’ attribute to the create stanza element. +
    {nodetree, Nodetree}
    +To specify which nodetree to use. +If not defined, the default pubsub nodetree is used: "tree". +Only one nodetree can be used per host, and is shared by all node plugins.

    The "virtual" nodetree does not store nodes on database. +This saves resources on systems with tons of nodes. +If using the "virtual" nodetree, +you can only enable those node plugins: +["flat","pep"] or ["flat"]; +any other plugins configuration will not work. +Also, all nodes will have the defaut configuration, +and this can not be changed. +Using "virtual" nodetree requires to start from a clean database, +it will not work if you used the default "tree" nodetree before.

    The "dag" nodetree provides experimental support for PubSub Collection Nodes (XEP-0248). +In that case you should also add "dag" node plugin as default, for example: +{plugins, ["dag","flat","hometree","pep"]} +

    {ignore_pep_from_offline, false|true}
    +To specify whether or not we should get last published PEP items +from users in our roster which are offline when we connect. Value is true or false. +If not defined, pubsub assumes true so we only get last items of online contacts. +
    {last_item_cache, false|true}
    +To specify whether or not pubsub should cache last items. Value is true +or false. If not defined, pubsub do not cache last items. On systems with not so many nodes, +caching last items speeds up pubsub and allows to raise user connection rate. The cost is memory +usage, as every item is stored in memory. +
    {pep_mapping, [ {Key, Value}, ...]}
    +This allow to define a Key-Value list to choose defined node plugins on given PEP namespace. +The following example will use node_tune instead of node_pep for every PEP node with tune namespace: +
      {mod_pubsub, [{pep_mapping, [{"http://jabber.org/protocol/tune", "tune"}]}]}
    +

    Example of configuration that uses flat nodes as default, and allows use of flat, nodetree and pep nodes: +

    {modules,
    + [
    +  ...
    +  {mod_pubsub, [
    +                {access_createnode, pubsub_createnode},
    +                {plugins, ["flat", "hometree", "pep"]}
    +               ]},
    +  ...
    + ]}.
    +

    Using ODBC database requires use of dedicated plugins. The following example shows previous configuration +with ODBC usage: +

    {modules,
    + [
    +  ...
    +  {mod_pubsub_odbc, [
    +                {access_createnode, pubsub_createnode},
    +                {plugins, ["flat_odbc", "hometree_odbc", "pep_odbc"]}
    +               ]},
    +  ...
    + ]}.
    +

    +

    3.3.18  mod_register

    +

    This module adds support for In-Band Registration (XEP-0077). This protocol +enables end users to use a XMPP client to:

    • Register a new account on the server.
    • Change the password from an existing account on the server.
    • Delete an existing account on the server.

    Options:

    -access
    This option can be configured to specify +{access, AccessName}
    This option can be configured to specify rules to restrict registration. If a rule returns ‘deny’ on the requested user name, registration for that user name is denied. (there are no restrictions by default). -
    welcome_message
    Set a welcome message that -is sent to each newly registered account. The first string is the subject, and +
    {welcome_message, Message}
    Set a welcome message that +is sent to each newly registered account. The first string is the subject, and the second string is the message body. -
    registration_watchers
    This option defines a +In the body you can set a newline with the characters: \n +
    {registration_watchers, [ JID, ...]}
    This option defines a list of JIDs which will be notified each time a new account is registered. -
    iqdisc
    This specifies +
    {iqdisc, Discipline}
    This specifies the processing discipline for In-Band Registration (jabber:iq:register) IQ queries (see section 3.3.2). -

    Examples: +

    This module reads also another option defined globally for the server: +{registration_timeout, Timeout}. +This option limits the frequency of registration from a given IP or username. +So, a user can’t register a new account from the same IP address or JID during +this number of seconds after previous registration. +Timeout is expressed in seconds, and must be an integer. +To disable this limitation, +instead of an integer put a word like: infinity. +Default value: 600 seconds.

    Examples:

    • Next example prohibits the registration of too short account names: -
        {acl, shortname, {user_glob, "?"}}.
      -  {acl, shortname, {user_glob, "??"}}.
      -  % The same using regexp:
      -  %{acl, shortname, {user_regexp, "^..?$"}}.
      -  ...
      -  {access, register, [{deny, shortname},
      -                      {allow, all}]}.
      -  ...
      -  {modules,
      -   [
      -    ...
      -    {mod_register, [{access, register}]},
      -    ...
      -   ]}.
      -
    • The in-band registration of new accounts can be prohibited by changing the -access option. If you really want to disable all In-Band Registration -functionality, that is changing passwords in-band and deleting accounts -in-band, you have to remove mod_register from the modules list. In this -example all In-Band Registration functionality is disabled: -
        {access, register, [{deny, all}]}.
      +
      {acl, shortname, {user_glob, "?"}}.
      +{acl, shortname, {user_glob, "??"}}.
      +%% The same using regexp:
      +%%{acl, shortname, {user_regexp, "^..?$"}}.
       
      -  {modules,
      +{access, register, [{deny, shortname},
      +                    {allow, all}]}.
      +
      +{modules,
      + [
      +  ...
      +  {mod_register, [{access, register}]},
      +  ...
      + ]}.
      +
    • This configuration prohibits usage of In-Band Registration +to create or delete accounts, +but allows existing accounts to change the password: +
      {access, register, [{deny, all}]}.
      +
      +{modules,
      + [
      +  ...
      +  {mod_register, [{access, register}]},
      +  ...
      + ]}.
      +
    • This configuration disables all In-Band Registration +functionality: create, delete accounts and change password: +
      {modules,
      + [
      +  ...
      +  %% {mod_register, [{access, register}]},
      +  ...
      + ]}.
      +
    • Define the welcome message and two registration watchers. +Also define a registration timeout of one hour: +
      {registration_timeout, 3600}.
      +{modules,
      + [
      +  ...
      +  {mod_register,
          [
      -    ...
      -%    {mod_register, [{access, register}]},
      -    ...
      -   ]}.
      -
    • Define the welcome message and three registration watchers: -
        {modules,
      -   [
      -    ...
      -     {mod_register, [
      -        {welcome_message, {"Welcome!", "Welcome to this Jabber server. For information about Jabber visit http://www.jabber.org"}},
      -        {registration_watchers, ["admin1@example.org", "admin2@example.org", "boss@example.net"]}
      -     ]},
      -    ...
      -   ]}.
      -
    -

    3.3.16  mod_roster

    - -

    This module implements roster management as defined in RFC 3921: XMPP IM.

    Options: + {welcome_message, {"Welcome!", "Hi.\nWelcome to this Jabber server.\n Check http://www.jabber.org\n\nBye"}}, + {registration_watchers, ["admin1@example.org", "boss@example.net"]} + ]}, + ... + ]}. +

    +

    3.3.19  mod_roster

    +

    This module implements roster management as defined in +RFC 3921: XMPP IM. +It also supports Roster Versioning (XEP-0237).

    Options:

    -iqdisc
    This specifies +{iqdisc, Discipline}
    This specifies the processing discipline for Roster Management (jabber:iq:roster) IQ queries (see section 3.3.2). -
    -

    3.3.17  mod_service_log

    - -

    This module adds support for logging end user packets via a Jabber message +

    {versioning, false|true}
    Enables +Roster Versioning. +This option is disabled by default. +
    {store_current_id, false|true}
    +If this option is enabled, the current version number is stored on the database. +If disabled, the version number is calculated on the fly each time. +Enabling this option reduces the load for both ejabberd and the database. +This option does not affect the client in any way. +This option is only useful if Roster Versioning is enabled. +This option is disabled by default. +Important: if you use mod_shared_roster, you must disable this option. +

    This example configuration enables Roster Versioning with storage of current id: +

    {modules,
    + [
    +  ...
    +  {mod_roster, [{versioning, true}, {store_current_id, true}]},
    +  ...
    + ]}.
    +

    +

    3.3.20  mod_service_log

    +

    This module adds support for logging end user packets via a XMPP message auditing service such as -Bandersnatch. All user +Bandersnatch. All user packets are encapsulated in a <route/> element and sent to the specified service(s).

    Options:

    -loggers
    With this option a (list of) service(s) +{loggers, [Names, ...]}
    With this option a (list of) service(s) that will receive the packets can be specified.

    Examples:

    • To log all end user packets to the Bandersnatch service running on bandersnatch.example.com: -
        {modules,
      -   [
      -    ...
      -    {mod_service_log, [{loggers, ["bandersnatch.example.com"]}]},
      -    ...
      -   ]}.
      +
      {modules,
      + [
      +  ...
      +  {mod_service_log, [{loggers, ["bandersnatch.example.com"]}]},
      +  ...
      + ]}.
       
    • To log all end user packets to the Bandersnatch service running on -bandersnatch.example.com and the backup service on +bandersnatch.example.com and the backup service on bandersnatch.example.org: -
        {modules,
      -   [
      -    ...
      -    {mod_service_log, [{loggers, ["bandersnatch.example.com",
      -                                  "bandersnatch.example.org"]}]},
      -    ...
      -   ]}.
      -
    -

    3.3.18  mod_shared_roster

    - +

    {modules,
    + [
    +  ...
    +  {mod_service_log, [{loggers, ["bandersnatch.example.com",
    +                                "bandersnatch.example.org"]}]},
    +  ...
    + ]}.
    +

    +

    3.3.21  mod_shared_roster

    This module enables you to create shared roster groups. This means that you can create groups of people that can see members from (other) groups in their rosters. The big advantages of this feature are that end users do not need to manually add all users to their rosters, and that they cannot permanently delete -users from the shared roster groups. -A shared roster group can have members from any Jabber server, -but the presence will only be available from and to members +users from the shared roster groups. +A shared roster group can have members from any XMPP server, +but the presence will only be available from and to members of the same virtual host where the group is created.

    Shared roster groups can be edited only via the Web Admin. Each group has a unique identification and the following parameters:

    @@ -2522,10 +3061,9 @@ roster groups as shown in the following table:

    - -

    3.3.19  mod_stats

    - -

    This module adds support for Statistics Gathering (XEP-0039). This protocol +

    +

    3.3.22  mod_stats

    +

    This module adds support for Statistics Gathering (XEP-0039). This protocol allows you to retrieve next statistics from your ejabberd deployment:

    • Total number of registered users on the current virtual host (users/total). @@ -2534,7 +3072,7 @@ Total number of registered users on the current virtual host (users/total).
    • Total number of online users on all virtual hosts (users/all-hosts/online).

    Options:

    -iqdisc
    This specifies +{iqdisc, Discipline}
    This specifies the processing discipline for Statistics Gathering (http://jabber.org/protocol/stats) IQ queries (see section 3.3.2).

    As there are only a small amount of clients (for example Tkabber) and software libraries with @@ -2555,43 +3093,41 @@ by sending: <stat name='users/all-hosts/total'/> </query> </iq> - -

    3.3.20  mod_time

    - -

    This module features support for Entity Time (XEP-0090). By using this XEP, +

    +

    3.3.23  mod_time

    +

    This module features support for Entity Time (XEP-0202). By using this XEP, you are able to discover the time at another entity’s location.

    Options:

    -iqdisc
    This specifies +{iqdisc, Discipline}
    This specifies the processing discipline for Entity Time (jabber:iq:time) IQ queries (see section 3.3.2). -
    -

    3.3.21  mod_vcard

    - +

    +

    3.3.24  mod_vcard

    This module allows end users to store and retrieve their vCard, and to retrieve -other users vCards, as defined in vcard-temp (XEP-0054). The module also +other users vCards, as defined in vcard-temp (XEP-0054). The module also implements an uncomplicated Jabber User Directory based on the vCards of these users. Moreover, it enables the server to send its vCard when queried.

    Options:

    -host
    This option defines the Jabber ID of the +{host, HostName}
    This option defines the Jabber ID of the service. If the host option is not specified, the Jabber ID will be the hostname of the virtual host with the prefix ‘vjud.’. The keyword "@HOST@" is replaced at start time with the real virtual host name. -
    iqdisc
    This specifies +
    {iqdisc, Discipline}
    This specifies the processing discipline for vcard-temp IQ queries (see section 3.3.2). -
    search
    This option specifies whether the search -functionality is enabled (value: true) or disabled (value: -false). If disabled, the option host will be ignored and the +
    {search, true|false}
    This option specifies whether the search +functionality is enabled or not +If disabled, the option host will be ignored and the Jabber User Directory service will not appear in the Service Discovery item list. The default value is true. -
    matches
    With this option, the number of reported +
    {matches, infinity|Number}
    With this option, the number of reported search results can be limited. If the option’s value is set to infinity, all search results are reported. The default value is 30. -
    allow_return_all
    This option enables +
    {allow_return_all, false|true}
    This option enables you to specify if search operations with empty input fields should return all users who added some information to their vCard. The default value is false. -
    search_all_hosts
    If this option is set +
    {search_all_hosts, true|false}
    If this option is set to true, search operations will apply to all virtual hosts. Otherwise only the current host will be searched. The default value is true. This option is available in mod_vcard, but not available in mod_vcard_odbc. @@ -2600,31 +3136,32 @@ This option is available in mod_vcard, but not available in mod_vca In this first situation, search results are limited to twenty items, every user who added information to their vCard will be listed when people do an empty search, and only users from the current host will be returned: -
      {modules,
    -   [
    -    ...
    -    {mod_vcard, [{search, true},
    -                 {matches, 20},
    -                 {allow_return_all, true},
    -                 {search_all_hosts, false}]},
    -    ...
    -   ]}.
    +
    {modules,
    + [
    +  ...
    +  {mod_vcard, [{search, true},
    +               {matches, 20},
    +               {allow_return_all, true},
    +               {search_all_hosts, false}]},
    +  ...
    + ]}.
     
  • The second situation differs in a way that search results are not limited, and that all virtual hosts will be searched instead of only the current one: -
      {modules,
    -   [
    -    ...
    -    {mod_vcard, [{search, true},
    -                 {matches, infinity},
    -                 {allow_return_all, true}]},
    -    ...
    -   ]}.
    -
  • -

    3.3.22  mod_vcard_ldap

    - +

    {modules,
    + [
    +  ...
    +  {mod_vcard, [{search, true},
    +               {matches, infinity},
    +               {allow_return_all, true}]},
    +  ...
    + ]}.
    +

    +

    3.3.25  mod_vcard_ldap

    ejabberd can map LDAP attributes to vCard fields. This behaviour is implemented in the mod_vcard_ldap module. This module does not depend on the -authentication method (see 3.2.5).

    The mod_vcard_ldap module has +authentication method (see 3.2.5).

    Note that ejabberd treats LDAP as a read-only storage: +it is possible to consult data, but not possible to +create accounts, change password or edit vCard that is stored in LDAP.

    The mod_vcard_ldap module has its own optional parameters. The first group of parameters has the same meaning as the top-level LDAP parameters to set the authentication method: ldap_servers, ldap_port, ldap_rootdn, @@ -2634,281 +3171,414 @@ about these options. If one of these options is not set, ejabberd will for the top-level option with the same name.

    The second group of parameters consists of the following mod_vcard_ldap-specific options:

    -host
    This option defines the Jabber ID of the +{host, HostName}
    This option defines the Jabber ID of the service. If the host option is not specified, the Jabber ID will be the hostname of the virtual host with the prefix ‘vjud.’. The keyword "@HOST@" is replaced at start time with the real virtual host name. -
    iqdisc
    This specifies +
    {iqdisc, Discipline}
    This specifies the processing discipline for vcard-temp IQ queries (see section 3.3.2). -
    search
    This option specifies whether the search +
    {search, true|false}
    This option specifies whether the search functionality is enabled (value: true) or disabled (value: false). If disabled, the option host will be ignored and the Jabber User Directory service will not appear in the Service Discovery item list. The default value is true. -
    matches
    With this option, the number of reported +
    {matches, infinity|Number}
    With this option, the number of reported search results can be limited. If the option’s value is set to infinity, all search results are reported. The default value is 30. -
    ldap_vcard_map
    With this option you can -set the table that maps LDAP attributes to vCard fields. The format is: -[Name_of_vCard_field, Pattern, List_of_LDAP_attributes, ...]. -Name_of_vcard_field is the type name of the vCard as defined in -RFC 2426. Pattern is a -string which contains pattern variables "%u", "%d" or -"%s". List_of_LDAP_attributes is the list containing LDAP -attributes. The pattern variables "%s" will be sequentially replaced +
    {ldap_vcard_map, [ {Name, Pattern, LDAPattributes}, ...]}
    +With this option you can set the table that maps LDAP attributes to vCard fields. + +Name is the type name of the vCard as defined in +RFC 2426. +Pattern is a string which contains pattern variables +"%u", "%d" or "%s". +LDAPattributes is the list containing LDAP attributes. +The pattern variables +"%s" will be sequentially replaced with the values of LDAP attributes from List_of_LDAP_attributes, -"%u" will be replaced with the user part of a JID, and "%d" -will be replaced with the domain part of a JID. The default is: -
      [{"NICKNAME", "%u", []},
    -   {"FN", "%s", ["displayName"]},
    -   {"LAST", "%s", ["sn"]},
    -   {"FIRST", "%s", ["givenName"]},
    -   {"MIDDLE", "%s", ["initials"]},
    -   {"ORGNAME", "%s", ["o"]},
    -   {"ORGUNIT", "%s", ["ou"]},
    -   {"CTRY", "%s", ["c"]},
    -   {"LOCALITY", "%s", ["l"]},
    -   {"STREET", "%s", ["street"]},
    -   {"REGION", "%s", ["st"]},
    -   {"PCODE", "%s", ["postalCode"]},
    -   {"TITLE", "%s", ["title"]},
    -   {"URL", "%s", ["labeleduri"]},
    -   {"DESC", "%s", ["description"]},
    -   {"TEL", "%s", ["telephoneNumber"]},
    -   {"EMAIL", "%s", ["mail"]},
    -   {"BDAY", "%s", ["birthDay"]},
    -   {"ROLE", "%s", ["employeeType"]},
    -   {"PHOTO", "%s", ["jpegPhoto"]}]
    -
    ldap_search_fields
    This option -defines the search form and the LDAP attributes to search within. The format -is: [Name, Attribute, ...]. Name is the name of a search form +"%u" will be replaced with the user part of a JID, +and "%d" will be replaced with the domain part of a JID. +The default is: +
    [{"NICKNAME", "%u", []},
    + {"FN", "%s", ["displayName"]},
    + {"LAST", "%s", ["sn"]},
    + {"FIRST", "%s", ["givenName"]},
    + {"MIDDLE", "%s", ["initials"]},
    + {"ORGNAME", "%s", ["o"]},
    + {"ORGUNIT", "%s", ["ou"]},
    + {"CTRY", "%s", ["c"]},
    + {"LOCALITY", "%s", ["l"]},
    + {"STREET", "%s", ["street"]},
    + {"REGION", "%s", ["st"]},
    + {"PCODE", "%s", ["postalCode"]},
    + {"TITLE", "%s", ["title"]},
    + {"URL", "%s", ["labeleduri"]},
    + {"DESC", "%s", ["description"]},
    + {"TEL", "%s", ["telephoneNumber"]},
    + {"EMAIL", "%s", ["mail"]},
    + {"BDAY", "%s", ["birthDay"]},
    + {"ROLE", "%s", ["employeeType"]},
    + {"PHOTO", "%s", ["jpegPhoto"]}]
    +
    {ldap_search_fields, [ {Name, Attribute}, ...]}
    This option +defines the search form and the LDAP attributes to search within. +Name is the name of a search form field which will be automatically translated by using the translation files (see msgs/*.msg for available words). Attribute is the LDAP attribute or the pattern "%u". The default is: -
      [{"User", "%u"},
    -   {"Full Name", "displayName"},
    -   {"Given Name", "givenName"},
    -   {"Middle Name", "initials"},
    -   {"Family Name", "sn"},
    -   {"Nickname", "%u"},
    -   {"Birthday", "birthDay"},
    -   {"Country", "c"},
    -   {"City", "l"},
    -   {"Email", "mail"},
    -   {"Organization Name", "o"},
    -   {"Organization Unit", "ou"}]
    -
    ldap_search_reported
    This option -defines which search fields should be reported. The format is: -[Name, vCard_Name, ...]. Name is the name of a search form +
    [{"User", "%u"},
    + {"Full Name", "displayName"},
    + {"Given Name", "givenName"},
    + {"Middle Name", "initials"},
    + {"Family Name", "sn"},
    + {"Nickname", "%u"},
    + {"Birthday", "birthDay"},
    + {"Country", "c"},
    + {"City", "l"},
    + {"Email", "mail"},
    + {"Organization Name", "o"},
    + {"Organization Unit", "ou"}]
    +
    {ldap_search_reported, [ {SearchField, VcardField}, ...]}
    This option +defines which search fields should be reported. +SearchField is the name of a search form field which will be automatically translated by using the translation -files (see msgs/*.msg for available words). vCard_Name is the +files (see msgs/*.msg for available words). VcardField is the vCard field name defined in the ldap_vcard_map option. The default is: -
      [{"Full Name", "FN"},
    -   {"Given Name", "FIRST"},
    -   {"Middle Name", "MIDDLE"},
    -   {"Family Name", "LAST"},
    -   {"Nickname", "NICKNAME"},
    -   {"Birthday", "BDAY"},
    -   {"Country", "CTRY"},
    -   {"City", "LOCALITY"},
    -   {"Email", "EMAIL"},
    -   {"Organization Name", "ORGNAME"},
    -   {"Organization Unit", "ORGUNIT"}]
    +
    [{"Full Name", "FN"},
    + {"Given Name", "FIRST"},
    + {"Middle Name", "MIDDLE"},
    + {"Family Name", "LAST"},
    + {"Nickname", "NICKNAME"},
    + {"Birthday", "BDAY"},
    + {"Country", "CTRY"},
    + {"City", "LOCALITY"},
    + {"Email", "EMAIL"},
    + {"Organization Name", "ORGNAME"},
    + {"Organization Unit", "ORGUNIT"}]
     

    Examples:

    • Let’s say ldap.example.org is the name of our LDAP server. We have users with their passwords in "ou=Users,dc=example,dc=org" directory. Also we have addressbook, which contains users emails and their additional infos in "ou=AddressBook,dc=example,dc=org" directory. Corresponding -authentication section should looks like this:

        %% authentication method
      -  {auth_method, ldap}.
      -  %% DNS name of our LDAP server
      -  {ldap_servers, ["ldap.example.org"]}.
      -  %% We want to authorize users from 'shadowAccount' object class only
      -  {ldap_filter, "(objectClass=shadowAccount)"}.
      +authentication section should looks like this:

      %% authentication method
      +{auth_method, ldap}.
      +%% DNS name of our LDAP server
      +{ldap_servers, ["ldap.example.org"]}.
      +%% We want to authorize users from 'shadowAccount' object class only
      +{ldap_filter, "(objectClass=shadowAccount)"}.
       

      Now we want to use users LDAP-info as their vCards. We have four attributes defined in our LDAP schema: "mail" — email address, "givenName" — first name, "sn" — second name, "birthDay" — birthday. -Also we want users to search each other. Let’s see how we can set it up:

        {modules,
      -    ...
      -    {mod_vcard_ldap,
      -     [
      -      %% We use the same server and port, but want to bind anonymously because
      -      %% our LDAP server accepts anonymous requests to
      -      %% "ou=AddressBook,dc=example,dc=org" subtree.
      -      {ldap_rootdn, ""},
      -      {ldap_password, ""},
      -      %% define the addressbook's base
      -      {ldap_base, "ou=AddressBook,dc=example,dc=org"},
      -      %% uidattr: user's part of JID is located in the "mail" attribute
      -      %% uidattr_format: common format for our emails
      -      {ldap_uids, [{"mail","%u@mail.example.org"}]},
      -      %% We have to define empty filter here, because entries in addressbook does not
      -      %% belong to shadowAccount object class
      -      {ldap_filter, ""},
      -      %% Now we want to define vCard pattern
      -      {ldap_vcard_map,
      -       [{"NICKNAME", "%u", []}, % just use user's part of JID as his nickname
      -        {"FIRST", "%s", ["givenName"]},
      -        {"LAST", "%s", ["sn"]},
      -        {"FN", "%s, %s", ["sn", "givenName"]}, % example: "Smith, John"
      -        {"EMAIL", "%s", ["mail"]},
      -        {"BDAY", "%s", ["birthDay"]}]},
      -      %% Search form
      -      {ldap_search_fields,
      -       [{"User", "%u"},
      -        {"Name", "givenName"},
      -        {"Family Name", "sn"},
      -        {"Email", "mail"},
      -        {"Birthday", "birthDay"}]},
      -      %% vCard fields to be reported
      -      %% Note that JID is always returned with search results
      -      {ldap_search_reported,
      -       [{"Full Name", "FN"},
      -        {"Nickname", "NICKNAME"},
      -        {"Birthday", "BDAY"}]}
      -    ]}
      -    ...
      -  }.
      +Also we want users to search each other. Let’s see how we can set it up:

      {modules,
      +  ...
      +  {mod_vcard_ldap,
      +   [
      +    %% We use the same server and port, but want to bind anonymously because
      +    %% our LDAP server accepts anonymous requests to
      +    %% "ou=AddressBook,dc=example,dc=org" subtree.
      +    {ldap_rootdn, ""},
      +    {ldap_password, ""},
      +    %% define the addressbook's base
      +    {ldap_base, "ou=AddressBook,dc=example,dc=org"},
      +    %% uidattr: user's part of JID is located in the "mail" attribute
      +    %% uidattr_format: common format for our emails
      +    {ldap_uids, [{"mail","%u@mail.example.org"}]},
      +    %% We have to define empty filter here, because entries in addressbook does not
      +    %% belong to shadowAccount object class
      +    {ldap_filter, ""},
      +    %% Now we want to define vCard pattern
      +    {ldap_vcard_map,
      +     [{"NICKNAME", "%u", []}, % just use user's part of JID as his nickname
      +      {"FIRST", "%s", ["givenName"]},
      +      {"LAST", "%s", ["sn"]},
      +      {"FN", "%s, %s", ["sn", "givenName"]}, % example: "Smith, John"
      +      {"EMAIL", "%s", ["mail"]},
      +      {"BDAY", "%s", ["birthDay"]}]},
      +    %% Search form
      +    {ldap_search_fields,
      +     [{"User", "%u"},
      +      {"Name", "givenName"},
      +      {"Family Name", "sn"},
      +      {"Email", "mail"},
      +      {"Birthday", "birthDay"}]},
      +    %% vCard fields to be reported
      +    %% Note that JID is always returned with search results
      +    {ldap_search_reported,
      +     [{"Full Name", "FN"},
      +      {"Nickname", "NICKNAME"},
      +      {"Birthday", "BDAY"}]}
      +  ]}
      +  ...
      +}.
       

      Note that mod_vcard_ldap module checks an existence of the user before searching his info in LDAP.

    • ldap_vcard_map example: -
        {ldap_vcard_map,
      -   [{"NICKNAME", "%u", []},
      -    {"FN", "%s", ["displayName"]},
      -    {"CTRY", "Russia", []},
      -    {"EMAIL", "%u@%d", []},
      -    {"DESC", "%s\n%s", ["title", "description"]}
      -   ]},
      +
      {ldap_vcard_map,
      + [{"NICKNAME", "%u", []},
      +  {"FN", "%s", ["displayName"]},
      +  {"CTRY", "Russia", []},
      +  {"EMAIL", "%u@%d", []},
      +  {"DESC", "%s\n%s", ["title", "description"]}
      + ]},
       
    • ldap_search_fields example: -
        {ldap_search_fields,
      -   [{"User", "uid"},
      -    {"Full Name", "displayName"},
      -    {"Email", "mail"}
      -   ]},
      +
      {ldap_search_fields,
      + [{"User", "uid"},
      +  {"Full Name", "displayName"},
      +  {"Email", "mail"}
      + ]},
       
    • ldap_search_reported example: -
        {ldap_search_reported,
      -   [{"Full Name", "FN"},
      -    {"Email", "EMAIL"},
      -    {"Birthday", "BDAY"},
      -    {"Nickname", "NICKNAME"}
      -   ]},
      -
    -

    3.3.23  mod_version

    - -

    This module implements Software Version (XEP-0092). Consequently, it +

    {ldap_search_reported,
    + [{"Full Name", "FN"},
    +  {"Email", "EMAIL"},
    +  {"Birthday", "BDAY"},
    +  {"Nickname", "NICKNAME"}
    + ]},
    +

    +

    3.3.26  mod_version

    +

    This module implements Software Version (XEP-0092). Consequently, it answers ejabberd’s version when queried.

    Options:

    -show_os
    Should the operating system be revealed or not. +{show_os, true|false}
    Should the operating system be revealed or not. The default value is true. -
    iqdisc
    This specifies +
    {iqdisc, Discipline}
    This specifies the processing discipline for Software Version (jabber:iq:version) IQ queries (see section 3.3.2). -
    -

    Chapter 4  Managing an ejabberd server

    -

    4.1  ejabberdctl

    -

    -

    4.1.1  Commands

    -

    The ejabberdctl command line script allows to start, stop and perform -many other administrative tasks in a local or remote ejabberd server.

    When ejabberdctl is executed without any parameter, -it displays the available options. If there isn’t an ejabberd server running, +

    +

    Chapter 4  Managing an ejabberd Server

    +

    4.1  ejabberdctl

    With the ejabberdctl command line administration script +you can execute ejabberdctl commands (described in the next section, 4.1.1) +and also many general ejabberd commands (described in section 4.2). +This means you can start, stop and perform many other administrative tasks +in a local or remote ejabberd server (by providing the argument --node NODENAME).

    The ejabberdctl script can be configured in the file ejabberdctl.cfg. +This file includes detailed information about each configurable option. See section 4.1.2.

    The ejabberdctl script returns a numerical status code. +Success is represented by 0, +error is represented by 1, +and other codes may be used for specific results. +This can be used by other scripts to determine automatically +if a command succeeded or failed, +for example using: echo $?

    +

    4.1.1  ejabberdctl Commands

    When ejabberdctl is executed without any parameter, +it displays the available options. If there isn’t an ejabberd server running, the available parameters are:

    start
    Start ejabberd in background mode. This is the default method.
    debug
    Attach an Erlang shell to an already existing ejabberd server. This allows to execute commands interactively in the ejabberd server.
    live
    Start ejabberd in live mode: the shell keeps attached to the started server, showing log messages and allowing to execute interactive commands.

    If there is an ejabberd server running in the system, -ejabberdctl shows all the available commands in that server. -The more interesting ones are: +ejabberdctl shows the ejabberdctl commands described bellow +and all the ejabberd commands available in that server (see 4.2.1).

    The ejabberdctl commands are:

    -status
    Check the status of the ejabberd server. -
    stop
    Stop the ejabberd server which is running in the machine. -
    reopen-log
    If you use a tool to rotate logs, you have to configure it -so that this command is executed after each rotation. -
    backup, restore, install-fallback, dump, load
    You can use these -commands to create and restore backups. -
    import-file, import-dir
    -These options can be used to migrate from other Jabber/XMPP servers. There -exist tutorials to migrate from other software to ejabberd. -
    delete-expired-messages
    This option can be used to delete old messages -in offline storage. This might be useful when the number of offline messages -is very high. -

    The ejabberdctl script also allows the argument --node NODENAME. -This allows to administer a remote node.

    The ejabberdctl administration script can be configured in the file ejabberdctl.cfg. -This file provides detailed information about each configurable option.

    -

    4.1.2  Erlang runtime system

    -

    ejabberd is an Erlang/OTP application that runs inside an Erlang runtime system. +help

    Get help about ejabberdctl or any available command. Try ejabberdctl help help. +
    status
    Check the status of the ejabberd server. +
    stop
    Stop the ejabberd server. +
    restart
    Restart the ejabberd server. +
    mnesia
    Get information about the Mnesia database. +

    The ejabberdctl script can be restricted to require authentication +and execute some ejabberd commands; see 4.2.2. +Add the option to the file ejabberd.cfg. +In this example there is no restriction: +

    {ejabberdctl_access_commands, []}.
    +

    If account robot1@example.org is registered in ejabberd with password abcdef +(which MD5 is E8B501798950FC58AAD83C8C14978E), +and ejabberd.cfg contains this setting: +

    {hosts, ["example.org"]}.
    +{acl, bots, {user, "robot1", "example.org"}}.
    +{access, ctlaccess, [{allow, bots}]}.
    +{ejabberdctl_access_commands, [ {ctlaccess, [registered_users, register], []} ]}.
    +

    then you can do this in the shell: +

    $ ejabberdctl registered_users example.org
    +Error: no_auth_provided
    +$ ejabberdctl --auth robot1 example.org E8B501798950FC58AAD83C8C14978E registered_users example.org
    +robot1
    +testuser1
    +testuser2
    +

    +

    4.1.2  Erlang Runtime System

    ejabberd is an Erlang/OTP application that runs inside an Erlang runtime system. This system is configured using environment variables and command line parameters. The ejabberdctl administration script uses many of those possibilities. -You can configure some of them with the file ejabberdctl.cfg, +You can configure some of them with the file ejabberdctl.cfg, which includes detailed description about them. -This section describes for reference purposes +This section describes for reference purposes all the environment variables and command line parameters.

    The environment variables:

    -EJABBERD_CONFIG_PATH
    +EJABBERD_CONFIG_PATH
    Path to the ejabberd configuration file. -
    EJABBERD_MSGS_PATH
    +
    EJABBERD_MSGS_PATH
    Path to the directory with translated strings. -
    EJABBERD_LOG_PATH
    +
    EJABBERD_LOG_PATH
    Path to the ejabberd service log file. -
    EJABBERD_SO_PATH
    +
    EJABBERD_SO_PATH
    Path to the directory with binary system libraries. -
    HOME
    +
    EJABBERD_DOC_PATH
    + Path to the directory with ejabberd documentation. +
    EJABBERD_PID_PATH
    + Path to the PID file that ejabberd can create when started. +
    HOME
    Path to the directory that is considered ejabberd’s home. This path is used to read the file .erlang.cookie. -
    ERL_CRASH_DUMP
    +
    ERL_CRASH_DUMP
    Path to the file where crash reports will be dumped. -
    ERL_INETRC
    +
    ERL_INETRC
    Indicates which IP name resolution to use. If using -sname, specify either this option or -kernel inetrc filepath. -
    ERL_MAX_PORTS
    +
    ERL_MAX_PORTS
    Maximum number of simultaneously open Erlang ports. -
    ERL_MAX_ETS_TABLES
    +
    ERL_MAX_ETS_TABLES
    Maximum number of ETS and Mnesia tables.

    The command line parameters:

    --sname ejabberd
    +-sname ejabberd
    The Erlang node will be identified using only the first part of the host name, i. e. other Erlang nodes outside this domain cannot contact this node. This is the preferable option in most cases. -
    -name ejabberd
    +
    -name ejabberd
    The Erlang node will be fully identified. This is only useful if you plan to setup an ejabberd cluster with nodes in different networks. -
    -kernel inetrc "/etc/ejabberd/inetrc"
    - Indicates which IP name resolution to use. +
    -kernel inetrc "/etc/ejabberd/inetrc"
    + Indicates which IP name resolution to use. If using -sname, specify either this option or ERL_INETRC. -
    -kernel inet_dist_listen_min 4200 inet_dist_listen_min 4210
    +
    -kernel inet_dist_listen_min 4200 inet_dist_listen_min 4210
    Define the first and last ports that epmd (section 5.2) can listen to. -
    -detached
    -Starts the Erlang system detached from the system console. - Useful for running daemons and backgrounds processes. -
    -noinput
    +
    -detached
    +Starts the Erlang system detached from the system console. + Useful for running daemons and backgrounds processes. +
    -noinput
    Ensures that the Erlang system never tries to read any input. - Useful for running daemons and backgrounds processes. -
    -pa /var/lib/ejabberd/ebin
    + Useful for running daemons and backgrounds processes. +
    -pa /var/lib/ejabberd/ebin
    Specify the directory where Erlang binary files (*.beam) are located. -
    -s ejabberd
    +
    -s ejabberd
    Tell Erlang runtime system to start the ejabberd application. -
    -mnesia dir "/var/lib/ejabberd/db/nodename"
    +
    -mnesia dir "/var/lib/ejabberd/"
    Specify the Mnesia database directory. -
    -sasl sasl_error_logger {file, "/var/log/ejabberd/sasl.log"}
    +
    -sasl sasl_error_logger {file, "/var/log/ejabberd/erlang.log"}
    Path to the Erlang/OTP system log file. -
    +K [true|false]
    +SASL here means “System Architecture Support Libraries” +not “Simple Authentication and Security Layer”. +
    +K [true|false]
    Kernel polling. -
    -smp [auto|enable|disable]
    +
    -smp [auto|enable|disable]
    SMP support. -
    +P 250000
    +
    +P 250000
    Maximum number of Erlang processes. -
    -remsh ejabberd@localhost
    +
    -remsh ejabberd@localhost
    Open an Erlang shell in a remote Erlang node. +
    -hidden
    + The connections to other nodes are hidden (not published). + The result is that this node is not considered part of the cluster. + This is important when starting a temporary ctl or debug node.

    Note that some characters need to be escaped when used in shell scripts, for instance " and {}. -You can find other options in the Erlang manual page (erl -man erl).

    -

    4.2  Web Admin

    - +You can find other options in the Erlang manual page (erl -man erl).

    +

    4.2  ejabberd Commands

    An ejabberd command is an abstract function identified by a name, +with a defined number and type of calling arguments and type of result +that is registered in the ejabberd_commands service. +Those commands can be defined in any Erlang module and executed using any valid frontend.

    ejabberd includes a frontend to execute ejabberd commands: the script ejabberdctl. +Other known frontends that can be installed to execute ejabberd commands in different ways are: +ejabberd_xmlrpc (XML-RPC service), +mod_rest (HTTP POST service), +mod_shcommands (ejabberd WebAdmin page).

    +

    4.2.1  List of ejabberd Commands

    ejabberd includes a few ejabberd Commands by default. +When more modules are installed, new commands may be available in the frontends.

    The easiest way to get a list of the available commands, and get help for them is to use +the ejabberdctl script: +

    $ ejabberdctl help
    +Usage: ejabberdctl [--node nodename] [--auth user host password] command [options]
    +
    +Available commands in this ejabberd node:
    +  backup file                  Store the database to backup file
    +  connected_users              List all established sessions
    +  connected_users_number       Get the number of established sessions
    +  ...
    +

    The most interesting ones are: +

    +reopen_log
    Reopen the log files after they were renamed. +If the old files were not renamed before calling this command, +they are automatically renamed to "*-old.log". See section 7.1. +
    backup ejabberd.backup
    +Store internal Mnesia database to a binary backup file. +
    restore ejabberd.backup
    +Restore immediately from a binary backup file the internal Mnesia database. +This will consume quite some memory for big servers. +
    install_fallback ejabberd.backup
    +The binary backup file is installed as fallback: +it will be used to restore the database at the next ejabberd start. +Similar to restore, but requires less memory. +
    dump ejabberd.dump
    +Dump internal Mnesia database to a text file dump. +
    load ejabberd.dump
    +Restore immediately from a text file dump. +This is not recommended for big databases, as it will consume much time, +memory and processor. In that case it’s preferable to use backup and install_fallback. +
    import_piefxis, export_piefxis, export_piefxis_host
    +These options can be used to migrate accounts +using XEP-0227 formatted XML files +from/to other Jabber/XMPP servers +or move users of a vhost to another ejabberd installation. +See also +ejabberd migration kit. +
    import_file, import_dir
    +These options can be used to migrate accounts +using jabberd1.4 formatted XML files. +from other Jabber/XMPP servers +There exist tutorials to +migrate from other software to ejabberd. +
    delete_expired_messages
    This option can be used to delete old messages +in offline storage. This might be useful when the number of offline messages +is very high. +
    delete_old_messages days
    Delete offline messages older than the given days. +
    register user host password
    Register an account in that domain with the given password. +
    unregister user host
    Unregister the given account. +

    +

    4.2.2  Restrict Execution with AccessCommands

    The frontends can be configured to restrict access to certain commands. +In that case, authentication information must be provided. +In each frontend the AccessCommands option is defined +in a different place. But in all cases the option syntax is the same: +

    AccessCommands = [ {Access, CommandNames, Arguments}, ...]
    +Access = atom()
    +CommandNames = all | [CommandName]
    +CommandName = atom()
    +Arguments = [ {ArgumentName, ArgumentValue}, ...]
    +ArgumentName = atom()
    +ArgumentValue = any()
    +

    The default value is to not define any restriction: []. +If at least one restriction is defined, then the frontend expects +that authentication information is provided when executing a command. +The authentication information is Username, Hostname and Password of a local XMPP account +that has permission to execute the corresponding command. +This means that the account must be registered in the local ejabberd, +because the information will be verified. +It is possible to provide the plaintext password or its MD5 sum.

    When one or several access restrictions are defined and the +authentication information is provided, +each restriction is verified until one matches completely: +the account matches the Access rule, +the command name is listed in CommandNames, +and the provided arguments do not contradict Arguments.

    As an example to understand the syntax, let’s suppose those options: +

    {hosts, ["example.org"]}.
    +{acl, bots, {user, "robot1", "example.org"}}.
    +{access, commaccess, [{allow, bots}]}.
    +

    This list of access restrictions allows only robot1@example.org to execute all commands: +

    [{commaccess, all, []}]
    +

    See another list of restrictions (the corresponding ACL and ACCESS are not shown): +

    [
    + %% This bot can execute all commands:
    + {bot, all, []},
    + %% This bot can only execute the command 'dump'. No argument restriction:
    + {bot_backups, [dump], []}
    + %% This bot can execute all commands,
    + %% but if a 'host' argument is provided, it must be "example.org":
    + {bot_all_example, all, [{host, "example.org"}]},
    + %% This bot can only execute the command 'register',
    + %% and if argument 'host' is provided, it must be "example.org":
    + {bot_reg_example, [register], [{host, "example.org"}]},
    + %% This bot can execute the commands 'register' and 'unregister',
    + %% if argument host is provided, it must be "test.org":
    + {_bot_reg_test, [register, unregister], [{host, "test.org"}]}
    +]
    +

    +

    4.3  Web Admin

    The ejabberd Web Admin allows to administer most of ejabberd using a web browser.

    This feature is enabled by default: a ejabberd_http listener with the option web_admin (see -section 3.1.3) is included in the listening ports. Then you can open +section 3.1.3) is included in the listening ports. Then you can open http://server:port/admin/ in your favourite web browser. You will be asked to enter the username (the full Jabber ID) and password of an ejabberd user with administrator rights. After authentication @@ -2937,81 +3607,109 @@ username ‘admin@example.net’ to administer all virtual ho URL). If you log in with ‘admin@example.com’ on
    http://example.org:5280/admin/server/example.com/ you can only administer the virtual host example.com. -

      ...
    -  {acl, admins, {user, "admin", "example.net"}}.
    -  {host_config, "example.com", [{acl, admins, {user, "admin", "example.com"}}]}.
    -  {access, configure, [{allow, admins}]}.
    +
    {acl, admins, {user, "admin", "example.net"}}.
    +{host_config, "example.com", [{acl, admins, {user, "admin", "example.com"}}]}.
    +{access, configure, [{allow, admins}]}.
    +
    +{hosts, ["example.org"]}.
    +
    +{listen,
    + [
       ...
    -  {hosts, ["example.org"]}.
    +  {5280, ejabberd_http, [http_poll, web_admin]},
       ...
    -  {listen,
    -   [...
    -    {5280, ejabberd_http, [http_poll, web_admin]},
    -    ...
    -   ]
    -  }.
    + ]}.
     
  • For security reasons, you can serve the Web Admin on a secured connection, on a port differing from the HTTP Polling interface, and bind it to the internal LAN IP. The Web Admin will be accessible by pointing your -web browser to https://192.168.1.1:5280/admin/: -
      ...
    -  {hosts, ["example.org"]}.
    +web browser to https://192.168.1.1:5282/admin/:
    +
    +{hosts, ["example.org"]}.
    +
    +{listen,
    + [
       ...
    -  {listen,
    -   [...
    -    {5270, ejabberd_http,    [http_poll]},
    -    {5280, ejabberd_http,    [web_admin, {ip, {192, 168, 1, 1}},
    -                              tls, {certfile, "/usr/local/etc/server.pem"}]},
    -    ...
    -   ]
    -  }.
    -
  • -

    4.3  Ad-hoc Commands

    -

    If you enable mod_configure and mod_adhoc, + {5280, ejabberd_http, [ + http_poll + ]}, + {{5282, "192.168.1.1"}, ejabberd_http, [ + web_admin, + tls, {certfile, "/usr/local/etc/server.pem"} + ]}, + ... + ]}. +

    Certain pages in the ejabberd Web Admin contain a link to a related +section in the ejabberd Installation and Operation Guide. +In order to view such links, a copy in HTML format of the Guide must +be installed in the system. +The file is searched by default in +"/share/doc/ejabberd/guide.html". +The directory of the documentation can be specified in +the environment variable EJABBERD_DOC_PATH. +See section 4.1.2.

    +

    4.4  Ad-hoc Commands

    If you enable mod_configure and mod_adhoc, you can perform several administrative tasks in ejabberd -with a Jabber client. -The client must support Ad-Hoc Commands (XEP-0050), -and you must login in the Jabber server with -an account with proper privileges.

    -

    4.4  Change Computer Hostname

    -

    ejabberd uses the distributed Mnesia database. +with a XMPP client. +The client must support Ad-Hoc Commands (XEP-0050), +and you must login in the XMPP server with +an account with proper privileges.

    +

    4.5  Change Computer Hostname

    ejabberd uses the distributed Mnesia database. Being distributed, Mnesia enforces consistency of its file, -so it stores the name of the Erlang node in it. +so it stores the name of the Erlang node in it (see section 5.4). The name of an Erlang node includes the hostname of the computer. So, the name of the Erlang node changes if you change the name of the machine in which ejabberd runs, -or when you move ejabberd to a different machine.

    So, if you want to change the computer hostname where ejabberd is installed, -you must follow these instructions: -

    1. - In the old server, backup the Mnesia database using the Web Admin or ejabberdctl. - For example: -
      ejabberdctl backup /tmp/ejabberd-oldhost.backup
      -
    2. In the new server, restore the backup file using the Web Admin or ejabberdctl. - For example: -
      ejabberdctl restore /tmp/ejabberd-oldhost.backup
      -
    -

    Chapter 5  Securing ejabberd

    -

    5.1  Firewall Settings

    - +or when you move ejabberd to a different machine.

    You have two ways to use the old Mnesia database in an ejabberd with new node name: +put the old node name in ejabberdctl.cfg, +or convert the database to the new node name.

    Those example steps will backup, convert and load the Mnesia database. +You need to have either the old Mnesia spool dir or a backup of Mnesia. +If you already have a backup file of the old database, you can go directly to step 5. +You also need to know the old node name and the new node name. +If you don’t know them, look for them by executing ejabberdctl +or in the ejabberd log files.

    Before starting, setup some variables: +

    OLDNODE=ejabberd@oldmachine
    +NEWNODE=ejabberd@newmachine
    +OLDFILE=/tmp/old.backup
    +NEWFILE=/tmp/new.backup
    +
    1. +Start ejabberd enforcing the old node name: +
      ejabberdctl --node $OLDNODE start
      +
    2. Generate a backup file: +
      ejabberdctl --node $OLDNODE backup $OLDFILE
      +
    3. Stop the old node: +
      ejabberdctl --node $OLDNODE stop
      +
    4. Make sure there aren’t files in the Mnesia spool dir. For example: +
      mkdir /var/lib/ejabberd/oldfiles
      +mv /var/lib/ejabberd/*.* /var/lib/ejabberd/oldfiles/
      +
    5. Start ejabberd. There isn’t any need to specify the node name anymore: +
      ejabberdctl start
      +
    6. Convert the backup to new node name: +
      ejabberdctl mnesia_change_nodename $OLDNODE $NEWNODE $OLDFILE $NEWFILE
      +
    7. Import the new backup: +
      ejabberdctl restore $NEWFILE
      +
    8. Check that the information of the old database is available: accounts, rosters... +After you finish, remember to delete the temporary backup files from public directories. +

    +

    Chapter 5  Securing ejabberd

    +

    5.1  Firewall Settings

    You need to take the following TCP ports in mind when configuring your firewall:


    - +
    PortDescription
    PortDescription
    5222Standard port for Jabber/XMPP client connections, plain or STARTTLS.
    5223Standard port for Jabber client connections using the old SSL method.
    5269Standard port for Jabber/XMPP server connections.
    4369EPMD (section 5.2) listens for Erlang node name requests.
    port rangeUsed for connections between Erlang nodes. This range is configurable (see section 5.2).
    -

    -

    5.2  epmd

    -

    epmd (Erlang Port Mapper Daemon) -is a small name server included in Erlang/OTP -and used by Erlang programs when establishing distributed Erlang communications. -ejabberd needs epmd to use ejabberdctl and also when clustering ejabberd nodes. +


    +

    5.2  epmd

    epmd (Erlang Port Mapper Daemon) +is a small name server included in Erlang/OTP +and used by Erlang programs when establishing distributed Erlang communications. +ejabberd needs epmd to use ejabberdctl and also when clustering ejabberd nodes. This small program is automatically started by Erlang, and is never stopped. -If ejabberd is stopped, and there aren’t any other Erlang programs -running in the system, you can safely stop epmd if you want.

    ejabberd runs inside an Erlang node. -To communicate with ejabberd, the script ejabberdctl starts a new Erlang node +If ejabberd is stopped, and there aren’t any other Erlang programs +running in the system, you can safely stop epmd if you want.

    ejabberd runs inside an Erlang node. +To communicate with ejabberd, the script ejabberdctl starts a new Erlang node and connects to the Erlang node that holds ejabberd. In order for this communication to work, epmd must be running and listening for name requests in the port 4369. @@ -3024,41 +3722,58 @@ So, if you plan to build a cluster of ejabberd nodes you must open the port 4369 for the machines involved in the cluster. Remember to block the port so Internet doesn’t have access to it.

    Once an Erlang node solved the node name of another Erlang node using EPMD and port 4369, the nodes communicate directly. -The ports used in this case by default are random, +The ports used in this case by default are random, but can be configured in the file ejabberdctl.cfg. The Erlang command-line parameter used internally is, for example:

    erl ... -kernel inet_dist_listen_min 4370 inet_dist_listen_max 4375
    -
    -

    5.3  Erlang Cookie

    -

    The Erlang cookie is a string with numbers and letters. -An Erlang node reads the cookie at startup from the command-line parameter -setcookie -or from a cookie file. +

    +

    5.3  Erlang Cookie

    The Erlang cookie is a string with numbers and letters. +An Erlang node reads the cookie at startup from the command-line parameter -setcookie. +If not indicated, the cookie is read from the cookie file $HOME/.erlang.cookie. +If this file does not exist, it is created immediately with a random cookie. Two Erlang nodes communicate only if they have the same cookie. -Setting a cookie on the Erlang node allows you to structure your Erlang network +Setting a cookie on the Erlang node allows you to structure your Erlang network and define which nodes are allowed to connect to which.

    Thanks to Erlang cookies, you can prevent access to the Erlang node by mistake, for example when there are several Erlang nodes running different programs in the same machine.

    Setting a secret cookie is a simple method to difficult unauthorized access to your Erlang node. -However, the cookie system is not ultimately effective +However, the cookie system is not ultimately effective to prevent unauthorized access or intrusion to an Erlang node. The communication between Erlang nodes are not encrypted, so the cookie could be read sniffing the traffic on the network. -The recommended way to secure the Erlang node is to block the port 4369.

    -

    5.4  Erlang node name

    -

    An Erlang node may have a node name. -The name can be short (if indicated with the command-line parameter -sname) -or long (if indicated with the parameter -name). -Starting an Erlang node with -sname limits the communication between Erlang nodes to the LAN.

    Using the option -sname instead of -name is a simple method +The recommended way to secure the Erlang node is to block the port 4369.

    +

    5.4  Erlang Node Name

    An Erlang node may have a node name. +The name can be short (if indicated with the command-line parameter -sname) +or long (if indicated with the parameter -name). +Starting an Erlang node with -sname limits the communication between Erlang nodes to the LAN.

    Using the option -sname instead of -name is a simple method to difficult unauthorized access to your Erlang node. However, it is not ultimately effective to prevent access to the Erlang node, -because it may be possible to fake the fact that you are on another network +because it may be possible to fake the fact that you are on another network using a modified version of Erlang epmd. -The recommended way to secure the Erlang node is to block the port 4369.

    -

    Chapter 6  Clustering

    - -

    -

    6.1  How it Works

    - -

    A Jabber domain is served by one or more ejabberd nodes. These nodes can +The recommended way to secure the Erlang node is to block the port 4369.

    +

    5.5  Securing Sensitive Files

    ejabberd stores sensitive data in the file system either in plain text or binary files. +The file system permissions should be set to only allow the proper user to read, +write and execute those files and directories.

    +ejabberd configuration file: /etc/ejabberd/ejabberd.cfg
    +Contains the JID of administrators +and passwords of external components. +The backup files probably contain also this information, +so it is preferable to secure the whole /etc/ejabberd/ directory. +
    ejabberd service log: /var/log/ejabberd/ejabberd.log
    +Contains IP addresses of clients. +If the loglevel is set to 5, it contains whole conversations and passwords. +If a logrotate system is used, there may be several log files with similar information, +so it is preferable to secure the whole /var/log/ejabberd/ directory. +
    Mnesia database spool files in /var/lib/ejabberd/
    +The files store binary data, but some parts are still readable. +The files are generated by Mnesia and their permissions cannot be set directly, +so it is preferable to secure the whole /var/lib/ejabberd/ directory. +
    Erlang cookie file: /var/lib/ejabberd/.erlang.cookie
    +See section 5.3. +

    +

    Chapter 6  Clustering

    +

    +

    6.1  How it Works

    +

    A XMPP domain is served by one or more ejabberd nodes. These nodes can be run on different machines that are connected via a network. They all must have the ability to connect to port 4369 of all another nodes, and must have the same magic cookie (see Erlang/OTP documentation, in other words the @@ -3070,35 +3785,30 @@ router,

  • local router,
  • session manager,
  • s2s manager. -
  • -

    6.1.1  Router

    - -

    This module is the main router of Jabber packets on each node. It +

    +

    6.1.1  Router

    +

    This module is the main router of XMPP packets on each node. It routes them based on their destination’s domains. It uses a global routing table. The domain of the packet’s destination is searched in the routing table, and if it is found, the packet is routed to the -appropriate process. If not, it is sent to the s2s manager.

    -

    6.1.2  Local Router

    - +appropriate process. If not, it is sent to the s2s manager.

    +

    6.1.2  Local Router

    This module routes packets which have a destination domain equal to one of this server’s host names. If the destination JID has a non-empty user part, it is routed to the session manager, otherwise it is processed depending -on its content.

    -

    6.1.3  Session Manager

    - +on its content.

    +

    6.1.3  Session Manager

    This module routes packets to local users. It looks up to which user resource a packet must be sent via a presence table. Then the packet is either routed to the appropriate c2s process, or stored in offline -storage, or bounced back.

    -

    6.1.4  s2s Manager

    - -

    This module routes packets to other Jabber servers. First, it +storage, or bounced back.

    +

    6.1.4  s2s Manager

    +

    This module routes packets to other XMPP servers. First, it checks if an opened s2s connection from the domain of the packet’s source to the domain of the packet’s destination exists. If that is the case, the s2s manager routes the packet to the process -serving this connection, otherwise a new connection is opened.

    -

    6.2  Clustering Setup

    - +serving this connection, otherwise a new connection is opened.

    +

    6.2  Clustering Setup

    Suppose you already configured ejabberd on one machine named (first), and you need to setup another one to make an ejabberd cluster. Then do following steps:

    1. @@ -3106,11 +3816,15 @@ Copy ~ejabberd/.erlang.cookie file from first to second.

      (alt) You can also add ‘-cookie content_of_.erlang.cookie’ option to all ‘erl’ commands below.

    2. On second run the following command as the ejabberd daemon user, in the working directory of ejabberd:
      erl -sname ejabberd \
      +    -mnesia dir "/var/lib/ejabberd/" \
           -mnesia extra_db_nodes "['ejabberd@first']" \
           -s mnesia
       

      This will start Mnesia serving the same database as ejabberd@first. You can check this by running the command ‘mnesia:info().’. You -should see a lot of remote tables and a line like the following:

      running db nodes   = [ejabberd@first, ejabberd@second]
      +should see a lot of remote tables and a line like the following:

      Note: the Mnesia directory may be different in your system. +To know where does ejabberd expect Mnesia to be installed by default, +call 4.1 without options and it will show some help, +including the Mnesia database spool dir.

      running db nodes   = [ejabberd@first, ejabberd@second]
       
    3. Now run the following in the same ‘erl’ session:
      mnesia:change_table_copy_type(schema, node(), disc_copies).
       

      This will create local disc storage for the database.

      (alt) Change storage type of the scheme table to ‘RAM and disc copy’ on the second node via the Web Admin.

    4. Now you can add replicas of various tables to this node with @@ -3122,55 +3836,39 @@ can be replaced with ‘ram_copies’ or some hints from the command ‘mnesia:info().’, by looking at the size of tables and the default storage type for each table on ’first’.

      Replicating a table makes lookups in this table faster on this node. Writing, on the other hand, will be slower. And of course if machine with one -of the replicas is down, other replicas will be used.

      Also section 5.3 (Table Fragmentation) of Mnesia User’s Guide can be helpful. +of the replicas is down, other replicas will be used.

      Also section 5.3 (Table Fragmentation) of Mnesia User’s Guide can be helpful.

      (alt) Same as in previous item, but for other tables.

    5. Run ‘init:stop().’ or just ‘q().’ to exit from the Erlang shell. This probably can take some time if Mnesia has not yet -transfered and processed all data it needed from first.
    6. Now run ejabberd on second with almost the same config as -on first (you probably do not need to duplicate ‘acl’ -and ‘access’ options — they will be taken from -first, and mod_muc and mod_irc should be -enabled only on one machine in the cluster). +transfered and processed all data it needed from first.
    7. Now run ejabberd on second with a configuration similar as +on first: you probably do not need to duplicate ‘acl’ +and ‘access’ options because they will be taken from +first; and mod_irc should be +enabled only on one machine in the cluster.

    You can repeat these steps for other machines supposed to serve this -domain.

    -

    6.3  Service Load-Balancing

    -

    6.3.1  Components Load-Balancing

    - -

    -

    6.3.2  Domain Load-Balancing Algorithm

    - -

    ejabberd includes an algorithm to load balance the components that are plugged on an ejabberd cluster. It means that you can plug one or several instances of the same component on each ejabberd cluster and that the traffic will be automatically distributed.

    The default distribution algorithm try to deliver to a local instance of a component. If several local instances are available, one instance is chosen randomly. If no instance is available locally, one instance is chosen randomly among the remote component instances.

    If you need a different behaviour, you can change the load balancing behaviour with the option domain_balancing. The syntax of the option is the following:

     {domain_balancing, "component.example.com", <balancing_criterium>}.                                   
    -

    Several balancing criteria are available: +domain.

    +

    6.3  Service Load-Balancing

    +

    +

    6.3.1  Components Load-Balancing

    +

    6.3.2  Domain Load-Balancing Algorithm

    +

    ejabberd includes an algorithm to load balance the components that are plugged on an ejabberd cluster. It means that you can plug one or several instances of the same component on each ejabberd cluster and that the traffic will be automatically distributed.

    The default distribution algorithm try to deliver to a local instance of a component. If several local instances are available, one instance is chosen randomly. If no instance is available locally, one instance is chosen randomly among the remote component instances.

    If you need a different behaviour, you can change the load balancing behaviour with the option domain_balancing. The syntax of the option is the following: +

    {domain_balancing, "component.example.com", BalancingCriteria}.

    Several balancing criteria are available:

    • destination: the full JID of the packet to attribute is used.
    • source: the full JID of the packet from attribute is used.
    • bare_destination: the bare JID (without resource) of the packet to attribute is used.
    • bare_source: the bare JID (without resource) of the packet from attribute is used. -

    If the value corresponding to the criteria is the same, the same component instance in the cluster will be used.

    -

    6.3.3  Load-Balancing Buckets

    - -

    When there is a risk of failure for a given component, domain balancing can cause service trouble. If one component is failing the service will not work correctly unless the sessions are rebalanced.

    In this case, it is best to limit the problem to the sessions handled by the failing component. This is what the domain_balancing_component_number option does, making the load balancing algorithm not dynamic, but sticky on a fix number of component instances.

    The syntax is the following: -

        {domain_balancing_component_number, "component.example.com", N}
    -
    -

    Chapter 7  Debugging

    - -

    -

    7.1  Watchdog Alerts

    - -

    ejabberd includes a watchdog mechanism. -If a process in the ejabberd server consumes too much memory, -a message is sent to the Jabber accounts defined with the option -watchdog_admins - in the ejabberd configuration file. -Example configuration: -

    {watchdog_admins, ["admin2@localhost", "admin2@example.org"]}.
    -
    -

    7.2  Log Files

    -

    An ejabberd node writes two log files: +

    If the value corresponding to the criteria is the same, the same component instance in the cluster will be used.

    +

    6.3.3  Load-Balancing Buckets

    +

    When there is a risk of failure for a given component, domain balancing can cause service trouble. If one component is failing the service will not work correctly unless the sessions are rebalanced.

    In this case, it is best to limit the problem to the sessions handled by the failing component. This is what the domain_balancing_component_number option does, making the load balancing algorithm not dynamic, but sticky on a fix number of component instances.

    The syntax is: +

    {domain_balancing_component_number, "component.example.com", Number}.

    +

    Chapter 7  Debugging

    +

    +

    7.1  Log Files

    An ejabberd node writes two log files:

    ejabberd.log
    is the ejabberd service log, with the messages reported by ejabberd code -
    sasl.log
    is the Erlang/OTP system log, with the messages reported by Erlang/OTP using SASL (System Architecture Support Libraries) -

    The option loglevel modifies the verbosity of the file ejabberd.log. -The possible levels are: +

    erlang.log
    is the Erlang/OTP system log, with the messages reported by Erlang/OTP using SASL (System Architecture Support Libraries) +

    The option loglevel modifies the verbosity of the file ejabberd.log. The syntax is: +

    {loglevel, Level}.

    The possible Level are:

    0
    No ejabberd log at all (not recommended)
    1
    Critical @@ -3181,23 +3879,54 @@ The possible levels are:

    For example, the default configuration is:

    {loglevel, 4}.
    -
    -

    7.3  Debug Console

    -

    The Debug Console is an Erlang shell attached to an already running ejabberd server. +

    The log files grow continually, so it is recommended to rotate them periodically. +To rotate the log files, rename the files and then reopen them. +The ejabberdctl command reopen-log +(please refer to section 4.1.1) +reopens the log files, +and also renames the old ones if you didn’t rename them.

    +

    7.2  Debug Console

    The Debug Console is an Erlang shell attached to an already running ejabberd server. With this Erlang shell, an experienced administrator can perform complex tasks.

    This shell gives complete control over the ejabberd server, so it is important to use it with extremely care. -There are some simple and safe examples in the article -Interconnecting Erlang Nodes

    To exit the shell, close the window or press the keys: control+c control+c.

    -

    Appendix A  Internationalization and Localization

    - -

    All built-in modules support the xml:lang attribute inside IQ queries. +There are some simple and safe examples in the article +Interconnecting Erlang Nodes

    To exit the shell, close the window or press the keys: control+c control+c.

    +

    7.3  Watchdog Alerts

    +

    ejabberd includes a watchdog mechanism that may be useful to developers +when troubleshooting a problem related to memory usage. +If a process in the ejabberd server consumes more memory than the configured threshold, +a message is sent to the XMPP accounts defined with the option +watchdog_admins + in the ejabberd configuration file.

    The syntax is: +

    {watchdog_admins, [JID, ...]}.

    The memory consumed is measured in words: +a word on 32-bit architecture is 4 bytes, +and a word on 64-bit architecture is 8 bytes. +The threshold by default is 1000000 words. +This value can be configured with the option watchdog_large_heap, +or in a conversation with the watchdog alert bot.

    The syntax is: +

    {watchdog_large_heap, Number}.

    Example configuration: +

    {watchdog_admins, ["admin2@localhost", "admin2@example.org"]}.
    +{watchdog_large_heap, 30000000}.
    +

    To remove watchdog admins, remove them in the option. +To remove all watchdog admins, set the option with an empty list: +

    {watchdog_admins, []}.
    +

    +

    Appendix A  Internationalization and Localization

    +

    The source code of ejabberd supports localization. +The translators can edit the +gettext .po files +using any capable program (KBabel, Lokalize, Poedit...) or a simple text editor.

    Then gettext +is used to extract, update and export those .po files to the .msg format read by ejabberd. +To perform those management tasks, in the src/ directory execute make translations. +The translatable strings are extracted from source code to generate the file ejabberd.pot. +This file is merged with each .po file to produce updated .po files. +Finally those .po files are exported to .msg files, that have a format easily readable by ejabberd.

    All built-in modules support the xml:lang attribute inside IQ queries. Figure A.1, for example, shows the reply to the following query: -

      <iq id='5'
    -      to='example.org'
    -      type='get'
    -      xml:lang='ru'>
    -    <query xmlns='http://jabber.org/protocol/disco#items'/>
    -  </iq>
    +

    <iq id='5'
    +    to='example.org'
    +    type='get'
    +    xml:lang='ru'>
    +  <query xmlns='http://jabber.org/protocol/disco#items'/>
    +</iq>
     

    discorus.png @@ -3211,17 +3940,14 @@ Figure A.1, for example, shows the reply to the webadmmainru.png -
    Figure A.2: Web Admin showing a virtual host when the web browser provides the +
    Figure A.2: Web Admin showing a virtual host when the web browser provides the HTTP header ‘Accept-Language: ru’
    -

    -

    Appendix B  Release Notes

    - -

    Release notes are available from ejabberd Home Page

    -

    Appendix C  Acknowledgements

    - -Thanks to all people who contributed to this guide: +


    +

    Appendix B  Release Notes

    +

    Release notes are available from ejabberd Home Page

    +

    Appendix C  Acknowledgements

    Thanks to all people who contributed to this guide:

    -

    Appendix D  Copyright Information

    -

    Ejabberd Installation and Operation Guide.
    -Copyright © 2003 — 2008 Process-one

    This document is free software; you can redistribute it and/or +

    +

    Appendix D  Copyright Information

    Ejabberd Installation and Operation Guide.
    +Copyright © 2003 — 2009 ProcessOne

    This document is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

    This document is distributed in the hope that it will be useful, diff --git a/doc/guide.tex b/doc/guide.tex index bd1447db1..57a754548 100644 --- a/doc/guide.tex +++ b/doc/guide.tex @@ -5,7 +5,7 @@ \usepackage{graphics} \usepackage{hevea} \usepackage[pdftex,colorlinks,unicode,urlcolor=blue,linkcolor=blue, - pdftitle=Ejabberd\ Installation\ and\ Operation\ Guide,pdfauthor=Process-one,pdfsubject=ejabberd,pdfkeywords=ejabberd, + pdftitle=Ejabberd\ Installation\ and\ Operation\ Guide,pdfauthor=ProcessOne,pdfsubject=ejabberd,pdfkeywords=ejabberd, pdfpagelabels=false]{hyperref} \usepackage{makeidx} %\usepackage{showidx} % Only for verifying the index entries. @@ -30,6 +30,11 @@ \makeindex % Remove the index anchors from the HTML version to save size and bandwith. \newcommand{\ind}[1]{\begin{latexonly}\index{#1}\end{latexonly}} +\newcommand{\makechapter}[2]{ \aname{#1}{} \chapter{\ahrefloc{#1}{#2}} \label{#1} } +\newcommand{\makesection}[2]{ \aname{#1}{} \section{\ahrefloc{#1}{#2}} \label{#1} } +\newcommand{\makesubsection}[2]{ \aname{#1}{} \subsection{\ahrefloc{#1}{#2}} \label{#1} } +\newcommand{\makesubsubsection}[2]{ \aname{#1}{} \subsubsection{\ahrefloc{#1}{#2}} \label{#1} } +\newcommand{\makeparagraph}[2]{ \aname{#1}{} \paragraph{\ahrefloc{#1}{#2}} \label{#1} } %% Images \newcommand{\logoscale}{0.7} @@ -54,6 +59,8 @@ \newcommand{\shell}[1]{\texttt{#1}} \newcommand{\ejabberd}{\texttt{ejabberd}} \newcommand{\Jabber}{Jabber} +\newcommand{\XMPP}{XMPP} +\newcommand{\esyntax}[1]{\begin{description}\titem{#1}\end{description}} %% Modules \newcommand{\module}[1]{\texttt{#1}} @@ -63,6 +70,8 @@ \newcommand{\modconfigure}{\module{mod\_configure}} \newcommand{\moddisco}{\module{mod\_disco}} \newcommand{\modecho}{\module{mod\_echo}} +\newcommand{\modhttpbind}{\module{mod\_http\_bind}} +\newcommand{\modhttpfileserver}{\module{mod\_http\_fileserver}} \newcommand{\modirc}{\module{mod\_irc}} \newcommand{\modlast}{\module{mod\_last}} \newcommand{\modlastodbc}{\module{mod\_last\_odbc}} @@ -70,12 +79,14 @@ \newcommand{\modmuclog}{\module{mod\_muc\_log}} \newcommand{\modoffline}{\module{mod\_offline}} \newcommand{\modofflineodbc}{\module{mod\_offline\_odbc}} +\newcommand{\modping}{\module{mod\_ping}} \newcommand{\modprivacy}{\module{mod\_privacy}} \newcommand{\modprivacyodbc}{\module{mod\_privacy\_odbc}} \newcommand{\modprivate}{\module{mod\_private}} \newcommand{\modprivateodbc}{\module{mod\_private\_odbc}} \newcommand{\modproxy}{\module{mod\_proxy65}} \newcommand{\modpubsub}{\module{mod\_pubsub}} +\newcommand{\modpubsubodbc}{\module{mod\_pubsub\_odbc}} \newcommand{\modregister}{\module{mod\_register}} \newcommand{\modroster}{\module{mod\_roster}} \newcommand{\modrosterodbc}{\module{mod\_roster\_odbc}} @@ -89,18 +100,19 @@ \newcommand{\modversion}{\module{mod\_version}} %% Contributed modules -\usepackage{ifthen} -\newboolean{modhttpbind} -\newcommand{\modhttpbind}{\module{mod\_http\_bind}} -\newboolean{modhttpfileserver} -\newcommand{\modhttpfileserver}{\module{mod\_http\_fileserver}} -\include{contributed_modules} +%\usepackage{ifthen} +%\newboolean{modhttpbind} +%\newcommand{\modhttpbind}{\module{mod\_http\_bind}} +%\include{contributed_modules} +% +% Then in the document you can input the partial tex file with: +%\ifthenelse{\boolean{modhttpbind}}{\input{mod_http_bind.tex}}{} %% Common options -\newcommand{\iqdiscitem}[1]{\titem{iqdisc} \ind{options!iqdisc}This specifies +\newcommand{\iqdiscitem}[1]{\titem{\{iqdisc, Discipline\}} \ind{options!iqdisc}This specifies the processing discipline for #1 IQ queries (see section~\ref{modiqdiscoption}).} \newcommand{\hostitem}[1]{ - \titem{host} \ind{options!host} This option defines the Jabber ID of the + \titem{\{host, HostName\}} \ind{options!host} This option defines the Jabber ID of the service. If the \texttt{host} option is not specified, the Jabber ID will be the hostname of the virtual host with the prefix `\jid{#1.}'. The keyword "@HOST@" is replaced at start time with the real virtual host name. @@ -119,16 +131,17 @@ the processing discipline for #1 IQ queries (see section~\ref{modiqdiscoption}). \end{tabular}\\ \vspace{2mm} {\rule{\larg}{1mm}} +\begin{latexonly} \vspace{2mm} \\ -\begin{tabular}{r} - {\large \bf \today} -\end{tabular}\\ \vspace{5.5cm} +\end{latexonly} } +\begin{latexonly} \author{\begin{tabular}{p{13.7cm}} ejabberd Development Team \end{tabular}} \date{} +\end{latexonly} %% Options @@ -137,8 +150,21 @@ ejabberd Development Team %\newcommand{\new}{\marginpar{\textsc{new}}} % Highlight new features %\newcommand{\improved}{\marginpar{\textsc{improved}}} % Highlight improved features -%% To by-pass errors in the HTML version. -\newstyle{SPAN}{width:20\%; float:right; text-align:left; margin-left:auto;} +%% To by-pass errors in the HTML version: +\newstyle{.SPAN}{width:20\%; float:right; text-align:left; margin-left:auto;} +\newstyle{H1.titlemain HR}{display:none;} +\newstyle{TABLE.title}{border-top:1px solid grey;border-bottom:1px solid grey; background: \#efefef} +\newstyle{H1.chapter A, H2.section A, H3.subsection A, H4.subsubsection A, H5.paragraph A} + {color:\#000000; text-decoration:none;} +\newstyle{H1.chapter, H2.section, H3.subsection, H4.subsubsection, H5.paragraph} + {border-top: 1px solid grey; background: \#efefef; padding: 0.5ex} +\newstyle{pre.verbatim}{margin:1ex 2ex;border:1px dashed lightgrey;background-color:\#f9f9f9;padding:0.5ex;} +\newstyle{.dt-description}{margin:0ex 2ex;} +\newstyle{table[border="1"]}{border-collapse:collapse;margin-bottom:1em;} +\newstyle{table[border="1"] td}{border:1px solid \#aaa;padding:2px} +% Don't display


    before and after tables or images: +\newstyle{BLOCKQUOTE.table DIV.center DIV.center HR}{display:none;} +\newstyle{BLOCKQUOTE.figure DIV.center DIV.center HR}{display:none;} %% Footnotes \begin{latexonly} @@ -147,7 +173,7 @@ ejabberd Development Team \gdef\ahrefurl#1{\href{#1}{\texttt{#1}}} \gdef\footahref#1#2{#2\footnote{\href{#1}{\texttt{#1}}}} \end{latexonly} -\newcommand{\txepref}[2]{\footahref{http://www.xmpp.org/extensions/xep-#1.html}{#2}} +\newcommand{\txepref}[2]{\footahref{http://xmpp.org/extensions/xep-#1.html}{#2}} \newcommand{\xepref}[1]{\txepref{#1}{XEP-#1}} \begin{document} @@ -175,19 +201,20 @@ ejabberd Development Team \setcounter{page}{2} \end{latexonly} +\label{toc} \tableofcontents{} % Input introduction.tex \input{introduction} -\chapter{Installing \ejabberd{}} +\makechapter{installing}{Installing \ejabberd{}} -\section{Installing \ejabberd{} with Binary Installer} +\makesection{install.binary}{Installing \ejabberd{} with Binary Installer} Probably the easiest way to install an \ejabberd{} instant messaging server -is using the binary installer published by Process-one. -The binary installers of released \ejabberd{} versions -are available in the Process-one \ejabberd{} downloads page: +is using the binary installer published by ProcessOne. +The binary installers of released \ejabberd{} versions +are available in the ProcessOne \ejabberd{} downloads page: \ahrefurl{http://www.process-one.net/en/ejabberd/downloads} The installer will deploy and configure a full featured \ejabberd{} @@ -195,8 +222,8 @@ server and does not require any extra dependencies. In *nix systems, remember to set executable the binary installer before starting it. For example: \begin{verbatim} - chmod +x ejabberd-2.0.0_1-linux-x86-installer.bin - ./ejabberd-2.0.0_1-linux-x86-installer.bin +chmod +x ejabberd-2.0.0_1-linux-x86-installer.bin +./ejabberd-2.0.0_1-linux-x86-installer.bin \end{verbatim} \ejabberd{} can be started manually at any time, @@ -204,29 +231,48 @@ or automatically by the operating system at system boot time. To start and stop \ejabberd{} manually, use the desktop shortcuts created by the installer. -If the machine doesn't have a graphical system, use the scripts 'start' +If the machine doesn't have a graphical system, use the scripts 'start' and 'stop' in the 'bin' directory where \ejabberd{} is installed. The Windows installer also adds ejabberd as a system service, and a shortcut to a debug console for experienced administrators. -If you want ejabberd to be started automatically at boot time, +If you want ejabberd to be started automatically at boot time, go to the Windows service settings and set ejabberd to be automatically started. -Note that the Windows service is a feature still in development, +Note that the Windows service is a feature still in development, and for example it doesn't read the file ejabberdctl.cfg. -On a *nix system, if you want ejabberd to be started as daemon at boot time, +On a *nix system, if you want ejabberd to be started as daemon at boot time, copy \term{ejabberd.init} from the 'bin' directory to something like \term{/etc/init.d/ejabberd} -(depending on your distribution) and call \term{/etc/inid.d/ejabberd start} to start it. +(depending on your distribution). +Create a system user called \term{ejabberd}; +it will be used by the script to start the server. +Then you can call \term{/etc/inid.d/ejabberd start} as root to start the server. + +If \term{ejabberd} doesn't start correctly in Windows, +try to start it using the shortcut in desktop or start menu. +If the window shows error 14001, the solution is to install: +"Microsoft Visual C++ 2005 SP1 Redistributable Package". +You can download it from +\footahref{http://www.microsoft.com/}{www.microsoft.com}. +Then uninstall \ejabberd{} and install it again. + +If \term{ejabberd} doesn't start correctly and a crash dump is generated, +there was a severe problem. +You can try starting \term{ejabberd} with +the script \term{bin/live.bat} in Windows, +or with the command \term{bin/ejabberdctl live} in other Operating Systems. +This way you see the error message provided by Erlang +and can identify what is exactly the problem. The \term{ejabberdctl} administration script is included in the \term{bin} directory. Please refer to the section~\ref{ejabberdctl} for details about \term{ejabberdctl}, and configurable options to fine tune the Erlang runtime system. -\section{Installing \ejabberd{} with Operating System specific packages} +\makesection{install.os}{Installing \ejabberd{} with Operating System Specific Packages} -Some Operating Systems provide a specific \ejabberd{} package adapted to +Some Operating Systems provide a specific \ejabberd{} package adapted to the system architecture and libraries. -It usually also checks dependencies +It usually also checks dependencies and performs basic configuration tasks like creating the initial administrator account. Some examples are Debian and Gentoo. Consult the resources provided by your Operating System for more information. @@ -234,7 +280,7 @@ resources provided by your Operating System for more information. Usually those packages create a script like \term{/etc/init.d/ejabberd} to start and stop \ejabberd{} as a service at boot time. -\section{Installing \ejabberd{} with CEAN} +\makesection{install.cean}{Installing \ejabberd{} with CEAN} \footahref{http://cean.process-one.net/}{CEAN} (Comprehensive Erlang Archive Network) is a repository that hosts binary @@ -243,20 +289,18 @@ The binaries are available for many different system architectures, so this is a alternative to the binary installer and Operating System's \ejabberd{} packages. You will have to create your own \ejabberd{} start -script depending of how you handle your CEAN installation. +script depending of how you handle your CEAN installation. The default \term{ejabberdctl} script is located into \ejabberd{}'s priv directory and can be used as an example. -\section{Installing \ejabberd{} from Source Code} -\label{installation} +\makesection{installation}{Installing \ejabberd{} from Source Code} \ind{install} The canonical form for distribution of \ejabberd{} stable releases is the source code package. -Compiling \ejabberd{} from source code is quite easy in *nix systems, +Compiling \ejabberd{} from source code is quite easy in *nix systems, as long as your system have all the dependencies. -\subsection{Requirements} -\label{installreq} +\makesubsection{installreq}{Requirements} \ind{installation!requirements} To compile \ejabberd{} on a `Unix-like' operating system, you need: @@ -264,142 +308,215 @@ To compile \ejabberd{} on a `Unix-like' operating system, you need: \item GNU Make \item GCC \item Libexpat 1.95 or higher -\item Erlang/OTP R10B-9 up to R11B-5. Erlang R12 releases are not yet officially supported, and are not recommended for production servers. +\item Erlang/OTP R10B-9 or higher. The recommended version is R12B-5. Support for R13 is experimental. \item OpenSSL 0.9.6 or higher, for STARTTLS, SASL and SSL encryption. Optional, highly recommended. \item Zlib 1.2.3 or higher, for Stream Compression support (\xepref{0138}). Optional. -\item GNU Iconv 1.8 or higher, for the IRC Transport (mod\_irc). Optional. Not needed on systems with GNU Libc. +\item Erlang mysql library. Optional. For MySQL authentication or storage. See section \ref{compilemysql}. +\item Erlang pgsql library. Optional. For PostgreSQL authentication or storage. See section \ref{compilepgsql}. +\item PAM library. Optional. For Pluggable Authentication Modules (PAM). See section \ref{pam}. +\item GNU Iconv 1.8 or higher, for the IRC Transport (mod\_irc). Optional. Not needed on systems with GNU Libc. See section \ref{modirc}. +\item ImageMagick's Convert program. Optional. For CAPTCHA challenges. See section \ref{captcha}. +\item exmpp 0.9.1 or higher. Optional. For import/export user data with \xepref{0227} XML files. \end{itemize} -\subsection{Download Source Code} -\label{download} +\makesubsection{download}{Download Source Code} \ind{install!download} -Released versions of \ejabberd{} are available in the Process-one \ejabberd{} downloads page: +Released versions of \ejabberd{} are available in the ProcessOne \ejabberd{} downloads page: \ahrefurl{http://www.process-one.net/en/ejabberd/downloads} \ind{Subversion repository} Alternatively, the latest development version can be retrieved from the Subversion repository using this command: \begin{verbatim} - svn co http://svn.process-one.net/ejabberd/trunk ejabberd +svn co http://svn.process-one.net/ejabberd/trunk ejabberd \end{verbatim} -\subsection{Compile} -\label{compile} +\makesubsection{compile}{Compile} \ind{install!compile} To compile \ejabberd{} execute the commands: \begin{verbatim} - ./configure - make +./configure +make \end{verbatim} -The build configuration script provides several parameters. +The build configuration script allows several options. To get the full list run the command: \begin{verbatim} - ./configure --help +./configure --help \end{verbatim} Some options that you may be interested in modifying: \begin{description} - \titem{--prefix=/} - Specify the path prefix where the files will be copied when running the make install command. + \titem{--prefix=/} + Specify the path prefix where the files will be copied when running + the \term{make install} command. - \titem{--enable-pam} - Enable the PAM authentication method. + \titem{--enable-user[=USER]} + Allow this normal system user to execute the ejabberdctl script + (see section~\ref{ejabberdctl}), + read the configuration files, + read and write in the spool directory, + read and write in the log directory. + The account user and group must exist in the machine + before running \term{make install}. + This account doesn't need an explicit HOME directory, because + \term{/var/lib/ejabberd/} will be used by default. + + \titem{--enable-pam} + Enable the PAM authentication method (see section \ref{pam}). \titem{--enable-odbc or --enable-mssql} Required if you want to use an external database. See section~\ref{database} for more information. - \titem{--enable-full-xml} + \titem{--enable-full-xml} Enable the use of XML based optimisations. - It will for example use CDATA to escape characters in the XMPP stream. - Use this option only if you are sure your Jabber clients include a fully compliant XML parser. + It will for example use CDATA to escape characters in the XMPP stream. + Use this option only if you are sure your XMPP clients include a fully compliant XML parser. \titem{--disable-transient-supervisors} - Disable the use of Erlang/OTP supervision for transient processes. + Disable the use of Erlang/OTP supervision for transient processes. \end{description} +\makesubsection{snowleopard}{Compiling ejabberd under Snow Leopard with Erlang R13B} +\ind{install!snowleopard} -\subsection{Install} -\label{install} +Erl Interface, the library to link Erlang with C code, is compiled as +32-bits code in Erlang R13B-2. Mac OS X Snow Leopard is a 64-bits +system and will try compiling ejabberd C code in 64-bits as a default. + +To compile ejabberd on Mac OS X Snow Leopard with Erlang R13B-2, you +need to force C code to be compiled with 32-bits. This is done with +the following configure command: + +\begin{verbatim} +CC='gcc -m32' CFLAGS=-m32 LDFLAGS=-m32 ./configure +\end{verbatim} + +\makesubsection{install}{Install} \ind{install!install} To install \ejabberd{} in the destination directories, run the command: \begin{verbatim} - make install +make install \end{verbatim} -Note that you may need to have administrative privileges in the system. +Note that you probably need administrative privileges in the system +to install \term{ejabberd}. The files and directories created are, by default: \begin{description} - \titem{/etc/ejabberd/} Configuration files: + \titem{/etc/ejabberd/} Configuration directory: \begin{description} \titem{ejabberd.cfg} ejabberd configuration file \titem{ejabberdctl.cfg} Configuration file of the administration script - \titem{inetrc} Network DNS configuration + \titem{inetrc} Network DNS configuration file \end{description} - \titem{/sbin/ejabberdctl} Administration script - \titem{/var/lib/ejabberd/} + \titem{/lib/ejabberd/} \begin{description} - \titem{.erlang.cookie} Erlang cookie file - \titem{db} Mnesia database spool files - \titem{ebin} Binary Erlang files (*.beam) - \titem{priv} + \titem{ebin/} Erlang binary files (*.beam) + \titem{include/} Erlang header files (*.hrl) + \titem{priv/} Additional files required at runtime \begin{description} - \titem{lib} Binary system libraries (*.so) - \titem{msgs} Translated strings (*.msgs) + \titem{bin/} Executable programs + \titem{lib/} Binary system libraries (*.so) + \titem{msgs/} Translation files (*.msgs) \end{description} \end{description} - \titem{/var/log/ejabberd/} Log files (see section~\ref{logfiles}): + \titem{/sbin/ejabberdctl} Administration script (see section~\ref{ejabberdctl}) + \titem{/share/doc/ejabberd/} Documentation of ejabberd + \titem{/var/lib/ejabberd/} Spool directory: + \begin{description} + \titem{.erlang.cookie} Erlang cookie file (see section \ref{cookie}) + \titem{acl.DCD, ...} Mnesia database spool files (*.DCD, *.DCL, *.DAT) + \end{description} + \titem{/var/log/ejabberd/} Log directory (see section~\ref{logfiles}): \begin{description} \titem{ejabberd.log} ejabberd service log - \titem{sasl.log} Erlang/OTP system log + \titem{erlang.log} Erlang/OTP system log \end{description} \end{description} -\subsection{Start} -\label{start} +\makesubsection{start}{Start} \ind{install!start} You can use the \term{ejabberdctl} command line administration script to start and stop \ejabberd{}. +If you provided the configure option \term{--enable-user=USER} (see \ref{compile}), +you can execute \term{ejabberdctl} with either that system account or root. Usage example: \begin{verbatim} -$ ejabberdctl start +ejabberdctl start -$ ejabberdctl status -Node ejabberd@localhost is started. Status: started -ejabberd is running +ejabberdctl status +The node ejabberd@localhost is started with status: started +ejabberd is running in that node -$ ejabberdctl stop +ejabberdctl stop \end{verbatim} + +If \term{ejabberd} doesn't start correctly and a crash dump is generated, +there was a severe problem. +You can try starting \term{ejabberd} with +the command \term{ejabberdctl live} +to see the error message provided by Erlang +and can identify what is exactly the problem. + Please refer to the section~\ref{ejabberdctl} for details about \term{ejabberdctl}, and configurable options to fine tune the Erlang runtime system. -\subsection{Specific Notes for BSD} -\label{bsd} +If you want ejabberd to be started as daemon at boot time, +copy \term{ejabberd.init} to something like \term{/etc/init.d/ejabberd} +(depending on your distribution). +Create a system user called \term{ejabberd}; +it will be used by the script to start the server. +Then you can call \term{/etc/inid.d/ejabberd start} as root to start the server. + +\makesubsection{bsd}{Specific Notes for BSD} \ind{install!bsd} The command to compile \ejabberd{} in BSD systems is: \begin{verbatim} - gmake +gmake \end{verbatim} -\subsection{Specific Notes for Microsoft Windows} -\label{windows} +\makesubsection{solaris}{Specific Notes for Sun Solaris} +\ind{install!solaris} + +You need to have \term{GNU install}, +but it isn't included in Solaris. +It can be easily installed if your Solaris system +is set up for \footahref{http://www.blastwave.org/}{blastwave.org} +package repository. +Make sure \term{/opt/csw/bin} is in your \term{PATH} and run: +\begin{verbatim} +pkg-get -i fileutils +\end{verbatim} + +If that program is called \term{ginstall}, +modify the \ejabberd{} \term{Makefile} script to suit your system, +for example: +\begin{verbatim} +cat Makefile | sed s/install/ginstall/ > Makefile.gi +\end{verbatim} +And finally install \ejabberd{} with: +\begin{verbatim} +gmake -f Makefile.gi ginstall +\end{verbatim} + + +\makesubsection{windows}{Specific Notes for Microsoft Windows} \ind{install!windows} -\subsubsection{Requirements} -\label{windowsreq} +\makesubsubsection{windowsreq}{Requirements} To compile \ejabberd{} on a Microsoft Windows system, you need: \begin{itemize} \item MS Visual C++ 6.0 Compiler -\item \footahref{http://erlang.org/download.html}{Erlang/OTP R11B-5} +\item \footahref{http://www.erlang.org/download.html}{Erlang/OTP R11B-5} \item \footahref{http://sourceforge.net/project/showfiles.php?group\_id=10127\&package\_id=11277}{Expat 2.0.0 or higher} \item \footahref{http://www.gnu.org/software/libiconv/}{GNU Iconv 1.9.2} @@ -410,8 +527,7 @@ To compile \ejabberd{} on a Microsoft Windows system, you need: \end{itemize} -\subsubsection{Compilation} -\label{windowscom} +\makesubsubsection{windowscom}{Compilation} We assume that we will try to put as much library as possible into \verb|C:\sdk\| to make it easier to track what is install for \ejabberd{}. @@ -436,9 +552,9 @@ We assume that we will try to put as much library as possible into \verb|C:\sdk\ \verb|C:\sdk\GnuWin32\bin| to the \verb|PATH| environment variable. \item Install OpenSSL in \verb|C:\sdk\OpenSSL| and add \verb|C:\sdk\OpenSSL\lib\VC| to your path or copy the binaries to your system directory. -\item Install ZLib in \verb|C:\sdk\gnuWin32|. Copy - \verb|C:\sdk\GnuWin32\bin\zlib1.dll| to your system directory. If you change your path it should already be set after libiconv install. -\item Make sure the you can access Erlang binaries from your path. For example: \verb|set PATH=%PATH%;"C:\sdk\erl5.5.5\bin"| +\item Install ZLib in \verb|C:\sdk\gnuWin32|. Copy + \verb|C:\sdk\GnuWin32\bin\zlib1.dll| to your system directory. If you change your path it should already be set after libiconv install. +\item Make sure the you can access Erlang binaries from your path. For example: \verb|set PATH=%PATH%;"C:\sdk\erl5.6.5\bin"| \item Depending on how you end up actually installing the library you might need to check and tweak the paths in the file configure.erl. \item While in the directory \verb|ejabberd\src| run: \begin{verbatim} @@ -454,28 +570,27 @@ werl -s ejabberd -name ejabberd %TODO: how to compile database support on windows? -\section{Create a Jabber Account for Administration} -\label{initialadmin} +\makesection{initialadmin}{Create a XMPP Account for Administration} -You need a Jabber account and grant him administrative privileges +You need a XMPP account and grant him administrative privileges to enter the \ejabberd{} Web Admin: \begin{enumerate} -\item Register a Jabber account on your \ejabberd{} server, for example \term{admin1@example.org}. - There are two ways to register a Jabber account: +\item Register a XMPP account on your \ejabberd{} server, for example \term{admin1@example.org}. + There are two ways to register a XMPP account: \begin{enumerate} \item Using \term{ejabberdctl}\ind{ejabberdctl} (see section~\ref{ejabberdctl}): - \begin{verbatim} -% ejabberdctl register admin1 example.org FgT5bk3 -\end{verbatim} - \item Using a Jabber client and In-Band Registration (see section~\ref{modregister}). +\begin{verbatim} +ejabberdctl register admin1 example.org FgT5bk3 +\end{verbatim} + \item Using a XMPP client and In-Band Registration (see section~\ref{modregister}). \end{enumerate} -\item Edit the \ejabberd{} configuration file to give administration rights to the Jabber account you created: - \begin{verbatim} - {acl, admins, {user, "admin1", "example.org"}}. - {access, configure, [{allow, admins}]}. -\end{verbatim} - You can grant administrative privileges to many Jabber accounts, - and also to accounts in other Jabber servers. +\item Edit the \ejabberd{} configuration file to give administration rights to the XMPP account you created: +\begin{verbatim} +{acl, admins, {user, "admin1", "example.org"}}. +{access, configure, [{allow, admins}]}. +\end{verbatim} + You can grant administrative privileges to many XMPP accounts, + and also to accounts in other XMPP servers. \item Restart \ejabberd{} to load the new configuration. \item Open the Web Admin (\verb|http://server:port/admin/|) in your favourite browser. Make sure to enter the \emph{full} JID as username (in this @@ -483,11 +598,11 @@ to enter the \ejabberd{} Web Admin: suffix, is because \ejabberd{}'s virtual hosting support. \end{enumerate} -\section{Upgrading \ejabberd{}} +\makesection{upgrade}{Upgrading \ejabberd{}} To upgrade an ejabberd installation to a new version, simply uninstall the old version, and then install the new one. -Of course, it is important that the configuration file +Of course, it is important that the configuration file and Mnesia database spool directory are not removed. \ejabberd{} automatically updates the Mnesia table definitions at startup when needed. @@ -496,17 +611,17 @@ check if the release notes of the new ejabberd version indicates you need to also update those tables. -\chapter{Configuring \ejabberd{}} -\section{Basic Configuration} -\label{basicconfig} +\makechapter{configure}{Configuring \ejabberd{}} \ind{configuration file} +\makesection{basicconfig}{Basic Configuration} + The configuration file will be loaded the first time you start \ejabberd{}. The content from this file will be parsed and stored in the internal \ejabberd{} database. Subsequently the configuration will be loaded from the database and any commands in the -configuration file are appended to the entries in the database. +configuration file are appended to the entries in the database. -Note that \ejabberd{} never edits the configuration file. +Note that \ejabberd{} never edits the configuration file. So, the configuration changes done using the Web Admin are stored in the database, but are not reflected in the configuration file. If you want those changes to be use after \ejabberd{} restart, you can either @@ -520,50 +635,45 @@ host name(s) stored in the database will be used. You can override the old values stored in the database by adding next lines to -the configuration file: +the beginning of the configuration file: \begin{verbatim} - override_global. - override_local. - override_acls. +override_global. +override_local. +override_acls. \end{verbatim} With these lines the old global options (shared between all \ejabberd{} nodes in a cluster), local options (which are specific for this particular \ejabberd{} node) and ACLs will be removed before new ones are added. -\subsection{Host Names} -\label{hostnames} +\makesubsection{hostnames}{Host Names} \ind{options!hosts}\ind{host names} The option \option{hosts} defines a list containing one or more domains that \ejabberd{} will serve. +The syntax is: +\esyntax{\{hosts, [HostName, ...]\}.} + Examples: \begin{itemize} \item Serving one domain: - \begin{verbatim} - {hosts, ["example.org"]}. -\end{verbatim} -\item Serving one domain, and backwards compatible with older \ejabberd{} - versions: - \begin{verbatim} - {host, "example.org"}. -\end{verbatim} -\item Serving two domains: \begin{verbatim} - {hosts, ["example.net", "example.com"]}. +{hosts, ["example.org"]}. +\end{verbatim} +\item Serving three domains: +\begin{verbatim} +{hosts, ["example.net", "example.com", "jabber.somesite.org"]}. \end{verbatim} \end{itemize} -\subsection{Virtual Hosting} -\label{virtualhost} +\makesubsection{virtualhost}{Virtual Hosting} \ind{virtual hosting}\ind{virtual hosts}\ind{virtual domains} Options can be defined separately for every virtual host using the -\term{host\_config} option.\ind{options!host\_config} It has the following -syntax: -\begin{verbatim} - {host_config, , [