Compare commits

...

491 Commits

Author SHA1 Message Date
Badlop 543404bcb8 Fixing minor typos in CHANGELOG
Container / Container (push) Failing after 2m8s
Installers / Binaries (push) Failing after 53s
Runtime / Rebars (20.3, rebar) (push) Failing after 2s
Runtime / Rebars (20.3, rebar3) (push) Failing after 3s
Runtime / Rebars (25.3, rebar) (push) Failing after 2s
Runtime / Rebars (25.3, rebar3) (push) Failing after 2s
Runtime / Rebars (26, rebar3) (push) Failing after 3s
Installers / Release (push) Has been skipped
CI / Tests (20.0) (push) Has been cancelled
CI / Tests (25.3) (push) Has been cancelled
CI / Tests (26.1) (push) Has been cancelled
Runtime / Mix (1.10.3, 21.3) (push) Has been cancelled
Runtime / Mix (1.11.4, 21.3) (push) Has been cancelled
Runtime / Mix (1.13.4, 25.0) (push) Has been cancelled
Runtime / Mix (1.14.5, 25.0) (push) Has been cancelled
Runtime / Mix (1.14.5, 26) (push) Has been cancelled
Runtime / Mix (1.15, 25.0) (push) Has been cancelled
Runtime / Mix (1.15, 26) (push) Has been cancelled
2023-10-17 15:57:50 +02:00
Badlop b7166d7da0 Set version to 23.10 2023-10-17 15:31:32 +02:00
Badlop cf54608c71 Update changelog 2023-10-17 15:29:20 +02:00
Alexey Shchepin ec20691188 Disable update_sql_schema by default 2023-10-16 19:31:32 +03:00
Alexey Shchepin c1af36ac20 Automatically create and update SQL schema 2023-10-16 18:21:08 +03:00
Alexey Shchepin f6e8eb52f0 Fix ejabberd_sql:sql_query* types 2023-10-16 18:21:08 +03:00
Paweł Chmielowski ad7db90c80 Use tagged deps 2023-10-16 15:14:31 +02:00
Holger Weiss cbfb8eb805 Example configuration: Specify s2s shaper
Specify a shaper for incoming s2s connections (got lost in commit
91a74e3e27).

Thanks to Paul Menzel for noting that it was missing.
2023-10-16 14:44:01 +02:00
Holger Weiss df60818883 Example configuration: Clarify direct TLS listener
The ejabberd_c2s listener for port 5223 is meant to support direct TLS
access rather than STARTTLS.  Therefore, remove the 'starttls_required'
option, which had no effect.
2023-10-16 14:32:38 +02:00
Badlop d5de93b8fa Update other translations 2023-10-16 11:28:51 +02:00
Badlop ab6da9530d Update Ukrainian translation (thanks to Олександр Кревський) 2023-10-16 11:28:29 +02:00
Badlop ca82376657 Update man page 2023-10-16 11:18:59 +02:00
Badlop 87f18aa8d7 Result of running: make doap options 2023-10-16 11:09:13 +02:00
Badlop 6340d61397 Dcoument ejabberd version number in the new options 2023-10-16 10:58:59 +02:00
Badlop 80d1e36542 mod_private: Document that it supports XEP-0402 now 2023-10-16 10:56:15 +02:00
Paweł Chmielowski f75909db4c Allow pubsub node owner to overwrite items published by other persons
Owner is already permitted to delete those items, so it could do that by
deleting old item, and publishing it again, so i don't see reason to not
allow that overwrite.
2023-10-12 13:16:32 +02:00
Paweł Chmielowski 12d47455ba Add auth_external_user_exists_check option
This makes `user_check` hook work better with authentication methods
that don't have a way to determine if user exists (like is the case for
jwt and cert based authentication), and as result will improve mod_offline
and mod_mam handling of offline messages to those users. This reuses
information stored by `mod_last` for this purpose.

Should fix issue #3377.
2023-10-11 14:17:18 +02:00
Badlop 9acf591242 Run 'make translations' 2023-10-11 01:17:27 +02:00
Badlop bab8673055 Update Portuguese (Brazil) translation (thanks to Wellington Uemura) 2023-10-11 01:17:24 +02:00
Badlop 3851a77134 Update German translation (thanks to nautilusx) 2023-10-11 01:17:21 +02:00
Badlop 8e324e67a4 New Bulgarian translation (thanks to Mr. EddX) 2023-10-11 01:13:49 +02:00
Badlop 10245b40ee Add support to register nick in a room (#3455)
Registering a nick in the MUC service or in a room is mutually exclusive:
- A nick that is registered in the service cannot be registered in any
  room, not even the original owner can register it.
- Similarly, a nick registered in any room cannot be registered in the
  service.
2023-10-10 13:08:56 +02:00
Badlop 9534ca2da1 ext_mod: Support when git repository name is not identical to the module name
For example, ejabberd-contrib has an extra module, mod_prometheus,
that is hosted in a git repository named ejabberd-prometheus-exporter
2023-10-04 20:57:02 +02:00
Badlop f9d11265d0 ext_mod: Don't crash when github page response is 403 2023-10-04 20:55:01 +02:00
Badlop d85c125bef ext_mod: Use the same URL that ejabberd-contrib spec files 2023-10-04 20:54:49 +02:00
Paweł Chmielowski 62d3d7a32d Relay pubsub iq queries to muc members without using bare jid
We do something similar for vcard queries, this allows target server
to respond to those queries by target server, which is what we want to
do in both of those cases.
2023-10-04 17:20:20 +02:00
Holger Weiss a3f4a05b0c make-binaries: Don't use non-prefixed cross tools
Omit the directory that contains cross compilation tools without
"$target-" prefix from the PATH.  Having it in the path might lead to
problems when native tools are needed during cross compilation.  For
actual cross compilation, the prefixed tools should always be used
anyway.
2023-10-03 17:56:27 +02:00
Paweł Chmielowski 86465c418d Try to fill xep-0402 bookmarks from private storage on first access 2023-10-02 14:39:30 +02:00
Paweł Chmielowski a63d3bf0d6 Fix crash in mod_private bookmarks converter
This should fix issue reported in #4092
2023-10-02 08:32:24 +02:00
Holger Weiss 762e4951f2 make-binaries: Bump Erlang/OTP version to 26.1.1 2023-09-29 19:01:50 +02:00
Holger Weiss d4fc54be18 make-binaries: Let curl fail on HTTP errors 2023-09-29 17:33:09 +02:00
Holger Weiss f327f4cc67 make-binaries: Suppress curl's info messages 2023-09-29 17:32:17 +02:00
Paweł Chmielowski 9ba645503b Fix dialyzer warning 2023-09-27 23:02:32 +02:00
badlop 5406693a1e Merge pull request #4079 from sando38/fix/Dockerfile-odbc
Dockerfile: add missing dependency for mssql databases
2023-09-27 21:10:16 +02:00
Paweł Chmielowski d55955f7d8 Clean also urn:xmpp:bookmarks:1 after mod_private tests 2023-09-27 19:38:14 +02:00
Paweł Chmielowski 765770aaa5 Add support for xep-0402 - PEP Native Bookmarks 2023-09-27 18:36:30 +02:00
Paweł Chmielowski c3e0b746d7 Add pubsub_delete_item hook 2023-09-27 18:30:17 +02:00
Paweł Chmielowski accb0bc35a Report support of config-node-max in pep 2023-09-27 18:29:56 +02:00
Holger Weiss b16530bb6a make-binaries: Bump dependency versions 2023-09-27 00:28:46 +02:00
Holger Weiss ad00553bf8 make-binaries: Bump Erlang/OTP version to 26.1 2023-09-27 00:17:30 +02:00
Holger Weiss b70bef77cb make-binaries: Bump crosstool-NG version to 1.26.0 2023-09-26 23:55:01 +02:00
Holger Weiss ac47b7b8cb ejabberd_web_admin: Make text translatable
This also fixes a type issue.
2023-09-26 23:21:45 +02:00
Badlop abe0817553 Mention what software versions are used to build the container image 2023-09-26 18:51:57 +02:00
Badlop ab431b378a WebAdmin: Show a warning when visiting webadmin with non-privileged account (4089) 2023-09-26 18:51:56 +02:00
Badlop a534196315 Fix unused variable, forgotten in the recent commit 739a231 2023-09-26 18:51:51 +02:00
Badlop cd421f98d7 ejabberdctl: Document how to stop a debug shell: control+g
control+g is the correct way to enter shell break mode, as documented in
https://www.erlang.org/doc/apps/erts/tty

The ejabberdctl script included in installers use the included VT100,
and that may break when hitting control+c.
In that scenario let's explicitly recommend to not use control+c.

Thanks to Holger Weiß for the report.
2023-09-26 18:51:47 +02:00
badlop b33d660f88 Merge pull request #4088 from badlop/get-roster-command
Improve get_roster command result: show groups as a list
2023-09-25 13:15:26 +02:00
Badlop 245c9ae446 ejabberd_ctl: Support policy=user in the help and return proper arguments 2023-09-21 13:47:07 +02:00
Badlop 8d39431d68 ejabberd_ctl: Improve printing lists in results
When formatting the results of a command:
- If the top of the result is a list, split elements with newline as usual
- If it's a list in one of the resulting lines, split elements with ;
2023-09-21 13:47:05 +02:00
Badlop 739a231259 Improve get_roster command to return groups in a list instead of newlines 2023-09-21 13:47:00 +02:00
Paweł Chmielowski 426fd14b11 Make sure that policy=user commands have host instead of server arg in docs
We renamed them in ejabberd_command, but forgot to update doc geenerator.
2023-09-20 14:06:23 +02:00
dependabot[bot] 4735372682 Bump docker/build-push-action from 4 to 5
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 4 to 5.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/v4...v5)

---
updated-dependencies:
- dependency-name: docker/build-push-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-18 11:05:15 +02:00
dependabot[bot] 4b3fa13163 Bump docker/setup-buildx-action from 2 to 3
Bumps [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) from 2 to 3.
- [Release notes](https://github.com/docker/setup-buildx-action/releases)
- [Commits](https://github.com/docker/setup-buildx-action/compare/v2...v3)

---
updated-dependencies:
- dependency-name: docker/setup-buildx-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-18 11:05:15 +02:00
dependabot[bot] d40250c3d6 Bump docker/setup-qemu-action from 2 to 3
Bumps [docker/setup-qemu-action](https://github.com/docker/setup-qemu-action) from 2 to 3.
- [Release notes](https://github.com/docker/setup-qemu-action/releases)
- [Commits](https://github.com/docker/setup-qemu-action/compare/v2...v3)

---
updated-dependencies:
- dependency-name: docker/setup-qemu-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-18 11:05:15 +02:00
dependabot[bot] 7d2cfd2aaa Bump docker/metadata-action from 4 to 5
Bumps [docker/metadata-action](https://github.com/docker/metadata-action) from 4 to 5.
- [Release notes](https://github.com/docker/metadata-action/releases)
- [Upgrade guide](https://github.com/docker/metadata-action/blob/master/UPGRADE.md)
- [Commits](https://github.com/docker/metadata-action/compare/v4...v5)

---
updated-dependencies:
- dependency-name: docker/metadata-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-18 11:05:14 +02:00
dependabot[bot] 11fdd417dd Bump docker/login-action from 2 to 3
Bumps [docker/login-action](https://github.com/docker/login-action) from 2 to 3.
- [Release notes](https://github.com/docker/login-action/releases)
- [Commits](https://github.com/docker/login-action/compare/v2...v3)

---
updated-dependencies:
- dependency-name: docker/login-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-18 11:05:14 +02:00
dependabot[bot] 1b7b23fab6 Bump actions/checkout from 3 to 4
Bumps [actions/checkout](https://github.com/actions/checkout) from 3 to 4.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v3...v4)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-18 11:05:14 +02:00
dependabot[bot] 10882af7c8 Bump ex_doc from 0.30.5 to 0.30.6
Bumps [ex_doc](https://github.com/elixir-lang/ex_doc) from 0.30.5 to 0.30.6.
- [Changelog](https://github.com/elixir-lang/ex_doc/blob/main/CHANGELOG.md)
- [Commits](https://github.com/elixir-lang/ex_doc/compare/v0.30.5...v0.30.6)

---
updated-dependencies:
- dependency-name: ex_doc
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-18 11:05:14 +02:00
Holger Weiss 6c573cc9fd mod_push: Set 'last-message-sender' to bare JID
If the mod_push option 'include_sender' is set to 'true', use the bare
JID rather than the full JID for the 'last-message-sender' field.
2023-09-09 17:33:16 +02:00
Holger Weiss 2782430887 mod_push: Add 'notify_on' option
If the new 'notify_on' option is set to 'messages', notifications are
only triggered by actual chat messages with a body (or encrypted
payload).  The default behavior remains to generate a notification on
any kind of stanzas.

Thanks to EISST International Ltd for sponsoring this work.
2023-09-08 19:49:17 +02:00
Badlop 7522c29f25 Update xmpp version to send roomconfig_changesubject in disco info (#4085) 2023-09-08 18:37:38 +02:00
Badlop 706424f0d2 Fix crash when loading room from DB older than ffa07c6, 23.04
Before commit ffa07c6, the subject_author was just the author nick,
since that commit, subject_author contains {author nick, JID}.
2023-09-04 11:32:28 +02:00
Badlop 57d404a99b Remove mailing list link, it had no activity and was removed long ago 2023-09-04 11:32:07 +02:00
Badlop 19e2e169b1 Let "ejabberdctl etop" work in a release (if observer is available) 2023-08-28 18:27:30 +02:00
Badlop 2a6ea79260 When building OTP release with mix, keep ERLANG_NODE=ejabberd@localhost
This updates the mix.exs code from commit 8ca12d4 (ejabberd 21.07)
Consequently, no need in make-binaries to update ERLANG_NODE.
The ecs docker image 23.04 got a similar change in
  https://github.com/processone/docker-ejabberd/pull/73/commits/f81905d5e315d2eb813a715b51d4a8351a7d4e6b
2023-08-28 18:27:23 +02:00
Badlop 40333066d6 Update syntax of function calls as recommended by Elixir compiler 2023-08-28 18:26:55 +02:00
Badlop 6d596063de Elixir 1.15 removed support for --app
Removing that argument does not affect iexlive at all

For reference:
https://github.com/elixir-lang/elixir/commit/e1eecb8ca698712f5cff76f52ff49b381ce64aa9
2023-08-28 18:26:55 +02:00
Badlop a7c3c9b77d Pass ERLANG_OPTS when calling erl to parse the INET_DIST_INTERFACE (#4066)
This is required when running ejabberdctl in binary installers
and INET_DIST_INTERFACE was configured, because some boot files were removed
2023-08-28 18:26:48 +02:00
Badlop a01de8d944 Fix small bug introduced in 5d549dc
When providing a client-id as explained in
  https://www.process-one.net/blog/understanding-ejabberd-oauth-support-roadmap/
ejabberd crashed with an error
  exception error: no function clause matching
  ejabberd_oauth:get_client_identity(
as reported in
  https://stackoverflow.com/questions/76922951/ejabberd-oauth-api-http-1-1-502-bad-gateway
2023-08-28 18:26:03 +02:00
Paweł Chmielowski c0e7774937 Don't always store messages passed through muc_filter_message
Recently we added new places where we call muc_filter_message to add
occupandid info to messages, but this also made them be stored in archive
as mod_mam uses that hook for getting sent messages - in case of those
messages we shouldn't be doing this.

This should fix issue #4083
2023-08-25 14:20:51 +02:00
Paweł Chmielowski 00c76003cb Add ability to force alternative upsert implementation in mysql 2023-08-18 11:46:37 +02:00
Badlop b29f87a978 Result of running: make doap options 2023-08-16 13:14:02 +02:00
Holger Weiss 2dc843cddd mod_privilege: Don't fail to edit roster (#3942) 2023-08-16 13:08:21 +02:00
dependabot[bot] 9f08b4aa15 Bump ex_doc from 0.30.1 to 0.30.5
Bumps [ex_doc](https://github.com/elixir-lang/ex_doc) from 0.30.1 to 0.30.5.
- [Changelog](https://github.com/elixir-lang/ex_doc/blob/main/CHANGELOG.md)
- [Commits](https://github.com/elixir-lang/ex_doc/compare/v0.30.1...v0.30.5)

---
updated-dependencies:
- dependency-name: ex_doc
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-16 12:27:23 +02:00
Badlop a84fbd6a74 Improve syntax of many command descriptions for the Docs site 2023-08-16 12:27:23 +02:00
Badlop f8af3a0005 create_room_with_opts: fix typo and move examples to args_example (#4080) 2023-08-16 12:27:23 +02:00
Badlop 83e51c815d Pass also MUC room retract messages over the muc_filter_message (#3397) 2023-08-16 12:27:23 +02:00
Badlop ff24700156 Fix support to retract a MUC room message
Now this works as expected
https://xmpp.org/extensions/xep-0425.html#example-4
2023-08-16 12:27:22 +02:00
Badlop 7683691f5a mod_muc_occupantid: New mnesia table to store rooms salts (#3397) 2023-08-16 12:27:22 +02:00
Badlop 3479f88dab Pass MUC room private messages over the muc_filter_message too (#3397) 2023-08-16 12:27:22 +02:00
Badlop 86fc2f157e Always add the occupant id, even in non-anonymous rooms (#3397) 2023-08-16 12:27:22 +02:00
Badlop ffa07c649b Store the subject author JID, and run muc_filter_message when sending subject (#3397)
When changing the room subject, store the original author JID,
so later it can be provided in the hook and mod_room_occupantid
can use it to calculate and provide the occupant id

This is noticeable when a new occupant joins an existing room,
and receives the room subject.
2023-08-16 12:27:22 +02:00
Badlop 2bd61abd71 Convert allow_private_message MUC room option to allowpm (#3736) 2023-08-16 12:25:46 +02:00
Badlop 66df953da1 Fix usage of plugins option, which produced default_node_config ignore (#4070) 2023-08-16 12:25:42 +02:00
Badlop 550a586d2a New listener option unix_socket, useful when setting unix socket files (#4059)
listen:
  -
    port: "unix://tmp/asd/socket"
    unix_socket:
      mode: '0775'
      owner: 117
      group: 135
2023-08-16 12:25:36 +02:00
Badlop 16473ab691 When sending message on behalf of user, trigger user_send_packet (#3990)
This way, MAM and CarbonCopy get triggered.
This is useful for transports like Slidge.
2023-08-16 12:25:29 +02:00
Paweł Chmielowski c5afd0322e Properly parse mysql version even if it doesn't have type tag 2023-08-14 17:12:16 +02:00
sando38 c4563c429c Dockerfile: add missing dependency for mssql databases 2023-08-12 14:46:30 +02:00
Alexey Shchepin eeacace02a Update some modules to the new gen_mod API 2023-08-09 17:08:45 +03:00
Holger Weiss caf3807bcc ejabberd_systemd: Add a few debug messages 2023-08-09 01:58:48 +02:00
Holger Weiss 6c7e85d3d8 ejabberd_systemd: Avoid using gen_server timeout
Don't (ab)use the gen_server timeout mechanism for pinging the systemd
watchdog.  Under certain conditions (e.g., the process receiving sys
messages), the gen_server timeout might not be triggered as expected.

Fixes #4054, fixes #4058,
2023-08-09 01:54:12 +02:00
Holger Weiss f0db7623d1 mod_push_keepalive: Don't let hook crash
Check whether mod_push_keepalive is loaded for a given host before
querying the module configuration for that host.  This avoids a hook
crash in the case where the module is enabled for some but not all
hosts.
2023-08-09 00:11:43 +02:00
Holger Weiss 26ed6539ba mod_push_keepalive: Delay 'wake_on_start'
Delay the 'wake_on_start' notifications until ejabberd is fully
initialized.  This makes sure no s2s connections are initiated before
certificates are loaded.

Many thanks to Friedrich Altheide for reporting the issue.
2023-08-08 20:17:10 +02:00
Alexey Shchepin a9347cd248 Fix unused variable warnings in mod_stats 2023-08-04 20:54:02 +03:00
Alexey Shchepin 60002fc145 Update some modules to the new gen_mod API 2023-08-04 18:53:50 +03:00
Paweł Chmielowski 20a8654be2 Reset scram fields when setting plain password in ejabberd_auth_sql
Setting scram password, then disabling scram and setting plain password
again, will make us think we are still using scramed password and crash
when trying to process it as such. This makes sure that when set plain
password we don't leave parts from old scram password.
2023-08-03 13:07:13 +02:00
Badlop 25411333da Add support for XEP-0421 Occupant Id in anonymous MUC rooms (#3397) 2023-08-02 17:54:54 +02:00
Badlop 07d4282603 Update XMPP library which supports XEP-0421 (3397) 2023-08-02 17:54:07 +02:00
Alexey Shchepin 4bd77797fc Add shorter forms for gen_mod hook/iq_handler API 2023-08-01 18:14:08 +03:00
Alexey Shchepin 03ffbe00c1 Update mod_disco to the new gen_mod API 2023-07-31 16:52:00 +03:00
Alexey Shchepin 5a9099f49c Extend gen_mod API to simplify hooks and IQ handlers registration 2023-07-31 16:52:00 +03:00
Badlop b501ee2b8d Remove obsolete example files, and add link in Docs to the archived copies 2023-07-27 14:03:40 +02:00
Badlop a7c3368635 Move example Perl extauth script from ejabberd git to Docs site 2023-07-27 14:03:37 +02:00
Paweł Chmielowski 84ee724aa3 Fix dialyzer warning 2023-07-25 18:49:45 +02:00
Paweł Chmielowski da7fe59834 Commit changes to ejabberd_sql.hrl as well 2023-07-25 18:24:24 +02:00
Paweł Chmielowski 3710dc1e3b Use prepared statement with mysql 2023-07-25 18:11:24 +02:00
Badlop db03c7428c Web Admin roster page: move the AddJID textbox to top (#4067) 2023-07-24 20:27:01 +02:00
Badlop 9c6fe98f76 Partially revert "Improve ejabberdctl script: Copy recent commit 6272c0e90 to the container"
This reverts commit e66ba2e424
following the revert in commit 8288774787
2023-07-24 20:26:37 +02:00
Holger Weiss c03af0afb3 make-binaries: Remove outdated workaround
Remove a workaround for an issue that has been fixed in Erlang/OTP 25:

https://github.com/erlang/otp/pull/5558
2023-07-24 00:11:32 +02:00
Holger Weiss d109d7f0c5 make-binaries: Revert to Linux-PAM 1.5.2
Linux-PAM's --disable-examples flag doesn't seem to have the expected
effect.
2023-07-23 16:34:21 +02:00
Holger Weiss bf9b257eab make-binaries: Don't build Linux-PAM examples
Building the examples shipped with Linux-PAM 1.5.3 fails with musl libc:

https://github.com/linux-pam/linux-pam/commit/5374f677e4cae669eb9accf2449178b602e8a40a
2023-07-23 16:08:25 +02:00
Holger Weiss 11dc0c1774 make-binaries: Bump dependency versions 2023-07-23 15:52:32 +02:00
Holger Weiss 0a5eda0777 make-binaries: Fix check for current Expat version 2023-07-23 15:51:27 +02:00
Holger Weiss a657a6d2f6 make-binaries: Apply another minor simplification 2023-07-23 15:35:09 +02:00
Holger Weiss 121acd1da7 make-binaries: Apply minor simplifications 2023-07-23 15:06:40 +02:00
Holger Weiss ec86079747 make-binaries: Don't duplicate config entries 2023-07-23 14:56:01 +02:00
Holger Weiss f1b0a9cb32 make-binaries: Don't hard-code musl version
The default is to link against the most-recent musl version available
within the crosstool-ng toolchain, which is currently 1.2.2.  Unlike
with glibc, there's no point in sticking to some older version.
2023-07-23 14:54:04 +02:00
Holger Weiss 0b6cb77b3c make-binaries: Omit unnecessary glibc setting
The CT_GLIBC_KERNEL_VERSION_NONE option is about the minimum kernel
version supported by the toolchain's glibc.  The default is to stick to
the version of the kernel headers, which should be just fine.
2023-07-23 14:52:18 +02:00
Holger Weiss 8a740d5087 make-binaries: Set kernel version for all builds
Specify the same min. supported kernel version for builds against musl
libc and glibc.
2023-07-23 14:49:07 +02:00
Jérôme Sautret 8288774787 Add EJABBERD_OPTS in ejabberdctl.cfg & revert "Improve ejabberdctl script"
EJABBERD_OPTS is used to pass options to erl only when starting
ejabberd, to enable -heart for example.

This partially reverts commit 6272c0e901.
2023-07-18 15:31:10 +02:00
Paweł Chmielowski d349e3a88e Revert "Add stun app to cond_apps in mix.exs"
Looks like this is required only when using older mix versions.

This reverts commit 2ef9fbc111.
2023-07-18 11:14:57 +02:00
Paweł Chmielowski 2ef9fbc111 Add stun app to cond_apps in mix.exs 2023-07-17 18:40:39 +02:00
Badlop 78f81de252 Improve support to stop external modules written in Elixir 2023-07-13 13:41:18 +02:00
dependabot[bot] 8d9ee8e35b Bump ex_doc from 0.29.4 to 0.30.1
Bumps [ex_doc](https://github.com/elixir-lang/ex_doc) from 0.29.4 to 0.30.1.
- [Changelog](https://github.com/elixir-lang/ex_doc/blob/main/CHANGELOG.md)
- [Commits](https://github.com/elixir-lang/ex_doc/compare/v0.29.4...v0.30.1)

---
updated-dependencies:
- dependency-name: ex_doc
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-07-13 13:41:14 +02:00
Badlop e66ba2e424 Improve ejabberdctl script: Copy recent commit 6272c0e90 to the container 2023-07-13 13:41:06 +02:00
Paweł Chmielowski fafb48e88f Merge pull request #4025 from jpds/increase-default-backlog
ejabberd_listener.erl: Increase default listen queue backlog value
2023-07-11 12:19:33 +02:00
Jérôme Sautret 6272c0e901 Improve ejabberdctl script
Improved handling of ERLANG_OPTS and fixed hanging process when running some ejabberdctl commands as root, such as debug or foreground.
2023-07-10 16:18:06 +02:00
Paweł Chmielowski 54314e5bb9 Better error handling in mod_muc_rtbl
Should fix issue #4050
2023-07-04 18:18:49 +02:00
Badlop ffbcf19156 Halt ejabberd if a command in CTL_ON_ fails during ejabberd startup
See processone/ejabberd-contrib#97
2023-06-20 17:54:10 +02:00
Badlop dcc8149f58 New command to halt ejabberd abruptly with an error status code
Used for processone/ejabberd-contrib#97
2023-06-20 17:54:10 +02:00
Badlop d2c54fd5fe Fix calling ejabberdctl command with wrong number of arguments with Erlang 26
In Erlang up to 25.3, the lists:zip arguments were [A1, A2]
Since Erlang 26.0, the arguments are: [A1, A2, fail]

https://github.com/erlang/otp/commit/93748a8d841efc8f8246074ca721607efecebe2d
2023-06-13 12:25:27 +02:00
Badlop f40a7b1c77 OAuth: Handle badpass error message 2023-06-13 12:25:22 +02:00
Badlop 16f758e13f Support to provide only the dependency name
This is used in ejabberd-contrib repository's ci.yml,
and useful for a custom development that doesn't require rebar2 support.
2023-06-12 20:48:47 +02:00
Badlop c333cc0776 New option install_contrib_modules
This option is read during ejabberd start or config reload.
It installs the listed modules which aren't yet installed,
as long as allow_contrib_modules is not disabled.
Edit ejabberd.yml and configure the desired ejabberd-contrib modules,
add them in the install_contrib_modules option,
finally start ejabberd (or reload config).
2023-06-09 10:27:13 +02:00
Badlop 3263e81972 Move Xref and Dialyzer options from workflows to rebar.config
And also include some more applications in Dialyzer plt_extra_apps,
which apparently is required since Erlang 26.
2023-06-09 00:02:20 +02:00
Badlop 397a08afca Move configure options from the Test to the Compile section 2023-06-09 00:02:18 +02:00
Badlop 19070e4b04 Add sections to rebar.config to organize its content 2023-06-09 00:02:17 +02:00
Badlop 0bbc255814 Dialyzer dirty workarounds because re:mp() is not an exported type
Since Erlang/OTP 26, Dialyzer by default reports unknown types.
ejabberd's type specs refer to the re:mp() type,
but that isn't exported in the OTP source code,
and cannot be used in any other modules.
This commit provides very dirty workarounds, and any cleaner
alternative is very welcomed.
2023-06-09 00:02:15 +02:00
Badlop 1b06f4ca4f The warnings_as_errors compiler option is already disabled by default 2023-06-09 00:02:13 +02:00
Badlop b3eeac637f Update tests to Erlang/OTP 26 and recent Elixir 2023-06-09 00:02:10 +02:00
Badlop 480b42b36d Run Dialyzer again with Erlang/OTP 26, and let's solve its problems 2023-06-09 00:02:06 +02:00
Badlop 436074c67a When installing module already configured, keep config as example
When installing a module using ext_mod, if it has already configuration
in the modules section, copy its specific config file as an example
(copy file and rename it).
This may happen when using the new install_contrib_modules option.
2023-06-09 00:02:02 +02:00
Badlop c9a2117570 Ignore .tool-versions in git, this file is used by asdf 2023-06-09 00:01:56 +02:00
sando38 6155b001b4 Dockerfile: Reorder stages and steps for consistency
Also avoid duplicated lines.
2023-06-09 00:01:54 +02:00
sando38 8f05af7810 Dockerfile: Use Alpine as base for METHOD=package
No need to use the "large" docker.io/erlang image as we do not need any erlang/otp for the binary installers.
2023-06-09 00:01:51 +02:00
sando38 33ac7916d3 Dockerfile: Cosmetic changes
Ommit the path to ejabberdctl as it is already located at the $PATH

Also, do not copy Dockerfile into the container as this may unnecessarily trigger re-compiling of ejabberd.
2023-06-09 00:01:49 +02:00
sando38 461c1ddf3d Dockerfile: Rename packages to improve compatibility
Rename libcap packages to improve compatibility between Alpine versions. This may be beneficial if one specifies an OTP_VSN which was built using an older Alpine base version.

The alpine package libcap has been splitted into libcap2 and libcap-utils in Alpine 3.17. 'libcap' is now an alias for libcap2 and libcap-utils. We define 'so:libcap.so.2' for the runtime stage, as we only need the libraries, not the binaries.
2023-06-09 00:01:46 +02:00
sando38 2428f74fbd Dockerfile: Provide specific OTP and elixir vsn for direct compilation
Ejabberd images can now be built with specific erlang/OTP and elixir vsn with the new build arguments OTP_VSN and ELIXIR_VSN.
2023-06-09 00:01:36 +02:00
Paweł Chmielowski bb8e892323 Add alternate version of mysql upsert
This one works by issuing select and then insert or update or skip depending
on what select returns. We use this on mysql 5.7.26 and 8.0.20 where
previous implementation using 'replace' or 'on conflict update' can cause
excessive deadlocks.
2023-06-07 16:38:07 +02:00
Paweł Chmielowski 3eecf4ae8a Remove existing role information for users that are kicked from room
This should fix issue reported in #4035
2023-05-24 12:15:20 +02:00
Paweł Chmielowski 4a53d4cb56 Expand rule "mucsub subscribers are members in members only rooms" to more places 2023-05-24 11:26:48 +02:00
Paweł Chmielowski 1818a29c29 Don't crash in mod_shared_roster_ldap:get_member_jid on empty output
This based on crash from issue #3614
2023-05-22 12:48:29 +02:00
Paweł Chmielowski dd2efc360b Fix return values from calculate_diff inside mod_privacy_sql 2023-05-02 15:59:40 +02:00
Paweł Chmielowski 8e64992f47 Use more efficient way to calculate changes in set_privacy_list 2023-05-02 11:43:29 +02:00
Jonathan Davies 040c72f1c8 ejabberd_listener.erl: Increase default listen queue backlog value to 128, which
is the default value on both Linux and FreeBSD.
2023-04-25 20:11:04 +01:00
Badlop d95a1bac3e Use container names to differentiate them; don't force logo height 2023-04-25 09:50:19 +02:00
Badlop c6b295b5a0 Fix typo in the previous commit 2023-04-25 09:48:02 +02:00
Badlop 2a4a6bec18 Add trailing backslash to URLs shown in mod_muc_log disco#info 2023-04-24 13:43:09 +02:00
Badlop 0d3f8c7b9f Make mod_register_web redirect to page that end with / (#3177)
Code copied from ejabberd_web_admin.erl, commit 5ec21438
2023-04-24 13:43:07 +02:00
Badlop d299b97261 Raise Erlang/OTP requirement to 20.0 2023-04-24 13:43:00 +02:00
Paweł Chmielowski 5b8ebed81b Optimize mod_privacy_sql:set_list
Previously we always did delete everything and set all entries back, now
we check if we need to delete anything and if not insert only missing data.
2023-04-20 10:55:30 +02:00
Badlop bb28265261 Set version to 23.04
Container / Container (push) Failing after 1m47s
Installers / Binaries (push) Failing after 56s
Runtime / Rebars (20.3, rebar) (push) Failing after 3s
Runtime / Rebars (20.3, rebar3) (push) Failing after 3s
Runtime / Rebars (25.3, rebar) (push) Failing after 3s
Runtime / Rebars (25.3, rebar3) (push) Failing after 2s
Runtime / Rebars (26, rebar3) (push) Failing after 1m24s
Installers / Release (push) Has been skipped
CI / Tests (20.0) (push) Has been cancelled
CI / Tests (25.3) (push) Has been cancelled
CI / Tests (26.0-rc3) (push) Has been cancelled
Runtime / Mix (1.10.3, 21.3) (push) Has been cancelled
Runtime / Mix (1.10.3, 22.0) (push) Has been cancelled
Runtime / Mix (1.11.4, 21.3) (push) Has been cancelled
Runtime / Mix (1.11.4, 22.0) (push) Has been cancelled
Runtime / Mix (1.12.3, 22.0) (push) Has been cancelled
Runtime / Mix (1.13.0, 22.0) (push) Has been cancelled
Runtime / Mix (1.13.0, 25.0) (push) Has been cancelled
Runtime / Mix (1.14.0, 25.0) (push) Has been cancelled
2023-04-18 11:39:33 +02:00
Paweł Chmielowski 46f33e5051 Update dependencies 2023-04-18 11:22:33 +02:00
Badlop 06669b12e8 Update changelog 2023-04-18 11:12:18 +02:00
Badlop 1ca126381b Update man 2023-04-18 10:37:22 +02:00
dependabot[bot] bf5de81b24 Bump ex_doc from 0.29.3 to 0.29.4
Bumps [ex_doc](https://github.com/elixir-lang/ex_doc) from 0.29.3 to 0.29.4.
- [Release notes](https://github.com/elixir-lang/ex_doc/releases)
- [Changelog](https://github.com/elixir-lang/ex_doc/blob/main/CHANGELOG.md)
- [Commits](https://github.com/elixir-lang/ex_doc/compare/v0.29.3...v0.29.4)

---
updated-dependencies:
- dependency-name: ex_doc
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-04-18 10:37:16 +02:00
Badlop d717ffd1a0 Update version notes of options and commands 2023-04-18 10:37:14 +02:00
Badlop c271d73dbd CI: Update Erlang/OTP to 26.0-rc3 2023-04-18 10:37:11 +02:00
Badlop e1a8980d6c Container: no need to specify captcha_url, auto may be enough in most cases 2023-04-18 10:37:08 +02:00
Badlop ec7ff88dda Update Portuguese translation (thanks to Silvério Santos) 2023-04-18 10:37:06 +02:00
Badlop 5b695766ae Mention what ejabberd version first supports rtbl 2023-04-18 10:37:04 +02:00
Paweł Chmielowski f5b6909cca Unregister hooks on stop in mod_muc_rbtl 2023-04-17 18:03:21 +02:00
Paweł Chmielowski 98d348893b Make mod_muc_rtbl notify only local node rooms 2023-04-17 17:07:59 +02:00
Paweł Chmielowski c942c31e38 Add mod_muc_rtbl
This implements Real-time blocklists for XMPP (xmppbl.org).

Closes #4017
2023-04-17 16:59:42 +02:00
Paweł Chmielowski 70cbdd1117 Allow to update state from muc_process_iq hook 2023-04-17 16:57:54 +02:00
Paweł Chmielowski 1114a35e0a Recognize message retractions in mod_muc 2023-04-14 12:32:35 +02:00
Paweł Chmielowski d12e5a44b8 Add by attribute to generated muc moderation messages 2023-04-14 12:31:34 +02:00
Badlop 34420444db Container: Revert change in entrypoint that was added in d15cf994a 2023-04-11 15:29:28 +02:00
Badlop 38eb50bf5c Container: Reorganize how to build container image 2023-04-11 15:29:26 +02:00
Badlop 6705679cf3 Container: Update instructions to build image following d15cf994a (#3983) 2023-04-11 15:29:24 +02:00
Badlop 10635bccc9 Container: Reword sentences about docker.io and ghcr.io 2023-04-11 15:29:23 +02:00
Badlop dee0ec50b9 Remove ci-19.3, as Github Actions no longer supports ubuntu-18.04 2023-04-11 15:29:21 +02:00
sando38 401bdedae8 Dockerfile: Detect runtime dependencies automatically
Only libcap2 and tini can't be auto-detected. libcap2 has been renamed in Alpine version 3.17, hence the Dockerfile is not compatible with Alpine versions <3.17
2023-04-11 15:27:49 +02:00
Badlop 99e51a2123 Mention in mod_mam.erl its support for XEP-0425: Message Moderation
Then run "make doap" to regenerate ejabberd.doap
2023-03-30 17:02:54 +02:00
Badlop d43ce53f9a Update xmpp version in mix following commit 6da1bb5b2 2023-03-30 16:54:35 +02:00
Paweł Chmielowski f6385fae50 Fix dialyzer warning 2023-03-30 14:53:51 +02:00
Paweł Chmielowski 6da1bb5b22 Add support for "xep-0424 Message Moderation"
This fixes issue #3730
2023-03-30 14:38:08 +02:00
Badlop 64e1cfcbba Test only with oldest OTP supported, newest stable and bleeding edge 2023-03-28 11:41:57 +02:00
Badlop fbfcebf417 Container: Remove Elixir Matchers to prevent useless warnings in github actions page 2023-03-28 11:41:56 +02:00
Saarko d15cf994a2 Container: Add METHOD to build container using packages (#3983)
make-*: include musl build in make-binaries

Ctr actions: use github runners to provide bootstrap erlang

- adjust make-binaries script to use github runners' installed erlang
  for bootstrapping
- this reduces the need to build an unnecessary toolchain for glibc
  based binaries
2023-03-28 11:41:54 +02:00
Saarko c71887db43 Container: Add tini as runtime init 2023-03-28 11:41:52 +02:00
Badlop 7c634f3615 Container: No need of openssl package at runtime 2023-03-28 11:41:51 +02:00
Badlop 874b961680 Container: Remove unused Mix stuff: ejabberd script and static COOKIE
Instead of including this file in the container with static content:
  /opt/ejabberd-master/releases/COOKIE
the cookie file will be generated by erlang in
  /opt/ejabberd/.erlang.cookie
or by ejabberdctl if ERLANG_COOKIE environment variable was provided.
2023-03-28 11:41:49 +02:00
Badlop 2c1ee698cc Container: Copy captcha scripts to /opt/ejabberd-*/lib like the installers
Instead of a path like
  /opt/ejabberd-master/lib/ejabberd-23.1.0/priv/bin
they are now in
  /opt/ejabberd-master/lib
2023-03-28 11:41:47 +02:00
Badlop b0f0dd3227 Container: Expose only HOME volume, it contains all the required subdirs 2023-03-28 11:41:46 +02:00
Badlop de477f7b6c Container: Update Alpine to 3.17 to get Erlang/OTP 25 and Elixir 1.14 2023-03-28 11:41:44 +02:00
Saarko 440ede313b make-binaries: fix building with erlang/otp v25.x
Signed-off-by: sando38 <sandomir@tutanota.com>
2023-03-28 11:41:43 +02:00
Saarko 976c6c5e41 make-binaries: bump versions, e.g. erlang/otp to 25.3 2023-03-28 11:41:41 +02:00
Badlop 7e6d25314d make-packages: Fix for installers workflow, which didn't find lynx... 2023-03-28 11:41:39 +02:00
Badlop cc5c3f7b2c ejabberdctl: Don't use .../releases/COOKIE, it's no longer included
And slightly clean the .erlang.cookie line
This partially reverts 9c23a7dc3f
2023-03-28 11:41:33 +02:00
Badlop 1d62dc4621 Set roster name from XEP-0172, or the stored one (#1611) 2023-03-28 11:41:27 +02:00
Badlop e2496562f9 Preliminary support to store extra elements in subscription request (#840) 2023-03-28 11:41:24 +02:00
Badlop c4a2f8d64f captcha_url option now accepts 'auto' value, and it's the default 2023-03-22 16:23:41 +01:00
Badlop 6c620f6f43 Remove wrong get_room_history command fields specification 2023-03-22 16:23:37 +01:00
dependabot[bot] af29adb558 Bump ex_doc from 0.29.2 to 0.29.3
Bumps [ex_doc](https://github.com/elixir-lang/ex_doc) from 0.29.2 to 0.29.3.
- [Release notes](https://github.com/elixir-lang/ex_doc/releases)
- [Changelog](https://github.com/elixir-lang/ex_doc/blob/v0.29.3/CHANGELOG.md)
- [Commits](https://github.com/elixir-lang/ex_doc/compare/v0.29.2...v0.29.3)

---
updated-dependencies:
- dependency-name: ex_doc
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-03-22 16:23:33 +01:00
Paweł Chmielowski 3c97775573 Pubsub xdata fields max_item/item_expira/children_max use 'max' not 'infinity'
Codec in xmpp crashes when we use infinity (see issue #4011), so lets
convert those values before passing them to xmpp:encode(0
2023-03-21 15:30:44 +01:00
Blake Miller f953dc3f5e Persist none role for outcasts
`none` roles *should* be persisted for banned users. I totally forgot about this, my bad. I'm shocked nobody else noticed it.
2023-03-20 17:07:10 +01:00
dependabot[bot] 04b431f191 Bump ex_doc from 0.29.1 to 0.29.2
Bumps [ex_doc](https://github.com/elixir-lang/ex_doc) from 0.29.1 to 0.29.2.
- [Release notes](https://github.com/elixir-lang/ex_doc/releases)
- [Changelog](https://github.com/elixir-lang/ex_doc/blob/main/CHANGELOG.md)
- [Commits](https://github.com/elixir-lang/ex_doc/compare/v0.29.1...v0.29.2)

---
updated-dependencies:
- dependency-name: ex_doc
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-03-07 13:11:26 +01:00
Badlop 5cd6c524ea Allow XML to be visible in web browser in Common Test page 2023-03-07 13:11:24 +01:00
Badlop 37676757e3 CI: Add OTP 26.0-rc1 to the test matrix
But disable dialyzer in 26, as it complains verbosely without reason
2023-03-07 13:11:22 +01:00
Badlop 1c82daacb2 CI: Upload Common Test logs as artifact in case of failure 2023-03-07 13:11:21 +01:00
Badlop 9f0a5c5ef0 CI: Produce less verbose logs for tests
This gets a line first introduced in 5b5548b8c that was lost later
2023-03-07 13:11:19 +01:00
Badlop 9bb86132c6 CI: Use default verbosity to let log files contain XMPP stanzas
This partially reverts 2a7780507
2023-03-07 13:11:17 +01:00
Badlop 2137a4f663 Fix Shellcheck warnings in shell scripts 2023-02-21 18:17:26 +01:00
Badlop c9143dd3d8 Fix TSQLlint warnings in MSSQL test script 2023-02-21 18:17:25 +01:00
Badlop 66d58504d0 Fix TSQLlint warning about typo in mssql.new.sql 2023-02-21 18:16:59 +01:00
Badlop 0def333550 Fix Remark-lint warnings 2023-02-21 18:14:02 +01:00
Badlop dea452bdfd Fix Prospector and Pylint warnings in test extauth.py 2023-02-21 18:14:02 +01:00
dependabot[bot] d504ed8a9b Container: Bump docker/build-push-action from 3 to 4
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 3 to 4.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/v3...v4)

---
updated-dependencies:
- dependency-name: docker/build-push-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-02-21 18:13:15 +01:00
Paweł Chmielowski 9503beca6c Make mod_muc_room:set_opts process persistent flag first
As processing some other options depends on this setting flag in room
state.
2023-02-20 13:42:52 +01:00
Paweł Chmielowski dfe4884d16 Allow passing affiliations and subscribers to create_room_with_opts command 2023-02-20 13:03:46 +01:00
Paweł Chmielowski f10f6d176f Store state in db in mod_muc:create_room() 2023-02-20 12:56:41 +01:00
Paweł Chmielowski 4e7aa41e3f Make subscribers members by default 2023-02-20 12:55:31 +01:00
Paweł Chmielowski d91812730b Stop ejabberd_system_monitor before stopping node
Sometimes monitor module is performing checks when node is stopping and
this causes crash in monitoring process.
2023-02-08 19:53:19 +01:00
Paweł Chmielowski 54cf37e917 Invalidate vcard_xupdate cache on all nodes when vcard is updated 2023-02-08 19:06:44 +01:00
Paweł Chmielowski 3de803be2f Add get_room_history command in mod_muc_admin 2023-02-08 11:04:26 +01:00
Paweł Chmielowski 5ca59807d9 Fix problem with results of mam queries using rsm with max and before
Plus add test case for it.
2023-02-03 11:37:54 +01:00
Paweł Chmielowski 5c3b43cd63 Update spec 2023-02-01 17:32:22 +01:00
Paweł Chmielowski 1a6baf223c Re-allow anonymous connection for connection without client certificates
This fixes issue #3985. Initial issue was introduced in
5506b838c8 adding tls client cert
authentication.
2023-02-01 16:58:25 +01:00
Paweł Chmielowski 74c9aa8ac0 Merge pull request #3982 from nosnilmot/sql-update-tests
SQL schema migration fixes and testing
2023-02-01 12:03:48 +01:00
Badlop fb16727180 Ammend previous commit with another fix 2023-01-27 15:40:34 +01:00
Badlop 9842b035e3 Fix compilation problem with Erlang/OTP older than 21 introduced recently
Those macros were first introduced in c88a2d0
2023-01-27 15:29:41 +01:00
Alexey Shchepin f6b5a52104 Add s2s_out_bounce_packet hook 2023-01-27 03:54:31 +03:00
Alexey Shchepin f650b1e83c Log HTTP handler exceptions 2023-01-27 03:54:31 +03:00
Badlop 03cbc9b004 Revert previous commit, stick with Alpine 3.16 and Erlang/OTP 24 (#3983)
Alpine 3.17 includes Erlang/OTP 25, and it segfaults when
used in QEMU for arm64.

Revert "Update Alpine to 3.17 to get Elixir 1.14 required by recent libraries"
This reverts commit 43cae922f3.
2023-01-26 14:53:14 +01:00
Badlop 43cae922f3 Update Alpine to 3.17 to get Elixir 1.14 required by recent libraries 2023-01-25 17:58:27 +01:00
Badlop c5c7e7fc4d ext_mod: Improve support for loading *.so files from ext_mod dependencies
Copying files from deps/*/priv/*.so to the ejabberd priv/
is not possible when running ejabberd as OTP release or in a container.
Instead, let's copy the deps/*/priv/*.so maintaining the file structure,
and then using code:add_pathz for those dirs.

This partially reverts 5c1b72853f
2023-01-25 17:58:12 +01:00
Stu Tomlinson 0c1cf43519 Fix a long standing bug in new schema migration
... and make the test that uncovered it explicitly fail (there was already a
TODO) instead of passing but with errors logged
2023-01-21 15:42:43 +00:00
Stu Tomlinson cbbf85c555 Add support for running tests on MS SQL 2023-01-21 15:42:43 +00:00
Stu Tomlinson 56e974ab80 Add ability to run tests on upgraded DB
To test update_sql operation and functionality of resulting DB:

1. Load original schema to DB
2. Set {update_sql, true} in suite.erl
3. Run tests
2023-01-21 15:42:43 +00:00
Stu Tomlinson 9398052b65 New schema migration 'update_sql' improvements
- check that server_host column does not already exist before addding it
  and making other changes to table (update_sql becomes idempotent,
  yay!)
- check that indexes exist before dropping them (some are historical and
  are not created in more recent deployments), elminating spurious
  errors from logs
- update new_sql_schema config after migration, to allow near
  zero-downtime migrations (and help with automated testing)
2023-01-21 14:54:36 +00:00
Stu Tomlinson 6a8899677d Un-deprecate ejabberd_config:set_option/2
There does not appear to be an alternative way to set individual config
options, and this is already used by test/ejabberd_SUITE.erl
2023-01-21 14:54:36 +00:00
Paweł Chmielowski 3b34538038 Remove debug line from last commit 2023-01-20 17:12:50 +01:00
Paweł Chmielowski 6cf1e05993 Try to populate room history from mam when unhibernating 2023-01-20 16:27:08 +01:00
Paweł Chmielowski baf1336761 Merge pull request #3980 from nosnilmot/sql-maintenance
SQL related fixes and updates
2023-01-20 14:18:55 +01:00
Stu Tomlinson 4f0e426a12 Change PostgreSQL SERIAL to BIGSERIAL columns
This is consistent with other schemas, internally consistent with
foreign keys, and allows for > 2B records in these tables.
2023-01-19 23:36:42 +00:00
Stu Tomlinson d5bf051e79 Fix minor SQL schema inconsistencies 2023-01-19 23:36:42 +00:00
Stu Tomlinson c7c982b67b Add MS SQL support for new schema migration 2023-01-19 23:36:42 +00:00
Stu Tomlinson f7f0d3b1fb Enable MySQL support for new schema migration 2023-01-19 23:36:42 +00:00
Stu Tomlinson d4ab4d16e8 Use python3 to run extauth.py for tests 2023-01-19 23:36:42 +00:00
Stu Tomlinson aeed1679d8 Add 'new' schema for MS SQL 2023-01-19 23:36:42 +00:00
Stu Tomlinson 6fc67d83f4 Minor MS SQL improvements
Support 'sql_ssl' option for MS SQL - set Encryption=required and
Encrypt=yes in ODBC connection string to require SSL using default
FreeTDS driver and Microsoft ODBC Driver for SQL Server repectively.

Allow setting full ODBC connection string in 'sql_server' for MS SQL,
allowing custom connection configuration beyond what is possible with
just 'sql_odbc_driver' option.
2023-01-19 23:36:42 +00:00
Stu Tomlinson 06ffe995e1 Remove unnecessary indexes
For columns are already included in a compound index there is no
benefit to having a separate index with a subset of the same columns in
the same order, it just wastes space.
2023-01-19 23:36:42 +00:00
Stu Tomlinson 93bf4d5411 New SQL schema migrate fix
'server_host' column on 'route' table already exists in old schema and
does not need adding for new schema migration.
2023-01-19 23:36:42 +00:00
Stu Tomlinson 19f2f1fa86 Fix MS SQL error caused by ORDER BY in subquery
'The ORDER BY clause is invalid in views, inline functions, derived
tables, subqueries, and common table expressions, unless TOP, OFFSET
or FOR XML is also specified.'

Omit the ORDER BY clause from subquery if the SELECT is not constrained
by TOP.
2023-01-19 23:36:42 +00:00
Stu Tomlinson 5e94fdcfd5 MS SQL schema fixes
* Add missing 'mix' tables and indexes

* Fix text vs varchar issues

Various tests triggered this error:
The data types text and varchar are incompatible in the equal to operator.

Caused by incompatible 'text' columns in muc_online_room,
muc_online_users, pubsub_node_option, and pubsub_node tables.

* Fix definition of mqtt_pub table

This table incorrectly included 'server_host' column in old schema, and
had other inconsistencies.
2023-01-19 23:35:05 +00:00
Stu Tomlinson ec6f5c17c8 Correct README for creating test docker MS SQL DB 2023-01-19 14:06:11 +00:00
Paweł Chmielowski 758c87f564 Revert notes placement when generating markdown api commands documentation 2023-01-19 13:24:51 +01:00
Paweł Chmielowski b6dde41000 Improve output in gen_html_doc_for_commands command 2023-01-19 11:45:33 +01:00
Stu Tomlinson 648c83ea03 Fix ejabberdctl output formatting (#3979)
ECMA-48 SGR sequence ESC [21m is actually 'set double underline' but was
incorrectly implemented as 'set normal intensity' in Linux prior to
4.17.

The correct sequence for 'set normal intensity' is ESC [22m, which fixes
output formatting of 'ejabberdctl' and 'ejabberdctl help' on macos.
2023-01-19 11:18:59 +01:00
Paweł Chmielowski cc4cacdb5e Set version to 23.01
Container / Container (push) Failing after 4m4s
Installers / Binaries (push) Failing after 50s
Runtime / Rebars (19.3, rebar) (push) Failing after 2s
Runtime / Rebars (19.3, rebar3) (push) Failing after 2s
Runtime / Rebars (20.3, rebar) (push) Failing after 3s
Runtime / Rebars (20.3, rebar3) (push) Failing after 2s
Runtime / Rebars (24.3, rebar) (push) Failing after 2s
Runtime / Rebars (24.3, rebar3) (push) Failing after 3s
Runtime / Rebars (25, rebar) (push) Failing after 2s
Runtime / Rebars (25, rebar3) (push) Failing after 2s
Installers / Release (push) Has been skipped
CI (19.3) / Tests (19.3) (push) Has been cancelled
CI / Tests (20.0) (push) Has been cancelled
CI / Tests (21.3) (push) Has been cancelled
CI / Tests (24.3) (push) Has been cancelled
CI / Tests (25) (push) Has been cancelled
Runtime / Mix (1.10.3, 21.3) (push) Has been cancelled
Runtime / Mix (1.10.3, 22.0) (push) Has been cancelled
Runtime / Mix (1.11.4, 21.3) (push) Has been cancelled
Runtime / Mix (1.11.4, 22.0) (push) Has been cancelled
Runtime / Mix (1.12.3, 22.0) (push) Has been cancelled
Runtime / Mix (1.13.0, 22.0) (push) Has been cancelled
Runtime / Mix (1.13.0, 25.0) (push) Has been cancelled
Runtime / Mix (1.14.0, 25.0) (push) Has been cancelled
2023-01-17 11:35:52 +01:00
Paweł Chmielowski c84cdb6bfb Update mix dependences 2023-01-17 11:24:28 +01:00
Paweł Chmielowski a7ea8ecc29 Use tagged versions of dependences 2023-01-17 11:24:28 +01:00
Badlop 24839ad4be Fix typos in documentation and changelog 2023-01-16 18:34:09 +01:00
Badlop e11b89efd2 Get back mod_sip documentation and version number in the man page 2023-01-16 16:30:50 +01:00
Paweł Chmielowski 4566c82a85 Update man file 2023-01-16 16:24:44 +01:00
Paweł Chmielowski 024f3be13a Update mod_mqtt_bridge documentation 2023-01-16 15:33:37 +01:00
Badlop af2dae2ff3 Update changelog 2023-01-16 15:20:16 +01:00
Badlop d92372af70 Update man page 2023-01-16 15:10:31 +01:00
Badlop a70381e7c1 Annotate options that change in ejabberd 23.01 2023-01-16 15:10:29 +01:00
Badlop 21c0aaf417 Container: Replace set-output command with environment file
Announced in:
https://github.blog/changelog/2022-10-11-github-actions-deprecating-save-state-and-set-output-commands/
2023-01-16 15:10:28 +01:00
Badlop ce10bed5d8 Container: Update Alpine to 3.16, the latest one cached in Github Actions 2023-01-16 15:10:27 +01:00
Badlop eb12c1db1b Update check_xep_versions.sh to support extended -protocol attribute (#3915) 2023-01-16 15:10:25 +01:00
Badlop 276c11b04a Fix doc of log_modules_fully allowed value 2023-01-16 15:10:24 +01:00
Badlop 0255562d93 Fix doc of outgoing_s2s_families default value, it changed in 25ddd7b 2023-01-16 15:10:22 +01:00
Paweł Chmielowski 26a7107cd5 Fix dialyzer warning 2023-01-16 12:14:21 +01:00
Paweł Chmielowski 89918865b0 Implement reload in mqtt_bridge 2023-01-16 11:22:17 +01:00
Paweł Chmielowski f2cbe7f3c2 Recognize ws5/wss5 urls in mqtt_bridge 2023-01-16 11:01:24 +01:00
Paweł Chmielowski 83418c3195 Fix warning in mqtt_bridge 2023-01-16 11:01:04 +01:00
Paweł Chmielowski 5592f8df1a Make dialyzer happy 2023-01-13 20:34:49 +01:00
Paweł Chmielowski 4311a5646f Add support for websockets to mqtt bridge 2023-01-13 20:09:10 +01:00
Badlop c103182bc7 Update German translation (thanks to Johannes Keyser) 2023-01-10 13:52:06 +01:00
Badlop 243697e25a Update copyright year to 2023 (#3967) 2023-01-10 13:52:04 +01:00
dependabot[bot] dfc6e7833c Bump ex_doc from 0.28.4 to 0.29.1
Bumps [ex_doc](https://github.com/elixir-lang/ex_doc) from 0.28.4 to 0.29.1.
- [Release notes](https://github.com/elixir-lang/ex_doc/releases)
- [Changelog](https://github.com/elixir-lang/ex_doc/blob/main/CHANGELOG.md)
- [Commits](https://github.com/elixir-lang/ex_doc/compare/v0.28.4...v0.29.1)

---
updated-dependencies:
- dependency-name: ex_doc
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-01-10 13:52:02 +01:00
Badlop e0b4ea6652 Update jose to 1.11.5 when Erlang/OTP is 21 or higher
But use old jose 1.11.1 on Erlang/OTP older than 21
Erlang older than 21 does not support
  try catch _Class:_Reason:_Stacktrace ->
that is used in jose_server.erl
2023-01-10 13:51:56 +01:00
Badlop 503ad8e905 Fix bash completion when using Relive or other install methods 2023-01-10 13:51:53 +01:00
Frédéric Fauberteau d26a9d583f Fix portability issue with some shells (#3970) 2023-01-09 16:26:36 +01:00
Jérôme Sautret 0b1800fc10 Add hooks for mqtt subscribe & unsubscribe events 2023-01-05 14:58:18 +01:00
Badlop 92d7be4338 Use alternative split/2 function that works with Erlang/OTP as old as 19.3 2023-01-03 20:32:52 +01:00
Badlop ce89ff07e7 Fix "make hooks" 2023-01-03 19:13:43 +01:00
Badlop 5c1b72853f External modules: compile C files and install them in ejabberd's priv 2023-01-03 18:48:44 +01:00
Badlop 5d38143c3f Initialize captcha system after loading modules and external modules
Since recently, ejabberd_captcha instead of a script may use a module,
for example the external module mod_ecaptcha, which must be loaded first.
2023-01-03 18:48:42 +01:00
Badlop 353c68cfa6 Add support to define module instead of path to script 2023-01-03 18:48:40 +01:00
Badlop 9087e72f0e Update image key, some scripts generate their own random key 2023-01-03 18:48:38 +01:00
Badlop 4ad4a3bf24 Support to get module status from Elixir modules 2022-12-22 14:00:38 +01:00
Badlop 17160e9379 Container: Update Actions versions as requested by GitHub Actions 2022-12-22 14:00:36 +01:00
Jonathan Davies ed84fee2bf ejabberd_options_doc.erl: Added outgoing_s2s_families deprecation
notice.

Signed-off-by: Jonathan Davies <jpds@protonmail.com>
2022-12-22 14:00:22 +01:00
Jonathan Davies 25ddd7b152 Changed default outgoing_s2s_families to IPv6 as servers are within datacenters
where IPv6 is more commonly enabled (contrary to clients), and if it's not
present - it'll just fall back to IPv4.
2022-12-22 14:00:22 +01:00
Paweł Chmielowski 5ad709a2e2 Fix typo in last commit 2022-12-21 11:13:49 +01:00
Paweł Chmielowski 32ace140df Don't store mucsub presence events in offline storage
This is expanded version of pull request #3959
2022-12-21 11:12:08 +01:00
Paweł Chmielowski bc063b8f97 Fix crash when api_permisions don't have who: section
Default value of that field was wrong, so lets correct this.

This fixes issue #3957
2022-12-15 11:27:20 +01:00
Badlop 03681cd68d Expose the pubsub#type field in disco#info query to the node (#3914) 2022-12-13 23:57:34 +01:00
Badlop fe8b98a1f3 When using erlef, Erlang/OTP 21 is only available in ubuntu 20.04
See
https://github.com/erlef/setup-beam#compatibility-between-operating-system-and-erlangotp
2022-12-13 23:57:31 +01:00
Badlop a193128543 Fix path where gem is installed and fpm can be found 2022-12-13 23:24:01 +01:00
Badlop 6a10048339 Document the new log_modules_fully option 2022-12-13 23:24:01 +01:00
Badlop 9087dd9210 Improve .devcontainer to use use devcontainer image and .vscode 2022-12-13 23:24:01 +01:00
Badlop a08c038c9c Add .vscode files to instruct VSCode how to run ejabberd 2022-12-13 23:24:01 +01:00
Badlop e191bc253d Add Erlang LS default configuration 2022-12-13 23:24:01 +01:00
Badlop c8d866d01a Add Elvis default configuration 2022-12-13 23:24:01 +01:00
Badlop 01d25c5c37 Let setup-relive.sh normally end with no error status 2022-12-13 23:24:01 +01:00
Paweł Chmielowski 25d6b3d1c8 Fix dialyzer warnings 2022-12-07 14:08:23 +01:00
Paweł Chmielowski 639183a783 Add support for certificate authentication in mqtt bridge 2022-12-07 13:38:05 +01:00
Paweł Chmielowski 80477f71b3 Add misc:uri_parse/2 to allow declaring default ports for protocols 2022-12-07 13:34:29 +01:00
Paweł Chmielowski d49b50a055 Add log_modules_fully option to make some modules log everything independed from global loglevel 2022-12-01 13:24:46 +01:00
Paweł Chmielowski 54592202ef Allow admin command to subscribe new users to members_only rooms 2022-12-01 11:52:39 +01:00
Paweł Chmielowski be60263d47 Fix dialyzer warnings in mod_mqtt_bridge 2022-11-24 16:23:37 +01:00
Badlop 441eca75b2 hibernation_time is not an option worth storing in room state (#3946) 2022-11-23 18:40:28 +01:00
Badlop 266dd98521 OAuth: Accept jid as a HTTP URL query argument 2022-11-23 18:40:26 +01:00
Badlop b0e74464b1 OAuth: Handle when client is not identified 2022-11-23 18:40:23 +01:00
Badlop daaaf221cb Don't set i18n option because Converse enforces it instead of browser lang (#3951) 2022-11-23 18:39:49 +01:00
Paweł Chmielowski e2779e1155 Try to redirect access to files mod_conversejs to cdn when there is no local copies 2022-11-23 16:28:42 +01:00
Paweł Chmielowski 514bab47a2 Add hook for mqtt publish event 2022-11-23 15:16:43 +01:00
Paweł Chmielowski fbea49dbab Add mqtt bridge module 2022-11-23 14:50:18 +01:00
chengshq 5cf9b052dd Jid format when multicastc was cached (#3950)
The error log:

```2022-11-22 04:10:25.436648+00:00 [error] <0.515.0>@ejabberd_router:route/1:95 Failed to route packet:
#message{
    id = <<>>,type = normal,lang = <<>>,
    from =
        #jid{
            user = <<"a123">>,server = <<"conference.example.com">>,
            resource = <<>>,luser = <<"a123">>,
            lserver = <<"conference.example.com">>,lresource = <<>>},
    to = <<"multicast.app.example.com">>,subject = [],body = [],
    thread = undefined,
    sub_els =
        [#ps_event{
             items =
                 #ps_items{
                     xmlns = <<>>,
                     node = <<"urn:xmpp:mucsub:nodes:subscribers">>,
                     items =
                         [#ps_item{
                              xmlns = <<>>,id = <<"5803948964051348597">>,
                              sub_els =
                                  [#muc_subscribe{
                                       nick = <<"bb">>,password = <<>>,
                                       jid = undefined,events = []}],
                              node = <<>>,publisher = <<>>}],
                     max_items = undefined,subid = <<>>,retract = undefined},
             purge = undefined,subscription = undefined,delete = undefined,
             create = undefined,configuration = undefined},
         #addresses{
             list =
                 [#address{
                      type = bcc,
                      jid =
                          #jid{
                              user = <<"aaa">>,server = <<"app.example.com">>,
                              resource = <<>>,luser = <<"aaa">>,
                              lserver = <<"app.example.com">>,lresource = <<>>},
                      desc = <<>>,node = <<>>,delivered = undefined,
                      sub_els = []},
                  #address{
                      type = bcc,
                      jid =
                          #jid{
                              user = <<"bb">>,server = <<"app.example.com">>,
                              resource = <<>>,luser = <<"bb">>,
                              lserver = <<"app.example.com">>,lresource = <<>>},
                      desc = <<>>,node = <<>>,delivered = undefined,
                      sub_els = []}]}],
    meta = #{}}
** exception error: {badrecord,jid}
   in function  ejabberd_router:do_route/1 (src/ejabberd_router.erl, line 394)
   in call from ejabberd_router:route/1 (src/ejabberd_router.erl, line 92)
   in call from maps:fold_1/3 (maps.erl, line 232)
   in call from mod_multicast:handle_info/2 (src/mod_multicast.erl, line 206)
   in call from gen_server:try_dispatch/4 (gen_server.erl, line 637)
   in call from gen_server:handle_msg/6 (gen_server.erl, line 711)
   in call from proc_lib:init_p_do_apply/3 (proc_lib.erl, line 249)```


Then command debug select the multicastc:
```
(ejabberd@localhost)2> mnesia:dirty_read(multicastc, <<"app.example.com">>).
[{multicastc,<<"app.example.com">>,
             {{multicast_supported,<<"multicast.app.example.com">>,
                                   {limits,{default,20},{default,20}}},
              cached},
             63836303692}]```

The type of `Service` was binary.
2022-11-22 12:11:31 +01:00
Holger Weiss 3b50cd36ba Merge remote-tracking branch 'processone/pr/3945'
* processone/pr/3945:
  make-binaries: reduce log output
  make-binaries: Bump zlib version to 1.2.13
2022-11-16 16:20:10 +01:00
Stu Tomlinson ed678f58d3 make-binaries: reduce log output
Reduce log output from make-binaries:
 - quieter curl downloads
 - quiet build of crosstool-ng
 - disable crosstool-ng progress bar
2022-11-16 13:41:57 +00:00
Stu Tomlinson aa8d800577 make-binaries: Bump zlib version to 1.2.13
Update zlib to 1.2.13 to address CVE-2022-37434

Also change zlib download to use archive URL so builds do not fail
when specified version is no longer the current version
2022-11-16 13:41:42 +00:00
Stu Tomlinson a1cfae8c98 pgsql: do not set standard_conforming_strings to 'off' (#3944)
Since f9120f75b0 string literals use escape string syntax (E'...') on
pgsql, so it is no longer necessary to set standard_conforming_strings
to 'off'

Fixes #3932
2022-11-16 13:58:30 +01:00
Badlop c6513fcfc6 Handle mnesia_system_event mnesia_up when other node joins this (#3842) 2022-11-14 18:45:20 +01:00
Badlop d3d50b456e Fix compilation warnings with Elixir 1.14
warning: missing parentheses for expression following "do:" keyword.
Parentheses are required to solve ambiguity inside keywords.
2022-11-14 18:45:20 +01:00
Badlop 196eca2dc4 Runtime: Add Elixir 1.14 to the test matrix 2022-11-14 18:45:17 +01:00
Paweł Chmielowski 6fcfe80a65 Pass ssl options to mysql driver 2022-11-14 11:19:51 +01:00
Paweł Chmielowski 992d998695 Silent warning in OTP24 about not specified cacerts in sql connections 2022-11-14 11:18:26 +01:00
Badlop e58920b2c6 Container: Update link to the local example of CTL_ON_CREATE usage 2022-11-07 22:38:55 +01:00
Badlop 0804f46095 Container: Add Composer Examples section 2022-11-07 22:19:40 +01:00
Badlop 662d9a0ed0 Container: Raise sections levels to improve legibility in GitHub web TOC 2022-11-07 22:19:22 +01:00
Badlop d957404adc Add link in README to the ProcessOne Downloads page 2022-11-07 18:56:53 +01:00
Badlop 779c98e314 Add link to ejabberd page at xmpp.org, which displays protocols from DOAP 2022-11-07 18:56:51 +01:00
Badlop 8de270cdaf Run "make doap" 2022-11-07 18:56:46 +01:00
Badlop b71a481e63 Add details about XEP implementations to some protocol attributes 2022-11-07 18:56:46 +01:00
Badlop 5a5e5bbdc6 Support extended protocol attribute (#3915) 2022-11-07 18:56:46 +01:00
Badlop 3b3d3eaa04 Run "make doap" to update ejabberd's DOAP file 2022-11-07 11:13:31 +01:00
Daniel Brötzmann 811fea14d8 Fix DOAP file logo namespace 2022-11-07 11:12:10 +01:00
Badlop 9794b4f778 Commit the generated DOAP file 2022-11-04 16:17:40 +01:00
Badlop b73a9234d9 Add some missing RFCs and remove problematic leading 0 in xep versions 2022-11-04 16:17:39 +01:00
Badlop c9b3d32031 Add DOAP script to Makefile 2022-11-04 16:17:37 +01:00
Badlop 4542bcb57f New script to generate DOAP file 2022-11-04 16:17:35 +01:00
Badlop 1072f593f1 Ignore /doc, generated by tools/check_xep_versions.sh 2022-11-04 16:17:33 +01:00
duritong 122af79207 move spool dir to make it fully configurable per ejabberdctl.cfg (#3863)
Container / Container (push) Failing after 3m35s
Installers / Binaries (push) Failing after 1m4s
Runtime / Rebars (19.3, rebar) (push) Failing after 1m10s
Runtime / Rebars (19.3, rebar3) (push) Failing after 2s
Runtime / Rebars (20.3, rebar) (push) Failing after 1m13s
Runtime / Rebars (20.3, rebar3) (push) Failing after 2s
Runtime / Rebars (24.3, rebar) (push) Failing after 1m19s
Runtime / Rebars (24.3, rebar3) (push) Failing after 2s
Runtime / Rebars (25, rebar) (push) Failing after 46s
Runtime / Rebars (25, rebar3) (push) Failing after 3s
Runtime / Mix (1.10.3, 21.3) (push) Failing after 41s
Runtime / Mix (1.10.3, 22.0) (push) Failing after 40s
Runtime / Mix (1.11.4, 21.3) (push) Failing after 41s
Runtime / Mix (1.11.4, 22.0) (push) Failing after 30s
Runtime / Mix (1.12.3, 22.0) (push) Failing after 34s
Runtime / Mix (1.13.0, 22.0) (push) Failing after 25s
Runtime / Mix (1.13.0, 25.0) (push) Failing after 33s
Installers / Release (push) Has been skipped
CI (19.3) / Tests (19.3) (push) Has been cancelled
CI / Tests (20.0) (push) Has been cancelled
CI / Tests (21.3) (push) Has been cancelled
CI / Tests (24.3) (push) Has been cancelled
CI / Tests (25) (push) Has been cancelled
In the packaged rpm the spool dir is set to:
```
: "${SPOOL_DIR:="/opt/ejabberd/database/$ERLANG_NODE"}"
```

However, `$ERLANG_NODE` is effectively set later (now in line 67), which effectively makes spool dir always in `...../ejabberd@localhost`
2022-10-26 14:02:42 +02:00
Badlop 2ef71a6684 Annotate captcha_cmd option, run make options, update man 2022-10-25 12:11:24 +02:00
Paweł Chmielowski bb22f574fe Bump version 2022-10-25 10:35:00 +02:00
Badlop 2e623a7f20 Update German translation (thanks to nautilusx)" 2022-10-24 13:09:23 +02:00
Badlop 8ea7690fc5 Support @VERSION@ and @SEMVER@ in captcha_cmd option 2022-10-24 12:35:30 +02:00
Paweł Chmielowski a80717ed0e Update changelog 2022-10-18 18:59:28 +02:00
Holger Weiß 13d4787ea9 Bump default 's2s_timeout' value (#3653)
Wait for an hour before closing an idle s2s connection.

It's not uncommon for a connection to be idle for longer than ten
minutes but less than an hour.  For example, XEP-0410 suggests a ping
interval of fifteen minutes.  A longer idle timeout avoids the latency
and log entries associated with constantly re-establishing such
connections.

Co-authored-by: Paweł Chmielowski <pawel@process-one.net>
2022-10-18 16:08:16 +02:00
Frank 28b3134098 fix table creation on a running cluster (#3913) 2022-10-18 15:38:55 +02:00
Badlop d2f79e268e Update Portuguese (Brazil) translation (thanks to Wellington Terumi Uemura) 2022-10-12 17:09:49 +02:00
Badlop b529f72d8f Update Chinese (Simplified) translation (thanks to Eric) 2022-10-12 14:11:39 +02:00
Paweł Chmielowski c4d834b879 Update deps 2022-10-12 12:44:36 +02:00
Badlop 67094ca065 Update Catalan and Spanish translations 2022-10-12 12:06:30 +02:00
Badlop d29fdc4d2e Remove unnecessary text string 2022-10-12 12:06:28 +02:00
Badlop 7be52065dd Update Chinese (Simplified) translation (thanks to Eric) 2022-10-12 12:06:26 +02:00
Badlop 582a245cc7 Update Ukrainian translation (thanks to Artem) 2022-10-12 12:06:24 +02:00
Badlop 4e4c696730 Update Russian translation (thanks to AHOHNMYC) 2022-10-12 12:06:22 +02:00
Badlop 1942f1b370 Update Portuguese (Brazil) translation (thanks to Wellington Terumi Uemura) 2022-10-12 12:06:21 +02:00
Badlop b14b84744a Update French translation (thanks to Maxime Leroy) 2022-10-12 12:06:20 +02:00
Badlop d34274549c Update Spanish translation (thanks to Eduardo Malaspina) 2022-10-12 12:06:18 +02:00
Badlop 28fb992947 Update German translation (thanks to nautilusx) 2022-10-12 12:06:16 +02:00
Badlop 83150e0b76 Update Catalan translation (thanks to Maite Guix) 2022-10-12 12:06:15 +02:00
Badlop 1e24ad817c Update man page 2022-10-12 12:06:13 +02:00
Badlop 77f9254f45 Handle case that module exports mod_doc, but nothing in it 2022-10-12 12:06:11 +02:00
Badlop 77dacf92d2 Annotate new options 2022-10-12 12:06:09 +02:00
Paweł Chmielowski c99ff6059f Fix cache invalidation in shared roster
Doing srg_get_info for not existing group, then srg_create, will make
srg_add_user fail because it will get info that group doesn't exist from
cache.
2022-09-28 18:28:24 +02:00
Holger Weiss e4c20aa674 make-binaries: Bump Expat and libpng versions 2022-09-23 13:46:19 +02:00
Holger Weiss 403dc41b5f make-binaries: Fix GitHub release version checks
Adapt to changes to GitHub release pages.
2022-09-23 13:45:09 +02:00
Paweł Chmielowski 4a22604701 Export mod_muc_admin:get_room_pid/2 2022-09-22 11:11:02 +02:00
Paweł Chmielowski 09b33e17a6 Update mysql 2022-09-22 11:09:12 +02:00
Badlop 796f567db1 The archive_msg export fun requires MUC Service for room archives 2022-09-16 16:35:00 +02:00
Badlop 2229e4c6db Allow MUC service admins to bypass max_user_conferences limitation 2022-09-16 16:34:58 +02:00
Badlop fac74f623e Remove unused macro definitions detected by rebar3_hank
?OFFLINE_TABLE_LOCK_THRESHOLD is unused:
  definition and usage added in 4103f30812
  definition copied, and usage moved to mod_offline_mnesia, in 901d2e0aed
  definition and usage removed in mod_offline_mnesia in d88e4d495f
  this definition looks useless
?VERSION_MULTICAST is unused:
  added in 0cf8d1fa6e
  it was never used
?DISCO_QUERY_TIMEOUT is unused:
  added in 0cf8d1fa6e
  it was never used
?FEATURE/1 is unused:
  added in 0cf8d1fa6e
  usage removed in bc33a3873d
?DEFAULT_MAX_USERS_PRESENCE is unused:
  added in f817762cc4
  usage removed in ba2b650464
?CT_XML is unused:
  added in 46568fb959
  removed in 3dc55c6d47
2022-09-16 16:34:56 +02:00
Badlop cde8c8ce7d Remove unused header files which content is already in xmpp library 2022-09-16 16:34:53 +02:00
Holger Weiss 9e9904c79d Merge remote-tracking branch 'processone/pr/3905'
* processone/pr/3905:
  Adapt to change of mix_annotate type to boolean in roster_query
  Adapt to renaming of 'participant-id' from mix_roster_channel record
  Update xmpp module
2022-09-16 12:39:13 +02:00
Linus Jahn 14882342be Adapt to change of mix_annotate type to boolean in roster_query 2022-09-16 12:29:51 +02:00
Linus Jahn eeed1ca87f Adapt to renaming of 'participant-id' from mix_roster_channel record 2022-09-16 12:29:50 +02:00
Linus Jahn e22d496610 Update xmpp module 2022-09-16 12:29:29 +02:00
Badlop 5ee1dc9e8d Container: Support ERL_DIST_PORT 2022-09-13 17:55:17 +02:00
Badlop 30f1e28468 Support ERL_DIST_PORT option to work without epmd
Please note:
- Erlang/OTP 23.1 or higher is required to use ERL_DIST_PORT
- "make relive" doesn't support ERL_DIST_PORT, neither rebar3 nor elixir
- "make install" doesn't work with Elixir since at least ejabberd 21.07

Reference:
https://www.erlang.org/blog/otp-23-highlights/
https://blog.erlware.org/epmdlessless/
2022-09-13 17:55:15 +02:00
Badlop 4664358176 Ignore .ejabberd-modules/ , may be used when building container 2022-09-13 17:55:14 +02:00
Badlop a564707da4 Container: Get ejabberd-contrib sources to include them 2022-09-13 17:55:12 +02:00
Badlop d0bc83147a Container: Copy .ejabberd-modules directory if available 2022-09-13 17:55:11 +02:00
Badlop a8121cd7e5 Don't persist 'none' role (thanks to Blake Miller)(#3330) 2022-09-13 17:55:09 +02:00
Badlop 4d3875f4ff Store role, and use it when joining a moderated room (#3330) 2022-09-13 17:55:03 +02:00
Holger Weiss add55e1947 make-binaries: Bump Erlang/OTP version to 24.3.4.5 2022-09-13 14:25:13 +02:00
Holger Weiss 95ce3888f6 Merge remote-tracking branch 'processone/pr/3904'
* processone/pr/3904:
  make-binaries: Bump dependency versions
2022-09-13 11:53:04 +02:00
Stu Tomlinson 5bb4731bc1 make-binaries: Bump dependency versions 2022-09-13 08:37:46 +01:00
Holger Weiss b017207ac1 mod_admin_extra: Handle empty roster group names
Don't let 'add_rosteritem' create a roster group with an empty name.

Thanks to Licaon_Kter for reporting the issue.
2022-09-09 18:27:49 +02:00
Badlop 3312eaa51d Add more examples of podman usage 2022-09-07 14:00:42 +02:00
Badlop fe2fd776ef Update CONTAINER example calls to recent changes 2022-09-07 13:59:31 +02:00
Badlop c496baaf87 Container: Don't complain if the bin/ directory already exists 2022-09-07 13:59:20 +02:00
Badlop 14cced0bad Container: No need to search for the ejabberdctl binary 2022-09-07 13:58:56 +02:00
Badlop 17a5835143 Simplify recent commit (thanks to Simon Lipp)(#3894) 2022-09-07 13:57:12 +02:00
Roman Hargrave f542a82309 feat: do not clone repo inside container build 2022-09-07 10:57:55 +02:00
Badlop 42e384beb7 Fix unix socket support for ejabberd_http (thanks to Simon Lipp)(#3894) 2022-09-06 13:34:01 +02:00
Badlop 9a3ba9d76f Update Github Action workflows: Ubuntu 18 is deprecated and 22 is added
CI:
- Update Ubuntu to 20.04, the lowest available starting in April 2023 [1]
- Don't test 19.3, as it isn't available in Ubuntu 20.04
- Use OTP 25 for Shellcheck, Coveralls, ECIL page
- Use erlef instead of ErlGang, supports better old erlangs in new ubuntus
- Remove support for rebar2 testing, as that's done in Runtime

CI-19.3:
- Add a temporary workflow for testing ejabberd with OTP 19.3

Container and Runtime:
- Update Ubuntu to latest (22.04)

[1] https://github.com/actions/runner-images/issues/6002
https://github.com/ErlGang/setup-erlang
https://github.com/erlef/setup-beam
2022-09-06 13:33:58 +02:00
Paweł Chmielowski f624b14636 Add function for getting room diagnostics 2022-09-01 13:37:48 +02:00
Badlop aaf391b284 Catch all errors from jose_jwt:verify and log debugging details (#3890) 2022-09-01 13:02:56 +02:00
Badlop 808def7d32 The #roster_item.ask allowed values are subscribe|undefined 2022-09-01 13:02:54 +02:00
Badlop 4ae06f039d Add definition to detect OTP older than 25, used by ejabberd_auth_http 2022-09-01 13:02:52 +02:00
Badlop 7a1ca4b203 mod_host_meta: Complain at start if listener is not encrypted 2022-09-01 13:02:49 +02:00
Holger Weiss 63caa369be mod_pubsub: Don't crash on command failures
Handle 'delete_old_items' and 'delete_expired_items' errors gracefully.
2022-08-31 18:10:22 +02:00
Paweł Chmielowski fba651822d Handle invalid values in X-Forwarded-For header more gracefuly 2022-08-29 11:26:31 +02:00
Paweł Chmielowski cfc8746d29 Update roster_get hook in mod_shared_roster_ldap to use #roster_item{} 2022-08-24 11:14:32 +02:00
Paweł Chmielowski a9e85674b8 Fix mucsub unsubscribe notification payload to have muc_unsubcribe in it
...instead of muc_subscribe
2022-08-24 10:30:02 +02:00
Holger Weiss bce429dc44 make-packages: Fix permissions on RPM systems
RPM resets ownership/permissions of /opt/ejabberd and its subdirectories
on installation.  Therefore, fix those in the "after-install" script.
2022-08-21 15:48:28 +02:00
Jonah Brüchert 9a8a843724 Fix filter_nodes
The previous implementation always returned an empty list while testing
it. However I don't really understand why that happened. The list
comprehension based one works, although it looks equivalent to me.
2022-08-17 16:37:20 +02:00
Jonah Brüchert 0faf34b26d Parse sub elements of the mix join remote result 2022-08-17 16:37:20 +02:00
Jonah Brüchert b1e6e408f8 mod_mix: Return user jid on join 2022-08-17 16:37:20 +02:00
Linus Jahn 4a52b73a17 mod_shared_roster: Fix wrong hook type #roster{} (now #roster_item{})
The hook type was changed from #roster{} to #roster_item{} by me in the
recent MIX changes. Unfortunately I've overseen this one (and unit tests
+ dialyzer passed).
2022-08-12 17:07:28 +02:00
Linus Jahn b0526cd903 mod_mix, mod_mix_pam: Add new MIX namespaces to disco features 2022-08-12 10:53:53 +02:00
Jonah Brüchert 648245e974 mod_mix, mod_mix_pam: Add handling of IQs with newer MIX namespaces
Supported are mix:core:{0,1} and mix:pam:{0,2}
2022-08-12 10:53:53 +02:00
Linus Jahn d6b72f1c5d mod_roster: Change hook type from #roster{} to #roster_item{}
The problem with #roster{} is that every new record entry is also stored
in the mnesia roster table.  Adding the mix_participant_id there makes
no sense because the normal roster items are no MIX channels.  Using
\#roster_item{} for the hook and #roster{} for storing the normal items
seems to be a better idea.
2022-08-11 12:45:20 +02:00
Linus Jahn d450d40178 mod_roster: Respect MIX <annotate/> setting
MIX extensions are not sent to clients if they haven't been enabled by
the client with <annotate/> in the roster get request.
2022-08-11 12:45:20 +02:00
Linus Jahn 3bf0892c74 mod_mix_pam: Do roster pushes on join/leave
Before the channels were added/removed from the database but the
clients were not notified of it.
2022-08-11 12:45:20 +02:00
Linus Jahn 7564a4e953 mod_mix_pam: Provide MIX channels as roster entries via hook 2022-08-11 12:45:20 +02:00
Holger Weiss e858738736 ejabberd_listener: Let module take over socket
For some use cases, it may be necessary to allow a module to take over
socket ownership during initialization.
2022-08-10 18:28:35 +02:00
Badlop c2cd592eff Update documentation to reflect the GHCR image usage 2022-08-08 12:31:18 +02:00
Badlop f080aa5fd9 Apply the minimal changes required to use the GHCR image 2022-08-08 12:31:16 +02:00
Badlop 682c258760 Copy ejabberd-docker-install.bat from docker-ejabberd git and rename it 2022-08-08 12:31:14 +02:00
Badlop 7d8fa3c880 ext_mod: Support managing remote nodes in the cluster 2022-08-05 16:15:05 +02:00
Badlop 72944d895b ext_mod: Handle correctly when COMMIT.json not found 2022-08-05 16:15:03 +02:00
Badlop 00e6b0c97c Show allow_query_users room option in disco info (#3830) 2022-08-04 12:28:15 +02:00
Badlop a798a21386 CI: Remove syntax_tools from applications, as fast_xml fails Dialyzer 2022-08-04 12:05:46 +02:00
Mark Zealey 555ff2db4c Add log_burst_limit_* options (#3865)
* Add log_burst_limit_* options

On our ejabberd deployment we were sometimes seeing more than 500
msgs/sec of legitimate traffic, however this was getting silently
dropped. Provide config options to enable this limit to be configured
from the config file.

* Pass new logging vars in via ejabberdctl
2022-08-01 12:07:54 +02:00
Paweł Chmielowski 9b647a7afe Skip connection exit message when we triggered reconnection 2022-07-28 19:25:17 +02:00
Paweł Chmielowski 2b3644c8ac Handle errors reported from begin/commit inside transaction 2022-07-28 19:24:28 +02:00
Paweł Chmielowski 3d329c7e8f Make connection close errors bubble up from inside sql transaction 2022-07-28 13:17:35 +02:00
Badlop 1ea53bf940 Add syntax_tools to applications, required when using ejabberd_sql_pt (#3869) 2022-07-27 15:16:52 +02:00
Badlop bc8050eb03 Don't bother with COMMIT.json user-friendly feature in automated user case 2022-07-27 15:16:51 +02:00
Badlop a38ed7fb2c Handle not found COMMIT.json, for example in GH Actions 2022-07-27 15:16:49 +02:00
Badlop 033656d70e Add WebAdmin page for managing external modules 2022-07-26 15:42:13 +02:00
Badlop 853f35c706 Remove nginx and libgd3, so the proper versions can be installed 2022-07-26 15:42:13 +02:00
Paweł Chmielowski 7b944444ce Catch mysql connection being close earlier 2022-07-19 14:35:35 +02:00
Paweł Chmielowski 73167ef1bd Make first sql reconnect wait shorter time 2022-07-19 14:32:47 +02:00
Paweł Chmielowski 43f36205bd React to sql driver process exit earlier
If there are queued request when connection closes we may try to process
those requests (by trying to send them to already terminated db process,
and waiting until we hit timeout) before we see that driver is not longer
alive. This change adds check for driver exit before we process next
queued sql request, and immediately switch to connection state if we have
one.
2022-07-15 13:51:30 +02:00
Alexey Shchepin 99d9e315a3 Don't set affiliation to 'none' if it's already 'none' in mod_muc_room:process_item_change/3 2022-07-01 09:39:37 +03:00
Linus Jahn e10c67a74a mod_mix_pam: Display joined channels on webadmin page 2022-06-28 22:15:04 +02:00
Paweł Chmielowski 991d52f019 Fix error reporting in 'make options' on OTP24+ 2022-06-24 11:36:54 +02:00
Paweł Chmielowski 06147deccd Don't register listeners that failed to start in config reload
This should alleviate some issues in #3850
2022-06-21 11:09:37 +02:00
Paweł Chmielowski 46c947bc76 Define batch delete function types in coresponding behaviours 2022-06-17 10:35:02 +02:00
Paweł Chmielowski a2efde185a Fix mam delete_old_messages_batch for sql backend
Too much copy/paste from spool equivalent...
2022-06-17 10:22:57 +02:00
Badlop 382c3836af Runtime: Add Xref options to be as strict as CI 2022-06-12 13:08:29 +02:00
Badlop 6d39af7dd6 Runtime: No need for a specific mix erlang 25 job 2022-06-12 13:08:27 +02:00
Badlop a30d8c718f Update workflows to Erlang 25 2022-06-12 13:08:24 +02:00
Paweł Chmielowski a89b1f332d Use INSERT ... ON DUPLICATE KEY UPDATE for upsert on mysql
This can be used for all upsert expressions (where REPLACE INTO used
previously were only possible to use for subset of queries), and may
potentially help with deadlocks reported by mysql when we issues multiple
querier for same key in quick succession.
2022-06-10 16:25:50 +02:00
Badlop a6101cc26d Container: Set a less frequent healthcheck to reduce CPU usage (#3826) 2022-06-09 12:34:44 +02:00
Badlop 06a2b1c671 Container: Support to pass a fork repository as argument 2022-06-09 11:57:49 +02:00
Badlop 8d94ae4cb0 Container: Fix build instructions 2022-06-09 11:41:34 +02:00
Holger Weiss fbf43f2a31 make-binaries: Include CAPTCHA script with release 2022-05-28 15:00:25 +02:00
Holger Weiss b4c78336a6 make-binaries: Edit rebar.config more carefully
Don't break the (currently nonexistent) case where a dependency's
rebar.config file specifies LDFLAGS before and after "-lstdc++", such as
"-lfoo -lstdc++ -lbar".
2022-05-28 10:21:43 +02:00
Holger Weiss c1ee86e85c make-binaries: Fix linking of EIMP dependencies
Avoid linker errors such as the following when using GCC 10 or newer:

| multiple definition of `gdImageCreateFromJpegPtr'

See: https://gcc.gnu.org/gcc-10/porting_to.html

Fixes #3514.
2022-05-25 20:37:37 +02:00
Badlop 5a2e58e066 Fix regression on stop_ping in clustering context (thanks to fdie)(#3817) 2022-05-23 16:52:27 +02:00
Badlop 0e25f8d43e Fix mod_conversejs crash when mod_register not enabled (#3824) 2022-05-23 16:49:35 +02:00
Badlop 75ffce0417 configure also when running "make update", which is similar to "make deps" 2022-05-23 16:49:19 +02:00
Badlop 34e1ddb66f Update "make help" with recent changes 2022-05-23 13:58:50 +02:00
Badlop 26e6bb4a17 Use "make deps", which performs additional steps (#3823) 2022-05-23 13:58:41 +02:00
Badlop 7850ce0ec8 Ensure deps configuration is ran when getting deps (#3823) 2022-05-23 13:58:33 +02:00
Badlop 7d16907296 Configure eimp with mix to detect image convert properly (#3823) 2022-05-23 13:58:08 +02:00
Badlop ddc457060b Improve "make clean" and "distclean" 2022-05-23 13:57:17 +02:00
Badlop 93f994d50a Generate start scripts in "make all", not in "make install" (#3821) 2022-05-23 13:57:06 +02:00
Paweł Chmielowski 75a771bfec Don't leak DESTDIR in files copied by 'make install'
This fixes issue #3819
2022-05-19 12:20:58 +02:00
Holger Weiss e6c1bf9c9a make-binaries: Adjust Mnesia spool directory path
Adjust the default Mnesia directory for compatibility with older binary
packages.

Closes #3818.
2022-05-18 17:08:05 +02:00
Holger Weiss cac31f9325 make-packages: Include systemd unit with RPM
Don't forget to include the /etc/systemd/system/ejabberd.service unit
with the RPM package.

Closes #3816.
2022-05-18 10:20:34 +02:00
Paweł Chmielowski 99064548e8 Fix parsing of scram password from prosody
Looks like parsed integer no longer are convered to floats on erlang side,
so let's make check for them less restrictive.
2022-05-17 13:21:30 +02:00
Holger Weiss 553a1ccadf Merge remote-tracking branch 'processone/pr/3813'
* processone/pr/3813:
  make-installers: Support non-root installation
  make-installers: Override code on upgrade
  make-installers: Apply cosmetic changes
2022-05-17 12:44:34 +02:00
Holger Weiss 621445e096 make-installers: Support non-root installation
If the installer is invoked without superuser privileges, warn the user,
ask for the installation prefix, and perform a local installation on
confirmation.
2022-05-17 12:40:12 +02:00
Licaon_Kter 432e97296c Fix typos in changelog 2022-05-17 11:45:57 +02:00
Badlop 4f8e6fe844 Fix errors and warnings for "rebar3 edoc" 2022-05-17 10:42:02 +02:00
Badlop 01b791c0fa Define license for hex.pm using SPDX identifier
Until now, when publishing package to hex.pm, it complained:
> The following licenses are not recognized by SPDX:
>  * GPLv2
> Consider using licenses from https://spdx.org/licenses
2022-05-17 10:42:00 +02:00
Badlop dde096515d Update mix.lock with ex_doc 2022-05-17 10:41:59 +02:00
Badlop 78e97f3605 ex_doc is required to publish docs to hex.pm
Revert "Let's assume ex_doc is no longer needed"
This reverts commit 2f92dc40df.
2022-05-17 10:41:57 +02:00
Badlop 6c9f97d7cc Update README.md, the installers are now in GitHub Releases 2022-05-17 10:41:56 +02:00
Badlop 861347e911 CHANGELOG: Update to 22.05 version 2022-05-17 10:41:53 +02:00
Holger Weiss c54fe5b29e make-installers: Override code on upgrade
Use tar's --skip-old-files option for the data directory (/opt/ejabberd)
only.  Files in the code directory (/opt/ejabberd-$version) should be
overridden on upgrade.
2022-05-16 00:45:01 +02:00
Holger Weiss 6d93d49c6c make-installers: Apply cosmetic changes 2022-05-16 00:13:43 +02:00
Holger Weiss 8addf96f9e make-binaries: Bump dependency versions 2022-05-12 01:02:33 +02:00
Paweł Chmielowski a916d94000 Pass room state to muc_{un}subscribed hook 2022-05-09 17:32:34 +02:00
Paweł Chmielowski ed7fc956d5 Allow muc_{un}subscribe hooks to modify sent packets 2022-05-09 16:34:27 +02:00
Badlop 024ad02169 Revert "Temporary workaround to provide a 22.05 tagged container"
This reverts commit 3449621ccc.
2022-05-06 17:58:58 +02:00
Badlop 3449621ccc Temporary workaround to provide a 22.05 tagged container 2022-05-06 17:30:26 +02:00
Badlop e5782a519a Use alternate method to get priv/ path when copying captcha scripts 2022-05-06 17:30:24 +02:00
Badlop fbeaa2e03a Remove dependabot because it gets fired in forks too 2022-05-06 17:30:21 +02:00
388 changed files with 12633 additions and 3868 deletions
+1 -4
View File
@@ -1,4 +1 @@
# Update the VARIANT arg to pick an Elixir version: latest, 1.11.4, etc.
ARG VARIANT=latest
FROM ghcr.io/processone/elixir:${VARIANT}
FROM ghcr.io/processone/devcontainer:latest
+4 -45
View File
@@ -1,48 +1,7 @@
{
"name": "ejabberd",
// "dockerComposeFile": "docker-compose.yml",
"build": {
"dockerfile": "Dockerfile",
"args": {
"VARIANT": "latest" // 1.11.4
}
},
"workspaceFolder": "/workspace",
// Set *default* container specific settings.json values on container create.
"settings": {
"terminal.integrated.defaultProfile.linux": "/bin/zsh",
},
// Add the IDs of extensions you want installed when the container is created.
"extensions": ["pgourlain.erlang", "jakebecker.elixir-ls"],
// Use 'forwardPorts' to make a list of ports inside the container available locally.
"forwardPorts": [5222, 5280, 5269],
// Use 'postCreateCommand' to run commands after the container is created.
// "postCreateCommand": "sh .devcontainer/post-create.sh",
// Uncomment to connect as a non-root user. See https://aka.ms/vscode-remote/containers/non-root.
"remoteUser": "vscode",
"portsAttributes": {
"1883": {
"label": "MQTT"
},
"5222": {
"label": "XMPP C2S"
},
"5223": {
"label": "Legacy XMPP C2S"
},
"5269": {
"label": "XMPP S2S"
},
"5280": {
"label": "ejabberd HTTP"
},
"5443": {
"label": "ejabberd HTTPS"
}
}
"build": {"dockerfile": "Dockerfile"},
"extensions": ["erlang-ls.erlang-ls"],
"postCreateCommand": ".devcontainer/prepare-container.sh",
"remoteUser": "vscode"
}
-8
View File
@@ -1,8 +0,0 @@
ejabberd:
image: ejabberd/ecs
ports:
- 5222:5222
- 5223:5223
- 5269:5269
- 5280:5280
- 1883:1883
+3
View File
@@ -0,0 +1,3 @@
echo "export PATH=/workspaces/ejabberd/_build/relive:$PATH" >>$HOME/.bashrc
echo "COOKIE" >$HOME/.erlang.cookie
chmod 400 $HOME/.erlang.cookie
+43
View File
@@ -1,3 +1,46 @@
.git
.win32
.examples
*.swp
*~
\#*#
.#*
.edts
*.dump
/Makefile
/config.log
/config.status
/config/releases.exs
/configure
/aclocal.m4
/*.cache
/deps/
/.deps-update/
/ebin/
/ejabberd.init
/ejabberd.service
/ejabberdctl
/ejabberdctl.example
/rel/ejabberd/
/rel/overlays/
/src/eldap_filter_yecc.erl
/vars.config
/dialyzer/
/test/*.beam
/test/*.ctc
/logs/
/priv/bin/captcha*sh
/priv/sql
/rel/ejabberd
/_build
/database/
/.rebar
/rebar.lock
/log/
Mnesia.nonode@nohost/
# Binaries created with tools/make-{binaries,installers,packages}:
/ejabberd_*.deb
/ejabberd-*.rpm
/ejabberd-*.run
/ejabberd-*.tar.gz
/.github/container/Dockerfile
+1 -2
View File
@@ -6,8 +6,7 @@ assignees: ''
---
Before creating a ticket, please consider if this should fit the discussion forum better:
https://github.com/processone/ejabberd/discussions
Before creating a ticket, please consider if this should fit the [discussion forum](https://github.com/processone/ejabberd/discussions) better.
## Environment
+6 -3
View File
@@ -7,17 +7,20 @@ assignees: ''
---
Before creating a ticket, please consider if this should fit the discussion forum better:
https://github.com/processone/ejabberd/discussions
Before creating a ticket, please consider if this should fit the [discussion forum](https://github.com/processone/ejabberd/discussions) better.
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
A clear and concise description of what the problem is. Ex. I'm always frustrated when...
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.
+162 -87
View File
@@ -1,54 +1,112 @@
FROM alpine:3.15.4 AS build
ARG VERSION=master
#' Define default build variables
## specifc ARGs for METHOD='direct'
ARG OTP_VSN='25.3'
ARG ELIXIR_VSN='1.14.4'
## specifc ARGs for METHOD='package'
ARG ALPINE_VSN='3.17'
## general ARGs
ARG UID='9000'
ARG USER='ejabberd'
ARG HOME="opt/$USER"
ARG METHOD='direct'
ARG BUILD_DIR="/$USER"
ARG VERSION='master'
RUN apk upgrade --update musl \
&& apk add \
autoconf \
automake \
bash \
build-base \
curl \
elixir \
erlang-odbc \
erlang-reltool \
expat-dev \
file \
gd-dev \
git \
jpeg-dev \
libpng-dev \
libwebp-dev \
linux-pam-dev \
openssl \
openssl-dev \
sqlite-dev \
yaml-dev \
zlib-dev
################################################################################
#' METHOD='direct' - build and install ejabberd directly from source
FROM docker.io/erlang:${OTP_VSN}-alpine AS direct
RUN apk -U add --no-cache \
autoconf \
automake \
bash \
build-base \
curl \
expat-dev \
file \
gd-dev \
git \
jpeg-dev \
libpng-dev \
libwebp-dev \
linux-pam-dev \
openssl-dev \
sqlite-dev \
yaml-dev \
zlib-dev
ARG ELIXIR_VSN
RUN wget -O - https://github.com/elixir-lang/elixir/archive/v$ELIXIR_VSN.tar.gz \
| tar -xzf -
WORKDIR elixir-$ELIXIR_VSN
RUN make install clean
RUN mix local.hex --force \
&& mix local.rebar --force
WORKDIR ejabberd
ARG BUILD_DIR
COPY / $BUILD_DIR/
RUN git clone https://github.com/processone/ejabberd.git . \
&& git checkout $VERSION \
&& mv .github/container/ejabberdctl.template . \
WORKDIR $BUILD_DIR
RUN mv .github/container/ejabberdctl.template . \
&& ./autogen.sh \
&& ./configure --with-rebar=mix --enable-all \
&& mix deps.get \
&& make deps \
&& make rel
RUN cp -r _build/prod/rel/ejabberd/ /opt/ejabberd-$VERSION \
&& mkdir -p /opt/ejabberd \
&& mv /opt/ejabberd-$VERSION/conf /opt/ejabberd/conf
WORKDIR /rootfs
ARG VERSION
ARG HOME
RUN mkdir -p $HOME $HOME-$VERSION \
&& cp -r $BUILD_DIR/_build/prod/rel/ejabberd/* $HOME-$VERSION \
&& mv $HOME-$VERSION/conf $HOME/conf
RUN DESCRIBE=$(git describe --tags) \
&& MIXVER=$(echo $DESCRIBE.0 | sed -e 's/-g.*//' -e 's/-/./' | tr -d '[:space:]') \
&& mkdir /opt/ejabberd-$VERSION/lib/ejabberd-$MIXVER/priv/bin \
&& cp tools/captcha*.sh /opt/ejabberd-$VERSION/lib/ejabberd-$MIXVER/priv/bin/
RUN cp -p $BUILD_DIR/tools/captcha*.sh $HOME-$VERSION/lib
RUN export PEM=/opt/ejabberd/conf/server.pem \
&& curl -o "/opt/ejabberd/conf/cacert.pem" 'https://curl.se/ca/cacert.pem' \
RUN find "$HOME-$VERSION/bin" -name 'ejabberd' -delete \
&& find "$HOME-$VERSION/releases" -name 'COOKIE' -delete
RUN wget -O "$HOME/conf/cacert.pem" 'https://curl.se/ca/cacert.pem' \
&& sed -i '/^loglevel:/a \ \
\nca_file: /opt/ejabberd/conf/cacert.pem \
\ncertfiles: \
\n - /opt/ejabberd/conf/server.pem' "$HOME/conf/ejabberd.yml"
################################################################################
#' METHOD='package' - install ejabberd from binary tarball package
FROM docker.io/alpine:${ALPINE_VSN} AS package
COPY tarballs/ejabberd-*-linux-musl-*.tar.gz /tmp/
WORKDIR /rootfs
ARG HOME
RUN home_root_dir=$(echo $HOME | sed 's|\(.*\)/.*|\1 |') \
&& mkdir -p $home_root_dir \
&& ARCH=$(uname -m | sed -e 's/x86_64/x64/;s/aarch64/arm64/') \
&& tar -xzf /tmp/ejabberd-*-linux-musl-$ARCH.tar.gz -C $home_root_dir
################################################################################
#' Prepare ejabberd for runtime
FROM ${METHOD} AS ejabberd
RUN apk -U add --no-cache \
git \
libcap \
openssl
WORKDIR /rootfs
ARG HOME
RUN mkdir -p usr/local/bin $HOME/conf $HOME/database $HOME/logs $HOME/upload
ARG BUILD_DIR
RUN if [ ! -d $HOME/.ejabberd-modules ]; \
then \
if [ -d $BUILD_DIR/.ejabberd-modules ]; \
then cp -r $BUILD_DIR/.ejabberd-modules $HOME; \
else git clone https://github.com/processone/ejabberd-contrib --depth 1 \
$HOME/.ejabberd-modules/sources/ejabberd-contrib; \
fi \
fi
RUN export PEM=$HOME/conf/server.pem \
&& openssl req -x509 \
-batch \
-nodes \
@@ -56,62 +114,79 @@ RUN export PEM=/opt/ejabberd/conf/server.pem \
-keyout $PEM \
-out $PEM \
-days 3650 \
-subj "/CN=localhost" \
&& sed -i '/^loglevel:/a \ \
\nca_file: /opt/ejabberd/conf/cacert.pem \
\ncertfiles: \
\n - /opt/ejabberd/conf/server.pem' "/opt/ejabberd/conf/ejabberd.yml"
-subj "/CN=localhost"
FROM alpine:3.15.4
ENV HOME=/opt/ejabberd
RUN home_root_dir=$(echo $HOME | sed 's|\(.*\)/.*|\1 |') \
&& setcap 'cap_net_bind_service=+ep' $(find $home_root_dir -name beam.smp) \
&& echo -e \
"#!/bin/sh \
\n[ -z \$ERLANG_NODE_ARG ] && export ERLANG_NODE_ARG=ejabberd@localhost \
\nexport CONFIG_DIR=/$HOME/conf \
\nexport LOGS_DIR=/$HOME/logs \
\nexport SPOOL_DIR=/$HOME/database \
\nexec /$(find $home_root_dir -name ejabberdctl) \"\$@\"" \
> usr/local/bin/ejabberdctl \
&& chmod +x usr/local/bin/* \
&& scanelf --needed --nobanner --format '%n#p' --recursive $home_root_dir \
| tr ',' '\n' \
| sort -u \
| awk 'system("[ -e $home_root_dir" $1 " ]") == 0 { next } { print "so:" $1 }' \
| sed -e "s|so:libc.so|so:libc.musl-$(uname -m).so.1|" \
> /tmp/runDeps
RUN apk upgrade --update musl \
&& apk add \
expat \
freetds \
gd \
jpeg \
libgd \
libpng \
libstdc++ \
libwebp \
linux-pam \
ncurses-libs \
openssl \
sqlite \
sqlite-libs \
unixodbc \
yaml \
zlib \
&& ln -fs /usr/lib/libtdsodbc.so.0 /usr/lib/libtdsodbc.so \
&& rm -rf /var/cache/apk/*
ARG UID
RUN chown -R $UID:$UID $HOME
COPY --from=build /opt /opt
RUN echo -e \
"#!/bin/sh \
\n[ -z \$ERLANG_NODE_ARG ] && export ERLANG_NODE_ARG=ejabberd@localhost \
\nexport CONFIG_DIR=/opt/ejabberd/conf \
\nexport LOGS_DIR=/opt/ejabberd/logs \
\nexport SPOOL_DIR=/opt/ejabberd/database \
\nexec $(find /opt -name ejabberdctl) \"\$@\"" > /usr/local/bin/ejabberdctl \
&& chmod +x /usr/local/bin/ejabberdctl
################################################################################
#' METHOD='direct' - Remove erlang/OTP & rebar3
FROM docker.io/erlang:${OTP_VSN}-alpine AS runtime-direct
RUN apk del .erlang-rundeps \
&& rm -f $(which rebar3) \
&& find /usr -type d -name 'erlang' -exec rm -rf {} + \
&& find /usr -type l -exec test ! -e {} \; -delete
RUN addgroup ejabberd -g 9000 \
&& adduser -s /bin/sh -D -G ejabberd ejabberd -u 9000 \
&& mkdir -p $HOME/conf $HOME/database $HOME/logs $HOME/upload \
&& chown -R ejabberd:ejabberd $HOME
################################################################################
#' METHOD='package' - define runtime base image
FROM docker.io/alpine:${ALPINE_VSN} AS runtime-package
################################################################################
#' Update alpine, finalize runtime environment
FROM runtime-${METHOD} AS runtime
COPY --from=ejabberd /tmp/runDeps /tmp/runDeps
RUN apk -U upgrade --available --no-cache \
&& apk add --no-cache \
$(cat /tmp/runDeps) \
so:libcap.so.2 \
so:libtdsodbc.so.0 \
tini \
&& ln -fs /usr/lib/libtdsodbc.so.0 /usr/lib/libtdsodbc.so
ARG USER
ARG UID
ARG HOME
RUN addgroup $USER -g $UID \
&& adduser -s /sbin/nologin -D -u $UID -h /$HOME -G $USER $USER
################################################################################
#' Build together production image
FROM scratch AS prod
ARG USER
ARG HOME
COPY --from=runtime / /
COPY --from=ejabberd /rootfs /
HEALTHCHECK \
--interval=5s \
--interval=1m \
--timeout=5s \
--start-period=5s \
--retries=120 \
CMD /usr/local/bin/ejabberdctl status
--retries=10 \
CMD ejabberdctl status
WORKDIR $HOME
USER ejabberd
VOLUME ["$HOME/conf", "$HOME/database", "$HOME/logs", "$HOME/upload"]
EXPOSE 1883 4369-4399 5222 5269 5280 5443
WORKDIR /$HOME
USER $USER
VOLUME ["/$HOME"]
EXPOSE 1883 4369-4399 5210 5222 5269 5280 5443
ENTRYPOINT ["/usr/local/bin/ejabberdctl"]
ENTRYPOINT ["/sbin/tini","--","ejabberdctl"]
CMD ["foreground"]
+294
View File
@@ -0,0 +1,294 @@
@echo off
::
:: ejabberd container installer for Windows
:: -------------------------------------
:: v0.4
::
:: This batch script downloads an ejabberd container image
:: and setups a docker container to run ejabberd.
::
:: 1. Download and install Docker:
::
:: If you use Windows 10, download Docker Desktop from:
:: https://www.docker.com/
::
:: If you use Windows 7 or 8, download Docker Toolbox from:
:: https://github.com/docker/toolbox/releases
:: After installation, run Docker Quickstart Installer
::
::
:: 2. Edit those options:
:: Directory where your ejabberd deployment files will be installed
:: (configuration, database, logs, ...)
::
:: In Windows 10 you can configure the path:
set INSTALL_DIR_WINDOWS10=C:\ejabberd
:: In older Windows, not configurable, it will be installed in:
:: C:\Users\%USERNAME%\ejabberd
:: Please enter the desired ejabberd domain name.
:: The domain is the visible attribute that is added to the username
:: to form the Jabber Identifier (for example: user@example.net).
:: This computer must be known on the network with this address name.
:: You can later add more in conf/ejabberd.yml
set HOST=localhost
:: Please enter the administrator username for the current
:: ejabberd installation. A Jabber account with this username
:: will be created and granted administrative privileges.
:: Don't use blankspaces in the username.
set USER=admin
:: Please provide a password for that new administrator account
set PASSWORD=
:: By default this downloads 'latest' ejabberd version,
:: but you can set a specific version, for example '22.05'
:: or the bleeding edge 'master'. See available tags in
:: https://github.com/processone/ejabberd/pkgs/container/ejabberd
set VERSION=latest
:: This tells docker what ports ejabberd will use.
:: You can later configure them in conf/ejabberd.yml
set PORTS=5180 5222 5269 5443
::
:: 3. Now save this script and run it.
::
::
:: 4. When installation is completed:
::
:: If using Windows 10, open Docker Desktop and you can:
::
:: - (>) START the ejabberd container
:: - Enter WebAdmin: click the ([->]) OPEN IN BROWSER button
:: - To try ejabberdctl, click the (>_) CLI button, then: ejabberdctl
:: - ([]) STOP the ejabberd container
::
:: If using an old Windows, open Kitematic and you can:
::
:: - START the ejabberd container
:: - Open your configuration, logs, ... in Settings > Volumes
:: - Enter WebAdmin in Settings > Hostname/Ports > click on the 5180 port
:: - Try ejabberdctl in EXEC, then: ejabberdctl
:: - STOP the ejabberd container
::
:: You can delete the container and create it again running this script,
:: the configuration and database are maintained.
::
::===============================================================
:: Check Windows version
::
::===============================================================
set INSTALL_DIR_DOCKER=c/Users/%USERNAME%/ejabberd
for /f "tokens=4-5 delims=. " %%i in ('ver') do set WVERSION=%%i.%%j
if "%wversion%" == "10.0" (
echo === Preparing paths to install in Windows 10...
set INSTALL_DIR=%INSTALL_DIR_WINDOWS10%
set VC=-v %INSTALL_DIR_WINDOWS10%\conf:/opt/ejabberd/conf
set VD=-v %INSTALL_DIR_WINDOWS10%\database:/opt/ejabberd/database
set VL=-v %INSTALL_DIR_WINDOWS10%\logs:/opt/ejabberd/logs
set VM=-v %INSTALL_DIR_WINDOWS10%\ejabberd-modules:/opt/ejabberd/.ejabberd-modules
set DOCKERDOWNLOAD="First download and install Docker Desktop from https://www.docker.com/"
) else (
echo === Preparing paths to install in Windows older than 10...
set INSTALL_DIR=C:\Users\%USERNAME%\ejabberd
set VC=-v "/%INSTALL_DIR_DOCKER%/conf:/opt/ejabberd/conf"
set VD=-v "/%INSTALL_DIR_DOCKER%/database:/opt/ejabberd/database"
set VL=-v "/%INSTALL_DIR_DOCKER%/logs:/opt/ejabberd/logs"
set VM=-v "/%INSTALL_DIR_DOCKER%/ejabberd-modules:/opt/ejabberd/.ejabberd-modules"
set DOCKERDOWNLOAD="First download and install Docker Toolbox from https://github.com/docker/toolbox/releases"
)
set VOLUMES=%VC% %VD% %VL% %VM%
::===============================================================
:: Check docker is installed
::
::===============================================================
docker version >NUL
if %ERRORLEVEL% NEQ 0 (
echo.
echo === ERROR: It seems docker is not installed!!!
echo.
echo %DOCKERDOWNLOAD%
echo === Then try to run this script again.
echo.
pause
exit 1
)
::===============================================================
:: Check install options are correctly set
::
::===============================================================
if [%PASSWORD%]==[] (
echo.
echo === ERROR: PASSWORD not set!!!
echo.
echo === Please edit this script and set the PASSWORD.
echo === Then try to run this script again.
echo.
pause
exit 1
)
::===============================================================
:: Download Docker image
::
::===============================================================
set IMAGE=ghcr.io/processone/ejabberd:%VERSION%
echo.
echo === Checking if the '%IMAGE%' container image was already downloaded...
docker image history %IMAGE% >NUL
if %ERRORLEVEL% NEQ 0 (
echo === The '%IMAGE%' container image was not downloaded yet.
echo.
echo === Downloading the '%IMAGE%' container image, please wait...
docker pull %IMAGE%
) else (
echo === The '%IMAGE%' container image was already downloaded.
)
::===============================================================
:: Create preliminary container
::
::===============================================================
echo.
echo === Checking if the 'ejabberd' container already exists...
docker container logs ejabberd
if %ERRORLEVEL% EQU 0 (
echo.
echo === The 'ejabberd' container already exists.
echo === Nothing to do, so installation finishes now.
echo === You can go to Docker Desktop and start the 'ejabberd' container.
echo.
pause
exit 1
) else (
echo === The 'ejabberd' container doesn't yet exist,
echo === so let's continue the installation process.
)
echo.
if exist %INSTALL_DIR% (
echo === The INSTALL_DIR %INSTALL_DIR% already exists.
echo === No need to create the preliminary 'ejabberd-pre' image.
) else (
echo === The INSTALL_DIR %INSTALL_DIR% doesn't exist.
echo === Let's create the preliminary 'ejabberd-pre' image.
CALL :create-ejabberd-pre
)
::===============================================================
:: Create final container
::
::===============================================================
echo.
echo === Creating the final 'ejabberd' container using %IMAGE% image...
setlocal EnableDelayedExpansion
set PS=
for %%a in (%PORTS%) do (
set PS=!PS! -p %%a:%%a
)
docker create --name ejabberd --hostname localhost %PS% %VOLUMES% %IMAGE%
echo.
echo === Installation completed.
echo.
pause
EXIT /B %ERRORLEVEL%
::===============================================================
:: Function to create preliminary container
::
::===============================================================
:create-ejabberd-pre
echo.
echo === Creating a preliminary 'ejabberd-pre' container using %IMAGE% image...
docker create --name ejabberd-pre --hostname localhost %IMAGE%
echo.
echo === Now 'ejabberd-pre' will be started.
docker container start ejabberd-pre
echo.
echo === Waiting ejabberd to be running...
set /A timeout = 10
set status=4
goto :while
:statusstart
docker exec -it ejabberd-pre ejabberdctl status
goto :statusend
:while
if %status% GTR 0 (
echo.
timeout /t 1 /nobreak >NUL
set /A timeout = timeout - 1
if %timeout% EQU 0 (
set status=-1
) else (
goto :statusstart
:statusend
set status=%ERRORLEVEL%
)
goto :while
)
echo.
echo === Setting a few options...
docker exec -it ejabberd-pre sed -i "s!- localhost!- %HOST%!g" conf/ejabberd.yml
docker exec -it ejabberd-pre sed -i "s!^acl:!acl:\n admin:\n user:\n - \"%USER%@%HOST%\"!g" conf/ejabberd.yml
docker exec -it ejabberd-pre sed -i "s!5280!5180!g" conf/ejabberd.yml
docker exec -it ejabberd-pre sed -i "s!/admin!/!g" conf/ejabberd.yml
docker exec -it ejabberd-pre ejabberdctl reload_config
echo.
echo === Registering the administrator account...
docker exec -it ejabberd-pre ejabberdctl register %USER% %HOST% %PASSWORD%
docker exec -it ejabberd-pre ejabberdctl stop
echo.
echo === Copying conf, database, logs...
mkdir %INSTALL_DIR%
mkdir %INSTALL_DIR%\conf
mkdir %INSTALL_DIR%\database
mkdir %INSTALL_DIR%\logs
mkdir %INSTALL_DIR%\ejabberd-modules
docker cp ejabberd-pre:/opt/ejabberd/conf/ %INSTALL_DIR%
docker cp ejabberd-pre:/opt/ejabberd/database/ %INSTALL_DIR%
docker cp ejabberd-pre:/opt/ejabberd/logs/ %INSTALL_DIR%
echo.
echo === Deleting the preliminary 'ejabberd-pre' container...
docker stop ejabberd-pre
docker rm ejabberd-pre
EXIT /B 0
+34 -8
View File
@@ -17,8 +17,8 @@ ERTS_VSN="{{erts_vsn}}"
ERL="{{erl}}"
IEX="{{bindir}}/iex"
EPMD="{{epmd}}"
[ -z "$ERLANG_COOKIE" ] && ERL_OPTIONS="-setcookie $(cat "${SCRIPT_DIR%/*}/releases/COOKIE")"
[ -n "$ERLANG_COOKIE" ] && [ ! -f "$HOME"/.erlang.cookie ] && echo "$ERLANG_COOKIE" > "$HOME"/.erlang.cookie && chmod 400 "$HOME"/.erlang.cookie
COOKIE_FILE="$HOME"/.erlang.cookie
[ -n "$ERLANG_COOKIE" ] && [ ! -f "$COOKIE_FILE" ] && echo "$ERLANG_COOKIE" > "$COOKIE_FILE" && chmod 400 "$COOKIE_FILE"
# check the proper system user is used
case $(id -un) in
@@ -77,11 +77,12 @@ if [ -n "$FIREWALL_WINDOW" ] ; then
ERLANG_OPTS="$ERLANG_OPTS -kernel inet_dist_listen_min ${FIREWALL_WINDOW%-*} inet_dist_listen_max ${FIREWALL_WINDOW#*-}"
fi
if [ -n "$INET_DIST_INTERFACE" ] ; then
INET_DIST_INTERFACE2=$("$ERL" -noshell -eval 'case inet:parse_address("'$INET_DIST_INTERFACE'") of {ok,IP} -> io:format("~p",[IP]); _ -> ok end.' -s erlang halt)
INET_DIST_INTERFACE2=$("$ERL" $ERLANG_OPTS -noshell -eval 'case inet:parse_address("'$INET_DIST_INTERFACE'") of {ok,IP} -> io:format("~p",[IP]); _ -> ok end.' -s erlang halt)
if [ -n "$INET_DIST_INTERFACE2" ] ; then
ERLANG_OPTS="$ERLANG_OPTS -kernel inet_dist_use_interface $INET_DIST_INTERFACE2"
fi
fi
[ -n "$ERL_DIST_PORT" ] && ERLANG_OPTS="$ERLANG_OPTS -erl_epmd_port $ERL_DIST_PORT -start_epmd false"
# if vm.args file exists in config directory, pass it to Erlang VM
[ -f "$VMARGS" ] && ERLANG_OPTS="$ERLANG_OPTS -args_file $VMARGS"
ERL_LIBS='{{libdir}}'
@@ -91,7 +92,9 @@ ERL_INETRC="$CONFIG_DIR"/inetrc
# define ejabberd parameters
EJABBERD_OPTS="$EJABBERD_OPTS\
$(sed '/^log_rotate_size/!d;s/:[ \t]*\([0-9]\{1,\}\).*/ \1/;s/:[ \t]*\(infinity\).*/ \1/;s/^/ /' "$EJABBERD_CONFIG_PATH")\
$(sed '/^log_rotate_count/!d;s/:[ \t]*\([0-9]*\).*/ \1/;s/^/ /' "$EJABBERD_CONFIG_PATH")"
$(sed '/^log_rotate_count/!d;s/:[ \t]*\([0-9]*\).*/ \1/;s/^/ /' "$EJABBERD_CONFIG_PATH")\
$(sed '/^log_burst_limit_count/!d;s/:[ \t]*\([0-9]*\).*/ \1/;s/^/ /' "$EJABBERD_CONFIG_PATH")\
$(sed '/^log_burst_limit_window_time/!d;s/:[ \t]*\([0-9]*[a-z]*\).*/ \1/;s/^/ /' "$EJABBERD_CONFIG_PATH")"
[ -n "$EJABBERD_OPTS" ] && EJABBERD_OPTS="-ejabberd $EJABBERD_OPTS"
EJABBERD_OPTS="-mnesia dir \"$SPOOL_DIR\" $MNESIA_OPTIONS $EJABBERD_OPTS -s ejabberd"
@@ -101,6 +104,7 @@ export EJABBERD_LOG_PATH
export EJABBERD_PID_PATH
export ERL_CRASH_DUMP
export ERL_EPMD_ADDRESS
export ERL_DIST_PORT
export ERL_INETRC
export ERL_MAX_PORTS
export ERL_MAX_ETS_TABLES
@@ -109,6 +113,11 @@ export CONTRIB_MODULES_CONF_DIR
export ERL_LIBS
export SCRIPT_DIR
set_dist_client()
{
[ -n "$ERL_DIST_PORT" ] && ERLANG_OPTS="$ERLANG_OPTS -dist_listen false"
}
# run command either directly or via su $INSTALLUSER
run_cmd()
{
@@ -120,8 +129,8 @@ run_cmd()
exec_cmd()
{
case $EXEC_CMD in
as_install_user) su -s /bin/sh -c '"$0" "$@"' "$INSTALLUSER" -- "$@" ;;
as_current_user) exec "$@" ;;
as_install_user) su -s /bin/sh -c 'exec "$0" "$@"' "$INSTALLUSER" -- "$@" ;;
esac
}
run_erl()
@@ -153,9 +162,11 @@ debugwarning()
echo "Please be extremely cautious with your actions,"
echo "and exit immediately if you are not completely sure."
echo ""
echo "To detach this shell from ejabberd, press:"
echo " control+c, control+c"
echo "To exit and detach this shell from ejabberd, press:"
echo " control+g and then q"
echo ""
#vt100 echo "Please do NOT use control+c in this debug shell !"
#vt100 echo ""
echo "--------------------------------------------------------------------"
echo "To bypass permanently this warning, add to ejabberdctl.cfg the line:"
echo " EJABBERD_BYPASS_WARNINGS=true"
@@ -231,6 +242,7 @@ uid()
# stop epmd if there is no other running node
stop_epmd()
{
[ -n "$ERL_DIST_PORT" ] && return
"$EPMD" -names 2>/dev/null | grep -q name || "$EPMD" -kill >/dev/null
}
@@ -238,6 +250,7 @@ stop_epmd()
# if all ok, ensure runtime directory exists and make it current directory
check_start()
{
[ -n "$ERL_DIST_PORT" ] && return
"$EPMD" -names 2>/dev/null | grep -q " ${ERLANG_NODE%@*} " && {
pgrep -f "$ERLANG_NODE" >/dev/null && {
echo "ERROR: The ejabberd node '$ERLANG_NODE' is already running."
@@ -272,6 +285,12 @@ post_waiter_loop()
TAIL=${LIST#* ; }
echo ":> ejabberdctl $HEAD"
$0 $HEAD
ctlstatus=$?
if [ $ctlstatus -ne 0 ] ; then
echo ":> FAILURE in command '$HEAD' !!! Stopping ejabberd..."
$0 halt > /dev/null
exit $ctlstatus
fi
[ "$HEAD" = "$TAIL" ] || post_waiter_loop $TAIL
}
@@ -326,37 +345,44 @@ case $1 in
;;
debug)
debugwarning
set_dist_client
exec_erl "$(uid debug)" -hidden -remsh "$ERLANG_NODE"
;;
etop)
set_dist_client
exec_erl "$(uid top)" -hidden -node "$ERLANG_NODE" -s etop \
-s erlang halt -output text
;;
iexdebug)
debugwarning
set_dist_client
exec_iex "$(uid debug)" --remsh "$ERLANG_NODE"
;;
iexlive)
livewarning
exec_iex "$ERLANG_NODE" --erl "$EJABBERD_OPTS" --app ejabberd
exec_iex "$ERLANG_NODE" --erl "$EJABBERD_OPTS"
;;
ping)
PEER=${2:-$ERLANG_NODE}
[ "$PEER" = "${PEER%.*}" ] && PS="-s"
set_dist_client
exec_cmd "$ERL" ${PS:--}name "$(uid ping "$(hostname $PS)")" $ERLANG_OPTS \
-noinput -hidden -eval 'io:format("~p~n",[net_adm:ping('"'$PEER'"')])' \
-s erlang halt -output text
;;
started)
set_dist_client
wait_status 0 30 2 # wait 30x2s before timeout
;;
stopped)
set_dist_client
wait_status 3 30 2 && stop_epmd # wait 30x2s before timeout
;;
post_waiter)
post_waiter_waiting
;;
*)
set_dist_client
run_erl "$(uid ctl)" -hidden -noinput -s ejabberd_ctl \
-extra "$ERLANG_NODE" $NO_TIMEOUT "$@"
result=$?
-18
View File
@@ -1,18 +0,0 @@
version: 2
updates:
- package-ecosystem: "docker"
directory: "/.github/container/"
schedule:
interval: "weekly"
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"
- package-ecosystem: "mix"
directory: "/"
schedule:
interval: "weekly"
+97 -64
View File
@@ -25,18 +25,8 @@ jobs:
strategy:
fail-fast: false
matrix:
otp: ['19.3', '24', '25.0-rc3']
include:
- otp: '19.3'
rebar: 2
os: ubuntu-18.04
- otp: '24'
rebar: 3
os: ubuntu-20.04
- otp: '25.0-rc3'
rebar: 3
os: ubuntu-20.04
runs-on: ${{ matrix.os }}
otp: ['20.0', '25.3', '26.1']
runs-on: ubuntu-20.04
services:
redis:
image: redis
@@ -45,10 +35,10 @@ jobs:
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Test shell scripts
if: matrix.otp == 24
if: matrix.otp == '25.3'
run: |
shellcheck test/ejabberd_SUITE_data/gencerts.sh
shellcheck tools/captcha.sh
@@ -56,35 +46,46 @@ jobs:
shellcheck -x ejabberdctl.template
- name: Get specific Erlang/OTP
uses: ErlGang/setup-erlang@master
if: matrix.otp != 24
if: matrix.otp != '25.3'
uses: erlef/setup-beam@v1
with:
otp-version: ${{ matrix.otp }}
- name: Get a compatible Rebar
if: matrix.rebar == 2
- name: Get a compatible Rebar3
if: matrix.otp <= '21.3'
run: |
rm rebar
wget https://github.com/processone/ejabberd/raw/21.12/rebar
chmod +x rebar
rm rebar3
wget https://github.com/processone/ejabberd/raw/21.12/rebar3
chmod +x rebar3
- name: Install MS SQL Server
run: |
docker run -d -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=ejabberd_Test1" \
-v $(pwd)/test/docker/db/mssql/initdb/initdb_mssql.sql:/initdb_mssql.sql:ro \
-v $(pwd)/sql/mssql.sql:/mssql.sql:ro \
-v $(pwd)/sql/mssql.new.sql:/mssql.new.sql:ro \
-p 1433:1433 --name ejabberd-mssql "mcr.microsoft.com/mssql/server:2019-latest"
sleep 10
- name: Prepare databases
run: |
docker exec ejabberd-mssql /opt/mssql-tools/bin/sqlcmd -U SA -P ejabberd_Test1 -S localhost -i /initdb_mssql.sql
docker exec ejabberd-mssql /opt/mssql-tools/bin/sqlcmd -U SA -P ejabberd_Test1 -S localhost -d ejabberd_test -i /mssql.sql
sudo systemctl start mysql.service
sudo systemctl start postgresql.service
mysql -u root -proot -e "CREATE DATABASE ejabberd_test;"
mysql -u root -proot -e "CREATE USER 'ejabberd_test'@'localhost'
IDENTIFIED BY 'ejabberd_test';"
mysql -u root -proot -e "CREATE DATABASE ejabberd_test;"
mysql -u root -proot -e "GRANT ALL ON ejabberd_test.*
TO 'ejabberd_test'@'localhost';"
mysql -u root -proot ejabberd_test < sql/mysql.sql
mysql -u ejabberd_test -pejabberd_test ejabberd_test < sql/mysql.sql
pg_isready
sudo -u postgres psql -c "CREATE DATABASE ejabberd_test;"
sudo -u postgres psql -c "CREATE USER ejabberd_test
WITH PASSWORD 'ejabberd_test';"
sudo -u postgres psql -c "CREATE DATABASE ejabberd_test;"
sudo -u postgres psql ejabberd_test -f sql/pg.sql
sudo -u postgres psql -c "GRANT ALL PRIVILEGES
ON DATABASE ejabberd_test TO ejabberd_test;"
PGPASSWORD="ejabberd_test" psql -h localhost -U ejabberd_test ejabberd_test -f sql/pg.sql
sudo -u postgres psql ejabberd_test -c "GRANT ALL PRIVILEGES ON ALL
TABLES IN SCHEMA public
TO ejabberd_test;"
@@ -95,35 +96,22 @@ jobs:
- name: Prepare libraries
run: |
sudo apt-get -qq update
sudo apt-get -y purge libgd3 nginx
sudo apt-get -qq install libexpat1-dev libgd-dev libpam0g-dev \
libsqlite3-dev libwebp-dev libyaml-dev
- name: Prepare rebar
run: |
echo '{xref_ignores, [{eldap_filter_yecc, return_error, 2}
]}.' >>rebar.config
echo '{xref_checks, [deprecated_function_calls, deprecated_functions,
locals_not_used, undefined_function_calls, undefined_functions]}.
% Disabled: exports_not_used,' >>rebar.config
echo '{dialyzer, [{get_warnings, true}, {plt_extra_apps, [cache_tab,
eimp, epam, esip, ezlib, fast_tls, fast_xml, fast_yaml,
mqtree, p1_acme, p1_mysql, p1_oauth2, p1_pgsql, p1_utils, pkix,
sqlite3, stringprep, stun, xmpp, yconf]} ]}.' >>rebar.config
echo '{ct_extra_params, "-verbosity 20"}.' >>rebar.config
echo "{ct_opts, [{verbosity, 20}, {keep_logs, 20}]}." >>rebar.config
- name: Remove syntax_tools from release
run: sed -i 's|, syntax_tools||g' src/ejabberd.app.src.script
- name: Cache rebar
uses: actions/cache@v3
with:
path: |
deps/
dialyzer/
ebin/
~/.cache/rebar3/
key: ${{matrix.otp}}-${{matrix.rebar}}-${{hashFiles('rebar.config')}}
key: ${{matrix.otp}}-${{hashFiles('rebar.config')}}
- name: Download test logs
if: matrix.otp == 24 && github.repository == 'processone/ejabberd'
if: matrix.otp == '25.3' && github.repository == 'processone/ejabberd'
continue-on-error: true
run: |
mkdir -p _build/test
@@ -134,8 +122,7 @@ jobs:
- name: Compile
run: |
./autogen.sh
[[ ${{ matrix.rebar }} = 2 ]] && REBAR=rebar || REBAR=`which rebar3`
./configure --with-rebar=$REBAR \
./configure --with-rebar=./rebar3 \
--prefix=/tmp/ejabberd \
--enable-all \
--disable-elixir \
@@ -148,13 +135,9 @@ jobs:
- run: make hooks
- run: make options
- run: make xref
- run: |
make dialyzer
[ ${{ matrix.rebar }} = 3 ] && true \
|| { cat dialyzer/error.log ; test ! -s dialyzer/error.log ; }
- run: make dialyzer
- name: Check Production Release
if: matrix.rebar == 3
run: |
make rel
RE=_build/prod/rel/ejabberd
@@ -166,7 +149,6 @@ jobs:
grep -q "is stopped in" $RE/logs/ejabberd.log
- name: Check Development Release
if: matrix.rebar == 3
run: |
make dev
RE=_build/dev/rel/ejabberd
@@ -177,22 +159,18 @@ jobs:
cat $RE/logs/ejabberd.log
grep -q "is stopped in" $RE/logs/ejabberd.log
- name: Run tests (OTP 19.3)
if: matrix.otp == '19.3'
id: ct2
run: make test
- name: Run tests
if: matrix.otp != '19.3'
id: ct
run: |
(cd priv && ln -sf ../sql)
sed -i -e 's/ct:pal/ct:log/' test/suite.erl
COMMIT=`echo $GITHUB_SHA | cut -c 1-7`
DATE=`date +%s`
REF_NAME=`echo $GITHUB_REF_NAME | tr "/" "_"`
NODENAME=$DATE@$GITHUB_RUN_NUMBER-$GITHUB_ACTOR-$REF_NAME-$COMMIT
LABEL=`git show -s --format=%s | cut -c 1-30`
rebar3 ct --name $NODENAME --label "$LABEL"
rebar3 cover
./rebar3 ct --name $NODENAME --label "$LABEL"
./rebar3 cover
- name: Check results
if: always() && (steps.ct.outcome != 'skipped' || steps.ct2.outcome != 'skipped')
@@ -213,11 +191,11 @@ jobs:
find logs/ -name exunit.log -exec cat '{}' ';'
- name: Send to coveralls
if: matrix.otp == 24
if: matrix.otp == '25.3'
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
DIAGNOSTIC=1 rebar3 as test coveralls send
DIAGNOSTIC=1 ./rebar3 as test coveralls send
curl -v -k https://coveralls.io/webhook \
--header "Content-Type: application/json" \
--data '{"repo_name":"$GITHUB_REPOSITORY",
@@ -241,28 +219,69 @@ jobs:
CTRUN=`ls -la _build/test/logs/last | sed 's|.*-> ||'`
echo "::notice::View CT results: https://processone.github.io/ecil/logs/$CTRUN/"
- name: Check for changes to trigger schema upgrade test
uses: dorny/paths-filter@v2
id: filter
with:
filters: |
sql:
- 'sql/**'
- 'src/mod_admin_update_sql.erl'
- name: Prepare for schema upgrade test
id: prepupgradetest
if: ${{ steps.filter.outputs.sql == 'true' }}
run: |
[[ -d logs ]] && rm -rf logs
[[ -d _build/test/logs ]] && rm -rf _build/test/logs || true
sed -i 's|update_sql, false|update_sql, true|g' test/suite.erl
- name: Run DB tests on upgraded schema (mssql, mysql, pgsql)
run: CT_BACKENDS=mssql,mysql,pgsql make test
if: always() && steps.prepupgradetest.outcome != 'skipped'
id: ctupgradedschema
- name: Check results
if: always() && steps.ctupgradedschema.outcome != 'skipped'
run: |
[[ -d _build ]] && ln -s _build/test/logs/last/ logs || true
ln `find logs/ -name suite.log` logs/suite.log
grep 'TEST COMPLETE' logs/suite.log
grep -q 'TEST COMPLETE,.* 0 failed' logs/suite.log
test $(find logs/ -empty -name error.log)
- name: View logs failures
if: failure() && steps.ctupgradedschema.outcome != 'skipped'
run: |
cat logs/suite.log | awk \
'BEGIN{RS="\n=case";FS="\n"} /=result\s*failed/ {print "=case" $0}'
find logs/ -name error.log -exec cat '{}' ';'
find logs/ -name exunit.log -exec cat '{}' ';'
- name: Prepare new schema
run: |
[[ -d logs ]] && rm -rf logs
[[ -d _build/test/logs ]] && rm -rf _build/test/logs || true
docker exec ejabberd-mssql /opt/mssql-tools/bin/sqlcmd -U SA -P ejabberd_Test1 -S localhost -Q "drop database [ejabberd_test];"
docker exec ejabberd-mssql /opt/mssql-tools/bin/sqlcmd -U SA -P ejabberd_Test1 -S localhost -Q "drop login [ejabberd_test];"
mysql -u root -proot -e "DROP DATABASE ejabberd_test;"
sudo -u postgres psql -c "DROP DATABASE ejabberd_test;"
docker exec ejabberd-mssql /opt/mssql-tools/bin/sqlcmd -U SA -P ejabberd_Test1 -S localhost -i /initdb_mssql.sql
docker exec ejabberd-mssql /opt/mssql-tools/bin/sqlcmd -U SA -P ejabberd_Test1 -S localhost -d ejabberd_test -i /mssql.new.sql
mysql -u root -proot -e "CREATE DATABASE ejabberd_test;"
mysql -u root -proot -e "GRANT ALL ON ejabberd_test.*
TO 'ejabberd_test'@'localhost';"
mysql -u root -proot ejabberd_test < sql/mysql.new.sql
mysql -u ejabberd_test -pejabberd_test ejabberd_test < sql/mysql.new.sql
sudo -u postgres psql -c "CREATE DATABASE ejabberd_test;"
sudo -u postgres psql ejabberd_test -f sql/pg.new.sql
sudo -u postgres psql -c "GRANT ALL PRIVILEGES
ON DATABASE ejabberd_test TO ejabberd_test;"
PGPASSWORD="ejabberd_test" psql -h localhost -U ejabberd_test ejabberd_test -f sql/pg.new.sql
sudo -u postgres psql ejabberd_test -c "GRANT ALL PRIVILEGES ON ALL
TABLES IN SCHEMA public
TO ejabberd_test;"
sudo -u postgres psql ejabberd_test -c "GRANT ALL PRIVILEGES ON ALL
SEQUENCES IN SCHEMA public
TO ejabberd_test;"
sudo sed -i 's|new_schema, false|new_schema, true|g' test/suite.erl
- run: CT_BACKENDS=mysql,pgsql make test
sed -i 's|new_schema, false|new_schema, true|g' test/suite.erl
- name: Run DB tests on new schema (mssql, mysql, pgsql)
run: CT_BACKENDS=mssql,mysql,pgsql make test
id: ctnewschema
- name: Check results
if: always() && steps.ctnewschema.outcome != 'skipped'
@@ -279,3 +298,17 @@ jobs:
'BEGIN{RS="\n=case";FS="\n"} /=result\s*failed/ {print "=case" $0}'
find logs/ -name error.log -exec cat '{}' ';'
find logs/ -name exunit.log -exec cat '{}' ';'
- name: Upload CT logs
if: failure()
uses: actions/upload-artifact@v3
with:
name: ejabberd-ct-logs-${{matrix.otp}}
#
# Appending the wildcard character ("*") is a trick to make
# "ejabberd-packages" the root directory of the uploaded ZIP file:
#
# https://github.com/actions/upload-artifact#upload-using-multiple-paths-and-exclusions
#
path: _build/test/logs
retention-days: 14
+65 -10
View File
@@ -1,6 +1,8 @@
name: Container
on:
schedule:
- cron: '22 2 */6 * *' # every 6 days to avoid gha cache being evicted
push:
paths-ignore:
- '.devcontainer/**'
@@ -17,18 +19,69 @@ env:
jobs:
container:
name: Container
runs-on: ubuntu-20.04
runs-on: ubuntu-latest
permissions:
packages: write
steps:
- name: Check out repository code
uses: actions/checkout@v3
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Cache build directory
uses: actions/cache@v3
with:
path: ~/build/
key: ${{runner.os}}-ctr-ct-ng-1.25.0
- name: Get erlang/OTP version for bootstrapping
run: |
echo "OTP_VSN=$(awk '/^otp_vsn=/ {{gsub(/[^0-9.]/, ""); print}}' tools/make-binaries)" >> $GITHUB_ENV
echo "ELIXIR_VSN=$(awk '/^elixir_vsn=/ {{gsub(/[^0-9.]/, ""); print}}' tools/make-binaries)" >> $GITHUB_ENV
- name: Install prerequisites
run: |
sudo apt-get -qq update
sudo apt-get -qq install makeself
# https://github.com/crosstool-ng/crosstool-ng/blob/master/testing/docker/ubuntu21.10/Dockerfile
sudo apt-get -qq install build-essential autoconf bison flex gawk
sudo apt-get -qq install help2man libncurses5-dev libtool libtool-bin
sudo apt-get -qq install python3-dev texinfo unzip
- name: Install erlang/OTP
uses: erlef/setup-beam@v1
with:
otp-version: ${{ env.OTP_VSN }}
elixir-version: ${{ env.ELIXIR_VSN }}
version-type: strict
- name: Remove Elixir Matchers
run: |
echo "::remove-matcher owner=elixir-mixCompileWarning::"
echo "::remove-matcher owner=elixir-credoOutputDefault::"
echo "::remove-matcher owner=elixir-mixCompileError::"
echo "::remove-matcher owner=elixir-mixTestFailure::"
echo "::remove-matcher owner=elixir-dialyzerOutputDefault::"
- name: Build musl-libc based binary archives
run: |
sed -i "s|targets='.*'|targets='x86_64-linux-musl aarch64-linux-musl'|" tools/make-binaries
mv .github/container/ejabberdctl.template .
CHECK_DEPS=false tools/make-binaries
- name: Collect packages
run: |
mkdir tarballs
mv ejabberd-*.tar.gz tarballs
- name: Checkout ejabberd-contrib
uses: actions/checkout@v4
with:
repository: processone/ejabberd-contrib
path: .ejabberd-modules/sources/ejabberd-contrib
- name: Log in to the Container registry
uses: docker/login-action@v1.14.1
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
@@ -36,11 +89,11 @@ jobs:
- name: Get git describe
id: gitdescribe
run: echo "::set-output name=ver::$(git describe --tags)"
run: echo "ver=$(git describe --tags)" >> $GITHUB_OUTPUT
- name: Extract metadata (tags, labels) for Docker
id: meta
uses: docker/metadata-action@v3.8.0
uses: docker/metadata-action@v5
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
labels: |
@@ -49,19 +102,21 @@ jobs:
org.opencontainers.image.vendor=ProcessOne
- name: Set up QEMU
uses: docker/setup-qemu-action@v1
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
uses: docker/setup-buildx-action@v3
- name: Build and push Docker image
uses: docker/build-push-action@v2.10.0
uses: docker/build-push-action@v5
with:
build-args: |
METHOD=package
VERSION=${{ steps.gitdescribe.outputs.ver }}
cache-from: type=gha
cache-to: type=gha,mode=max
context: .github/container
context: .
file: .github/container/Dockerfile
labels: ${{ steps.meta.outputs.labels }}
platforms: linux/amd64,linux/arm64
push: true
+3 -3
View File
@@ -27,7 +27,7 @@ jobs:
uses: actions/cache@v3
with:
path: ~/build/
key: ${{runner.os}}-ct-ng-1.25.0-RC2
key: ${{runner.os}}-ct-ng-1.26.0
- name: Install prerequisites
run: |
sudo apt-get -qq update
@@ -39,9 +39,9 @@ jobs:
- name: Install FPM
run: |
gem install --no-document --user-install fpm
echo $HOME/.gem/ruby/*/bin >> $GITHUB_PATH
echo $HOME/.local/share/gem/ruby/*/bin >> $GITHUB_PATH
- name: Check out repository code
uses: actions/checkout@v3
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Build binary archives
+28 -87
View File
@@ -31,30 +31,23 @@ jobs:
strategy:
fail-fast: false
matrix:
otp: ['19.3', '21.3', '22.0', '24.3', '25.0-rc3']
otp: ['20.3', '25.3', '26']
rebar: ['rebar', 'rebar3']
include:
- otp: '19.3'
os: ubuntu-18.04
- otp: '21.3'
os: ubuntu-20.04
- otp: '22.0'
os: ubuntu-20.04
- otp: '24.3'
os: ubuntu-20.04
- otp: '25.0-rc3'
os: ubuntu-20.04
runs-on: ${{ matrix.os }}
exclude:
- otp: '26'
rebar: 'rebar'
runs-on: ubuntu-latest
container:
image: erlang:${{ matrix.otp }}
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Prepare libraries
run: |
apt-get -qq update
apt-get purge -y libgd3
apt-get -qq install libexpat1-dev libgd-dev libpam0g-dev \
libsqlite3-dev libwebp-dev libyaml-dev
@@ -110,22 +103,36 @@ jobs:
strategy:
fail-fast: false
matrix:
otp: ['21.3', '22.0', '24.3']
elixir: ['1.10.3', '1.11.4', '1.12.3', '1.13.0']
otp: ['21.3', '25.0', '26']
elixir: ['1.10.3', '1.11.4', '1.12.3', '1.13.4', '1.14.5', '1.15']
exclude:
- otp: '21.3'
elixir: '1.12.3'
- otp: '21.3'
elixir: '1.13.0'
- otp: '24.3'
elixir: '1.13.4'
- otp: '21.3'
elixir: '1.14.5'
- otp: '21.3'
elixir: '1.15'
- otp: '25.0'
elixir: '1.10.3'
- otp: '24.3'
- otp: '25.0'
elixir: '1.11.4'
- otp: '25.0'
elixir: '1.12.3'
- otp: '26'
elixir: '1.10.3'
- otp: '26'
elixir: '1.11.4'
- otp: '26'
elixir: '1.12.3'
- otp: '26'
elixir: '1.13.4'
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Get specific Erlang/OTP
uses: erlef/setup-beam@v1
@@ -136,6 +143,7 @@ jobs:
- name: Prepare libraries
run: |
sudo apt-get -qq update
sudo apt-get -y purge libgd3 nginx
sudo apt-get -qq install libexpat1-dev libgd-dev libpam0g-dev \
libsqlite3-dev libwebp-dev libyaml-dev
@@ -199,70 +207,3 @@ jobs:
cat _build/prod/rel/ejabberd/logs/error.log
cat _build/dev/rel/ejabberd/logs/ejabberd.log
cat _build/dev/rel/ejabberd/logs/error.log
mix25:
name: Mix 25
strategy:
fail-fast: false
matrix:
otp: ['25.0-rc3']
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v3
- name: Get specific Erlang/OTP
uses: ErlGang/setup-erlang@master
with:
otp-version: ${{ matrix.otp }}
- name: Get Elixir
run: |
wget https://packages.erlang-solutions.com/erlang-solutions_2.0_all.deb \
&& sudo dpkg -i erlang-solutions_2.0_all.deb
sudo apt-get update
sudo apt-get install elixir
mix local.hex --force
mix local.rebar --force
- name: Prepare libraries
run: |
sudo apt-get -qq update
sudo apt-get -qq install libexpat1-dev libgd-dev libpam0g-dev \
libsqlite3-dev libwebp-dev libyaml-dev
- name: Compile
run: |
./autogen.sh
./configure --with-rebar=mix \
--prefix=/tmp/ejabberd \
--enable-all \
--disable-elixir \
--disable-odbc
mix deps.get
make
- run: make xref
- name: Test rel
run: |
make rel
_build/prod/rel/ejabberd/bin/ejabberdctl start \
&& _build/prod/rel/ejabberd/bin/ejabberdctl started
_build/prod/rel/ejabberd/bin/ejabberdctl register user1 localhost s0mePass
_build/prod/rel/ejabberd/bin/ejabberdctl registered_users localhost
_build/prod/rel/ejabberd/bin/ejabberdctl stop \
&& _build/prod/rel/ejabberd/bin/ejabberdctl stopped
cat _build/prod/rel/ejabberd/logs/*
- name: Test dev
run: |
make dev
_build/dev/rel/ejabberd/bin/ejabberdctl start \
&& _build/dev/rel/ejabberd/bin/ejabberdctl started
_build/dev/rel/ejabberd/bin/ejabberdctl register user1 localhost s0mePass
_build/dev/rel/ejabberd/bin/ejabberdctl registered_users localhost
_build/dev/rel/ejabberd/bin/ejabberdctl stop \
&& _build/dev/rel/ejabberd/bin/ejabberdctl stopped
cat _build/dev/rel/ejabberd/logs/*
+3
View File
@@ -5,8 +5,10 @@
\#*#
.#*
.edts
.tool-versions
*.dump
/Makefile
/doc
/config.log
/config.status
/config/releases.exs
@@ -15,6 +17,7 @@
/*.cache
/deps/
/.deps-update/
/.ejabberd-modules/
/ebin/
/ejabberd.init
/ejabberd.service
+5
View File
@@ -0,0 +1,5 @@
{
"recommendations": [
"erlang-ls.erlang-ls"
]
}
+49
View File
@@ -0,0 +1,49 @@
{
"version": "0.2.0",
"configurations": [
{
"name": "Relive",
"type": "erlang",
"request": "launch",
"runinterminal": [
".vscode/relive.sh"
],
"projectnode": "ejabberd@localhost",
"cookie": "COOKIE",
"timeout": 300,
"cwd": "${workspaceRoot}"
},
{
"name": "Relive (alternate)",
"type": "erlang",
"request": "launch",
"runinterminal": [
"./rebar3", "shell",
"--apps", "ejabberd",
"--config", "rel/relive.config",
"--script", "rel/relive.escript",
"--name", "ejabberd@localhost",
"--setcookie", "COOKIE"
],
"projectnode": "ejabberd@localhost",
"cookie": "COOKIE",
"timeout": 300,
"cwd": "${workspaceRoot}"
},
{
"name": "Attach",
"type": "erlang",
"request": "attach",
"runinterminal": [
"./rebar3", "shell",
"--sname", "clean@localhost",
"--setcookie", "COOKIE",
"--start-clean"
],
"projectnode": "ejabberd@localhost",
"cookie": "COOKIE",
"timeout": 300,
"cwd": "${workspaceRoot}"
}
]
}
Vendored Executable
+6
View File
@@ -0,0 +1,6 @@
[ ! -f Makefile ] \
&& ./autogen.sh \
&& ./configure --with-rebar=./rebar3 \
&& make deps
make relive
+13
View File
@@ -0,0 +1,13 @@
{
"editor.tabSize": 8,
"remote.portsAttributes": {
"1883": {"label": "MQTT", "onAutoForward": "silent"},
"4369": {"label": "EPMD", "onAutoForward": "silent"},
"5222": {"label": "XMPP C2S", "onAutoForward": "silent"},
"5223": {"label": "XMPP C2S (legacy)", "onAutoForward": "silent"},
"5269": {"label": "XMPP S2S", "onAutoForward": "silent"},
"5280": {"label": "HTTP", "onAutoForward": "silent"},
"5443": {"label": "HTTPS", "onAutoForward": "silent"},
"7777": {"label": "XMPP SOCKS5 (proxy65)", "onAutoForward": "silent"}
}
}
+464 -3
View File
@@ -1,3 +1,464 @@
# Version 23.10
Compilation:
- Erlang/OTP: Raise the requirement to Erlang/OTP 20.0 as a minimum
- CI: Update tests to Erlang/OTP 26 and recent Elixir
- Move Xref and Dialyzer options from workflows to `rebar.config`
- Add sections to `rebar.config` to organize its content
- Dialyzer dirty workarounds because `re:mp()` is not an exported type
- When installing module already configured, keep config as example
- Elixir 1.15 removed support for `--app`
- Elixir: Improve support to stop external modules written in Elixir
- Elixir: Update syntax of function calls as recommended by Elixir compiler
- Elixir: When building OTP release with mix, keep `ERLANG_NODE=ejabberd@localhost`
- `ejabberdctl`: Pass `ERLANG_OPTS` when calling `erl` to parse the `INET_DIST_INTERFACE` ([#4066](https://github.com/processone/ejabberd/issues/#4066)
Commands:
- `create_room_with_opts`: Fix typo and move examples to `args_example` ([#4080](https://github.com/processone/ejabberd/issues/#4080))
- `etop`: Let `ejabberdctl etop` work in a release (if `observer` application is available)
- `get_roster`: Command now returns groups in a list instead of newlines ([#4088](https://github.com/processone/ejabberd/issues/#4088))
- `halt`: New command to halt ejabberd abruptly with an error status code
- `ejabberdctl`: Fix calling ejabberdctl command with wrong number of arguments with Erlang 26
- `ejabberdctl`: Improve printing lists in results
- `ejabberdctl`: Support `policy=user` in the help and return proper arguments
- `ejabberdctl`: Document how to stop a debug shell: control+g
Container:
- Dockerfile: Add missing dependency for mssql databases
- Dockerfile: Reorder stages and steps for consistency
- Dockerfile: Use Alpine as base for `METHOD=package`
- Dockerfile: Rename packages to improve compatibility
- Dockerfile: Provide specific OTP and elixir vsn for direct compilation
- Halt ejabberd if a command in `CTL_ON_` fails during ejabberd startup
Core:
- `auth_external_user_exists_check`: New option ([#3377](https://github.com/processone/ejabberd/issues/#3377))
- `gen_mod`: Extend `gen_mod` API to simplify hooks and IQ handlers registration
- `gen_mod`: Add shorter forms for `gen_mod` hook/`iq_handler` API
- `gen_mod`: Update modules to the new `gen_mod` API
- `install_contrib_modules`: New option to define contrib modules to install automatically
- `unix_socket`: New listener option, useful when setting unix socket files ([#4059](https://github.com/processone/ejabberd/issues/#4059))
- `ejabberd_systemd`: Add a few debug messages
- `ejabberd_systemd`: Avoid using `gen_server` timeout ([#4054](https://github.com/processone/ejabberd/issues/#4054))([#4058](https://github.com/processone/ejabberd/issues/#4058))
- `ejabberd_listener`: Increase default listen queue backlog value to 128, which is the default value on both Linux and FreeBSD ([#4025](https://github.com/processone/ejabberd/issues/#4025))
- OAuth: Handle `badpass` error message
- When sending message on behalf of user, trigger `user_send_packet` ([#3990](https://github.com/processone/ejabberd/issues/#3990))
- Web Admin: In roster page move the `AddJID` textbox to top ([#4067](https://github.com/processone/ejabberd/issues/#4067))
- Web Admin: Show a warning when visiting webadmin with non-privileged account ([#4089](https://github.com/processone/ejabberd/issues/#4089))
Docs:
- Example configuration: clarify 5223 tls options; specify s2s shaper
- Make sure that `policy=user` commands have `host` instead of `server` arg in docs
- Improve syntax of many command descriptions for the Docs site
- Move example Perl extauth script from ejabberd git to Docs site
- Remove obsolete example files, and add link in Docs to the archived copies
Installers (`make-binaries`):
- Bump Erlang/OTP version to 26.1.1, and other dependencies
- Remove outdated workaround
- Don't build Linux-PAM examples
- Fix check for current Expat version
- Apply minor simplifications
- Don't duplicate config entries
- Don't hard-code musl version
- Omit unnecessary glibc setting
- Set kernel version for all builds
- Let curl fail on HTTP errors
Modules:
- `mod_muc_log`: Add trailing backslash to URLs shown in disco info
- `mod_muc_occupantid`: New module with support for XEP-0421 Occupant Id ([#3397](https://github.com/processone/ejabberd/issues/#3397))
- `mod_muc_rtbl`: Better error handling in ([#4050](https://github.com/processone/ejabberd/issues/#4050))
- `mod_private`: Add support for XEP-0402 PEP Native Bookmarks
- `mod_privilege`: Don't fail to edit roster ([#3942](https://github.com/processone/ejabberd/issues/#3942))
- `mod_pubsub`: Fix usage of `plugins` option, which produced `default_node_config` ignore ([#4070](https://github.com/processone/ejabberd/issues/#4070))
- `mod_pubsub`: Add `pubsub_delete_item` hook
- `mod_pubsub`: Report support of `config-node-max` in pep
- `mod_pubsub`: Relay pubsub iq queries to muc members without using bare jid ([#4093](https://github.com/processone/ejabberd/issues/#4093))
- `mod_pubsub`: Allow pubsub node owner to overwrite items published by other persons
- `mod_push_keepalive`: Delay `wake_on_start`
- `mod_push_keepalive`: Don't let hook crash
- `mod_push`: Add `notify_on` option
- `mod_push`: Set `last-message-sender` to bare JID
- `mod_register_web`: Make redirect to page that end with `/` ([#3177](https://github.com/processone/ejabberd/issues/#3177))
- `mod_shared_roster_ldap`: Don't crash in `get_member_jid` on empty output ([#3614](https://github.com/processone/ejabberd/issues/#3614))
MUC:
- Add support to register nick in a room ([#3455](https://github.com/processone/ejabberd/issues/#3455))
- Convert `allow_private_message` MUC room option to `allowpm` ([#3736](https://github.com/processone/ejabberd/issues/#3736))
- Update xmpp version to send `roomconfig_changesubject` in disco#info ([#4085](https://github.com/processone/ejabberd/issues/#4085))
- Fix crash when loading room from DB older than ffa07c6, 23.04
- Fix support to retract a MUC room message
- Don't always store messages passed through `muc_filter_message` ([#4083](https://github.com/processone/ejabberd/issues/#4083))
- Pass also MUC room retract messages over the `muc_filter_message` ([#3397](https://github.com/processone/ejabberd/issues/#3397))
- Pass MUC room private messages over the `muc_filter_message` too ([#3397](https://github.com/processone/ejabberd/issues/#3397))
- Store the subject author JID, and run `muc_filter_message` when sending subject ([#3397](https://github.com/processone/ejabberd/issues/#3397))
- Remove existing role information for users that are kicked from room ([#4035](https://github.com/processone/ejabberd/issues/#4035))
- Expand rule "mucsub subscribers are members in members only rooms" to more places
SQL:
- Add ability to force alternative upsert implementation in mysql
- Properly parse mysql version even if it doesn't have type tag
- Use prepared statement with mysql
- Add alternate version of mysql upsert
- `ejabberd_auth_sql`: Reset scram fields when setting plain password
- `mod_privacy_sql`: Fix return values from `calculate_diff`
- `mod_privacy_sql`: Optimize `set_list`
- `mod_privacy_sql`: Use more efficient way to calculate changes in `set_privacy_list`
# Version 23.04
General:
- New `s2s_out_bounce_packet` hook
- Re-allow anonymous connection for connection without client certificates ([#3985](https://github.com/processone/ejabberd/issues/3985))
- Stop `ejabberd_system_monitor` before stopping node
- `captcha_url` option now accepts `auto` value, and it's the default
- `mod_mam`: Add support for XEP-0425: Message Moderation
- `mod_mam_sql`: Fix problem with results of mam queries using rsm with max and before
- `mod_muc_rtbl`: New module for Real-Time Block List for MUC rooms ([#4017](https://github.com/processone/ejabberd/issues/4017))
- `mod_roster`: Set roster name from XEP-0172, or the stored one ([#1611](https://github.com/processone/ejabberd/issues/1611))
- `mod_roster`: Preliminary support to store extra elements in subscription request ([#840](https://github.com/processone/ejabberd/issues/840))
- `mod_pubsub`: Pubsub xdata fields `max_item/item_expira/children_max` use `max` not `infinity`
- `mod_vcard_xupdate`: Invalidate `vcard_xupdate` cache on all nodes when vcard is updated
Admin:
- `ext_mod`: Improve support for loading `*.so` files from `ext_mod` dependencies
- Improve output in `gen_html_doc_for_commands` command
- Fix ejabberdctl output formatting ([#3979](https://github.com/processone/ejabberd/issues/3979))
- Log HTTP handler exceptions
MUC:
- New command `get_room_history`
- Persist `none` role for outcasts
- Try to populate room history from mam when unhibernating
- Make `mod_muc_room:set_opts` process persistent flag first
- Allow passing affiliations and subscribers to `create_room_with_opts` command
- Store state in db in `mod_muc:create_room()`
- Make subscribers members by default
SQL schemas:
- Fix a long standing bug in new schema migration
- `update_sql` command: Many improvements in new schema migration
- `update_sql` command: Add support to migrate MySQL too
- Change PostgreSQL SERIAL to BIGSERIAL columns
- Fix minor SQL schema inconsistencies
- Remove unnecessary indexes
- New SQL schema migrate fix
MS SQL:
- MS SQL schema fixes
- Add `new` schema for MS SQL
- Add MS SQL support for new schema migration
- Minor MS SQL improvements
- Fix MS SQL error caused by `ORDER BY` in subquery
SQL Tests:
- Add support for running tests on MS SQL
- Add ability to run tests on upgraded DB
- Un-deprecate `ejabberd_config:set_option/2`
- Use python3 to run `extauth.py` for tests
- Correct README for creating test docker MS SQL DB
- Fix TSQLlint warnings in MSSQL test script
Testing:
- Fix Shellcheck warnings in shell scripts
- Fix Remark-lint warnings
- Fix Prospector and Pylint warnings in test `extauth.py`
- Stop testing ejabberd with Erlang/OTP 19.3, as Github Actions no longer supports ubuntu-18.04
- Test only with oldest OTP supported (20.0), newest stable (25.3) and bleeding edge (26.0-rc2)
- Upload Common Test logs as artifact in case of failure
`ecs` container image:
- Update Alpine to 3.17 to get Erlang/OTP 25 and Elixir 1.14
- Add `tini` as runtime init
- Set `ERLANG_NODE` fixed to `ejabberd@localhost`
- Upload images as artifacts to Github Actions
- Publish tag images automatically to ghcr.io
`ejabberd` container image:
- Update Alpine to 3.17 to get Erlang/OTP 25 and Elixir 1.14
- Add `METHOD` to build container using packages ([#3983](https://github.com/processone/ejabberd/issues/3983))
- Add `tini` as runtime init
- Detect runtime dependencies automatically
- Remove unused Mix stuff: ejabberd script and static COOKIE
- Copy captcha scripts to `/opt/ejabberd-*/lib` like the installers
- Expose only `HOME` volume, it contains all the required subdirs
- ejabberdctl: Don't use `.../releases/COOKIE`, it's no longer included
Installers:
- make-binaries: Bump versions, e.g. erlang/otp to 25.3
- make-binaries: Fix building with erlang/otp v25.x
- make-packages: Fix for installers workflow, which didn't find lynx
# Version 23.01
General:
- Add `misc:uri_parse/2` to allow declaring default ports for protocols
- CAPTCHA: Add support to define module instead of path to script
- Clustering: Handle `mnesia_system_event mnesia_up` when other node joins this ([#3842](https://github.com/processone/ejabberd/issues/3842))
- ConverseJS: Don't set i18n option because Converse enforces it instead of browser lang ([#3951](https://github.com/processone/ejabberd/issues/3951))
- ConverseJS: Try to redirect access to files `mod_conversejs` to CDN when there is no local copies
- ext_mod: compile C files and install them in ejabberd's `priv`
- ext_mod: Support to get module status from Elixir modules
- make-binaries: reduce log output
- make-binaries: Bump zlib version to 1.2.13
- MUC: Don't store mucsub presence events in offline storage
- MUC: `hibernation_time` is not an option worth storing in room state ([#3946](https://github.com/processone/ejabberd/issues/3946))
- Multicast: Jid format when `multicastc` was cached ([#3950](https://github.com/processone/ejabberd/issues/3950))
- mysql: Pass `ssl` options to mysql driver
- pgsql: Do not set `standard_conforming_strings` to `off` ([#3944](https://github.com/processone/ejabberd/issues/3944))
- OAuth: Accept `jid` as a HTTP URL query argument
- OAuth: Handle when client is not identified
- PubSub: Expose the `pubsub#type` field in `disco#info` query to the node ([#3914](https://github.com/processone/ejabberd/issues/3914))
- Translations: Update German translation
Admin:
- `api_permissions`: Fix option crash when doesn't have `who:` section
- `log_modules_fully`: New option to list modules that will log everything
- `outgoing_s2s_families`: Changed option's default to IPv6, and fall back to IPv4
- Fix bash completion when using Relive or other install methods
- Fix portability issue with some shells ([#3970](https://github.com/processone/ejabberd/issues/3970))
- Allow admin command to subscribe new users to `members_only` rooms
- Use alternative `split/2` function that works with Erlang/OTP as old as 19.3
- Silent warning in OTP24 about not specified `cacerts` in SQL connections
- Fix compilation warnings with Elixir 1.14
DOAP:
- Support extended `-protocol` erlang attribute
- Add extended RFCs and XEP details to some protocol attributes
- `tools/generate-doap.sh`: New script to generate DOAP file, add `make doap` ([#3915](https://github.com/processone/ejabberd/issues/3915))
- `ejabberd.doap`: New DOAP file describing ejabberd supported protocols
MQTT:
- Add MQTT bridge module
- Add support for certificate authentication in MQTT bridge
- Implement reload in MQTT bridge
- Add support for websockets to MQTT bridge
- Recognize ws5/wss5 urls in MQTT bridge
- `mqtt_publish`: New hook for MQTT publish event
- `mqtt_(un)subscribe`: New hooks for MQTT subscribe & unsubscribe events
VSCode:
- Improve `.devcontainer` to use use devcontainer image and `.vscode`
- Add `.vscode` files to instruct VSCode how to run ejabberd
- Add Erlang LS default configuration
- Add Elvis default configuration
# Version 22.10
Core:
- Add `log_burst_limit_*` options ([#3865](https://github.com/processone/ejabberd/issues/3865))
- Support `ERL_DIST_PORT` option to work without epmd
- Auth JWT: Catch all errors from `jose_jwt:verify` and log debugging details ([#3890](https://github.com/processone/ejabberd/issues/3890))
- CAPTCHA: Support `@VERSION@` and `@SEMVER@` in `captcha_cmd` option ([#3835](https://github.com/processone/ejabberd/issues/3835))
- HTTP: Fix unix socket support ([#3894](https://github.com/processone/ejabberd/issues/3894))
- HTTP: Handle invalid values in `X-Forwarded-For` header more gracefuly
- Listeners: Let module take over socket
- Listeners: Don't register listeners that failed to start in config reload
- `mod_admin_extra`: Handle empty roster group names
- `mod_conversejs`: Fix crash when mod_register not enabled ([#3824](https://github.com/processone/ejabberd/issues/3824))
- `mod_host_meta`: Complain at start if listener is not encrypted
- `mod_ping`: Fix regression on `stop_ping` in clustering context ([#3817](https://github.com/processone/ejabberd/issues/3817))
- `mod_pubsub`: Don't crash on command failures
- `mod_shared_roster`: Fix cache invalidation
- `mod_shared_roster_ldap`: Update roster_get hook to use `#roster_item{}`
- `prosody2ejabberd`: Fix parsing of scram password from prosody
MIX:
- Fix MIX's filter_nodes
- Return user jid on join
- `mod_mix_pam`: Add new MIX namespaces to disco features
- `mod_mix_pam`: Add handling of IQs with newer MIX namespaces
- `mod_mix_pam`: Do roster pushes on join/leave
- `mod_mix_pam`: Parse sub elements of the mix join remote result
- `mod_mix_pam`: Provide MIX channels as roster entries via hook
- `mod_mix_pam`: Display joined channels on webadmin page
- `mod_mix_pam`: Adapt to renaming of `participant-id` from mix_roster_channel record
- `mod_roster`: Change hook type from `#roster{}` to `#roster_item{}`
- `mod_roster`: Respect MIX `<annotate/>` setting
- `mod_roster`: Adapt to change of mix_annotate type to boolean in roster_query
- `mod_shared_roster`: Fix wrong hook type `#roster{}` (now `#roster_item{}`)
MUC:
- Store role, and use it when joining a moderated room ([#3330](https://github.com/processone/ejabberd/issues/3330))
- Don't persist `none` role ([#3330](https://github.com/processone/ejabberd/issues/3330))
- Allow MUC service admins to bypass max_user_conferences limitation
- Show allow_query_users room option in disco info ([#3830](https://github.com/processone/ejabberd/issues/3830))
- Don't set affiliation to `none` if it's already `none` in `mod_muc_room:process_item_change/3`
- Fix mucsub unsubscribe notification payload to have muc_unsubcribe in it
- Allow muc_{un}subscribe hooks to modify sent packets
- Pass room state to muc_{un}subscribed hook
- The archive_msg export fun requires MUC Service for room archives
- Export `mod_muc_admin:get_room_pid/2`
- Export function for getting room diagnostics
SQL:
- Handle errors reported from begin/commit inside transaction
- Make connection close errors bubble up from inside sql transaction
- Make first sql reconnect wait shorter time
- React to sql driver process exit earlier
- Skip connection exit message when we triggered reconnection
- Add syntax_tools to applications, required when using ejabberd_sql_pt ([#3869](https://github.com/processone/ejabberd/issues/3869))
- Fix mam delete_old_messages_batch for sql backend
- Use `INSERT ... ON DUPLICATE KEY UPDATE` for upsert on mysql
- Update mysql library
- Catch mysql connection being close earlier
Build:
- `make all`: Generate start scripts here, not in `make install` ([#3821](https://github.com/processone/ejabberd/issues/3821))
- `make clean`: Improve this and "distclean"
- `make deps`: Ensure deps configuration is ran when getting deps ([#3823](https://github.com/processone/ejabberd/issues/3823))
- `make help`: Update with recent changes
- `make install`: Don't leak DESTDIR in files copied by 'make install'
- `make options`: Fix error reporting on OTP24+
- `make update`: configure also in this case, similarly to `make deps`
- Add definition to detect OTP older than 25, used by ejabberd_auth_http
- Configure eimp with mix to detect image convert properly ([#3823](https://github.com/processone/ejabberd/issues/3823))
- Remove unused macro definitions detected by rebar3_hank
- Remove unused header files which content is already in xmpp library
Container:
- Get ejabberd-contrib sources to include them
- Copy `.ejabberd-modules` directory if available
- Do not clone repo inside container build
- Use `make deps`, which performs additional steps ([#3823](https://github.com/processone/ejabberd/issues/3823))
- Support `ERL_DIST_PORT` option to work without epmd
- Copy `ejabberd-docker-install.bat` from docker-ejabberd git and rename it
- Set a less frequent healthcheck to reduce CPU usage ([#3826](https://github.com/processone/ejabberd/issues/3826))
- Fix build instructions, add more podman examples
Installers:
- make-binaries: Include CAPTCHA script with release
- make-binaries: Edit rebar.config more carefully
- make-binaries: Fix linking of EIMP dependencies
- make-binaries: Fix GitHub release version checks
- make-binaries: Adjust Mnesia spool directory path
- make-binaries: Bump Erlang/OTP version to 24.3.4.5
- make-binaries: Bump Expat and libpng versions
- make-packages: Include systemd unit with RPM
- make-packages: Fix permissions on RPM systems
- make-installers: Support non-root installation
- make-installers: Override code on upgrade
- make-installers: Apply cosmetic changes
External modules:
- ext_mod: Support managing remote nodes in the cluster
- ext_mod: Handle correctly when COMMIT.json not found
- Don't bother with COMMIT.json user-friendly feature in automated user case
- Handle not found COMMIT.json, for example in GH Actions
- Add WebAdmin page for managing external modules
Workflows Actions:
- Update workflows to Erlang 25
- Update workflows: Ubuntu 18 is deprecated and 22 is added
- CI: Remove syntax_tools from applications, as fast_xml fails Dialyzer
- Runtime: Add Xref options to be as strict as CI
# Version 22.05
Core
- C2S: Don't expect that socket will be available in `c2s_terminated` hook
- Event handling process hook tracing
- Guard against `erlang:system_info(logical_processors)` not always returning a number
- `domain_balancing`: Allow for specifying `type` only, without specifying `component_number`
MQTT
- Add TLS certificate authentication for MQTT connections
- Fix login when generating client id, keep connection record (#3593)
- Pass property name as expected in mqtt_codec (fixes login using MQTT 5)
- Support MQTT subscriptions spread over the cluster (#3750)
MUC
- Attach meta field with real jid to mucsub subscription events
- Handle user removal
- Stop empty MUC rooms 30 seconds after creation
- `default_room_options`: Update options configurable
- `subscribe_room_many_max_users`: New option in `mod_muc_admin`
mod_conversejs
- Improved options to support `@HOST@` and `auto` values
- Set `auth` and `register` options based on ejabberd configuration
- `conversejs_options`: New option
- `conversejs_resources`: New option
PubSub
- `mod_pubsub`: Allow for limiting `item_expire` value
- `mod_pubsub`: Unsubscribe JID on whitelist removal
- `node_pep`: Add config-node and multi-items features (#3714)
SQL
- Improve compatibility with various db engine versions
- Sync old-to-new schema script with reality (#3790)
- Slight improvement in MSSQL testing support, but not yet complete
Other Modules
- `auth_jwt`: Checking if an user is active in SM for a JWT authenticated user (#3795)
- `mod_configure`: Implement Get List of Registered/Online Users from XEP-0133
- `mod_host_meta`: New module to serve host-meta files, see XEP-0156
- `mod_mam`: Store all mucsub notifications not only message notifications
- `mod_ping`: Delete ping timer if resource is gone after the ping has been sent
- `mod_ping`: Don't send ping if resource is gone
- `mod_push`: Fix notifications for pending sessions (XEP-0198)
- `mod_push`: Keep push session ID on session resume
- `mod_shared_roster`: Adjust special group cache size
- `mod_shared_roster`: Normalize JID on unset_presence (#3752)
- `mod_stun_disco`: Fix parsing of IPv6 listeners
Dependencies
- autoconf: Supported from 2.59 to the new 2.71
- fast_tls: Update to 1.1.14 to support OpenSSL 3
- jiffy: Update to 1.1.1 to support Erlang/OTP 25.0-rc1
- luerl: Update to 1.0.0, now available in hex.pm
- lager: This dependency is used only when Erlang is older than 22
- rebar2: Updated binary to work from Erlang/OTP 22 to 25
- rebar3: Updated binary to work from Erlang/OTP 22 to 25
- `make update`: Fix when used with rebar 3.18
Compile
- `mix release`: Copy `include/` files for ejabberd, deps and otp, in `mix.exs`
- `rebar3 release`: Fix ERTS path in `ejabberdctl`
- `configure.ac`: Set default ejabberd version number when not using git
- `mix.exs`: Move some dependencies as optional
- `mix.exs`: No need to use Distillery, Elixir has built-in support for OTP releases (#3788)
- `tools/make-binaries`: New script for building Linux binaries
- `tools/make-installers`: New script for building command line installers
Start
- New `make relive` similar to `ejabberdctl live` without installing
- `ejabberdctl`: Fix some warnings detected by ShellCheck
- `ejabberdctl`: Mention in the help: `etop`, `ping` and `started`/`stopped`
- `make rel`: Switch to paths: `conf/`, `database/`, `logs/`
- `mix.exs`: Add `-boot` and `-boot_var` in `ejabberdctl` instead of adding `vm.args`
- `tools/captcha.sh`: Fix some warnings detected by ShellCheck
Commands
- Accept more types of ejabberdctl commands arguments as JSON-encoded
- `delete_old_mam_messages_batch`: New command with rate limit
- `delete_old_messages_batch`: New command with rate limit
- `get_room_occupants_number`: Don't request the whole MUC room state (#3684, #1964)
- `get_vcard`: Add support for MUC room vCard
- `oauth_revoke_token`: Add support to work with all backends
- `room_unused_*`: Optimize commands in SQL by reusing `created_at`
- `rooms_unused_...`: Let `get_all_rooms` handle `global` argument (#3726)
- `stop|restart`: Terminate ejabberd_sm before everything else to ensure sessions closing (#3641)
- `subscribe_room_many`: New command
Translations
- Updated Catalan
- Updated French
- Updated German
- Updated Portuguese
- Updated Portuguese (Brazil)
- Updated Spanish
Workflows
- CI: Publish CT logs and Cover on failure to an external GH Pages repo
- CI: Test shell scripts using ShellCheck (#3738)
- Container: New workflow to build and publish containers
- Installers: Add job to create draft release
- Installers: New workflow to build binary packages
- Runtime: New workflow to test compilation, rel, starting and ejabberdctl
# Version 21.12
Commands
@@ -217,7 +678,7 @@ Translations:
changed to logging disabled
- Increase default shaper limits (this should help with delays for
clients that are using jingle)
- Fix couple compatibility problems which prevented working on
- Fix couple compatibility problems which prevented working on
erlang R19
- Fix sending presence unavailable when session terminates for
clients that only send directed presences (helps with sometimes
@@ -232,7 +693,7 @@ Translations:
- Add support of ssl connection when connection to mysql
database (configured with `sql_ssl: true` option)
- Experimental support for cockroachdb when configured
with postgres connector
with postgres connector
- Add cache and optimize queries issued by `mod_shared_roster`,
this should greatly improve performance of this module when
used with `sql` backend
@@ -529,6 +990,6 @@ Translations:
# Version 18.12
* MAM data store compression
* Proxy protocol support (http://www.haproxy.org/download/1.8/doc/proxy-protocol.txt)
* Proxy protocol support
* MUC Self-Ping optimization (XEP-0410)
* Bookmarks conversion (XEP-0411)
+1 -1
View File
@@ -34,7 +34,7 @@ This Code of Conduct applies both within project spaces and in public spaces whe
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at conduct@process-one.net. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at the email address: conduct AT process-one.net. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.
+11 -11
View File
@@ -15,20 +15,20 @@ Requirements
To compile ejabberd you need:
- GNU Make
- GCC
- Libexpat ≥ 1.95
- Libyaml ≥ 0.1.4
- Erlang/OTP ≥ 19.3
- OpenSSL ≥ 1.0.0
- GNU Make
- GCC
- Libexpat ≥ 1.95
- Libyaml ≥ 0.1.4
- Erlang/OTP ≥ 20.0
- OpenSSL ≥ 1.0.0
Other optional libraries are:
- Zlib ≥ 1.2.3, for Stream Compression support (XEP-0138)
- PAM library, for Pluggable Authentication Modules (PAM)
- ImageMagick's Convert program and Ghostscript fonts, for CAPTCHA
challenges
- Elixir ≥ 1.10.3, to support Elixir, and alternative to rebar/rebar3
- Zlib ≥ 1.2.3, for Stream Compression support (XEP-0138)
- PAM library, for Pluggable Authentication Modules (PAM)
- ImageMagick's Convert program and Ghostscript fonts, for CAPTCHA
challenges
- Elixir ≥ 1.10.3, to support Elixir, and alternative to rebar/rebar3
If your system splits packages in libraries and development headers,
install the development packages too.
+217 -55
View File
@@ -1,11 +1,10 @@
[![GitHub tag (latest SemVer)](https://img.shields.io/github/v/tag/processone/ejabberd?sort=semver&logo=embarcadero&label=&color=49c0c4)](https://github.com/processone/ejabberd/tags)
[![GitHub Container](https://img.shields.io/github/v/tag/processone/ejabberd?label=container&sort=semver)](https://github.com/processone/ejabberd/pkgs/container/ejabberd)
[![Docker Image Version (latest semver)](https://img.shields.io/docker/v/ejabberd/ecs?label=docker)](https://hub.docker.com/r/ejabberd/ecs/)
[![GitHub Container](https://img.shields.io/github/v/tag/processone/ejabberd?label=ejabberd&sort=semver&logo=docker)](https://github.com/processone/ejabberd/pkgs/container/ejabberd)
ejabberd Container
==================
`ejabberd` Container Image
==========================
[ejabberd][home] is an open-source,
robust, scalable and extensible realtime platform built using [Erlang/OTP][erlang],
@@ -17,26 +16,26 @@ that includes [XMPP][xmpp] Server, [MQTT][mqtt] Broker and [SIP][sip] Service.
[mqtt]: https://mqtt.org/
[sip]: https://en.wikipedia.org/wiki/Session_Initiation_Protocol
This document explains how to use the
[ejabberd container images](https://github.com/processone/ejabberd/pkgs/container/ejabberd)
available in the GitHub Container Registry,
This document explains how to use the `ejabberd` container image available in
[ghcr.io/processone/ejabberd](https://github.com/processone/ejabberd/pkgs/container/ejabberd),
built using the files in `.github/container/`.
This image is based in Alpine 3.17, includes Erlang/OTP 25.3 and Elixir 1.14.4.
Alternatively, there are also
[ejabberd-ecs Docker images](https://hub.docker.com/r/ejabberd/ecs/)
available in Docker Hub,
Alternatively, there is also the `ecs` container image available in
[docker.io/ejabberd/ecs](https://hub.docker.com/r/ejabberd/ecs/),
built using the
[docker-ejabberd/ecs](https://github.com/processone/docker-ejabberd/tree/master/ecs)
repository.
Check the [differences between `ejabberd` and `ecs` images](https://github.com/processone/docker-ejabberd/blob/master/ecs/HUB-README.md#alternative-image-in-github).
If you are using a Windows operating system, check the tutorials mentioned in
[ejabberd Docs > Docker Image](https://docs.ejabberd.im/admin/installation/#docker-image).
Start ejabberd
--------------
==============
### With default configuration
## With default configuration
Start ejabberd in a new container:
@@ -60,7 +59,7 @@ docker restart ejabberd
```
### Start with Erlang console attached
## Start with Erlang console attached
Start ejabberd with an Erlang console attached using the `live` command:
@@ -71,7 +70,7 @@ docker run --name ejabberd -it -p 5222:5222 ghcr.io/processone/ejabberd live
That uses the default configuration file and XMPP domain "localhost".
### Start with your configuration and database
## Start with your configuration and database
Pass a configuration file as a volume
and share the local directory to store database:
@@ -93,9 +92,9 @@ and the volumes you mount must grant proper rights to that account.
Next steps
----------
==========
### Register the administrator account
## Register the administrator account
The default ejabberd configuration does not grant admin privileges
to any account,
@@ -112,7 +111,7 @@ Then edit conf/ejabberd.yml and add the ACL as explained in
[ejabberd Docs: Administration Account](https://docs.ejabberd.im/admin/installation/#administration-account)
### Check ejabberd log files
## Check ejabberd log files
Check the content of the log files inside the container,
even if you do not put it on a shared persistent drive:
@@ -122,7 +121,7 @@ docker exec -it ejabberd tail -f logs/ejabberd.log
```
### Inspect the container files
## Inspect the container files
The container uses Alpine Linux. Start a shell inside the container:
@@ -131,7 +130,7 @@ docker exec -it ejabberd sh
```
### Open ejabberd debug console
## Open ejabberd debug console
Open an interactive debug Erlang console attached to a running ejabberd in a running container:
@@ -140,7 +139,7 @@ docker exec -it ejabberd ejabberdctl debug
```
### CAPTCHA
## CAPTCHA
ejabberd includes two example CAPTCHA scripts.
If you want to use any of them, first install some additional required libraries:
@@ -154,10 +153,9 @@ Now update your ejabberd configuration file, for example:
docker exec -it ejabberd vi conf/ejabberd.yml
```
and add the required options:
```
captcha_cmd: /opt/ejabberd-22.04/lib/ejabberd-22.04/priv/bin/captcha.sh
captcha_url: https://localhost:5443/captcha
and add this option:
```yaml
captcha_cmd: /opt/ejabberd-22.04/lib/captcha.sh
```
Finally, reload the configuration file or restart the container:
@@ -165,11 +163,23 @@ Finally, reload the configuration file or restart the container:
docker exec ejabberd ejabberdctl reload_config
```
If the CAPTCHA image is not visible, there may be a problem generating it
(the ejabberd log file may show some error message);
or the image URL may not be correctly detected by ejabberd,
in that case you can set the correct URL manually, for example:
```yaml
captcha_url: https://localhost:5443/captcha
```
For more details about CAPTCHA options, please check the
[CAPTCHA](https://docs.ejabberd.im/admin/configuration/basic/#captcha)
documentation section.
Advanced Container Configuration
--------------------------------
================================
### Ports
## Ports
This container image exposes the ports:
@@ -179,9 +189,10 @@ This container image exposes the ports:
- `5443`: With encryption, used for admin interface, API, CAPTCHA, OAuth, Websockets and XMPP BOSH.
- `1883`: Used for MQTT
- `4369-4399`: EPMD and Erlang connectivity, used for `ejabberdctl` and clustering
- `5210`: Erlang connectivity when `ERL_DIST_PORT` is set, alternative to EPMD
### Volumes
## Volumes
ejabberd produces two types of data: log files and database spool files (Mnesia).
This is the kind of data you probably want to store on a persistent or local drive (at least the database).
@@ -202,15 +213,15 @@ It's possible to install additional ejabberd modules using volumes,
explains how to install an additional module using docker-compose.
### Commands on start
## Commands on start
The ejabberdctl script reads the `CTL_ON_CREATE` environment variable
the first time the docker container is started,
the first time the container is started,
and reads `CTL_ON_START` every time the container is started.
Those variables can contain one ejabberdctl command,
or several commands separated with the blankspace and `;` characters.
Example usage (see full example [docker-compose.yml](https://github.com/processone/docker-ejabberd/issues/64#issuecomment-887741332)):
Example usage (or check the [full example](#customized-example)):
```yaml
environment:
- CTL_ON_CREATE=register admin localhost asd
@@ -220,7 +231,7 @@ Example usage (see full example [docker-compose.yml](https://github.com/processo
```
### Clustering
## Clustering
When setting several containers to form a
[cluster of ejabberd nodes](https://docs.ejabberd.im/admin/guide/clustering/),
@@ -233,6 +244,23 @@ For this you can either:
- edit `conf/ejabberdctl.cfg` and set variables `ERLANG_NODE` and `ERLANG_COOKIE`
- set the environment variables `ERLANG_NODE_ARG` and `ERLANG_COOKIE`
Example to connect a local `ejabberdctl` to a containerized ejabberd:
1. When creating the container, export port 5210, and set `ERLANG_COOKIE`:
```
docker run --name ejabberd -it \
-e ERLANG_COOKIE=`cat $HOME/.erlang.cookie` \
-p 5210:5210 -p 5222:5222 \
ghcr.io/processone/ejabberd
```
2. Set `ERL_DIST_PORT=5210` in ejabberdctl.cfg of container and local ejabberd
3. Restart the container
4. Now use `ejabberdctl` in your local ejabberd deployment
To connect using a local `ejabberd` script:
```
ERL_DIST_PORT=5210 _build/dev/rel/ejabberd/bin/ejabberd ping
```
Example using environment variables (see full example [docker-compose.yml](https://github.com/processone/docker-ejabberd/issues/64#issuecomment-887741332)):
```yaml
environment:
@@ -241,11 +269,10 @@ Example using environment variables (see full example [docker-compose.yml](https
```
Generating a Container Image
----------------------------
Build a Container Image
=======================
This container image includes ejabberd as a standalone OTP release built using Elixir.
That OTP release is configured with:
- `mix.exs`: Customize ejabberd release
@@ -253,36 +280,171 @@ That OTP release is configured with:
- `config/runtime.exs`: Customize ejabberd paths
- `ejabberd.yml.template`: ejabberd default config file
Build ejabberd Community Server base image from ejabberd master on GitHub:
## Direct build
Build ejabberd Community Server container image from ejabberd master git repository:
```bash
VERSION = master
docker build \
--build-arg VERSION=$(VERSION) \
-t personal/ejabberd:$(VERSION) \
.github/container
```
Build ejabberd Community Server base image for a given ejabberd version,
both for amd64 and arm64 architectures:
```bash
VERSION = 22.05
docker buildx build \
--platform=linux/amd64,linux/arm64
--build-arg VERSION=$(VERSION) \
-t personal/ejabberd:$(VERSION) \
.github/container
-t personal/ejabberd \
-f .github/container/Dockerfile \
.
```
## Podman build
It's also possible to use podman instead of docker, just notice:
- `EXPOSE 4369-4399` port range is not supported, remove that in Dockerfile
- It mentions that `healthcheck` is not supported by the Open Container Initiative image format
- If you want to start with command `live`, add environment variable `EJABBERD_BYPASS_WARNINGS=true`
```bash
VERSION = master
podman build \
--build-arg VERSION=$(VERSION) \
-t ja:$(version) \
.github/container
-t ejabberd \
-f .github/container/Dockerfile \
.
podman run --name eja1 -d -p 5222:5222 localhost/ejabberd
podman exec eja1 ejabberdctl status
podman exec -it eja1 sh
podman stop eja1
```
## Package build for `arm64`
By default, `.github/container/Dockerfile` builds this container by directly compiling ejabberd,
it is a fast and direct method.
However, a problem with QEMU prevents building the container in QEMU using Erlang/OTP 25
for the `arm64` architecture.
Providing `--build-arg METHOD=package` is an alternate method to build the container
used by the Github Actions workflow that provides `amd64` and `arm64` container images.
It first builds an ejabberd binary package, and later installs it in the image.
That method avoids using QEMU, so it can build `arm64` container images, but is extremely
slow the first time it's used, and consequently not recommended for general use.
In this case, to build the ejabberd container image for arm64 architecture:
```bash
docker buildx build \
--build-arg METHOD=package \
--platform linux/arm64 \
-t personal/ejabberd:$VERSION \
-f .github/container/Dockerfile \
.
```
Composer Examples
=================
## Minimal Example
This is the barely minimal file to get a usable ejabberd.
Store it as `docker-compose.yml`:
```yaml
services:
main:
image: ghcr.io/processone/ejabberd
container_name: ejabberd
ports:
- "5222:5222"
- "5269:5269"
- "5280:5280"
- "5443:5443"
```
Create and start the container with the command:
```bash
docker-compose up
```
## Customized Example
This example shows the usage of several customizations:
it uses a local configuration file,
stores the mnesia database in a local path,
registers an account when it's created,
and checks the number of registered accounts every time it's started.
Download or copy the ejabberd configuration file:
```bash
wget https://raw.githubusercontent.com/processone/ejabberd/master/ejabberd.yml.example
mv ejabberd.yml.example ejabberd.yml
```
Create the database directory and allow the container access to it:
```bash
mkdir database
sudo chown 9000:9000 database
```
Now write this `docker-compose.yml` file:
```yaml
version: '3.7'
services:
main:
image: ghcr.io/processone/ejabberd
container_name: ejabberd
environment:
- CTL_ON_CREATE=register admin localhost asd
- CTL_ON_START=registered_users localhost ;
status
ports:
- "5222:5222"
- "5269:5269"
- "5280:5280"
- "5443:5443"
volumes:
- ./ejabberd.yml:/opt/ejabberd/conf/ejabberd.yml:ro
- ./database:/opt/ejabberd/database
```
## Clustering Example
In this example, the main container is created first.
Once it is fully started and healthy, a second container is created,
and once ejabberd is started in it, it joins the first one.
An account is registered in the first node when created,
and it should exist in the second node after join.
Notice that in this example the main container does not have access
to the exterior; the replica exports the ports and can be accessed.
```yaml
version: '3.7'
services:
main:
image: ghcr.io/processone/ejabberd
container_name: ejabberd
environment:
- ERLANG_NODE_ARG=ejabberd@main
- ERLANG_COOKIE=dummycookie123
- CTL_ON_CREATE=register admin localhost asd
replica:
image: ghcr.io/processone/ejabberd
container_name: replica
depends_on:
main:
condition: service_healthy
ports:
- "5222:5222"
- "5269:5269"
- "5280:5280"
- "5443:5443"
environment:
- ERLANG_NODE_ARG=ejabberd@replica
- ERLANG_COOKIE=dummycookie123
- CTL_ON_CREATE=join_cluster ejabberd@main
- CTL_ON_START=registered_users localhost ;
status
```
+2 -3
View File
@@ -34,9 +34,9 @@ To save your and our time, we will systematically close all issues that are requ
support and redirect people to the section you are reading right now.
Other channels for support are:
- [ejabberd Mailing List][list]
- [ejabberd XMPP room][muc]: ejabberd@conference.process-one.net
- ejabberd XMPP room: [ejabberd@conference.process-one.net][muc]
- [ejabberd XMPP room logs][logs]
- [ejabberd Mailing List][list]
### <a name="issue"></a> Found an Issue or Bug?
@@ -147,4 +147,3 @@ gives us the option to relicense the code with a more permissive license in the
[doc-repo]: https://github.com/processone/docs.ejabberd.im
[developer-setup]: https://docs.ejabberd.im/developer/
[cla]: https://www.process-one.net/resources/ejabberd-cla.pdf
[license]: https://github.com/processone/ejabberd/blob/master/COPYING
+103 -89
View File
@@ -10,27 +10,27 @@ exec_prefix = @exec_prefix@
DESTDIR =
# /etc/ejabberd/
ETCDIR = $(DESTDIR)@sysconfdir@/ejabberd
ETCDIR = @sysconfdir@/ejabberd
# /bin/
BINDIR = $(DESTDIR)@bindir@
BINDIR = @bindir@
# /sbin/
SBINDIR = $(DESTDIR)@sbindir@
SBINDIR = @sbindir@
# /lib/
LIBDIR = $(DESTDIR)@libdir@
LIBDIR = @libdir@
# /lib/ejabberd/
EJABBERDDIR = $(DESTDIR)@libdir@/ejabberd
EJABBERDDIR = @libdir@/ejabberd
# /share/doc/ejabberd
PACKAGE_TARNAME = @PACKAGE_TARNAME@
datarootdir = @datarootdir@
DOCDIR = $(DESTDIR)@docdir@
DOCDIR = @docdir@
# /share/doc/man/man5
MANDIR = $(DESTDIR)@mandir@/man5
MANDIR = @mandir@/man5
# /usr/lib/ejabberd/ebin/
BEAMDIR = $(EJABBERDDIR)/ebin
@@ -66,10 +66,10 @@ SQLDIR = $(PRIVDIR)/sql
LUADIR = $(PRIVDIR)/lua
# /var/lib/ejabberd/
SPOOLDIR = $(DESTDIR)@localstatedir@/lib/ejabberd
SPOOLDIR = @localstatedir@/lib/ejabberd
# /var/log/ejabberd/
LOGDIR = $(DESTDIR)@localstatedir@/log/ejabberd
LOGDIR = @localstatedir@/log/ejabberd
INSTALLUSER=@INSTALLUSER@
# if no user was enabled, don't set privileges or ownership
@@ -109,9 +109,10 @@ ifeq "$(REBAR_VER)" "6"
DEPSBASE=_build
DEPSDIR=$(DEPSBASE)/dev/lib
GET_DEPS= deps.get
CONFIGURE_DEPS=
CONFIGURE_DEPS=(cd deps/eimp; ./configure)
EBINDIR=$(DEPSDIR)/ejabberd/ebin
XREFOPTIONS=graph
CLEANARG=--deps
REBARREL=MIX_ENV=prod $(REBAR) release --overwrite
REBARDEV=MIX_ENV=dev $(REBAR) release --overwrite
RELIVECMD=escript rel/relive.escript && MIX_ENV=dev RELIVE=true iex --name ejabberd@localhost -S mix run
@@ -131,6 +132,7 @@ endif
CONFIGURE_DEPS=$(REBAR) configure-deps
EBINDIR=$(DEPSDIR)/ejabberd/ebin
XREFOPTIONS=
CLEANARG=--all
REBARREL=$(REBAR) as prod tar
REBARDEV=REBAR_PROFILE=dev $(REBAR) release
RELIVECMD=$(REBAR) relive
@@ -145,6 +147,7 @@ else
CONFIGURE_DEPS=$(REBAR) configure-deps
EBINDIR=ebin
XREFOPTIONS=
CLEANARG=
REBARREL=$(REBAR) generate
REBARDEV=
RELIVECMD=@echo "Rebar2 detected... relive not supported.\
@@ -152,7 +155,7 @@ else
endif
endif
all: deps src
all: scripts deps src
deps: $(DEPSDIR)/.got
@@ -161,9 +164,9 @@ $(DEPSDIR)/.got:
rm -rf $(DEPSDIR)/.built
mkdir -p $(DEPSDIR)
$(REBAR) $(GET_DEPS) && :> $(DEPSDIR)/.got
$(CONFIGURE_DEPS)
$(DEPSDIR)/.built: $(DEPSDIR)/.got
$(CONFIGURE_DEPS)
$(REBAR) compile && :> $(DEPSDIR)/.built
src: $(DEPSDIR)/.built
@@ -173,6 +176,7 @@ update:
rm -rf $(DEPSDIR)/.got
rm -rf $(DEPSDIR)/.built
$(REBAR) $(UPDATEDEPS) && :> $(DEPSDIR)/.got
$(CONFIGURE_DEPS)
xref: all
$(REBAR) $(SKIPDEPS) xref $(XREFOPTIONS)
@@ -186,6 +190,9 @@ options: all
translations:
tools/prepare-tr.sh $(DEPSDIR)
doap:
tools/generate-doap.sh
edoc:
$(ERL) -noinput +B -eval \
'case edoc:application(ejabberd, ".", []) of ok -> halt(0); error -> halt(1) end.'
@@ -201,7 +208,7 @@ ELIXIR_TO_DEST=$(LIBDIR) $(call VERSIONED_DEP,$(word 2,$(1))) $(wordlist 5,1000,
DEPS_TO_DEST=$(LIBDIR) $(call VERSIONED_DEP,$(word 2,$(1))) $(wordlist 3,1000,$(1))
MAIN_TO_DEST=$(LIBDIR) $(call VERSIONED_DEP,ejabberd) $(1)
TO_DEST_SINGLE=$(if $(subst X$(DEPSBASE)X,,X$(word 1,$(1))X),$(call MAIN_TO_DEST,$(1)),$(if $(subst XlibX,,X$(word $(LIBIX),$(1))X),$(call DEPS_TO_DEST,$(wordlist $(DEPIX),1000,$(1))),$(call ELIXIR_TO_DEST,$(wordlist $(DEPIX),1000,$(1)))))
TO_DEST=$(foreach path,$(1),$(call JOIN_PATHS,$(call TO_DEST_SINGLE,$(subst /, ,$(path)))))
TO_DEST=$(foreach path,$(1),$(call JOIN_PATHS,$(DESTDIR)$(call TO_DEST_SINGLE,$(subst /, ,$(path)))))
FILTER_DIRS=$(foreach path,$(1),$(if $(wildcard $(path)/*),,$(path)))
FILES_WILDCARD=$(call FILTER_DIRS,$(foreach w,$(1),$(wildcard $(w))))
@@ -242,7 +249,7 @@ $(foreach file,$(DEPS_FILES_FILTERED) $(MAIN_FILES),$(eval $(call COPY_template,
$(foreach file,$(BINARIES),$(eval $(call COPY_BINARY_template,$(file))))
$(sort $(call TO_DEST,$(MAIN_DIRS) $(DEPS_DIRS))):
$(INSTALL) -d $@
$(INSTALL) -d $@
$(call TO_DEST,priv/sql/lite.sql): sql/lite.sql $(call TO_DEST,priv/sql)
$(INSTALL) -m 644 $< $@
@@ -297,6 +304,18 @@ ejabberdctl.relive:
-e "s*{{epmd}}*@EPMD@*g" ejabberdctl.template \
> ejabberdctl.relive
ejabberd.init:
$(SED) -e "s*@ctlscriptpath@*$(SBINDIR)*g" \
-e "s*@installuser@*$(INIT_USER)*g" ejabberd.init.template \
> ejabberd.init
chmod 755 ejabberd.init
ejabberd.service:
$(SED) -e "s*@ctlscriptpath@*$(SBINDIR)*g" \
-e "s*@installuser@*$(INIT_USER)*g" ejabberd.service.template \
> ejabberd.service
chmod 644 ejabberd.service
ejabberdctl.example: vars.config
$(SED) -e "s*{{installuser}}*@INSTALLUSER@*g" \
-e "s*{{config_dir}}*${ETCDIR}*g" \
@@ -308,114 +327,105 @@ ejabberdctl.example: vars.config
-e "s*{{epmd}}*@EPMD@*g" ejabberdctl.template \
> ejabberdctl.example
install: copy-files ejabberdctl.example
scripts: ejabberd.init ejabberd.service ejabberdctl.example
install: copy-files
#
# Configuration files
$(INSTALL) -d -m 750 $(G_USER) $(ETCDIR)
[ -f $(ETCDIR)/ejabberd.yml ] \
&& $(INSTALL) -b -m 640 $(G_USER) ejabberd.yml.example $(ETCDIR)/ejabberd.yml-new \
|| $(INSTALL) -b -m 640 $(G_USER) ejabberd.yml.example $(ETCDIR)/ejabberd.yml
[ -f $(ETCDIR)/ejabberdctl.cfg ] \
&& $(INSTALL) -b -m 640 $(G_USER) ejabberdctl.cfg.example $(ETCDIR)/ejabberdctl.cfg-new \
|| $(INSTALL) -b -m 640 $(G_USER) ejabberdctl.cfg.example $(ETCDIR)/ejabberdctl.cfg
$(INSTALL) -b -m 644 $(G_USER) inetrc $(ETCDIR)/inetrc
$(INSTALL) -d -m 750 $(G_USER) $(DESTDIR)$(ETCDIR)
[ -f $(DESTDIR)$(ETCDIR)/ejabberd.yml ] \
&& $(INSTALL) -b -m 640 $(G_USER) ejabberd.yml.example $(DESTDIR)$(ETCDIR)/ejabberd.yml-new \
|| $(INSTALL) -b -m 640 $(G_USER) ejabberd.yml.example $(DESTDIR)$(ETCDIR)/ejabberd.yml
[ -f $(DESTDIR)$(ETCDIR)/ejabberdctl.cfg ] \
&& $(INSTALL) -b -m 640 $(G_USER) ejabberdctl.cfg.example $(DESTDIR)$(ETCDIR)/ejabberdctl.cfg-new \
|| $(INSTALL) -b -m 640 $(G_USER) ejabberdctl.cfg.example $(DESTDIR)$(ETCDIR)/ejabberdctl.cfg
$(INSTALL) -b -m 644 $(G_USER) inetrc $(DESTDIR)$(ETCDIR)/inetrc
#
# Administration script
[ -d $(SBINDIR) ] || $(INSTALL) -d -m 755 $(SBINDIR)
$(INSTALL) -m 550 $(G_USER) ejabberdctl.example $(SBINDIR)/ejabberdctl
[ -d $(DESTDIR)$(SBINDIR) ] || $(INSTALL) -d -m 755 $(DESTDIR)$(SBINDIR)
$(INSTALL) -m 550 $(G_USER) ejabberdctl.example $(DESTDIR)$(SBINDIR)/ejabberdctl
# Elixir binaries
[ -d $(BINDIR) ] || $(INSTALL) -d -m 755 $(BINDIR)
[ -f $(DEPSDIR)/elixir/bin/iex ] && $(INSTALL) -m 550 $(G_USER) $(DEPSDIR)/elixir/bin/iex $(BINDIR)/iex || true
[ -f $(DEPSDIR)/elixir/bin/elixir ] && $(INSTALL) -m 550 $(G_USER) $(DEPSDIR)/elixir/bin/elixir $(BINDIR)/elixir || true
[ -f $(DEPSDIR)/elixir/bin/mix ] && $(INSTALL) -m 550 $(G_USER) $(DEPSDIR)/elixir/bin/mix $(BINDIR)/mix || true
#
# Init script
$(SED) -e "s*@ctlscriptpath@*$(SBINDIR)*g" \
-e "s*@installuser@*$(INIT_USER)*g" ejabberd.init.template \
> ejabberd.init
chmod 755 ejabberd.init
#
# Service script
$(SED) -e "s*@ctlscriptpath@*$(SBINDIR)*g" \
-e "s*@installuser@*$(INIT_USER)*g" ejabberd.service.template \
> ejabberd.service
chmod 644 ejabberd.service
[ -d $(DESTDIR)$(BINDIR) ] || $(INSTALL) -d -m 755 $(DESTDIR)$(BINDIR)
[ -f $(DEPSDIR)/elixir/bin/iex ] && $(INSTALL) -m 550 $(G_USER) $(DEPSDIR)/elixir/bin/iex $(DESTDIR)$(BINDIR)/iex || true
[ -f $(DEPSDIR)/elixir/bin/elixir ] && $(INSTALL) -m 550 $(G_USER) $(DEPSDIR)/elixir/bin/elixir $(DESTDIR)$(BINDIR)/elixir || true
[ -f $(DEPSDIR)/elixir/bin/mix ] && $(INSTALL) -m 550 $(G_USER) $(DEPSDIR)/elixir/bin/mix $(DESTDIR)$(BINDIR)/mix || true
#
# Spool directory
$(INSTALL) -d -m 750 $(O_USER) $(SPOOLDIR)
$(CHOWN_COMMAND) -R @INSTALLUSER@ $(SPOOLDIR) >$(CHOWN_OUTPUT)
chmod -R 750 $(SPOOLDIR)
$(INSTALL) -d -m 750 $(O_USER) $(DESTDIR)$(SPOOLDIR)
$(CHOWN_COMMAND) -R @INSTALLUSER@ $(DESTDIR)$(SPOOLDIR) >$(CHOWN_OUTPUT)
chmod -R 750 $(DESTDIR)$(SPOOLDIR)
#
# Log directory
$(INSTALL) -d -m 750 $(O_USER) $(LOGDIR)
$(CHOWN_COMMAND) -R @INSTALLUSER@ $(LOGDIR) >$(CHOWN_OUTPUT)
chmod -R 750 $(LOGDIR)
$(INSTALL) -d -m 750 $(O_USER) $(DESTDIR)$(LOGDIR)
$(CHOWN_COMMAND) -R @INSTALLUSER@ $(DESTDIR)$(LOGDIR) >$(CHOWN_OUTPUT)
chmod -R 750 $(DESTDIR)$(LOGDIR)
#
# Documentation
$(INSTALL) -d $(MANDIR)
$(INSTALL) -d $(DOCDIR)
$(INSTALL) -d $(DESTDIR)$(MANDIR)
$(INSTALL) -d $(DESTDIR)$(DOCDIR)
[ -f man/ejabberd.yml.5 ] \
&& $(INSTALL) -m 644 man/ejabberd.yml.5 $(MANDIR) \
&& $(INSTALL) -m 644 man/ejabberd.yml.5 $(DESTDIR)$(MANDIR) \
|| echo "Man page not included in sources"
$(INSTALL) -m 644 COPYING $(DOCDIR)
$(INSTALL) -m 644 COPYING $(DESTDIR)$(DOCDIR)
uninstall: uninstall-binary
uninstall-binary:
rm -f $(SBINDIR)/ejabberdctl
rm -f $(BINDIR)/iex
rm -f $(BINDIR)/elixir
rm -f $(BINDIR)/mix
rm -fr $(DOCDIR)
rm -f $(BEAMDIR)/*.beam
rm -f $(BEAMDIR)/*.app
rm -fr $(BEAMDIR)
rm -f $(INCLUDEDIR)/*.hrl
rm -fr $(INCLUDEDIR)
rm -fr $(PBINDIR)
rm -f $(SODIR)/*.so
rm -fr $(SODIR)
rm -f $(MSGSDIR)/*.msg
rm -fr $(MSGSDIR)
rm -f $(CSSDIR)/*.css
rm -fr $(CSSDIR)
rm -f $(IMGDIR)/*.png
rm -fr $(IMGDIR)
rm -f $(JSDIR)/*.js
rm -fr $(JSDIR)
rm -f $(SQLDIR)/*.sql
rm -fr $(SQLDIR)
rm -fr $(LUADIR)/*.lua
rm -fr $(LUADIR)
rm -fr $(PRIVDIR)
rm -fr $(EJABBERDDIR)
rm -f $(DESTDIR)$(SBINDIR)/ejabberdctl
rm -f $(DESTDIR)$(BINDIR)/iex
rm -f $(DESTDIR)$(BINDIR)/elixir
rm -f $(DESTDIR)$(BINDIR)/mix
rm -fr $(DESTDIR)$(DOCDIR)
rm -f $(DESTDIR)$(BEAMDIR)/*.beam
rm -f $(DESTDIR)$(BEAMDIR)/*.app
rm -fr $(DESTDIR)$(BEAMDIR)
rm -f $(DESTDIR)$(INCLUDEDIR)/*.hrl
rm -fr $(DESTDIR)$(INCLUDEDIR)
rm -fr $(DESTDIR)$(PBINDIR)
rm -f $(DESTDIR)$(SODIR)/*.so
rm -fr $(DESTDIR)$(SODIR)
rm -f $(DESTDIR)$(MSGSDIR)/*.msg
rm -fr $(DESTDIR)$(MSGSDIR)
rm -f $(DESTDIR)$(CSSDIR)/*.css
rm -fr $(DESTDIR)$(CSSDIR)
rm -f $(DESTDIR)$(IMGDIR)/*.png
rm -fr $(DESTDIR)$(IMGDIR)
rm -f $(DESTDIR)$(JSDIR)/*.js
rm -fr $(DESTDIR)$(JSDIR)
rm -f $(DESTDIR)$(SQLDIR)/*.sql
rm -fr $(DESTDIR)$(SQLDIR)
rm -fr $(DESTDIR)$(LUADIR)/*.lua
rm -fr $(DESTDIR)$(LUADIR)
rm -fr $(DESTDIR)$(PRIVDIR)
rm -fr $(DESTDIR)$(EJABBERDDIR)
uninstall-all: uninstall-binary
rm -rf $(ETCDIR)
rm -rf $(EJABBERDDIR)
rm -rf $(SPOOLDIR)
rm -rf $(LOGDIR)
rm -rf $(DESTDIR)$(ETCDIR)
rm -rf $(DESTDIR)$(EJABBERDDIR)
rm -rf $(DESTDIR)$(SPOOLDIR)
rm -rf $(DESTDIR)$(LOGDIR)
clean:
rm -rf $(DEPSDIR)/.got
rm -rf $(DEPSDIR)/.built
rm -rf test/*.beam
$(REBAR) clean
rm -f rebar.lock
rm -f ejabberdctl.example ejabberd.init ejabberd.service
$(REBAR) clean $(CLEANARG)
clean-rel:
rm -rf rel/ejabberd
distclean: clean clean-rel
rm -f aclocal.m4
rm -f config.status
rm -f config.log
rm -rf autom4te.cache
rm -rf $(EBINDIR)
rm -rf $(DEPSBASE)
rm -rf deps
rm -f Makefile
rm -f vars.config
rm -f src/ejabberd.app.src
rm -f ejabberdctl.example ejabberd.init ejabberd.service
[ ! -f ../ChangeLog ] || rm -f ../ChangeLog
rel:
$(REBARREL)
@@ -432,7 +442,9 @@ Makefile: Makefile.in
ifeq "$(REBAR_VER)" "3"
dialyzer:
find src/*_opt.erl -type f \! -regex ".*git.*" -exec sed -i 's/re:mp/ tuple/g' {} \;
$(REBAR) dialyzer
find src/*_opt.erl -type f \! -regex ".*git.*" -exec sed -i 's/ tuple/re:mp/g' {} \;
else
deps := $(wildcard $(DEPSDIR)/*/ebin)
@@ -487,9 +499,10 @@ test:
help:
@echo ""
@echo " [all] Compile dependencies and ejabberd"
@echo " src Compile ejabberd"
@echo " deps Get dependencies"
@echo " [all] "
@echo " scripts Prepare ejabberd start scripts"
@echo " deps Get and configure dependencies"
@echo " src Compile dependencies and ejabberd"
@echo " update Update dependencies' source code"
@echo " clean Clean binary files"
@echo " distclean Clean completely the development files"
@@ -502,6 +515,7 @@ help:
@echo " dev Build a development release"
@echo " relive Start a live ejabberd in _build/relive/"
@echo ""
@echo " doap Generate DOAP file"
@echo " edoc Generate edoc documentation (unused)"
@echo " options Generate ejabberd_option.erl"
@echo " translations Extract translation files (requires --enable-tools)"
+15 -18
View File
@@ -1,19 +1,18 @@
<p align="center">
<img src="https://www.process-one.net/wp-content/uploads/2022/05/ejabberd-logo-rounded-index.png"
height="216">
<img src="https://www.process-one.net/wp-content/uploads/2022/05/ejabberd-logo-rounded-index.png">
</p>
<p align="center">
<a href="https://github.com/processone/ejabberd/tags" alt="GitHub tag (latest SemVer)">
<img src="https://img.shields.io/github/v/tag/processone/ejabberd?sort=semver&logo=embarcadero&label=&color=3fb0d2&logoWidth=20" /></a>
<a href="https://hex.pm/packages/ejabberd" alt="Hex version">
<img src="https://img.shields.io/hexpm/v/ejabberd.svg" /></a>
<a href="https://github.com/processone/ejabberd/pkgs/container/ejabberd" alt="GitHub Container">
<img src="https://img.shields.io/github/v/tag/processone/ejabberd?label=container&sort=semver" /></a>
<a href="https://hub.docker.com/r/ejabberd/ecs/" alt="Docker Image Version (latest semver)">
<img src="https://img.shields.io/docker/v/ejabberd/ecs?label=docker" /></a>
<a href="https://formulae.brew.sh/formula/ejabberd" alt="homebrew version">
<img src="https://img.shields.io/homebrew/v/ejabberd" /></a>
<a href="https://hub.docker.com/r/ejabberd/ecs/" alt="Docker Image Version (latest semver)">
<img src="https://img.shields.io/docker/v/ejabberd/ecs?label=ecs&logo=docker" /></a>
<a href="https://github.com/processone/ejabberd/pkgs/container/ejabberd" alt="GitHub Container">
<img src="https://img.shields.io/github/v/tag/processone/ejabberd?label=ejabberd&sort=semver&logo=docker" /></a>
<br />
<a href="https://github.com/processone/ejabberd/actions/workflows/ci.yml" alt="CI">
<img src="https://github.com/processone/ejabberd/actions/workflows/ci.yml/badge.svg" /></a>
@@ -29,8 +28,8 @@ robust, scalable and extensible realtime platform built using [Erlang/OTP][erlan
that includes [XMPP][xmpp] Server, [MQTT][mqtt] Broker and [SIP][sip] Service.
Check the features in [ejabberd.im][im], [ejabberd Docs][features],
[ejabberd at ProcessOne][p1home], and a list of [supported protocols and XEPs][xeps].
[ejabberd at ProcessOne][p1home], and the list of [supported protocols in ProcessOne][xeps]
and [XMPP.org][xmppej].
Installation
------------
@@ -38,10 +37,9 @@ Installation
There are several ways to install ejabberd:
- Source code: compile yourself, see [COMPILE](COMPILE.md)
- Installers from [ProcessOne Downloads][p1dl] (run/deb/rpm for x64)
- Installers from [ejabberd GitHub Releases][releases] (run/deb/rpm for x64 and arm64)
- Container image from [ejabberd Docker Hub][hubecs], see [ecs README][docker-ecs-readme] (for x64)
- Container image from [ejabberd Github Packages][packages], see [CONTAINER](CONTAINER.md) (for x64 and arm64)
- Installers from [ProcessOne Download][p1download] or [ejabberd GitHub Releases][releases] (run/deb/rpm for x64 and arm64)
- `ecs` container image available in [Docker Hub][hubecs] and [Github Packages][packagesecs], see [ecs README][docker-ecs-readme] (for x64)
- `ejabberd` container image available in [Github Packages][packages], see [CONTAINER](CONTAINER.md) (for x64 and arm64)
- Using your [Operating System package][osp]
- Using the [Homebrew][homebrew] package manager
@@ -74,7 +72,7 @@ or in your local machine as explained in [Localization][localization].
Documentation for developers is available in [ejabberd docs: Developers][docs-dev].
Security reports or concerns should preferably be reported privately,
please send an email to the address: contact [at] process-one [dot] net
please send an email to the address: contact at process-one dot net
or some other method from [ProcessOne Contact][p1contact].
For commercial offering and support, including [ejabberd Business Edition][p1home]
@@ -86,8 +84,7 @@ Community
There are several places to get in touch with other ejabberd developers and administrators:
- [ejabberd XMPP chatroom][muc]: ejabberd@conference.process-one.net
- [Mailing list][list]
- ejabberd XMPP chatroom: [ejabberd@conference.process-one.net][muc]
- [GitHub Discussions][discussions]
- [Stack Overflow][stackoverflow]
@@ -106,23 +103,23 @@ and [ejabberd translations](https://github.com/processone/ejabberd-po/) under MI
[erlang]: https://www.erlang.org/
[features]: https://docs.ejabberd.im/admin/introduction/
[fluux]: https://fluux.io/
[github]: https://github.com/processone/ejabberd
[homebrew]: https://docs.ejabberd.im/admin/installation/#homebrew
[hubecs]: https://hub.docker.com/r/ejabberd/ecs/
[im]: https://ejabberd.im/
[issues]: https://github.com/processone/ejabberd/issues
[list]: https://lists.jabber.ru/mailman/listinfo/ejabberd
[localization]: https://docs.ejabberd.im/developer/extending-ejabberd/localization/
[mqtt]: https://mqtt.org/
[muc]: xmpp:ejabberd@conference.process-one.net
[osp]: https://docs.ejabberd.im/admin/installation/#operating-system-packages
[p1contact]: https://www.process-one.net/en/company/contact/
[p1dl]: https://www.process-one.net/en/ejabberd/downloads/
[p1download]: https://www.process-one.net/en/ejabberd/downloads/
[p1home]: https://www.process-one.net/en/ejabberd/
[packages]: https://github.com/processone/ejabberd/pkgs/container/ejabberd
[packagesecs]: https://github.com/processone/docker-ejabberd/pkgs/container/ecs
[releases]: https://github.com/processone/ejabberd/releases
[sip]: https://en.wikipedia.org/wiki/Session_Initiation_Protocol
[stackoverflow]: https://stackoverflow.com/questions/tagged/ejabberd?sort=newest
[weblate]: https://hosted.weblate.org/projects/ejabberd/ejabberd-po/
[xeps]: https://www.process-one.net/en/ejabberd/protocols/
[xmpp]: https://xmpp.org/
[xmppej]: https://xmpp.org/software/servers/ejabberd/
+2 -2
View File
@@ -2,8 +2,8 @@
# Process this file with autoconf to produce a configure script.
AC_PREREQ(2.59)
AC_INIT(ejabberd, m4_esyscmd([echo `git describe --tags 2>/dev/null || echo 22.05` | sed 's/-g.*//;s/-/./' | tr -d '\012']), [ejabberd@process-one.net], [ejabberd])
REQUIRE_ERLANG_MIN="8.3 (Erlang/OTP 19.3)"
AC_INIT(ejabberd, m4_esyscmd([echo `git describe --tags 2>/dev/null || echo 23.10` | sed 's/-g.*//;s/-/./' | tr -d '\012']), [ejabberd@process-one.net], [ejabberd])
REQUIRE_ERLANG_MIN="9.0.5 (Erlang/OTP 20.0)"
REQUIRE_ERLANG_MAX="100.0.0 (No Max)"
AC_CONFIG_MACRO_DIR([m4])
+705
View File
@@ -0,0 +1,705 @@
<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns="http://usefulinc.com/ns/doap#"
xmlns:xmpp="https://linkmauve.fr/ns/xmpp-doap#"
xmlns:schema="https://schema.org/">
<Project>
<name>ejabberd</name>
<shortdesc>XMPP Server with MQTT Broker and SIP Service</shortdesc>
<description>Robust, Ubiquitous and Massively Scalable Messaging Platform (XMPP Server, MQTT Broker, SIP Service)</description>
<created>2002-11-16</created>
<os>BSD</os>
<os>Linux</os>
<os>macOS</os>
<os>Windows</os>
<programming-langauge>Erlang</programming-langauge>
<programming-langauge>C</programming-langauge>
<category rdf:resource="https://linkmauve.fr/ns/xmpp-doap#category-jabber"/>
<category rdf:resource="https://linkmauve.fr/ns/xmpp-doap#category-server"/>
<category rdf:resource="https://linkmauve.fr/ns/xmpp-doap#category-xmpp"/>
<homepage rdf:resource="https://www.ejabberd.im"/>
<download-page rdf:resource="https://www.process-one.net/en/ejabberd/downloads/"/>
<download-mirror rdf:resource="https://github.com/processone/ejabberd/tags"/>
<license rdf:resource="https://raw.githubusercontent.com/processone/ejabberd/master/COPYING"/>
<schema:logo rdf:resource="https://docs.ejabberd.im/static/shared/images/footer_logo_e@2x.png"/>
<bug-database rdf:resource="https://github.com/processone/ejabberd/issues"/>
<support-forum rdf:resource="xmpp:ejabberd@conference.process-one.net?join"/>
<repository>
<GitRepository>
<location rdf:resource="https://github.com/processone/ejabberd.git"/>
<browse rdf:resource="https://github.com/processone/ejabberd"/>
</GitRepository>
</repository>
<implements rdf:resource="https://www.rfc-editor.org/info/rfc3261"/>
<implements rdf:resource="https://www.rfc-editor.org/info/rfc3920"/>
<implements rdf:resource="https://www.rfc-editor.org/info/rfc3921"/>
<implements rdf:resource="https://www.rfc-editor.org/info/rfc5766"/>
<implements rdf:resource="https://www.rfc-editor.org/info/rfc5802"/>
<implements rdf:resource="https://www.rfc-editor.org/info/rfc6120"/>
<implements rdf:resource="https://www.rfc-editor.org/info/rfc6121"/>
<implements rdf:resource="https://www.rfc-editor.org/info/rfc6122"/>
<implements rdf:resource="https://www.rfc-editor.org/info/rfc6455"/>
<implements rdf:resource="https://www.rfc-editor.org/info/rfc7395"/>
<implements rdf:resource="https://www.rfc-editor.org/info/rfc7590"/>
<implements>
<xmpp:SupportedXep>
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0004.html"/>
<xmpp:version>2.9</xmpp:version>
<xmpp:since></xmpp:since>
<xmpp:status></xmpp:status>
<xmpp:note></xmpp:note>
</xmpp:SupportedXep>
</implements>
<implements>
<xmpp:SupportedXep>
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0012.html"/>
<xmpp:version>2.0</xmpp:version>
<xmpp:since></xmpp:since>
<xmpp:status></xmpp:status>
<xmpp:note>mod_last</xmpp:note>
</xmpp:SupportedXep>
</implements>
<implements>
<xmpp:SupportedXep>
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0013.html"/>
<xmpp:version>1.2</xmpp:version>
<xmpp:since>16.02</xmpp:since>
<xmpp:status></xmpp:status>
<xmpp:note>mod_offline</xmpp:note>
</xmpp:SupportedXep>
</implements>
<implements>
<xmpp:SupportedXep>
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0016.html"/>
<xmpp:version>1.6</xmpp:version>
<xmpp:since></xmpp:since>
<xmpp:status></xmpp:status>
<xmpp:note>mod_privacy</xmpp:note>
</xmpp:SupportedXep>
</implements>
<implements>
<xmpp:SupportedXep>
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0022.html"/>
<xmpp:version>1.4</xmpp:version>
<xmpp:since></xmpp:since>
<xmpp:status></xmpp:status>
<xmpp:note>mod_offline</xmpp:note>
</xmpp:SupportedXep>
</implements>
<implements>
<xmpp:SupportedXep>
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0023.html"/>
<xmpp:version>1.3</xmpp:version>
<xmpp:since></xmpp:since>
<xmpp:status></xmpp:status>
<xmpp:note>mod_offline</xmpp:note>
</xmpp:SupportedXep>
</implements>
<implements>
<xmpp:SupportedXep>
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0030.html"/>
<xmpp:version>2.4</xmpp:version>
<xmpp:since></xmpp:since>
<xmpp:status></xmpp:status>
<xmpp:note>mod_disco</xmpp:note>
</xmpp:SupportedXep>
</implements>
<implements>
<xmpp:SupportedXep>
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0033.html"/>
<xmpp:version>1.1</xmpp:version>
<xmpp:since>15.04</xmpp:since>
<xmpp:status></xmpp:status>
<xmpp:note>mod_multicast</xmpp:note>
</xmpp:SupportedXep>
</implements>
<implements>
<xmpp:SupportedXep>
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0039.html"/>
<xmpp:version>0.6.0</xmpp:version>
<xmpp:since></xmpp:since>
<xmpp:status></xmpp:status>
<xmpp:note>mod_stats</xmpp:note>
</xmpp:SupportedXep>
</implements>
<implements>
<xmpp:SupportedXep>
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0045.html"/>
<xmpp:version>1.25</xmpp:version>
<xmpp:since></xmpp:since>
<xmpp:status></xmpp:status>
<xmpp:note>mod_muc</xmpp:note>
</xmpp:SupportedXep>
</implements>
<implements>
<xmpp:SupportedXep>
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0049.html"/>
<xmpp:version>1.2</xmpp:version>
<xmpp:since></xmpp:since>
<xmpp:status></xmpp:status>
<xmpp:note>mod_private</xmpp:note>
</xmpp:SupportedXep>
</implements>
<implements>
<xmpp:SupportedXep>
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0050.html"/>
<xmpp:version>1.2</xmpp:version>
<xmpp:since></xmpp:since>
<xmpp:status></xmpp:status>
<xmpp:note>mod_adhoc</xmpp:note>
</xmpp:SupportedXep>
</implements>
<implements>
<xmpp:SupportedXep>
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0054.html"/>
<xmpp:version>1.2</xmpp:version>
<xmpp:since></xmpp:since>
<xmpp:status></xmpp:status>
<xmpp:note>mod_vcard</xmpp:note>
</xmpp:SupportedXep>
</implements>
<implements>
<xmpp:SupportedXep>
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0055.html"/>
<xmpp:version>1.3</xmpp:version>
<xmpp:since></xmpp:since>
<xmpp:status></xmpp:status>
<xmpp:note>mod_vcard</xmpp:note>
</xmpp:SupportedXep>
</implements>
<implements>
<xmpp:SupportedXep>
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0060.html"/>
<xmpp:version>1.14</xmpp:version>
<xmpp:since></xmpp:since>
<xmpp:status></xmpp:status>
<xmpp:note>mod_pubsub</xmpp:note>
</xmpp:SupportedXep>
</implements>
<implements>
<xmpp:SupportedXep>
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0065.html"/>
<xmpp:version>1.8</xmpp:version>
<xmpp:since></xmpp:since>
<xmpp:status></xmpp:status>
<xmpp:note>mod_proxy65</xmpp:note>
</xmpp:SupportedXep>
</implements>
<implements>
<xmpp:SupportedXep>
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0077.html"/>
<xmpp:version>2.4</xmpp:version>
<xmpp:since></xmpp:since>
<xmpp:status></xmpp:status>
<xmpp:note>mod_register</xmpp:note>
</xmpp:SupportedXep>
</implements>
<implements>
<xmpp:SupportedXep>
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0078.html"/>
<xmpp:version>2.5</xmpp:version>
<xmpp:since></xmpp:since>
<xmpp:status></xmpp:status>
<xmpp:note>mod_legacy_auth</xmpp:note>
</xmpp:SupportedXep>
</implements>
<implements>
<xmpp:SupportedXep>
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0085.html"/>
<xmpp:version>2.1</xmpp:version>
<xmpp:since></xmpp:since>
<xmpp:status></xmpp:status>
<xmpp:note>mod_client_state</xmpp:note>
</xmpp:SupportedXep>
</implements>
<implements>
<xmpp:SupportedXep>
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0086.html"/>
<xmpp:version>1.0</xmpp:version>
<xmpp:since></xmpp:since>
<xmpp:status></xmpp:status>
<xmpp:note></xmpp:note>
</xmpp:SupportedXep>
</implements>
<implements>
<xmpp:SupportedXep>
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0092.html"/>
<xmpp:version>1.1</xmpp:version>
<xmpp:since></xmpp:since>
<xmpp:status></xmpp:status>
<xmpp:note>mod_version</xmpp:note>
</xmpp:SupportedXep>
</implements>
<implements>
<xmpp:SupportedXep>
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0106.html"/>
<xmpp:version>1.1</xmpp:version>
<xmpp:since></xmpp:since>
<xmpp:status></xmpp:status>
<xmpp:note></xmpp:note>
</xmpp:SupportedXep>
</implements>
<implements>
<xmpp:SupportedXep>
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0114.html"/>
<xmpp:version>1.6</xmpp:version>
<xmpp:since></xmpp:since>
<xmpp:status></xmpp:status>
<xmpp:note>ejabberd_service</xmpp:note>
</xmpp:SupportedXep>
</implements>
<implements>
<xmpp:SupportedXep>
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0115.html"/>
<xmpp:version>1.5</xmpp:version>
<xmpp:since></xmpp:since>
<xmpp:status></xmpp:status>
<xmpp:note>mod_caps</xmpp:note>
</xmpp:SupportedXep>
</implements>
<implements>
<xmpp:SupportedXep>
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0124.html"/>
<xmpp:version>1.11</xmpp:version>
<xmpp:since></xmpp:since>
<xmpp:status></xmpp:status>
<xmpp:note>ejabberd_bosh</xmpp:note>
</xmpp:SupportedXep>
</implements>
<implements>
<xmpp:SupportedXep>
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0133.html"/>
<xmpp:version>1.1</xmpp:version>
<xmpp:since></xmpp:since>
<xmpp:status></xmpp:status>
<xmpp:note>mod_configure</xmpp:note>
</xmpp:SupportedXep>
</implements>
<implements>
<xmpp:SupportedXep>
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0153.html"/>
<xmpp:version>1.1</xmpp:version>
<xmpp:since></xmpp:since>
<xmpp:status></xmpp:status>
<xmpp:note>mod_vcard</xmpp:note>
</xmpp:SupportedXep>
</implements>
<implements>
<xmpp:SupportedXep>
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0156.html"/>
<xmpp:version>1.4.0</xmpp:version>
<xmpp:since>22.05</xmpp:since>
<xmpp:status></xmpp:status>
<xmpp:note>mod_host_meta</xmpp:note>
</xmpp:SupportedXep>
</implements>
<implements>
<xmpp:SupportedXep>
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0157.html"/>
<xmpp:version>1.0</xmpp:version>
<xmpp:since></xmpp:since>
<xmpp:status></xmpp:status>
<xmpp:note>mod_disco</xmpp:note>
</xmpp:SupportedXep>
</implements>
<implements>
<xmpp:SupportedXep>
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0158.html"/>
<xmpp:version>1.0</xmpp:version>
<xmpp:since></xmpp:since>
<xmpp:status></xmpp:status>
<xmpp:note>ejabberd_captcha</xmpp:note>
</xmpp:SupportedXep>
</implements>
<implements>
<xmpp:SupportedXep>
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0160.html"/>
<xmpp:version>1.0</xmpp:version>
<xmpp:since></xmpp:since>
<xmpp:status></xmpp:status>
<xmpp:note>mod_offline</xmpp:note>
</xmpp:SupportedXep>
</implements>
<implements>
<xmpp:SupportedXep>
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0163.html"/>
<xmpp:version>1.2</xmpp:version>
<xmpp:since></xmpp:since>
<xmpp:status></xmpp:status>
<xmpp:note>mod_pubsub</xmpp:note>
</xmpp:SupportedXep>
</implements>
<implements>
<xmpp:SupportedXep>
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0170.html"/>
<xmpp:version>1.0</xmpp:version>
<xmpp:since></xmpp:since>
<xmpp:status></xmpp:status>
<xmpp:note></xmpp:note>
</xmpp:SupportedXep>
</implements>
<implements>
<xmpp:SupportedXep>
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0176.html"/>
<xmpp:version>1.0</xmpp:version>
<xmpp:since></xmpp:since>
<xmpp:status></xmpp:status>
<xmpp:note>ejabberd_stun</xmpp:note>
</xmpp:SupportedXep>
</implements>
<implements>
<xmpp:SupportedXep>
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0185.html"/>
<xmpp:version>1.0</xmpp:version>
<xmpp:since></xmpp:since>
<xmpp:status></xmpp:status>
<xmpp:note>mod_s2s_dialback</xmpp:note>
</xmpp:SupportedXep>
</implements>
<implements>
<xmpp:SupportedXep>
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0191.html"/>
<xmpp:version>1.2</xmpp:version>
<xmpp:since></xmpp:since>
<xmpp:status></xmpp:status>
<xmpp:note>mod_blocking</xmpp:note>
</xmpp:SupportedXep>
</implements>
<implements>
<xmpp:SupportedXep>
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0198.html"/>
<xmpp:version>1.5.2</xmpp:version>
<xmpp:since>14.05</xmpp:since>
<xmpp:status></xmpp:status>
<xmpp:note>mod_stream_mgmt</xmpp:note>
</xmpp:SupportedXep>
</implements>
<implements>
<xmpp:SupportedXep>
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0199.html"/>
<xmpp:version>2.0</xmpp:version>
<xmpp:since></xmpp:since>
<xmpp:status></xmpp:status>
<xmpp:note>mod_ping</xmpp:note>
</xmpp:SupportedXep>
</implements>
<implements>
<xmpp:SupportedXep>
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0202.html"/>
<xmpp:version>2.0</xmpp:version>
<xmpp:since></xmpp:since>
<xmpp:status></xmpp:status>
<xmpp:note>mod_time</xmpp:note>
</xmpp:SupportedXep>
</implements>
<implements>
<xmpp:SupportedXep>
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0205.html"/>
<xmpp:version>1.0</xmpp:version>
<xmpp:since></xmpp:since>
<xmpp:status></xmpp:status>
<xmpp:note></xmpp:note>
</xmpp:SupportedXep>
</implements>
<implements>
<xmpp:SupportedXep>
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0206.html"/>
<xmpp:version>1.4</xmpp:version>
<xmpp:since></xmpp:since>
<xmpp:status></xmpp:status>
<xmpp:note>ejabberd_bosh</xmpp:note>
</xmpp:SupportedXep>
</implements>
<implements>
<xmpp:SupportedXep>
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0212.html"/>
<xmpp:version>1.0</xmpp:version>
<xmpp:since></xmpp:since>
<xmpp:status></xmpp:status>
<xmpp:note></xmpp:note>
</xmpp:SupportedXep>
</implements>
<implements>
<xmpp:SupportedXep>
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0215.html"/>
<xmpp:version>0.7</xmpp:version>
<xmpp:since>20.04</xmpp:since>
<xmpp:status></xmpp:status>
<xmpp:note>mod_stun_disco</xmpp:note>
</xmpp:SupportedXep>
</implements>
<implements>
<xmpp:SupportedXep>
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0216.html"/>
<xmpp:version>1.0</xmpp:version>
<xmpp:since></xmpp:since>
<xmpp:status></xmpp:status>
<xmpp:note></xmpp:note>
</xmpp:SupportedXep>
</implements>
<implements>
<xmpp:SupportedXep>
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0220.html"/>
<xmpp:version>1.1</xmpp:version>
<xmpp:since></xmpp:since>
<xmpp:status></xmpp:status>
<xmpp:note>ejabberd_s2s, mod_s2s_dialback</xmpp:note>
</xmpp:SupportedXep>
</implements>
<implements>
<xmpp:SupportedXep>
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0227.html"/>
<xmpp:version>1.1</xmpp:version>
<xmpp:since></xmpp:since>
<xmpp:status></xmpp:status>
<xmpp:note>ejabberd_piefxis</xmpp:note>
</xmpp:SupportedXep>
</implements>
<implements>
<xmpp:SupportedXep>
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0237.html"/>
<xmpp:version>1.3</xmpp:version>
<xmpp:since></xmpp:since>
<xmpp:status></xmpp:status>
<xmpp:note>mod_roster</xmpp:note>
</xmpp:SupportedXep>
</implements>
<implements>
<xmpp:SupportedXep>
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0243.html"/>
<xmpp:version>1.0</xmpp:version>
<xmpp:since></xmpp:since>
<xmpp:status></xmpp:status>
<xmpp:note></xmpp:note>
</xmpp:SupportedXep>
</implements>
<implements>
<xmpp:SupportedXep>
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0248.html"/>
<xmpp:version>0.2</xmpp:version>
<xmpp:since></xmpp:since>
<xmpp:status></xmpp:status>
<xmpp:note>mod_pubsub</xmpp:note>
</xmpp:SupportedXep>
</implements>
<implements>
<xmpp:SupportedXep>
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0249.html"/>
<xmpp:version>1.2</xmpp:version>
<xmpp:since></xmpp:since>
<xmpp:status></xmpp:status>
<xmpp:note>mod_muc</xmpp:note>
</xmpp:SupportedXep>
</implements>
<implements>
<xmpp:SupportedXep>
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0270.html"/>
<xmpp:version>1.0</xmpp:version>
<xmpp:since></xmpp:since>
<xmpp:status></xmpp:status>
<xmpp:note></xmpp:note>
</xmpp:SupportedXep>
</implements>
<implements>
<xmpp:SupportedXep>
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0279.html"/>
<xmpp:version>0.2</xmpp:version>
<xmpp:since></xmpp:since>
<xmpp:status></xmpp:status>
<xmpp:note>mod_sic</xmpp:note>
</xmpp:SupportedXep>
</implements>
<implements>
<xmpp:SupportedXep>
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0280.html"/>
<xmpp:version>0.13.2</xmpp:version>
<xmpp:since></xmpp:since>
<xmpp:status></xmpp:status>
<xmpp:note>mod_carboncopy</xmpp:note>
</xmpp:SupportedXep>
</implements>
<implements>
<xmpp:SupportedXep>
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0313.html"/>
<xmpp:version>0.6.1</xmpp:version>
<xmpp:since>15.06</xmpp:since>
<xmpp:status></xmpp:status>
<xmpp:note>mod_mam</xmpp:note>
</xmpp:SupportedXep>
</implements>
<implements>
<xmpp:SupportedXep>
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0317.html"/>
<xmpp:version>0.1</xmpp:version>
<xmpp:since>21.12</xmpp:since>
<xmpp:status></xmpp:status>
<xmpp:note>mod_muc_room, conversejs/prosody compatible</xmpp:note>
</xmpp:SupportedXep>
</implements>
<implements>
<xmpp:SupportedXep>
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0328.html"/>
<xmpp:version>0.1</xmpp:version>
<xmpp:since>19.09</xmpp:since>
<xmpp:status></xmpp:status>
<xmpp:note>mod_jidprep</xmpp:note>
</xmpp:SupportedXep>
</implements>
<implements>
<xmpp:SupportedXep>
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0334.html"/>
<xmpp:version>0.2</xmpp:version>
<xmpp:since></xmpp:since>
<xmpp:status></xmpp:status>
<xmpp:note>mod_mam, mod_muc_log, mod_offline</xmpp:note>
</xmpp:SupportedXep>
</implements>
<implements>
<xmpp:SupportedXep>
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0352.html"/>
<xmpp:version>0.1</xmpp:version>
<xmpp:since>14.12</xmpp:since>
<xmpp:status></xmpp:status>
<xmpp:note>mod_client_state</xmpp:note>
</xmpp:SupportedXep>
</implements>
<implements>
<xmpp:SupportedXep>
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0355.html"/>
<xmpp:version>0.4.1</xmpp:version>
<xmpp:since>16.09</xmpp:since>
<xmpp:status></xmpp:status>
<xmpp:note>mod_delegation</xmpp:note>
</xmpp:SupportedXep>
</implements>
<implements>
<xmpp:SupportedXep>
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0356.html"/>
<xmpp:version>0.2.1</xmpp:version>
<xmpp:since>16.09</xmpp:since>
<xmpp:status></xmpp:status>
<xmpp:note>mod_privilege</xmpp:note>
</xmpp:SupportedXep>
</implements>
<implements>
<xmpp:SupportedXep>
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0357.html"/>
<xmpp:version>0.2</xmpp:version>
<xmpp:since>17.08</xmpp:since>
<xmpp:status></xmpp:status>
<xmpp:note>mod_push</xmpp:note>
</xmpp:SupportedXep>
</implements>
<implements>
<xmpp:SupportedXep>
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0359.html"/>
<xmpp:version>0.5.0</xmpp:version>
<xmpp:since></xmpp:since>
<xmpp:status></xmpp:status>
<xmpp:note>mod_mam</xmpp:note>
</xmpp:SupportedXep>
</implements>
<implements>
<xmpp:SupportedXep>
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0363.html"/>
<xmpp:version>0.2</xmpp:version>
<xmpp:since>15.10</xmpp:since>
<xmpp:status></xmpp:status>
<xmpp:note>mod_http_upload</xmpp:note>
</xmpp:SupportedXep>
</implements>
<implements>
<xmpp:SupportedXep>
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0368.html"/>
<xmpp:version>1.1.0</xmpp:version>
<xmpp:since></xmpp:since>
<xmpp:status></xmpp:status>
<xmpp:note></xmpp:note>
</xmpp:SupportedXep>
</implements>
<implements>
<xmpp:SupportedXep>
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0369.html"/>
<xmpp:version>0.14.1</xmpp:version>
<xmpp:since>16.03</xmpp:since>
<xmpp:status></xmpp:status>
<xmpp:note>mod_mix</xmpp:note>
</xmpp:SupportedXep>
</implements>
<implements>
<xmpp:SupportedXep>
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0398.html"/>
<xmpp:version>0.2.00.2.0</xmpp:version>
<xmpp:since>17.09</xmpp:since>
<xmpp:status></xmpp:status>
<xmpp:note>mod_avatar, mod_vcard_xupdate</xmpp:note>
</xmpp:SupportedXep>
</implements>
<implements>
<xmpp:SupportedXep>
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0402.html"/>
<xmpp:version>1.1.3</xmpp:version>
<xmpp:since>23.10</xmpp:since>
<xmpp:status></xmpp:status>
<xmpp:note>mod_private</xmpp:note>
</xmpp:SupportedXep>
</implements>
<implements>
<xmpp:SupportedXep>
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0405.html"/>
<xmpp:version>0.3.0</xmpp:version>
<xmpp:since></xmpp:since>
<xmpp:status></xmpp:status>
<xmpp:note>mod_mix_pam</xmpp:note>
</xmpp:SupportedXep>
</implements>
<implements>
<xmpp:SupportedXep>
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0410.html"/>
<xmpp:version>1.1.0</xmpp:version>
<xmpp:since>18.12</xmpp:since>
<xmpp:status></xmpp:status>
<xmpp:note>mod_muc_room</xmpp:note>
</xmpp:SupportedXep>
</implements>
<implements>
<xmpp:SupportedXep>
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0411.html"/>
<xmpp:version>0.2.0</xmpp:version>
<xmpp:since>18.12</xmpp:since>
<xmpp:status></xmpp:status>
<xmpp:note>mod_private</xmpp:note>
</xmpp:SupportedXep>
</implements>
<implements>
<xmpp:SupportedXep>
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0421.html"/>
<xmpp:version>0.1.0</xmpp:version>
<xmpp:since>23.10</xmpp:since>
<xmpp:status></xmpp:status>
<xmpp:note>mod_muc_occupantid</xmpp:note>
</xmpp:SupportedXep>
</implements>
<implements>
<xmpp:SupportedXep>
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0425.html"/>
<xmpp:version>0.2.1</xmpp:version>
<xmpp:since>23.04</xmpp:since>
<xmpp:status></xmpp:status>
<xmpp:note>mod_mam</xmpp:note>
</xmpp:SupportedXep>
</implements>
<implements>
<xmpp:SupportedXep>
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0441.html"/>
<xmpp:version>0.2.0</xmpp:version>
<xmpp:since></xmpp:since>
<xmpp:status></xmpp:status>
<xmpp:note>mod_mam</xmpp:note>
</xmpp:SupportedXep>
</implements>
</Project>
</rdf:RDF>
+2 -2
View File
@@ -36,17 +36,17 @@ listen:
-
port: 5223
ip: "::"
tls: true
module: ejabberd_c2s
max_stanza_size: 262144
shaper: c2s_shaper
access: c2s
starttls_required: true
tls: true
-
port: 5269
ip: "::"
module: ejabberd_s2s_in
max_stanza_size: 524288
shaper: s2s_shaper
-
port: 5443
ip: "::"
+35 -6
View File
@@ -47,10 +47,28 @@
#INET_DIST_INTERFACE=127.0.0.1
#.
#' ERL_EPMD_ADDRESS: IP addresses where epmd listens for connections
#' ERL_DIST_PORT: Port number for Erlang distribution
#
# For Erlang distribution, clustering and ejabberdctl usage, the
# Erlang VM listens in a random TCP port number, and the Erlang Port
# Mapper Daemon (EPMD) is spawned and used to determine this port
# number.
#
# ERL_DIST_PORT can define this port number. In that case, EPMD is
# not spawned during ejabberd startup, and ERL_EPMD_ADDRESS is
# ignored. ERL_DIST_PORT must be set to the same port number during
# ejabberd startup and when calling ejabberdctl. This feature
# requires at least Erlang/OTP 23.1.
#
# Default: not defined
#
#ERL_DIST_PORT=5210
#.
#' ERL_EPMD_ADDRESS: IP addresses where EPMD listens for connections
#
# This environment variable may be set to a comma-separated
# list of IP addresses, in which case the epmd daemon
# list of IP addresses, in which case the EPMD daemon
# will listen only on the specified address(es) and on the
# loopback address (which is implicitly added to the list if it
# has not been specified). The default behaviour is to listen on
@@ -90,10 +108,8 @@
#.
#' ERL_OPTIONS: Additional Erlang options
#
# The next variable allows to specify additional options passed to erlang while
# starting ejabberd. Some useful options are -noshell, -detached, -heart. When
# ejabberd is started from an init.d script options -noshell and -detached are
# added implicitly. See erl(1) for more info.
# The next variable allows to specify additional options passed to
# erlang. See erl(1) for more info.
#
# It might be useful to add "-pa /usr/local/lib/ejabberd/ebin" if you
# want to add local modules in this path.
@@ -102,6 +118,19 @@
#
#ERL_OPTIONS=""
#.
#' EJABBERD_OPTS: Additional Erlang options to start ejabberd
#
# The next variable allows to specify additional options passed to erlang while
# starting ejabberd. Some useful options are -noshell, -detached, -heart. When
# ejabberd is started from an init.d script options -noshell and -detached are
# added implicitly. See erl(1) for more info.
#
# Default: ""
#
#EJABBERD_OPTS=""
EJABBERD_OPTS="-heart -env HEART_BEAT_TIMEOUT 120 -env ERL_CRASH_DUMP_SECONDS 60"
#.
#' ERLANG_NODE: Erlang node name
#
+29 -9
View File
@@ -59,7 +59,6 @@ done
# define ejabberd variables if not already defined from the command line
: "${CONFIG_DIR:="{{config_dir}}"}"
: "${LOGS_DIR:="{{logs_dir}}"}"
: "${SPOOL_DIR:="{{spool_dir}}"}"
: "${EJABBERD_CONFIG_PATH:="$CONFIG_DIR/ejabberd.yml"}"
: "${EJABBERDCTL_CONFIG_PATH:="$CONFIG_DIR/ejabberdctl.cfg"}"
# Allows passing extra Erlang command-line arguments in vm.args file
@@ -68,6 +67,7 @@ done
[ -f "$EJABBERDCTL_CONFIG_PATH" ] && . "$EJABBERDCTL_CONFIG_PATH"
[ -n "$ERLANG_NODE_ARG" ] && ERLANG_NODE="$ERLANG_NODE_ARG"
[ "$ERLANG_NODE" = "${ERLANG_NODE%.*}" ] && S="-s"
: "${SPOOL_DIR:="{{spool_dir}}"}"
: "${EJABBERD_LOG_PATH:="$LOGS_DIR/ejabberd.log"}"
# define erl parameters
@@ -76,11 +76,12 @@ if [ -n "$FIREWALL_WINDOW" ] ; then
ERLANG_OPTS="$ERLANG_OPTS -kernel inet_dist_listen_min ${FIREWALL_WINDOW%-*} inet_dist_listen_max ${FIREWALL_WINDOW#*-}"
fi
if [ -n "$INET_DIST_INTERFACE" ] ; then
INET_DIST_INTERFACE2=$("$ERL" -noshell -eval 'case inet:parse_address("'$INET_DIST_INTERFACE'") of {ok,IP} -> io:format("~p",[IP]); _ -> ok end.' -s erlang halt)
INET_DIST_INTERFACE2=$("$ERL" $ERLANG_OPTS -noshell -eval 'case inet:parse_address("'$INET_DIST_INTERFACE'") of {ok,IP} -> io:format("~p",[IP]); _ -> ok end.' -s erlang halt)
if [ -n "$INET_DIST_INTERFACE2" ] ; then
ERLANG_OPTS="$ERLANG_OPTS -kernel inet_dist_use_interface $INET_DIST_INTERFACE2"
fi
fi
[ -n "$ERL_DIST_PORT" ] && ERLANG_OPTS="$ERLANG_OPTS -erl_epmd_port $ERL_DIST_PORT -start_epmd false"
# if vm.args file exists in config directory, pass it to Erlang VM
[ -f "$VMARGS" ] && ERLANG_OPTS="$ERLANG_OPTS -args_file $VMARGS"
ERL_LIBS='{{libdir}}'
@@ -90,7 +91,9 @@ ERL_INETRC="$CONFIG_DIR"/inetrc
# define ejabberd parameters
EJABBERD_OPTS="$EJABBERD_OPTS\
$(sed '/^log_rotate_size/!d;s/:[ \t]*\([0-9]\{1,\}\).*/ \1/;s/:[ \t]*\(infinity\).*/ \1/;s/^/ /' "$EJABBERD_CONFIG_PATH")\
$(sed '/^log_rotate_count/!d;s/:[ \t]*\([0-9]*\).*/ \1/;s/^/ /' "$EJABBERD_CONFIG_PATH")"
$(sed '/^log_rotate_count/!d;s/:[ \t]*\([0-9]*\).*/ \1/;s/^/ /' "$EJABBERD_CONFIG_PATH")\
$(sed '/^log_burst_limit_count/!d;s/:[ \t]*\([0-9]*\).*/ \1/;s/^/ /' "$EJABBERD_CONFIG_PATH")\
$(sed '/^log_burst_limit_window_time/!d;s/:[ \t]*\([0-9]*[a-z]*\).*/ \1/;s/^/ /' "$EJABBERD_CONFIG_PATH")"
[ -n "$EJABBERD_OPTS" ] && EJABBERD_OPTS="-ejabberd $EJABBERD_OPTS"
EJABBERD_OPTS="-mnesia dir \"$SPOOL_DIR\" $MNESIA_OPTIONS $EJABBERD_OPTS -s ejabberd"
@@ -100,6 +103,7 @@ export EJABBERD_LOG_PATH
export EJABBERD_PID_PATH
export ERL_CRASH_DUMP
export ERL_EPMD_ADDRESS
export ERL_DIST_PORT
export ERL_INETRC
export ERL_MAX_PORTS
export ERL_MAX_ETS_TABLES
@@ -108,11 +112,16 @@ export CONTRIB_MODULES_CONF_DIR
export ERL_LIBS
export SCRIPT_DIR
set_dist_client()
{
[ -n "$ERL_DIST_PORT" ] && ERLANG_OPTS="$ERLANG_OPTS -dist_listen false"
}
# run command either directly or via su $INSTALLUSER
exec_cmd()
{
case $EXEC_CMD in
as_install_user) su -s /bin/sh -c '"$0" "$@"' "$INSTALLUSER" -- "$@" ;;
as_install_user) su -s /bin/sh -c 'exec "$0" "$@"' "$INSTALLUSER" -- "$@" ;;
as_current_user) "$@" ;;
esac
}
@@ -140,9 +149,11 @@ debugwarning()
echo "Please be extremely cautious with your actions,"
echo "and exit immediately if you are not completely sure."
echo ""
echo "To detach this shell from ejabberd, press:"
echo " control+c, control+c"
echo "To exit and detach this shell from ejabberd, press:"
echo " control+g and then q"
echo ""
#vt100 echo "Please do NOT use control+c in this debug shell !"
#vt100 echo ""
echo "--------------------------------------------------------------------"
echo "To bypass permanently this warning, add to ejabberdctl.cfg the line:"
echo " EJABBERD_BYPASS_WARNINGS=true"
@@ -218,6 +229,7 @@ uid()
# stop epmd if there is no other running node
stop_epmd()
{
[ -n "$ERL_DIST_PORT" ] && return
"$EPMD" -names 2>/dev/null | grep -q name || "$EPMD" -kill >/dev/null
}
@@ -225,6 +237,7 @@ stop_epmd()
# if all ok, ensure runtime directory exists and make it current directory
check_start()
{
[ -n "$ERL_DIST_PORT" ] && return
"$EPMD" -names 2>/dev/null | grep -q " ${ERLANG_NODE%@*} " && {
pgrep -f "$ERLANG_NODE" >/dev/null && {
echo "ERROR: The ejabberd node '$ERLANG_NODE' is already running."
@@ -289,34 +302,41 @@ case $1 in
;;
debug)
debugwarning
set_dist_client
exec_erl "$(uid debug)" -hidden -remsh "$ERLANG_NODE"
;;
etop)
exec_erl "$(uid top)" -hidden -node "$ERLANG_NODE" -s etop \
-s erlang halt -output text
set_dist_client
exec_erl "$(uid top)" -hidden -remsh "$ERLANG_NODE" -s etop \
-output text
;;
iexdebug)
debugwarning
set_dist_client
exec_iex "$(uid debug)" --remsh "$ERLANG_NODE"
;;
iexlive)
livewarning
exec_iex "$ERLANG_NODE" --erl "$EJABBERD_OPTS" --app ejabberd
exec_iex "$ERLANG_NODE" --erl "$EJABBERD_OPTS"
;;
ping)
PEER=${2:-$ERLANG_NODE}
[ "$PEER" = "${PEER%.*}" ] && PS="-s"
set_dist_client
exec_cmd "$ERL" ${PS:--}name "$(uid ping "$(hostname $PS)")" $ERLANG_OPTS \
-noinput -hidden -eval 'io:format("~p~n",[net_adm:ping('"'$PEER'"')])' \
-s erlang halt -output text
;;
started)
set_dist_client
wait_status 0 30 2 # wait 30x2s before timeout
;;
stopped)
set_dist_client
wait_status 3 30 2 && stop_epmd # wait 30x2s before timeout
;;
*)
set_dist_client
exec_erl "$(uid ctl)" -hidden -noinput -s ejabberd_ctl \
-extra "$ERLANG_NODE" $NO_TIMEOUT "$@"
result=$?
+42
View File
@@ -0,0 +1,42 @@
[
{
elvis,
[
{config,
[#{dirs => ["src"],
filter => "*.erl",
ruleset => erl_files,
rules => [{elvis_style, line_length, #{limit => 100,
skip_comments => false}},
{elvis_text_style, no_tabs, disable},
{elvis_style, no_debug_call, disable},
{elvis_style, operator_spaces, disable},
{elvis_style, invalid_dynamic_call, disable},
{elvis_style, variable_naming_convention, #{ regex => ".*" }},
{elvis_style, dont_repeat_yourself, #{min_complexity => 20}}
]
},
#{dirs => ["."],
filter => "Makefile.in",
ruleset => makefiles,
rules => [{elvis_style, line_length, #{limit => 100,
skip_comments => false}},
{elvis_style, no_tabs, disable},
{elvis_style, dont_repeat_yourself, #{min_complexity => 20}}
]
},
#{dirs => ["."],
filter => "rebar.config",
ruleset => rebar_config,
rules => [{elvis_style, line_length, #{limit => 100,
skip_comments => false}},
{elvis_style, no_tabs, disable},
{elvis_style, dont_repeat_yourself, #{min_complexity => 20}}
]
}
}
]
}
]
}
].
+32
View File
@@ -0,0 +1,32 @@
otp_path: "/usr/lib/erlang"
plt_path: "_build/default/rebar3_24.3.3_plt"
#code_reload:
# node: ejabberd@localhost
apps_dirs:
- "_build/default/lib/*"
deps_dirs:
- "_build/default/lib/*"
include_dirs:
- "_build/default/lib"
- "_build/default/lib/*/include"
- "include"
macros:
- name: DEPRECATED_GET_STACKTRACE
- name: HAVE_ERL_ERROR
- name: HAVE_URI_STRING
- name: OTP_BELOW_25
- name: SIP
- name: STUN
diagnostics:
# enabled:
# - crossref
disabled:
# - dialyzer
- unused_includes # Otherwise it complains about unused logger.hrl
lenses:
disabled:
- ct-run-test
- function-references
- server-info
- show-behaviour-usages
- suggest-spec
-66
View File
@@ -1,66 +0,0 @@
#!/usr/bin/perl
use Unix::Syslog qw(:macros :subs);
my $domain = $ARGV[0] || "example.com";
while(1)
{
# my $rin = '',$rout;
# vec($rin,fileno(STDIN),1) = 1;
# $ein = $rin;
# my $nfound = select($rout=$rin,undef,undef,undef);
my $buf = "";
syslog LOG_INFO,"waiting for packet";
my $nread = sysread STDIN,$buf,2;
do { syslog LOG_INFO,"port closed"; exit; } unless $nread == 2;
my $len = unpack "n",$buf;
my $nread = sysread STDIN,$buf,$len;
my ($op,$user,$host,$password) = split /:/,$buf;
#$user =~ s/\./\//og;
my $jid = "$user\@$domain";
my $result;
syslog(LOG_INFO,"request (%s)", $op);
SWITCH:
{
$op eq 'auth' and do
{
$result = 1;
},last SWITCH;
$op eq 'setpass' and do
{
$result = 1;
},last SWITCH;
$op eq 'isuser' and do
{
# password is null. Return 1 if the user $user\@$domain exitst.
$result = 1;
},last SWITCH;
$op eq 'tryregister' and do
{
$result = 1;
},last SWITCH;
$op eq 'removeuser' and do
{
# password is null. Return 1 if the user $user\@$domain exitst.
$result = 1;
},last SWITCH;
$op eq 'removeuser3' and do
{
$result = 1;
},last SWITCH;
};
my $out = pack "nn",2,$result ? 1 : 0;
syswrite STDOUT,$out;
}
closelog;
-75
View File
@@ -1,75 +0,0 @@
#!/bin/sh
#
# PROVIDE: ejabberd
# REQUIRE: DAEMON
# KEYWORD: shutdown
#
HOME=/usr/pkg/jabber D=/usr/pkg/jabber/ejabberd export HOME
name="ejabberd"
rcvar=$name
if [ -r /etc/rc.conf ]
then
. /etc/rc.conf
else
eval ${rcvar}=YES
fi
# $flags from environment overrides ${rcvar}_flags
if [ -n "${flags}" ]
then
eval ${rcvar}_flags="${flags}"
fi
checkyesno()
{
eval _value=\$${1}
case $_value in
[Yy][Ee][Ss]|[Tt][Rr][Uu][Ee]|[Oo][Nn]|1) return 0 ;;
[Nn][Oo]|[Ff][Aa][Ll][Ss][Ee]|[Oo][Ff][Ff]|0) return 1 ;;
*)
echo "\$${1} is not set properly."
return 1
;;
esac
}
cmd=${1:-start}
case ${cmd} in
force*)
cmd=${cmd#force}
eval ${rcvar}=YES
;;
esac
if checkyesno ${rcvar}
then
else
exit 0
fi
case ${cmd} in
start)
if [ -x $D/src ]; then
echo "Starting ${name}."
cd $D/src
ERL_MAX_PORTS=32000 export ERL_MAX_PORTS
ulimit -n $ERL_MAX_PORTS
su jabber -c "/usr/pkg/bin/erl -sname ejabberd -s ejabberd -heart -detached -sasl sasl_error_logger '{file, \"ejabberd-sasl.log\"}' &" \
1>/dev/null 2>&1
fi
;;
stop)
echo "rpc:call('ejabberd@`hostname -s`', init, stop, [])." | \
su jabber -c "/usr/pkg/bin/erl -sname ejabberdstop"
;;
restart)
echo "rpc:call('ejabberd@`hostname -s`', init, restart, [])." | \
su jabber -c "/usr/pkg/bin/erl -sname ejabberdrestart"
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
esac
-81
View File
@@ -1,81 +0,0 @@
#!/bin/sh
echo '1. fetch, compile, and install erlang'
if [ ! pkg_info erlang 1>/dev/null 2>&1 ]; then
cd /usr/pkgsrc/lang/erlang
make fetch-list|sh
make
make install
fi
if pkg_info erlang | grep -q erlang-9.1nb1; then
else
echo "erlang-9.1nb1 not installed" 1>&2
exit 1
fi
echo '2. install crypt_drv.so'
if [ ! -d /usr/pkg/lib/erlang/lib/crypto-1.1.2.1/priv/lib ] ; then
mkdir -p /usr/pkg/lib/erlang/lib/crypto-1.1.2.1/priv/lib
fi
if [ ! -f /usr/pkg/lib/erlang/lib/crypto-1.1.2.1/priv/lib/crypto_drv.so ]; then
cp work/otp*/lib/crypto/priv/*/*/crypto_drv.so \
/usr/pkg/lib/erlang/lib/crypto-1.1.2.1/priv/lib
fi
echo '3. compile and install elibcrypto.so'
if [ ! -f /usr/pkg/lib/erlang/lib/crypto-1.1.2.1/priv/lib/elibcrypto.so ]; then
cd /usr/pkgsrc/lang/erlang/work/otp_src_R9B-1/lib/crypto/c_src
ld -r -u CRYPTO_set_mem_functions -u MD5 -u MD5_Init -u MD5_Update \
-u MD5_Final -u SHA1 -u SHA1_Init -u SHA1_Update -u SHA1_Final \
-u des_set_key -u des_ncbc_encrypt -u des_ede3_cbc_encrypt \
-L/usr/lib -lcrypto -o ../priv/obj/i386--netbsdelf/elibcrypto.o
cc -shared \
-L/usr/pkgsrc/lang/erlang/work/otp_src_R9B-1/lib/erl_interface/obj/i386--netbsdelf \
-o ../priv/obj/i386--netbsdelf/elibcrypto.so \
../priv/obj/i386--netbsdelf/elibcrypto.o -L/usr/lib -lcrypto
cp ../priv/obj/i386--netbsdelf/elibcrypto.so \
/usr/pkg/lib/erlang/lib/crypto-1.1.2.1/priv/lib
fi
echo '4. compile and install ssl_esock'
if [ ! -f /usr/pkg/lib/erlang/lib/ssl-2.3.5/priv/bin/ssl_esock ]; then
cd /usr/pkg/lib/erlang/lib/ssl-2.3.5/priv/obj/
make
fi
echo '5. initial ejabberd configuration'
cd /usr/pkg/jabber/ejabberd/src
./configure
echo '6. edit ejabberd Makefiles'
for M in Makefile mod_*/Makefile; do
if [ ! -f $M.orig ]; then
mv $M $M.orig
sed -e s%/usr/local%/usr/pkg%g < $M.orig > $M
fi
done
echo '7. compile ejabberd'
gmake
for A in mod_muc mod_pubsub; do
(cd $A; gmake)
done
echo ''
echo 'now edit ejabberd.cfg'
echo ''
echo 'to start ejabberd: erl -sname ejabberd -s ejabberd'
-65
View File
@@ -1,65 +0,0 @@
% jabber.dbc.mtview.ca.us
override_acls.
{acl, admin, {user, "mrose", "jabber.dbc.mtview.ca.us"}}.
{access, announce, [{allow, admin},
{deny, all}]}.
{access, c2s, [{deny, blocked},
{allow, all}]}.
{access, c2s_shaper, [{none, admin},
{normal, all}]}.
{access, configure, [{allow, admin},
{deny, all}]}.
{access, disco_admin, [{allow, admin},
{deny, all}]}.
{access, muc_admin, [{allow, admin},
{deny, all}]}.
{access, register, [{deny, all}]}.
{access, s2s_shaper, [{fast, all}]}.
{auth_method, internal}.
{host, "jabber.dbc.mtview.ca.us"}.
{outgoing_s2s_port, 5269}.
{shaper, normal, {maxrate, 1000}}.
{shaper, fast, {maxrate, 50000}}.
{welcome_message, none}.
{listen, [{5222, ejabberd_c2s,
[{access, c2s},
{shaper, c2s_shaper}]},
{5223, ejabberd_c2s,
[{access, c2s},
{shaper, c2s_shaper},
{ssl, [{certfile, "/etc/openssl/certs/ejabberd.pem"}]}]},
{5269, ejabberd_s2s_in,
[{shaper, s2s_shaper}]}]}.
{modules, [
{mod_register, []},
{mod_roster, []},
{mod_privacy, []},
{mod_configure, []},
{mod_disco, []},
{mod_stats, []},
{mod_vcard, []},
{mod_offline, []},
{mod_echo, [{host, "echo.jabber.dbc.mtview.ca.us"}]},
{mod_private, []},
{mod_muc, []},
{mod_pubsub, []},
{mod_time, []},
{mod_last, []},
{mod_version, []}
]}.
% Local Variables:
% mode: erlang
% End:
-44
View File
@@ -1,44 +0,0 @@
%%%----------------------------------------------------------------------
%%%
%%% ejabberd, Copyright (C) 2002-2022 ProcessOne
%%%
%%% This program 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 program is distributed in the hope that it will be useful,
%%% but WITHOUT ANY WARRANTY; without even the implied warranty of
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
%%% General Public License for more details.
%%%
%%% You should have received a copy of the GNU General Public License along
%%% with this program; if not, write to the Free Software Foundation, Inc.,
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
%%%
%%%----------------------------------------------------------------------
-record(adhoc_request,
{
lang = <<"">> :: binary(),
node = <<"">> :: binary(),
sessionid = <<"">> :: binary(),
action = <<"">> :: binary(),
xdata = false :: false | xmlel(),
others = [] :: [xmlel()]
}).
-record(adhoc_response,
{
lang = <<"">> :: binary(),
node = <<"">> :: binary(),
sessionid = <<"">> :: binary(),
status :: atom(),
defaultaction = <<"">> :: binary(),
actions = [] :: [binary()],
notes = [] :: [{binary(), binary()}],
elements = [] :: [xmlel()]
}).
-type adhoc_request() :: #adhoc_request{}.
-type adhoc_response() :: #adhoc_response{}.
+1 -1
View File
@@ -1,6 +1,6 @@
%%%----------------------------------------------------------------------
%%%
%%% ejabberd, Copyright (C) 2002-2022 ProcessOne
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
%%%
%%% This program is free software; you can redistribute it and/or
%%% modify it under the terms of the GNU General Public License as
+1 -1
View File
@@ -1,6 +1,6 @@
%%%----------------------------------------------------------------------
%%%
%%% ejabberd, Copyright (C) 2002-2022 ProcessOne
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
%%%
%%% This program is free software; you can redistribute it and/or
%%% modify it under the terms of the GNU General Public License as
+1 -1
View File
@@ -1,6 +1,6 @@
%%%----------------------------------------------------------------------
%%%
%%% ejabberd, Copyright (C) 2002-2022 ProcessOne
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
%%%
%%% This program is free software; you can redistribute it and/or
%%% modify it under the terms of the GNU General Public License as
-30
View File
@@ -1,30 +0,0 @@
%%%----------------------------------------------------------------------
%%%
%%% ejabberd, Copyright (C) 2002-2022 ProcessOne
%%%
%%% This program 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 program is distributed in the hope that it will be useful,
%%% but WITHOUT ANY WARRANTY; without even the implied warranty of
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
%%% General Public License for more details.
%%%
%%% You should have received a copy of the GNU General Public License along
%%% with this program; if not, write to the Free Software Foundation, Inc.,
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
%%%
%%%----------------------------------------------------------------------
-record(local_config, {key :: any(), value :: any()}).
-type local_config() :: #local_config{}.
-record(state,
{opts = [] :: [acl:acl() | local_config()],
hosts = [] :: [binary()],
override_local = false :: boolean(),
override_global = false :: boolean(),
override_acls = false :: boolean()}).
+1 -1
View File
@@ -1,6 +1,6 @@
%%%----------------------------------------------------------------------
%%%
%%% ejabberd, Copyright (C) 2002-2022 ProcessOne
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
%%%
%%% This program is free software; you can redistribute it and/or
%%% modify it under the terms of the GNU General Public License as
+1 -1
View File
@@ -1,6 +1,6 @@
%%%----------------------------------------------------------------------
%%%
%%% ejabberd, Copyright (C) 2002-2022 ProcessOne
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
%%%
%%% This program is free software; you can redistribute it and/or
%%% modify it under the terms of the GNU General Public License as
+1 -1
View File
@@ -1,6 +1,6 @@
%%%----------------------------------------------------------------------
%%%
%%% ejabberd, Copyright (C) 2002-2022 ProcessOne
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
%%%
%%% This program is free software; you can redistribute it and/or
%%% modify it under the terms of the GNU General Public License as
+1 -1
View File
@@ -1,6 +1,6 @@
%%%----------------------------------------------------------------------
%%%
%%% ejabberd, Copyright (C) 2002-2022 ProcessOne
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
%%%
%%% This program is free software; you can redistribute it and/or
%%% modify it under the terms of the GNU General Public License as
+20 -1
View File
@@ -1,6 +1,6 @@
%%%----------------------------------------------------------------------
%%%
%%% ejabberd, Copyright (C) 2002-2022 ProcessOne
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
%%%
%%% This program is free software; you can redistribute it and/or
%%% modify it under the terms of the GNU General Public License as
@@ -34,12 +34,14 @@
format_query :: fun(),
format_res :: fun(),
args :: fun(),
flags :: non_neg_integer(),
loc :: {module(), pos_integer()}}).
-else.
-record(sql_query, {hash :: binary(),
format_query :: fun(),
format_res :: fun(),
args :: fun(),
flags :: non_neg_integer(),
loc :: {module(), {pos_integer(), pos_integer()}}}).
-endif.
@@ -48,3 +50,20 @@
boolean :: fun((boolean()) -> binary()),
in_array_string :: fun((binary()) -> binary()),
like_escape :: fun(() -> binary())}).
-record(sql_index, {columns,
unique = false :: boolean()}).
-record(sql_column, {name :: binary(),
type,
default = false,
opts = []}).
-record(sql_table, {name :: binary(),
columns :: [#sql_column{}],
indices = [] :: [#sql_index{}],
post_create}).
-record(sql_schema, {version :: integer(),
tables :: [#sql_table{}],
update = []}).
-record(sql_references, {table :: binary(),
column :: binary()}).
+1 -1
View File
@@ -1,6 +1,6 @@
%%%----------------------------------------------------------------------
%%%
%%% ejabberd, Copyright (C) 2002-2022 ProcessOne
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
%%%
%%% This program is free software; you can redistribute it and/or
%%% modify it under the terms of the GNU General Public License as
+1 -1
View File
@@ -1,6 +1,6 @@
%%%----------------------------------------------------------------------
%%%
%%% ejabberd, Copyright (C) 2002-2022 ProcessOne
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
%%%
%%% This program is free software; you can redistribute it and/or
%%% modify it under the terms of the GNU General Public License as
+1 -1
View File
@@ -1,6 +1,6 @@
%%%----------------------------------------------------------------------
%%%
%%% ejabberd, Copyright (C) 2002-2022 ProcessOne
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
%%%
%%% This program is free software; you can redistribute it and/or
%%% modify it under the terms of the GNU General Public License as
+1 -1
View File
@@ -1,6 +1,6 @@
%%%----------------------------------------------------------------------
%%%
%%% ejabberd, Copyright (C) 2002-2022 ProcessOne
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
%%%
%%% This program is free software; you can redistribute it and/or
%%% modify it under the terms of the GNU General Public License as
+1 -1
View File
@@ -1,6 +1,6 @@
%%%----------------------------------------------------------------------
%%%
%%% ejabberd, Copyright (C) 2002-2022 ProcessOne
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
%%%
%%% This program is free software; you can redistribute it and/or
%%% modify it under the terms of the GNU General Public License as
+3 -1
View File
@@ -1,6 +1,6 @@
%%%----------------------------------------------------------------------
%%%
%%% ejabberd, Copyright (C) 2002-2022 ProcessOne
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
%%%
%%% This program is free software; you can redistribute it and/or
%%% modify it under the terms of the GNU General Public License as
@@ -62,5 +62,7 @@
_ -> 'Elixir.Logger':bare_log(error, io_lib:format(Format, Args), [?MODULE])
end).
-type re_mp() :: {re_pattern, _, _, _, _}. % Copied from re.erl
%% Uncomment if you want to debug p1_fsm/gen_fsm
%%-define(DBGFSM, true).
+1 -1
View File
@@ -1,6 +1,6 @@
%%%----------------------------------------------------------------------
%%%
%%% ejabberd, Copyright (C) 2002-2022 ProcessOne
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
%%%
%%% This program is free software; you can redistribute it and/or
%%% modify it under the terms of the GNU General Public License as
+1 -1
View File
@@ -1,6 +1,6 @@
%%%----------------------------------------------------------------------
%%%
%%% ejabberd, Copyright (C) 2002-2022 ProcessOne
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
%%%
%%% This program is free software; you can redistribute it and/or
%%% modify it under the terms of the GNU General Public License as
+1 -1
View File
@@ -1,6 +1,6 @@
%%%----------------------------------------------------------------------
%%%
%%% ejabberd, Copyright (C) 2002-2022 ProcessOne
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
%%%
%%% This program is free software; you can redistribute it and/or
%%% modify it under the terms of the GNU General Public License as
+1 -1
View File
@@ -1,6 +1,6 @@
%%%----------------------------------------------------------------------
%%%
%%% ejabberd, Copyright (C) 2002-2022 ProcessOne
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
%%%
%%% This program is free software; you can redistribute it and/or
%%% modify it under the terms of the GNU General Public License as
+1 -1
View File
@@ -1,6 +1,6 @@
%%%----------------------------------------------------------------------
%%%
%%% ejabberd, Copyright (C) 2002-2022 ProcessOne
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
%%%
%%% This program is free software; you can redistribute it and/or
%%% modify it under the terms of the GNU General Public License as
+5 -3
View File
@@ -1,6 +1,6 @@
%%%----------------------------------------------------------------------
%%%
%%% ejabberd, Copyright (C) 2002-2022 ProcessOne
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
%%%
%%% This program is free software; you can redistribute it and/or
%%% modify it under the terms of the GNU General Public License as
@@ -38,7 +38,7 @@
description = <<"">> :: binary(),
allow_change_subj = true :: boolean(),
allow_query_users = true :: boolean(),
allow_private_messages = true :: boolean(),
allowpm = anyone :: anyone | participants | moderators | none,
allow_private_messages_from_visitors = anyone :: anyone | moderators | nobody ,
allow_visitor_status = true :: boolean(),
allow_visitor_nickchange = true :: boolean(),
@@ -122,9 +122,10 @@
robots = #{} :: robots(),
nicks = #{} :: nicks(),
affiliations = #{} :: affiliations(),
roles = #{} :: roles(),
history = #lqueue{} :: lqueue(),
subject = [] :: [text()],
subject_author = <<"">> :: binary(),
subject_author = {<<"">>, #jid{}} :: {binary(), jid()},
hats_users = #{} :: map(), % FIXME on OTP 21+: #{ljid() => #{binary() => binary()}},
just_created = erlang:system_time(microsecond) :: true | integer(),
activity = treap:empty() :: treap:treap(),
@@ -137,3 +138,4 @@
-type robots() :: #{jid() => {binary(), stanza()}}.
-type nicks() :: #{binary() => [ljid()]}.
-type affiliations() :: #{ljid() => affiliation() | {affiliation(), binary()}}.
-type roles() :: #{ljid() => role() | {role(), binary()}}.
+1 -1
View File
@@ -1,6 +1,6 @@
%%%----------------------------------------------------------------------
%%%
%%% ejabberd, Copyright (C) 2002-2022 ProcessOne
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
%%%
%%% This program is free software; you can redistribute it and/or
%%% modify it under the terms of the GNU General Public License as
+1 -1
View File
@@ -1,6 +1,6 @@
%%%----------------------------------------------------------------------
%%%
%%% ejabberd, Copyright (C) 2002-2022 ProcessOne
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
%%%
%%% This program is free software; you can redistribute it and/or
%%% modify it under the terms of the GNU General Public License as
+1 -1
View File
@@ -1,6 +1,6 @@
%%%----------------------------------------------------------------------
%%%
%%% ejabberd, Copyright (C) 2002-2022 ProcessOne
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
%%%
%%% This program is free software; you can redistribute it and/or
%%% modify it under the terms of the GNU General Public License as
+1 -1
View File
@@ -2,7 +2,7 @@
%%% RFC 1928 constants.
%%%
%%%
%%% ejabberd, Copyright (C) 2002-2022 ProcessOne
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
%%%
%%% This program is free software; you can redistribute it and/or
%%% modify it under the terms of the GNU General Public License as
+1 -1
View File
@@ -1,5 +1,5 @@
%%%----------------------------------------------------------------------
%%% ejabberd, Copyright (C) 2017-2022 ProcessOne
%%% ejabberd, Copyright (C) 2017-2023 ProcessOne
%%%
%%% This program is free software; you can redistribute it and/or
%%% modify it under the terms of the GNU General Public License as
+1 -1
View File
@@ -1,6 +1,6 @@
%%%----------------------------------------------------------------------
%%%
%%% ejabberd, Copyright (C) 2002-2022 ProcessOne
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
%%%
%%% This program is free software; you can redistribute it and/or
%%% modify it under the terms of the GNU General Public License as
+1 -1
View File
@@ -1,6 +1,6 @@
%%%----------------------------------------------------------------------
%%%
%%% ejabberd, Copyright (C) 2002-2022 ProcessOne
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
%%%
%%% This program is free software; you can redistribute it and/or
%%% modify it under the terms of the GNU General Public License as
+1 -1
View File
@@ -1,6 +1,6 @@
%%%----------------------------------------------------------------------
%%%
%%% ejabberd, Copyright (C) 2002-2022 ProcessOne
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
%%%
%%% This program is free software; you can redistribute it and/or
%%% modify it under the terms of the GNU General Public License as
-22
View File
@@ -1,22 +0,0 @@
%%%----------------------------------------------------------------------
%%%
%%% ejabberd, Copyright (C) 2002-2022 ProcessOne
%%%
%%% This program 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 program is distributed in the hope that it will be useful,
%%% but WITHOUT ANY WARRANTY; without even the implied warranty of
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
%%% General Public License for more details.
%%%
%%% You should have received a copy of the GNU General Public License along
%%% with this program; if not, write to the Free Software Foundation, Inc.,
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
%%%
%%%----------------------------------------------------------------------
-record(vcard_xupdate, {us = {<<>>, <<>>} :: {binary(), binary()},
hash = <<>> :: binary()}).
+1 -1
View File
@@ -1,6 +1,6 @@
%%%-------------------------------------------------------------------
%%% @author Evgeny Khramtsov <ekhramtsov@process-one.net>
%%% @copyright (C) 2002-2022 ProcessOne, SARL. All Rights Reserved.
%%% @copyright (C) 2002-2023 ProcessOne, SARL. All Rights Reserved.
%%%
%%% Licensed under the Apache License, Version 2.0 (the "License");
%%% you may not use this file except in compliance with the License.
+1 -1
View File
@@ -1,6 +1,6 @@
%%%----------------------------------------------------------------------
%%%
%%% ejabberd, Copyright (C) 2002-2022 ProcessOne
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
%%%
%%% This program is free software; you can redistribute it and/or
%%% modify it under the terms of the GNU General Public License as
+2 -2
View File
@@ -36,8 +36,8 @@ defmodule Ejabberd.Config do
case force do
true ->
Ejabberd.Config.Store.stop
Ejabberd.Config.Store.start_link
Ejabberd.Config.Store.stop()
Ejabberd.Config.Store.start_link()
do_init(file_path)
false ->
if not init_already_executed, do: do_init(file_path)
@@ -17,9 +17,9 @@ defmodule Ejabberd.Config.EjabberdLogger do
end
defp do_log_errors({:ok, _mod}), do: nil
defp do_log_errors({:error, _mod, errors}), do: Enum.each errors, &do_log_errors/1
defp do_log_errors({:attribute, errors}), do: Enum.each errors, &log_attribute_error/1
defp do_log_errors({:dependency, errors}), do: Enum.each errors, &log_dependency_error/1
defp do_log_errors({:error, _mod, errors}), do: (Enum.each errors, &do_log_errors/1)
defp do_log_errors({:attribute, errors}), do: (Enum.each errors, &log_attribute_error/1)
defp do_log_errors({:dependency, errors}), do: (Enum.each errors, &log_dependency_error/1)
defp log_attribute_error({{attr_name, _val}, :attr_not_supported}), do:
IO.puts "[ WARN ] Annotation @#{attr_name} is not supported."
+1 -1
View File
@@ -21,7 +21,7 @@ defmodule Ejabberd.Config.OptsFormatter do
end
defp format_attrs_for_ejabberd(opts) when is_list(opts),
do: Enum.map opts, &format_attrs_for_ejabberd/1
do: (Enum.map opts, &format_attrs_for_ejabberd/1)
defp format_attrs_for_ejabberd({:listeners, mods}),
do: {:listen, format_listeners_for_ejabberd(mods)}
+3 -3
View File
@@ -14,15 +14,15 @@ defmodule Mix.Tasks.Ejabberd.Deps.Tree do
def run(_argv) do
# First we need to start manually the store to be available
# during the compilation of the config file.
Ejabberd.Config.Store.start_link
Ejabberd.Config.Store.start_link()
Ejabberd.Config.init(:ejabberd_config.path())
Mix.shell.info "ejabberd modules"
Mix.shell().info "ejabberd modules"
Ejabberd.Config.Store.get(:modules)
|> Enum.reverse # Because of how mods are stored inside the store
|> format_mods
|> Mix.shell.info
|> Mix.shell().info
end
defp format_mods(mods) when is_list(mods) do
+1 -1
View File
@@ -75,7 +75,7 @@ EOF
if test "x`cat conftest.out`" != "xok"; then
AC_MSG_RESULT([failed])
X="`cat conftest.out`"
if test "[$3]" == "warn"; then
if test "[$3]" = "warn"; then
AC_MSG_WARN([$X])
else
AC_MSG_FAILURE([$X])
+232 -32
View File
@@ -2,12 +2,12 @@
.\" Title: ejabberd.yml
.\" Author: [see the "AUTHOR" section]
.\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/>
.\" Date: 05/04/2022
.\" Date: 10/16/2023
.\" Manual: \ \&
.\" Source: \ \&
.\" Language: English
.\"
.TH "EJABBERD\&.YML" "5" "05/04/2022" "\ \&" "\ \&"
.TH "EJABBERD\&.YML" "5" "10/16/2023" "\ \&" "\ \&"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
@@ -82,7 +82,7 @@ All options can be changed in runtime by running \fIejabberdctl reload\-config\f
.sp
Some options can be specified for particular virtual host(s) only using \fIhost_config\fR or \fIappend_host_config\fR options\&. Such options are called \fIlocal\fR\&. Examples are \fImodules\fR, \fIauth_method\fR and \fIdefault_db\fR\&. The options that cannot be defined per virtual host are called \fIglobal\fR\&. Examples are \fIloglevel\fR, \fIcertfiles\fR and \fIlisten\fR\&. It is a configuration mistake to put \fIglobal\fR options under \fIhost_config\fR or \fIappend_host_config\fR section \- ejabberd will refuse to load such configuration\&.
.sp
It is not recommended to write ejabberd\&.yml from scratch\&. Instead it is better to start from "default" configuration file available at https://github\&.com/processone/ejabberd/blob/22\&.05/ejabberd\&.yml\&.example\&. Once you get ejabberd running you can start changing configuration options to meet your requirements\&.
It is not recommended to write ejabberd\&.yml from scratch\&. Instead it is better to start from "default" configuration file available at https://github\&.com/processone/ejabberd/blob/23\&.10/ejabberd\&.yml\&.example\&. Once you get ejabberd running you can start changing configuration options to meet your requirements\&.
.sp
Note that this document is intended to provide comprehensive description of all configuration options that can be consulted to understand the meaning of a particular option, its format and possible values\&. It will be quite hard to understand how to configure ejabberd by reading this document only \- for this purpose the reader is recommended to read online Configuration Guide available at https://docs\&.ejabberd\&.im/admin/configuration\&.
.SH "TOP LEVEL OPTIONS"
@@ -303,7 +303,9 @@ acme:
.PP
\fBallow_contrib_modules\fR: \fItrue | false\fR
.RS 4
Whether to allow installation of third\-party modules or not\&. The default value is
Whether to allow installation of third\-party modules or not\&. See
ejabberd\-contrib
documentation section\&. The default value is
\fItrue\fR\&.
.RE
.PP
@@ -396,6 +398,18 @@ Same as
\fIcache_size\fR
will be used\&.
.RE
.sp
\fINote\fR about the next option: added in 23\&.10:
.PP
\fBauth_external_user_exists_check\fR: \fItrue | false\fR
.RS 4
Supplement check for user existence based on
\fImod_last\fR
data, for authentication methods that don\(cqt have a way to reliable tell if user exists (like is the case for
\fIjwt\fR
and certificate based authentication)\&. This helps with processing offline message for those users\&. The default value is
\fItrue\fR\&.
.RE
.PP
\fBauth_method\fR: \fI[mnesia | sql | anonymous | external | jwt | ldap | pam, \&.\&.\&.]\fR
.RS 4
@@ -559,12 +573,32 @@ A maximum number of items (not memory!) in cache\&. The rule of thumb, for all t
\fIrouter_cache_size\fR, and
\fIsm_cache_size\fR\&.
.RE
.sp
\fINote\fR about the next option: improved in 23\&.01:
.PP
\fBcaptcha_cmd\fR: \fIPath\fR
\fBcaptcha_cmd\fR: \fIPath | ModuleName\fR
.RS 4
Full path to a script that generates
CAPTCHA
images\&. There is no default value: when this option is not set, CAPTCHA functionality is completely disabled\&.
images\&.
\fI@VERSION@\fR
is replaced with ejabberd version number in
\fIXX\&.YY\fR
format\&.
\fI@SEMVER@\fR
is replaced with ejabberd version number in semver format when compiled with Elixir\(cqs mix, or XX\&.YY format otherwise\&. Alternatively, it can be the name of a module that implements ejabberd CAPTCHA support\&. There is no default value: when this option is not set, CAPTCHA functionality is completely disabled\&.
.sp
When using the ejabberd installers or container image, the example captcha scripts can be used like this:
.sp
.if n \{\
.RS 4
.\}
.nf
captcha_cmd: /opt/ejabberd\-@VERSION@/lib/ejabberd\-@SEMVER@/priv/bin/captcha\&.sh
.fi
.if n \{\
.RE
.\}
.RE
.PP
\fBcaptcha_host\fR: \fIString\fR
@@ -581,8 +615,10 @@ CAPTCHA
generated images per minute for any given JID\&. The option is intended to protect the server from CAPTCHA DoS\&. The default value is
\fIinfinity\fR\&.
.RE
.sp
\fINote\fR about the next option: improved in 23\&.04:
.PP
\fBcaptcha_url\fR: \fIURL\fR
\fBcaptcha_url\fR: \fIURL | auto | undefined\fR
.RS 4
An URL where
CAPTCHA
@@ -590,7 +626,14 @@ requests should be sent\&. NOTE: you need to configure
\fIrequest_handlers\fR
for
\fIejabberd_http\fR
listener as well\&. There is no default value\&.
listener as well\&. If set to
\fIauto\fR, it builds the URL using a
\fIrequest_handler\fR
already enabled, with encryption if available\&. If set to
\fIundefined\fR, it builds the URL using the deprecated
\fIcaptcha_host\fR
+ /captcha\&. The default value is
\fIauto\fR\&.
.RE
.PP
\fBcertfiles\fR: \fI[Path, \&.\&.\&.]\fR
@@ -852,6 +895,16 @@ Disallows the usage of those options in the included file
\fIFilename\fR\&. The options that match this criteria are not accepted\&. The default value is an empty list\&.
.RE
.RE
.sp
\fINote\fR about the next option: added in 23\&.10:
.PP
\fBinstall_contrib_modules\fR: \fI[Module, \&.\&.\&.]\fR
.RS 4
Modules to install from
ejabberd\-contrib
at start time\&. The default value is an empty list of modules:
\fI[]\fR\&.
.RE
.PP
\fBjwt_auth_only_rule\fR: \fIAccessName\fR
.RS 4
@@ -1006,6 +1059,29 @@ The option for listeners configuration\&. See the
Listen Modules
section for details\&.
.RE
.sp
\fINote\fR about the next option: added in 22\&.10:
.PP
\fBlog_burst_limit_count\fR: \fINumber\fR
.RS 4
The number of messages to accept in
log_burst_limit_window_time
period before starting to drop them\&. Default 500
.RE
.sp
\fINote\fR about the next option: added in 22\&.10:
.PP
\fBlog_burst_limit_window_time\fR: \fINumber\fR
.RS 4
The time period to rate\-limit log messages by\&. Defaults to 1 second\&.
.RE
.sp
\fINote\fR about the next option: added in 23\&.01:
.PP
\fBlog_modules_fully\fR: \fI[Module, \&.\&.\&.]\fR
.RS 4
List of modules that will log everything independently from the general loglevel option\&.
.RE
.PP
\fBlog_rotate_count\fR: \fINumber\fR
.RS 4
@@ -1063,7 +1139,7 @@ This option can be used to tune tick time parameter of
Whether to use
\fInew\fR
SQL schema\&. All schemas are located at
https://github\&.com/processone/ejabberd/tree/22\&.05/sql\&. There are two schemas available\&. The default legacy schema allows to store one XMPP domain into one ejabberd database\&. The
https://github\&.com/processone/ejabberd/tree/23\&.10/sql\&. There are two schemas available\&. The default legacy schema allows to store one XMPP domain into one ejabberd database\&. The
\fInew\fR
schema allows to handle several XMPP domains in a single ejabberd database\&. Using this
\fInew\fR
@@ -1172,12 +1248,14 @@ option)\&. Later, when memory drops below this
\fI80\fR
percents\&.
.RE
.sp
\fINote\fR about the next option: changed in 23\&.01:
.PP
\fBoutgoing_s2s_families\fR: \fI[ipv4 | ipv6, \&.\&.\&.]\fR
\fBoutgoing_s2s_families\fR: \fI[ipv6 | ipv4, \&.\&.\&.]\fR
.RS 4
Specify which address families to try, in what order\&. The default is
\fI[ipv4, ipv6]\fR
which means it first tries connecting with IPv4, if that fails it tries using IPv6\&.
\fI[ipv6, ipv4]\fR
which means it first tries connecting with IPv6, if that fails it tries using IPv4\&. This option is obsolete and irrelevant when using ejabberd 23\&.01 and Erlang/OTP 22, or newer versions of them\&.
.RE
.sp
\fINote\fR about the next option: added in 20\&.12:
@@ -1458,7 +1536,8 @@ if the latter is not set\&.
\fBs2s_timeout\fR: \fItimeout()\fR
.RS 4
A time to wait before closing an idle s2s connection\&. The default value is
\fI10 minutes\fR\&.
\fI1\fR
hour\&.
.RE
.PP
\fBs2s_tls_compression\fR: \fItrue | false\fR
@@ -1620,10 +1699,13 @@ An interval to make a dummy SQL request to keep alive the connections to the dat
.PP
\fBsql_odbc_driver\fR: \fIPath\fR
.RS 4
Path to the ODBC driver to use to connect to a Microsoft SQL Server database\&. This option is only valid if the
Path to the ODBC driver to use to connect to a Microsoft SQL Server database\&. This option only applies if the
\fIsql_type\fR
option is set to
\fImssql\fR\&. The default value is:
\fImssql\fR
and
\fIsql_server\fR
is not an ODBC connection string\&. The default value is:
\fIlibtdsodbc\&.so\fR
.RE
.PP
@@ -1679,7 +1761,12 @@ if the latter is not set\&.
.PP
\fBsql_server\fR: \fIHost\fR
.RS 4
A hostname or an IP address of the SQL server\&. The default value is
The hostname or IP address of the SQL server\&. For
\fIsql_type\fR
\fImssql\fR
or
\fIodbc\fR
this can also be an ODBC connection string\&. The default value is
\fIlocalhost\fR\&.
.RE
.sp
@@ -1687,7 +1774,7 @@ A hostname or an IP address of the SQL server\&. The default value is
.PP
\fBsql_ssl\fR: \fItrue | false\fR
.RS 4
Whether to use SSL encrypted connections to the SQL server\&. The option is only available for MySQL and PostgreSQL\&. The default value is
Whether to use SSL encrypted connections to the SQL server\&. The option is only available for MySQL, MS SQL and PostgreSQL\&. The default value is
\fIfalse\fR\&.
.RE
.PP
@@ -1698,7 +1785,7 @@ A path to a file with CA root certificates that will be used to verify SQL conne
and
\fIsql_ssl_verify\fR
options are set to
\fItrue\fR\&. There is no default which means certificate verification is disabled\&.
\fItrue\fR\&. There is no default which means certificate verification is disabled\&. This option has no effect for MS SQL\&.
.RE
.PP
\fBsql_ssl_certfile\fR: \fIPath\fR
@@ -1706,7 +1793,7 @@ options are set to
A path to a certificate file that will be used for SSL connections to the SQL server\&. Implies
\fIsql_ssl\fR
option is set to
\fItrue\fR\&. There is no default which means ejabberd won\(cqt provide a client certificate to the SQL server\&.
\fItrue\fR\&. There is no default which means ejabberd won\(cqt provide a client certificate to the SQL server\&. This option has no effect for MS SQL\&.
.RE
.PP
\fBsql_ssl_verify\fR: \fItrue | false\fR
@@ -1716,7 +1803,7 @@ Whether to verify SSL connection to the SQL server against CA root certificates
option\&. Implies
\fIsql_ssl\fR
option is set to
\fItrue\fR\&. The default value is
\fItrue\fR\&. This option has no effect for MS SQL\&. The default value is
\fIfalse\fR\&.
.RE
.PP
@@ -1931,7 +2018,7 @@ ejabberdctl srg\-create g1 example\&.org "\*(AqGroup number 1\*(Aq" this_is_g1 g
.RE
.SS "mod_admin_update_sql"
.sp
This module can be used to update existing SQL database from the default to the new schema\&. Check the section Default and New Schemas for details\&. Please note that only PostgreSQL is supported\&. When the module is loaded use \fIupdate_sql\fR API\&.
This module can be used to update existing SQL database from the default to the new schema\&. Check the section Default and New Schemas for details\&. Please note that only MS SQL, MySQL, and PostgreSQL are supported\&. When the module is loaded use \fIupdate_sql\fR API\&.
.sp
The module has no options\&.
.SS "mod_announce"
@@ -3801,12 +3888,74 @@ Same as top\-level
option, but applied to this module only\&.
.RE
.RE
.SS "mod_mqtt_bridge"
.sp
This module adds ability to synchronize local MQTT topics with data on remote servers It can update topics on remote servers when local user updates local topic, or can subscribe for changes on remote server, and update local copy when remote data is updated\&. It is available since ejabberd 23\&.01\&.
.sp
.it 1 an-trap
.nr an-no-space-flag 1
.nr an-break-flag 1
.br
.ps +1
\fBAvailable options:\fR
.RS 4
.PP
\fBreplication_user\fR: \fIJID\fR
.RS 4
Identifier of a user that will be assigned as owner of local changes\&.
.RE
.PP
\fBservers\fR: \fI{ServerUrl: {publish: [TopicPairs, subscribe: [TopicPairs], authentication: [AuthInfo]}}]\fR
.RS 4
Declaration of data to share, must contain
\fIpublish\fR
or
\fIsubscribe\fR
or both, and
\fIauthentication\fR
section with username/password field or certfile pointing to client certificate\&. Accepted urls can use schema mqtt, mqtts (mqtt with tls), mqtt5, mqtt5s (both to trigger v5 protocol), ws, wss, ws5, wss5\&. Certifcate authentication can be only used with mqtts, mqtt5s, wss, wss5\&.
.RE
.RE
.sp
.it 1 an-trap
.nr an-no-space-flag 1
.nr an-break-flag 1
.br
.ps +1
\fBExample:\fR
.RS 4
.sp
.if n \{\
.RS 4
.\}
.nf
modules:
\&.\&.\&.
mod_mqtt_bridge:
servers:
"mqtt://server\&.com":
publish:
"localA": "remoteA" # local changes to \*(AqlocalA\*(Aq will be replicated on remote server as \*(AqremoteA\*(Aq
"topicB": "topicB"
subscribe:
"remoteB": "localB" # changes to \*(AqremoteB\*(Aq on remote server will be stored as \*(AqlocalB\*(Aq on local server
authentication:
certfile: "/etc/ejabberd/mqtt_server\&.pem"
replication_user: "mqtt@xmpp\&.server\&.com"
\&.\&.\&.
.fi
.if n \{\
.RE
.\}
.RE
.SS "mod_muc"
.sp
This module provides support for XEP\-0045: Multi\-User Chat\&. Users can discover existing rooms, join or create them\&. Occupants of a room can chat in public or have private chats\&.
.sp
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 XMPP client and register in the MUC service\&.
.sp
It is also possible to register a nickname in a room, so nobody else can use that nickname in that room\&. If a nick is registered in the MUC service, that nick cannot be registered in any room, and vice versa: a nick that is registered in a room cannot be registered at the MUC service\&.
.sp
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 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\&.
.sp
.it 1 an-trap
@@ -3849,12 +3998,14 @@ To configure who is allowed to modify the
room option\&. The default value is
\fIall\fR, which means everyone is allowed to modify that option\&.
.RE
.sp
\fINote\fR about the next option: improved in 23\&.10:
.PP
\fBaccess_register\fR: \fIAccessName\fR
.RS 4
This option specifies who is allowed to register nickname within the Multi\-User Chat service\&. The default is
This option specifies who is allowed to register nickname within the Multi\-User Chat service and rooms\&. The default is
\fIall\fR
for backward compatibility, which means that any user is allowed to register any free nick\&.
for backward compatibility, which means that any user is allowed to register any free nick in the MUC service and in the rooms\&.
.RE
.sp
\fINote\fR about the next option: added in 22\&.05:
@@ -3886,12 +4037,6 @@ Allow occupants to change the subject\&. The default value is
\fItrue\fR\&.
.RE
.PP
\fBallow_private_messages\fR: \fItrue | false\fR
.RS 4
Occupants can send private messages to other occupants\&. The default value is
\fItrue\fR\&.
.RE
.PP
\fBallow_private_messages_from_visitors\fR: \fIanyone | moderators | nobody\fR
.RS 4
Visitors can send private messages to other occupants\&. The default value is
@@ -3936,6 +4081,12 @@ Allow visitors in a moderated room to request voice\&. The default value is
\fItrue\fR\&.
.RE
.PP
\fBallowpm\fR: \fIanyone | participants | moderators | none\fR
.RS 4
Who can send private messages\&. The default value is
\fIanyone\fR\&.
.RE
.PP
\fBanonymous\fR: \fItrue | false\fR
.RS 4
The room is anonymous: occupants don\(cqt see the real JIDs of other occupants\&. Note that the room moderators can always see the real JIDs of the occupants\&. The default value is
@@ -4552,6 +4703,43 @@ or a conference JID is appended to the
otherwise\&. There is no default value\&.
.RE
.RE
.SS "mod_muc_occupantid"
.sp
This module implements XEP\-0421: Anonymous unique occupant identifiers for MUCs\&.
.sp
When the module is enabled, the feature is enabled in all semi\-anonymous rooms\&.
.sp
This module is available since ejabberd 23\&.10\&.
.sp
The module has no options\&.
.SS "mod_muc_rtbl"
.sp
This module implement Real\-time blocklists for MUC rooms\&.
.sp
It works by observing remote pubsub node conforming with specification described in https://xmppbl\&.org/\&.
.sp
This module is available since ejabberd 23\&.04\&.
.sp
.it 1 an-trap
.nr an-no-space-flag 1
.nr an-break-flag 1
.br
.ps +1
\fBAvailable options:\fR
.RS 4
.PP
\fBrtbl_node\fR: \fIPubsubNodeName\fR
.RS 4
Name of pubsub node that should be used to track blocked users\&. The default value is
\fImuc_bans_sha256\fR\&.
.RE
.PP
\fBrtbl_server\fR: \fIDomain\fR
.RS 4
Domain of xmpp server that serves block list\&. The default value is
\fIxmppbl\&.org\fR
.RE
.RE
.SS "mod_multicast"
.sp
This module implements a service for XEP\-0033: Extended Stanza Addressing\&.
@@ -5046,6 +5234,8 @@ This module adds support for XEP\-0049: Private XML Storage\&.
.sp
Using this method, XMPP entities can store private data on the server, retrieve it whenever necessary and share it between multiple connected clients of the same user\&. The data stored might be anything, as long as it is a valid XML\&. One typical usage is storing a bookmark of all user\(cqs conferences (XEP\-0048: Bookmarks)\&.
.sp
It also implements the bookmark conversion described in XEP\-0402: PEP Native Bookmarks, see the command bookmarks_to_pep\&.
.sp
.it 1 an-trap
.nr an-no-space-flag 1
.nr an-break-flag 1
@@ -5787,6 +5977,16 @@ If this option is set to
\fItrue\fR, the sender\(cqs JID is included with push notifications generated for incoming messages with a body\&. The default value is
\fIfalse\fR\&.
.RE
.sp
\fINote\fR about the next option: added in 23\&.10:
.PP
\fBnotify_on\fR: \fImessages | all\fR
.RS 4
If this option is set to
\fImessages\fR, notifications are generated only for actual chat messages with a body text (or some encrypted payload)\&. If it\(cqs set to
\fIall\fR, any kind of XMPP stanza will trigger a notification\&. If unsure, it\(cqs strongly recommended to stick to
\fIall\fR, which is the default value\&.
.RE
.PP
\fBuse_cache\fR: \fItrue | false\fR
.RS 4
@@ -7597,13 +7797,13 @@ TODO
ProcessOne\&.
.SH "VERSION"
.sp
This document describes the configuration file of ejabberd 22\&.05\&. Configuration options of other ejabberd versions may differ significantly\&.
This document describes the configuration file of ejabberd 23\&.10\&. Configuration options of other ejabberd versions may differ significantly\&.
.SH "REPORTING BUGS"
.sp
Report bugs to https://github\&.com/processone/ejabberd/issues
.SH "SEE ALSO"
.sp
Default configuration file: https://github\&.com/processone/ejabberd/blob/22\&.05/ejabberd\&.yml\&.example
Default configuration file: https://github\&.com/processone/ejabberd/blob/23\&.10/ejabberd\&.yml\&.example
.sp
Main site: https://ejabberd\&.im
.sp
@@ -7614,4 +7814,4 @@ Configuration Guide: https://docs\&.ejabberd\&.im/admin/configuration
Source code: https://github\&.com/processone/ejabberd
.SH "COPYING"
.sp
Copyright (c) 2002\-2022 ProcessOne\&.
Copyright (c) 2002\-2023 ProcessOne\&.
+11 -11
View File
@@ -8,7 +8,7 @@ defmodule Ejabberd.MixProject do
elixir: elixir_required_version(),
elixirc_paths: ["lib"],
compile_path: ".",
compilers: [:asn1] ++ Mix.compilers,
compilers: [:asn1] ++ Mix.compilers(),
erlc_options: erlc_options(),
erlc_paths: ["asn1", "src"],
# Elixir tests are starting the part of ejabberd they need
@@ -43,7 +43,7 @@ defmodule Ejabberd.MixProject do
extra_applications: [:mix],
applications: [:idna, :inets, :kernel, :sasl, :ssl, :stdlib,
:base64url, :fast_tls, :fast_xml, :fast_yaml, :jiffy, :jose,
:p1_utils, :stringprep, :yconf],
:p1_utils, :stringprep, :syntax_tools, :yconf],
included_applications: [:mnesia, :os_mon,
:cache_tab, :eimp, :mqtree, :p1_acme,
:p1_oauth2, :pkix, :xmpp]
@@ -101,19 +101,20 @@ defmodule Ejabberd.MixProject do
[{:base64url, "~> 1.0"},
{:cache_tab, "~> 1.0"},
{:eimp, "~> 1.0"},
{:ex_doc, ">= 0.0.0", only: :dev},
{:fast_tls, "~> 1.1"},
{:fast_xml, "~> 1.1"},
{:fast_yaml, "~> 1.0"},
{:idna, "~> 6.0"},
{:jiffy, "~> 1.1.1"},
{:jose, "~> 1.11.1"},
{:jose, "~> 1.11.5"},
{:mqtree, "~> 1.0"},
{:p1_acme, "~> 1.0"},
{:p1_oauth2, "~> 0.6"},
{:p1_utils, "~> 1.0"},
{:pkix, "~> 1.0"},
{:stringprep, ">= 1.0.26"},
{:xmpp, "~> 1.5"},
{:xmpp, git: "https://github.com/processone/xmpp.git", ref: "68cb07d5d0f36d5c51bfea496c638f3ee9b36027", override: true},
{:yconf, "~> 1.0"}]
++ cond_deps()
end
@@ -137,7 +138,7 @@ defmodule Ejabberd.MixProject do
{config(:zlib), {:ezlib, "~> 1.0"}},
{if_version_below('22', true), {:lager, "~> 3.9.1"}},
{config(:lua), {:luerl, "~> 1.0"}},
{config(:mysql), {:p1_mysql, "~> 1.0"}},
{config(:mysql), {:p1_mysql, " >= 1.0.22"}},
{config(:pgsql), {:p1_pgsql, "~> 1.1"}},
{config(:sqlite), {:sqlite3, "~> 1.1"}},
{config(:stun), {:stun, "~> 1.0"}}], do:
@@ -163,7 +164,7 @@ defmodule Ejabberd.MixProject do
"COPYING", "README.md",
"mix.exs", "rebar.config", "rebar.config.script", "vars.config"],
maintainers: ["ProcessOne"],
licenses: ["GPLv2"],
licenses: ["GPL-2.0-or-later"],
links: %{"Site" => "https://www.ejabberd.im",
"Documentation" => "http://docs.ejabberd.im",
"Source" => "https://github.com/processone/ejabberd",
@@ -259,7 +260,7 @@ defmodule Ejabberd.MixProject do
end
# Mix/Elixir lower than 1.11.0 use config/releases.exs instead of runtime.exs
case Version.match?(System.version, "~> 1.11") do
case Version.match?(System.version(), "~> 1.11") do
true ->
:ok
false ->
@@ -270,8 +271,7 @@ defmodule Ejabberd.MixProject do
Mix.Generator.copy_template("ejabberdctl.example1", "ejabberdctl.example2", assigns)
execute.("sed -e 's|{{\\(\[_a-z\]*\\)}}|<%= @\\1 %>|g' ejabberdctl.example2> ejabberdctl.example2a")
Mix.Generator.copy_template("ejabberdctl.example2a", "ejabberdctl.example2b", assigns)
execute.("sed -e 's|{{\\(\[_a-z\]*\\)}}|<%= @\\1 %>|g' ejabberdctl.example2b > ejabberdctl.example3")
execute.("sed -e 's|^ERLANG_NODE=ejabberd@localhost|ERLANG_NODE=ejabberd|g' ejabberdctl.example3 > ejabberdctl.example4")
execute.("sed -e 's|{{\\(\[_a-z\]*\\)}}|<%= @\\1 %>|g' ejabberdctl.example2b > ejabberdctl.example4")
execute.("sed -e 's|^ERLANG_OPTS=\"|ERLANG_OPTS=\"-boot ../releases/#{release.version}/start_clean -boot_var RELEASE_LIB ../lib |' ejabberdctl.example4 > ejabberdctl.example5")
execute.("sed -e 's|^INSTALLUSER=|ERL_OPTIONS=\"-setcookie \\$\\(cat \"\\${SCRIPT_DIR%/*}/releases/COOKIE\")\"\\nINSTALLUSER=|g' ejabberdctl.example5 > ejabberdctl.example6")
Mix.Generator.copy_template("ejabberdctl.example6", "#{ro}/bin/ejabberdctl", assigns)
@@ -338,7 +338,7 @@ defmodule Mix.Tasks.Compile.Asn1 do
def run(args) do
{opts, _, _} = OptionParser.parse(args, switches: [force: :boolean])
project = Mix.Project.config
project = Mix.Project.config()
source_paths = project[:asn1_paths] || ["asn1"]
dest_paths = project[:asn1_target] || ["src"]
mappings = Enum.zip(source_paths, dest_paths)
@@ -360,7 +360,7 @@ defmodule Mix.Tasks.Compile.Asn1 do
end
def manifests, do: [manifest()]
defp manifest, do: Path.join(Mix.Project.manifest_path, @manifest)
defp manifest, do: Path.join(Mix.Project.manifest_path(), @manifest)
def clean, do: Erlang.clean(manifest())
end
+18 -12
View File
@@ -1,29 +1,35 @@
%{
"base64url": {:hex, :base64url, "1.0.1", "f8c7f2da04ca9a5d0f5f50258f055e1d699f0e8bf4cfdb30b750865368403cf6", [:rebar3], [], "hexpm", "f9b3add4731a02a9b0410398b475b33e7566a695365237a6bdee1bb447719f5c"},
"cache_tab": {:hex, :cache_tab, "1.0.30", "6d35eecfb65fbe5fc85988503a27338d32de01243f3fc8ea3ee7161af08725a4", [:rebar3], [{:p1_utils, "1.0.25", [hex: :p1_utils, repo: "hexpm", optional: false]}], "hexpm", "6d8a5e00d8f84c42627706a6dbedb02e34d58495f3ed61935c8475ca0531cda0"},
"earmark_parser": {:hex, :earmark_parser, "1.4.33", "3c3fd9673bb5dcc9edc28dd90f50c87ce506d1f71b70e3de69aa8154bc695d44", [:mix], [], "hexpm", "2d526833729b59b9fdb85785078697c72ac5e5066350663e5be6a1182da61b8f"},
"eimp": {:hex, :eimp, "1.0.22", "fa9b376ef0b50e8455db15c7c11dea4522c6902e04412288aab436d26335f6eb", [:rebar3], [{:p1_utils, "1.0.25", [hex: :p1_utils, repo: "hexpm", optional: false]}], "hexpm", "b3b9ffb1d9a5f4a2ba88ac418a819164932d9a9d3a2fc3d32ca338ce855c4392"},
"epam": {:hex, :epam, "1.0.12", "2a5625d4133bca4b3943791a3f723ba764455a461ae9b6ba5debb262efcf4b40", [:rebar3], [], "hexpm", "54c166c4459cef72f2990a3d89a8f0be27180fe0ab0f24b28ddcc3b815f49f7f"},
"eredis": {:hex, :eredis, "1.2.0", "0b8e9cfc2c00fa1374cd107ea63b49be08d933df2cf175e6a89b73dd9c380de4", [:rebar3], [], "hexpm", "d9b5abef2c2c8aba8f32aa018203e0b3dc8b1157773b254ab1d4c2002317f1e1"},
"esip": {:hex, :esip, "1.0.47", "fdd483ca7e9e46a6d5a62937cbacb147adbe0bdfca5ebc59774cc0a1afa381be", [:rebar3], [{:fast_tls, "1.1.15", [hex: :fast_tls, repo: "hexpm", optional: false]}, {:p1_utils, "1.0.25", [hex: :p1_utils, repo: "hexpm", optional: false]}, {:stun, "1.2.2", [hex: :stun, repo: "hexpm", optional: false]}], "hexpm", "99e703c49e8d325b24cb147c5087151c196406e8572e3a33db95099991fe8f3e"},
"esip": {:hex, :esip, "1.0.50", "e657d3af332c711311f4eb540e73eb540ea485a25977aef8736fb8cd3845ed9f", [:rebar3], [{:fast_tls, "1.1.16", [hex: :fast_tls, repo: "hexpm", optional: false]}, {:p1_utils, "1.0.25", [hex: :p1_utils, repo: "hexpm", optional: false]}, {:stun, "1.2.10", [hex: :stun, repo: "hexpm", optional: false]}], "hexpm", "7dfb9f16c65c5e49eeba77025d0f894b5fb240be745d11b978ea1438cd47533d"},
"ex_doc": {:hex, :ex_doc, "0.30.6", "5f8b54854b240a2b55c9734c4b1d0dd7bdd41f71a095d42a70445c03cf05a281", [:mix], [{:earmark_parser, "~> 1.4.31", [hex: :earmark_parser, repo: "hexpm", optional: false]}, {:makeup_elixir, "~> 0.14", [hex: :makeup_elixir, repo: "hexpm", optional: false]}, {:makeup_erlang, "~> 0.1", [hex: :makeup_erlang, repo: "hexpm", optional: false]}], "hexpm", "bd48f2ddacf4e482c727f9293d9498e0881597eae6ddc3d9562bd7923375109f"},
"ezlib": {:hex, :ezlib, "1.0.12", "ffe906ba10d03aaee7977e1e0e81d9ffc3bb8b47fb9cd8e2e453507a2e56221f", [:rebar3], [{:p1_utils, "1.0.25", [hex: :p1_utils, repo: "hexpm", optional: false]}], "hexpm", "30e94355fb42260aab6e12582cb0c56bf233515e655c8aeaf48760e7561e4ebb"},
"fast_tls": {:hex, :fast_tls, "1.1.15", "398e7ba1076db139307ebea839428e2836ab682e4dac61d95b4705a26aff06b7", [:rebar3], [{:p1_utils, "1.0.25", [hex: :p1_utils, repo: "hexpm", optional: false]}], "hexpm", "ef516aa226de9a4605704c18499284cd4fc115a73bd72490341972ce0c2b4d30"},
"fast_tls": {:hex, :fast_tls, "1.1.16", "85fa7f3112ea4ff5ccb4f3abadc130a8c855ad74eb00869487399cb0c322d208", [:rebar3], [{:p1_utils, "1.0.25", [hex: :p1_utils, repo: "hexpm", optional: false]}], "hexpm", "aa08cca89b4044e74f1f12e399817d8beaeae3ee006c98a893c0bfb1d81fba51"},
"fast_xml": {:hex, :fast_xml, "1.1.49", "67d9bfcadd04efd930e0ee1412b5ea09d3e791f1fdbd4d3e9a8c8f29f8bfed8c", [:rebar3], [{:p1_utils, "1.0.25", [hex: :p1_utils, repo: "hexpm", optional: false]}], "hexpm", "01da064d2f740818956961036637fee2475c17bf8aab9442217f90dc77883593"},
"fast_yaml": {:hex, :fast_yaml, "1.0.33", "5c735da21a4d23b7ed592603b1cd7aba25f91a735d3c0a8df2816d335a8def6e", [:rebar3], [{:p1_utils, "1.0.25", [hex: :p1_utils, repo: "hexpm", optional: false]}], "hexpm", "efa60a2acbcd2c2e72eb5e16f1475726b9d88afca3ad6dbb4bc549266863e7c8"},
"fast_yaml": {:hex, :fast_yaml, "1.0.36", "65413a34a570fd4e205a460ba602e4ee7a682f35c22d2e1c839025dbf515105c", [:rebar3], [{:p1_utils, "1.0.25", [hex: :p1_utils, repo: "hexpm", optional: false]}], "hexpm", "1abe8f758fc2a86b08edff80bbc687cfd41ebc1412cfec0ef4a0acfcd032052f"},
"idna": {:hex, :idna, "6.0.0", "689c46cbcdf3524c44d5f3dde8001f364cd7608a99556d8fbd8239a5798d4c10", [:rebar3], [{:unicode_util_compat, "0.4.1", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "4bdd305eb64e18b0273864920695cb18d7a2021f31a11b9c5fbcd9a253f936e2"},
"jiffy": {:hex, :jiffy, "1.1.1", "aca10f47aa91697bf24ab9582c74e00e8e95474c7ef9f76d4f1a338d0f5de21b", [:rebar3], [], "hexpm", "62e1f0581c3c19c33a725c781dfa88410d8bff1bbafc3885a2552286b4785c4c"},
"jose": {:hex, :jose, "1.11.1", "59da64010c69aad6cde2f5b9248b896b84472e99bd18f246085b7b9fe435dcdb", [:mix, :rebar3], [], "hexpm", "078f6c9fb3cd2f4cfafc972c814261a7d1e8d2b3685c0a76eb87e158efff1ac5"},
"jose": {:hex, :jose, "1.11.5", "3bc2d75ffa5e2c941ca93e5696b54978323191988eb8d225c2e663ddfefd515e", [:mix, :rebar3], [], "hexpm", "dcd3b215bafe02ea7c5b23dafd3eb8062a5cd8f2d904fd9caa323d37034ab384"},
"luerl": {:hex, :luerl, "1.0.0", "1b68c30649323590d5339b967b419260500ffe520cd3abc1987482a82d3b5a6c", [:rebar3], [], "hexpm", "c17bc45cb4b0845ec975387f9a5d8c81ab60456698527a29c96f78992af86bd1"},
"makeup": {:hex, :makeup, "1.1.0", "6b67c8bc2882a6b6a445859952a602afc1a41c2e08379ca057c0f525366fc3ca", [:mix], [{:nimble_parsec, "~> 1.2.2 or ~> 1.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "0a45ed501f4a8897f580eabf99a2e5234ea3e75a4373c8a52824f6e873be57a6"},
"makeup_elixir": {:hex, :makeup_elixir, "0.16.1", "cc9e3ca312f1cfeccc572b37a09980287e243648108384b97ff2b76e505c3555", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}, {:nimble_parsec, "~> 1.2.3 or ~> 1.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "e127a341ad1b209bd80f7bd1620a15693a9908ed780c3b763bccf7d200c767c6"},
"makeup_erlang": {:hex, :makeup_erlang, "0.1.2", "ad87296a092a46e03b7e9b0be7631ddcf64c790fa68a9ef5323b6cbb36affc72", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "f3f5a1ca93ce6e092d92b6d9c049bcda58a3b617a8d888f8e7231c85630e8108"},
"mqtree": {:hex, :mqtree, "1.0.15", "bc54d8b88698fdaebc1e27a9ac43688b927e3dbc05bd5cee4057e69a89a8cf17", [:rebar3], [{:p1_utils, "1.0.25", [hex: :p1_utils, repo: "hexpm", optional: false]}], "hexpm", "294ac43c9b3d372e24eeea56c259e19c655522dcff64a55c401a639663b9d829"},
"p1_acme": {:hex, :p1_acme, "1.0.19", "5c4cb2bf627c526e242a0106eef0015b98b440b1aa03fd29e44c62c6b26cd545", [:rebar3], [{:base64url, "1.0.1", [hex: :base64url, repo: "hexpm", optional: false]}, {:idna, "6.0.0", [hex: :idna, repo: "hexpm", optional: false]}, {:jiffy, "1.1.1", [hex: :jiffy, repo: "hexpm", optional: false]}, {:jose, "1.11.1", [hex: :jose, repo: "hexpm", optional: false]}, {:yconf, "1.0.13", [hex: :yconf, repo: "hexpm", optional: false]}], "hexpm", "904023023ca1d5785d1f3ba5670676d30abafd52445e4b60236d2571cc7b550c"},
"p1_mysql": {:hex, :p1_mysql, "1.0.19", "22f1be58397780a7d580a954e7af66cde32a29dee1a24ab2aa196272fc654a4a", [:rebar3], [], "hexpm", "88f6cdb510e8959c14b6ae84ccda04967e3de239228f859d8341da67949622b1"},
"nimble_parsec": {:hex, :nimble_parsec, "1.3.1", "2c54013ecf170e249e9291ed0a62e5832f70a476c61da16f6aac6dca0189f2af", [:mix], [], "hexpm", "2682e3c0b2eb58d90c6375fc0cc30bc7be06f365bf72608804fb9cffa5e1b167"},
"p1_acme": {:hex, :p1_acme, "1.0.22", "b40a8031ef0f4592e97e6a8e08e53dbd31a2198cb8377b249f0caea4f8025a1d", [:rebar3], [{:base64url, "1.0.1", [hex: :base64url, repo: "hexpm", optional: false]}, {:idna, "6.0.0", [hex: :idna, repo: "hexpm", optional: false]}, {:jiffy, "1.1.1", [hex: :jiffy, repo: "hexpm", optional: false]}, {:jose, "1.11.5", [hex: :jose, repo: "hexpm", optional: false]}, {:yconf, "1.0.15", [hex: :yconf, repo: "hexpm", optional: false]}], "hexpm", "c2b25a7b295a435dac4f278a73d8417ff2b0020c45e1683504e8692ef03e2057"},
"p1_mysql": {:hex, :p1_mysql, "1.0.22", "593107adbce3df1bb460fd442320ff540dfba0232f45278441ef8d2de8d08163", [:rebar3], [], "hexpm", "188f04b3ba265a6e7657c67a6780a2f5f973fe86670159ef593aaf44dbd3d5a2"},
"p1_oauth2": {:hex, :p1_oauth2, "0.6.11", "96b4e85c08355720523c2f892011a81a07994d15c179ce4dd82d704fecad15b2", [:rebar3], [], "hexpm", "9c3c6ae59382b9525473bb02a32949889808f33f95f6db10594fd92acd1f63db"},
"p1_pgsql": {:hex, :p1_pgsql, "1.1.18", "db3473d1bba4b45815b05226433fc589a5934190c2afa05fdba45c6a238bf2c6", [:rebar3], [{:xmpp, "1.5.8", [hex: :xmpp, repo: "hexpm", optional: false]}], "hexpm", "4a3863a5d59fed9f64fec8497a7d4e3d34edf31932364a74371097da2b25fd46"},
"p1_pgsql": {:hex, :p1_pgsql, "1.1.23", "4a8c17b642dcf5265a910d1a0b86ffb2a9dd057c7b51c3def5eacbcc4f27ced9", [:rebar3], [{:xmpp, "1.7.0", [hex: :xmpp, repo: "hexpm", optional: false]}], "hexpm", "819222bcb5a74581263282ff9cdc679adeefc663dcf49ddc778aeaae90be05a6"},
"p1_utils": {:hex, :p1_utils, "1.0.25", "2d39b5015a567bbd2cc7033eeb93a7c60d8c84efe1ef69a3473faa07fa268187", [:rebar3], [], "hexpm", "9219214428f2c6e5d3187ff8eb9a8783695c2427420be9a259840e07ada32847"},
"pkix": {:hex, :pkix, "1.0.9", "eb20b2715d71a23b4fe7e754dae9281a964b51113d0bba8adf9da72bf9d65ac2", [:rebar3], [], "hexpm", "daab2c09cdd4eda05c9b45a5c00e994a1a5f27634929e1377e2e59b707103e3a"},
"sqlite3": {:hex, :sqlite3, "1.1.13", "94a6e0508936514e1493efeb9b939a9bbfa861f4b8dc93ef174ae88a1d9381d3", [:rebar3], [], "hexpm", "b77fad096d1ae9553ad8551ea75bd0d64a2f5b09923a7ca48b14215564dbfc48"},
"stringprep": {:hex, :stringprep, "1.0.28", "9a9823d8449309e4e8ca0bdb2547e43d5de4e1d943f23826c25015150b8daa66", [:rebar3], [{:p1_utils, "1.0.25", [hex: :p1_utils, repo: "hexpm", optional: false]}], "hexpm", "66df7d1181fec899c824bd8d00253f369103514828db5e04ee1ba7a0a61568e0"},
"stun": {:hex, :stun, "1.2.2", "8c61f71c5094c69739dc6b3e916be734ce80c1a15551e00d547115a66e91e5bc", [:rebar3], [{:fast_tls, "1.1.15", [hex: :fast_tls, repo: "hexpm", optional: false]}, {:p1_utils, "1.0.25", [hex: :p1_utils, repo: "hexpm", optional: false]}], "hexpm", "4f54c7b86e2aa413faec35a9fb699048471e1c06a721c53e6ac44b405fd2a3b9"},
"sqlite3": {:hex, :sqlite3, "1.1.14", "f9ea0cff8540865fdfdb7e24eef34dc46677364b1c070896e99b5bf08c8a7fd7", [:rebar3], [], "hexpm", "85054b6ca297343c159ed6794a473ff2c8eeabd854b6fe02f711c0bfd373ce86"},
"stringprep": {:hex, :stringprep, "1.0.29", "02f23e8c3a219a3dfe40a22e908bece3a2f68af0ff599ea8a7b714ecb21e62ee", [:rebar3], [{:p1_utils, "1.0.25", [hex: :p1_utils, repo: "hexpm", optional: false]}], "hexpm", "928eba304c3006eb1512110ebd7b87db163b00859a09375a1e4466152c6c462a"},
"stun": {:hex, :stun, "1.2.10", "53f8be69e14f9476dcaf1dfb626b9dad2380f3fba8faf2c30bdf74311cfdc008", [:rebar3], [{:fast_tls, "1.1.16", [hex: :fast_tls, repo: "hexpm", optional: false]}, {:p1_utils, "1.0.25", [hex: :p1_utils, repo: "hexpm", optional: false]}], "hexpm", "19d3eecbfcc6935f0880f8ef7e77ff373900c604092937a1acda166ae3fb40e9"},
"unicode_util_compat": {:hex, :unicode_util_compat, "0.4.1", "d869e4c68901dd9531385bb0c8c40444ebf624e60b6962d95952775cac5e90cd", [:rebar3], [], "hexpm", "1d1848c40487cdb0b30e8ed975e34e025860c02e419cb615d255849f3427439d"},
"xmpp": {:hex, :xmpp, "1.5.8", "96c08537a4d7d9695326a01be8162cb980803be4358671b0fd1369ae9c5e05d8", [:rebar3], [{:ezlib, "1.0.12", [hex: :ezlib, repo: "hexpm", optional: false]}, {:fast_tls, "1.1.15", [hex: :fast_tls, repo: "hexpm", optional: false]}, {:fast_xml, "1.1.49", [hex: :fast_xml, repo: "hexpm", optional: false]}, {:idna, "6.0.0", [hex: :idna, repo: "hexpm", optional: false]}, {:p1_utils, "1.0.25", [hex: :p1_utils, repo: "hexpm", optional: false]}, {:stringprep, "1.0.28", [hex: :stringprep, repo: "hexpm", optional: false]}], "hexpm", "966a4539dea7331310be809eaccd5d02af5874303a90679d35bee2117f825b4a"},
"yconf": {:hex, :yconf, "1.0.13", "25557689f71897e20c8630ae8865ce083437d325e7d5a6f8ee950c7e0e7be4e1", [:rebar3], [{:fast_yaml, "1.0.33", [hex: :fast_yaml, repo: "hexpm", optional: false]}], "hexpm", "3fd478212b3da121229684288f5154c3610ac6b6c3dbbbdd7886737cab82d851"},
"xmpp": {:git, "https://github.com/processone/xmpp.git", "68cb07d5d0f36d5c51bfea496c638f3ee9b36027", [ref: "68cb07d5d0f36d5c51bfea496c638f3ee9b36027"]},
"yconf": {:hex, :yconf, "1.0.15", "e22998b3d7728270bdd06162a9515bd142b14fae8927cbdbd3ef639c32aa6f7a", [:rebar3], [{:fast_yaml, "1.0.36", [hex: :fast_yaml, repo: "hexpm", optional: false]}], "hexpm", "7ff2ab24d3c9833842716b9aaaa01a8f96641a7695cbb701b03445c4def01117"},
}
+539
View File
@@ -0,0 +1,539 @@
%% Generated automatically
%% DO NOT EDIT: run `make translations` instead
%% To improve translations please read:
%% https://docs.ejabberd.im/developer/extending-ejabberd/localization/
{" (Add * to the end of field to match substring)"," (Добавете * в края на полето, за да съответства на подниза)"}.
{" has set the subject to: "," е задал темата на: "}.
{"# participants","# участници"}.
{"A description of the node","Описание на нода"}.
{"A friendly name for the node","Удобно име на нода"}.
{"A password is required to enter this room","Необходима е парола за влизане в тази стая"}.
{"A Web Page","Уеб страница"}.
{"Accept","Приемам"}.
{"Access denied by service policy","Достъпът е отказан спрямо политиката на услугата"}.
{"Access model","Модел на достъп"}.
{"Account doesn't exist","Профилът не съществува"}.
{"Action on user","Действие върху потребител"}.
{"Add a hat to a user","Добави шапка към потребител"}.
{"Add Jabber ID","Добави Jabber ID"}.
{"Add New","Добави нов"}.
{"Add User","Добави потребител"}.
{"Administration of ","Администриране на "}.
{"Administration","Администриране"}.
{"Administrator privileges required","Изискватт се администраторски права"}.
{"All activity","Цялата статистика"}.
{"All Users","Всички потребители"}.
{"Allow subscription","Разреши абониране"}.
{"Allow this Jabber ID to subscribe to this pubsub node?","Позволявате ли това Jabber ID да се абонира за pubsub нода?"}.
{"Allow this person to register with the room?","Позволявате ли този потребителя да се регистрира в стаята?"}.
{"Allow users to change the subject","Позволи потребителите да сменят темата"}.
{"Allow users to query other users","Позволи на потребителите да правят заявки към други потребители"}.
{"Allow users to send invites","Разреши на потребителите да изпращат покани"}.
{"Allow users to send private messages","Разреши на потребителите да изпращат лични съобщения"}.
{"Allow visitors to change nickname","Разреши на посетителите да променят псевдонима си"}.
{"Allow visitors to send private messages to","Разреши на потребителите да изпращат лични съобщения до"}.
{"Allow visitors to send status text in presence updates","Разреши на посетителите да изпращат текст за състоянието в актуализациите за присъствие"}.
{"Allow visitors to send voice requests","Разреши на посетителите да изпращат заявки за гласово повикване"}.
{"An associated LDAP group that defines room membership; this should be an LDAP Distinguished Name according to an implementation-specific or deployment-specific definition of a group.","Асоциирана LDAP група, която определя членството в стая; това трябва да бъде LDAP отличително име според специфично за изпълнението/внедряването определение на група."}.
{"Announcements","Съобщения"}.
{"Answer associated with a picture","Отговор, свързан с картина"}.
{"Answer associated with a video","Отговор, свързан с видеоклип"}.
{"Answer associated with speech","Отговор, свързан с аудио клип"}.
{"Answer to a question","Отговор на въпрос"}.
{"Anyone in the specified roster group(s) may subscribe and retrieve items","Всеки в посочения списък от групата с контакти, може да се абонира и извлича елементи"}.
{"Anyone may associate leaf nodes with the collection","Всеки може да асоциира \"leaf\" нодове с колекцията"}.
{"Anyone may publish","Всеки може да публикува"}.
{"Anyone may subscribe and retrieve items","Всеки може да се абонира и да извлича елементи"}.
{"Anyone with a presence subscription of both or from may subscribe and retrieve items","Всеки, който има абонамент за присъствие на двете или от: може да се абонира и да извлича елементи"}.
{"Anyone with Voice","Всеки, с възможност за гласово обаждане"}.
{"Anyone","Всеки"}.
{"April","Април"}.
{"Attribute 'channel' is required for this request","Атрибутът 'канал' е задължителен за тази заявка"}.
{"Attribute 'id' is mandatory for MIX messages","Атрибутът 'id' е задължителен за MIX съобщения"}.
{"Attribute 'jid' is not allowed here","Атрибутът 'jid' не е разрешен тук"}.
{"Attribute 'node' is not allowed here","Атрибутът 'нод' не е разрешен тук"}.
{"Attribute 'to' of stanza that triggered challenge","Атрибут 'до' на строфата, който е предизвикал предизвикателството"}.
{"August","Август"}.
{"Automatic node creation is not enabled","Автоматичното създаване на нод не е включено"}.
{"Backup Management","Управление на архивирането"}.
{"Backup of ~p","Резервно копие на ~p"}.
{"Backup to File at ","Архивиране във файл на "}.
{"Backup","Резервно копие"}.
{"Bad format","Лош формат"}.
{"Birthday","Рожден ден"}.
{"Both the username and the resource are required","Изискват се потребителското име и ресурсът"}.
{"Bytestream already activated","Bytestream вече е активиран"}.
{"Cannot remove active list","Активният списък не може да бъде премахнат"}.
{"Cannot remove default list","Не можете да премахнете списъка по подразбиране"}.
{"CAPTCHA web page","CAPTCHA уеб страница"}.
{"Challenge ID","ID на предизвикателството"}.
{"Change Password","Смяна на парола"}.
{"Change User Password","Смяна на потребителска парола"}.
{"Changing password is not allowed","Смяната на парола не е разрешена"}.
{"Changing role/affiliation is not allowed","Смяната на роля/принадлежност не е разрешена"}.
{"Channel already exists","Каналът вече съществува"}.
{"Channel does not exist","Каналът не съществува"}.
{"Channel JID","JID на канал"}.
{"Channels","Канали"}.
{"Characters not allowed:","Неразрешени символи:"}.
{"Chatroom configuration modified","Конфигурацията на стаята за чат е променена"}.
{"Chatroom is created","Стаята за чат е създадена"}.
{"Chatroom is destroyed","Стаята за чат е унищожена"}.
{"Chatroom is started","Стаята за чат е стартирана"}.
{"Chatroom is stopped","Стаята за чат е спряна"}.
{"Chatrooms","Чат стаи"}.
{"Choose a username and password to register with this server","Изберете потребителско име и парола, за да се регистрирате на този сървър"}.
{"Choose storage type of tables","Изберете тип за съхранение на таблици"}.
{"Choose whether to approve this entity's subscription.","Изберете дали да одобрите абонамента на този субект."}.
{"City","Град"}.
{"Client acknowledged more stanzas than sent by server","Клиентът потвърди повече строфи от изпратените от сървъра"}.
{"Commands","Команди"}.
{"Conference room does not exist","Конферентната стая не съществува"}.
{"Configuration of room ~s","Конфигурация на стая ~s"}.
{"Configuration","Конфигурация"}.
{"Connected Resources:","Свързани ресурси:"}.
{"Contact Addresses (normally, room owner or owners)","Адреси за контакт (обикновено собственик или собственици на стая)"}.
{"Contrib Modules","Сътруднически модули"}.
{"Country","Държава"}.
{"CPU Time:","Процесорно време:"}.
{"Current Discussion Topic","Текуща тема на дискусита"}.
{"Database failure","Грешка в базата данни"}.
{"Database Tables at ~p","Таблици на базата данни при ~p"}.
{"Database Tables Configuration at ","Конфигурация на таблиците в базата данни при "}.
{"Database","База данни"}.
{"December","Декември"}.
{"Default users as participants","Потребители по подразбиране като участници"}.
{"Delete content","Изтрий съдържанието"}.
{"Delete message of the day on all hosts","Изтрий съобщението на деня от всички нодове"}.
{"Delete message of the day","Изтрий съобщението на деня"}.
{"Delete Selected","Изтрий избраните"}.
{"Delete table","Изтрий таблицата"}.
{"Delete User","Изтрий потребителя"}.
{"Deliver event notifications","Достави известията за събития"}.
{"Deliver payloads with event notifications","Достави прикачените обекти с известията за събития"}.
{"Description:","Описание:"}.
{"Disc only copy","Копие само на диска"}.
{"'Displayed groups' not added (they do not exist!): ","'Показаните групи' не са добавени (не съществуват!): "}.
{"Displayed:","Показва се:"}.
{"Don't tell your password to anybody, not even the administrators of the XMPP server.","Не казвайте паролата си на никого, дори на администраторите на XMPP сървъра."}.
{"Dump Backup to Text File at ","Архивиране в текстов файл при "}.
{"Dump to Text File","Архивиране в текстов файл"}.
{"Duplicated groups are not allowed by RFC6121","Дублирани групи не са разрешени от RFC6121"}.
{"Dynamically specify a replyto of the item publisher","Динамично задаване на отговор към публикувалия елемента"}.
{"Edit Properties","Редактиране на свойства"}.
{"Either approve or decline the voice request.","Одобрете или отхвърлете заявката за гласова връзка."}.
{"Elements","Елементи"}.
{"Email Address","Имейл адрес"}.
{"Email","Илейл"}.
{"Enable hats","Активиране на шапки"}.
{"Enable logging","Активирай запис на хронологията"}.
{"Enable message archiving","Активирай архивиране на съобщенията"}.
{"Enabling push without 'node' attribute is not supported","Активиране на известията без атрибут 'нод' не се поддържа"}.
{"End User Session","Прекрати сесията на потребителя"}.
{"Enter nickname you want to register","Въведете псевдонима, който желаете да регистрирате"}.
{"Enter path to backup file","Въведете пътя към архивния файл"}.
{"Enter path to jabberd14 spool dir","Въведете пътя към jabberd14 spool директорията"}.
{"Enter path to jabberd14 spool file","Въведете пътя към jabberd14 spool файла"}.
{"Enter path to text file","Въведете пътя към текстовия файл"}.
{"Enter the text you see","Въведете текста, който виждате"}.
{"Erlang XMPP Server","Erlang XMPP сървър"}.
{"Error","Грешка"}.
{"Exclude Jabber IDs from CAPTCHA challenge","Изключи CAPTCHA предизвикателство за следните Jabber ID-та"}.
{"Export all tables as SQL queries to a file:","Експортирай всички таблици като SQL заявки във файл:"}.
{"Export data of all users in the server to PIEFXIS files (XEP-0227):","Експортирай данните за всички потребители на сървъра в PIEFXIS файлове (XEP-0227):"}.
{"Export data of users in a host to PIEFXIS files (XEP-0227):","Експортирай данните за потребителите на този хост в PIEFXIS файлове (XEP-0227):"}.
{"External component failure","Неуспех породен от външен компонент"}.
{"External component timeout","Времето за изчакване на външен компонент изтече"}.
{"Failed to activate bytestream","Неуспешно активиране на bytestream"}.
{"Failed to extract JID from your voice request approval","Неуспешно извличане на JID от одобрението за гласова заявка"}.
{"Failed to map delegated namespace to external component","Неуспешно съпоставяне на делегирано пространство от имена с външен компонент"}.
{"Failed to parse HTTP response","Неуспешно анализиран HTTP отговор"}.
{"Failed to process option '~s'","Неуспешо обработена опция '~s'"}.
{"Family Name","Фамилно име"}.
{"FAQ Entry","Въвеждане на ЧЗВ"}.
{"February","Февруари"}.
{"File larger than ~w bytes","Файлът е по-голям от ~w байта"}.
{"Fill in the form to search for any matching XMPP User","Попълнете формата, за да търсите съвпадащ XMPP потребител"}.
{"Friday","Петък"}.
{"From ~ts","От ~ts"}.
{"From","От"}.
{"Full List of Room Admins","Пълен списък на администраторите на стаята"}.
{"Full List of Room Owners","Пълен списък на собствениците на стаята"}.
{"Full Name","Пълно име"}.
{"Get List of Online Users","Списък на онлайн потребителите"}.
{"Get List of Registered Users","Списък на регистрираните потребители"}.
{"Get Number of Online Users","Брой на онлайн потребителите"}.
{"Get Number of Registered Users","Брой на регистрираните потребители"}.
{"Get Pending","Виж чакащи"}.
{"Get User Last Login Time","Покажи времето, когато потребителят е влязъл за последно"}.
{"Get User Password","Покажи паролата на потребителя"}.
{"Get User Statistics","Покажи статистика за потребителя"}.
{"Given Name","Име"}.
{"Grant voice to this person?","Предоставяне на глас за потребителя?"}.
{"Groups that will be displayed to the members","Групи, които ще се показват на членовете"}.
{"Groups","Групи"}.
{"Group","Група"}.
{"Hat title","Заглавие на шапката"}.
{"Hat URI","URI адрес за шапка"}.
{"Hats limit exceeded","Превишен е лимитът за шапка"}.
{"Host unknown","Неизвестен хост"}.
{"Host","Хост"}.
{"HTTP File Upload","Качване на файл по HTTP"}.
{"Idle connection","Неактивна връзка"}.
{"If you don't see the CAPTCHA image here, visit the web page.","Ако не виждате CAPTCHA изображението, посетете уеб страницата."}.
{"Import Directory","Импорт на директория"}.
{"Import File","Импорт на файл"}.
{"Import user data from jabberd14 spool file:","Импорт на потребители от jabberd14 Spool файл:"}.
{"Import User from File at ","Импорт на потребител от файл на "}.
{"Import users data from a PIEFXIS file (XEP-0227):","Импорт на потребителски данни от PIEFXIS файл (XEP-0227):"}.
{"Import users data from jabberd14 spool directory:","Импорт на потребители от jabberd14 Spool директория:"}.
{"Import Users from Dir at ","Импорт на потребители от директория на "}.
{"Import Users From jabberd14 Spool Files","Импорт на потребители от jabberd14 Spool файлове"}.
{"Improper domain part of 'from' attribute","Неправилна част за домейн в атрибута 'from'"}.
{"Improper message type","Неправилен тип съобщение"}.
{"Incoming s2s Connections:","Входящи s2s връзки:"}.
{"Incorrect CAPTCHA submit","Неправилно CAPTCHA въвеждане"}.
{"Incorrect data form","Неправилна форма на данните"}.
{"Incorrect password","Грешна парола"}.
{"Incorrect value of 'action' attribute","Неправилна стойност на атрибута 'action'"}.
{"Incorrect value of 'action' in data form","Неправилна стойност на 'action' във формата за данни"}.
{"Incorrect value of 'path' in data form","Неправилна стойност на 'path' във формата за данни"}.
{"Installed Modules:","Инсталирани модули:"}.
{"Install","Инсталирай"}.
{"Insufficient privilege","Недостатъчни права"}.
{"Internal server error","Вътрешна сървърна грешка"}.
{"Invalid 'from' attribute in forwarded message","Невалиден атрибут 'from' в препратеното съобщение"}.
{"Invalid node name","Невалидно име на нода"}.
{"Invalid 'previd' value","Невалидна стойност на 'previd'"}.
{"Invitations are not allowed in this conference","Поканите не са разрешени в тази конференция"}.
{"IP addresses","IP адреси"}.
{"It is not allowed to send error messages to the room. The participant (~s) has sent an error message (~s) and got kicked from the room","Не е позволено да изпращате съобщения за грешки в стаята. Участникът (~s) е изпратил съобщение за грешка (~s) и е бил отстранен от стаята"}.
{"It is not allowed to send private messages of type \"groupchat\"","Изпращането на лични съобщения от тип \"групов чат\" не е разрешено"}.
{"It is not allowed to send private messages to the conference","Изпращането на лични съобщения до конференцията не е разрешено"}.
{"Jabber ID","Jabber ID"}.
{"January","Януари"}.
{"JID normalization denied by service policy","Политиката на услугата не допуска нормализирането на JID"}.
{"JID normalization failed","Нормализирането на JID е неуспешно"}.
{"Joined MIX channels of ~ts","Свързани MIX канали на ~ts"}.
{"Joined MIX channels:","Свързани MIX канали:"}.
{"July","Юли"}.
{"June","Юни"}.
{"Just created","Току що създаден"}.
{"Label:","Етикет:"}.
{"Last Activity","Последна активност"}.
{"Last login","Последно влизане"}.
{"Last message","Последно съобщение"}.
{"Last month","Миналия месец"}.
{"Last year","Миналата година"}.
{"Least significant bits of SHA-256 hash of text should equal hexadecimal label","Най-малко значимите битове SHA-256 хеш на текст трябва да са равни на шестнайсетичния етикет"}.
{"List of rooms","Списък на стаите"}.
{"List of users with hats","Списък на потребителите с шапки"}.
{"List users with hats","Избройте потребителите с шапки"}.
{"Logging","Регистриране на събития"}.
{"Low level update script","Скрипт за актуализация на ниско ниво"}.
{"Make participants list public","Направи списъка с участниците публичен"}.
{"Make room CAPTCHA protected","Защити стаята с CAPTCHA"}.
{"Make room members-only","Направи стаята само за членове"}.
{"Make room moderated","Направи стая модерирана"}.
{"Make room password protected","Защити стаята с парола"}.
{"Make room persistent","Направи стая постоянна"}.
{"Make room public searchable","Направи стаята да е публично търсена"}.
{"Malformed username","Неправилно формирано потребителско име"}.
{"MAM preference modification denied by service policy","Промяна на предпочитанията за МАМ е отказана, поради политика на услугата"}.
{"March","Март"}.
{"Max # of items to persist, or `max` for no specific limit other than a server imposed maximum","Максимален # на елементи, които да се запазят, или `max` за неспецифичен лимит, различен от наложения от сървъра максимум"}.
{"Max payload size in bytes","Максимален размер на прикачения обект в байтове"}.
{"Maximum file size","Максимален размер на файла"}.
{"Maximum Number of History Messages Returned by Room","Максимален брой съобщения от хронологията, върнати от стая"}.
{"Maximum number of items to persist","Максимален брой елементи за запазване"}.
{"Maximum Number of Occupants","Максимален брой потребители"}.
{"May","Май"}.
{"Members not added (inexistent vhost!): ","Членовете не са добавени (несъществуващ vhost!): "}.
{"Membership is required to enter this room","Изисква се членство, за вход в тази стая"}.
{"Members:","Членове:"}.
{"Memorize your password, or write it in a paper placed in a safe place. In XMPP there isn't an automated way to recover your password if you forget it.","Запомнете паролата си или я запишете на лист хартия, поставен на сигурно място. В XMPP няма автоматичен начин за възстановяване на паролата в случай, че я забравите."}.
{"Memory","Памет"}.
{"Mere Availability in XMPP (No Show Value)","Наличност в XMPP (Не показвай стойност)"}.
{"Message body","Текст на съобщението"}.
{"Message not found in forwarded payload","Съобщението не е намерено в препратения прикачен елемент"}.
{"Messages from strangers are rejected","Съобщенията от непознати се отхвърлят"}.
{"Messages of type headline","Съобщения от тип заглавие"}.
{"Messages of type normal","Съобщения от тип нормален"}.
{"Middle Name","Презиме"}.
{"Minimum interval between voice requests (in seconds)","Минимален интервал между заявките за гласова комуникация (в секунди)"}.
{"Moderator privileges required","Изискват се права на модератор"}.
{"Moderators Only","Само модератори"}.
{"Moderator","Модератор"}.
{"Modified modules","Модифицирани модули"}.
{"Module failed to handle the query","Модулът не успя да обработи заявката"}.
{"Monday","Понеделник"}.
{"Multicast","Мултикаст"}.
{"Multiple <item/> elements are not allowed by RFC6121","Повече от един <item/> елемента не се разрешават от RFC6121"}.
{"Multi-User Chat","Групов чат (MUC)"}.
{"Name in the rosters where this group will be displayed","Име в списъците с контакти, където ще се показва тази група"}.
{"Name","Име"}.
{"Name:","Име:"}.
{"Natural Language for Room Discussions","Език за дискусии в стаята"}.
{"Natural-Language Room Name","Име на стаята на предпочитания език"}.
{"Neither 'jid' nor 'nick' attribute found","Атрибутите 'jid' и 'nick' не са намерени"}.
{"Neither 'role' nor 'affiliation' attribute found","Атрибути 'role' или 'affiliation' не са намерени"}.
{"Never","Никога"}.
{"New Password:","Нова парола:"}.
{"Nickname can't be empty","Псевдонимът не може да бъде празен"}.
{"Nickname Registration at ","Регистрация на псевдоним в "}.
{"Nickname ~s does not exist in the room","Псевдонимът ~s не присъства в стаята"}.
{"Nickname","Псевдоним"}.
{"No address elements found","Не е намерен адресен елемент"}.
{"No addresses element found","Не са намерени адресни елементи"}.
{"No 'affiliation' attribute found","Атрибут 'affiliation' не е намерен"}.
{"No available resource found","Не е намерен наличен ресурс"}.
{"No body provided for announce message","Не е предоставен текст за съобщение тип обява"}.
{"No child elements found","Не са открити подчинени елементи"}.
{"No data form found","Не е намерена форма за данни"}.
{"No Data","Няма данни"}.
{"No features available","Няма налични функции"}.
{"No <forwarded/> element found","Елементът <forwarded/> не е намерен"}.
{"No hook has processed this command","Никоя кука не е обработила тази команда"}.
{"No info about last activity found","Няма информация за последна активновт"}.
{"No 'item' element found","Елементът 'item' не е намерен"}.
{"No items found in this query","Няма намерени елементи в тази заявка"}.
{"No limit","Няма ограничение"}.
{"No module is handling this query","Нито един модул не обработва тази заявка"}.
{"No node specified","Не е посочен нод"}.
{"No 'password' found in data form","Не е намерен 'password' във формата за данни"}.
{"No 'password' found in this query","В заявката не е намерен 'password'"}.
{"No 'path' found in data form","Не е намерен 'path' във формата за данни"}.
{"No pending subscriptions found","Не са намерени чакащи абонаменти"}.
{"No privacy list with this name found","Не е намерен списък за поверителност с това име"}.
{"No private data found in this query","Няма открити лични данни в тази заявка"}.
{"No running node found","Не е намерен работещ нод"}.
{"No services available","Няма налични услуги"}.
{"No statistics found for this item","Не е налична статистика за този елемент"}.
{"No 'to' attribute found in the invitation","Атрибутът 'to' не е намерен в поканата"}.
{"Nobody","Никой"}.
{"Node already exists","Нодът вече съществува"}.
{"Node ID","ID на нода"}.
{"Node index not found","Индексът на нода не е намерен"}.
{"Node not found","Нодът не е намерен"}.
{"Node ~p","Нод ~p"}.
{"Nodeprep has failed","Nodeprep е неуспешен"}.
{"Nodes","Нодове"}.
{"Node","Нод"}.
{"None","Нито един"}.
{"Not allowed","Не е разрешено"}.
{"Not Found","Не е намерен"}.
{"Not subscribed","Няма абонамент"}.
{"Notify subscribers when items are removed from the node","Уведоми абонатите, когато елементите бъдат премахнати от нода"}.
{"Notify subscribers when the node configuration changes","Уведоми абонатите, когато конфигурацията на нода се промени"}.
{"Notify subscribers when the node is deleted","Уведоми абонатите, когато нодът бъде изтрит"}.
{"November","Ноември"}.
{"Number of answers required","Брой на необходимите отговори"}.
{"Number of occupants","Брой потребители"}.
{"Number of Offline Messages","Брой офлайн съобщения"}.
{"Number of online users","Брой онлайн потребители"}.
{"Number of registered users","Брой регистрирани потребители"}.
{"Number of seconds after which to automatically purge items, or `max` for no specific limit other than a server imposed maximum","Брой секунди, след които автоматично да се изчистят елементите, или `max` за липса на конкретно ограничение, различно от наложения от сървъра максимум"}.
{"Occupants are allowed to invite others","На участниците е позволено да канят други"}.
{"Occupants are allowed to query others","Участниците могат да отправят заявки към други лица"}.
{"Occupants May Change the Subject","Участниците могат да променят темата"}.
{"October","Октомври"}.
{"Offline Messages","Офлайн съобщения"}.
{"Offline Messages:","Офлайн съобщения:"}.
{"OK","ДОБРЕ"}.
{"Old Password:","Стара парола:"}.
{"Online Users","Онлайн потребители"}.
{"Online Users:","Онлайн потребители:"}.
{"Online","Онлайн"}.
{"Only admins can see this","Само администратори могат да видят това"}.
{"Only deliver notifications to available users","Доставяне на известия само до наличните потребители"}.
{"Only <enable/> or <disable/> tags are allowed","Само тагове <enable/> и <disable/> са разрешени"}.
{"Only <list/> element is allowed in this query","Само елементът <list/> е разрешен за тази заявка"}.
{"Only members may query archives of this room","Само членовете могат да търсят архиви на тази стая"}.
{"Only moderators and participants are allowed to change the subject in this room","Само модератори и участници имат право да променят темата в тази стая"}.
{"Only moderators are allowed to change the subject in this room","Само модераторите имат право да сменят темата в тази стая"}.
{"Only moderators are allowed to retract messages","Само модераторите имат право да оттеглят съобщения"}.
{"Only moderators can approve voice requests","Само модераторите могат да одобряват гласови заявки"}.
{"Only occupants are allowed to send messages to the conference","Само обитателите имат право да изпращат съобщения до конференцията"}.
{"Only occupants are allowed to send queries to the conference","Само обитателите имат право да изпращат запитвания до конференцията"}.
{"Only publishers may publish","Само издателите могат да публикуват"}.
{"Only service administrators are allowed to send service messages","Само администраторите на услуги имат право да изпращат системни съобщения"}.
{"Only those on a whitelist may subscribe and retrieve items","Само тези в белия списък могат да се абонират и да извличат елементи"}.
{"Organization Name","Име на организацията"}.
{"Organization Unit","Отдел"}.
{"Other Modules Available:","Други налични модули:"}.
{"Outgoing s2s Connections","Изходящи s2s връзки"}.
{"Outgoing s2s Connections:","Изходящи s2s връзки:"}.
{"Owner privileges required","Изискват се привилегии на собственик"}.
{"Packet relay is denied by service policy","Предаването на пакети е отказано от политиката на услугата"}.
{"Packet","Пакет"}.
{"Participant ID","ID на участник"}.
{"Participant","Участник"}.
{"Password Verification","Проверка на паролата"}.
{"Password Verification:","Проверка на паролата:"}.
{"Password","Парола"}.
{"Password:","Парола:"}.
{"Path to Dir","Път към директория"}.
{"Path to File","Път до файл"}.
{"Pending","В очакване"}.
{"Period: ","Период: "}.
{"Persist items to storage","Запазване на елементите в хранилището"}.
{"Persistent","Постоянен"}.
{"Ping query is incorrect","Заявката за пинг е неправилна"}.
{"Ping","Пинг"}.
{"Please note that these options will only backup the builtin Mnesia database. If you are using the ODBC module, you also need to backup your SQL database separately.","Обърнете внимание, че тези опции ще направят резервно копие само на вградената (Mnesia) база данни. Ако използвате модула ODBC, трябва да направите резервно копие на SQL базата данни отделно."}.
{"Please, wait for a while before sending new voice request","Моля, изчакайте известно време, преди да изпратите нова заявка за гласова връзка"}.
{"Pong","Понг"}.
{"Possessing 'ask' attribute is not allowed by RFC6121","Притежаването на атрибут 'ask' не е разрешено от RFC6121"}.
{"Present real Jabber IDs to","Покажи истински Jabber ID-та на"}.
{"Previous session not found","Предишната сесия не е намерена"}.
{"Previous session PID has been killed","PID от предишната сесия е унищожен"}.
{"Previous session PID has exited","Предишният PID на сесията е излязъл"}.
{"Previous session PID is dead","PID от предишната сесия не съществува"}.
{"Previous session timed out","Времето на предишната сесия изтече"}.
{"Public","Публичен"}.
{"Publish model","Модел за публикуване"}.
{"Publish-Subscribe","Публикуване-Абониране"}.
{"PubSub subscriber request","Заявка от абонат за PubSub"}.
{"Purge all items when the relevant publisher goes offline","Изчисти всички елементи, когато съответният издател премине в режим офлайн"}.
{"Push record not found","Push записът не е намерен"}.
{"Queries to the conference members are not allowed in this room","В тази зала не се допускат запитвания към членовете на конференцията"}.
{"Query to another users is forbidden","Заявка към други потребители е забранена"}.
{"RAM and disc copy","Копие в RAM и на диск"}.
{"RAM copy","Копие в RAM"}.
{"Really delete message of the day?","Наистина ли желаете да изтриете съобщението на деня?"}.
{"Receive notification from all descendent nodes","Получаване на известие от всички низходящи нодове"}.
{"Receive notification from direct child nodes only","Получаване на известия само от директни подчинени нодове"}.
{"Receive notification of new items only","Получаване на известия само за нови елементи"}.
{"Receive notification of new nodes only","Получаване на известия само за нови нодове"}.
{"Recipient is not in the conference room","Получателят не е в конферентната зала"}.
{"Register an XMPP account","Регистрирай XMPP акаунт"}.
{"Registered Users","Регистрирани потребители"}.
{"Registered Users:","Регистрирани потребители:"}.
{"Register","Регистрирай"}.
{"Remote copy","Отдалечено копие"}.
{"Remove a hat from a user","Премахни шапка от потребител"}.
{"Remove All Offline Messages","Премахни всички офлайн съобщения"}.
{"Remove User","Премахни потребител"}.
{"Remove","Премахни"}.
{"Replaced by new connection","Заменен от нова връзка"}.
{"Request has timed out","Времето за заявка изтече"}.
{"Request is ignored","Заявката е игнорирано"}.
{"Requested role","Заявена роля"}.
{"Resources","Ресурси"}.
{"Restart Service","Рестартирай услугата"}.
{"Restart","Рестартирай"}.
{"Restore Backup from File at ","Възстанови резервно копие от файл в "}.
{"Restore binary backup after next ejabberd restart (requires less memory):","Възстановяване на бинарно копие след следващото рестартиране на ejabberd (изисква по-малко памет):"}.
{"Restore binary backup immediately:","Възстанови незабавно двоично копие:"}.
{"Restore plain text backup immediately:","Възстановете незабавно копие от обикновен текст:"}.
{"Restore","Възстанови"}.
{"Roles and Affiliations that May Retrieve Member List","Роли и принадлежности, които могат да извличат списък с членове"}.
{"Roles for which Presence is Broadcasted","Роли, за които се излъчва присъствие"}.
{"Roles that May Send Private Messages","Роли, които могат да изпращат лични съобщения"}.
{"Room Configuration","Конфигурация на стаята"}.
{"Room creation is denied by service policy","Създаването на стая е отказано поради политика на услугата"}.
{"Room description","Описание на стаята"}.
{"Room Occupants","Обитатели на стаята"}.
{"Room terminates","Стаята се прекратява"}.
{"Room title","Заглавие на стаята"}.
{"Roster groups allowed to subscribe","Групи от списъци с контакти, на които е разрешено да се абонират"}.
{"Roster of ~ts","Списък с контакти на ~ts"}.
{"Roster size","Размер на списъка с контакти"}.
{"Roster:","Списък с контакти:"}.
{"RPC Call Error","Грешка при RPC повикване"}.
{"Running Nodes","Работещи нодове"}.
{"Saturday","Събота"}.
{"Script check","Проверка на скрипт"}.
{"Search from the date","Търси от дата"}.
{"Search Results for ","Резултати от търсенето за "}.
{"Search the text","Търси текста"}.
{"Search until the date","Търси до дата"}.
{"Search users in ","Търси потребители в "}.
{"Select All","Избери всички"}.
{"Send announcement to all online users on all hosts","Изпрати съобщение до всички онлайн потребители на всички хостове"}.
{"Send announcement to all online users","Изпрати съобщение до всички онлайн потребители"}.
{"Send announcement to all users on all hosts","Изпрати съобщение до всички потребители на всички хостове"}.
{"Send announcement to all users","Изпрати съобщение до всички потребители"}.
{"September","Септември"}.
{"Server:","Сървър:"}.
{"Service list retrieval timed out","Времето за изчакване на извличането на списъка с услуги изтече"}.
{"Session state copying timed out","Времето за изчакване на копирането на състоянието на сесията изтече"}.
{"Set message of the day and send to online users","Задай съобщение на деня и го изпрати на онлайн потребителите"}.
{"Set message of the day on all hosts and send to online users","Задавай съобщение на деня на всички хостове и изпрати на онлайн потребителите"}.
{"Shared Roster Groups","Споделени групи от списъци с контакти"}.
{"Show Integral Table","Покажи интегрална таблица"}.
{"Show Ordinary Table","Покажи обикновена таблица"}.
{"Shut Down Service","Изключи услугата"}.
{"SOCKS5 Bytestreams","SOCKS5 байтови потоци"}.
{"Some XMPP clients can store your password in the computer, but you should do this only in your personal computer for safety reasons.","Някои XMPP клиенти могат да съхраняват паролата Ви в компютъра, но от съображения за сигурност трябва да го правите само на личния си компютър."}.
{"Sources Specs:","Спецификации на източниците:"}.
{"Specify the access model","Задай модела за достъп"}.
{"Specify the event message type","Задай типа на съобщението за събитие"}.
{"Specify the publisher model","Задай модела на издателя"}.
{"Stanza id is not valid","Невалидно ID на строфата"}.
{"Stanza ID","ID на строфа"}.
{"Statically specify a replyto of the node owner(s)","Статично задаване на replyto на собственика(ците) на нода"}.
{"Statistics of ~p","Статистики на ~p"}.
{"Statistics","Статистики"}.
{"Stopped Nodes","Спрени нодове"}.
{"Stop","Спри"}.
{"Storage Type","Тип хранилище"}.
{"Store binary backup:","Запази бинарен архив:"}.
{"Store plain text backup:","Запази архив като обикновен текст:"}.
{"Stream management is already enabled","Управлението на потока вече е активирано"}.
{"Stream management is not enabled","Управлението на потока не е активирано"}.
{"Subject","Тема"}.
{"Submitted","Изпратено"}.
{"Submit","Изпрати"}.
{"Subscriber Address","Адрес на абоната"}.
{"Subscribers may publish","Абонатите могат да публикуват"}.
{"Subscription requests must be approved and only subscribers may retrieve items","Заявките за абонамент трябва да бъдат одобрени и само абонатите могат да извличат елементи"}.
{"Subscriptions are not allowed","Абонаментите не са разрешени"}.
{"Subscription","Абонамент"}.
{"Sunday","Неделя"}.
{"Text associated with a picture","Текст, свързан със снимка"}.
{"Text associated with a sound","Текст, свързан със звук"}.
{"Text associated with a video","Текст, свързан с видео"}.
{"Text associated with speech","Текст, свързан с реч"}.
{"That nickname is already in use by another occupant","Този псевдоним вече се използва от друг потребител"}.
{"That nickname is registered by another person","Този псевдоним е регистриран от друго лице"}.
{"The account already exists","Профилът вече съществува"}.
{"The account was not unregistered","Профилът не е дерегистриран"}.
{"The body text of the last received message","Текстът на последното получено съобщение"}.
{"The CAPTCHA is valid.","CAPTCHA предизвикателството е валидно."}.
{"The CAPTCHA verification has failed","Проверката на CAPTCHA предизвикателството е неуспешна"}.
{"The captcha you entered is wrong","Въведеният captcha код е грешен"}.
{"The DateTime at which a leased subscription will end or has ended","Датата и часът, на който абонамент ще приключи или е приключил"}.
{"The datetime when the node was created","Датата, когато нодът е бил създаден"}.
{"The default language of the node","Езикът по подразбиране на нода"}.
{"The feature requested is not supported by the conference","Исканата функция не се поддържа от конференцията"}.
{"The JID of the node creator","JID на създателя на нода"}.
{"The JIDs of those to contact with questions","JID на лицата, с които да се свържете при въпроси"}.
{"The JIDs of those with an affiliation of owner","JID на лицата с принадлежност на собственик"}.
{"The JIDs of those with an affiliation of publisher","JID-та на лица с принадлежност към публикуващи"}.
{"The list of all online users","Списък на всички онлайн потребители"}.
{"The list of all users","Списък на всички потребители"}.
{"The maximum number of child nodes that can be associated with a collection, or `max` for no specific limit other than a server imposed maximum","Максимален брой подчинени нодове, които могат да бъдат свързани с колекция, или `max` за липса на конкретен лимит, различен от наложения от сървъра максимум"}.
{"The minimum number of milliseconds between sending any two notification digests","Минималният брой милисекунди между изпращането на две извадки на известия"}.
{"The name of the node","Името на нода"}.
{"The node is a collection node","Нодът е от тип колекция"}.
{"The NodeID of the relevant node","NodeID на съответния нод"}.
{"The number of pending incoming presence subscription requests","Броят на чакащите входящи заявки за абонамент за присъствие"}.
{"The number of subscribers to the node","Бротят абонати на нода"}.
{"The number of unread or undelivered messages","Броят непрочетени или недоставени съобщения"}.
{"The password contains unacceptable characters","Паролата съдържа недопустими символи"}.
{"The password is too weak","Паролата е твърде слаба"}.
{"The password of your XMPP account was successfully changed.","Паролата на вашия XMPP профил беше успешно променена."}.
{"The password was not changed","Паролата не е променена"}.
{"The passwords are different","Паролите са различни"}.
{"The presence states for which an entity wants to receive notifications","Състояния на присъствие, за които даден субект желае да получава известия"}.
{"The query is only allowed from local users","Заявката е разрешена само за локални потребители"}.
{"The query must not contain <item/> elements","Заявката не може да съдържа елементи <item/>"}.
{"The room subject can be modified by participants","Темата на стаята може да бъде променяна от участниците"}.
{"The semantic type information of data in the node, usually specified by the namespace of the payload (if any)","Информацията за семантичния тип данни на нода, обикновено зададена от пространството на имената на прикачените данни (ако има такива)"}.
{"The sender of the last received message","Подателят на последното получено съобщение"}.
{"The stanza MUST contain only one <active/> element, one <default/> element, or one <list/> element","Строфата ТРЯБВА да съдържа само един <active/> елемент, един <default/> елемент или един <list/> елемент"}.
{"The URL of an XSL transformation which can be applied to payloads in order to generate an appropriate message body element.","URL адрес на XSL трансформацията, която може да се приложи към прикачените данни, за да се генерира подходящ елемент от тялото на съобщението."}.
{"The URL of an XSL transformation which can be applied to the payload format in order to generate a valid Data Forms result that the client could display using a generic Data Forms rendering engine","URL адрес на XSL трансформацията, която може да се приложи към формата на прикачените данни, за да се генерира валиден резултат от Data Forms, който клиентът може да покаже с помощта на общ механизъм за визуализация на Data Forms."}.
{"View Roster","Преглед на списъка с контакти"}.
+26 -8
View File
@@ -12,11 +12,6 @@
{"A Web Page","Una Pàgina Web"}.
{"Accept","Acceptar"}.
{"Access denied by service policy","Accés denegat per la política del servei"}.
{"Access model of authorize","Model d'Accés de autoritzar"}.
{"Access model of open","Model d'Accés de obert"}.
{"Access model of presence","Model d'Accés de presència"}.
{"Access model of roster","Model d'Accés de contactes"}.
{"Access model of whitelist","Model d'Accés de llista blanca"}.
{"Access model","Model d'Accés"}.
{"Account doesn't exist","El compte no existeix"}.
{"Action on user","Acció en l'usuari"}.
@@ -53,6 +48,7 @@
{"Anyone with a presence subscription of both or from may subscribe and retrieve items","Qualsevol amb una subscripció de presencia de 'both' o 'from' pot subscriure's i publicar elements"}.
{"Anyone with Voice","Qualsevol amb Veu"}.
{"Anyone","Qualsevol"}.
{"Apparently your account has no administration rights in this server. Please check how to grant admin rights in: https://docs.ejabberd.im/admin/installation/#administration-account","Aparentment el teu compte no te privilegis d'administrador en este servidor. Per favor consulta com obtindre privilegis d'administrador en: https://docs.ejabberd.im/admin/installation/#administration-account"}.
{"April","Abril"}.
{"Attribute 'channel' is required for this request","L'atribut 'channel' és necessari per a aquesta petició"}.
{"Attribute 'id' is mandatory for MIX messages","L'atribut 'id' es necessari per a missatges MIX"}.
@@ -79,6 +75,7 @@
{"Changing role/affiliation is not allowed","No està permès canviar el rol/afiliació"}.
{"Channel already exists","El canal ja existeix"}.
{"Channel does not exist","El canal no existeix"}.
{"Channel JID","JID del Canal"}.
{"Channels","Canals"}.
{"Characters not allowed:","Caràcters no permesos:"}.
{"Chatroom configuration modified","Configuració de la sala de xat modificada"}.
@@ -98,6 +95,7 @@
{"Configuration","Configuració"}.
{"Connected Resources:","Recursos connectats:"}.
{"Contact Addresses (normally, room owner or owners)","Adreces de contacte (normalment, propietaris de la sala)"}.
{"Contrib Modules","Mòduls Contrib"}.
{"Country","Pais"}.
{"CPU Time:","Temps de CPU:"}.
{"Current Discussion Topic","Assumpte de discussió actual"}.
@@ -172,6 +170,8 @@
{"Full List of Room Admins","Llista completa de administradors de la sala"}.
{"Full List of Room Owners","Llista completa de propietaris de la sala"}.
{"Full Name","Nom complet"}.
{"Get List of Online Users","Obté la llista d'usuaris en línia"}.
{"Get List of Registered Users","Obté la llista d'usuaris registrats"}.
{"Get Number of Online Users","Obtenir Número d'Usuaris Connectats"}.
{"Get Number of Registered Users","Obtenir Número d'Usuaris Registrats"}.
{"Get Pending","Obtenir Pendents"}.
@@ -213,6 +213,8 @@
{"Incorrect value of 'action' attribute","Valor incorrecte del atribut 'action'"}.
{"Incorrect value of 'action' in data form","Valor incorrecte de 'action' al formulari de dades"}.
{"Incorrect value of 'path' in data form","Valor incorrecte de 'path' al formulari de dades"}.
{"Installed Modules:","Mòduls instal·lats:"}.
{"Install","Instal·lar"}.
{"Insufficient privilege","Privilegi insuficient"}.
{"Internal server error","Error intern del servidor"}.
{"Invalid 'from' attribute in forwarded message","Atribut 'from' invàlid al missatge reenviat"}.
@@ -224,11 +226,12 @@
{"It is not allowed to send error messages to the room. The participant (~s) has sent an error message (~s) and got kicked from the room","No està permés enviar missatges d'error a la sala. El participant (~s) ha enviat un missatge d'error (~s) i ha sigut expulsat de la sala"}.
{"It is not allowed to send private messages of type \"groupchat\"","No està permés enviar missatges del tipus \"groupchat\""}.
{"It is not allowed to send private messages to the conference","No està permès l'enviament de missatges privats a la sala"}.
{"It is not allowed to send private messages","No està permés enviar missatges privats"}.
{"Jabber ID","ID Jabber"}.
{"January","Gener"}.
{"JID normalization denied by service policy","S'ha denegat la normalització del JID per política del servei"}.
{"JID normalization failed","Ha fallat la normalització del JID"}.
{"Joined MIX channels of ~ts","Canals MIX units de ~ts"}.
{"Joined MIX channels:","Canals MIX units:"}.
{"joins the room","entra a la sala"}.
{"July","Juliol"}.
{"June","Juny"}.
@@ -349,6 +352,7 @@
{"Number of registered users","Número d'Usuaris Registrats"}.
{"Number of seconds after which to automatically purge items, or `max` for no specific limit other than a server imposed maximum","Número de segons després dels quals es purgaran automàticament elements, o `max` per a no tindre altre límit més que el màxim imposat pel servidor"}.
{"Occupants are allowed to invite others","Els ocupants poden invitar a altres"}.
{"Occupants are allowed to query others","Els ocupants poden enviar peticions a altres"}.
{"Occupants May Change the Subject","Els ocupants poden canviar el Tema"}.
{"October","Octubre"}.
{"Offline Messages:","Missatges fora de línia:"}.
@@ -366,6 +370,7 @@
{"Only members may query archives of this room","Només membres poden consultar l'arxiu de missatges d'aquesta sala"}.
{"Only moderators and participants are allowed to change the subject in this room","Només els moderadors i participants poden canviar el tema d'aquesta sala"}.
{"Only moderators are allowed to change the subject in this room","Només els moderadors poden canviar el tema d'aquesta sala"}.
{"Only moderators are allowed to retract messages","Només els moderadors tenen permís per a retractar missatges"}.
{"Only moderators can approve voice requests","Només els moderadors poden aprovar les peticions de veu"}.
{"Only occupants are allowed to send messages to the conference","Sols els ocupants poden enviar missatges a la sala"}.
{"Only occupants are allowed to send queries to the conference","Sols els ocupants poden enviar sol·licituds a la sala"}.
@@ -375,11 +380,13 @@
{"Only those on a whitelist may subscribe and retrieve items","Només qui estiga a una llista blanca pot subscriure's i recuperar elements"}.
{"Organization Name","Nom de la organizació"}.
{"Organization Unit","Unitat de la organizació"}.
{"Other Modules Available:","Altres mòduls disponibles:"}.
{"Outgoing s2s Connections:","Connexions d'eixida s2s:"}.
{"Outgoing s2s Connections","Connexions s2s d'eixida"}.
{"Owner privileges required","Es requerixen privilegis de propietari de la sala"}.
{"Packet relay is denied by service policy","S'ha denegat el reenviament del paquet per política del servei"}.
{"Packet","Paquet"}.
{"Participant ID","ID del Participant"}.
{"Participant","Participant"}.
{"Password Verification","Verificació de la Contrasenya"}.
{"Password Verification:","Verificació de la Contrasenya:"}.
@@ -387,7 +394,7 @@
{"Password:","Contrasenya:"}.
{"Path to Dir","Ruta al directori"}.
{"Path to File","Ruta al fitxer"}.
{"Payload type","Tipus de payload"}.
{"Payload semantic type information","Informació sobre el tipus semàntic de la carrega útil"}.
{"Pending","Pendent"}.
{"Period: ","Període: "}.
{"Persist items to storage","Persistir elements al guardar"}.
@@ -482,9 +489,11 @@
{"Shut Down Service","Apager el Servei"}.
{"SOCKS5 Bytestreams","SOCKS5 Bytestreams"}.
{"Some XMPP clients can store your password in the computer, but you should do this only in your personal computer for safety reasons.","Alguns clients XMPP poden emmagatzemar la teva contrasenya al ordinador, però només hauries de fer això al teu ordinador personal, per raons de seguretat."}.
{"Sources Specs:","Especificacions de Codi Font:"}.
{"Specify the access model","Especificar el model d'accés"}.
{"Specify the event message type","Especifica el tipus de missatge d'event"}.
{"Specify the publisher model","Especificar el model del publicant"}.
{"Stanza id is not valid","L'identificador del paquet no es vàlid"}.
{"Stanza ID","ID del paquet"}.
{"Statically specify a replyto of the node owner(s)","Especifica estaticament una adreça on respondre al propietari del node"}.
{"Statistics of ~p","Estadístiques de ~p"}.
@@ -527,6 +536,8 @@
{"The JIDs of those to contact with questions","Els JIDs a qui contactar amb preguntes"}.
{"The JIDs of those with an affiliation of owner","Els JIDs de qui tenen una afiliació de propietaris"}.
{"The JIDs of those with an affiliation of publisher","Els JIDs de qui tenen una afiliació de publicadors"}.
{"The list of all online users","La llista de tots els usuaris en línia"}.
{"The list of all users","La llista de tots els usuaris"}.
{"The list of JIDs that may associate leaf nodes with a collection","La llista de JIDs que poden associar nodes fulla amb una col·lecció"}.
{"The maximum number of child nodes that can be associated with a collection, or `max` for no specific limit other than a server imposed maximum","El màxim número de nodes fills que poden associar-se amb una col·lecció, o `max` per a no tindre altre límit més que el màxim imposat pel servidor"}.
{"The minimum number of milliseconds between sending any two notification digests","El número mínim de mil·lisegons entre l'enviament de dos resums de notificacions"}.
@@ -547,10 +558,10 @@
{"The query is only allowed from local users","La petició està permesa només d'usuaris locals"}.
{"The query must not contain <item/> elements","La petició no pot contenir elements <item/>"}.
{"The room subject can be modified by participants","El tema de la sala pot modificar-lo els participants"}.
{"The semantic type information of data in the node, usually specified by the namespace of the payload (if any)","La informació semàntica de les dades al node, usualment especificat pel espai de noms de la càrrega util (si n'hi ha)"}.
{"The sender of the last received message","Qui ha enviat l'ultim missatge rebut"}.
{"The stanza MUST contain only one <active/> element, one <default/> element, or one <list/> element","El paquet DEU contindre només un element <active/>, un element <default/>, o un element <list/>"}.
{"The subscription identifier associated with the subscription request","L'identificador de subscripció associat amb la petició de subscripció"}.
{"The type of node data, usually specified by the namespace of the payload (if any)","El tipus de dades al node, usualment especificat pel namespace del payload (si n'hi ha)"}.
{"The URL of an XSL transformation which can be applied to payloads in order to generate an appropriate message body element.","La URL de uns transformació XSL que pot ser aplicada als payloads per a generar un element apropiat de contingut de missatge."}.
{"The URL of an XSL transformation which can be applied to the payload format in order to generate a valid Data Forms result that the client could display using a generic Data Forms rendering engine","La URL de una transformació XSL que pot ser aplicada al format de payload per a generar un resultat valid de Data Forms, que el client puga mostrar usant un métode generic de Data Forms"}.
{"There was an error changing the password: ","Hi ha hagut un error canviant la contrasenya: "}.
@@ -591,6 +602,7 @@
{"Unauthorized","No autoritzat"}.
{"Unexpected action","Acció inesperada"}.
{"Unexpected error condition: ~p","Condició d'error inesperada: ~p"}.
{"Uninstall","Desinstal·lar"}.
{"Unregister an XMPP account","Anul·lar el registre d'un compte XMPP"}.
{"Unregister","Anul·lar el registre"}.
{"Unselect All","Deseleccionar tots"}.
@@ -601,7 +613,10 @@
{"Update ~p","Actualitzar ~p"}.
{"Update plan","Pla d'actualització"}.
{"Update script","Script d'actualització"}.
{"Update specs to get modules source, then install desired ones.","Actualitza les especificacions per obtindre el codi font dels mòduls, després instal·la els que vulgues."}.
{"Update Specs","Actualitzar Especificacions"}.
{"Update","Actualitzar"}.
{"Upgrade","Actualitza"}.
{"Uptime:","Temps en marxa:"}.
{"URL for Archived Discussion Logs","URL dels Arxius de Discussions"}.
{"User already exists","El usuari ja existeix"}.
@@ -624,6 +639,7 @@
{"Value of '~s' should be integer","El valor de '~s' deuria ser un numero enter"}.
{"Value 'set' of 'type' attribute is not allowed","El valor 'set' a l'atribut 'type' no és permès"}.
{"vCard User Search","vCard recerca d'usuari"}.
{"View joined MIX channels","Vore els canals MIX units"}.
{"View Queue","Vore Cua"}.
{"View Roster","Vore Llista de contactes"}.
{"Virtual Hosts","Hosts virtuals"}.
@@ -644,6 +660,7 @@
{"Whether to allow subscriptions","Permetre subscripcions"}.
{"Whether to make all subscriptions temporary, based on subscriber presence","Si fer totes les subscripcions temporals, basat en la presencia del subscriptor"}.
{"Whether to notify owners about new subscribers and unsubscribes","Si notificar als propietaris sobre noves subscripcions i desubscripcions"}.
{"Who can send private messages","Qui pot enviar missatges privats"}.
{"Who may associate leaf nodes with a collection","Qui pot associar nodes fulla amb una col·lecció"}.
{"Wrong parameters in the web formulary","Paràmetres incorrectes en el formulari web"}.
{"Wrong xmlns","El xmlns ès incorrecte"}.
@@ -655,6 +672,7 @@
{"XMPP Show Value of XA (Extended Away)","Valor 'show' de XMPP: XA (Molt Ausent)"}.
{"XMPP URI of Associated Publish-Subscribe Node","URI XMPP del Node Associat Publish-Subscribe"}.
{"You are being removed from the room because of a system shutdown","Has sigut expulsat de la sala perquè el sistema va a apagar-se"}.
{"You are not allowed to send private messages","No tens permés enviar missatges privats"}.
{"You are not joined to the channel","No t'has unit al canal"}.
{"You can later change your password using an XMPP client.","Podràs canviar la teva contrasenya més endavant utilitzant un client XMPP."}.
{"You have been banned from this room","Has sigut bloquejat en aquesta sala"}.
-1
View File
@@ -159,7 +159,6 @@
{"It is not allowed to send error messages to the room. The participant (~s) has sent an error message (~s) and got kicked from the room","Není povoleno posílat chybové zprávy do místnosti. Účastník (~s) odeslal chybovou zprávu (~s) a byl vyhozen z místnosti"}.
{"It is not allowed to send private messages of type \"groupchat\"","Není dovoleno odeslání soukromé zprávy typu \"skupinová zpráva\" "}.
{"It is not allowed to send private messages to the conference","Není povoleno odesílat soukromé zprávy v této místnosti"}.
{"It is not allowed to send private messages","Je zakázáno posílat soukromé zprávy"}.
{"Jabber ID","Jabber ID"}.
{"January",". ledna"}.
{"joins the room","vstoupil(a) do místnosti"}.
+20 -8
View File
@@ -12,11 +12,6 @@
{"A Web Page","Eine Webseite"}.
{"Accept","Akzeptieren"}.
{"Access denied by service policy","Zugriff aufgrund der Dienstrichtlinien verweigert"}.
{"Access model of authorize","Zugriffsmodell von 'authorize'"}.
{"Access model of open","Zugriffsmodell von 'open'"}.
{"Access model of presence","Zugriffsmodell von 'presence'"}.
{"Access model of roster","Zugriffsmodell der Kontaktliste"}.
{"Access model of whitelist","Zugriffsmodell von 'whitelist'"}.
{"Access model","Zugriffsmodell"}.
{"Account doesn't exist","Konto existiert nicht"}.
{"Action on user","Aktion auf Benutzer"}.
@@ -79,6 +74,7 @@
{"Changing role/affiliation is not allowed","Ändern der Rolle/Zugehörigkeit ist nicht erlaubt"}.
{"Channel already exists","Kanal existiert bereits"}.
{"Channel does not exist","Kanal existiert nicht"}.
{"Channel JID","Kanal-JID"}.
{"Channels","Kanäle"}.
{"Characters not allowed:","Nicht erlaubte Zeichen:"}.
{"Chatroom configuration modified","Chatraum-Konfiguration geändert"}.
@@ -172,6 +168,8 @@
{"Full List of Room Admins","Vollständige Liste der Raumadmins"}.
{"Full List of Room Owners","Vollständige Liste der Raumbesitzer"}.
{"Full Name","Vollständiger Name"}.
{"Get List of Online Users","Liste der angemeldeten Benutzer abrufen"}.
{"Get List of Registered Users","Liste der registrierten Benutzer abrufen"}.
{"Get Number of Online Users","Anzahl der angemeldeten Benutzer abrufen"}.
{"Get Number of Registered Users","Anzahl der registrierten Benutzer abrufen"}.
{"Get Pending","Ausstehende abrufen"}.
@@ -213,6 +211,8 @@
{"Incorrect value of 'action' attribute","Falscher Wert des 'action'-Attributs"}.
{"Incorrect value of 'action' in data form","Falscher Wert von 'action' in Datenformular"}.
{"Incorrect value of 'path' in data form","Falscher Wert von 'path' in Datenformular"}.
{"Installed Modules:","Installierte Module:"}.
{"Install","Installieren"}.
{"Insufficient privilege","Unzureichende Privilegien"}.
{"Internal server error","Interner Serverfehler"}.
{"Invalid 'from' attribute in forwarded message","Ungültiges 'from'-Attribut in weitergeleiteter Nachricht"}.
@@ -224,11 +224,12 @@
{"It is not allowed to send error messages to the room. The participant (~s) has sent an error message (~s) and got kicked from the room","Es ist nicht erlaubt Fehlermeldungen an den Raum zu senden. Der Teilnehmer (~s) hat eine Fehlermeldung (~s) gesendet und wurde aus dem Raum geworfen"}.
{"It is not allowed to send private messages of type \"groupchat\"","Es ist nicht erlaubt private Nachrichten des Typs \"groupchat\" zu senden"}.
{"It is not allowed to send private messages to the conference","Es ist nicht erlaubt private Nachrichten an die Konferenz zu senden"}.
{"It is not allowed to send private messages","Es ist nicht erlaubt private Nachrichten zu senden"}.
{"Jabber ID","Jabber-ID"}.
{"January","Januar"}.
{"JID normalization denied by service policy","JID-Normalisierung aufgrund der Dienstrichtlinien verweigert"}.
{"JID normalization failed","JID-Normalisierung fehlgeschlagen"}.
{"Joined MIX channels of ~ts","Beigetretene MIX-Channels von ~ts"}.
{"Joined MIX channels:","Beigetretene MIX-Channels:"}.
{"joins the room","betritt den Raum"}.
{"July","Juli"}.
{"June","Juni"}.
@@ -349,6 +350,7 @@
{"Number of registered users","Anzahl der registrierten Benutzer"}.
{"Number of seconds after which to automatically purge items, or `max` for no specific limit other than a server imposed maximum","Anzahl der Sekunden, nach denen Elemente automatisch gelöscht werden sollen, oder `max`, wenn es keine spezifische Grenze gibt, außer einer vom Server festgelegten Höchstgrenze"}.
{"Occupants are allowed to invite others","Teilnehmer dürfen andere einladen"}.
{"Occupants are allowed to query others","Teilnehmer dürfen andere abfragen"}.
{"Occupants May Change the Subject","Teilnehmer dürfen das Thema ändern"}.
{"October","Oktober"}.
{"Offline Messages","Offline-Nachrichten"}.
@@ -366,6 +368,7 @@
{"Only members may query archives of this room","Nur Mitglieder dürfen den Verlauf dieses Raumes abrufen"}.
{"Only moderators and participants are allowed to change the subject in this room","Nur Moderatoren und Teilnehmer dürfen das Thema in diesem Raum ändern"}.
{"Only moderators are allowed to change the subject in this room","Nur Moderatoren dürfen das Thema in diesem Raum ändern"}.
{"Only moderators are allowed to retract messages","Nur Moderatoren dürfen Nachrichten zurückziehen"}.
{"Only moderators can approve voice requests","Nur Moderatoren können Sprachrecht-Anforderungen genehmigen"}.
{"Only occupants are allowed to send messages to the conference","Nur Teilnehmer dürfen Nachrichten an die Konferenz senden"}.
{"Only occupants are allowed to send queries to the conference","Nur Teilnehmer dürfen Anfragen an die Konferenz senden"}.
@@ -375,11 +378,13 @@
{"Only those on a whitelist may subscribe and retrieve items","Nur jemand auf einer Whitelist darf Items abonnieren und abrufen"}.
{"Organization Name","Name der Organisation"}.
{"Organization Unit","Abteilung"}.
{"Other Modules Available:","Andere Module verfügbar:"}.
{"Outgoing s2s Connections","Ausgehende s2s-Verbindungen"}.
{"Outgoing s2s Connections:","Ausgehende s2s-Verbindungen:"}.
{"Owner privileges required","Besitzerrechte erforderlich"}.
{"Packet relay is denied by service policy","Paket-Relay aufgrund der Dienstrichtlinien verweigert"}.
{"Packet","Paket"}.
{"Participant ID","Teilnehmer-ID"}.
{"Participant","Teilnehmer"}.
{"Password Verification","Passwort bestätigen"}.
{"Password Verification:","Passwort bestätigen:"}.
@@ -387,7 +392,6 @@
{"Password:","Passwort:"}.
{"Path to Dir","Pfad zum Verzeichnis"}.
{"Path to File","Pfad zur Datei"}.
{"Payload type","Nutzdatentyp"}.
{"Pending","Ausstehend"}.
{"Period: ","Zeitraum: "}.
{"Persist items to storage","Items dauerhaft speichern"}.
@@ -482,9 +486,11 @@
{"Shut Down Service","Dienst herunterfahren"}.
{"SOCKS5 Bytestreams","SOCKS5-Bytestreams"}.
{"Some XMPP clients can store your password in the computer, but you should do this only in your personal computer for safety reasons.","Einige XMPP-Clients speichern Ihr Passwort auf dem Computer. Aus Sicherheitsgründen sollten Sie das nur auf Ihrem persönlichen Computer tun."}.
{"Sources Specs:","Quellenspezifikationen:"}.
{"Specify the access model","Geben Sie das Zugangsmodell an"}.
{"Specify the event message type","Geben Sie den Ereignisnachrichtentyp an"}.
{"Specify the publisher model","Geben Sie das Veröffentlichermodell an"}.
{"Stanza id is not valid","Stanza-ID ist ungültig"}.
{"Stanza ID","Stanza-ID"}.
{"Statically specify a replyto of the node owner(s)","Ein 'replyto' des/der Nodebesitzer(s) statisch angeben"}.
{"Statistics of ~p","Statistiken von ~p"}.
@@ -527,6 +533,8 @@
{"The JIDs of those to contact with questions","Die JIDs jener, die bei Fragen zu kontaktieren sind"}.
{"The JIDs of those with an affiliation of owner","Die JIDs jener mit einer Zugehörigkeit von Besitzer"}.
{"The JIDs of those with an affiliation of publisher","Die JIDs jener mit einer Zugehörigkeit von Veröffentlicher"}.
{"The list of all online users","Die Liste aller angemeldeter Benutzer"}.
{"The list of all users","Die Liste aller Benutzer"}.
{"The list of JIDs that may associate leaf nodes with a collection","Die Liste der JIDs die Blattknoten mit einer Sammlung verknüpfen dürfen"}.
{"The maximum number of child nodes that can be associated with a collection, or `max` for no specific limit other than a server imposed maximum","Die Höchstzahl der untergeordneten Knoten, die einer Sammlung zugeordnet werden können, oder `max`, wenn es keine spezifische Begrenzung gibt, sondern nur eine vom Server festgelegte Höchstzahl"}.
{"The minimum number of milliseconds between sending any two notification digests","Die minimale Anzahl an Millisekunden zwischen dem Senden von zwei Benachrichtigungs-Übersichten"}.
@@ -550,7 +558,6 @@
{"The sender of the last received message","Der Absender der letzten erhaltenen Nachricht"}.
{"The stanza MUST contain only one <active/> element, one <default/> element, or one <list/> element","Das Stanza darf nur ein <active/>-Element, ein <default/>-Element oder ein <list/>-Element enthalten"}.
{"The subscription identifier associated with the subscription request","Die mit der Abonnement-Anforderung verknüpfte Abonnement-Bezeichnung"}.
{"The type of node data, usually specified by the namespace of the payload (if any)","Die Art der Knotendaten, üblicherweise vom Namensraum der Nutzdaten angegeben (gegebenenfalls)"}.
{"The URL of an XSL transformation which can be applied to payloads in order to generate an appropriate message body element.","Die URL einer XSL-Transformation welche auf Nutzdaten angewendet werden kann, um ein geeignetes Nachrichtenkörper-Element zu generieren."}.
{"The URL of an XSL transformation which can be applied to the payload format in order to generate a valid Data Forms result that the client could display using a generic Data Forms rendering engine","Die URL einer XSL-Transformation welche auf das Nutzdaten-Format angewendet werden kann, um ein gültiges Data Forms-Ergebnis zu generieren das der Client mit Hilfe einer generischen Data Forms-Rendering-Engine anzeigen könnte"}.
{"There was an error changing the password: ","Es trat ein Fehler beim Ändern des Passwortes auf: "}.
@@ -591,6 +598,7 @@
{"Unauthorized","Nicht autorisiert"}.
{"Unexpected action","Unerwartete Aktion"}.
{"Unexpected error condition: ~p","Unerwarteter Fehlerzustand: ~p"}.
{"Uninstall","Deinstallieren"}.
{"Unregister an XMPP account","Ein XMPP-Konto entfernen"}.
{"Unregister","Deregistrieren"}.
{"Unselect All","Alle abwählen"}.
@@ -601,7 +609,10 @@
{"Update plan","Aktualisierungsplan"}.
{"Update ~p","~p aktualisieren"}.
{"Update script","Aktualisierungsscript"}.
{"Update specs to get modules source, then install desired ones.","Aktualisieren Sie die Spezifikationen, um den Quellcode der Module zu erhalten und installieren Sie dann die gewünschten Module."}.
{"Update Specs","Spezifikationen aktualisieren"}.
{"Update","Aktualisieren"}.
{"Upgrade","Upgrade"}.
{"Uptime:","Betriebszeit:"}.
{"URL for Archived Discussion Logs","URL für archivierte Diskussionsprotokolle"}.
{"User already exists","Benutzer existiert bereits"}.
@@ -624,6 +635,7 @@
{"Value of '~s' should be integer","Wert von '~s' sollte eine Ganzzahl sein"}.
{"Value 'set' of 'type' attribute is not allowed","Wert 'set' des 'type'-Attributs ist nicht erlaubt"}.
{"vCard User Search","vCard-Benutzer-Suche"}.
{"View joined MIX channels","Beitretene MIX-Channel ansehen"}.
{"View Queue","Warteschlange ansehen"}.
{"View Roster","Kontaktliste ansehen"}.
{"Virtual Hosts","Virtuelle Hosts"}.
-8
View File
@@ -12,11 +12,6 @@
{"A Web Page","Μία ιστοσελίδα"}.
{"Accept","Αποδοχή"}.
{"Access denied by service policy","Άρνηση πρόσβασης, λόγω τακτικής παροχής υπηρεσιών"}.
{"Access model of authorize","Μοντέλο πρόσβασης της πιστοποίησης"}.
{"Access model of open","Μοντέλο πρόσβασης του ανοικτού"}.
{"Access model of presence","Μοντέλο πρόσβασης της παρουσίας"}.
{"Access model of roster","Μοντέλο πρόσβασης της Λίστας Επαφών"}.
{"Access model of whitelist","Μοντέλο πρόσβασης της Λευκής Λίστας"}.
{"Access model","Καθορίστε το μοντέλο πρόσβασης"}.
{"Account doesn't exist","Ο λογαριασμός δεν υπάρχει"}.
{"Action on user","Eνέργεια για το χρήστη"}.
@@ -219,7 +214,6 @@
{"It is not allowed to send error messages to the room. The participant (~s) has sent an error message (~s) and got kicked from the room","Δεν επιτρέπεται η αποστολή μηνυμάτων σφάλματος στο δωμάτιο. Ο συμμετέχων (~s) έχει στείλει ένα μήνυμα σφάλματος (~s) και έχει πεταχτεί έξω από την αίθουσα"}.
{"It is not allowed to send private messages of type \"groupchat\"","Δεν επιτρέπεται η αποστολή προσωπικών μηνυμάτων του τύπου \"groupchat\""}.
{"It is not allowed to send private messages to the conference","Δεν επιτρέπεται να στείλει προσωπικά μηνύματα για τη διάσκεψη"}.
{"It is not allowed to send private messages","Δεν επιτρέπεται η αποστολή προσωπικών μηνυμάτων"}.
{"Jabber ID","Ταυτότητα Jabber"}.
{"January","Ιανουάριος"}.
{"JID normalization denied by service policy","Απετράπη η κανονικοποίηση του JID, λόγω της τακτικής Παροχής Υπηρεσιών"}.
@@ -377,7 +371,6 @@
{"Password:","Κωδικός πρόσβασης:"}.
{"Path to Dir","Τοποθεσία κατάλογου αρχείων"}.
{"Path to File","Τοποθεσία Αρχείου"}.
{"Payload type","Τύπος φόρτου εργασιών"}.
{"Pending","Εκκρεμεί"}.
{"Period: ","Περίοδος: "}.
{"Persist items to storage","Μόνιμη αποθήκευση στοιχείων"}.
@@ -538,7 +531,6 @@
{"The sender of the last received message","Ο αποστολέας του τελευταίου εισερχομένου μηνύματος"}.
{"The stanza MUST contain only one <active/> element, one <default/> element, or one <list/> element","Η stanza ΠΡΕΠΕΙ να περιέχει μόνο ένα στοιχείο <active />, ένα στοιχείο <default /> ή ένα στοιχείο <list />"}.
{"The subscription identifier associated with the subscription request","Το αναγνωριστικό συνδρομής συσχετίστηκε με το αίτημα συνδρομής"}.
{"The type of node data, usually specified by the namespace of the payload (if any)","Ο τύπος των δεδομένων του κόμβου συνήθως προσδιορίζεται από το namespace του φόρτου εργασιών (αν υπάρχουν)"}.
{"The URL of an XSL transformation which can be applied to payloads in order to generate an appropriate message body element.","Το URL ενός μετασχηματισμού XSL το οποίο μπορεί να εφαρμοστεί σε φόρτους εργασίας για να παραχθεί το κατάλληλο στοιχείο του σώματος του μηνύματος."}.
{"The URL of an XSL transformation which can be applied to the payload format in order to generate a valid Data Forms result that the client could display using a generic Data Forms rendering engine","Το URL ενός μετασχηματισμού XSL, το οποίο μπορεί να εφαρμοστεί στους τύπους φόρτου εργασίας για να παραχθεί έγκυρο αποτέλεσμα Data Forms, τέτοιο που ο πελάτης μπορεί να εμφανίσει, χρησιμοποιώντας μια ευρείας χρήσης μηχανή επεξεργασίας Data Forms"}.
{"There was an error changing the password: ","Παρουσιάστηκε σφάλμα κατά την αλλαγή του κωδικού πρόσβασης: "}.
-4
View File
@@ -12,9 +12,6 @@
{"A Web Page","Retpaĝo"}.
{"Accept","Akcepti"}.
{"Access denied by service policy","Atingo rifuzita de serv-politiko"}.
{"Access model of open","Atingomodelo de malfermo"}.
{"Access model of presence","Atingomodelo de ĉeesto"}.
{"Access model of whitelist","Atingomodelo de permesolisto"}.
{"Access model","Atingomodelo"}.
{"Account doesn't exist","Konto ne ekzistas"}.
{"Action on user","Ago je uzanto"}.
@@ -163,7 +160,6 @@
{"is now known as","nun nomiĝas"}.
{"It is not allowed to send private messages of type \"groupchat\"","Malpermesas sendi mesaĝojn de tipo \"groupchat\""}.
{"It is not allowed to send private messages to the conference","Nur partoprenantoj rajtas sendi privatajn mesaĝojn al la babilejo"}.
{"It is not allowed to send private messages","Ne estas permesata sendi privatajn mesaĝojn"}.
{"Jabber ID","Jabber ID"}.
{"January","Januaro"}.
{"joins the room","eniras la babilejo"}.
+27 -9
View File
@@ -12,11 +12,6 @@
{"A Web Page","Una página web"}.
{"Accept","Aceptar"}.
{"Access denied by service policy","Acceso denegado por la política del servicio"}.
{"Access model of authorize","Modelo de acceso de Autorizar"}.
{"Access model of open","Modelo de acceso de Abierto"}.
{"Access model of presence","Modelo de acceso de Presencia"}.
{"Access model of roster","Modelo de acceso de Roster"}.
{"Access model of whitelist","Modelo de acceso de Lista Blanca"}.
{"Access model","Modelo de Acceso"}.
{"Account doesn't exist","La cuenta no existe"}.
{"Action on user","Acción en el usuario"}.
@@ -53,6 +48,7 @@
{"Anyone with a presence subscription of both or from may subscribe and retrieve items","Cualquiera con una suscripción a la presencia de 'ambos' o 'de' puede suscribirse y recibir elementos"}.
{"Anyone with Voice","Cualquiera con Voz"}.
{"Anyone","Cualquiera"}.
{"Apparently your account has no administration rights in this server. Please check how to grant admin rights in: https://docs.ejabberd.im/admin/installation/#administration-account","Aparentemente tu cuenta no tiene permisos de administración en este servidor. Por favor consulta cómo concederle privilegios de administrador en: https://docs.ejabberd.im/admin/installation/#administration-account"}.
{"April","Abril"}.
{"Attribute 'channel' is required for this request","El atributo 'channel' es necesario para esta petición"}.
{"Attribute 'id' is mandatory for MIX messages","El atributo 'id' es necesario para mensajes MIX"}.
@@ -79,6 +75,7 @@
{"Changing role/affiliation is not allowed","No está permitido cambiar el rol/afiliación"}.
{"Channel already exists","El canal ya existe"}.
{"Channel does not exist","El canal no existe"}.
{"Channel JID","JID del Canal"}.
{"Channels","Canales"}.
{"Characters not allowed:","Caracteres no permitidos:"}.
{"Chatroom configuration modified","Configuración de la sala modificada"}.
@@ -98,6 +95,7 @@
{"Configuration","Configuración"}.
{"Connected Resources:","Recursos conectados:"}.
{"Contact Addresses (normally, room owner or owners)","Direcciones de contacto (normalmente la del dueño o dueños de la sala)"}.
{"Contrib Modules","Módulos Contrib"}.
{"Country","País"}.
{"CPU Time:","Tiempo consumido de CPU:"}.
{"Current Discussion Topic","Tema de discusión actual"}.
@@ -172,6 +170,8 @@
{"Full List of Room Admins","Lista completa de administradores de la sala"}.
{"Full List of Room Owners","Lista completa de dueños de la sala"}.
{"Full Name","Nombre completo"}.
{"Get List of Online Users","Ver lista de usuarios conectados"}.
{"Get List of Registered Users","Ver lista de usuarios registrados"}.
{"Get Number of Online Users","Ver número de usuarios conectados"}.
{"Get Number of Registered Users","Ver número de usuarios registrados"}.
{"Get Pending","Obtener pendientes"}.
@@ -213,6 +213,8 @@
{"Incorrect value of 'action' attribute","Valor incorrecto del atributo 'action'"}.
{"Incorrect value of 'action' in data form","Valor incorrecto de 'action' en el formulario de datos"}.
{"Incorrect value of 'path' in data form","Valor incorrecto de 'path' en el formulario de datos"}.
{"Installed Modules:","Módulos Instalados:"}.
{"Install","Instalar"}.
{"Insufficient privilege","Privilegio insuficiente"}.
{"Internal server error","Error interno en el servidor"}.
{"Invalid 'from' attribute in forwarded message","Atributo 'from' no válido en el mensaje reenviado"}.
@@ -224,11 +226,12 @@
{"It is not allowed to send error messages to the room. The participant (~s) has sent an error message (~s) and got kicked from the room","No está permitido enviar mensajes de error a la sala. Este participante (~s) ha enviado un mensaje de error (~s) y fue expulsado de la sala"}.
{"It is not allowed to send private messages of type \"groupchat\"","No está permitido enviar mensajes privados del tipo \"groupchat\""}.
{"It is not allowed to send private messages to the conference","Impedir el envio de mensajes privados a la sala"}.
{"It is not allowed to send private messages","No está permitido enviar mensajes privados"}.
{"Jabber ID","Jabber ID"}.
{"January","Enero"}.
{"JID normalization denied by service policy","Se ha denegado la normalización del JID por política del servicio"}.
{"JID normalization failed","Ha fallado la normalización del JID"}.
{"Joined MIX channels of ~ts","Canales MIX unidos de ~ts"}.
{"Joined MIX channels:","Canales MIX unidos:"}.
{"joins the room","entra en la sala"}.
{"July","Julio"}.
{"June","Junio"}.
@@ -282,7 +285,7 @@
{"Modified modules","Módulos modificados"}.
{"Module failed to handle the query","El módulo falló al gestionar la petición"}.
{"Monday","Lunes"}.
{"Multicast","Multicast"}.
{"Multicast","Multidifusión"}.
{"Multiple <item/> elements are not allowed by RFC6121","No se permiten múltiples elementos <item/> en RFC6121"}.
{"Multi-User Chat","Salas de Charla"}.
{"Name in the rosters where this group will be displayed","Nombre del grupo con que aparecerá en las listas de contactos"}.
@@ -349,6 +352,7 @@
{"Number of registered users","Número de usuarios registrados"}.
{"Number of seconds after which to automatically purge items, or `max` for no specific limit other than a server imposed maximum","Número de segundos después de los cuales se purgarán elementos automáticamente, o `max` para no especificar un límite, más que el máximo impuesto por el servidor"}.
{"Occupants are allowed to invite others","Los ocupantes pueden invitar a otras personas"}.
{"Occupants are allowed to query others","Los ocupantes pueden enviar peticiones a otros"}.
{"Occupants May Change the Subject","Los ocupantes pueden cambiar el Asunto"}.
{"October","Octubre"}.
{"Offline Messages","Mensajes diferidos"}.
@@ -366,6 +370,7 @@
{"Only members may query archives of this room","Solo miembros pueden consultar el archivo de mensajes de la sala"}.
{"Only moderators and participants are allowed to change the subject in this room","Solo los moderadores y participantes pueden cambiar el asunto de esta sala"}.
{"Only moderators are allowed to change the subject in this room","Solo los moderadores pueden cambiar el asunto de esta sala"}.
{"Only moderators are allowed to retract messages","Solo los moderadores pueden retractarse de los mensajes"}.
{"Only moderators can approve voice requests","Solo los moderadores pueden aprobar peticiones de voz"}.
{"Only occupants are allowed to send messages to the conference","Solo los ocupantes pueden enviar mensajes a la sala"}.
{"Only occupants are allowed to send queries to the conference","Solo los ocupantes pueden enviar solicitudes a la sala"}.
@@ -375,11 +380,13 @@
{"Only those on a whitelist may subscribe and retrieve items","Solo quienes están en una lista blanca pueden suscribirse y recibir elementos"}.
{"Organization Name","Nombre de la organización"}.
{"Organization Unit","Unidad de la organización"}.
{"Other Modules Available:","Otros módulos disponibles:"}.
{"Outgoing s2s Connections","Conexiones S2S salientes"}.
{"Outgoing s2s Connections:","Conexiones S2S salientes:"}.
{"Owner privileges required","Se requieren privilegios de propietario de la sala"}.
{"Packet relay is denied by service policy","Se ha denegado el reenvío del paquete por política del servicio"}.
{"Packet","Paquete"}.
{"Participant ID","ID del Participante"}.
{"Participant","Participante"}.
{"Password Verification","Verificación de la contraseña"}.
{"Password Verification:","Verificación de la contraseña:"}.
@@ -387,7 +394,7 @@
{"Password:","Contraseña:"}.
{"Path to Dir","Ruta al directorio"}.
{"Path to File","Ruta al fichero"}.
{"Payload type","Tipo de payload"}.
{"Payload semantic type information","Información sobre el tipo semántico de la carga útil"}.
{"Pending","Pendiente"}.
{"Period: ","Periodo: "}.
{"Persist items to storage","Persistir elementos al almacenar"}.
@@ -482,9 +489,11 @@
{"Shut Down Service","Detener el servicio"}.
{"SOCKS5 Bytestreams","SOCKS5 Bytestreams"}.
{"Some XMPP clients can store your password in the computer, but you should do this only in your personal computer for safety reasons.","Algunos clientes XMPP pueden guardar tu contraseña en la máquina, pero solo deberías hacer esto en tu propia máquina personal, por razones de seguridad."}.
{"Sources Specs:","Especificaciones de Códigos Fuente:"}.
{"Specify the access model","Especifica el modelo de acceso"}.
{"Specify the event message type","Especifica el tipo del mensaje de evento"}.
{"Specify the publisher model","Especificar el modelo del publicante"}.
{"Stanza id is not valid","El identificador de la estrofa no es válido"}.
{"Stanza ID","ID del paquete"}.
{"Statically specify a replyto of the node owner(s)","Especificar de forma estática un 'replyto' de dueño(s) del nodo"}.
{"Statistics of ~p","Estadísticas de ~p"}.
@@ -527,6 +536,8 @@
{"The JIDs of those to contact with questions","Los JIDs a quienes contactar con preguntas"}.
{"The JIDs of those with an affiliation of owner","Los JIDs de quienes tienen una afiliación de dueños"}.
{"The JIDs of those with an affiliation of publisher","Los JIDs de quienes tienen una afiliación de publicadores"}.
{"The list of all online users","La lista de todos los usuarios conectados"}.
{"The list of all users","La lista de todos los usuarios"}.
{"The list of JIDs that may associate leaf nodes with a collection","La lista de JIDs que pueden asociar nodos hijo con una colección"}.
{"The maximum number of child nodes that can be associated with a collection, or `max` for no specific limit other than a server imposed maximum","El número máximo de nodos hijo que pueden asociarse a una colección, o `max` para no especificar un límite, más que el máximo impuesto por el servidor"}.
{"The minimum number of milliseconds between sending any two notification digests","El número mínimo de milisegundos entre dos envíos de resumen de notificaciones"}.
@@ -547,10 +558,10 @@
{"The query is only allowed from local users","La solicitud está permitida solo para usuarios locales"}.
{"The query must not contain <item/> elements","La solicitud no debe contener elementos <item/>"}.
{"The room subject can be modified by participants","El asunto de la sala puede ser modificado por los participantes"}.
{"The semantic type information of data in the node, usually specified by the namespace of the payload (if any)","La información semántica de los datos del nodo, normalmente es especificada por el espacio de los nombres de la carga útil (si existe)"}.
{"The sender of the last received message","El emisor del último mensaje recibido"}.
{"The stanza MUST contain only one <active/> element, one <default/> element, or one <list/> element","El paquete DEBE contener solo un elemento <active/>, un elemento <default/>, o un elemento <list/>"}.
{"The subscription identifier associated with the subscription request","El identificador de suscripción asociado con la petición de suscripción"}.
{"The type of node data, usually specified by the namespace of the payload (if any)","El tipo de datos del nodo, usualmente especificado por el namespace del payload (en caso de haberlo)"}.
{"The URL of an XSL transformation which can be applied to payloads in order to generate an appropriate message body element.","La URL de una transformación XSL que puede aplicarse a payloads para generar un elemento de contenido del mensaje apropiado."}.
{"The URL of an XSL transformation which can be applied to the payload format in order to generate a valid Data Forms result that the client could display using a generic Data Forms rendering engine","La URL de una transformación XSL que puede aplicarse al formato de payload para generar un resultado de Formulario de Datos válido, que el cliente pueda mostrar usando un mecanismo de dibujado genérico de Formulario de Datos"}.
{"There was an error changing the password: ","Hubo uno error al cambiar la contaseña: "}.
@@ -591,6 +602,7 @@
{"Unauthorized","No autorizado"}.
{"Unexpected action","Acción inesperada"}.
{"Unexpected error condition: ~p","Condición de error inesperada: ~p"}.
{"Uninstall","Desinstalar"}.
{"Unregister an XMPP account","Borrar una cuenta XMPP"}.
{"Unregister","Borrar"}.
{"Unselect All","Deseleccionar todo"}.
@@ -601,7 +613,10 @@
{"Update ~p","Actualizar ~p"}.
{"Update plan","Plan de actualización"}.
{"Update script","Script de actualización"}.
{"Update specs to get modules source, then install desired ones.","Actualizar Especificaciones para conseguir el código fuente de los módulos, luego instala los que quieras."}.
{"Update Specs","Actualizar Especificaciones"}.
{"Update","Actualizar"}.
{"Upgrade","Actualizar"}.
{"Uptime:","Tiempo desde el inicio:"}.
{"URL for Archived Discussion Logs","URL del registro de discusiones archivadas"}.
{"User already exists","El usuario ya existe"}.
@@ -624,6 +639,7 @@
{"Value of '~s' should be integer","El valor de '~s' debería ser un entero"}.
{"Value 'set' of 'type' attribute is not allowed","El valor 'set' del atributo 'type' no está permitido"}.
{"vCard User Search","Búsqueda de vCard de usuarios"}.
{"View joined MIX channels","Ver los canales MIX unidos"}.
{"View Queue","Ver Cola"}.
{"View Roster","Ver Lista de contactos"}.
{"Virtual Hosts","Dominios Virtuales"}.
@@ -644,6 +660,7 @@
{"Whether to allow subscriptions","Permitir subscripciones"}.
{"Whether to make all subscriptions temporary, based on subscriber presence","Si hacer que todas las suscripciones sean temporales, basado en la presencia del suscriptor"}.
{"Whether to notify owners about new subscribers and unsubscribes","Si notificar a los dueños sobre nuevas suscripciones y desuscripciones"}.
{"Who can send private messages","Quién puede enviar mensajes privados"}.
{"Who may associate leaf nodes with a collection","Quien puede asociar nodos hoja con una colección"}.
{"Wrong parameters in the web formulary","Parámetros incorrectos en el formulario web"}.
{"Wrong xmlns","XMLNS incorrecto"}.
@@ -655,6 +672,7 @@
{"XMPP Show Value of XA (Extended Away)","Valor 'Show' de XMPP: XA (Ausente Extendido)"}.
{"XMPP URI of Associated Publish-Subscribe Node","URI XMPP del Nodo Asociado de Publicar-Subscribir"}.
{"You are being removed from the room because of a system shutdown","Estás siendo expulsado de la sala porque el sistema se va a detener"}.
{"You are not allowed to send private messages","No tienes permitido enviar mensajes privados"}.
{"You are not joined to the channel","No has entrado en el canal"}.
{"You can later change your password using an XMPP client.","Puedes cambiar tu contraseña después, usando un cliente XMPP."}.
{"You have been banned from this room","Has sido bloqueado en esta sala"}.
+34 -6
View File
@@ -12,11 +12,6 @@
{"A Web Page","Une page Web"}.
{"Accept","Accepter"}.
{"Access denied by service policy","L'accès au service est refusé"}.
{"Access model of authorize","Modèle daccès de « autoriser »"}.
{"Access model of open","Modèle daccès de « ouvrir »"}.
{"Access model of presence","Modèle daccès de « présence »"}.
{"Access model of roster","Modèle daccès de « liste »"}.
{"Access model of whitelist","Modèle daccès de « liste blanche »"}.
{"Access model","Modèle daccès"}.
{"Account doesn't exist","Le compte nexiste pas"}.
{"Action on user","Action sur l'utilisateur"}.
@@ -169,6 +164,8 @@
{"Full List of Room Admins","Liste complète des administrateurs des salons"}.
{"Full List of Room Owners","Liste complète des propriétaires des salons"}.
{"Full Name","Nom complet"}.
{"Get List of Online Users","Récupérer les utilisateurs en ligne"}.
{"Get List of Registered Users","Récupérer les utilisateurs enregistrés"}.
{"Get Number of Online Users","Récupérer le nombre d'utilisateurs en ligne"}.
{"Get Number of Registered Users","Récupérer le nombre d'utilisateurs enregistrés"}.
{"Get User Last Login Time","Récupérer la dernière date de connexion de l'utilisateur"}.
@@ -184,6 +181,7 @@
{"has been kicked because of an affiliation change","a été éjecté à cause d'un changement d'autorisation"}.
{"has been kicked because the room has been changed to members-only","a été éjecté car la salle est désormais réservée aux membres"}.
{"has been kicked","a été expulsé"}.
{"Hats limit exceeded","La limite a été dépassée"}.
{"Host unknown","Serveur inconnu"}.
{"Host","Serveur"}.
{"HTTP File Upload","Téléversement de fichier HTTP"}.
@@ -217,7 +215,6 @@
{"It is not allowed to send error messages to the room. The participant (~s) has sent an error message (~s) and got kicked from the room","L'envoyer de messages d'erreur au salon n'est pas autorisé. Le participant (~s) à envoyé un message d'erreur (~s) et à été expulsé du salon"}.
{"It is not allowed to send private messages of type \"groupchat\"","Il n'est pas permis d'envoyer des messages privés de type \"groupchat\""}.
{"It is not allowed to send private messages to the conference","Il n'est pas permis d'envoyer des messages privés à la conférence"}.
{"It is not allowed to send private messages","L'envoi de messages privés n'est pas autorisé"}.
{"Jabber ID","Jabber ID"}.
{"January","Janvier"}.
{"joins the room","rejoint le salon"}.
@@ -250,6 +247,7 @@
{"May","Mai"}.
{"Membership is required to enter this room","Vous devez être membre pour accèder à ce salon"}.
{"Members:","Membres :"}.
{"Memorize your password, or write it in a paper placed in a safe place. In XMPP there isn't an automated way to recover your password if you forget it.","Mémorisez votre mot de passe, ou écrivez-le sur un papier conservé dans un endroit secret. Dans XMPP il n'y a pas de mécanisme pour retrouver votre mot de passe si vous l'avez oublié."}.
{"Memory","Mémoire"}.
{"Message body","Corps du message"}.
{"Message not found in forwarded payload","Message non trouvé dans l'enveloppe transférée"}.
@@ -265,6 +263,7 @@
{"Module failed to handle the query","Échec de traitement de la demande"}.
{"Monday","Lundi"}.
{"Multicast","Multidiffusion"}.
{"Multiple <item/> elements are not allowed by RFC6121","Les multiples éléments <item/> ne sont pas autorisés avec RFC6121"}.
{"Multi-User Chat","Discussion de groupe"}.
{"Name","Nom"}.
{"Name:","Nom :"}.
@@ -278,6 +277,8 @@
{"Nickname Registration at ","Enregistrement d'un pseudo sur "}.
{"Nickname ~s does not exist in the room","Le pseudo ~s n'existe pas dans ce salon"}.
{"Nickname","Pseudo"}.
{"No address elements found","Aucun élément d'adresse trouvé"}.
{"No addresses element found","Aucun élément d'adresses trouvé"}.
{"No 'affiliation' attribute found","Attribut 'affiliation' absent"}.
{"No available resource found","Aucune ressource disponible"}.
{"No body provided for announce message","Pas de corps de message pour l'annonce"}.
@@ -285,6 +286,7 @@
{"No data form found","Formulaire non trouvé"}.
{"No Data","Aucune information disponible"}.
{"No features available","Aucune fonctionalité disponible"}.
{"No <forwarded/> element found","Aucun élément <forwarded/> trouvé"}.
{"No hook has processed this command","Aucun gestionnaire n'a pris en charge cette commande"}.
{"No info about last activity found","Aucune activité précédente trouvée"}.
{"No 'item' element found","Aucun élément 'item' trouvé"}.
@@ -368,10 +370,15 @@
{"Please note that these options will only backup the builtin Mnesia database. If you are using the ODBC module, you also need to backup your SQL database separately.","Ces options sauvegardent uniquement la base de données interne Mnesia. Si vous utilisez le module ODBC vous devez sauvegarde votre base SQL séparément."}.
{"Please, wait for a while before sending new voice request","Attendez un moment avant de re-lancer une requête de voix"}.
{"Pong","Pong"}.
{"Possessing 'ask' attribute is not allowed by RFC6121","L'appartenance de l'attribut 'ask' n'est pas autorisé avec RFC6121"}.
{"Present real Jabber IDs to","Rendre le Jabber ID réel visible pour"}.
{"Previous session not found","Session précédente introuvable"}.
{"Previous session PID has been killed","Le précédent PID de session a été tuée"}.
{"Previous session PID has exited","Le précédent PID de session a quitté"}.
{"Previous session PID is dead","Le précédent PID de session est mort"}.
{"Previous session timed out","La session précédente a expiré"}.
{"private, ","privé, "}.
{"Public","Public"}.
{"Publish-Subscribe","Publication-Abonnement"}.
{"PubSub subscriber request","Demande d'abonnement PubSub"}.
{"Purge all items when the relevant publisher goes offline","Purger tous les items lorsque publieur est hors-ligne"}.
@@ -380,6 +387,10 @@
{"RAM and disc copy","Copie en mémoire vive (RAM) et sur disque"}.
{"RAM copy","Copie en mémoire vive (RAM)"}.
{"Really delete message of the day?","Confirmer la suppression du message du jour ?"}.
{"Receive notification from all descendent nodes","Recevoir les notifications de tous les nœuds descendants"}.
{"Receive notification from direct child nodes only","Recevoir les notifications des nœuds enfants seulement"}.
{"Receive notification of new items only","Recevoir les notifications des nouveaux éléments uniquement"}.
{"Receive notification of new nodes only","Recevoir les notifications de tous les nouveaux nœuds descendants"}.
{"Recipient is not in the conference room","Le destinataire n'est pas dans la conférence"}.
{"Register an XMPP account","Inscrire un compte XMPP"}.
{"Registered Users","Utilisateurs enregistrés"}.
@@ -412,9 +423,11 @@
{"Roster:","Liste de contacts :"}.
{"RPC Call Error","Erreur d'appel RPC"}.
{"Running Nodes","Nœuds actifs"}.
{"~s invites you to the room ~s","~s vous invite dans la salle de discussion ~s"}.
{"Saturday","Samedi"}.
{"Script check","Validation du script"}.
{"Search Results for ","Résultats de recherche pour "}.
{"Search the text","Recherche le texte"}.
{"Search until the date","Rechercher jusqu’à la date"}.
{"Search users in ","Rechercher des utilisateurs "}.
{"Select All","Tout sélectionner"}.
@@ -431,9 +444,12 @@
{"Show Integral Table","Montrer la table intégralement"}.
{"Show Ordinary Table","Montrer la table ordinaire"}.
{"Shut Down Service","Arrêter le service"}.
{"SOCKS5 Bytestreams","SOCKS5 Bytestreams"}.
{"Some XMPP clients can store your password in the computer, but you should do this only in your personal computer for safety reasons.","Certains clients XMPP peuvent stocker votre mot de passe sur votre ordinateur. N'utilisez cette fonctionnalité que si vous avez confiance en la sécurité de votre ordinateur."}.
{"Specify the access model","Définir le modèle d'accès"}.
{"Specify the event message type","Définir le type de message d'événement"}.
{"Specify the publisher model","Définir le modèle de publication"}.
{"Stanza ID","Identifiant Stanza"}.
{"Statistics of ~p","Statistiques de ~p"}.
{"Statistics","Statistiques"}.
{"Stop","Arrêter"}.
@@ -446,6 +462,7 @@
{"Submit","Soumettre"}.
{"Submitted","Soumis"}.
{"Subscriber Address","Adresse de l'abonné"}.
{"Subscribers may publish","Les souscripteurs peuvent publier"}.
{"Subscription","Abonnement"}.
{"Subscriptions are not allowed","Les abonnement ne sont pas autorisés"}.
{"Sunday","Dimanche"}.
@@ -466,8 +483,11 @@
{"The default language of the node","La langue par défaut du nœud"}.
{"The feature requested is not supported by the conference","La demande de fonctionalité n'est pas supportée par la conférence"}.
{"The JID of the node creator","Le JID du créateur du nœud"}.
{"The list of all online users","Les utilisateurs en ligne"}.
{"The list of all users","La liste de tous les utilisateurs"}.
{"The name of the node","Le nom du nœud"}.
{"The node is a collection node","Le nœud est un nœud de collecte"}.
{"The node is a leaf node (default)","Ce nœud est un nœud feuille (défaut)"}.
{"The number of subscribers to the node","Le nombre denregistrés au nœud"}.
{"The number of unread or undelivered messages","Le nombre de messages non lus ou non remis"}.
{"The password contains unacceptable characters","Le mot de passe contient des caractères non-acceptables"}.
@@ -484,6 +504,8 @@
{"There was an error changing the password: ","Une erreur sest produite lors de la modification du mot de passe : "}.
{"There was an error creating the account: ","Il y a eu une erreur en créant le compte : "}.
{"There was an error deleting the account: ","Il y a eu une erreur en effaçant le compte : "}.
{"This is case insensitive: macbeth is the same that MacBeth and Macbeth.","C'est insensible à la casse : macbeth est identique à MacBeth et Macbeth."}.
{"This page allows to register an XMPP account in this XMPP server. Your JID (Jabber ID) will be of the form: username@server. Please read carefully the instructions to fill correctly the fields.","Cette page permet de créer un compte XMPP sur ce serveur XMPP. Votre JID (Jabber IDentifier, identifiant Jabber) sera de la forme : nom@serveur. Prière de lire avec attention les instructions pour remplir correctement ces champs."}.
{"This page allows to unregister an XMPP account in this XMPP server.","Cette page permet de désenregistrer un compte XMPP sur ce serveur XMPP."}.
{"This room is not anonymous","Ce salon n'est pas anonyme"}.
{"This service can not process the address: ~s","Ce service ne peut pas traiter ladresse: ~s"}.
@@ -558,11 +580,16 @@
{"Wednesday","Mercredi"}.
{"When a new subscription is processed","Quand un nouvel abonnement est traité"}.
{"When to send the last published item","A quel moment envoyer le dernier élément publié"}.
{"Whether an entity wants to receive or disable notifications","Quand une entité veut recevoir ou désactiver les notifications"}.
{"Whether owners or publisher should receive replies to items","Quand les propriétaires ou annonceurs doivent revoir des réponses à leurs éléments"}.
{"Whether to allow subscriptions","Autoriser ou non les abonnements"}.
{"Whether to notify owners about new subscribers and unsubscribes","Quand notifier le propriétaire à propos des nouvelles souscriptions et désinscriptions"}.
{"Wrong parameters in the web formulary","Paramètres erronés dans le formulaire Web"}.
{"Wrong xmlns","Xmlns incorrect"}.
{"XMPP Account Registration","Enregistrement de compte XMPP"}.
{"XMPP Domains","Domaines XMPP"}.
{"You are being removed from the room because of a system shutdown","Vous avez été éjecté du salon de discussion en raison de l'arrêt du système"}.
{"You are not joined to the channel","Vous n'avez pas rejoint ce canal"}.
{"You can later change your password using an XMPP client.","Vous pouvez modifier ultérieurement votre mot de passe à laide dun client XMPP."}.
{"You have been banned from this room","Vous avez été exclus de ce salon"}.
{"You have joined too many conferences","Vous avec rejoint trop de conférences"}.
@@ -573,5 +600,6 @@
{"Your active privacy list has denied the routing of this stanza.","Votre règle de flitrage active a empêché le routage de ce stanza."}.
{"Your contact offline message queue is full. The message has been discarded.","La file d'attente de message de votre contact est pleine. Votre message a été détruit."}.
{"Your subscription request and/or messages to ~s have been blocked. To unblock your subscription request, visit ~s","Vos messages pour ~s sont bloqués. Pour les débloquer, veuillez visiter ~s"}.
{"Your XMPP account was successfully registered.","Votre compte XMPP a été enregistré avec succès."}.
{"Your XMPP account was successfully unregistered.","Votre compte XMPP a été désinscrit avec succès."}.
{"You're not allowed to create nodes","Vous n'êtes pas autorisé à créer des nœuds"}.
-1
View File
@@ -159,7 +159,6 @@
{"It is not allowed to send error messages to the room. The participant (~s) has sent an error message (~s) and got kicked from the room","Non está permitido enviar mensaxes de erro á sala. Este participante (~s) enviou unha mensaxe de erro (~s) e foi expulsado da sala"}.
{"It is not allowed to send private messages of type \"groupchat\"","Non está permitido enviar mensaxes privadas do tipo \"groupchat\""}.
{"It is not allowed to send private messages to the conference","Impedir o envio de mensaxes privadas á sala"}.
{"It is not allowed to send private messages","Non está permitido enviar mensaxes privadas"}.
{"Jabber ID","Jabber ID"}.
{"January","Xaneiro"}.
{"joins the room","entra na sala"}.
-2
View File
@@ -148,7 +148,6 @@
{"It is not allowed to send error messages to the room. The participant (~s) has sent an error message (~s) and got kicked from the room","אין זה מותר לשלוח הודעות שגיאה לחדר. משתתף זה (~s) שלח הודעת שגיאה (~s) ונבעט מתוך החדר"}.
{"It is not allowed to send private messages of type \"groupchat\"","אין זה מותר לשלוח הודעות פרטיות מן טיפוס \"groupchat\""}.
{"It is not allowed to send private messages to the conference","אין זה מותר לשלוח הודעות פרטיות לועידה"}.
{"It is not allowed to send private messages","אין זה מותר לשלוח הודעות פרטיות"}.
{"Jabber ID","מזהה Jabber"}.
{"January","ינואר"}.
{"joins the room","נכנס/ת אל החדר"}.
@@ -337,7 +336,6 @@
{"The collections with which a node is affiliated","האוספים עמם צומת מסונף"}.
{"The password is too weak","הסיסמה חלשה מדי"}.
{"the password is","הסיסמה היא"}.
{"The type of node data, usually specified by the namespace of the payload (if any)","סוג מידע ממסר, לרוב מצוין לפי מרחב־שמות של מטען הייעוד (אם בכלל)"}.
{"There was an error creating the account: ","אירעה שגיאה ביצירת החשבון: "}.
{"There was an error deleting the account: ","אירעה שגיאה במחיקת החשבון: "}.
{"This room is not anonymous","חדר זה אינו אנונימי"}.
-1
View File
@@ -170,7 +170,6 @@
{"It is not allowed to send error messages to the room. The participant (~s) has sent an error message (~s) and got kicked from the room","Nem engedélyezett hibaüzeneteket küldeni a szobába. A résztvevő (~s) hibaüzenetet (~s) küldött, és ki lett rúgva a szobából"}.
{"It is not allowed to send private messages of type \"groupchat\"","Nem engedélyezett „groupchat” típusú személyes üzeneteket küldeni"}.
{"It is not allowed to send private messages to the conference","Nem engedélyezett személyes üzeneteket küldeni a konferenciába"}.
{"It is not allowed to send private messages","Nem engedélyezett személyes üzeneteket küldeni"}.
{"Jabber ID","Jabber-azonosító"}.
{"January","január"}.
{"JID normalization denied by service policy","A Jabber-azonosító normalizálása megtagadva a szolgáltatási irányelv miatt"}.
-7
View File
@@ -12,11 +12,6 @@
{"A Web Page","Halaman web"}.
{"Accept","Diterima"}.
{"Access denied by service policy","Akses ditolak oleh kebijakan layanan"}.
{"Access model of authorize","Model akses otorisasi"}.
{"Access model of open","Model akses terbuka"}.
{"Access model of presence","Model akses kehadiran"}.
{"Access model of roster","model akses daftar kontak"}.
{"Access model of whitelist","Model akses daftar putih"}.
{"Access model","Model akses"}.
{"Account doesn't exist","Akun tidak ada"}.
{"Action on user","Tindakan pada pengguna"}.
@@ -207,7 +202,6 @@
{"is now known as","sekarang dikenal sebagai"}.
{"It is not allowed to send private messages of type \"groupchat\"","Hal ini tidak diperbolehkan untuk mengirim pesan pribadi jenis \"groupchat \""}.
{"It is not allowed to send private messages to the conference","Hal ini tidak diperbolehkan untuk mengirim pesan pribadi ke konferensi"}.
{"It is not allowed to send private messages","Hal ini tidak diperbolehkan untuk mengirim pesan pribadi"}.
{"Jabber ID","Jabber ID"}.
{"January","Januari"}.
{"joins the room","bergabung ke ruangan"}.
@@ -289,7 +283,6 @@
{"Password","Sandi"}.
{"Path to Dir","Jalur ke Dir"}.
{"Path to File","Jalur ke File"}.
{"Payload type","Tipe payload"}.
{"Pending","Tertunda"}.
{"Period: ","Periode: "}.
{"Persist items to storage","Pertahankan item ke penyimpanan"}.
-1
View File
@@ -125,7 +125,6 @@
{"is now known as","è ora conosciuta/o come"}.
{"It is not allowed to send private messages of type \"groupchat\"","Non è consentito l'invio di messaggi privati di tipo \"groupchat\""}.
{"It is not allowed to send private messages to the conference","Non è consentito l'invio di messaggi privati alla conferenza"}.
{"It is not allowed to send private messages","Non è consentito l'invio di messaggi privati"}.
{"Jabber ID","Jabber ID (Jabber ID)"}.
{"January","Gennaio"}.
{"joins the room","entra nella stanza"}.
-1
View File
@@ -166,7 +166,6 @@
{"It is not allowed to send error messages to the room. The participant (~s) has sent an error message (~s) and got kicked from the room","このルームにエラーメッセージを送ることは許可されていません。参加者(~s)はエラーメッセージを(~s)を送信してルームからキックされました。"}.
{"It is not allowed to send private messages of type \"groupchat\"","種別が\"groupchat\" であるプライベートメッセージを送信することはできません"}.
{"It is not allowed to send private messages to the conference","この会議にプライベートメッセージを送信することはできません"}.
{"It is not allowed to send private messages","プライベートメッセージを送信することはできません"}.
{"Jabber ID","Jabber ID"}.
{"January","1月"}.
{"joins the room","がチャットルームに参加しました"}.
-1
View File
@@ -129,7 +129,6 @@
{"is now known as","heet nu"}.
{"It is not allowed to send private messages of type \"groupchat\"","Er mogen geen privéberichten van het type \"groupchat\" worden verzonden"}.
{"It is not allowed to send private messages to the conference","Er mogen geen privéberichten naar de chatruimte worden verzonden"}.
{"It is not allowed to send private messages","Het is niet toegestaan priveberichten te sturen"}.
{"Jabber ID","Jabber ID"}.
{"January","Januari"}.
{"joins the room","betrad de chatruimte"}.
-3
View File
@@ -8,8 +8,6 @@
{"A password is required to enter this room","Et passord kreves for tilgang til samtalerommet"}.
{"Accept","Godta"}.
{"Access denied by service policy","Tilgang nektes på grunn av en tjenesteregel"}.
{"Access model of presence","Tilgangsmodell for tilstedeværelse"}.
{"Access model of roster","Tilgangsmodell for kontaktliste"}.
{"Action on user","Handling på bruker"}.
{"Add Jabber ID","Legg til Jabber-ID"}.
{"Add New","Legg til ny"}.
@@ -141,7 +139,6 @@
{"IP addresses","IP-adresser"}.
{"is now known as","er nå kjent som"}.
{"It is not allowed to send private messages to the conference","Det er ikke tillatt å sende private meldinger til konferansen"}.
{"It is not allowed to send private messages","Det er ikke tillatt å sende private meldinger"}.
{"Jabber ID","Jabber-ID"}.
{"January","januar"}.
{"JID normalization failed","JID-normalisering mislyktes"}.
-1
View File
@@ -159,7 +159,6 @@
{"It is not allowed to send error messages to the room. The participant (~s) has sent an error message (~s) and got kicked from the room","Użytkownik nie może wysyłać wiadomości o błędach do pokoju. Użytkownik (~s) wysłał błąd (~s) i został wyrzucony z pokoju"}.
{"It is not allowed to send private messages of type \"groupchat\"","Nie można wysyłać prywatnych wiadomości typu \"groupchat\""}.
{"It is not allowed to send private messages to the conference","Nie wolno wysyłac prywatnych wiadomości na konferencję"}.
{"It is not allowed to send private messages","Wysyłanie prywatnych wiadomości jest zabronione"}.
{"Jabber ID","Jabber ID"}.
{"January","Styczeń"}.
{"joins the room","dołącza do pokoju"}.
+30 -12
View File
@@ -12,11 +12,6 @@
{"A Web Page","Uma página da web"}.
{"Accept","Aceito"}.
{"Access denied by service policy","Acesso negado pela política do serviço"}.
{"Access model of authorize","Modelo de acesso da autorização"}.
{"Access model of open","Modelo para acesso aberto"}.
{"Access model of presence","Modelo para acesso presença"}.
{"Access model of roster","Modelo para acesso lista"}.
{"Access model of whitelist","Modelo de acesso da lista branca"}.
{"Access model","Modelo de acesso"}.
{"Account doesn't exist","A conta não existe"}.
{"Action on user","Ação no usuário"}.
@@ -53,6 +48,7 @@
{"Anyone with a presence subscription of both or from may subscribe and retrieve items","Qualquer pessoa com uma assinatura presente dos dois ou de ambos pode se inscrever e recuperar os itens"}.
{"Anyone with Voice","Qualquer pessoa com voz"}.
{"Anyone","Qualquer pessoa"}.
{"Apparently your account has no administration rights in this server. Please check how to grant admin rights in: https://docs.ejabberd.im/admin/installation/#administration-account","Aparentemente, a sua conta não tem direitos de administração neste servidor. Verifique como conceder os direitos administrativos em: https://docs.ejabberd.im/admin/installation/#administration-account"}.
{"April","Abril"}.
{"Attribute 'channel' is required for this request","O atributo 'canal' é necessário para esta solicitação"}.
{"Attribute 'id' is mandatory for MIX messages","O atributo 'id' é obrigatório para mensagens MIX"}.
@@ -79,6 +75,7 @@
{"Changing role/affiliation is not allowed","Não é permitida a alteração da função/afiliação"}.
{"Channel already exists","O canal já existe"}.
{"Channel does not exist","O canal não existe"}.
{"Channel JID","Canal JID"}.
{"Channels","Canais"}.
{"Characters not allowed:","Caracteres não aceitos:"}.
{"Chatroom configuration modified","Configuração da sala de bate-papo modificada"}.
@@ -98,6 +95,7 @@
{"Configuration","Configuração"}.
{"Connected Resources:","Recursos conectados:"}.
{"Contact Addresses (normally, room owner or owners)","Endereços de contato (normalmente, o proprietário ou os proprietários da sala)"}.
{"Contrib Modules","Módulos contrib"}.
{"Country","País"}.
{"CPU Time:","Tempo da CPU:"}.
{"Current Discussion Topic","Assunto em discussão"}.
@@ -172,13 +170,15 @@
{"Full List of Room Admins","Lista completa dos administradores das salas"}.
{"Full List of Room Owners","Lista completa dos proprietários das salas"}.
{"Full Name","Nome completo"}.
{"Get List of Online Users","Obter a lista de usuários online"}.
{"Get List of Registered Users","Obter a lista de usuários registrados"}.
{"Get Number of Online Users","Obter Número de Usuários Online"}.
{"Get Number of Registered Users","Obter Número de Usuários Registrados"}.
{"Get Pending","Obter os pendentes"}.
{"Get User Last Login Time","Obter a Data do Último Login"}.
{"Get User Password","Obter Senha do Usuário"}.
{"Get User Statistics","Obter Estatísticas do Usuário"}.
{"Given Name","Sobrenome"}.
{"Given Name","Prenome"}.
{"Grant voice to this person?","Dar voz a esta pessoa?"}.
{"Group","Grupo"}.
{"Groups that will be displayed to the members","Os grupos que serão exibidos para os membros"}.
@@ -213,6 +213,8 @@
{"Incorrect value of 'action' attribute","Valor incorreto do atributo 'action'"}.
{"Incorrect value of 'action' in data form","Valor incorreto de 'action' no formulário de dados"}.
{"Incorrect value of 'path' in data form","Valor incorreto de 'path' no formulário de dados"}.
{"Installed Modules:","Módulos instalados:"}.
{"Install","Instalar"}.
{"Insufficient privilege","Privilégio insuficiente"}.
{"Internal server error","Erro interno do servidor"}.
{"Invalid 'from' attribute in forwarded message","Atributo 'from' inválido na mensagem reenviada"}.
@@ -224,11 +226,12 @@
{"It is not allowed to send error messages to the room. The participant (~s) has sent an error message (~s) and got kicked from the room","Não é permitido o envio de mensagens de erro para a sala. O membro (~s) enviou uma mensagem de erro (~s) e foi expulso da sala"}.
{"It is not allowed to send private messages of type \"groupchat\"","Não é permitido enviar mensagens privadas do tipo \"groupchat\""}.
{"It is not allowed to send private messages to the conference","Não é permitido enviar mensagens privadas para a sala de conferência"}.
{"It is not allowed to send private messages","Não é permitido enviar mensagens privadas"}.
{"Jabber ID","ID Jabber"}.
{"January","Janeiro"}.
{"JID normalization denied by service policy","Normalização JID negada por causa da política de serviços"}.
{"JID normalization failed","A normalização JID falhou"}.
{"Joined MIX channels of ~ts","Entrou no canais MIX do ~ts"}.
{"Joined MIX channels:","Uniu-se aos canais MIX:"}.
{"joins the room","Entrar na sala"}.
{"July","Julho"}.
{"June","Junho"}.
@@ -242,7 +245,7 @@
{"Least significant bits of SHA-256 hash of text should equal hexadecimal label","Bits menos significativos do hash sha-256 do texto devem ser iguais ao rótulo hexadecimal"}.
{"leaves the room","Sair da sala"}.
{"List of rooms","Lista de salas"}.
{"List of users with hats","Lista os usuários com chapéus"}.
{"List of users with hats","Lista dos usuários com chapéus"}.
{"List users with hats","Lista os usuários com chapéus"}.
{"Logging","Registrando no log"}.
{"Low level update script","Script de atualização low level"}.
@@ -343,12 +346,13 @@
{"Notify subscribers when the node is deleted","Notificar assinantes quando o nó for eliminado se elimine"}.
{"November","Novembro"}.
{"Number of answers required","Quantidade de respostas necessárias"}.
{"Number of occupants","Número de participantes"}.
{"Number of occupants","Quantidade de ocupantes"}.
{"Number of Offline Messages","Quantidade das mensagens offline"}.
{"Number of online users","Número de usuários online"}.
{"Number of registered users","Número de usuários registrados"}.
{"Number of seconds after which to automatically purge items, or `max` for no specific limit other than a server imposed maximum","Quantidade de segundos após limpar automaticamente os itens ou `max` para nenhum limite específico que não seja um servidor imposto máximo"}.
{"Occupants are allowed to invite others","As pessoas estão autorizadas a convidar outras pessoas"}.
{"Occupants are allowed to query others","Os ocupantes estão autorizados a consultar os outros"}.
{"Occupants May Change the Subject","As pessoas talvez possam alterar o assunto"}.
{"October","Outubro"}.
{"Offline Messages","Mensagens offline"}.
@@ -366,6 +370,7 @@
{"Only members may query archives of this room","Somente os membros podem procurar nos arquivos desta sala"}.
{"Only moderators and participants are allowed to change the subject in this room","Somente os moderadores e os participamentes podem alterar o assunto desta sala"}.
{"Only moderators are allowed to change the subject in this room","Somente os moderadores podem alterar o assunto desta sala"}.
{"Only moderators are allowed to retract messages","Apenas moderadores estão autorizados a retirar mensagens"}.
{"Only moderators can approve voice requests","Somente moderadores podem aprovar requisições de voz"}.
{"Only occupants are allowed to send messages to the conference","Somente os ocupantes podem enviar mensagens à sala de conferência"}.
{"Only occupants are allowed to send queries to the conference","Somente os ocupantes podem enviar consultas à sala de conferência"}.
@@ -375,11 +380,13 @@
{"Only those on a whitelist may subscribe and retrieve items","Apenas aqueles presentes em uma lista branca podem se inscrever e recuperar os itens"}.
{"Organization Name","Nome da organização"}.
{"Organization Unit","Departamento/Unidade"}.
{"Other Modules Available:","Outros módulos disponíveis:"}.
{"Outgoing s2s Connections","Conexões s2s de Saída"}.
{"Outgoing s2s Connections:","Saída das conexões s2s:"}.
{"Owner privileges required","Se requer privilégios de proprietário da sala"}.
{"Packet relay is denied by service policy","A retransmissão de pacote é negada por causa da política de serviço"}.
{"Packet","Pacote"}.
{"Participant ID","ID do participante"}.
{"Participant","Participante"}.
{"Password Verification:","Verificação da Senha:"}.
{"Password Verification","Verificação de Senha"}.
@@ -387,7 +394,7 @@
{"Password:","Senha:"}.
{"Path to Dir","Caminho para o diretório"}.
{"Path to File","Caminho do arquivo"}.
{"Payload type","Tipo da carga útil"}.
{"Payload semantic type information","Informações de tipo semântico de carga útil"}.
{"Pending","Pendente"}.
{"Period: ","Período: "}.
{"Persist items to storage","Persistir elementos ao armazenar"}.
@@ -448,7 +455,7 @@
{"Room Configuration","Configuração de salas"}.
{"Room creation is denied by service policy","Sala não pode ser criada devido à política do serviço"}.
{"Room description","Descrição da Sala"}.
{"Room Occupants","Número de participantes"}.
{"Room Occupants","Ocupantes do quarto"}.
{"Room terminates","Terminação da sala"}.
{"Room title","Título da sala"}.
{"Roster groups allowed to subscribe","Listar grupos autorizados"}.
@@ -482,9 +489,11 @@
{"Shut Down Service","Parar Serviço"}.
{"SOCKS5 Bytestreams","Bytestreams SOCKS5"}.
{"Some XMPP clients can store your password in the computer, but you should do this only in your personal computer for safety reasons.","Alguns clientes XMPP podem armazenar a sua senha no seu computador, só faça isso no seu computador particular por questões de segurança."}.
{"Sources Specs:","Especificações das fontes:"}.
{"Specify the access model","Especificar os modelos de acesso"}.
{"Specify the event message type","Especificar o tipo de mensagem para o evento"}.
{"Specify the publisher model","Especificar o modelo do publicante"}.
{"Stanza id is not valid","A Stanza ID não é válido"}.
{"Stanza ID","ID da estrofe"}.
{"Statically specify a replyto of the node owner(s)","Defina uma resposta fixa do(s) proprietário(s) do nó"}.
{"Statistics of ~p","Estatísticas de ~p"}.
@@ -527,6 +536,8 @@
{"The JIDs of those to contact with questions","Os JIDs daqueles para entrar em contato com perguntas"}.
{"The JIDs of those with an affiliation of owner","Os JIDs daqueles com uma afiliação de proprietário"}.
{"The JIDs of those with an affiliation of publisher","Os JIDs daqueles com uma afiliação de editor"}.
{"The list of all online users","A lista de todos os usuários online"}.
{"The list of all users","A lista de todos os usuários"}.
{"The list of JIDs that may associate leaf nodes with a collection","A lista dos JIDs que podem associar as páginas dos nós em uma coleção"}.
{"The maximum number of child nodes that can be associated with a collection, or `max` for no specific limit other than a server imposed maximum","A quantidade máxima de nós relacionados que podem ser associados a uma coleção ou `máximo` para nenhum limite específico que não seja um servidor imposto no máximo"}.
{"The minimum number of milliseconds between sending any two notification digests","O número mínimo de milissegundos entre o envio do resumo das duas notificações"}.
@@ -547,10 +558,10 @@
{"The query is only allowed from local users","Esta consulta só é permitida a partir de usuários locais"}.
{"The query must not contain <item/> elements","A consulta não pode conter elementos <item/>"}.
{"The room subject can be modified by participants","O tema da sala pode ser alterada pelos próprios participantes"}.
{"The semantic type information of data in the node, usually specified by the namespace of the payload (if any)","Informações de tipo semântico dos dados no nó, geralmente especificadas pelo espaço de nomes da carga útil (se houver)"}.
{"The sender of the last received message","O remetente da última mensagem que foi recebida"}.
{"The stanza MUST contain only one <active/> element, one <default/> element, or one <list/> element","A instância DEVE conter apenas um elemento <active/>, um elemento <default/>, ou um elemento <list/>"}.
{"The subscription identifier associated with the subscription request","O identificador da assinatura associado à solicitação da assinatura"}.
{"The type of node data, usually specified by the namespace of the payload (if any)","O tipo dos dados do nó, normalmente definido pelo espaço dos nomes da carga útil (caso haja)"}.
{"The URL of an XSL transformation which can be applied to payloads in order to generate an appropriate message body element.","O URL da transformação XSL que pode ser aplicada nas cargas úteis para gerar um elemento apropriado no corpo da mensagem."}.
{"The URL of an XSL transformation which can be applied to the payload format in order to generate a valid Data Forms result that the client could display using a generic Data Forms rendering engine","A URL de uma transformação XSL que pode ser aplicada ao formato de carga útil para gerar um Formulário de Dados válido onde o cliente possa exibir usando um mecanismo genérico de renderização do Formulários de Dados"}.
{"There was an error changing the password: ","Houve um erro ao alterar a senha: "}.
@@ -591,6 +602,7 @@
{"Unauthorized","Não Autorizado"}.
{"Unexpected action","Ação inesperada"}.
{"Unexpected error condition: ~p","Condição de erro inesperada: ~p"}.
{"Uninstall","Desinstalar"}.
{"Unregister an XMPP account","Excluir uma conta XMPP"}.
{"Unregister","Deletar registro"}.
{"Unselect All","Desmarcar todos"}.
@@ -601,7 +613,10 @@
{"Update ~p","Atualizar ~p"}.
{"Update plan","Plano de Atualização"}.
{"Update script","Script de atualização"}.
{"Update specs to get modules source, then install desired ones.","Atualize as especificações para obter a fonte dos módulos e instale os que desejar."}.
{"Update Specs","Atualizar as especificações"}.
{"Update","Atualizar"}.
{"Upgrade","Atualização"}.
{"Uptime:","Tempo de atividade:"}.
{"URL for Archived Discussion Logs","A URL para o arquivamento dos registros da discussão"}.
{"User already exists","Usuário já existe"}.
@@ -624,6 +639,7 @@
{"Value of '~s' should be integer","Valor de '~s' deveria ser um inteiro"}.
{"Value 'set' of 'type' attribute is not allowed","Valor 'set' não permitido para atributo 'type'"}.
{"vCard User Search","Busca de Usuário vCard"}.
{"View joined MIX channels","Exibir os canais MIX aderidos"}.
{"View Queue","Exibir a fila"}.
{"View Roster","Ver a lista"}.
{"Virtual Hosts","Hosts virtuais"}.
@@ -644,6 +660,7 @@
{"Whether to allow subscriptions","Permitir subscrições"}.
{"Whether to make all subscriptions temporary, based on subscriber presence","Caso todas as assinaturas devam ser temporárias, com base na presença do assinante"}.
{"Whether to notify owners about new subscribers and unsubscribes","Caso deva notificar os proprietários sobre os novos assinantes e aqueles que cancelaram a assinatura"}.
{"Who can send private messages","Quem pode enviar mensagens privadas"}.
{"Who may associate leaf nodes with a collection","Quem pode associar as folhas dos nós em uma coleção"}.
{"Wrong parameters in the web formulary","O formulário web está com os parâmetros errados"}.
{"Wrong xmlns","Xmlns errado"}.
@@ -655,6 +672,7 @@
{"XMPP Show Value of XA (Extended Away)","XMPP Exiba o valor do XA (Ausência Estendida)"}.
{"XMPP URI of Associated Publish-Subscribe Node","XMPP URI da publicação do nó associado da assinatura"}.
{"You are being removed from the room because of a system shutdown","Você está sendo removido da sala por causa do desligamento do sistema"}.
{"You are not allowed to send private messages","Você não tem permissão para enviar mensagens privadas"}.
{"You are not joined to the channel","Você não está inscrito no canal"}.
{"You can later change your password using an XMPP client.","Você pode alterar a sua senha mais tarde usando um cliente XMPP."}.
{"You have been banned from this room","Você foi banido desta sala"}.
+20 -9
View File
@@ -3,7 +3,7 @@
%% To improve translations please read:
%% https://docs.ejabberd.im/developer/extending-ejabberd/localization/
{" (Add * to the end of field to match substring)"," (Adicione * no final do campo para combinar com a substring)"}.
{" (Add * to the end of field to match substring)"," (Adicione * no final do campo para combinar com a sub-cadeia)"}.
{" has set the subject to: "," colocou o tópico: "}.
{"# participants","# participantes"}.
{"A description of the node","Uma descrição do nó"}.
@@ -12,11 +12,6 @@
{"A Web Page","Uma página da web"}.
{"Accept","Aceito"}.
{"Access denied by service policy","Acesso negado pela política de serviço"}.
{"Access model of authorize","Modelo de acesso da autorização"}.
{"Access model of open","Modelo para acesso aberto"}.
{"Access model of presence","Modelo para acesso presença"}.
{"Access model of roster","Modelo para acesso lista"}.
{"Access model of whitelist","Modelo de acesso da lista branca"}.
{"Access model","Modelo de acesso"}.
{"Account doesn't exist","A conta não existe"}.
{"Action on user","Acção no utilizador"}.
@@ -79,6 +74,7 @@
{"Changing role/affiliation is not allowed","Não é permitida a alteração da função/afiliação"}.
{"Channel already exists","O canal já existe"}.
{"Channel does not exist","O canal não existe"}.
{"Channel JID","Canal JID"}.
{"Channels","Canais"}.
{"Characters not allowed:","Caracteres não aceitos:"}.
{"Chatroom configuration modified","Configuração da sala de bate-papo modificada"}.
@@ -98,6 +94,7 @@
{"Configuration","Configuração"}.
{"Connected Resources:","Recursos conectados:"}.
{"Contact Addresses (normally, room owner or owners)","Endereços de contato (normalmente, o proprietário ou os proprietários da sala)"}.
{"Contrib Modules","Módulos contrib"}.
{"Country","País"}.
{"CPU Time:","Tempo da CPU:"}.
{"Current Discussion Topic","Assunto em discussão"}.
@@ -172,6 +169,8 @@
{"Full List of Room Admins","Lista completa dos administradores das salas"}.
{"Full List of Room Owners","Lista completa dos proprietários das salas"}.
{"Full Name","Nome completo"}.
{"Get List of Online Users","Obter a lista de utilizadores online"}.
{"Get List of Registered Users","Obter a lista de utilizadores registados"}.
{"Get Number of Online Users","Obter quantidade de utilizadores online"}.
{"Get Number of Registered Users","Obter quantidade de utilizadores registados"}.
{"Get Pending","Obter os pendentes"}.
@@ -213,6 +212,8 @@
{"Incorrect value of 'action' attribute","Valor incorreto do atributo 'action'"}.
{"Incorrect value of 'action' in data form","Valor incorreto de 'action' no formulário de dados"}.
{"Incorrect value of 'path' in data form","Valor incorreto de 'path' no formulário de dados"}.
{"Installed Modules:","Módulos instalados:"}.
{"Install","Instalar"}.
{"Insufficient privilege","Privilégio insuficiente"}.
{"Internal server error","Erro interno do servidor"}.
{"Invalid 'from' attribute in forwarded message","Atributo 'from' inválido na mensagem reenviada"}.
@@ -224,11 +225,12 @@
{"It is not allowed to send error messages to the room. The participant (~s) has sent an error message (~s) and got kicked from the room","Não é permitido o envio de mensagens de erro para a sala. O membro (~s) enviou uma mensagem de erro (~s) e foi expulso da sala"}.
{"It is not allowed to send private messages of type \"groupchat\"","Não é permitido enviar mensagens privadas do tipo \"groupchat\""}.
{"It is not allowed to send private messages to the conference","Impedir o envio de mensagens privadas para a sala"}.
{"It is not allowed to send private messages","Não é permitido enviar mensagens privadas"}.
{"Jabber ID","ID Jabber"}.
{"January","Janeiro"}.
{"JID normalization denied by service policy","Normalização JID negada por causa da política de serviços"}.
{"JID normalization failed","A normalização JID falhou"}.
{"Joined MIX channels of ~ts","Entrou no canais MIX do ~ts"}.
{"Joined MIX channels:","Uniu-se aos canais MIX:"}.
{"joins the room","Entrar na sala"}.
{"July","Julho"}.
{"June","Junho"}.
@@ -349,6 +351,7 @@
{"Number of registered users","Quantidade de utilizadores registados"}.
{"Number of seconds after which to automatically purge items, or `max` for no specific limit other than a server imposed maximum","Quantidade de segundos após limpar automaticamente os itens ou `max` para nenhum limite específico que não seja um servidor imposto máximo"}.
{"Occupants are allowed to invite others","As pessoas estão autorizadas a convidar outras pessoas"}.
{"Occupants are allowed to query others","Os ocupantes estão autorizados a consultar os outros"}.
{"Occupants May Change the Subject","As pessoas talvez possam alterar o assunto"}.
{"October","Outubro"}.
{"Offline Messages","Mensagens offline"}.
@@ -375,11 +378,13 @@
{"Only those on a whitelist may subscribe and retrieve items","Apenas aqueles presentes numa lista branca podem se inscrever e recuperar os itens"}.
{"Organization Name","Nome da organização"}.
{"Organization Unit","Unidade da organização"}.
{"Other Modules Available:","Outros módulos disponíveis:"}.
{"Outgoing s2s Connections","Conexões s2s de Saída"}.
{"Outgoing s2s Connections:","Saída das conexões s2s:"}.
{"Owner privileges required","São necessários privilégios de dono"}.
{"Packet relay is denied by service policy","A retransmissão de pacote é negada por causa da política de serviço"}.
{"Packet","Pacote"}.
{"Participant ID","ID do participante"}.
{"Participant","Participante"}.
{"Password Verification:","Verificação da Palavra-passe:"}.
{"Password Verification","Verificação de Palavra-passe"}.
@@ -387,7 +392,6 @@
{"Password:","Palavra-chave:"}.
{"Path to Dir","Caminho para o directório"}.
{"Path to File","Caminho do ficheiro"}.
{"Payload type","Tipo da carga útil"}.
{"Pending","Pendente"}.
{"Period: ","Período: "}.
{"Persist items to storage","Persistir elementos ao armazenar"}.
@@ -482,6 +486,7 @@
{"Shut Down Service","Parar Serviço"}.
{"SOCKS5 Bytestreams","Bytestreams SOCKS5"}.
{"Some XMPP clients can store your password in the computer, but you should do this only in your personal computer for safety reasons.","Alguns clientes XMPP podem armazenar a sua palavra-passe no seu computador, só faça isso no seu computador particular por questões de segurança."}.
{"Sources Specs:","Especificações das fontes:"}.
{"Specify the access model","Especificar os modelos de acesso"}.
{"Specify the event message type","Especificar o tipo de mensagem para o evento"}.
{"Specify the publisher model","Especificar o modelo do publicante"}.
@@ -527,6 +532,8 @@
{"The JIDs of those to contact with questions","Os JIDs daqueles para entrar em contato com perguntas"}.
{"The JIDs of those with an affiliation of owner","Os JIDs daqueles com uma afiliação de proprietário"}.
{"The JIDs of those with an affiliation of publisher","Os JIDs daqueles com uma afiliação de editor"}.
{"The list of all online users","A lista de todos os utilizadores online"}.
{"The list of all users","A lista de todos os utilizadores"}.
{"The list of JIDs that may associate leaf nodes with a collection","A lista dos JIDs que podem associar as páginas dos nós numa coleção"}.
{"The maximum number of child nodes that can be associated with a collection, or `max` for no specific limit other than a server imposed maximum","A quantidade máxima de nós relacionados que podem ser associados a uma coleção ou `máximo` para nenhum limite específico que não seja um servidor imposto no máximo"}.
{"The minimum number of milliseconds between sending any two notification digests","A quantidade mínima de milissegundos entre o envio do resumo das duas notificações"}.
@@ -550,7 +557,6 @@
{"The sender of the last received message","O remetente da última mensagem que foi recebida"}.
{"The stanza MUST contain only one <active/> element, one <default/> element, or one <list/> element","A instância DEVE conter apenas um elemento <active/>, um elemento <default/>, ou um elemento <list/>"}.
{"The subscription identifier associated with the subscription request","O identificador da assinatura associado à solicitação da assinatura"}.
{"The type of node data, usually specified by the namespace of the payload (if any)","O tipo dos dados do nó, normalmente definido pelo espaço dos nomes da carga útil (caso haja)"}.
{"The URL of an XSL transformation which can be applied to payloads in order to generate an appropriate message body element.","O URL da transformação XSL que pode ser aplicada nas cargas úteis para gerar um elemento apropriado no corpo da mensagem."}.
{"The URL of an XSL transformation which can be applied to the payload format in order to generate a valid Data Forms result that the client could display using a generic Data Forms rendering engine","A URL de uma transformação XSL que pode ser aplicada ao formato de carga útil para gerar um Formulário de Dados válido onde o cliente possa exibir usando um mecanismo genérico de renderização do Formulários de Dados"}.
{"There was an error changing the password: ","Houve um erro ao alterar a palavra-passe: "}.
@@ -591,6 +597,7 @@
{"Unauthorized","Não Autorizado"}.
{"Unexpected action","Ação inesperada"}.
{"Unexpected error condition: ~p","Condição de erro inesperada: ~p"}.
{"Uninstall","Desinstalar"}.
{"Unregister an XMPP account","Excluir uma conta XMPP"}.
{"Unregister","Deletar registo"}.
{"Unselect All","Desmarcar todos"}.
@@ -601,7 +608,10 @@
{"Update ~p","Atualizar ~p"}.
{"Update plan","Plano de atualização"}.
{"Update script","Script de atualização"}.
{"Update specs to get modules source, then install desired ones.","Atualize as especificações para obter a fonte dos módulos e instale os que desejar."}.
{"Update Specs","Atualizar as especificações"}.
{"Update","Actualizar"}.
{"Upgrade","Atualização"}.
{"Uptime:","Tempo de atividade:"}.
{"URL for Archived Discussion Logs","A URL para o arquivamento dos registos da discussão"}.
{"User already exists","Utilizador já existe"}.
@@ -624,6 +634,7 @@
{"Value of '~s' should be integer","Valor de '~s' deveria ser um inteiro"}.
{"Value 'set' of 'type' attribute is not allowed","Valor 'set' não permitido para atributo 'type'"}.
{"vCard User Search","Busca de Utilizador vCard"}.
{"View joined MIX channels","Exibir os canais MIX aderidos"}.
{"View Queue","Exibir a fila"}.
{"View Roster","Ver a lista"}.
{"Virtual Hosts","Hosts virtuais"}.
+2 -1
View File
@@ -7,6 +7,7 @@
{" has set the subject to: "," установил(а) тему: "}.
{"A friendly name for the node","Легко запоминаемое имя для узла"}.
{"A password is required to enter this room","Чтобы войти в эту конференцию, нужен пароль"}.
{"A Web Page","Веб-страница"}.
{"Accept","Принять"}.
{"Access denied by service policy","Доступ запрещён политикой службы"}.
{"Account doesn't exist","Учётная запись не существует"}.
@@ -20,6 +21,7 @@
{"All activity","Вся статистика"}.
{"All Users","Все пользователи"}.
{"Allow this Jabber ID to subscribe to this pubsub node?","Разрешить этому Jabber ID подписаться на данный узел?"}.
{"Allow this person to register with the room?","Разрешить пользователю зарегистрироваться в комнате?"}.
{"Allow users to change the subject","Разрешить пользователям изменять тему"}.
{"Allow users to query other users","Разрешить iq-запросы к пользователям"}.
{"Allow users to send invites","Разрешить пользователям посылать приглашения"}.
@@ -178,7 +180,6 @@
{"It is not allowed to send error messages to the room. The participant (~s) has sent an error message (~s) and got kicked from the room","Запрещено посылать сообщения об ошибках в эту комнату. Участник (~s) послал сообщение об ошибке (~s) и был выкинут из комнаты"}.
{"It is not allowed to send private messages of type \"groupchat\"","Нельзя посылать частные сообщения типа \"groupchat\""}.
{"It is not allowed to send private messages to the conference","Не разрешается посылать частные сообщения прямо в конференцию"}.
{"It is not allowed to send private messages","Запрещено посылать приватные сообщения"}.
{"Jabber ID","Jabber ID"}.
{"January","января"}.
{"joins the room","вошёл(а) в комнату"}.
-1
View File
@@ -124,7 +124,6 @@
{"is now known as","sa premenoval(a) na"}.
{"It is not allowed to send private messages of type \"groupchat\"","Nie je dovolené odoslanie súkromnej správy typu \"Skupinová správa\" "}.
{"It is not allowed to send private messages to the conference","Nie je povolené odosielať súkromné správy do konferencie"}.
{"It is not allowed to send private messages","Nieje povolené posielať súkromné správy"}.
{"Jabber ID","Jabber ID"}.
{"January","Január"}.
{"joins the room","vstúpil(a) do miestnosti"}.

Some files were not shown because too many files have changed in this diff Show More